BISICLES AMR ice sheet model  0.9
Public Member Functions | Static Public Member Functions | List of all members
SurfaceFlux Class Referenceabstract

abstract class defining the surface flux interface More...

#include <SurfaceFlux.H>

Inheritance diagram for SurfaceFlux:
Inheritance graph
[legend]

Public Member Functions

virtual ~SurfaceFlux ()
 virtual destructor More...
 
virtual SurfaceFluxnew_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 SurfaceFluxparse (const char *a_prefix)
 assemble a SurfaceFlux* object from ParmParse inputs More...
 

Detailed Description

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.

Todo:
In fact, since all that is really needed here is a methods to fill 2D fields, a very much larger set of inputs could be described in the same way. For now, a simple 'typedef SurfaceFlux SurfaceData' is our nod to this, but a refactoring exercise where, instead SurfaceFlux is a minor specialization of SurfaceData is on the cards.

Constructor & Destructor Documentation

◆ ~SurfaceFlux()

virtual SurfaceFlux::~SurfaceFlux ( )
inlinevirtual

virtual destructor

References new_surfaceFlux(), and surfaceThicknessFlux().

Member Function Documentation

◆ evaluate()

virtual void SurfaceFlux::evaluate ( LevelData< FArrayBox > &  a_data,
const AmrIceBase a_amrIce,
int  a_level,
Real  a_dt 
)
inlinevirtual

Sub-classes of this class turned out to be useful for various data apart from thickness fluxes...

Parameters
a_dataoutput data
a_amrIcereference to the ice sheet state
a_levelmesh level of a_flux
a_dtcurrent timestep

References parse(), and surfaceThicknessFlux().

Referenced by MaskedCalvingModel::applyCriterion(), InverseVerticallyIntegratedVelocitySolver::computeObjectiveAndGradient(), CrevasseCalvingModel::getWaterDepth(), VerticalConductionInternalEnergyIBC::initializeIceInternalEnergy(), InverseVerticallyIntegratedVelocitySolver::solve(), AMRDamage::timestep(), and AmrIce::updateInternalEnergy().

◆ new_surfaceFlux()

virtual SurfaceFlux* SurfaceFlux::new_surfaceFlux ( )
pure virtual

◆ parse()

SurfaceFlux * SurfaceFlux::parse ( const char *  a_prefix)
static

assemble a SurfaceFlux* object from ParmParse inputs

Parameters
a_prefixprefix 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().

◆ surfaceThicknessFlux()

virtual void SurfaceFlux::surfaceThicknessFlux ( LevelData< FArrayBox > &  a_flux,
const AmrIceBase a_amrIce,
int  a_level,
Real  a_dt 
)
pure virtual

define source term for thickness evolution and place it in flux

Parameters
a_fluxoutput flux data
a_amrIcereference to the ice sheet state
a_levelmesh level of a_flux
a_dtcurrent 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().


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