Chi-Tech
SweepChunk.h
Go to the documentation of this file.
1#ifndef CHITECH_SWEEPCHUNK_H
2#define CHITECH_SWEEPCHUNK_H
3
6
7namespace chi_math
8{
9class CellMapping;
10}
11
12namespace lbs
13{
14
16{
19
22
23 size_t gs_ss_begin_ = 0;
24 int gs_gi_ = 0;
25
26 const chi_mesh::Cell* cell_ptr_ = nullptr;
27 uint64_t cell_local_id_ = 0;
28
29 size_t angle_set_index_ = 0;
30 size_t angle_num_ = 0;
31
32public: // Set using SetupIncomingFace
34 size_t num_face_nodes_ = 0;
35 uint64_t neighbor_id_ = 0;
37
38 bool on_local_face_ = false;
39 bool on_boundary_ = false;
40
41public:
43
45
46 virtual const double* GetUpwindPsi(int face_node_local_idx) const = 0;
47 virtual double* GetDownwindPsi(int face_node_local_idx) const = 0;
48
49 virtual void SetupIncomingFace(int face_id,
50 size_t num_face_nodes,
51 uint64_t neighbor_id,
52 bool on_local_face,
53 bool on_boundary);
54 virtual void SetupOutgoingFace(int face_id,
55 size_t num_face_nodes,
56 uint64_t neighbor_id,
57 bool on_local_face,
58 bool on_boundary,
59 int locality);
60
61 virtual ~SweepDependencyInterface() = default;
62};
63
64// ##################################################################
65/**Base class for LBS sweepers*/
67{
68public:
70 std::vector<double>& destination_phi,
71 std::vector<double>& destination_psi,
72 const chi_mesh::MeshContinuum& grid,
73 const chi_math::SpatialDiscretization& discretization,
74 const std::vector<UnitCellMatrices>& unit_cell_matrices,
75 std::vector<lbs::CellLBSView>& cell_transport_views,
76 const std::vector<double>& source_moments,
77 const LBSGroupset& groupset,
78 const std::map<int, XSPtr>& xs,
79 int num_moments,
80 int max_num_cell_dofs,
81 std::unique_ptr<SweepDependencyInterface> sweep_dependency_interface_ptr);
82
83protected:
84 typedef std::function<void()> CallbackFunction;
85
88 const std::vector<UnitCellMatrices>& unit_cell_matrices_;
89 std::vector<lbs::CellLBSView>& grid_transport_view_;
90 const std::vector<double>& q_moments_;
92 const std::map<int, XSPtr>& xs_;
93 const int num_moments_;
95
96 std::unique_ptr<SweepDependencyInterface> sweep_dependency_interface_ptr_;
98
101
102 // Runtime params
103 size_t gs_ss_size_ = 0;
104 size_t gs_ss_begin_ = 0;
105 int gs_gi_ = 0;
106
107 std::vector<std::vector<double>> Amat_;
108 std::vector<std::vector<double>> Atemp_;
109 std::vector<double> source_;
110 std::vector<std::vector<double>> b_;
111
112 // Cell items
113 uint64_t cell_local_id_ = 0;
114 const chi_mesh::Cell* cell_ = nullptr;
117 size_t cell_num_faces_ = 0;
118 size_t cell_num_nodes_ = 0;
119 const MatVec3* G_ = nullptr;
120 const MatDbl* M_ = nullptr;
121 const std::vector<MatDbl>* M_surf_ = nullptr;
122 const std::vector<VecDbl>* IntS_shapeI_ = nullptr;
123
124 /**Callbacks at phase 1 : cell data established*/
125 std::vector<CallbackFunction> cell_data_callbacks_;
126
127 std::vector<double> face_mu_values_;
128 size_t direction_num_ = 0;
130 double direction_qweight_ = 0.0;
131
132 /**Callbacks at phase 2 : direction data established*/
133 std::vector<CallbackFunction> direction_data_callbacks_and_kernels_;
134
135 /**Callbacks at phase 3 : Surface integrals*/
136 std::vector<CallbackFunction> surface_integral_kernels_;
137
138 size_t g_ = 0;
139 size_t gsg_ = 0;
140 double sigma_tg_ = 0.0;
141
142 /**Callbacks at phase 4 : group by group mass terms*/
143 std::vector<CallbackFunction> mass_term_kernels_;
144
145 /**Callbacks at phase 5 : flux updates*/
146 std::vector<CallbackFunction> flux_update_kernels_;
147
148 /**Callbacks at phase 6 : Post cell-dir sweep*/
149 std::vector<CallbackFunction> post_cell_dir_sweep_callbacks_;
150
151 // 02 operations
152 /**Registers a kernel as a named callback function*/
153 void RegisterKernel(const std::string& name, CallbackFunction function);
154 /**Returns a kernel if the given name exists.*/
155 CallbackFunction Kernel(const std::string& name) const;
156 /**Executes the supplied kernels list.*/
157 static void ExecuteKernels(const std::vector<CallbackFunction>& kernels);
158 virtual void OutgoingSurfaceOperations();
159
160 // kernels
161public: // public so that we can use bind
165 void KernelPhiUpdate();
166 void KernelPsiUpdate();
167
168private:
169 std::map<std::string, CallbackFunction> kernels_;
170};
171
172} // namespace lbs
173
174#endif // CHITECH_SWEEPCHUNK_H
std::vector< double > * destination_psi
std::vector< double > * destination_phi
std::vector< std::vector< double > > Atemp_
Definition: SweepChunk.h:108
std::vector< CallbackFunction > surface_integral_kernels_
Definition: SweepChunk.h:136
std::vector< double > source_
Definition: SweepChunk.h:109
const std::vector< VecDbl > * IntS_shapeI_
Definition: SweepChunk.h:122
std::vector< CallbackFunction > flux_update_kernels_
Definition: SweepChunk.h:146
void KernelPhiUpdate()
Definition: SweepChunk.cc:196
const int num_moments_
Definition: SweepChunk.h:93
void KernelFEMSTDMassTerms()
Definition: SweepChunk.cc:160
chi_mesh::Vector3 omega_
Definition: SweepChunk.h:129
size_t cell_num_faces_
Definition: SweepChunk.h:117
size_t direction_num_
Definition: SweepChunk.h:128
void RegisterKernel(const std::string &name, CallbackFunction function)
Definition: SweepChunk.cc:57
double direction_qweight_
Definition: SweepChunk.h:130
size_t gs_ss_begin_
Definition: SweepChunk.h:104
std::function< void()> CallbackFunction
Definition: SweepChunk.h:84
const std::vector< UnitCellMatrices > & unit_cell_matrices_
Definition: SweepChunk.h:88
std::vector< double > face_mu_values_
Definition: SweepChunk.h:127
uint64_t cell_local_id_
Definition: SweepChunk.h:113
const std::vector< MatDbl > * M_surf_
Definition: SweepChunk.h:121
const MatDbl * M_
Definition: SweepChunk.h:120
const std::map< int, XSPtr > & xs_
Definition: SweepChunk.h:92
const size_t groupset_angle_group_stride_
Definition: SweepChunk.h:99
CellLBSView * cell_transport_view_
Definition: SweepChunk.h:116
std::vector< CallbackFunction > mass_term_kernels_
Definition: SweepChunk.h:143
const LBSGroupset & groupset_
Definition: SweepChunk.h:91
std::vector< CallbackFunction > direction_data_callbacks_and_kernels_
Definition: SweepChunk.h:133
const chi_math::SpatialDiscretization & grid_fe_view_
Definition: SweepChunk.h:87
void KernelPsiUpdate()
Definition: SweepChunk.cc:216
CallbackFunction Kernel(const std::string &name) const
Definition: SweepChunk.cc:69
const std::vector< double > & q_moments_
Definition: SweepChunk.h:90
SweepDependencyInterface & sweep_dependency_interface_
Definition: SweepChunk.h:97
void KernelFEMVolumetricGradientTerm()
Definition: SweepChunk.cc:121
std::map< std::string, CallbackFunction > kernels_
Definition: SweepChunk.h:169
size_t cell_num_nodes_
Definition: SweepChunk.h:118
virtual void OutgoingSurfaceOperations()
Definition: SweepChunk.cc:89
size_t gs_ss_size_
Definition: SweepChunk.h:103
double sigma_tg_
Definition: SweepChunk.h:140
static void ExecuteKernels(const std::vector< CallbackFunction > &kernels)
Definition: SweepChunk.cc:78
const chi_mesh::Cell * cell_
Definition: SweepChunk.h:114
std::vector< std::vector< double > > b_
Definition: SweepChunk.h:110
std::vector< std::vector< double > > Amat_
Definition: SweepChunk.h:107
std::vector< CallbackFunction > post_cell_dir_sweep_callbacks_
Definition: SweepChunk.h:149
const MatVec3 * G_
Definition: SweepChunk.h:119
const size_t groupset_group_stride_
Definition: SweepChunk.h:100
std::vector< CallbackFunction > cell_data_callbacks_
Definition: SweepChunk.h:125
const chi_mesh::MeshContinuum & grid_
Definition: SweepChunk.h:86
void KernelFEMUpwindSurfaceIntegrals()
Definition: SweepChunk.cc:132
const chi_math::CellMapping * cell_mapping_
Definition: SweepChunk.h:115
SweepChunk(std::vector< double > &destination_phi, std::vector< double > &destination_psi, const chi_mesh::MeshContinuum &grid, const chi_math::SpatialDiscretization &discretization, const std::vector< UnitCellMatrices > &unit_cell_matrices, std::vector< lbs::CellLBSView > &cell_transport_views, const std::vector< double > &source_moments, const LBSGroupset &groupset, const std::map< int, XSPtr > &xs, int num_moments, int max_num_cell_dofs, std::unique_ptr< SweepDependencyInterface > sweep_dependency_interface_ptr)
Definition: SweepChunk.cc:15
std::vector< lbs::CellLBSView > & grid_transport_view_
Definition: SweepChunk.h:89
const bool save_angular_flux_
Definition: SweepChunk.h:94
std::unique_ptr< SweepDependencyInterface > sweep_dependency_interface_ptr_
Definition: SweepChunk.h:96
std::vector< VecDbl > MatDbl
Definition: lbs_structs.h:19
std::vector< VecVec3 > MatVec3
Definition: lbs_structs.h:21
virtual void SetupOutgoingFace(int face_id, size_t num_face_nodes, uint64_t neighbor_id, bool on_local_face, bool on_boundary, int locality)
Definition: SweepChunk.cc:251
virtual const double * GetUpwindPsi(int face_node_local_idx) const =0
virtual ~SweepDependencyInterface()=default
const chi_mesh::Cell * cell_ptr_
Definition: SweepChunk.h:26
virtual void SetupIncomingFace(int face_id, size_t num_face_nodes, uint64_t neighbor_id, bool on_local_face, bool on_boundary)
Definition: SweepChunk.cc:236
chi_mesh::sweep_management::AngleSet * angle_set_
Definition: SweepChunk.h:20
virtual double * GetDownwindPsi(int face_node_local_idx) const =0