source: issm/trunk/src/c/objects/Elements/Element.h@ 12630

Last change on this file since 12630 was 12630, checked in by Mathieu Morlighem, 13 years ago

Fixed PDD crash in 3d by extruding SurfaceForcingMassBalance and added some checks on results

File size: 6.1 KB
RevLine 
[3683]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
8#ifndef _ELEMENT_H_
9#define _ELEMENT_H_
10
11/*Headers:*/
12/*{{{1*/
13#include "../Object.h"
14
15class DataSet;
16class Parameters;
[4039]17class Patch;
[11995]18class Matrix;
19class Vector;
[3683]20
21#include "../../toolkits/toolkits.h"
22/*}}}*/
23
[4244]24class Element: public Object,public Update{
[3683]25
26 public:
27
28 virtual ~Element(){};
[4248]29
[4218]30 virtual void Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
[4575]31 virtual void SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
[11995]32 virtual void CreateKMatrix(Matrix* Kff, Matrix* Kfs,Vector* df)=0;
33 virtual void CreatePVector(Vector* pf)=0;
34 virtual void CreateJacobianMatrix(Matrix* Jff)=0;
35 virtual void GetSolutionFromInputs(Vector* solution)=0;
[5719]36 virtual int GetNodeIndex(Node* node)=0;
[7089]37 virtual int Sid()=0;
[10143]38 virtual bool IsFloating()=0;
[7089]39 virtual bool IsNodeOnShelf()=0;
[7323]40 virtual bool IsNodeOnShelfFromFlags(double* flags)=0;
[5745]41 virtual bool IsOnBed()=0;
[10135]42 virtual void GetInputListOnVertices(double* pvalue,int enumtype)=0;
43 virtual void GetInputListOnVertices(double* pvalue,int enumtype,double defaultvalue)=0;
44 virtual void GetInputValue(double* pvalue,Node* node,int enumtype)=0;
[9817]45
[4043]46 virtual double SurfaceArea(void)=0;
[4931]47 virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type,int object_enum)=0;
[11995]48 virtual void ComputeBasalStress(Vector* sigma_b)=0;
49 virtual void ComputeStrainRate(Vector* eps)=0;
[4039]50 virtual void PatchSize(int* pnumrows, int* pnumvertices,int* pnumnodes)=0;
51 virtual void PatchFill(int* pcount, Patch* patch)=0;
[11027]52 virtual void ListResultsInfo(int** results_enums,int** results_size,double** results_times,int** results_steps,int* num_results)=0;
[4873]53 virtual void DeleteResults(void)=0;
[4025]54 virtual void Update(int index, IoModel* iomodel,int analysis_counter,int analysis_type)=0;
[4039]55 virtual void InputToResult(int enum_type,int step,double time)=0;
[8967]56 virtual void InputDuplicate(int original_enum,int new_enum)=0;
57 virtual void InputCreate(double scalar,int name,int code)=0;
58 virtual void InputCreate(double* vector, int index,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code)=0;
[9775]59 virtual void ProcessResultsUnits(void)=0;
[9110]60 virtual void RequestedOutput(int output_enum,int step,double time)=0;
[9817]61
[11995]62 virtual int NodalValue(double* pvalue, int index, int natureofdataenum,bool process_units)=0;
[4076]63 virtual void InputScale(int enum_type,double scale_factor)=0;
[11995]64 virtual void GetVectorFromInputs(Vector* vector, int name_enum)=0;
[12630]65 virtual void GetVectorFromResults(Vector* vector,int id,int enum_in,int interp)=0;
[5578]66 virtual void InputArtificialNoise(int enum_type,double min,double max)=0;
[4880]67 virtual bool InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
[11995]68 virtual void AverageOntoPartition(Vector* partition_contributions,Vector* partition_areas,double* vertex_response,double* qmu_part)=0;
[7089]69 virtual int* GetHorizontalNeighboorSids(void)=0;
[6130]70 virtual double TimeAdapt()=0;
[10377]71 virtual void MigrateGroundingLine(double* old_floating_ice,double* sheet_ungrounding)=0;
[11995]72 virtual void PotentialSheetUngrounding(Vector* potential_sheet_ungrounding)=0;
[11778]73 virtual void PositiveDegreeDay(double* pdds,double* pds,double signorm)=0;
[11995]74 virtual int UpdatePotentialSheetUngrounding(double* potential_sheet_ungrounding,Vector* vec_nodes_on_iceshelf,double* nodes_on_iceshelf)=0;
[10440]75 virtual void ResetCoordinateSystem()=0;
[11995]76 virtual void SmearFunction(Vector* smearedvector,double (*WeightFunction)(double distance,double radius),double radius)=0;
[9817]77
78 #ifdef _HAVE_RESPONSES_
79 virtual void MinVel(double* pminvel, bool process_units)=0;
80 virtual void MaxVel(double* pmaxvel, bool process_units)=0;
81 virtual void MinVx(double* pminvx, bool process_units)=0;
82 virtual void MaxVx(double* pmaxvx, bool process_units)=0;
83 virtual void MaxAbsVx(double* pmaxabsvx, bool process_units)=0;
84 virtual void MinVy(double* pminvy, bool process_units)=0;
85 virtual void MaxVy(double* pmaxvy, bool process_units)=0;
86 virtual void MaxAbsVy(double* pmaxabsvy, bool process_units)=0;
87 virtual void MinVz(double* pminvz, bool process_units)=0;
88 virtual void MaxVz(double* pmaxvz, bool process_units)=0;
89 virtual void MaxAbsVz(double* pmaxabsvz, bool process_units)=0;
90 virtual double MassFlux(double* segment,bool process_units)=0;
[10703]91 virtual void ElementResponse(double* presponse,int response_enum,bool process_units)=0;
[9880]92 virtual double IceVolume(void)=0;
[9817]93 #endif
[4055]94
[9817]95 #ifdef _HAVE_CONTROL_
[11995]96 virtual void Gradj(Vector* gradient,int control_type,int control_index)=0;
[9817]97 virtual double ThicknessAbsMisfit(bool process_units ,int weight_index)=0;
98 virtual double SurfaceAbsVelMisfit(bool process_units ,int weight_index)=0;
99 virtual double SurfaceRelVelMisfit(bool process_units ,int weight_index)=0;
100 virtual double SurfaceLogVelMisfit(bool process_units ,int weight_index)=0;
101 virtual double SurfaceLogVxVyMisfit(bool process_units,int weight_index)=0;
102 virtual double SurfaceAverageVelMisfit(bool process_units,int weight_index)=0;
103 virtual double ThicknessAbsGradient(bool process_units,int weight_index)=0;
104 virtual double RheologyBbarAbsGradient(bool process_units,int weight_index)=0;
105 virtual double DragCoefficientAbsGradient(bool process_units,int weight_index)=0;
[11995]106 virtual void ControlInputGetGradient(Vector* gradient,int enum_type,int control_index)=0;
[11527]107 virtual void ControlInputSetGradient(double* gradient,int enum_type,int control_index)=0;
[9817]108 virtual void ControlInputScaleGradient(int enum_type, double scale)=0;
[11995]109 virtual void GetVectorFromControlInputs(Vector* gradient,int control_enum,int control_index,const char* data)=0;
[11527]110 virtual void SetControlInputsFromVector(double* vector,int control_enum,int control_index)=0;
[9817]111 virtual void InputControlUpdate(double scalar,bool save_parameter)=0;
112 #endif
[3683]113};
114#endif
Note: See TracBrowser for help on using the repository browser.