28 auto i_from_xy = [&](
int x,
int y) ->
int {
return x + y*p.n_x; };
29 auto add_to_density = [&](
int x,
int y,
double value)
35 auto apply_bc_to_edge_2d = [&] (
39 if (bc==BoundaryCondition::FIXED_VALUE)
44 for (
auto x=0; x<p.n_x; x++){
49 for (
auto x=0; x<p.n_x; x++){
54 for (
auto y=0; y<p.n_y; y++){
59 for (
auto y=0; y<p.n_y; y++){
66 else if (bc==BoundaryCondition::FIXED_FLUX and i_epoch>0)
71 for (
auto x=0; x<p.n_x; x++){
73 add_to_density(x, y, value);
77 for (
auto x=0; x<p.n_x; x++){
79 add_to_density(x, y, value);
83 for (
auto y=0; y<p.n_y; y++){
85 add_to_density(x, y, value);
89 for (
auto y=0; y<p.n_y; y++){
91 add_to_density(x, y, value);
97 auto apply_boundary_conditions_1d = [&]()
102 auto apply_boundary_conditions_2d = [&]()
105 GridEdge::lx, p.boundary_conditions.at(0), p.bc_values.at(0)
108 GridEdge::ux, p.boundary_conditions.at(1), p.bc_values.at(1)
111 GridEdge::ly, p.boundary_conditions.at(2), p.bc_values.at(2)
114 GridEdge::uy, p.boundary_conditions.at(3), p.bc_values.at(3)
117 auto apply_boundary_conditions_3d = [&]()
125 switch (p.grid_dimension)
127 case (GridDimension::D1):
128 apply_boundary_conditions_1d();
130 case (GridDimension::D2):
131 apply_boundary_conditions_2d();
133 case (GridDimension::D3):
134 apply_boundary_conditions_3d();