Chi-Tech
lbs_structs.h
Go to the documentation of this file.
1#ifndef LBS_STRUCTS_H
2#define LBS_STRUCTS_H
3
4#include "math/chi_math.h"
7
8#include <functional>
9#include <map>
10
11namespace lbs
12{
13
14typedef std::vector<size_t> DirIDs; ///< Direction-IDs
15typedef std::vector<DirIDs> UniqueSOGroupings;
16typedef std::map<size_t, size_t> DirIDToSOMap;
17
18typedef std::vector<double> VecDbl;
19typedef std::vector<VecDbl> MatDbl;
20typedef std::vector<chi_mesh::Vector3> VecVec3;
21typedef std::vector<VecVec3> MatVec3;
22
23typedef std::shared_ptr<chi_physics::MultiGroupXS> XSPtr;
24typedef std::shared_ptr<chi_physics::IsotropicMultiGrpSource> IsotropicSrcPtr;
25
26enum class SolverType
27{
31};
32
33enum class GeometryType
34{
36 ONED_SLAB = 1,
42};
43
46{
47 using namespace chi_math;
48 switch (gtype)
49 {
53 return CoordinateSystemType::CARTESIAN;
55 return CoordinateSystemType::SPHERICAL;
58 return CoordinateSystemType::CYLINDRICAL;
59 default:
60 return CoordinateSystemType::CARTESIAN;
61 }
62}
63
65{
66 UNDEFINED = 0,
67 SINGLE = 1,
68 POLAR = 2,
69 AZIMUTHAL = 3,
70};
71
72enum class BoundaryType
73{
74 VACUUM = 1,
76 REFLECTING = 3,
78};
79
81{
83 std::vector<double> isotropic_mg_source;
84 std::string source_function;
85};
86
87enum SourceFlags : int
88{
97};
98
99inline SourceFlags operator|(const SourceFlags f1, const SourceFlags f2)
100{
101 return static_cast<SourceFlags>(static_cast<int>(f1) | static_cast<int>(f2));
102}
103
104enum class PhiSTLOption
105{
106 PHI_OLD = 1,
107 PHI_NEW = 2
108};
109
110class LBSGroupset;
111typedef std::function<void(LBSGroupset& groupset,
112 std::vector<double>& destination_q,
113 const std::vector<double>& phi,
114 SourceFlags source_flags)>
116
117class AGSSchemeEntry;
118
119/**Struct for storing LBS options.*/
121{
123
125 SDMType sd_type = SDMType::PIECEWISE_LINEAR_DISCONTINUOUS;
126 unsigned int scattering_order = 1;
127 int sweep_eager_limit = 32000; // see chiLBSSetProperty documentation
128
129 bool read_restart_data = false;
130 std::string read_restart_folder_name = std::string("YRestart");
131 std::string read_restart_file_base = std::string("restart");
132
133 bool write_restart_data = false;
134 std::string write_restart_folder_name = std::string("YRestart");
135 std::string write_restart_file_base = std::string("restart");
137
138 bool use_precursors = false;
139 bool use_src_moments = false;
140
141 bool save_angular_flux = false;
142
146
148 double power_default_kappa = 3.20435e-11; // 200MeV to Joule
149 double power_normalization = -1.0;
150
151 std::string field_function_prefix_option = "prefix";
152 std::string field_function_prefix; // Default is empty
153
154 Options() = default;
155
156 std::vector<AGSSchemeEntry> ags_scheme;
157};
158
159/**Transport view of a cell*/
161{
162private:
168 double volume_;
169 const std::vector<bool> face_local_flags_;
170 const std::vector<int> face_locality_;
171 const std::vector<const chi_mesh::Cell*> neighbor_cell_ptrs_;
172 std::vector<double> outflow_;
173
174public:
175 CellLBSView(size_t phi_address,
176 int num_nodes,
177 int num_groups,
178 int num_moments,
179 const chi_physics::MultiGroupXS& xs_mapping,
180 double volume,
181 const std::vector<bool>& face_local_flags,
182 const std::vector<int>& face_locality,
183 const std::vector<const chi_mesh::Cell*>& neighbor_cell_ptrs,
184 bool cell_on_boundary)
185 : phi_address_(phi_address),
186 num_nodes_(num_nodes),
187 num_groups_(num_groups),
188 num_grps_moms_(num_groups * num_moments),
189 xs_(&xs_mapping),
190 volume_(volume),
191 face_local_flags_(face_local_flags),
192 face_locality_(face_locality),
193 neighbor_cell_ptrs_(neighbor_cell_ptrs)
194 {
195 if (cell_on_boundary) outflow_.resize(num_groups_, 0.0);
196 }
197
198 size_t MapDOF(int node, int moment, int grp) const
199 {
200 return phi_address_ + node * num_grps_moms_ + num_groups_ * moment + grp;
201 }
202
203 const chi_physics::MultiGroupXS& XS() const { return *xs_; }
204
205 bool IsFaceLocal(int f) const { return face_local_flags_[f]; }
206 int FaceLocality(int f) const { return face_locality_[f]; }
207 const chi_mesh::Cell* FaceNeighbor(int f) const
208 {
209 return neighbor_cell_ptrs_[f];
210 }
211
212 int NumNodes() const { return num_nodes_; }
213
214 double Volume() const { return volume_; }
215
216 void ZeroOutflow() { outflow_.assign(outflow_.size(), 0.0); }
217 void ZeroOutflow(int g)
218 {
219 if (g < outflow_.size()) outflow_[g] = 0.0;
220 }
221 void AddOutflow(int g, double intS_mu_psi)
222 {
223 if (g < outflow_.size()) outflow_[g] += intS_mu_psi;
224 }
225
226 double GetOutflow(int g) const
227 {
228 if (g < outflow_.size()) return outflow_[g];
229 else
230 return 0.0;
231 }
232
234 {
235 xs_ = &xs_mapped;
236 }
237};
238
240{
245
246 std::vector<MatDbl> face_M_matrices;
247 std::vector<MatVec3> face_G_matrices;
248 std::vector<VecDbl> face_Si_vectors;
249};
250
252{
253 GROUPSET_ID = 1,
254 SCHEME = 2
255};
256
258{
259private:
261 const int groupset_id_ = 0;
262 const std::string scheme_name_;
263 std::vector<AGSSchemeEntry> scheme_entries_;
264
265public:
266 explicit AGSSchemeEntry(int groupset_id)
268 {
269 }
270
271 explicit AGSSchemeEntry(const std::string& scheme)
273 {
274 }
275
276 AGSSchemeEntryType Type() const { return type_; }
277 int GroupsetID() const { return groupset_id_; }
278
279 std::vector<AGSSchemeEntry>& SchemeEntries() { return scheme_entries_; }
280};
281
282} // namespace lbs
283
284#endif
Definition: lbs_structs.h:258
std::vector< AGSSchemeEntry > scheme_entries_
Definition: lbs_structs.h:263
const std::string scheme_name_
Definition: lbs_structs.h:262
int GroupsetID() const
Definition: lbs_structs.h:277
const AGSSchemeEntryType type_
Definition: lbs_structs.h:260
const int groupset_id_
Definition: lbs_structs.h:261
std::vector< AGSSchemeEntry > & SchemeEntries()
Definition: lbs_structs.h:279
AGSSchemeEntry(const std::string &scheme)
Definition: lbs_structs.h:271
AGSSchemeEntry(int groupset_id)
Definition: lbs_structs.h:266
AGSSchemeEntryType Type() const
Definition: lbs_structs.h:276
int NumNodes() const
Definition: lbs_structs.h:212
const chi_physics::MultiGroupXS & XS() const
Definition: lbs_structs.h:203
size_t MapDOF(int node, int moment, int grp) const
Definition: lbs_structs.h:198
void ReassingXS(const chi_physics::MultiGroupXS &xs_mapped)
Definition: lbs_structs.h:233
std::vector< double > outflow_
Definition: lbs_structs.h:172
double Volume() const
Definition: lbs_structs.h:214
double GetOutflow(int g) const
Definition: lbs_structs.h:226
const std::vector< const chi_mesh::Cell * > neighbor_cell_ptrs_
Definition: lbs_structs.h:171
const chi_physics::MultiGroupXS * xs_
Definition: lbs_structs.h:167
int FaceLocality(int f) const
Definition: lbs_structs.h:206
void ZeroOutflow(int g)
Definition: lbs_structs.h:217
const chi_mesh::Cell * FaceNeighbor(int f) const
Definition: lbs_structs.h:207
bool IsFaceLocal(int f) const
Definition: lbs_structs.h:205
const std::vector< int > face_locality_
Definition: lbs_structs.h:170
CellLBSView(size_t phi_address, int num_nodes, int num_groups, int num_moments, const chi_physics::MultiGroupXS &xs_mapping, double volume, const std::vector< bool > &face_local_flags, const std::vector< int > &face_locality, const std::vector< const chi_mesh::Cell * > &neighbor_cell_ptrs, bool cell_on_boundary)
Definition: lbs_structs.h:175
void AddOutflow(int g, double intS_mu_psi)
Definition: lbs_structs.h:221
const std::vector< bool > face_local_flags_
Definition: lbs_structs.h:169
SpatialDiscretizationType
Definition: chi_math.h:37
CoordinateSystemType
Definition: chi_math.h:29
std::vector< size_t > DirIDs
Direction-IDs.
Definition: lbs_structs.h:14
AGSSchemeEntryType
Definition: lbs_structs.h:252
BoundaryType
Definition: lbs_structs.h:73
@ INCIDENT_ANISTROPIC_HETEROGENEOUS
std::vector< VecDbl > MatDbl
Definition: lbs_structs.h:19
AngleAggregationType
Definition: lbs_structs.h:65
chi_math::CoordinateSystemType MapGeometryTypeToCoordSys(const GeometryType gtype)
Definition: lbs_structs.h:45
std::vector< chi_mesh::Vector3 > VecVec3
Definition: lbs_structs.h:20
SolverType
Definition: lbs_structs.h:27
SourceFlags
Definition: lbs_structs.h:88
@ ZERO_INCOMING_DELAYED_PSI
Definition: lbs_structs.h:96
@ APPLY_AGS_FISSION_SOURCES
Definition: lbs_structs.h:94
@ NO_FLAGS_SET
Definition: lbs_structs.h:89
@ APPLY_WGS_FISSION_SOURCES
Definition: lbs_structs.h:93
@ APPLY_FIXED_SOURCES
Definition: lbs_structs.h:90
@ SUPPRESS_WG_SCATTER
Definition: lbs_structs.h:95
@ APPLY_WGS_SCATTER_SOURCES
Definition: lbs_structs.h:91
@ APPLY_AGS_SCATTER_SOURCES
Definition: lbs_structs.h:92
std::map< size_t, size_t > DirIDToSOMap
Definition: lbs_structs.h:16
std::shared_ptr< chi_physics::IsotropicMultiGrpSource > IsotropicSrcPtr
Definition: lbs_structs.h:24
SourceFlags operator|(const SourceFlags f1, const SourceFlags f2)
Definition: lbs_structs.h:99
std::shared_ptr< chi_physics::MultiGroupXS > XSPtr
Definition: lbs_structs.h:23
PhiSTLOption
Definition: lbs_structs.h:105
std::vector< DirIDs > UniqueSOGroupings
Definition: lbs_structs.h:15
std::function< void(LBSGroupset &groupset, std::vector< double > &destination_q, const std::vector< double > &phi, SourceFlags source_flags)> SetSourceFunction
Definition: lbs_structs.h:110
std::vector< double > VecDbl
Definition: lbs_structs.h:18
std::vector< VecVec3 > MatVec3
Definition: lbs_structs.h:21
GeometryType
Definition: lbs_structs.h:34
std::vector< double > isotropic_mg_source
Definition: lbs_structs.h:83
std::string source_function
Definition: lbs_structs.h:84
std::string write_restart_file_base
Definition: lbs_structs.h:135
int sweep_eager_limit
Definition: lbs_structs.h:127
bool use_src_moments
Definition: lbs_structs.h:139
Options()=default
bool verbose_inner_iterations
Definition: lbs_structs.h:143
std::string read_restart_file_base
Definition: lbs_structs.h:131
std::string write_restart_folder_name
Definition: lbs_structs.h:134
GeometryType geometry_type
Definition: lbs_structs.h:124
std::string field_function_prefix_option
Definition: lbs_structs.h:151
double power_normalization
Definition: lbs_structs.h:149
bool verbose_ags_iterations
Definition: lbs_structs.h:144
bool verbose_outer_iterations
Definition: lbs_structs.h:145
bool read_restart_data
Definition: lbs_structs.h:129
std::string field_function_prefix
Definition: lbs_structs.h:152
bool write_restart_data
Definition: lbs_structs.h:133
double power_default_kappa
Definition: lbs_structs.h:148
unsigned int scattering_order
Definition: lbs_structs.h:126
double write_restart_interval
Definition: lbs_structs.h:136
std::vector< AGSSchemeEntry > ags_scheme
Definition: lbs_structs.h:156
bool use_precursors
Definition: lbs_structs.h:138
SDMType sd_type
Definition: lbs_structs.h:125
bool save_angular_flux
Definition: lbs_structs.h:141
chi_math::SpatialDiscretizationType SDMType
Definition: lbs_structs.h:122
std::string read_restart_folder_name
Definition: lbs_structs.h:130
bool power_field_function_on
Definition: lbs_structs.h:147
std::vector< VecDbl > face_Si_vectors
Definition: lbs_structs.h:248
std::vector< MatDbl > face_M_matrices
Definition: lbs_structs.h:246
std::vector< MatVec3 > face_G_matrices
Definition: lbs_structs.h:247