|
WarpX
|
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid electrons). More...
#include <HybridPICModel.H>
Public Member Functions | |
| HybridPICModel () | |
| void | ReadParameters () |
| void | AllocateLevelMFs (ablastr::fields::MultiFabRegister &fields, int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, int ncomps, const amrex::IntVect &ngJ, const amrex::IntVect &ngRho, const amrex::IntVect &ngEB, const amrex::IntVect &jx_nodal_flag, const amrex::IntVect &jy_nodal_flag, const amrex::IntVect &jz_nodal_flag, const amrex::IntVect &rho_nodal_flag, const amrex::IntVect &Ex_nodal_flag, const amrex::IntVect &Ey_nodal_flag, const amrex::IntVect &Ez_nodal_flag, const amrex::IntVect &Bx_nodal_flag, const amrex::IntVect &By_nodal_flag, const amrex::IntVect &Bz_nodal_flag) const |
| void | InitData (const ablastr::fields::MultiFabRegister &fields) |
| void | GetCurrentExternal () |
| Function to evaluate the external current expressions and populate the external current multifab. Note the external current can be a function of time and therefore this should be re-evaluated at every step. | |
| void | CalculatePlasmaCurrent (ablastr::fields::MultiLevelVectorField const &Bfield, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > &eb_update_E) |
| Function to calculate the total plasma current based on Ampere's law while neglecting displacement current (J = curl x B). Any external current is subtracted as well. Used in the Ohm's law solver (kinetic-fluid hybrid model). | |
| void | CalculatePlasmaCurrent (ablastr::fields::VectorField const &Bfield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > &eb_update_E, int lev) |
| void | HybridPICSolveE (ablastr::fields::MultiLevelVectorField const &Efield, ablastr::fields::MultiLevelVectorField const &Jfield, ablastr::fields::MultiLevelVectorField const &Bfield, ablastr::fields::MultiLevelScalarField const &rhofield, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > &eb_update_E, bool solve_for_Faraday) const |
| Function to update the E-field using Ohm's law (hybrid-PIC model). | |
| void | HybridPICSolveE (ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField const &Jfield, ablastr::fields::VectorField const &Bfield, amrex::MultiFab const &rhofield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > &eb_update_E, int lev, bool solve_for_Faraday) const |
| void | HybridPICSolveE (ablastr::fields::VectorField const &Efield, ablastr::fields::VectorField const &Jfield, ablastr::fields::VectorField const &Bfield, amrex::MultiFab const &rhofield, std::array< std::unique_ptr< amrex::iMultiFab >, 3 > &eb_update_E, int lev, PatchType patch_type, bool solve_for_Faraday) const |
| void | BfieldEvolveRK (ablastr::fields::MultiLevelVectorField const &Bfield, ablastr::fields::MultiLevelVectorField const &Efield, ablastr::fields::MultiLevelVectorField const &Jfield, ablastr::fields::MultiLevelScalarField const &rhofield, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > &eb_update_E, amrex::Real dt, SubcyclingHalf subcycling_half, amrex::IntVect ng, std::optional< bool > nodal_sync) |
| void | BfieldEvolveRK (ablastr::fields::MultiLevelVectorField const &Bfield, ablastr::fields::MultiLevelVectorField const &Efield, ablastr::fields::MultiLevelVectorField const &Jfield, ablastr::fields::MultiLevelScalarField const &rhofield, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > &eb_update_E, amrex::Real dt, int lev, SubcyclingHalf subcycling_half, amrex::IntVect ng, std::optional< bool > nodal_sync) |
| void | FieldPush (ablastr::fields::MultiLevelVectorField const &Bfield, ablastr::fields::MultiLevelVectorField const &Efield, ablastr::fields::MultiLevelVectorField const &Jfield, ablastr::fields::MultiLevelScalarField const &rhofield, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > &eb_update_E, amrex::Real dt, SubcyclingHalf subcycling_half, amrex::IntVect ng, std::optional< bool > nodal_sync) |
| void | CalculateElectronPressure () const |
| Function to calculate the electron pressure using the simulation charge density. Used in the Ohm's law solver (kinetic-fluid hybrid model). | |
| void | CalculateElectronPressure (int lev) const |
| void | FillElectronPressureMF (amrex::MultiFab &Pe_field, amrex::MultiFab const &rho_field) const |
| Fill the electron pressure multifab given the kinetic particle charge density (and assumption of quasi-neutrality) using the user specified electron equation of state. | |
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid electrons).
| HybridPICModel::HybridPICModel | ( | ) |
| void HybridPICModel::AllocateLevelMFs | ( | ablastr::fields::MultiFabRegister & | fields, |
| int | lev, | ||
| const amrex::BoxArray & | ba, | ||
| const amrex::DistributionMapping & | dm, | ||
| int | ncomps, | ||
| const amrex::IntVect & | ngJ, | ||
| const amrex::IntVect & | ngRho, | ||
| const amrex::IntVect & | ngEB, | ||
| const amrex::IntVect & | jx_nodal_flag, | ||
| const amrex::IntVect & | jy_nodal_flag, | ||
| const amrex::IntVect & | jz_nodal_flag, | ||
| const amrex::IntVect & | rho_nodal_flag, | ||
| const amrex::IntVect & | Ex_nodal_flag, | ||
| const amrex::IntVect & | Ey_nodal_flag, | ||
| const amrex::IntVect & | Ez_nodal_flag, | ||
| const amrex::IntVect & | Bx_nodal_flag, | ||
| const amrex::IntVect & | By_nodal_flag, | ||
| const amrex::IntVect & | Bz_nodal_flag ) const |
Allocate hybrid-PIC specific multifabs. Called in constructor.
| void HybridPICModel::BfieldEvolveRK | ( | ablastr::fields::MultiLevelVectorField const & | Bfield, |
| ablastr::fields::MultiLevelVectorField const & | Efield, | ||
| ablastr::fields::MultiLevelVectorField const & | Jfield, | ||
| ablastr::fields::MultiLevelScalarField const & | rhofield, | ||
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | eb_update_E, | ||
| amrex::Real | dt, | ||
| int | lev, | ||
| SubcyclingHalf | subcycling_half, | ||
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync ) |
| void HybridPICModel::BfieldEvolveRK | ( | ablastr::fields::MultiLevelVectorField const & | Bfield, |
| ablastr::fields::MultiLevelVectorField const & | Efield, | ||
| ablastr::fields::MultiLevelVectorField const & | Jfield, | ||
| ablastr::fields::MultiLevelScalarField const & | rhofield, | ||
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | eb_update_E, | ||
| amrex::Real | dt, | ||
| SubcyclingHalf | subcycling_half, | ||
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync ) |
| void HybridPICModel::CalculateElectronPressure | ( | ) | const |
Function to calculate the electron pressure using the simulation charge density. Used in the Ohm's law solver (kinetic-fluid hybrid model).
| void HybridPICModel::CalculateElectronPressure | ( | int | lev | ) | const |
| void HybridPICModel::CalculatePlasmaCurrent | ( | ablastr::fields::MultiLevelVectorField const & | Bfield, |
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | eb_update_E ) |
Function to calculate the total plasma current based on Ampere's law while neglecting displacement current (J = curl x B). Any external current is subtracted as well. Used in the Ohm's law solver (kinetic-fluid hybrid model).
| [in] | Bfield | Magnetic field from which the current is calculated. |
| [in] | eb_update_E | Indicate in which cell J should be calculated (related to embedded boundaries). |
| void HybridPICModel::CalculatePlasmaCurrent | ( | ablastr::fields::VectorField const & | Bfield, |
| std::array< std::unique_ptr< amrex::iMultiFab >, 3 > & | eb_update_E, | ||
| int | lev ) |
| void HybridPICModel::FieldPush | ( | ablastr::fields::MultiLevelVectorField const & | Bfield, |
| ablastr::fields::MultiLevelVectorField const & | Efield, | ||
| ablastr::fields::MultiLevelVectorField const & | Jfield, | ||
| ablastr::fields::MultiLevelScalarField const & | rhofield, | ||
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | eb_update_E, | ||
| amrex::Real | dt, | ||
| SubcyclingHalf | subcycling_half, | ||
| amrex::IntVect | ng, | ||
| std::optional< bool > | nodal_sync ) |
| void HybridPICModel::FillElectronPressureMF | ( | amrex::MultiFab & | Pe_field, |
| amrex::MultiFab const & | rho_field ) const |
Fill the electron pressure multifab given the kinetic particle charge density (and assumption of quasi-neutrality) using the user specified electron equation of state.
| [out] | Pe_field | scalar electron pressure MultiFab at a given level |
| [in] | rho_field | scalar ion charge density Multifab at a given level |
| void HybridPICModel::GetCurrentExternal | ( | ) |
Function to evaluate the external current expressions and populate the external current multifab. Note the external current can be a function of time and therefore this should be re-evaluated at every step.
| void HybridPICModel::HybridPICSolveE | ( | ablastr::fields::MultiLevelVectorField const & | Efield, |
| ablastr::fields::MultiLevelVectorField const & | Jfield, | ||
| ablastr::fields::MultiLevelVectorField const & | Bfield, | ||
| ablastr::fields::MultiLevelScalarField const & | rhofield, | ||
| amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & | eb_update_E, | ||
| bool | solve_for_Faraday ) const |
Function to update the E-field using Ohm's law (hybrid-PIC model).
| void HybridPICModel::HybridPICSolveE | ( | ablastr::fields::VectorField const & | Efield, |
| ablastr::fields::VectorField const & | Jfield, | ||
| ablastr::fields::VectorField const & | Bfield, | ||
| amrex::MultiFab const & | rhofield, | ||
| std::array< std::unique_ptr< amrex::iMultiFab >, 3 > & | eb_update_E, | ||
| int | lev, | ||
| bool | solve_for_Faraday ) const |
| void HybridPICModel::HybridPICSolveE | ( | ablastr::fields::VectorField const & | Efield, |
| ablastr::fields::VectorField const & | Jfield, | ||
| ablastr::fields::VectorField const & | Bfield, | ||
| amrex::MultiFab const & | rhofield, | ||
| std::array< std::unique_ptr< amrex::iMultiFab >, 3 > & | eb_update_E, | ||
| int | lev, | ||
| PatchType | patch_type, | ||
| bool | solve_for_Faraday ) const |
| void HybridPICModel::InitData | ( | const ablastr::fields::MultiFabRegister & | fields | ) |
| void HybridPICModel::ReadParameters | ( | ) |
Read user-defined model parameters. Called in constructor.
| amrex::GpuArray<int, 3> HybridPICModel::Bx_IndexType |
Gpu Vector with index type of the Bx multifab
| amrex::GpuArray<int, 3> HybridPICModel::By_IndexType |
Gpu Vector with index type of the By multifab
| amrex::GpuArray<int, 3> HybridPICModel::Bz_IndexType |
Gpu Vector with index type of the Bz multifab
| amrex::GpuArray<int, 3> HybridPICModel::Ex_IndexType |
Gpu Vector with index type of the Ex multifab
| amrex::GpuArray<int, 3> HybridPICModel::Ey_IndexType |
Gpu Vector with index type of the Ey multifab
| amrex::GpuArray<int, 3> HybridPICModel::Ez_IndexType |
Gpu Vector with index type of the Ez multifab
| amrex::GpuArray<int, 3> HybridPICModel::Jx_IndexType |
Gpu Vector with index type of the Jx multifab
| amrex::GpuArray<int, 3> HybridPICModel::Jy_IndexType |
Gpu Vector with index type of the Jy multifab
| amrex::GpuArray<int, 3> HybridPICModel::Jz_IndexType |
Gpu Vector with index type of the Jz multifab
| bool HybridPICModel::m_add_external_fields = false |
External E/B fields
| amrex::Real HybridPICModel::m_elec_temp |
Electron temperature in eV
| amrex::ParserExecutor<2> HybridPICModel::m_eta |
| std::string HybridPICModel::m_eta_expression = "0.0" |
Plasma resistivity
| amrex::ParserExecutor<2> HybridPICModel::m_eta_h |
| std::string HybridPICModel::m_eta_h_expression = "0.0" |
Plasma hyper-resisitivity
| bool HybridPICModel::m_external_current_has_time_dependence = false |
| std::unique_ptr<ExternalVectorPotential> HybridPICModel::m_external_vector_potential |
| amrex::Real HybridPICModel::m_gamma = 5.0/3.0 |
Electron pressure scaling exponent
| bool HybridPICModel::m_holmstrom_vacuum_region = false |
| bool HybridPICModel::m_hyper_resistivity_has_B_dependence = false |
| std::unique_ptr<amrex::Parser> HybridPICModel::m_hyper_resistivity_parser |
| bool HybridPICModel::m_include_hyper_resistivity_term = false |
| std::array< amrex::ParserExecutor<4>, 3> HybridPICModel::m_J_external |
| std::array< std::unique_ptr<amrex::Parser>, 3> HybridPICModel::m_J_external_parser |
| std::string HybridPICModel::m_Jx_ext_grid_function = "0.0" |
External current
| std::string HybridPICModel::m_Jy_ext_grid_function = "0.0" |
| std::string HybridPICModel::m_Jz_ext_grid_function = "0.0" |
| amrex::Real HybridPICModel::m_n0_ref = 1.0 |
Reference electron density
| amrex::Real HybridPICModel::m_n_floor = 1.0 |
Plasma density floor - if n < n_floor it will be set to n_floor
| bool HybridPICModel::m_resistivity_has_J_dependence = false |
| std::unique_ptr<amrex::Parser> HybridPICModel::m_resistivity_parser |
| int HybridPICModel::m_substeps = 10 |
Number of substeps to take when evolving B