Skip to content

Commit

Permalink
Remove duplication for perturbation initialization
Browse files Browse the repository at this point in the history
Closes #249

See merge request gysela-developpers/gyselalibxx!528

--------------------------------------------

Co-authored-by: Emily Bourne <[email protected]>
  • Loading branch information
Emily Bourne committed Jun 20, 2024
1 parent 9905962 commit ea18e25
Show file tree
Hide file tree
Showing 13 changed files with 153 additions and 163 deletions.
28 changes: 4 additions & 24 deletions simulations/geometryXVx/bump_on_tail/bumpontail_fem_uniform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,39 +81,19 @@ int main(int argc, char** argv)
SplineVxBuilder const builder_vx(meshXVx);
SplineVxBuilder_1d const builder_vx_poisson(mesh_vx);

host_t<DFieldSp> epsilon_bot(dom_kinsp);
host_t<DFieldSp> temperature_bot(dom_kinsp);
host_t<DFieldSp> mean_velocity_bot(dom_kinsp);
host_t<DFieldSp> init_perturb_amplitude(dom_kinsp);
host_t<FieldSp<int>> init_perturb_mode(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(conf_voicexx, ".SpeciesInfo[%d]", isp.uid());

epsilon_bot(isp) = PCpp_double(conf_isp, ".epsilon_bot");
temperature_bot(isp) = PCpp_double(conf_isp, ".temperature_bot");
mean_velocity_bot(isp) = PCpp_double(conf_isp, ".mean_velocity_bot");
init_perturb_amplitude(isp) = PCpp_double(conf_isp, ".perturb_amplitude");
init_perturb_mode(isp) = static_cast<int>(PCpp_int(conf_isp, ".perturb_mode"));
}

// Initialization of the distribution function
DFieldSpVx allfequilibrium(meshSpVx);
BumpontailEquilibrium const init_fequilibrium(
std::move(epsilon_bot),
std::move(temperature_bot),
std::move(mean_velocity_bot));
BumpontailEquilibrium const init_fequilibrium
= BumpontailEquilibrium::init_from_input(dom_kinsp, conf_voicexx);
init_fequilibrium(allfequilibrium);

ddc::expose_to_pdi("iter_start", iter_start);

DFieldSpXVx allfdistribu(meshSpXVx);
double time_start(0);
if (iter_start == 0) {
SingleModePerturbInitialization const
init(allfequilibrium,
init_perturb_mode.span_cview(),
init_perturb_amplitude.span_cview());
SingleModePerturbInitialization const init = SingleModePerturbInitialization::
init_from_input(allfequilibrium, dom_kinsp, conf_voicexx);
init(allfdistribu);
} else {
RestartInitialization const restart(iter_start, time_start);
Expand Down
28 changes: 4 additions & 24 deletions simulations/geometryXVx/bump_on_tail/bumpontail_fft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,39 +85,19 @@ int main(int argc, char** argv)
SplineVxBuilder const builder_vx(meshXVx);
SplineVxBuilder_1d const builder_vx_poisson(mesh_vx);

host_t<DFieldSp> epsilon_bot(dom_kinsp);
host_t<DFieldSp> temperature_bot(dom_kinsp);
host_t<DFieldSp> mean_velocity_bot(dom_kinsp);
host_t<DFieldSp> init_perturb_amplitude(dom_kinsp);
host_t<FieldSp<int>> init_perturb_mode(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(conf_voicexx, ".SpeciesInfo[%d]", isp.uid());

epsilon_bot(isp) = PCpp_double(conf_isp, ".epsilon_bot");
temperature_bot(isp) = PCpp_double(conf_isp, ".temperature_bot");
mean_velocity_bot(isp) = PCpp_double(conf_isp, ".mean_velocity_bot");
init_perturb_amplitude(isp) = PCpp_double(conf_isp, ".perturb_amplitude");
init_perturb_mode(isp) = static_cast<int>(PCpp_int(conf_isp, ".perturb_mode"));
}

// Initialization of the distribution function
DFieldSpVx allfequilibrium(meshSpVx);
BumpontailEquilibrium const init_fequilibrium(
std::move(epsilon_bot),
std::move(temperature_bot),
std::move(mean_velocity_bot));
BumpontailEquilibrium const init_fequilibrium
= BumpontailEquilibrium::init_from_input(dom_kinsp, conf_voicexx);
init_fequilibrium(allfequilibrium);

ddc::expose_to_pdi("iter_start", iter_start);

DFieldSpXVx allfdistribu(meshSpXVx);
double time_start(0);
if (iter_start == 0) {
SingleModePerturbInitialization const
init(allfequilibrium,
init_perturb_mode.span_cview(),
init_perturb_amplitude.span_cview());
SingleModePerturbInitialization const init = SingleModePerturbInitialization::
init_from_input(allfequilibrium, dom_kinsp, conf_voicexx);
init(allfdistribu);
} else {
RestartInitialization const restart(iter_start, time_start);
Expand Down
29 changes: 4 additions & 25 deletions simulations/geometryXVx/landau/landau_fem_uniform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,40 +80,19 @@ int main(int argc, char** argv)
SplineVxBuilder const builder_vx(meshXVx);
SplineVxBuilder_1d const builder_vx_poisson(mesh_vx);

host_t<DFieldSp> density_eq(dom_kinsp);
host_t<DFieldSp> temperature_eq(dom_kinsp);
host_t<DFieldSp> mean_velocity_eq(dom_kinsp);
host_t<DFieldSp> init_perturb_amplitude(dom_kinsp);
host_t<FieldSp<int>> init_perturb_mode(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
// --> SpeciesInfo info
PC_tree_t const conf_isp = PCpp_get(conf_voicexx, ".SpeciesInfo[%d]", isp.uid());

density_eq(isp) = PCpp_double(conf_isp, ".density_eq");
temperature_eq(isp) = PCpp_double(conf_isp, ".temperature_eq");
mean_velocity_eq(isp) = PCpp_double(conf_isp, ".mean_velocity_eq");
init_perturb_amplitude(isp) = PCpp_double(conf_isp, ".perturb_amplitude");
init_perturb_mode(isp) = static_cast<int>(PCpp_int(conf_isp, ".perturb_mode"));
}

// Initialization of the distribution function
DFieldSpVx allfequilibrium(meshSpVx);
MaxwellianEquilibrium const init_fequilibrium(
std::move(density_eq),
std::move(temperature_eq),
std::move(mean_velocity_eq));
MaxwellianEquilibrium const init_fequilibrium
= MaxwellianEquilibrium::init_from_input(dom_kinsp, conf_voicexx);
init_fequilibrium(allfequilibrium);

ddc::expose_to_pdi("iter_start", iter_start);

DFieldSpXVx allfdistribu(meshSpXVx);
double time_start(0);
if (iter_start == 0) {
SingleModePerturbInitialization const
init(allfequilibrium,
init_perturb_mode.span_cview(),
init_perturb_amplitude.span_cview());
SingleModePerturbInitialization const init = SingleModePerturbInitialization::
init_from_input(allfequilibrium, dom_kinsp, conf_voicexx);
init(allfdistribu);
} else {
RestartInitialization const restart(iter_start, time_start);
Expand Down
28 changes: 4 additions & 24 deletions simulations/geometryXVx/landau/landau_fft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,39 +76,19 @@ int main(int argc, char** argv)
SplineVxBuilder const builder_vx(meshXVx);
SplineVxBuilder_1d const builder_vx_poisson(mesh_vx);

host_t<DFieldSp> density_eq(dom_kinsp);
host_t<DFieldSp> temperature_eq(dom_kinsp);
host_t<DFieldSp> mean_velocity_eq(dom_kinsp);
host_t<DFieldSp> init_perturb_amplitude(dom_kinsp);
host_t<FieldSp<int>> init_perturb_mode(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(conf_voicexx, ".SpeciesInfo[%d]", isp.uid());

density_eq(isp) = PCpp_double(conf_isp, ".density_eq");
temperature_eq(isp) = PCpp_double(conf_isp, ".temperature_eq");
mean_velocity_eq(isp) = PCpp_double(conf_isp, ".mean_velocity_eq");
init_perturb_amplitude(isp) = PCpp_double(conf_isp, ".perturb_amplitude");
init_perturb_mode(isp) = static_cast<int>(PCpp_int(conf_isp, ".perturb_mode"));
}

// Initialization of the distribution function
DFieldSpVx allfequilibrium(meshSpVx);
MaxwellianEquilibrium const init_fequilibrium(
std::move(density_eq),
std::move(temperature_eq),
std::move(mean_velocity_eq));
MaxwellianEquilibrium const init_fequilibrium
= MaxwellianEquilibrium::init_from_input(dom_kinsp, conf_voicexx);
init_fequilibrium(allfequilibrium);

ddc::expose_to_pdi("iter_start", iter_start);

DFieldSpXVx allfdistribu(meshSpXVx);
double time_start(0);
if (iter_start == 0) {
SingleModePerturbInitialization const
init(allfequilibrium,
init_perturb_mode.span_cview(),
init_perturb_amplitude.span_cview());
SingleModePerturbInitialization const init = SingleModePerturbInitialization::
init_from_input(allfequilibrium, dom_kinsp, conf_voicexx);
init(allfdistribu);
} else {
RestartInitialization const restart(iter_start, time_start);
Expand Down
29 changes: 4 additions & 25 deletions simulations/geometryXVx/neutrals/neutrals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,30 +98,11 @@ int main(int argc, char** argv)
IDomainSp dom_fluidsp;
init_species_withfluid(dom_kinsp, dom_fluidsp, conf_voicexx);

host_t<DFieldSp> kinetic_density_eq(dom_kinsp);
host_t<DFieldSp> kinetic_temperature_eq(dom_kinsp);
host_t<DFieldSp> kinetic_mean_velocity_eq(dom_kinsp);

host_t<DFieldSp> init_perturb_amplitude(dom_kinsp);
host_t<FieldSp<int>> init_perturb_mode(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(conf_voicexx, ".SpeciesInfo[%d]", isp.uid());

kinetic_density_eq(isp) = PCpp_double(conf_isp, ".density_eq");
kinetic_temperature_eq(isp) = PCpp_double(conf_isp, ".temperature_eq");
kinetic_mean_velocity_eq(isp) = PCpp_double(conf_isp, ".mean_velocity_eq");
init_perturb_amplitude(isp) = PCpp_double(conf_isp, ".perturb_amplitude");
init_perturb_mode(isp) = static_cast<int>(PCpp_int(conf_isp, ".perturb_mode"));
}

// Initialization of kinetic species distribution function
IDomainSpVx const meshSpVx(dom_kinsp, mesh_vx);
DFieldSpVx allfequilibrium(meshSpVx);
MaxwellianEquilibrium const init_fequilibrium(
std::move(kinetic_density_eq),
std::move(kinetic_temperature_eq),
std::move(kinetic_mean_velocity_eq));
MaxwellianEquilibrium const init_fequilibrium
= MaxwellianEquilibrium::init_from_input(dom_kinsp, conf_voicexx);
init_fequilibrium(allfequilibrium);

ddc::expose_to_pdi("iter_start", iter_start);
Expand All @@ -130,10 +111,8 @@ int main(int argc, char** argv)
DFieldSpXVx allfdistribu(meshSpXVx);
double time_start(0);
if (iter_start == 0) {
SingleModePerturbInitialization const
init(allfequilibrium,
init_perturb_mode.span_cview(),
init_perturb_amplitude.span_cview());
SingleModePerturbInitialization const init = SingleModePerturbInitialization::
init_from_input(allfequilibrium, dom_kinsp, conf_voicexx);
init(allfdistribu);
} else {
RestartInitialization const restart(iter_start, time_start);
Expand Down
28 changes: 4 additions & 24 deletions simulations/geometryXVx/sheath/sheath.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,39 +96,19 @@ int main(int argc, char** argv)
SplineVxBuilder const builder_vx(meshXVx);
SplineVxBuilder_1d const builder_vx_poisson(mesh_vx);

host_t<DFieldSp> density_eq(dom_kinsp);
host_t<DFieldSp> temperature_eq(dom_kinsp);
host_t<DFieldSp> mean_velocity_eq(dom_kinsp);
host_t<DFieldSp> init_perturb_amplitude(dom_kinsp);
host_t<FieldSp<int>> init_perturb_mode(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(conf_voicexx, ".SpeciesInfo[%d]", isp.uid());

density_eq(isp) = PCpp_double(conf_isp, ".density_eq");
temperature_eq(isp) = PCpp_double(conf_isp, ".temperature_eq");
mean_velocity_eq(isp) = PCpp_double(conf_isp, ".mean_velocity_eq");
init_perturb_amplitude(isp) = PCpp_double(conf_isp, ".perturb_amplitude");
init_perturb_mode(isp) = static_cast<int>(PCpp_int(conf_isp, ".perturb_mode"));
}

// Initialization of the distribution function
DFieldSpVx allfequilibrium(meshSpVx);
MaxwellianEquilibrium const init_fequilibrium(
std::move(density_eq),
std::move(temperature_eq),
std::move(mean_velocity_eq));
MaxwellianEquilibrium const init_fequilibrium
= MaxwellianEquilibrium::init_from_input(dom_kinsp, conf_voicexx);
init_fequilibrium(allfequilibrium);

ddc::expose_to_pdi("iter_start", iter_start);

DFieldSpXVx allfdistribu(meshSpXVx);
double time_start(0);
if (iter_start == 0) {
SingleModePerturbInitialization const
init(allfequilibrium,
init_perturb_mode.span_cview(),
init_perturb_amplitude.span_cview());
SingleModePerturbInitialization const init = SingleModePerturbInitialization::
init_from_input(allfequilibrium, dom_kinsp, conf_voicexx);
init(allfdistribu);
} else {
RestartInitialization const restart(iter_start, time_start);
Expand Down
23 changes: 23 additions & 0 deletions src/geometryXVx/initialization/bumpontailequilibrium.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,29 @@ DSpanSpVx BumpontailEquilibrium::operator()(DSpanSpVx const allfequilibrium) con
return allfequilibrium;
}

BumpontailEquilibrium BumpontailEquilibrium::init_from_input(
IDomainSp dom_kinsp,
PC_tree_t const& yaml_input_file)
{
host_t<DFieldSp> epsilon_bot(dom_kinsp);
host_t<DFieldSp> temperature_bot(dom_kinsp);
host_t<DFieldSp> mean_velocity_bot(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(yaml_input_file, ".SpeciesInfo[%d]", isp.uid());

epsilon_bot(isp) = PCpp_double(conf_isp, ".epsilon_bot");
temperature_bot(isp) = PCpp_double(conf_isp, ".temperature_bot");
mean_velocity_bot(isp) = PCpp_double(conf_isp, ".mean_velocity_bot");
}

return BumpontailEquilibrium(
std::move(epsilon_bot),
std::move(temperature_bot),
std::move(mean_velocity_bot));
}


void BumpontailEquilibrium::compute_twomaxwellian(
DSpanVx const fMaxwellian,
double const epsilon_bot,
Expand Down
12 changes: 12 additions & 0 deletions src/geometryXVx/initialization/bumpontailequilibrium.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
#pragma once

#include <geometry.hpp>
#include <paraconf.h>
#include <species_info.hpp>

#include "iequilibrium.hpp"
#include "paraconfpp.hpp"

/**
* @brief A class that initializes the distribution function as a sum of two Maxwellian functions.
Expand Down Expand Up @@ -58,6 +60,16 @@ class BumpontailEquilibrium : public IEquilibrium

~BumpontailEquilibrium() override = default;

/**
* @brief Read the density, temperature and mean velocity required to initialize the bump-on-tail Maxwellian in a YAML input file.
* @param[in] dom_kinsp Discrete Domain for the kinetic species
* @param[in] yaml_input_file YAML input file
* @return an instance of Maxwellian distribution function.
*/
static BumpontailEquilibrium init_from_input(
IDomainSp dom_kinsp,
PC_tree_t const& yaml_input_file);

/**
* @brief Initializes the distribution function as the sum of a bulk and a bump-on-tail Maxwellians.
* @param[out] allfequilibrium The initialized distribution function.
Expand Down
24 changes: 24 additions & 0 deletions src/geometryXVx/initialization/maxwellianequilibrium.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,30 @@ DSpanSpVx MaxwellianEquilibrium::operator()(DSpanSpVx const allfequilibrium) con
return allfequilibrium;
}


MaxwellianEquilibrium MaxwellianEquilibrium::init_from_input(
IDomainSp dom_kinsp,
PC_tree_t const& yaml_input_file)
{
host_t<DFieldSp> density_eq(dom_kinsp);
host_t<DFieldSp> temperature_eq(dom_kinsp);
host_t<DFieldSp> mean_velocity_eq(dom_kinsp);

for (IndexSp const isp : dom_kinsp) {
PC_tree_t const conf_isp = PCpp_get(yaml_input_file, ".SpeciesInfo[%d]", isp.uid());

density_eq(isp) = PCpp_double(conf_isp, ".density_eq");
temperature_eq(isp) = PCpp_double(conf_isp, ".temperature_eq");
mean_velocity_eq(isp) = PCpp_double(conf_isp, ".mean_velocity_eq");
}

return MaxwellianEquilibrium(
std::move(density_eq),
std::move(temperature_eq),
std::move(mean_velocity_eq));
}


void MaxwellianEquilibrium::compute_maxwellian(
DSpanVx const fMaxwellian,
double const density,
Expand Down
12 changes: 12 additions & 0 deletions src/geometryXVx/initialization/maxwellianequilibrium.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
#pragma once

#include <geometry.hpp>
#include <paraconf.h>
#include <species_info.hpp>

#include "iequilibrium.hpp"
#include "paraconfpp.hpp"

/**
* @brief A class that initializes the distribution function as a Maxwellian.
Expand Down Expand Up @@ -35,6 +37,16 @@ class MaxwellianEquilibrium : public IEquilibrium

~MaxwellianEquilibrium() override = default;

/**
* @brief Read the density, temperature and mean velocity required to initialize the Maxwellian in a YAML input file.
* @param[in] dom_kinsp Discrete Domain for the kinetic species
* @param[in] yaml_input_file YAML input file
* @return an instance of Maxwellian distribution function.
*/
static MaxwellianEquilibrium init_from_input(
IDomainSp dom_kinsp,
PC_tree_t const& yaml_input_file);

/**
* @brief Initializes allfequilibrium as a Maxwellian.
* @param[out] allfequilibrium A Span containing a Maxwellian distribution function.
Expand Down
Loading

0 comments on commit ea18e25

Please sign in to comment.