Chi-Tech
pi_keigen_scdsa_00_constrdestr.cc
Go to the documentation of this file.
1#include "pi_keigen_scdsa.h"
2
3#include "ChiObjectFactory.h"
4
5#include "chi_runtime.h"
6#include "chi_log.h"
7
8namespace lbs
9{
10
12
14{
17
19 "Generalized implementation of a k-Eigenvalue solver using Power "
20 "Iteration and with SCDSA acceleration.");
21 params.SetDocGroup("LBSExecutors");
22
24 "accel_pi_max_its",
25 50,
26 "Maximum allowable iterations for the acceleration scheme's inner "
27 "power iterations");
28
30 "accel_pi_k_tol",
31 1.0e-10,
32 "K-eigenvalue tolerance for the acceleration scheme's inner "
33 "power iterations");
34
36 "accel_pi_verbose",
37 false,
38 "Flag, if set will result in verbose output from the acceleration "
39 "scheme");
40
42 "diff_accel_diffusion_l_abs_tol",
43 1.0e-10,
44 "Absolute residual tolerance to use for the diffusion accelerator");
46 "diff_accel_diffusion_max_iters",
47 100,
48 "Maximum allowable iterations for the diffusion accelerator");
50 "diff_accel_diffusion_verbose",
51 false,
52 "Flag, if set will enable verbose output of the diffusion accelerator");
54 "diff_accel_diffusion_petsc_options",
55 std::string("ssss"),
56 "Additional PETSc options for the diffusion accelerator");
57
59 "diff_accel_sdm",
60 "pwld",
61 "Spatial discretization to use for the diffusion solver");
62
63 using namespace chi_data_types;
64 params.ConstrainParameterRange("diff_accel_sdm",
65 AllowableRangeList::New({"pwld", "pwlc"}));
66
67 return params;
68}
69
71 const chi::InputParameters& params)
72 : XXPowerIterationKEigen(params),
73 accel_pi_max_its_(params.GetParamValue<int>("accel_pi_max_its")),
74 accel_pi_k_tol_(params.GetParamValue<double>("accel_pi_k_tol")),
75 accel_pi_verbose_(params.GetParamValue<bool>("accel_pi_verbose")),
76 diffusion_solver_sdm_(params.GetParamValue<std::string>("diff_accel_sdm")),
77 diff_accel_diffusion_l_abs_tol_(
78 params.GetParamValue<double>("diff_accel_diffusion_l_abs_tol")),
79 diff_accel_diffusion_max_iters_(
80 params.GetParamValue<int>("diff_accel_diffusion_max_iters")),
81 diff_accel_diffusion_verbose_(
82 params.GetParamValue<bool>("diff_accel_diffusion_verbose")),
83 diff_accel_diffusion_petsc_options_(
84 params.GetParamValue<std::string>("diff_accel_diffusion_petsc_options"))
85{
86 ////=========================================== Make UnknownManager
87 // const size_t num_gs_groups = front_gs_.groups_.size();
88 // chi_math::UnknownManager uk_man;
89 // uk_man.AddUnknown(chi_math::UnknownType::VECTOR_N, num_gs_groups);
90 //
91 ////=========================================== Make boundary conditions
92 // auto bcs = acceleration::TranslateBCs(lbs_solver_.SweepBoundaries(),
93 // /*vaccum_bcs_are_dirichlet=*/true);
94 //
95 ////=========================================== Make xs map
96 // auto matid_2_mgxs_map =
97 // acceleration::PackGroupsetXS(lbs_solver_.GetMatID2XSMap(),
98 // front_gs_.groups_.front().id_,
99 // front_gs_.groups_.back().id_);
100 //
101 ////=========================================== Create solver
102 // const auto& sdm = lbs_solver_.SpatialDiscretization();
103 // const auto& unit_cell_matrices = lbs_solver_.GetUnitCellMatrices();
104 //
105 // if (diffusion_solver_sdm_ == "pwld")
106 // diffusion_solver_ = std::make_shared<acceleration::DiffusionMIPSolver>(
107 // std::string(TextName() + "_WGDSA"),
108 // sdm,
109 // uk_man,
110 // bcs,
111 // matid_2_mgxs_map,
112 // unit_cell_matrices,
113 // true); // verbosity
114 // else
115 //{
116 // continuous_sdm_ptr_ =
117 // chi_math::SpatialDiscretization_PWLC::New(sdm.ref_grid_);
118 // diffusion_solver_ = std::make_shared<acceleration::DiffusionPWLCSolver>(
119 // std::string(TextName() + "_WGDSA"),
120 // *continuous_sdm_ptr_,
121 // uk_man,
122 // bcs,
123 // matid_2_mgxs_map,
124 // unit_cell_matrices,
125 // true); // verbosity
126 // requires_ghosts_ = true;
127 // lbs_pwld_ghost_info_ = MakePWLDVecGhostCommInfo(
128 // lbs_solver_.SpatialDiscretization(), lbs_solver_.UnknownManager());
129 //
130 // const auto& cfem_sdm = *continuous_sdm_ptr_;
131 // const auto ghost_dof_ids =
132 // cfem_sdm.GetGhostDOFIndices(lbs_solver_.UnknownManager());
133 // }
134 //
135 //{
136 // typedef const std::string cstr;
137 // cstr l_abs_tol = "diff_accel_diffusion_l_abs_tol";
138 // cstr max_iters = "diff_accel_diffusion_max_iters";
139 // cstr verbose = "diff_accel_diffusion_verbose";
140 // cstr petsc_options = "diff_accel_diffusion_petsc_options";
141 //
142 // auto& ds = diffusion_solver_;
143 //
144 // ds->options.residual_tolerance = params.GetParamValue<double>(l_abs_tol);
145 // ds->options.max_iters = params.GetParamValue<int>(max_iters);
146 // ds->options.verbose = params.GetParamValue<bool>(verbose);
147 // if (not params.GetParamValue<std::string>(petsc_options).empty())
148 // ds->options.additional_options_string =
149 // params.GetParamValue<std::string>(petsc_options);
150 // }
151 //
152 // chi::log.Log() << "Initializing diffusion solver";
153 // diffusion_solver_->Initialize();
154 // Chi::mpi.Barrier();
155 // chi::log.Log() << "Done Initializing diffusion solver";
156 //
157 // chi::log.Log() << "Assembling A and b";
158 // std::vector<double> dummy_rhs;
159 // if (diffusion_solver_sdm_ == "pwld")
160 // dummy_rhs.assign(sdm.GetNumLocalDOFs(uk_man), 0.0);
161 // else
162 // dummy_rhs.assign(continuous_sdm_ptr_->GetNumLocalAndGhostDOFs(uk_man),
163 // 0.0);
164 //
165 // diffusion_solver_->AssembleAand_b(dummy_rhs);
166 // chi::log.Log() << "Done Assembling A and b";
167}
168
169} // namespace lbs
void SetDocGroup(const std::string &doc_group)
void ConstrainParameterRange(const std::string &param_name, AllowableRangePtr allowable_range)
void AddOptionalParameter(const std::string &name, T value, const std::string &doc_string)
void SetGeneralDescription(const std::string &description)
static chi::InputParameters GetInputParameters()
static chi::InputParameters GetInputParameters()
XXPowerIterationKEigenSCDSA(const chi::InputParameters &params)
RegisterChiObject(lbs, DiffusionDFEMSolver)