Skip to content

Commit d8414da

Browse files
authored
Merge pull request #395 from JamesMcClung/pr/shock/open-bcs
`psc_shock`: Use open boundary
2 parents a569895 + da25c05 commit d8414da

1 file changed

Lines changed: 33 additions & 6 deletions

File tree

src/psc_shock.cxx

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "OutputFieldsDefault.h"
66
#include "psc_config.hxx"
7+
#include "include/boundary_injector.hxx"
78
#include "input_params.hxx"
89
#include "kg/include/kg/VecRange.hxx"
910

@@ -169,12 +170,13 @@ Grid_t* setupGrid()
169170
{0, 0, 0}, // location of lower corner
170171
{n_patches_x, y_mult * n_patches_y, n_patches_z}}; // n patches
171172

172-
auto BND_FLD_Y = mirror_domain ? BND_FLD_PERIODIC : BND_FLD_CONDUCTING_WALL;
173-
auto BND_PRT_Y = mirror_domain ? BND_PRT_PERIODIC : BND_PRT_REFLECTING;
174-
auto bc = psc::grid::BC{{BND_FLD_PERIODIC, BND_FLD_Y, BND_FLD_PERIODIC},
175-
{BND_FLD_PERIODIC, BND_FLD_Y, BND_FLD_PERIODIC},
176-
{BND_PRT_PERIODIC, BND_PRT_Y, BND_PRT_PERIODIC},
177-
{BND_PRT_PERIODIC, BND_PRT_Y, BND_PRT_PERIODIC}};
173+
auto BND_FLD_Y_UPPER = mirror_domain ? BND_FLD_OPEN : BND_FLD_CONDUCTING_WALL;
174+
auto BND_PRT_Y_UPPER = mirror_domain ? BND_PRT_OPEN : BND_PRT_REFLECTING;
175+
auto bc =
176+
psc::grid::BC{{BND_FLD_PERIODIC, BND_FLD_OPEN, BND_FLD_PERIODIC},
177+
{BND_FLD_PERIODIC, BND_FLD_Y_UPPER, BND_FLD_PERIODIC},
178+
{BND_PRT_PERIODIC, BND_PRT_OPEN, BND_PRT_PERIODIC},
179+
{BND_PRT_PERIODIC, BND_PRT_Y_UPPER, BND_PRT_PERIODIC}};
178180

179181
auto kinds = Grid_t::Kinds(NR_KINDS);
180182
kinds[KIND_ELECTRON] = {-1.0, electron_mass, "e"};
@@ -200,6 +202,7 @@ void initializeParticles(Balance& balance, Grid_t*& grid_ptr, Mparticles& mprts)
200202
{
201203
SetupParticles<Mparticles> setup_particles(*grid_ptr);
202204
setup_particles.centerer = centering::Centerer(centering::CC);
205+
setup_particles.random_offsets = true;
203206
setup_particles.initial_momentum_gamma_correction = true;
204207

205208
auto init_np = [&](int kind, Double3 crd, int p, Int3 idx,
@@ -727,6 +730,22 @@ static void run(int argc, char** argv)
727730
int oute_interval = -100;
728731
DiagEnergies<Mparticles, MfieldsState> oute{grid.comm(), oute_interval};
729732

733+
auto ion_injector =
734+
BoundaryInjector<ParticleGeneratorMaxwellian, PscConfig::PushParticles>(
735+
ParticleGeneratorMaxwellian(
736+
KIND_ION, grid.kinds[KIND_ION],
737+
{v_upstream_x, v_upstream_y, v_upstream_z},
738+
{ion_temperature, ion_temperature, ion_temperature}, true),
739+
grid);
740+
auto electron_injector =
741+
BoundaryInjector<ParticleGeneratorMaxwellian, PscConfig::PushParticles>(
742+
ParticleGeneratorMaxwellian(
743+
KIND_ELECTRON, grid.kinds[KIND_ELECTRON],
744+
{v_upstream_x, v_upstream_y, v_upstream_z},
745+
{electron_temperature, electron_temperature, electron_temperature},
746+
true),
747+
grid);
748+
730749
// ----------------------------------------------------------------------
731750
// set up initial conditions
732751

@@ -741,10 +760,18 @@ static void run(int argc, char** argv)
741760

742761
psc.add_gauss_corrector(&marder);
743762

763+
double gamma = 1 / sqrt(1 - sqr(v_upstream_y));
764+
psc.bndf.background_e =
765+
-gamma * Double3{0, v_upstream_y, 0}.cross({b_x, b_y, b_z});
766+
psc.bndf.background_h = {b_x * gamma, b_y, b_z * gamma};
767+
744768
psc.add_diagnostic(&outf);
745769
psc.add_diagnostic(&outp);
746770
psc.add_diagnostic(&oute);
747771

772+
psc.add_injector(&ion_injector);
773+
psc.add_injector(&electron_injector);
774+
748775
psc.integrate();
749776
}
750777

0 commit comments

Comments
 (0)