Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <optional>
7 :
8 : #include "DataStructures/DataBox/Tag.hpp"
9 : #include "DataStructures/Tensor/TypeAliases.hpp"
10 : #include "Domain/Structure/DirectionalIdMap.hpp"
11 :
12 : /// \cond
13 : class DataVector;
14 : /// \endcond
15 :
16 : namespace Particles::MonteCarlo {
17 :
18 : /// Structure used to gather ghost zone data for Monte-Carlo evolution.
19 : /// We need the rest mass density, electron fraction, temperature, and
20 : /// an estimate of the light-crossing time one cell deep within each
21 : /// neighboring element.
22 : template <size_t Dim>
23 1 : struct MortarData {
24 0 : DirectionalIdMap<Dim, std::optional<DataVector>> rest_mass_density{};
25 0 : DirectionalIdMap<Dim, std::optional<DataVector>> electron_fraction{};
26 0 : DirectionalIdMap<Dim, std::optional<DataVector>> temperature{};
27 0 : DirectionalIdMap<Dim, std::optional<DataVector>> cell_light_crossing_time{};
28 :
29 0 : void pup(PUP::er& p) {
30 : p | rest_mass_density;
31 : p | electron_fraction;
32 : p | temperature;
33 : p | cell_light_crossing_time;
34 : }
35 : };
36 :
37 : /// Structure used to gather fluid coupling data for Monte-Carlo evolution.
38 : /// We need the energy, momentum, and composition coupling
39 : template <size_t Dim>
40 1 : struct GhostZoneCouplingData {
41 0 : DirectionalIdMap<Dim, std::optional<DataVector>> coupling_tilde_tau{};
42 0 : DirectionalIdMap<Dim, std::optional<DataVector>> coupling_tilde_rho_ye{};
43 : DirectionalIdMap<Dim,
44 : std::optional<tnsr::i<DataVector, Dim, Frame::Inertial>>>
45 0 : coupling_tilde_s{};
46 :
47 0 : void pup(PUP::er& p) {
48 : p | coupling_tilde_tau;
49 : p | coupling_tilde_rho_ye;
50 : p | coupling_tilde_s;
51 : }
52 : };
53 :
54 : namespace Tags {
55 :
56 : /// Simple tag containing the fluid and metric data in the ghost zones
57 : /// for Monte-Carlo packets evolution.
58 : template <size_t Dim>
59 1 : struct MortarDataTag : db::SimpleTag {
60 0 : using type = MortarData<Dim>;
61 : };
62 :
63 : /// Simple tag containing the coupling data in the ghost zones
64 : /// for Monte-Carlo packets evolution.
65 : template <size_t Dim>
66 1 : struct GhostZoneCouplingDataTag : db::SimpleTag {
67 0 : using type = GhostZoneCouplingData<Dim>;
68 : };
69 :
70 : } // namespace Tags
71 :
72 : } // namespace Particles::MonteCarlo
|