Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
SolverStorage.hpp
Go to the documentation of this file.
1// -------------------------------------------------------//
2//
3// SHAMROCK code for hydrodynamics
4// Copyright (c) 2021-2026 Timothée David--Cléris <tim.shamrock@proton.me>
5// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1
6// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information
7//
8// -------------------------------------------------------//
9
10#pragma once
11
19
22#include "shambackends/vec.hpp"
52#include <memory>
53
55
56 template<class T>
57 using Component = shambase::StorageComponent<T>;
58
59 template<class Tvec, class TgridVec, class Tmorton_>
61 public:
62 using Tmorton = Tmorton_;
63 using Tscal = shambase::VecComponent<Tvec>;
64 using Tgridscal = shambase::VecComponent<TgridVec>;
65 using TgridUint = typename std::make_unsigned<shambase::VecComponent<TgridVec>>::type;
66 static constexpr u32 dim = shambase::VectorProperties<Tvec>::dimension;
67
68 using RTree = RadixTree<Tmorton, TgridVec>;
69
71
72 std::shared_ptr<shamrock::solvergraph::IDataEdge<std::vector<u64>>> local_patch_ids;
73
74 std::shared_ptr<shamrock::solvergraph::RankGetter> patch_rank_owner;
75
76 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> dt_over2;
77
78 std::shared_ptr<shamrock::solvergraph::FieldRefs<TgridVec>> refs_block_min;
79 std::shared_ptr<shamrock::solvergraph::FieldRefs<TgridVec>> refs_block_max;
80
81 std::shared_ptr<shamrock::solvergraph::ScalarsEdge<TgridVec>> level0_size;
82 std::shared_ptr<shamrock::solvergraph::Field<TgridUint>> amr_block_levels;
83
84 std::shared_ptr<shamrock::solvergraph::Indexes<u32>> block_counts;
85 std::shared_ptr<shamrock::solvergraph::Indexes<u32>> block_counts_with_ghost;
86 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> refs_rho;
87 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tvec>> refs_rhov;
88 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> refs_rhoe;
89 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> refs_rho_dust;
90 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tvec>> refs_rhov_dust;
91
92 /* Field to save a snapshot of conservative variables before start refinement if 2nd order
93 * prolongation is required.*/
94 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> rho_vel_snap;
95 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> rho_snap;
96 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> rhoe_snap;
97
98 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> vel;
99 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> press;
100 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> vel_dust;
101 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> rho_primitive;
102
103 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> block_cell_sizes;
104 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> cell0block_aabb_lower;
105 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> coordinates;
106
107 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> grad_rho;
108 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dx_v;
109 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dy_v;
110 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dz_v;
111 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> grad_P;
113 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> grad_rho_dust;
115 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dx_v_dust;
117 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dy_v_dust;
119 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dz_v_dust;
120
122 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> euler_dt_rho;
124 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> euler_dt_vel;
126 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> euler_dt_press;
128 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> euler_dt_rho_dust;
130 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> euler_dt_vel_dust;
131
132 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> rho_mean;
133 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> simulation_volume;
134 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> cell_mass;
135
136 Component<shambase::DistributedData<shammath::AABB<TgridVec>>> merge_patch_bounds;
137
138 std::shared_ptr<solvergraph::TreeEdge<Tmorton, TgridVec>> trees;
139
140 std::shared_ptr<shammodels::basegodunov::solvergraph::OrientedAMRGraphEdge<Tvec, TgridVec>>
141 block_graph_edge;
142
143 std::shared_ptr<shammodels::basegodunov::solvergraph::OrientedAMRGraphEdge<Tvec, TgridVec>>
144 cell_graph_edge;
145
146 std::shared_ptr<shamrock::solvergraph::OperationSequence> solver_sequence;
147
148 std::shared_ptr<shamrock::solvergraph::OperationSequence> node_cons_to_prim;
149 std::shared_ptr<modules::NodeBuildTrees<Tmorton, TgridVec>> build_trees;
150
151 Component<SerialPatchTree<TgridVec>> serial_patch_tree;
152
153 Component<GhostZonesData<Tvec, TgridVec>> ghost_zone_infos;
154
155 std::shared_ptr<shamrock::patch::PatchDataLayerLayout> ghost_layout;
156
157 std::shared_ptr<shamrock::solvergraph::PatchDataLayerRefs> source_patches;
158
159 std::shared_ptr<shamrock::solvergraph::PatchDataLayerEdge> merged_patchdata_ghost;
160
161 std::shared_ptr<shamrock::solvergraph::PatchDataLayerDDShared> exchange_gz_edge;
162
163 std::shared_ptr<shamrock::solvergraph::DDSharedScalar<modules::GhostLayerCandidateInfos>>
164 ghost_layers_candidates_edge;
165
166 std::shared_ptr<shamrock::solvergraph::ScalarEdge<shammath::AABB<TgridVec>>> sim_box_edge;
167
168 std::shared_ptr<shamrock::solvergraph::DDSharedBuffers<u32>> idx_in_ghost;
169
170 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_xp;
171 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_xm;
172 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_yp;
173 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_ym;
174 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_zp;
175 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> rho_face_zm;
176
177 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_face_xp;
178 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_face_xm;
179 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_face_yp;
180 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_face_ym;
181 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_face_zp;
182 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_face_zm;
183
184 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> press_face_xp;
185 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> press_face_xm;
186 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> press_face_yp;
187 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> press_face_ym;
188 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> press_face_zp;
189 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>> press_face_zm;
190
191 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_face_xp;
192 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_face_xm;
193 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_face_yp;
194 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_face_ym;
195 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_face_zp;
196 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_face_zm;
197
198 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_face_xp;
199 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_face_xm;
200 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_face_yp;
201 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_face_ym;
202 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_face_zp;
203 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_face_zm;
204
205 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rhoe_face_xp;
206 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rhoe_face_xm;
207 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rhoe_face_yp;
208 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rhoe_face_ym;
209 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rhoe_face_zp;
210 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rhoe_face_zm;
211
212 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_dust_face_xp;
213 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_dust_face_xm;
214 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_dust_face_yp;
215 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_dust_face_ym;
216 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_dust_face_zp;
217 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tscal>> flux_rho_dust_face_zm;
218
219 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_dust_face_xp;
220 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_dust_face_xm;
221 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_dust_face_yp;
222 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_dust_face_ym;
223 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_dust_face_zp;
224 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<Tvec>> flux_rhov_dust_face_zm;
225
226 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> dtrho;
227 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dtrhov;
228 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> dtrhoe;
229
230 Component<shamrock::ComputeField<Tscal>> rho_next_no_drag;
231 Component<shamrock::ComputeField<Tvec>> rhov_next_no_drag;
232 Component<shamrock::ComputeField<Tscal>> rhoe_next_no_drag;
233
234 // next time step dust density before drag
235 Component<shamrock::ComputeField<Tscal>> rho_d_next_no_drag;
236 // next time step dust momentum before drag
237 Component<shamrock::ComputeField<Tvec>> rhov_d_next_no_drag;
238
239 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>
240 rho_dust_face_xp;
241 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>
242 rho_dust_face_xm;
243 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>
244 rho_dust_face_yp;
245 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>
246 rho_dust_face_ym;
247 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>
248 rho_dust_face_zp;
249 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tscal, 2>>>
250 rho_dust_face_zm;
251
252 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_dust_face_xp;
253 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_dust_face_xm;
254 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_dust_face_yp;
255 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_dust_face_ym;
256 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_dust_face_zp;
257 std::shared_ptr<solvergraph::NeighGraphLinkFieldEdge<std::array<Tvec, 2>>> vel_dust_face_zm;
258
259 // time derivative dust density
260 std::shared_ptr<shamrock::solvergraph::Field<Tscal>> dtrho_dust;
261 // time derivative dust momemtum
262 std::shared_ptr<shamrock::solvergraph::Field<Tvec>> dtrhov_dust;
263
264 struct Timings {
265 f64 interface = 0;
266 f64 neighbors = 0;
267 f64 io = 0;
268
270 void reset() { *this = {}; }
271 } timings_details;
272 };
273
274} // namespace shammodels::basegodunov
Defines the DDSharedBuffers class for managing buffers contained in a distributed data shared.
Shared distributed data layer for patch data management in solver graphs.
Defines the PatchDataLayerEdge class for managing patch data layer edges.
Declare a class to register and retrieve nodes and edges from a unique container.
double f64
Alias for double.
std::uint32_t u32
32 bit unsigned integer
The radix tree.
Definition RadixTree.hpp:50
std::shared_ptr< shamrock::solvergraph::Field< Tvec > > dy_v_dust
std::shared_ptr< shamrock::solvergraph::Field< Tvec > > dz_v_dust
std::shared_ptr< shamrock::solvergraph::Field< Tvec > > grad_rho_dust
std::shared_ptr< shamrock::solvergraph::Field< Tvec > > dx_v_dust
std::shared_ptr< shamrock::solvergraph::Field< Tvec > > euler_dt_vel_dust
std::shared_ptr< shamrock::solvergraph::Field< Tvec > > euler_dt_vel
std::shared_ptr< shamrock::solvergraph::Field< Tscal > > euler_dt_press
std::shared_ptr< shamrock::solvergraph::Field< Tscal > > euler_dt_rho
std::shared_ptr< shamrock::solvergraph::Field< Tscal > > euler_dt_rho_dust
A graph container for managing solver nodes and edges with type-safe access.
namespace for the basegodunov model
This file contains the definition for the stacktrace related functionality.
void reset()
Reset the timings logged in the storage.