source: issm/trunk-jpl/src/c/classes/Elements/Element.h@ 15082

Last change on this file since 15082 was 15082, checked in by Mathieu Morlighem, 12 years ago

DEL: removed InputConvergence module that is not used anymore and calls GetValuesPtr, which HAS to be deleted because it is wrong to plya with the pointer of another object's field

File size: 7.6 KB
Line 
1/*!\file: Element.h
2 * \brief abstract class for Element object
3 * This class is a place holder for the Tria and the Penta elements.
4 * It is derived from Element, so DataSets can contain them.
5 */
6
7#ifndef _ELEMENT_H_
8#define _ELEMENT_H_
9
10/*Headers:*/
11/*{{{*/
12#include "../../datastructures/datastructures.h"
13#include "../Update.h"
14
15class DataSet;
16class Parameters;
17class Patch;
18class Elements;
19class Loads;
20class Node;
21class Nodes;
22class Vertices;
23class Materials;
24template <class doublematrix> class Matrix;
25template <class doubletype> class Vector;
26
27#include "../../toolkits/toolkits.h"
28/*}}}*/
29
30class Element: public Object,public Update{
31
32 public:
33
34 virtual ~Element(){};
35
36 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
37 virtual void SetCurrentConfiguration(Elements* elements,Loads* loads,Nodes* nodes,Materials* materials,Parameters* parameters)=0;
38 virtual void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
39 virtual void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0;
40 virtual void CreateDVector(Vector<IssmDouble>* df)=0;
41 virtual void CreatePVector(Vector<IssmDouble>* pf)=0;
42 virtual void CreateJacobianMatrix(Matrix<IssmDouble>* Jff)=0;
43 virtual void BasisIntegral(Vector<IssmDouble>* basisg)=0;
44 virtual void GetSolutionFromInputs(Vector<IssmDouble>* solution)=0;
45 virtual int GetNodeIndex(Node* node)=0;
46 virtual int GetNumberOfNodes(void)=0;
47 virtual void GetNodesSidList(int* sidlist)=0;
48
49 virtual int Sid()=0;
50 virtual bool IsFloating()=0;
51 virtual bool IsNodeOnShelf()=0;
52 virtual bool IsNodeOnShelfFromFlags(IssmDouble* flags)=0;
53 virtual bool IsOnBed()=0;
54 virtual void GetInputListOnVertices(IssmDouble* pvalue,int enumtype)=0;
55 virtual void GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue)=0;
56 virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype)=0;
57
58 virtual IssmDouble SurfaceArea(void)=0;
59 virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0;
60 virtual void ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0;
61 virtual void ComputeStrainRate(Vector<IssmDouble>* eps)=0;
62 virtual void PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes)=0;
63 virtual void PatchFill(int* pcount, Patch* patch)=0;
64 virtual void ListResultsInfo(int** results_enums,int** results_size,IssmDouble** results_times,int** results_steps,int* num_results)=0;
65 virtual void DeleteResults(void)=0;
66 virtual void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type)=0;
67 virtual void InputToResult(int enum_type,int step,IssmDouble time)=0;
68 virtual void InputDuplicate(int original_enum,int new_enum)=0;
69 virtual void InputCreate(IssmDouble scalar,int name,int code)=0;
70 virtual void InputCreate(IssmDouble* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
71 virtual void ProcessResultsUnits(void)=0;
72 virtual void RequestedOutput(int output_enum,int step,IssmDouble time)=0;
73
74 virtual int NodalValue(IssmDouble* pvalue, int index, int natureofdataenum,bool process_units)=0;
75 virtual void InputScale(int enum_type,IssmDouble scale_factor)=0;
76 virtual void GetVectorFromInputs(Vector<IssmDouble>* vector, int name_enum)=0;
77 virtual void GetVectorFromResults(Vector<IssmDouble>* vector,int id,int enum_in,int interp)=0;
78 virtual void InputArtificialNoise(int enum_type,IssmDouble min,IssmDouble max)=0;
79 virtual void AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
80 virtual int* GetHorizontalNeighboorSids(void)=0;
81 virtual IssmDouble TimeAdapt()=0;
82 virtual void MigrateGroundingLine(IssmDouble* old_floating_ice,IssmDouble* sheet_ungrounding)=0;
83 virtual void PotentialUngrounding(Vector<IssmDouble>* potential_sheet_ungrounding)=0;
84 virtual void PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm)=0;
85 virtual void Delta18oParameterization(void)=0;
86 virtual void SmbGradients()=0;
87 virtual int UpdatePotentialUngrounding(IssmDouble* potential_sheet_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf)=0;
88 virtual void ResetCoordinateSystem()=0;
89 virtual void SmearFunction(Vector<IssmDouble>* smearedvector,IssmDouble (*WeightFunction)(IssmDouble distance,IssmDouble radius),IssmDouble radius)=0;
90
91 #ifdef _HAVE_RESPONSES_
92 virtual void MinVel(IssmDouble* pminvel, bool process_units)=0;
93 virtual void MaxVel(IssmDouble* pmaxvel, bool process_units)=0;
94 virtual void MinVx(IssmDouble* pminvx, bool process_units)=0;
95 virtual void MaxVx(IssmDouble* pmaxvx, bool process_units)=0;
96 virtual void MaxAbsVx(IssmDouble* pmaxabsvx, bool process_units)=0;
97 virtual void MinVy(IssmDouble* pminvy, bool process_units)=0;
98 virtual void MaxVy(IssmDouble* pmaxvy, bool process_units)=0;
99 virtual void MaxAbsVy(IssmDouble* pmaxabsvy, bool process_units)=0;
100 virtual void MinVz(IssmDouble* pminvz, bool process_units)=0;
101 virtual void MaxVz(IssmDouble* pmaxvz, bool process_units)=0;
102 virtual void MaxAbsVz(IssmDouble* pmaxabsvz, bool process_units)=0;
103 virtual IssmDouble MassFlux(IssmDouble* segment,bool process_units)=0;
104 virtual void ElementResponse(IssmDouble* presponse,int response_enum,bool process_units)=0;
105 virtual IssmDouble IceVolume(void)=0;
106 virtual IssmDouble TotalSmb(void)=0;
107 #endif
108
109 #ifdef _HAVE_GIA_
110 virtual void GiaDeflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt,IssmDouble* x,IssmDouble* y)=0;
111 #endif
112
113 #ifdef _HAVE_CONTROL_
114 virtual void Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index)=0;
115 virtual IssmDouble ThicknessAbsMisfit(bool process_units ,int weight_index)=0;
116 virtual IssmDouble SurfaceAbsVelMisfit(bool process_units ,int weight_index)=0;
117 virtual IssmDouble SurfaceRelVelMisfit(bool process_units ,int weight_index)=0;
118 virtual IssmDouble SurfaceLogVelMisfit(bool process_units ,int weight_index)=0;
119 virtual IssmDouble SurfaceLogVxVyMisfit(bool process_units,int weight_index)=0;
120 virtual IssmDouble SurfaceAverageVelMisfit(bool process_units,int weight_index)=0;
121 virtual IssmDouble ThicknessAbsGradient(bool process_units,int weight_index)=0;
122 virtual IssmDouble ThicknessAlongGradient(bool process_units,int weight_index)=0;
123 virtual IssmDouble ThicknessAcrossGradient(bool process_units,int weight_index)=0;
124 virtual IssmDouble BalancethicknessMisfit(bool process_units,int weight_index)=0;
125 virtual IssmDouble RheologyBbarAbsGradient(bool process_units,int weight_index)=0;
126 virtual IssmDouble DragCoefficientAbsGradient(bool process_units,int weight_index)=0;
127 virtual void ControlInputGetGradient(Vector<IssmDouble>* gradient,int enum_type,int control_index)=0;
128 virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0;
129 virtual void ControlInputScaleGradient(int enum_type, IssmDouble scale)=0;
130 virtual void GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data)=0;
131 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0;
132 virtual void InputControlUpdate(IssmDouble scalar,bool save_parameter)=0;
133 #endif
134
135 #ifdef _HAVE_HYDROLOGY_
136 virtual void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode)=0;
137 virtual void GetHydrologyTransfer(Vector<IssmDouble>* transfer)=0;
138 #endif
139};
140#endif
Note: See TracBrowser for help on using the repository browser.