 |
Ice Sheet System Model
4.18
Code documentation
|
Go to the documentation of this file.
12 #include "../../datastructures/datastructures.h"
13 #include "../../toolkits/toolkits.h"
35 template <
class doublematrix>
class Matrix;
36 template <
class doubletype>
class Vector;
82 void FindParam(
bool* pvalue,
int paramenum);
83 void FindParam(
int* pvalue,
int paramenum);
86 void FindParam(
int** pvalues,
int* psize,
int paramenum);
88 void GetDofList(
int** pdoflist,
int approximation_enum,
int setenum);
91 void GetDofListLocal(
int** pdoflist,
int approximation_enum,
int setenum);
151 void MarshallElement(
char** pmarshalled_data,
int* pmarshalled_data_size,
int marshall_direction,
int numanalyses);
164 void ResultInterpolation(
int* pinterpolation,
int*nodesperelement,
int* parray_size,
int output_enum);
280 virtual void InputUpdateFromMatrixDakota(
IssmDouble* matrix,
int rows,
int ncols,
int name,
int type)=0;
281 virtual void InputUpdateFromVectorDakota(
IssmDouble* vector,
int name,
int type)=0;
295 virtual void Marshall(
char** pmarshalled_data,
int* pmarshalled_data_size,
int marshall_direction)=0;
375 #ifdef _HAVE_SEALEVELRISE_
void StrainRateESA(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
IssmDouble TotalFloatingBmb(IssmDouble *mask, bool scaled)
void GetVerticesConnectivityList(int *connectivitylist)
void TransformStiffnessMatrixCoord(ElementMatrix *Ke, int cs_enum)
void TransformStiffnessMatrixCoord(ElementMatrix *Ke, int numnodes, int *transformenum_list)
Declaration of Vertices class.
void SetIntInput(Inputs2 *inputs2, int enum_in, int value)
virtual int GetElementType(void)=0
void GetInputListOnNodes(IssmDouble *pvalue, int enumtype)
void TransformStiffnessMatrixCoord(ElementMatrix *Ke, Node **nodes, int numnodes, int cs_enum)
virtual void NormalSection(IssmDouble *normal, IssmDouble *xyz_list)=0
void TransformSolutionCoord(IssmDouble *solution, int cs_enum)
Declaration of Nodes class.
void TransformLoadVectorCoord(ElementVector *pe, int numnodes, int *transformenum_list)
virtual IssmDouble GetIcefrontArea()
void GetDofList(int **pdoflist, int approximation_enum, int setenum)
virtual int GetNumberOfNodes(void)=0
virtual IssmDouble SurfaceArea(void)=0
void FindParam(bool *pvalue, int paramenum)
virtual int GetNumberOfNodes(int enum_type)=0
void SetBoolInput(Inputs2 *inputs2, int enum_in, bool value)
virtual void NodalFunctionsTensor(IssmDouble *basis, Gauss *gauss)=0
void dViscositydDSSA(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
virtual Gauss * NewGaussBase(int order)=0
virtual void DatasetInputExtrude(int input_enum, int start)
virtual void GetVectorFromControlInputs(Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data)=0
virtual void SetControlInputsFromVector(IssmDouble *vector, int control_enum, int control_index, int offset, int N, int M)=0
void PicoUpdateBoxid(int *pmax_boxid_basin)
virtual bool IsZeroLevelset(int levelset_enum)=0
void SmbGradCompParameterization(void)
virtual void VerticalSegmentIndices(int **pindices, int *pnumseg)=0
Declaration of Parameters class.
virtual IssmDouble IceVolume(bool scaled)=0
virtual int PressureInterpolation()=0
void TransformInvStiffnessMatrixCoord(ElementMatrix *Ke, int cs_enum)
virtual Element * SpawnBasalElement(void)=0
ElementMatrix * NewElementMatrixCoupling(int number_nodes, int approximation_enum=NoneApproximationEnum)
virtual void PotentialUngrounding(Vector< IssmDouble > *potential_sheet_ungrounding)=0
IssmDouble IceVolumeAboveFloatation(IssmDouble *mask, bool scaled)
void StrainRateFS(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
void dViscositydBHO(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
virtual void CalvingRateVonmises(void)
void ResultToVector(Vector< IssmDouble > *vector, int output_enum)
virtual IssmDouble TimeAdapt()=0
void MantlePlumeGeothermalFlux()
virtual IssmDouble MassFlux(IssmDouble *segment)=0
IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy, IssmDouble pressure)
Declaration of Elements class.
void TransformLoadVectorCoord(ElementVector *pe, int cs_enum)
virtual Gauss * NewGauss(IssmDouble *xyz_list, IssmDouble *xyz_list_front, int order_horiz, int order_vert)=0
void GetDofListPressure(int **pdoflist, int setenum)
void PicoUpdateBox(int loopboxid)
virtual void ResetFSBasalBoundaryCondition()=0
IssmDouble GroundedArea(IssmDouble *mask, bool scaled)
virtual void ComputeBasalStress(void)
virtual void WriteFieldIsovalueSegment(DataSet *segments, int fieldenum, IssmDouble fieldvalue)
void GetInputListOnVerticesAtTime(IssmDouble *pvalue, int enumtype, IssmDouble time)
virtual void StrainRateparallel(void)=0
IssmDouble GetZcoord(IssmDouble *xyz_list, Gauss *gauss)
void GetNodesSidList(int *sidlist)
IssmDouble PureIceEnthalpy(IssmDouble pressure)
virtual IssmDouble Masscon(IssmDouble *levelset)=0
virtual Gauss * NewGauss(IssmDouble *xyz_list, IssmDouble *xyz_list_front, int order)=0
virtual void JacobianDeterminantBase(IssmDouble *Jdet, IssmDouble *xyz_list_base, Gauss *gauss)=0
virtual void JacobianDeterminantTop(IssmDouble *Jdet, IssmDouble *xyz_list_base, Gauss *gauss)=0
virtual void NormalBase(IssmDouble *normal, IssmDouble *xyz_list)=0
virtual IssmDouble TotalCalvingFluxLevelset(bool scaled)
void ResultToPatch(IssmDouble *values, int nodesperelement, int output_enum)
virtual Gauss * NewGauss(int order)=0
virtual void NodalFunctionsP1Derivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void SetElementInput(Inputs2 *inputs2, int numindices, int *indices, IssmDouble *values, int enum_in)
virtual void ControlToVectors(Vector< IssmPDouble > *vector_control, Vector< IssmPDouble > *vector_gradient, int control_enum)=0
virtual void SetControlInputsFromVector(IssmDouble *vector, int control_enum, int control_index)=0
virtual void AddControlInput(int input_enum, Inputs2 *inputs2, IoModel *iomodel, IssmDouble *values, IssmDouble *values_min, IssmDouble *values_max, int interpolation_enum, int id)
IssmDouble FloatingArea(IssmDouble *mask, bool scaled)
virtual void NodalFunctionsPressure(IssmDouble *basis, Gauss *gauss)=0
void TransformLoadVectorCoord(ElementVector *pe, int numnodes, int transformenum)
virtual bool IsNodeOnShelfFromFlags(IssmDouble *flags)=0
virtual void UpdateConstraintsExtrudeFromTop(void)=0
virtual int NodalValue(IssmDouble *pvalue, int index, int natureofdataenum)=0
void ThermalToEnthalpy(IssmDouble *penthalpy, IssmDouble temperature, IssmDouble waterfraction, IssmDouble pressure)
void GetDofListLocalPressure(int **pdoflist, int setenum)
virtual void StressIntensityFactor(void)=0
virtual Input2 * GetInput2(int inputenum)=0
virtual Gauss * NewGauss(int point1, IssmDouble fraction1, IssmDouble fraction2, int order)=0
void DeleteMaterials(void)
virtual IssmDouble GetHorizontalSurfaceArea(void)
virtual void NodalFunctions(IssmDouble *basis, Gauss *gauss)=0
void SetwiseNodeConnectivity(int *d_nz, int *o_nz, Node *node, bool *flags, int *flagsindices, int set1_enum, int set2_enum)
virtual void ValueP1OnGauss(IssmDouble *pvalue, IssmDouble *values, Gauss *gauss)=0
virtual IssmDouble TotalSmb(bool scaled)=0
virtual IssmDouble IcefrontMassFlux(bool scaled)
virtual DatasetInput2 * GetDatasetInput2(int inputenum)
void GetPhi(IssmDouble *phi, IssmDouble *epsilon, IssmDouble viscosity)
virtual void ComputeStressTensor(void)=0
bool IsIceOnlyInElement()
void dViscositydBFS(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
virtual void ElementSizes(IssmDouble *phx, IssmDouble *phy, IssmDouble *phz)=0
virtual void ElementResponse(IssmDouble *presponse, int response_enum)=0
void InputCreate(IssmDouble *vector, Inputs2 *inputs2, IoModel *iomodel, int M, int N, int vector_type, int vector_enum, int code)
void MismipFloatingiceMeltingRate()
virtual void GetVectorFromControlInputs(Vector< IssmDouble > *gradient, int control_enum, int control_index, const char *data, int offset)=0
virtual void NodalFunctionsP1(IssmDouble *basis, Gauss *gauss)=0
ElementVector * NewElementVector(int approximation_enum=NoneApproximationEnum)
void SmbGemb(IssmDouble timeinputs, int count)
IssmDouble Divergence(void)
virtual void ControlInputSetGradient(IssmDouble *gradient, int enum_type, int control_index, int offset, int N, int M)=0
void Ismip6FloatingiceMeltingRate()
void PositiveDegreeDay(IssmDouble *pdds, IssmDouble *pds, IssmDouble signorm, bool ismungsm, bool issetpddfac)
virtual IssmDouble GroundinglineMassFlux(bool scaled)
virtual IssmDouble TotalCalvingMeltingFluxLevelset(bool scaled)
Declaration of Materials class.
IssmDouble IceVolume(IssmDouble *mask, bool scaled)
virtual void GetGroundedPart(int *point1, IssmDouble *fraction1, IssmDouble *fraction2, bool *mainlyfloating)=0
virtual void AddInput2(int input_enum, IssmDouble *values, int interpolation_enum)
virtual int TensorInterpolation()=0
virtual void InputUpdateFromVector(IssmDouble *vector, int name, int type)=0
virtual Gauss * NewGauss(void)=0
void MungsmtpParameterization(void)
void dViscositydBSSA(IssmDouble *pdmudB, int dim, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
virtual void VerticalSegmentIndicesBase(int **pindices, int *pnumseg)=0
virtual void GetInputValue(IssmDouble *pvalue, Vertex *vertex, int enumtype)
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
void CoordinateSystemTransform(IssmDouble **ptransform, Node **nodes, int numnodes, int *cs_array)
void PositiveDegreeDaySicopolis(bool isfirnwarming)
virtual void ComputeSigmaNN(void)=0
virtual void GetInputListOnVertices(IssmDouble *pvalue, Input2 *input, IssmDouble default_value)=0
virtual IssmDouble Misfit(int modelenum, int observationenum, int weightsenum)=0
virtual void NormalTop(IssmDouble *normal, IssmDouble *xyz_list)=0
IssmDouble TotalSmb(IssmDouble *mask, bool scaled)
virtual void ReduceMatrices(ElementMatrix *Ke, ElementVector *pe)=0
void GetInput2Value(bool *pvalue, int enum_type)
void BeckmannGoosseFloatingiceMeltingRate()
virtual void ComputeEsaStrainAndVorticity(void)=0
void Delta18opdParameterization(void)
void StrainRateSSA1d(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input)
virtual void StabilizationParameterAnisotropic(IssmDouble *tau_parameter_anisotropic, IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble hx, IssmDouble hy, IssmDouble hz, IssmDouble kappa)=0
void GetVerticesCoordinates(IssmDouble **xyz_list)
Node * GetNode(int nodeindex)
void ResultToMatrix(IssmDouble *values, int ncols, int output_enum)
void ComputeLambdaS(void)
virtual void ResetHooks()=0
void GetVectorFromInputs(Vector< IssmDouble > *vector, int name_enum, int type)
virtual void UpdateConstraintsExtrudeFromBase(void)=0
virtual void SetTemporaryElementType(int element_type_in)=0
void SpatialLinearFloatingiceMeltingRate()
virtual bool IsFaceOnBoundary(void)=0
virtual void GetIcefrontCoordinates(IssmDouble **pxyz_front, IssmDouble *xyz_list, int levelsetenum)=0
virtual int NumberofNodesPressure(void)=0
virtual void InputExtrude(int input_enum, int start)=0
void ViscousHeatingCreateInput(void)
virtual Gauss * NewGaussLine(int vertex1, int vertex2, int order)=0
virtual int ObjectEnum()=0
virtual void NodalFunctionsDerivativesVelocity(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
void GetDofListLocal(int **pdoflist, int approximation_enum, int setenum)
virtual void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)=0
void GetVerticesSidList(int *sidlist)
virtual void CreateDistanceInputFromSegmentlist(IssmDouble *distances, int distanceenum)
IssmDouble TMeltingPoint(IssmDouble pressure)
virtual IssmDouble StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)=0
virtual void AddBasalInput2(int input_enum, IssmDouble *values, int interpolation_enum)
virtual void SetElementInput(int enum_in, IssmDouble values)
virtual void GetLevelCoordinates(IssmDouble **pxyz_front, IssmDouble *xyz_list, int levelsetenum, IssmDouble level)=0
virtual void GetInputListOnNodes(IssmDouble *pvalue, Input2 *input, IssmDouble default_value)=0
virtual void ValueP1DerivativesOnGauss(IssmDouble *dvalue, IssmDouble *values, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void JacobianDeterminantSurface(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void CalvingMeltingFluxLevelset(void)
virtual void DatasetInputCreate(IssmDouble *array, int M, int N, int *individual_enums, int num_inputs, Inputs2 *inputs2, IoModel *iomodel, int input_enum)
virtual void NodalFunctionsVelocity(IssmDouble *basis, Gauss *gauss)=0
void MigrateGroundingLine(IssmDouble *sheet_ungrounding)
Declaration of Loads class.
virtual int GetVertexIndex(Vertex *vertex)
virtual IssmDouble TotalFloatingBmb(bool scaled)=0
void StrainRateHO(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
void GetSolutionFromInputsOneDof(Vector< IssmDouble > *solution, int solutionenum)
void LinearFloatingiceMeltingRate()
virtual void BasalNodeIndices(int *pnumindices, int **pindices, int finiteelement)
virtual void GetVerticesCoordinatesBase(IssmDouble **xyz_list)=0
void ResultInterpolation(int *pinterpolation, int *nodesperelement, int *parray_size, int output_enum)
#define _error_(StreamArgs)
virtual void GetLevelsetPositivePart(int *point1, IssmDouble *fraction1, IssmDouble *fraction2, bool *mainlynegative, IssmDouble *levelsetvalues)=0
virtual Element * SpawnTopElement(void)=0
IssmDouble GetYcoord(IssmDouble *xyz_list, Gauss *gauss)
virtual IssmDouble CharacteristicLength(void)=0
IssmDouble min(IssmDouble a, IssmDouble b)
virtual IssmDouble MassFlux(IssmDouble x1, IssmDouble y1, IssmDouble x2, IssmDouble y2, int segment_id)=0
virtual void StrainRateperpendicular(void)=0
virtual IssmDouble GetGroundedPortion(IssmDouble *xyz_list)=0
void InputUpdateFromConstant(IssmDouble constant, int name)
virtual void NodalFunctionsP2(IssmDouble *basis, Gauss *gauss)=0
virtual void JacobianDeterminant(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void Update(Inputs2 *inputs2, int index, IoModel *iomodel, int analysis_counter, int analysis_type, int finite_element)=0
void GetInputValue(bool *pvalue, int enum_type)
void PicoComputeBasalMelt()
virtual Element * GetBasalElement(void)=0
IssmDouble EnthalpyDiffusionParameterVolume(int numvertices, IssmDouble *enthalpy, IssmDouble *pressure)
virtual void CalvingFluxLevelset(void)
void TransformLoadVectorCoord(ElementVector *pe, Node **nodes, int numnodes, int cs_enum)
virtual int VelocityInterpolation()=0
void ControlInputCreate(IssmDouble *doublearray, IssmDouble *independents_min, IssmDouble *independents_max, Inputs2 *inputs2, IoModel *iomodel, int M, int N, IssmDouble scale, int input_enum, int id)
virtual int FiniteElement(void)=0
virtual void GetInputValue(IssmDouble *pvalue, Node *node, int enumtype)
virtual Gauss * NewGauss(int point1, IssmDouble fraction1, IssmDouble fraction2, bool mainlyfloating, int order)=0
void GetVerticesPidList(int *pidlist)
virtual void CalvingCrevasseDepth(void)
IssmDouble TotalGroundedBmb(IssmDouble *mask, bool scaled)
virtual int VertexConnectivity(int vertexindex)=0
int GetNodeIndex(Node *node)
virtual void SetCurrentConfiguration(Elements *elements, Loads *loads, Nodes *nodes, Materials *materials, Parameters *parameters)=0
virtual void SetElementInput(Inputs2 *inputs2, int enum_in, IssmDouble values)
virtual void CreateInputTimeAverage(int transientinput_enum, int averagedinput_enum, IssmDouble init_time, IssmDouble end_time, int averaging_method)
void StrainRateSSA(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
void MarshallElement(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction, int numanalyses)
virtual void CalvingRateLevermann(void)=0
virtual IssmDouble GroundedArea(bool scaled)=0
virtual void GetVerticesCoordinatesTop(IssmDouble **xyz_list)=0
virtual void ViscousHeating(IssmDouble *pphi, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input, Input2 *vz_input)
virtual void InputDepthAverageAtBase(int enum_type, int average_enum_type)=0
virtual Gauss * NewGaussTop(int order)=0
virtual void ControlInputSetGradient(IssmDouble *gradient, int enum_type, int control_index)=0
void DatasetInputAdd(int enum_type, IssmDouble *vector, Inputs2 *inputs2, IoModel *iomodel, int M, int N, int vector_type, int vector_enum, int code, int input_enum)
virtual void RignotMeltParameterization(void)
virtual IssmDouble MisfitArea(int weightsenum)=0
void StrainRateHO2dvertical(IssmDouble *epsilon, IssmDouble *xyz_list, Gauss *gauss, Input2 *vx_input, Input2 *vy_input)
IssmDouble max(IssmDouble a, IssmDouble b)
virtual void InputUpdateFromIoModel(int index, IoModel *iomodel)=0
IssmDouble IceMass(bool scaled)
virtual Input2 * GetInput2(int inputenum, IssmDouble start_time, IssmDouble end_time, int averaging_method)=0
virtual int GetNumberOfVertices(void)=0
Declaration of DataSet class.
virtual void JacobianDeterminantLine(IssmDouble *Jdet, IssmDouble *xyz_list, Gauss *gauss)=0
void GetInputListOnVertices(IssmDouble *pvalue, int enumtype)
void TransformInvStiffnessMatrixCoord(ElementMatrix *Ke, Node **nodes, int numnodes, int cs_enum)
void GetInputListOnNodesVelocity(IssmDouble *pvalue, int enumtype)
void GradientIndexing(int *indexing, int control_index)
virtual void AverageOntoPartition(Vector< IssmDouble > *partition_contributions, Vector< IssmDouble > *partition_areas, IssmDouble *vertex_response, IssmDouble *qmu_part)=0
virtual void Configure(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters, Inputs2 *inputs2in)=0
void Delta18oParameterization(void)
virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble *solution, int inputenum)=0
virtual bool IsIcefront(void)=0
void GetDofListLocalVelocity(int **pdoflist, int setenum)
void GetDofListVelocity(int **pdoflist, int setenum)
virtual IssmDouble IcefrontMassFluxLevelset(bool scaled)
void GetVerticesLidList(int *lidlist)
virtual void FSContactMigration(Vector< IssmDouble > *vertex_sigmann, Vector< IssmDouble > *vertex_waterpressure)=0
virtual IssmDouble TotalGroundedBmb(bool scaled)=0
virtual int UpdatePotentialUngrounding(IssmDouble *potential_sheet_ungrounding, Vector< IssmDouble > *vec_nodes_on_iceshelf, IssmDouble *nodes_on_iceshelf)=0
void GetInputLocalMinMaxOnNodes(IssmDouble *min, IssmDouble *max, IssmDouble *ug)
IssmDouble GetXcoord(IssmDouble *xyz_list, Gauss *gauss)
virtual Input2 * GetInput2(int inputenum, IssmDouble time)=0
virtual void NodalFunctionsDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
virtual void NodalFunctionsMINIDerivatives(IssmDouble *dbasis, IssmDouble *xyz_list, Gauss *gauss)=0
virtual IssmDouble FloatingArea(bool scaled)=0
virtual int NumberofNodesVelocity(void)=0
virtual IssmDouble IceVolumeAboveFloatation(bool scaled)=0
void GetNodesLidList(int *lidlist)
virtual void ComputeDeviatoricStressTensor(void)=0
void EnthalpyToThermal(IssmDouble *ptemperature, IssmDouble *pwaterfraction, IssmDouble enthalpy, IssmDouble pressure)
virtual IssmDouble MinEdgeLength(IssmDouble *xyz_list)=0
ElementMatrix * NewElementMatrix(int approximation_enum=NoneApproximationEnum)
void StressMaxPrincipalCreateInput(void)