#include <GodunovPhysics.H>
Public Member Functions | |
GodunovPhysics () | |
Constructor. | |
PhysIBC * | getPhysIBC () const |
Get the initial and boundary condition object. | |
void | setPhysIBC (PhysIBC *a_bc) |
Set the initial and boundary condition object. | |
virtual | ~GodunovPhysics () |
Destructor. | |
virtual void | define (const ProblemDomain &a_domain, const Real &a_dx) |
Define the object. | |
virtual void | setCurrentBox (const Box &a_currentBox) |
Set the current box (default implementation - do nothing). | |
virtual Real | getMaxWaveSpeed (const FArrayBox &a_U, const Box &a_box)=0 |
Compute the maximum wave speed. | |
virtual void | soundSpeed (FArrayBox &a_speed, const FArrayBox &a_U, const Box &a_box) |
Compute the maximum wave speed. | |
virtual GodunovPhysics * | new_godunovPhysics () const =0 |
Object factory for this class. | |
virtual void | computeUpdate (FArrayBox &a_dU, FluxBox &a_F, const FArrayBox &a_U, const FluxBox &a_WHalf, const bool &a_useArtificialViscosity, const Real &a_artificialViscosity, const Real &a_currentTime, const Real &a_dx, const Real &a_dt, const Box &a_box) |
Compute the increment in the conserved variables from face variables. | |
virtual void | getFlux (FArrayBox &a_flux, const FArrayBox &a_WHalf, const int &a_dir, const Box &a_box) |
Compute the fluxes from primitive variable values on a face. | |
virtual void | charAnalysis (FArrayBox &a_dW, const FArrayBox &a_W, const int &a_dir, const Box &a_box)=0 |
Transform a_dW from primitive to characteristic variables. | |
virtual void | charSynthesis (FArrayBox &a_dW, const FArrayBox &a_W, const int &a_dir, const Box &a_box)=0 |
Transform a_dW from characteristic to primitive variables. | |
virtual void | charValues (FArrayBox &a_lambda, const FArrayBox &a_W, const int &a_dir, const Box &a_box)=0 |
Compute the characteristic values (eigenvalues). | |
virtual void | incrementSource (FArrayBox &a_S, const FArrayBox &a_W, const Box &a_box)=0 |
Add to (increment) the source terms given the current state. | |
virtual void | riemann (FArrayBox &a_WStar, const FArrayBox &a_WLeft, const FArrayBox &a_WRight, const FArrayBox &a_W, const Real &a_time, const int &a_dir, const Box &a_box)=0 |
Compute the solution to the Riemann problem. | |
virtual void | postNormalPred (FArrayBox &a_dWMinus, FArrayBox &a_dWPlus, const FArrayBox &a_W, const Real &a_dt, const Real &a_dx, const int &a_dir, const Box &a_box)=0 |
Post-normal predictor calculation. | |
virtual void | quasilinearUpdate (FArrayBox &a_AdWdx, const FArrayBox &a_wHalf, const FArrayBox &a_W, const Real &a_scale, const int &a_dir, const Box &a_box)=0 |
Compute the quasilinear update A*dW/dx. | |
virtual void | consToPrim (FArrayBox &a_W, const FArrayBox &a_U, const Box &a_box)=0 |
Compute primitive variables from conserved variables. | |
virtual void | artVisc (FArrayBox &a_F, const FArrayBox &a_U, const Real &a_artificialViscosity, const Real &a_currentTime, const int &a_dir, const Box &a_box) |
Compute the artificial viscosity contribution to the flux. | |
virtual void | expressions (HDF5HeaderData &a_holder) const |
Access functions | |
virtual int | numConserved ()=0 |
Number of conserved variables. | |
virtual Vector< string > | stateNames ()=0 |
Names of the conserved variables. | |
virtual bool | fourthOrderArtificialViscosityIsDefined () const |
Returns true if 4th-order artificial viscosity is defined. | |
virtual void | setFourthOrderArtificialViscosityParameter (const Real &M0sq) |
Defines fourth-order artifical viscosity strong shock threshold. | |
virtual Real | getFourthOrderArtificialViscosityParameter () const |
Returns fourth-order artifical viscosity strong shock threshold. | |
virtual int | numFluxes ()=0 |
Number of flux variables. | |
virtual bool | isDefined () const |
Is the object completely defined. | |
virtual int | numPrimitives ()=0 |
Number of primitive variables. | |
virtual Interval | velocityInterval ()=0 |
Interval within the primitive variables corresponding to the velocities. | |
virtual int | pressureIndex ()=0 |
Component index within the primitive variables of the pressure. | |
virtual Real | smallPressure ()=0 |
Used to limit the absolute value of a "pressure" difference. | |
virtual int | bulkModulusIndex ()=0 |
Component index within the primitive variables of the bulk modulus. | |
virtual int | densityIndex () |
Component index within the primitive variables of the density. | |
Protected Attributes | |
bool | m_isDefined |
ProblemDomain | m_domain |
Real | m_dx |
GodunovUtilities | m_util |
bool | m_useFourthOrderArtificialViscosity |
Real | m_M0sq |
PhysIBC * | m_bc |
bool | m_isBCSet |
Private Member Functions | |
void | operator= (const GodunovPhysics &) |
GodunovPhysics (const GodunovPhysics &) |
GodunovPhysics::GodunovPhysics | ( | ) |
Constructor.
virtual GodunovPhysics::~GodunovPhysics | ( | ) | [virtual] |
Destructor.
GodunovPhysics::GodunovPhysics | ( | const GodunovPhysics & | ) | [private] |
PhysIBC* GodunovPhysics::getPhysIBC | ( | ) | const |
Get the initial and boundary condition object.
void GodunovPhysics::setPhysIBC | ( | PhysIBC * | a_bc | ) |
Set the initial and boundary condition object.
virtual void GodunovPhysics::define | ( | const ProblemDomain & | a_domain, | |
const Real & | a_dx | |||
) | [virtual] |
Define the object.
virtual void GodunovPhysics::setCurrentBox | ( | const Box & | a_currentBox | ) | [virtual] |
Set the current box (default implementation - do nothing).
virtual GodunovPhysics* GodunovPhysics::new_godunovPhysics | ( | ) | const [pure virtual] |
virtual void GodunovPhysics::computeUpdate | ( | FArrayBox & | a_dU, | |
FluxBox & | a_F, | |||
const FArrayBox & | a_U, | |||
const FluxBox & | a_WHalf, | |||
const bool & | a_useArtificialViscosity, | |||
const Real & | a_artificialViscosity, | |||
const Real & | a_currentTime, | |||
const Real & | a_dx, | |||
const Real & | a_dt, | |||
const Box & | a_box | |||
) | [virtual] |
Compute the increment in the conserved variables from face variables.
Compute dU = dt*dUdt, the change in the conserved variables over the time step. The fluxes are returned are suitable for use in refluxing. This has a default implementation but can be redefined as needed.
virtual void GodunovPhysics::getFlux | ( | FArrayBox & | a_flux, | |
const FArrayBox & | a_WHalf, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [virtual] |
Compute the fluxes from primitive variable values on a face.
This has a default implementation which throws an error. The method is here so that the default implementation of "computeUpdate" can use it and the user can supply it. It has an implementation so if the user redefines "computeUpdate" they aren't force to implement "getFlux" - which is only used by the default implementation of "computeUpdate".
Reimplemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::charAnalysis | ( | FArrayBox & | a_dW, | |
const FArrayBox & | a_W, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [pure virtual] |
Transform a_dW from primitive to characteristic variables.
On input, a_dW contains the increments of the primitive variables. On output, it contains the increments in the characteristic variables.
IMPORTANT NOTE: It is assumed that the characteristic analysis puts the smallest eigenvalue first, the largest eigenvalue last, and orders the characteristic variables accordingly.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::charSynthesis | ( | FArrayBox & | a_dW, | |
const FArrayBox & | a_W, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [pure virtual] |
Transform a_dW from characteristic to primitive variables.
On input, a_dW contains the increments of the characteristic variables. On output, it contains the increments in the primitive variables.
IMPORTANT NOTE: It is assumed that the characteristic analysis puts the smallest eigenvalue first, the largest eigenvalue last, and orders the characteristic variables accordingly.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::charValues | ( | FArrayBox & | a_lambda, | |
const FArrayBox & | a_W, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [pure virtual] |
Compute the characteristic values (eigenvalues).
Compute the characteristic values (eigenvalues).
IMPORTANT NOTE: It is assumed that the characteristic analysis puts the smallest eigenvalue first, the largest eigenvalue last, and orders the characteristic variables accordingly.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::incrementSource | ( | FArrayBox & | a_S, | |
const FArrayBox & | a_W, | |||
const Box & | a_box | |||
) | [pure virtual] |
Add to (increment) the source terms given the current state.
On input, a_S contains the current source terms. On output, a_S has had any additional source terms (based on the current state, a_W) added to it. This should all be done on the region defined by a_box.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::riemann | ( | FArrayBox & | a_WStar, | |
const FArrayBox & | a_WLeft, | |||
const FArrayBox & | a_WRight, | |||
const FArrayBox & | a_W, | |||
const Real & | a_time, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [pure virtual] |
Compute the solution to the Riemann problem.
Given input left and right states in a direction, a_dir, compute a Riemann problem and generate fluxes at the faces within a_box.
a_WStar | face-centered solution to Riemann problem |
a_WLeft | left state, on cells to left of each face |
a_WRight | right state, on cells to right of each face |
a_W | state on cells, used to set boundary conditions |
a_time | current time |
a_dir | direction of faces |
a_box | face-centered box on which to set a_WStar |
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::postNormalPred | ( | FArrayBox & | a_dWMinus, | |
FArrayBox & | a_dWPlus, | |||
const FArrayBox & | a_W, | |||
const Real & | a_dt, | |||
const Real & | a_dx, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [pure virtual] |
Post-normal predictor calculation.
Add increment to normal predictor, e.g. to account for source terms due to spatially-varying coefficients, to bound primitive variable ranges.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::consToPrim | ( | FArrayBox & | a_W, | |
const FArrayBox & | a_U, | |||
const Box & | a_box | |||
) | [pure virtual] |
Compute primitive variables from conserved variables.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual void GodunovPhysics::artVisc | ( | FArrayBox & | a_F, | |
const FArrayBox & | a_U, | |||
const Real & | a_artificialViscosity, | |||
const Real & | a_currentTime, | |||
const int & | a_dir, | |||
const Box & | a_box | |||
) | [virtual] |
Compute the artificial viscosity contribution to the flux.
Compute the artificial viscosity contribution to the flux. This has a default implementation but this can be overridded as needed.
virtual void GodunovPhysics::expressions | ( | HDF5HeaderData & | a_holder | ) | const [inline, virtual] |
Reimplemented in PolytropicPhysics.
virtual int GodunovPhysics::numConserved | ( | ) | [pure virtual] |
Number of conserved variables.
Return the number of conserved variables.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual Vector<string> GodunovPhysics::stateNames | ( | ) | [pure virtual] |
Names of the conserved variables.
Return the names of the conserved variables.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual bool GodunovPhysics::fourthOrderArtificialViscosityIsDefined | ( | ) | const [virtual] |
Returns true if 4th-order artificial viscosity is defined.
virtual void GodunovPhysics::setFourthOrderArtificialViscosityParameter | ( | const Real & | M0sq | ) | [virtual] |
Defines fourth-order artifical viscosity strong shock threshold.
virtual Real GodunovPhysics::getFourthOrderArtificialViscosityParameter | ( | ) | const [virtual] |
Returns fourth-order artifical viscosity strong shock threshold.
virtual int GodunovPhysics::numFluxes | ( | ) | [pure virtual] |
Number of flux variables.
Return the number of flux variables. This can be greater than the number of conserved variables if addition fluxes/face-centered quantities are computed.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual bool GodunovPhysics::isDefined | ( | ) | const [virtual] |
Is the object completely defined.
Return true if the object is completely defined.
Reimplemented in AdvectPhysics.
virtual int GodunovPhysics::numPrimitives | ( | ) | [pure virtual] |
Number of primitive variables.
Return the number of primitive variables. This may be greater than the number of conserved variables if derived/redundant quantities are also stored for convenience.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual Interval GodunovPhysics::velocityInterval | ( | ) | [pure virtual] |
Interval within the primitive variables corresponding to the velocities.
Return the interval of component indices within the primitive variable of the velocities. Used for slope flattening (slope computation) and computing the divergence of the velocity (artificial viscosity).
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual int GodunovPhysics::pressureIndex | ( | ) | [pure virtual] |
Component index within the primitive variables of the pressure.
Return the component index withn the primitive variables for the pressure. Used for slope flattening (slope computation).
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual Real GodunovPhysics::smallPressure | ( | ) | [pure virtual] |
Used to limit the absolute value of a "pressure" difference.
Return a value that is used by slope flattening to limit (away from zero) the absolute value of a slope in the pressureIndex() component (slope computation).
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual int GodunovPhysics::bulkModulusIndex | ( | ) | [pure virtual] |
Component index within the primitive variables of the bulk modulus.
Return the component index withn the primitive variables for the bulk modulus. Used for slope flattening (slope computation) used as a normalization to measure shock strength.
Implemented in AdvectPhysics, and PolytropicPhysics.
virtual int GodunovPhysics::densityIndex | ( | ) | [virtual] |
Component index within the primitive variables of the density.
Return the component index within the primitive variables for the density. Used for fourth-order accurate artificial viscosity.
Reimplemented in AdvectPhysics, and PolytropicPhysics.
void GodunovPhysics::operator= | ( | const GodunovPhysics & | ) | [private] |
bool GodunovPhysics::m_isDefined [protected] |
Referenced by AdvectPhysics::isDefined().
ProblemDomain GodunovPhysics::m_domain [protected] |
Real GodunovPhysics::m_dx [protected] |
GodunovUtilities GodunovPhysics::m_util [protected] |
bool GodunovPhysics::m_useFourthOrderArtificialViscosity [protected] |
Real GodunovPhysics::m_M0sq [protected] |
PhysIBC* GodunovPhysics::m_bc [protected] |
bool GodunovPhysics::m_isBCSet [protected] |