1#ifndef CHI_SWEEP_BOUNDARY_BASE_H
2#define CHI_SWEEP_BOUNDARY_BASE_H
55 unsigned int face_num,
57 unsigned int angle_num,
62 unsigned int face_num,
64 unsigned int angle_num,
95 uint64_t cell_local_id,
96 unsigned int face_num,
98 unsigned int angle_num,
100 size_t gs_ss_begin)
override;
113 std::vector<double> ref_boundary_flux,
122 uint64_t cell_local_id,
123 unsigned int face_num,
125 unsigned int angle_num,
127 size_t gs_ss_begin)
override;
168 std::vector<std::vector<bool>>&
172 unsigned int face_num,
174 unsigned int angle_num,
176 size_t gs_ss_begin)
override;
178 unsigned int face_num,
180 unsigned int angle_num,
181 size_t gs_ss_begin)
override;
184 size_t gs_ss)
override;
186 size_t gs_ss)
override;
197 size_t cell_global_id,
198 int cell_material_id,
199 unsigned int face_index,
200 unsigned int face_node_index,
203 const std::vector<int>& quadrature_angle_indices,
204 const std::vector<chi_mesh::Vector3>& quadrature_angle_vectors,
205 const std::vector<std::pair<double,double>>& quadrature_phi_theta_angles,
206 const std::vector<int>& group_indices,
228 std::unique_ptr<BoundaryFunction> in_bndry_function,
229 uint64_t in_ref_boundary_id,
239 unsigned int face_num,
241 unsigned int angle_num,
243 size_t gs_ss_begin)
override;
virtual std::vector< double > Evaluate(size_t cell_global_id, int cell_material_id, unsigned int face_index, unsigned int face_node_index, const chi_mesh::Vector3 &face_node_location, const chi_mesh::Vector3 &face_node_normal, const std::vector< int > &quadrature_angle_indices, const std::vector< chi_mesh::Vector3 > &quadrature_angle_vectors, const std::vector< std::pair< double, double > > &quadrature_phi_theta_angles, const std::vector< int > &group_indices, double time)=0
virtual ~BoundaryFunction()=default
std::vector< FaceData > CellData
std::vector< CellData > local_cell_data_
const uint64_t ref_boundary_id_
std::unique_ptr< BoundaryFunction > boundary_function_
std::vector< double > FaceNodeData
double * HeterogeneousPsiIncoming(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, int group_num, size_t gs_ss_begin) override
std::vector< FaceNodeData > FaceData
BoundaryIncidentHeterogeneous(size_t in_num_groups, std::unique_ptr< BoundaryFunction > in_bndry_function, uint64_t in_ref_boundary_id, chi_math::CoordinateSystemType coord_type=chi_math::CoordinateSystemType::CARTESIAN)
void Setup(const chi_mesh::MeshContinuum &grid, const chi_math::AngularQuadrature &quadrature) override
BoundaryIsotropicHomogenous(size_t in_num_groups, std::vector< double > ref_boundary_flux, chi_math::CoordinateSystemType coord_type=chi_math::CoordinateSystemType::CARTESIAN)
double * HeterogeneousPsiIncoming(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, int group_num, size_t gs_ss_begin) override
std::vector< double > boundary_flux
double * HeterogeneousPsiIncoming(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, int group_num, size_t gs_ss_begin) override
std::vector< std::vector< bool > > angle_readyflags_
bool IsOpposingReflected() const
bool CheckAnglesReadyStatus(const std::vector< size_t > &angles, size_t gs_ss) override
void SetOpposingReflected(bool value)
std::vector< AngVec > & GetHeteroBoundaryFluxOld()
double * HeterogeneousPsiOutgoing(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, size_t gs_ss_begin) override
std::vector< int > & GetReflectedAngleIndexMap()
void ResetAnglesReadyStatus()
std::vector< AngVec > & GetHeteroBoundaryFluxNew()
BoundaryReflecting(size_t in_num_groups, const chi_mesh::Normal &in_normal, chi_math::CoordinateSystemType coord_type=chi_math::CoordinateSystemType::CARTESIAN)
std::vector< AngVec > hetero_boundary_flux_
void UpdateAnglesReadyStatus(const std::vector< size_t > &angles, size_t gs_ss) override
std::vector< FaceVec > CellVec
std::vector< double > DOFVec
std::vector< AngVec > hetero_boundary_flux_old_
const chi_mesh::Vector3 & Normal() const
const chi_mesh::Normal normal_
std::vector< DOFVec > FaceVec
std::vector< CellVec > AngVec
std::vector< int > reflected_anglenum_
std::vector< std::vector< bool > > & GetAngleReadyFlags()
BoundaryVaccuum(size_t in_num_groups, chi_math::CoordinateSystemType coord_type=chi_math::CoordinateSystemType::CARTESIAN)
std::vector< double > boundary_flux_
double * HeterogeneousPsiIncoming(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, int group_num, size_t gs_ss_begin) override
double * ZeroFlux(int group_num)
chi_math::CoordinateSystemType CoordType() const
double GetEvaluationTime() const
SweepBoundary(BoundaryType bndry_type, size_t in_num_groups, chi_math::CoordinateSystemType coord_type)
const chi_math::CoordinateSystemType coord_type_
virtual void UpdateAnglesReadyStatus(const std::vector< size_t > &angles, size_t gs_ss)
virtual double * HeterogeneousPsiOutgoing(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, size_t gs_ss_begin)
const chi_mesh::sweep_management::BoundaryType type_
virtual bool CheckAnglesReadyStatus(const std::vector< size_t > &angles, size_t gs_ss)
void SetEvaluationTime(double time)
virtual ~SweepBoundary()=default
BoundaryType Type() const
double evaluation_time_
Time value passed to boundary functions.
std::vector< double > zero_boundary_flux_
bool IsReflecting() const
virtual void Setup(const chi_mesh::MeshContinuum &grid, const chi_math::AngularQuadrature &quadrature)
virtual double * HeterogeneousPsiIncoming(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, int group_num, size_t gs_ss_begin)
@ INCIDENT_ANISOTROPIC_HETEROGENEOUS
Complex different for each angle and face node.
@ INCIDENT_ISOTROPIC_HOMOGENOUS
One value for all angles, homogenous in space.
@ REFLECTING
Reflecting boundary condition about a normal.
@ INCIDENT_VACCUUM
Zero for all angles, space.