Chi-Tech
boundary_reflecting.cc
Go to the documentation of this file.
1#include "sweep_boundaries.h"
2
3#include "chi_log.h"
4#include "chi_mpi.h"
5
6//###################################################################
7/**Returns a pointer to a reflected flux storage location.*/
9HeterogeneousPsiIncoming(uint64_t cell_local_id,
10 unsigned int face_num,
11 unsigned int fi,
12 unsigned int angle_num,
13 int group_num,
14 size_t gs_ss_begin)
15{
16 double* Psi;
17
18 int reflected_angle_num = reflected_anglenum_[angle_num];
19
21 {
22 Psi = &hetero_boundary_flux_old_[reflected_angle_num]
23 [cell_local_id]
24 [face_num]
25 [fi][gs_ss_begin];
26 }
27 else
28 {
29 Psi = &hetero_boundary_flux_[reflected_angle_num]
30 [cell_local_id]
31 [face_num]
32 [fi][gs_ss_begin];
33 }
34
35 return Psi;
36}
37
38//###################################################################
39/**Returns a pointer to a heterogeneous flux storage location.*/
41HeterogeneousPsiOutgoing(uint64_t cell_local_id,
42 unsigned int face_num,
43 unsigned int fi,
44 unsigned int angle_num,
45 size_t gs_ss_begin)
46{
47 return &hetero_boundary_flux_[angle_num]
48 [cell_local_id]
49 [face_num]
50 [fi][gs_ss_begin];
51}
52
53
54//###################################################################
55/**Sets flags indicating reflected angles are ready to execute.*/
57UpdateAnglesReadyStatus(const std::vector<size_t>& angles, size_t gs_ss)
58{
59 for (const size_t n : angles)
60 angle_readyflags_[reflected_anglenum_[n]][gs_ss] = true;
61}
62
63//###################################################################
64/**Checks to see if angles are ready to execute.*/
66CheckAnglesReadyStatus(const std::vector<size_t>& angles, size_t gs_ss)
67{
68 if (opposing_reflected_) return true;
69 bool ready_flag = true;
70 for (auto& n : angles)
71 if (!hetero_boundary_flux_[reflected_anglenum_[n]].empty())
72 if (not angle_readyflags_[n][gs_ss]) return false;
73
74 return ready_flag;
75}
76
77//###################################################################
78/**Resets angle ready flags to false.*/
81{
82 hetero_boundary_flux_old_ = hetero_boundary_flux_;
83
84 for (auto& flags : angle_readyflags_)
85 for (int gs_ss=0; gs_ss<flags.size(); ++gs_ss)
86 flags[gs_ss] = false;
87}
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
bool CheckAnglesReadyStatus(const std::vector< size_t > &angles, size_t gs_ss) override
double * HeterogeneousPsiOutgoing(uint64_t cell_local_id, unsigned int face_num, unsigned int fi, unsigned int angle_num, size_t gs_ss_begin) override
void UpdateAnglesReadyStatus(const std::vector< size_t > &angles, size_t gs_ss) override