BISICLES AMR ice sheet model
0.9
|
abstract class defining the surface flux interface More...
#include <SurfaceFlux.H>
Public Member Functions | |
virtual | ~SurfaceFlux () |
virtual destructor More... | |
virtual SurfaceFlux * | new_surfaceFlux ()=0 |
factory method: return a pointer to a new SurfaceFlux object More... | |
virtual void | surfaceThicknessFlux (LevelData< FArrayBox > &a_flux, const AmrIceBase &a_amrIce, int a_level, Real a_dt)=0 |
define source term for thickness evolution and place it in flux More... | |
virtual void | evaluate (LevelData< FArrayBox > &a_data, const AmrIceBase &a_amrIce, int a_level, Real a_dt) |
Sub-classes of this class turned out to be useful for various data apart from thickness fluxes... More... | |
Static Public Member Functions | |
static SurfaceFlux * | parse (const char *a_prefix) |
assemble a SurfaceFlux* object from ParmParse inputs More... | |
abstract class defining the surface flux interface
The ice sheet model include several inputs natually described as surface flux densities: ice accumulation and ablation, energy influx, bedrock uplift rates.
|
inlinevirtual |
virtual destructor
References new_surfaceFlux(), and surfaceThicknessFlux().
|
inlinevirtual |
Sub-classes of this class turned out to be useful for various data apart from thickness fluxes...
a_data | output data |
a_amrIce | reference to the ice sheet state |
a_level | mesh level of a_flux |
a_dt | current timestep |
References parse(), and surfaceThicknessFlux().
Referenced by MaskedCalvingModel::applyCriterion(), InverseVerticallyIntegratedVelocitySolver::computeObjectiveAndGradient(), CrevasseCalvingModel::getWaterDepth(), VerticalConductionInternalEnergyIBC::initializeIceInternalEnergy(), InverseVerticallyIntegratedVelocitySolver::solve(), AMRDamage::timestep(), and AmrIce::updateInternalEnergy().
|
pure virtual |
factory method: return a pointer to a new SurfaceFlux object
Implemented in NormalizedFlux, PiecewiseLinearFlux, CompositeFlux, PythonInterface::PythonSurfaceFlux, AxbyFlux, BoxBoundedFlux, MaskedFlux, constantFlux, MultiLevelDataSurfaceFlux, zeroFlux, ProductSurfaceFlux, LevelDataSurfaceFlux, ISMIP6OceanForcing, GroundingLineLocalizedFlux, fortranInterfaceFlux, and HotspotFlux.
Referenced by AxbyFlux::AxbyFlux(), BoxBoundedFlux::BoxBoundedFlux(), CrevasseCalvingModel::CrevasseCalvingModel(), MaskedCalvingModel::define(), VariableRateCalvingModel::new_CalvingModel(), RateProportionalToSpeedCalvingModel::new_CalvingModel(), GroundingLineLocalizedFlux::new_surfaceFlux(), ProductSurfaceFlux::new_surfaceFlux(), MaskedFlux::new_surfaceFlux(), NormalizedFlux::NormalizedFlux(), parse(), AmrIce::setBasalFlux(), AmrIce::setBasalHeatBoundaryData(), AmrIce::setSurfaceFlux(), AmrIce::setSurfaceHeatBoundaryData(), AmrIce::setTopographyFlux(), NormalizedFlux::surfaceThicknessFlux(), VerticalConductionInternalEnergyIBC::VerticalConductionInternalEnergyIBC(), constantFlux::~constantFlux(), ~SurfaceFlux(), and zeroFlux::~zeroFlux().
|
static |
assemble a SurfaceFlux* object from ParmParse inputs
a_prefix | prefix string in the ParmParse table |
Run-time configuration of SurfaceFlux objects is complicated by the 'complex fluxes', e.g MaskedFlux that include a number of subsidiary SurfaceFlux members. We support this by parsing strings of the form recursively. For example, say that the inputs.example file contained the strings 'surfaceFlux.type = maskedFlux', 'surfaceFlux.grounded.type = axbyFlux', 'surfaceFlux.floating.type = productFlux'. SurfaceFlux::parse would first (call 1) be called with the argument a_prefix = 'surfaceFlux', and would itself call SurfaceFlux::parse twice more, once with the argument a_prefix = 'surfaceFlux.grounded' (call 1.1), and one with a_prefix = 'surfaceFlux.floating' (call 1.2). Call 1.1 would parse the string 'surfaceFlux.grounded.type = axbyFlux', and in turn call SurfaceFlux::parse twice with the arguments a_prefix = 'surfaceFlux.grounded.x' (call 1.1.1) and a_prefix = 'surfaceFlux.grounded.y' (call 1.1.2).
References constantFlux::constantFlux(), new_surfaceFlux(), BoxBoundedFlux::new_surfaceFlux(), PythonInterface::PythonSurfaceFlux::new_surfaceFlux(), CompositeFlux::new_surfaceFlux(), NormalizedFlux::new_surfaceFlux(), HotspotFlux::setFluxVal(), constantFlux::setFluxVal(), HotspotFlux::setSpotLoc(), and HotspotFlux::setSpotTimes().
Referenced by AMRMelange::AMRMelange(), CrevasseCalvingModel::CrevasseCalvingModel(), evaluate(), init_bisicles_instance(), main(), VerticalConductionInternalEnergyIBC::parse(), InverseVerticallyIntegratedVelocitySolver::Configuration::parse(), CalvingModel::parseCalvingModel(), RateProportionalToSpeedCalvingModel::RateProportionalToSpeedCalvingModel(), AMRDamage::timestep(), AmrIce::updateInternalEnergy(), and VariableRateCalvingModel::VariableRateCalvingModel().
|
pure virtual |
define source term for thickness evolution and place it in flux
a_flux | output flux data |
a_amrIce | reference to the ice sheet state |
a_level | mesh level of a_flux |
a_dt | current timestep |
a_dt is included in case one needs integrals or averages over a timestep. flux should be defined in meters per year in the current implementation.
Implemented in NormalizedFlux, PiecewiseLinearFlux, CompositeFlux, PythonInterface::PythonSurfaceFlux, AxbyFlux, BoxBoundedFlux, MaskedFlux, constantFlux, MultiLevelDataSurfaceFlux, zeroFlux, ProductSurfaceFlux, LevelDataSurfaceFlux, ISMIP6OceanForcing, GroundingLineLocalizedFlux, HotspotFlux, and fortranInterfaceFlux.
Referenced by AmrIce::computeH_half(), evaluate(), GroundingLineLocalizedFlux::surfaceThicknessFlux(), ProductSurfaceFlux::surfaceThicknessFlux(), MaskedFlux::surfaceThicknessFlux(), NormalizedFlux::surfaceThicknessFlux(), AmrIce::updateGeometry(), AmrIce::writeAMRPlotFile(), constantFlux::~constantFlux(), ~SurfaceFlux(), and zeroFlux::~zeroFlux().