Skip to content

Commit 7b99dff

Browse files
committed
Adding synthetic regression test.
1 parent a56d3c4 commit 7b99dff

10 files changed

Lines changed: 846 additions & 115 deletions

File tree

framework/materials/multi_group_xs/cepxs_import.cc

Lines changed: 142 additions & 113 deletions
Large diffs are not rendered by default.

framework/math/spatial_discretization/cell_mappings/finite_element/piecewise_linear/piecewise_linear_slab_mapping.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,8 @@ PieceWiseLinearSlabMapping::MakeSurfaceFiniteElementData(size_t face_index) cons
243243
for (size_t qp = 0; qp < num_srf_qpoints; ++qp)
244244
{
245245
F_JxW.push_back(JxW);
246-
247-
F_qpoints_xyz.emplace_back(0.0, 0.0, f);
246+
const auto face_xyz = (f == 0) ? grid_->vertices[v0i_] : grid_->vertices[v1i_];
247+
F_qpoints_xyz.push_back(face_xyz);
248248
}
249249

250250
F_num_nodes = 1;

modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.cc

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,15 @@ LBSProblem::GetPowerFieldFunction() const
507507
return field_functions_[power_gen_fieldfunc_local_handle_];
508508
}
509509

510+
std::shared_ptr<FieldFunctionGridBased>
511+
LBSProblem::GetEnergyDepositionFieldFunction() const
512+
{
513+
OpenSnLogicalErrorIf(not options_.energy_deposition_field_function_on,
514+
"Called when options_.energy_deposition_field_function_on == false");
515+
516+
return field_functions_[energy_dep_fieldfunc_local_handle_];
517+
}
518+
510519
InputParameters
511520
LBSProblem::GetOptionsBlock()
512521
{
@@ -556,6 +565,11 @@ LBSProblem::GetOptionsBlock()
556565
"Flag to control the creation of the power generation field "
557566
"function. If set to `true` then a field function will be created "
558567
"with the general name <solver_name>_power_generation`.");
568+
params.AddOptionalParameter("energy_deposition_field_function_on",
569+
false,
570+
"Flag to control the creation of an energy-deposition field "
571+
"function. If set to `true` then a field function will be created "
572+
"with the general name <solver_name>_energy_deposition`.");
559573
params.AddOptionalParameter("power_default_kappa",
560574
3.20435e-11,
561575
"Default `kappa` value (Energy released per fission) to use for "
@@ -657,6 +671,9 @@ LBSProblem::ParseOptions(const InputParameters& input)
657671
{"power_field_function_on",
658672
[this](const ParameterBlock& spec)
659673
{ options_.power_field_function_on = spec.GetValue<bool>(); }},
674+
{"energy_deposition_field_function_on",
675+
[this](const ParameterBlock& spec)
676+
{ options_.energy_deposition_field_function_on = spec.GetValue<bool>(); }},
660677
{"power_default_kappa",
661678
[this](const ParameterBlock& spec)
662679
{ options_.power_default_kappa = spec.GetValue<double>(); }},
@@ -1217,6 +1234,27 @@ LBSProblem::InitializeFieldFunctions()
12171234

12181235
power_gen_fieldfunc_local_handle_ = field_functions_.size() - 1;
12191236
}
1237+
1238+
if (options_.energy_deposition_field_function_on)
1239+
{
1240+
std::string prefix;
1241+
if (options_.field_function_prefix_option == "prefix")
1242+
{
1243+
prefix = options_.field_function_prefix;
1244+
if (not prefix.empty())
1245+
prefix += "_";
1246+
}
1247+
if (options_.field_function_prefix_option == "solver_name")
1248+
prefix = GetName() + "_";
1249+
1250+
auto edep_ff = std::make_shared<FieldFunctionGridBased>(
1251+
prefix + "energy_deposition", discretization_, Unknown(UnknownType::SCALAR));
1252+
1253+
field_function_stack.push_back(edep_ff);
1254+
field_functions_.push_back(edep_ff);
1255+
1256+
energy_dep_fieldfunc_local_handle_ = field_functions_.size() - 1;
1257+
}
12201258
}
12211259

12221260
void
@@ -1310,6 +1348,39 @@ LBSProblem::UpdateFieldFunctions()
13101348
ff_ptr->UpdateFieldVector(data_vector_local);
13111349
}
13121350

1351+
// Update energy deposition
1352+
if (options_.energy_deposition_field_function_on)
1353+
{
1354+
std::vector<double> data_vector_edep_local(local_node_count_, 0.0);
1355+
1356+
for (const auto& cell : grid_->local_cells)
1357+
{
1358+
const auto& cell_mapping = sdm.GetCellMapping(cell);
1359+
const size_t num_nodes = cell_mapping.GetNumNodes();
1360+
const auto& xs = block_id_to_xs_map_.at(cell.block_id);
1361+
const auto& sigma_edep = xs->GetEnergyDeposition();
1362+
1363+
if (sigma_edep.empty())
1364+
continue;
1365+
1366+
for (size_t i = 0; i < num_nodes; ++i)
1367+
{
1368+
const auto imapA = sdm.MapDOFLocal(cell, i);
1369+
const auto imapB = sdm.MapDOFLocal(cell, i, phi_uk_man, 0, 0);
1370+
1371+
double nodal_edep = 0.0;
1372+
for (unsigned int g = 0; g < num_groups_; ++g)
1373+
nodal_edep += sigma_edep[g] * phi_new_local_[imapB + g];
1374+
1375+
data_vector_edep_local[imapA] = nodal_edep;
1376+
} // for node
1377+
} // for cell
1378+
1379+
const size_t ff_index = energy_dep_fieldfunc_local_handle_;
1380+
auto& ff_ptr = field_functions_.at(ff_index);
1381+
ff_ptr->UpdateFieldVector(data_vector_edep_local);
1382+
}
1383+
13131384
// Update power generation and scalar flux
13141385
if (options_.power_field_function_on)
13151386
{

modules/linear_boltzmann_solvers/lbs_problem/lbs_problem.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ class LBSProblem : public Problem
256256

257257
/// Returns the power generation field function, if enabled.
258258
std::shared_ptr<FieldFunctionGridBased> GetPowerFieldFunction() const;
259+
/// Returns the deposited-energy field function, if enabled.
260+
std::shared_ptr<FieldFunctionGridBased> GetEnergyDepositionFieldFunction() const;
259261

260262
bool TriggerRestartDump() const
261263
{
@@ -363,6 +365,7 @@ class LBSProblem : public Problem
363365

364366
std::map<std::pair<unsigned int, unsigned int>, size_t> phi_field_functions_local_map_;
365367
size_t power_gen_fieldfunc_local_handle_ = 0;
368+
size_t energy_dep_fieldfunc_local_handle_ = 0;
366369

367370
/// Data carriers needed to run the sweep on GPU.
368371
std::shared_ptr<TotalXSCarrier> total_xs_carrier_ = nullptr;

modules/linear_boltzmann_solvers/lbs_problem/lbs_structs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ struct LBSOptions
5656
double ags_tolerance = 1.0e-6;
5757

5858
bool power_field_function_on = false;
59+
bool energy_deposition_field_function_on = false;
5960
double power_default_kappa = 3.20435e-11; // 200MeV to Joule
6061
double power_normalization = -1.0;
6162

Binary file not shown.

test/python/modules/linear_boltzmann_solvers/transport_steady/tests.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,37 @@
345345
}
346346
]
347347
},
348+
{
349+
"file": "transport_1d_cepxs_synthetic_3g.py",
350+
"comment": "Synthetic CEPXS 3-group reader test with analytic infinite-medium solution and energy deposition",
351+
"num_procs": 2,
352+
"checks": [
353+
{
354+
"type": "KeyValuePair",
355+
"key": "Phi0=",
356+
"goldvalue": 0.950124,
357+
"abs_tol": 0.001
358+
},
359+
{
360+
"type": "KeyValuePair",
361+
"key": "Phi1=",
362+
"goldvalue": 0.933380,
363+
"abs_tol": 0.001
364+
},
365+
{
366+
"type": "KeyValuePair",
367+
"key": "Phi2=",
368+
"goldvalue": 0.562868,
369+
"abs_tol": 0.001
370+
},
371+
{
372+
"type": "KeyValuePair",
373+
"key": "Edep=",
374+
"goldvalue": 0.867650,
375+
"abs_tol": 0.001
376+
}
377+
]
378+
},
348379
{
349380
"file": "transport_1d_3a_dsa_ortho.py",
350381
"comment": "1D LinearBSolver test of a block of graphite with an air cavity. DSA and TG",

test/python/modules/linear_boltzmann_solvers/transport_steady/transport_1d_cepxs_coupled_electron_photon_ii3d.py

Lines changed: 185 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)