Chi-Tech
pi_keigen_scdsa_01_initialize.cc
Go to the documentation of this file.
1#include "pi_keigen_scdsa.h"
2
5
8
9#include "chi_runtime.h"
10#include "chi_log.h"
11
12namespace lbs
13{
14
16{
18
19 //=========================================== Make UnknownManager
20 const size_t num_gs_groups = front_gs_.groups_.size();
22 uk_man.AddUnknown(chi_math::UnknownType::VECTOR_N, num_gs_groups);
23
24 //=========================================== Make boundary conditions
26 /*vaccum_bcs_are_dirichlet=*/true);
27
28 //=========================================== Make xs map
29 auto matid_2_mgxs_map =
31 front_gs_.groups_.front().id_,
32 front_gs_.groups_.back().id_);
33
34 //=========================================== Create solver
35 const auto& sdm = lbs_solver_.SpatialDiscretization();
36 const auto& unit_cell_matrices = lbs_solver_.GetUnitCellMatrices();
37
38 if (diffusion_solver_sdm_ == "pwld")
39 diffusion_solver_ = std::make_shared<acceleration::DiffusionMIPSolver>(
40 std::string(TextName() + "_WGDSA"),
41 sdm,
42 uk_man,
43 bcs,
44 matid_2_mgxs_map,
45 unit_cell_matrices,
46 true); // verbosity
47 else
48 {
51 diffusion_solver_ = std::make_shared<acceleration::DiffusionPWLCSolver>(
52 std::string(TextName() + "_WGDSA"),
54 uk_man,
55 bcs,
56 matid_2_mgxs_map,
57 unit_cell_matrices,
58 true); // verbosity
59 requires_ghosts_ = true;
62
63 const auto& cfem_sdm = *continuous_sdm_ptr_;
64 const auto ghost_dof_ids =
65 cfem_sdm.GetGhostDOFIndices(lbs_solver_.UnknownManager());
66 }
67
68 {
69 auto& ds = diffusion_solver_;
70
71 ds->options.residual_tolerance = diff_accel_diffusion_l_abs_tol_;
72 ds->options.max_iters = diff_accel_diffusion_max_iters_;
73 ds->options.verbose = diff_accel_diffusion_verbose_;
74 ds->options.additional_options_string = diff_accel_diffusion_petsc_options_;
75 }
76
77 Chi::log.Log() << "Initializing diffusion solver";
78 diffusion_solver_->Initialize();
80 Chi::log.Log() << "Done Initializing diffusion solver";
81
82 Chi::log.Log() << "Assembling A and b";
83 std::vector<double> dummy_rhs;
84 if (diffusion_solver_sdm_ == "pwld")
85 dummy_rhs.assign(sdm.GetNumLocalDOFs(uk_man), 0.0);
86 else
87 dummy_rhs.assign(continuous_sdm_ptr_->GetNumLocalAndGhostDOFs(uk_man), 0.0);
88
89 diffusion_solver_->AssembleAand_b(dummy_rhs);
90 Chi::log.Log() << "Done Assembling A and b";
91}
92
93} // namespace lbs
static chi::ChiLog & log
Definition: chi_runtime.h:81
static chi::MPI_Info & mpi
Definition: chi_runtime.h:78
LogStream Log(LOG_LVL level=LOG_0)
Definition: chi_log.cc:35
void Barrier() const
Definition: mpi_info.cc:38
unsigned int AddUnknown(UnknownType unk_type, unsigned int dimension=0)
static std::shared_ptr< PieceWiseLinearContinuous > New(const chi_mesh::MeshContinuum &grid, QuadratureOrder q_order=QuadratureOrder::SECOND, CoordinateSystemType cs_type=CoordinateSystemType::CARTESIAN)
std::string TextName() const
Definition: chi_solver.cc:116
std::vector< LBSGroup > groups_
Definition: lbs_groupset.h:41
const chi_math::SpatialDiscretization & SpatialDiscretization() const
const std::map< uint64_t, std::shared_ptr< SweepBndry > > & SweepBoundaries() const
const chi_math::UnknownManager & UnknownManager() const
const std::map< int, XSPtr > & GetMatID2XSMap() const
const std::vector< UnitCellMatrices > & GetUnitCellMatrices() const
LBSGroupset & front_gs_
Definition: pi_keigen.h:24
const std::string diffusion_solver_sdm_
DiffusionSolverPtr diffusion_solver_
GhostInfo MakePWLDVecGhostCommInfo(const chi_math::SpatialDiscretization &sdm, const chi_math::UnknownManager &uk_man)
std::map< int, Multigroup_D_and_sigR > PackGroupsetXS(const std::map< int, MGXSPtr > &matid_to_xs_map, int first_grp_index, int last_group_index)
Definition: acceleration.cc:37
std::map< uint64_t, BoundaryCondition > TranslateBCs(const std::map< uint64_t, SwpBndryPtr > &sweep_boundaries, bool vaccum_bcs_are_dirichlet)
Definition: acceleration.cc:12