WARPXM v1.10.0
Loading...
Searching...
No Matches
wxm::apps::mhd::divergence_cleaning::DednerMixedGLM Class Reference

Implements the mixed Generalized-Lagrange Multiplier version of divergence cleaning in: Dedner et al., JCP 175, 645-673 (2002). More...

#include <mixed_glm.h>

Inheritance diagram for wxm::apps::mhd::divergence_cleaning::DednerMixedGLM:
WmApplication wxm::app_base

Detailed Description

Implements the mixed Generalized-Lagrange Multiplier version of divergence cleaning in: Dedner et al., JCP 175, 645-673 (2002).

This verison implements a combination of hyperbolic divergence cleaning and parabolic divergence cleaning where the parabolic part enters as a source term.

Specifically, this implements the form in Eqs. 1a, 1b, 4, 1d, and 5, with the constraint given by Eq. 17, except that the ideal part is taken care of separately in the ideal mhd app (wxm::apps::imhd::WmApplication_IMHD_Flux).

So this only adds the \(\nabla \psi\) part of Eqn. 4 and the full Eqn. 5 using Eq. 17.

The numerical flux is derived and given in the line of text after Eq. 42.

Note that in the limit \(c_{p}\rightarrow \infty\), the source term goes to 0 and the parabolic part of the divergence cleaning disappears, so this becomes purely hyperbolic divergence cleaning. This app also has a flag for the source term which can be set to false to turn off. Conversely, \(c_{p}\rightarrow 0\) leads to increased source term (and thus parabolic divergence cleaning) contribution.

For Warpy class see warpy.apps.mhd.divergence_cleaning.divergence_cleaning.mixed_glm

Public Member Functions

 DednerMixedGLM ()
 
 ~DednerMixedGLM () override
 
void setup (const WxCryptSet &wxc) override
 
const std::vector< int > & getInputVariableIndexes (int flag) const override
 
const std::vector< int > & getOutputVariableIndexes (int flag) const override
 
real internal_flux (const real *q, const real *aux, const solverVariables_t *pSV, std::vector< std::vector< real > > &internalFlux) const override
 
real numerical_flux (const real *q_l, const real *q_r, const real *aux_l, const real *aux_r, const solverVariables_t *pFV, real *numericalFlux) const override
 
real source (const real *q, const real *aux, const elementGeometry_t *pEG, real *source) const override
 
- Public Member Functions inherited from WmApplication
 WmApplication ()
 
virtual ~WmApplication ()=default
 
virtual void setup (const WxCryptSet &wxc)
 
virtual const std::vector< int > & getAuxiliaryVariableIndexes (int flag=WMAPPLICATIONFLAG_NONE) const
 
virtual const std::vector< int > & getCrossVariableIndexes (int flag=WMAPPLICATIONFLAG_NONE) const
 
const std::vector< std::string > & getBoundaryNames () const
 
bool isOnBoundary (const std::string &boundaryName) const
 
bool has (int flag) const
 
virtual real numerical_flux (const real *q_l, const real *q_r, const real *aux_l, const real *aux_r, const solverVariables_t *pFV, real *numericalFlux) const
 
virtual real internal_flux (const real *q, const real *aux, const solverVariables_t *pSV, std::vector< std::vector< real > > &internalFlux) const
 
virtual real source (const real *q, const real *aux, const elementGeometry_t *pEG, real *source) const
 
virtual void bc_q (const real *q_in, const real *aux_in, const real *aux_out, const solverVariables_t *pFV, real *q_out) const
 Boundary Condition Application which sets the boundary condition on ghost nodes.
 
virtual real bcNumericalFlux (const real *q_l, const real *q_r, const real *aux_l, const real *aux_r, const solverVariables_t *pFV, real *numericalFlux) const
 
virtual void conserved_to_primitive (const real *q, const real *aux, real *w) const
 
virtual void primitive_to_conserved (const real *w, const real *aux, real *q) const
 
virtual void evaluate_function (const real *q, const real *aux, const solverVariables_t *pSV, real *result) const
 
virtual void bc_q_kinetic (const real *q_in, const real *aux_in, const solverVariables_t *pFV, real *q_out) const
 
std::shared_ptr< std::string > app_name ()
 
virtual const std::vector< int > & getInputVariableIndexes (int flag=0) const
 
virtual const std::vector< int > & getOutputVariableIndexes (int flag=0) const
 

Protected Attributes

real _gas_gamma
 
std::vector< int > _input_variable_idcs
 
std::vector< int > _output_variable_idcs
 
real _ch_factor
 Multiplier on max mhd wave speed (fast magnetosonic speed, cf), to calculate ch = cf * _ch_factor \(\in (0, \infty)\).
 
real _cr
 Factor for calculating cp = sqrt(cr * ch) \(\in (0, \infty)\), which constributes to the strength of the source term adding the parabolic component of the divergence cleaning.
 
real _min_density_floor
 
real _min_pressure_floor
 
bool _use_psi_source
 
- Protected Attributes inherited from WmApplication
std::string _app_name
 
WxLogStream _debStrm
 
std::vector< int > _allowedFlags
 
std::vector< std::string > _onBoundaries
 

Additional Inherited Members

- Public Types inherited from WmApplication
typedef Application_Variable WmApplication_Variable
 
typedef std::map< std::string, std::string > replaceMap_t
 
- Static Public Attributes inherited from wxm::app_base
static std::vector< int > empty
 
- Protected Member Functions inherited from wxm::app_base
virtual ~app_base ()=default
 

Constructor & Destructor Documentation

◆ DednerMixedGLM()

wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::DednerMixedGLM ( )

◆ ~DednerMixedGLM()

wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::~DednerMixedGLM ( )
override

Member Function Documentation

◆ getInputVariableIndexes()

const std::vector< int > & wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::getInputVariableIndexes ( int  flag) const
inlineoverridevirtual

Reimplemented from wxm::app_base.

◆ getOutputVariableIndexes()

const std::vector< int > & wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::getOutputVariableIndexes ( int  flag) const
inlineoverridevirtual

Reimplemented from wxm::app_base.

◆ internal_flux()

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::internal_flux ( const real q,
const real aux,
const solverVariables_t pSV,
std::vector< std::vector< real > > &  internalFlux 
) const
overridevirtual

Reimplemented from WmApplication.

◆ numerical_flux()

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::numerical_flux ( const real q_l,
const real q_r,
const real aux_l,
const real aux_r,
const solverVariables_t pFV,
real numericalFlux 
) const
overridevirtual

Reimplemented from WmApplication.

◆ setup()

void wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::setup ( const WxCryptSet wxc)
overridevirtual

Reimplemented from WmApplication.

◆ source()

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::source ( const real q,
const real aux,
const elementGeometry_t pEG,
real source 
) const
overridevirtual

Reimplemented from WmApplication.

Member Data Documentation

◆ _ch_factor

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_ch_factor
protected

Multiplier on max mhd wave speed (fast magnetosonic speed, cf), to calculate ch = cf * _ch_factor \(\in (0, \infty)\).

Default: 1. Dedner paper uses 1. Probably should be at minimum 1 so that divergence errors advect faster than fastest MHD wave.

◆ _cr

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_cr
protected

Factor for calculating cp = sqrt(cr * ch) \(\in (0, \infty)\), which constributes to the strength of the source term adding the parabolic component of the divergence cleaning.

Default: 0.18. This is the value that Dedner uses.

◆ _gas_gamma

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_gas_gamma
protected

◆ _input_variable_idcs

std::vector<int> wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_input_variable_idcs
protected

◆ _min_density_floor

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_min_density_floor
protected

◆ _min_pressure_floor

real wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_min_pressure_floor
protected

◆ _output_variable_idcs

std::vector<int> wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_output_variable_idcs
protected

◆ _use_psi_source

bool wxm::apps::mhd::divergence_cleaning::DednerMixedGLM::_use_psi_source
protected

The documentation for this class was generated from the following file: