13 auto ic_random_uniform = [&](
15 const double min_value,
16 const double max_value
31 auto ic_random_gaussian = [&](
48 auto ic_constant_value = [&](
const double density_value)
55 auto ic_single_seed = [&](
const int i_cell,
const double value)
61 switch (p.initial_condition)
64 case (InitialCondition::CONSTANT_VALUE):
65 ic_constant_value(p.ic_values.at(0));
67 case (InitialCondition::SINGLE_SEED):
68 if (p.grid_dimension==GridDimension::D1)
70 i_cell = (
static_cast<int>(p.ic_values.at(1)) );
71 if (i_cell<0 or i_cell>=p.n_x) {
return false; }
73 else if (p.grid_dimension==GridDimension::D2)
75 i_cell = (
static_cast<int>(p.ic_values.at(1))
76 +
static_cast<int>(p.ic_values.at(2))*p.n_x);
77 if (i_cell<0 or i_cell>=p.n_x*p.n_y) {
return false; }
79 else if (p.grid_dimension==GridDimension::D3)
87 ic_single_seed(i_cell, p.ic_values.at(0));
89 case (InitialCondition::RANDOM_UNIFORM):
90 ic_random_uniform(rng, p.ic_values.at(0), p.ic_values.at(1));
92 case (InitialCondition::RANDOM_GAUSSIAN):
93 ic_random_gaussian(rng, p.ic_values.at(0), p.ic_values.at(1));