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

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

CHG: elements and loads now have a pointer to vertices, this change is necessary because we are implementing quadratic elements and the number of nodes is not the same as the number of vertices. Vertices coordinates must be retrieved from the vertices, not the nodes

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