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 "Domain/Structure/DirectionalIdMap.hpp" 10 : 11 : /// \cond 12 : class DataVector; 13 : /// \endcond 14 : 15 : namespace Particles::MonteCarlo { 16 : 17 : /// Structure used to gather ghost zone data for Monte-Carlo evolution. 18 : /// We need the rest mass density, electron fraction, temperature, and 19 : /// an estimate of the light-crossing time one cell deep within each 20 : /// neighboring element. 21 : template <size_t Dim> 22 1 : struct MortarData { 23 0 : DirectionalIdMap<Dim, std::optional<DataVector>> rest_mass_density{}; 24 0 : DirectionalIdMap<Dim, std::optional<DataVector>> electron_fraction{}; 25 0 : DirectionalIdMap<Dim, std::optional<DataVector>> temperature{}; 26 0 : DirectionalIdMap<Dim, std::optional<DataVector>> cell_light_crossing_time{}; 27 : 28 0 : void pup(PUP::er& p) { 29 : p | rest_mass_density; 30 : p | electron_fraction; 31 : p | temperature; 32 : p | cell_light_crossing_time; 33 : } 34 : }; 35 : 36 : namespace Tags { 37 : 38 : /// Simple tag containing the fluid and metric data in the ghost zones 39 : /// for Monte-Carlo packets evolution. 40 : template <size_t Dim> 41 1 : struct MortarDataTag : db::SimpleTag { 42 0 : using type = MortarData<Dim>; 43 : }; 44 : 45 : } // namespace Tags 46 : 47 : } // namespace Particles::MonteCarlo