Ice Sheet System Model  4.18
Code documentation
Pengrid.cpp
Go to the documentation of this file.
1 
5 /*Headers*/
6 /*{{{*/
7 #ifdef HAVE_CONFIG_H
8  #include <config.h>
9 #else
10 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11 #endif
12 
13 #include "../classes.h"
14 #include "shared/shared.h"
15 #include "../../analyses/analyses.h"
16 /*}}}*/
17 
18 /*Element macros*/
19 #define NUMVERTICES 1
20 
21 /*Pengrid constructors and destructor*/
23  this->parameters=NULL;
24  this->hnode=NULL;
25  this->node=NULL;
26  this->helement=NULL;
27  this->element=NULL;
28 
29  /*not active, not zigzagging: */
30  active=0;
32 
33 }
34 /*}}}*/
35 Pengrid::Pengrid(int id, int index, IoModel* iomodel){/*{{{*/
36 
37  int pengrid_node_id;
38  int pengrid_element_id;
39 
40  /*Some checks if debugging activated*/
42  _assert_(index>=0 && index<iomodel->numberofvertices);
43  _assert_(id);
44 
45  /*id: */
46  this->id=id;
47 
48  /*hooks: */
49  pengrid_node_id=index+1;
50  pengrid_element_id=iomodel->singlenodetoelementconnectivity[index];
51  _assert_(pengrid_element_id);
52 
53  this->hnode=new Hook(&pengrid_node_id,1);
54  this->helement=new Hook(&pengrid_element_id,1);
55 
56  //this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
57  this->parameters=NULL;
58  this->node=NULL;
59  this->element=NULL;
60 
61  //let's not forget internals
62  this->active=0;
63  this->zigzag_counter=0;
64 
65 }
66 /*}}}*/
68  delete hnode;
69  delete helement;
70  return;
71 }
72 /*}}}*/
73 
74 /*Object virtual functions definitions:*/
75 Object* Pengrid::copy() {/*{{{*/
76 
77  Pengrid* pengrid=NULL;
78 
79  pengrid=new Pengrid();
80 
81  /*copy fields: */
82  pengrid->id=this->id;
83 
84  /*point parameters: */
85  pengrid->parameters=this->parameters;
86 
87  /*now deal with hooks and objects: */
88  pengrid->hnode=(Hook*)this->hnode->copy();
89  pengrid->helement=(Hook*)this->helement->copy();
90 
91  /*corresponding fields*/
92  pengrid->node =(Node*)pengrid->hnode->delivers();
93  pengrid->element=(Element*)pengrid->helement->delivers();
94 
95  //let's not forget internals
96  pengrid->active=this->active=0;
97  pengrid->zigzag_counter=this->zigzag_counter=0;
98 
99  return pengrid;
100 
101 }
102 /*}}}*/
103 void Pengrid::DeepEcho(void){/*{{{*/
104 
105  _printf_("Pengrid:\n");
106  _printf_(" id: " << id << "\n");
107  hnode->DeepEcho();
108  helement->DeepEcho();
109  _printf_(" active " << this->active << "\n");
110  _printf_(" zigzag_counter " << this->zigzag_counter << "\n");
111  _printf_(" parameters\n");
112  parameters->DeepEcho();
113 }
114 /*}}}*/
115 void Pengrid::Echo(void){/*{{{*/
116  this->DeepEcho();
117 }
118 /*}}}*/
119 int Pengrid::Id(void){ return id; }/*{{{*/
120 /*}}}*/
121 void Pengrid::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ /*{{{*/
122 
123  _assert_(this);
124 
125  /*ok, marshall operations: */
127  MARSHALLING(id);
128 
129  if(marshall_direction==MARSHALLING_BACKWARD){
130  this->hnode = new Hook();
131  this->helement = new Hook();
132  }
133 
134  this->hnode->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
135  this->helement->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
136 
137  /*corresponding fields*/
138  node =(Node*)this->hnode->delivers();
139  element=(Element*)this->helement->delivers();
140 
143 
144 }
145 /*}}}*/
146 int Pengrid::ObjectEnum(void){/*{{{*/
147 
148  return PengridEnum;
149 }
150 /*}}}*/
151 
152 /*Load virtual functions definitions:*/
153 void Pengrid::Configure(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){/*{{{*/
154 
155  /*Take care of hooking up all objects for this load, ie links the objects in the hooks to their respective
156  * datasets, using internal ids and offsets hidden in hooks: */
157  hnode->configure(nodesin);
158  helement->configure(elementsin);
159 
160  /*Get corresponding fields*/
161  node=(Node*)hnode->delivers();
163 
164  /*point parameters to real dataset: */
165  this->parameters=parametersin;
166 }
167 /*}}}*/
169 
170  /*No loads applied, do nothing: */
171  return;
172 
173 }
174 /*}}}*/
176  /*No loads applied, do nothing, originaly used for moulin input: */
177  return;
178 
179 }
180 /*}}}*/
181 void Pengrid::GetNodesLidList(int* lidlist){/*{{{*/
182 
183  _assert_(lidlist);
184  _assert_(node);
185 
186  lidlist[0]=node->Lid();
187 }
188 /*}}}*/
189 void Pengrid::GetNodesSidList(int* sidlist){/*{{{*/
190 
191  _assert_(sidlist);
192  _assert_(node);
193 
194  sidlist[0]=node->Sid();
195 }
196 /*}}}*/
197 int Pengrid::GetNumberOfNodes(void){/*{{{*/
198 
199  return NUMVERTICES;
200 }
201 /*}}}*/
202 bool Pengrid::IsPenalty(void){/*{{{*/
203  return true;
204 }
205 /*}}}*/
207 
208  /*Retrieve parameters: */
209  ElementMatrix* Ke=NULL;
210  int analysis_type;
211  this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
212 
213  switch(analysis_type){
214  case ThermalAnalysisEnum:
216  break;
217  case MeltingAnalysisEnum:
219  break;
222  break;
223  default:
224  _error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
225  }
226 
227  /*Add to global matrix*/
228  if(Ke){
229  Ke->AddToGlobal(Kff,Kfs);
230  delete Ke;
231  }
232 }
233 /*}}}*/
235 
236  /*Retrieve parameters: */
237  ElementVector* pe=NULL;
238  int analysis_type;
239  this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
240 
241  switch(analysis_type){
242  case ThermalAnalysisEnum:
244  break;
245  case MeltingAnalysisEnum:
247  break;
249  break;
252  break;
253  default:
254  _error_("analysis " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not supported yet");
255  }
256 
257  /*Add to global Vector*/
258  if(pe){
259  pe->AddToGlobal(pf);
260  delete pe;
261  }
262 }
263 /*}}}*/
264 void Pengrid::ResetHooks(){/*{{{*/
265 
266  this->node=NULL;
267  this->element=NULL;
268  this->parameters=NULL;
269 
270  /*Get Element type*/
271  this->hnode->reset();
272  this->helement->reset();
273 
274 }
275 /*}}}*/
276 void Pengrid::SetCurrentConfiguration(Elements* elementsin,Loads* loadsin,Nodes* nodesin,Vertices* verticesin,Materials* materialsin,Parameters* parametersin){/*{{{*/
277 
278 }
279 /*}}}*/
280 void Pengrid::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){/*{{{*/
281 
282  /*Output */
283  int d_nz = 0;
284  int o_nz = 0;
285 
286  if(!flags[this->node->Lid()]){
287 
288  /*flag current node so that no other element processes it*/
289  flags[this->node->Lid()]=true;
290 
291  int counter=0;
292  while(flagsindices[counter]>=0) counter++;
293  flagsindices[counter]=this->node->Lid();
294 
295  /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
296  switch(set2_enum){
297  case FsetEnum:
298  if(node->fsize){
299  if(this->node->IsClone())
300  o_nz += 1;
301  else
302  d_nz += 1;
303  }
304  break;
305  case GsetEnum:
306  if(node->gsize){
307  if(this->node->IsClone())
308  o_nz += 1;
309  else
310  d_nz += 1;
311  }
312  break;
313  case SsetEnum:
314  if(node->ssize){
315  if(this->node->IsClone())
316  o_nz += 1;
317  else
318  d_nz += 1;
319  }
320  break;
321  default: _error_("not supported");
322  }
323  }
324 
325  /*Assign output pointers: */
326  *pd_nz=d_nz;
327  *po_nz=o_nz;
328 }
329 /*}}}*/
330 
331 /*Pengrid management:*/
332 void Pengrid::ConstraintActivate(int* punstable){/*{{{*/
333 
334  int analysis_type;
335 
336  /*Retrieve parameters: */
337  this->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
338 
339  switch(analysis_type){
341  /*No penalty to check*/
342  return;
343  case ThermalAnalysisEnum:
344  ConstraintActivateThermal(punstable);
345  break;
346  case MeltingAnalysisEnum:
347  /*No penalty to check*/
348  return;
351  break;
352  default:
353  _error_("analysis: " << EnumToStringx(analysis_type) << " not supported yet");
354  }
355 }
356 /*}}}*/
358 
359  // The penalty is stable if it doesn't change during two consecutive iterations.
360  int unstable=0;
361  int new_active;
362  int penalty_lock;
363  IssmDouble pressure;
364  IssmDouble h;
365  IssmDouble h_max;
366  HydrologyDCInefficientAnalysis* inefanalysis = NULL;
367 
368  /*check that pengrid is not a clone (penalty to be added only once)*/
369  if(node->IsClone()){
370  unstable=0;
371  *punstable=unstable;
372  return;
373  }
374  if(!element->IsOnBase()){
375  unstable=0;
376  active=0;
377  *punstable=unstable;
378  return;
379  }
380 
381  /*Get sediment water head h*/
382  inefanalysis = new HydrologyDCInefficientAnalysis();
384  inefanalysis->GetHydrologyDCInefficientHmax(&h_max,element,node);
386 
387  if (h>h_max){
388  new_active=1;
389  }
390  else{
391  new_active=0;
392  }
393 
394  if(this->active==new_active){
395  unstable=0;
396  }
397  else{
398  unstable=1;
399  if(penalty_lock)zigzag_counter++;
400  }
401 
402  /*If penalty keeps zigzagging more than penalty_lock times: */
403  if(penalty_lock){
404  if(zigzag_counter>penalty_lock){
405  unstable=0;
406  active=1;
407  }
408  }
409  /*Set penalty flag*/
410  this->active=new_active;
411 
412  /*Assign output pointers:*/
413  delete inefanalysis;
414  *punstable=unstable;
415 }
416 /*}}}*/
417 void Pengrid::ConstraintActivateThermal(int* punstable){/*{{{*/
418 
419  // The penalty is stable if it doesn't change during to successive iterations.
420  IssmDouble pressure;
421  IssmDouble temperature;
422  IssmDouble t_pmp;
423  int new_active;
424  int unstable=0;
425  int penalty_lock;
426 
427  /*recover pointers: */
428  Penta* penta=(Penta*)element;
429 
430  /*check that pengrid is not a clone (penalty to be added only once)*/
431  if (node->IsClone()){
432  unstable=0;
433  *punstable=unstable;
434  return;
435  }
436 
437  //First recover pressure and temperature values, using the element: */
438  penta->GetInputValue(&pressure,node,PressureEnum);
439  penta->GetInputValue(&temperature,node,TemperaturePicardEnum);
440 
441  //Recover our data:
443 
444  //Compute pressure melting point
445  t_pmp=element->TMeltingPoint(pressure);
446 
447  //Figure out if temperature is over melting_point, in which case, this penalty needs to be activated.
448 
449  if (temperature>t_pmp){
450  new_active=1;
451  }
452  else{
453  new_active=0;
454  }
455 
456  //Figure out stability of this penalty
457  if (active==new_active){
458  unstable=0;
459  }
460  else{
461  unstable=1;
462  if(penalty_lock)zigzag_counter++;
463  }
464 
465  /*If penalty keeps zigzagging more than 5 times: */
466  if(penalty_lock){
467  if(zigzag_counter>penalty_lock){
468  unstable=0;
469  active=1;
470  }
471  }
472 
473  //Set penalty flag
474  active=new_active;
475 
476  //*Assign output pointers:*/
477  *punstable=unstable;
478 }
479 /*}}}*/
481  IssmDouble penalty_factor;
482 
483  /*Retrieve parameters*/
485 
486  /*Initialize Element matrix and return if necessary*/
487  if(!this->active) return NULL;
489 
490  Ke->values[0]=kmax*pow(10.,penalty_factor);
491 
492  /*Clean up and return*/
493  return Ke;
494 }
495 /*}}}*/
497 
498  IssmDouble pressure,temperature,t_pmp;
499  IssmDouble penalty_factor;
500 
501  Penta* penta=(Penta*)element;
502 
503  /*check that pengrid is not a clone (penalty to be added only once)*/
504  if (node->IsClone()) return NULL;
505  ElementMatrix* Ke=new ElementMatrix(&node,1,this->parameters);
506 
507  /*Retrieve all parameters*/
508  penta->GetInputValue(&pressure,node,PressureEnum);
509  penta->GetInputValue(&temperature,node,TemperatureEnum);
511 
512  /*Compute pressure melting point*/
514 
515  /*Add penalty load*/
516  if (temperature<t_pmp){ //If T<Tpmp, there must be no melting. Therefore, melting should be constrained to 0 when T<Tpmp, instead of using spcs, use penalties
517  Ke->values[0]=kmax*pow(10.,penalty_factor);
518  }
519 
520  /*Clean up and return*/
521  return Ke;
522 }
523 /*}}}*/
525 
526  IssmDouble penalty_factor;
527 
528  /*Initialize Element matrix and return if necessary*/
529  if(!this->active) return NULL;
531 
532  /*recover parameters: */
534 
535  Ke->values[0]=kmax*pow(10.,penalty_factor);
536 
537  /*Clean up and return*/
538  return Ke;
539 }
540 /*}}}*/
542 
543  IssmDouble h_max;
544  IssmDouble penalty_factor;
545  HydrologyDCInefficientAnalysis* inefanalysis = NULL;
546 
547  /*Initialize Element matrix and return if necessary*/
548  if(!this->active) return NULL;
549  ElementVector* pe=new ElementVector(&node,1,this->parameters);
550  inefanalysis = new HydrologyDCInefficientAnalysis();
551 
552  /*Retrieve parameters*/
554 
555  /*Get h_max and compute penalty*/
556  inefanalysis->GetHydrologyDCInefficientHmax(&h_max,element,node);
557 
558  pe->values[0]=kmax*pow(10.,penalty_factor)*h_max;
559 
560  /*Clean up and return*/
561  delete inefanalysis;
562  return pe;
563 }
564 /*}}}*/
566 
567  IssmDouble pressure;
568  IssmDouble temperature;
569  IssmDouble melting_offset;
570  IssmDouble t_pmp;
571  IssmDouble dt,penalty_factor;
572 
573  /*recover pointers: */
574  Penta* penta=(Penta*)element;
575 
576  /*check that pengrid is not a clone (penalty to be added only once)*/
577  if (node->IsClone()) return NULL;
579 
580  /*Retrieve all parameters*/
581  penta->GetInputValue(&pressure,node,PressureEnum);
582  penta->GetInputValue(&temperature,node,TemperatureEnum);
583  parameters->FindParam(&melting_offset,MeltingOffsetEnum);
586 
587  /*Compute pressure melting point*/
589 
590  /*Add penalty load
591  This time, the penalty must have the same value as the one used for the thermal computation
592  so that the corresponding melting can be computed correctly
593  In the thermal computation, we used kmax=melting_offset, and the same penalty_factor*/
594  if (temperature<t_pmp){ //%no melting
595  pe->values[0]=0;
596  }
597  else{
598  if (reCast<bool>(dt)) pe->values[0]=melting_offset*pow(10.,penalty_factor)*(temperature-t_pmp)/dt;
599  else pe->values[0]=melting_offset*pow(10.,penalty_factor)*(temperature-t_pmp);
600  }
601 
602  /*Clean up and return*/
603  return pe;
604 }
605 /*}}}*/
607 
608  IssmDouble pressure;
609  IssmDouble t_pmp;
610  IssmDouble penalty_factor;
611 
612  Penta* penta=(Penta*)element;
613 
614  /*Initialize Element matrix and return if necessary*/
615  if(!this->active) return NULL;
616  ElementVector* pe=new ElementVector(&node,1,this->parameters);
617 
618  /*Retrieve all parameters*/
619  penta->GetInputValue(&pressure,node,PressureEnum);
621 
622  /*Compute pressure melting point*/
624 
625  pe->values[0]=kmax*pow(10.,penalty_factor)*t_pmp;
626 
627  /*Clean up and return*/
628  return pe;
629 }
630 /*}}}*/
631 void Pengrid::ResetConstraint(void){/*{{{*/
632  active = 0;
633  zigzag_counter = 0;
634 }
635 /*}}}*/
637 
638  zigzag_counter=0;
639 }
640 /*}}}*/
Matrix< IssmDouble >
Pengrid::PenaltyCreateKMatrixHydrologyDCInefficient
ElementMatrix * PenaltyCreateKMatrixHydrologyDCInefficient(IssmDouble kmax)
Definition: Pengrid.cpp:480
ThermalPenaltyFactorEnum
@ ThermalPenaltyFactorEnum
Definition: EnumDefinitions.h:420
Vertices
Declaration of Vertices class.
Definition: Vertices.h:15
PengridEnum
@ PengridEnum
Definition: EnumDefinitions.h:1229
Pengrid::ConstraintActivate
void ConstraintActivate(int *punstable)
Definition: Pengrid.cpp:332
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
Pengrid::SetwiseNodeConnectivity
void SetwiseNodeConnectivity(int *d_nz, int *o_nz, Node *node, bool *flags, int *flagsindices, int set1_enum, int set2_enum)
Definition: Pengrid.cpp:280
IssmDouble
double IssmDouble
Definition: types.h:37
Element::IsOnBase
bool IsOnBase()
Definition: Element.cpp:1984
Nodes
Declaration of Nodes class.
Definition: Nodes.h:19
Pengrid::Id
int Id()
Definition: Pengrid.cpp:119
StressbalanceAnalysisEnum
@ StressbalanceAnalysisEnum
Definition: EnumDefinitions.h:1285
Pengrid::PenaltyCreateKMatrix
void PenaltyCreateKMatrix(Matrix< IssmDouble > *Kff, Matrix< IssmDouble > *kfs, IssmDouble kmax)
Definition: Pengrid.cpp:206
_printf_
#define _printf_(StreamArgs)
Definition: Print.h:22
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
MaterialsMeltingpointEnum
@ MaterialsMeltingpointEnum
Definition: EnumDefinitions.h:259
MARSHALLING_ENUM
#define MARSHALLING_ENUM(EN)
Definition: Marshalling.h:14
TimesteppingTimeStepEnum
@ TimesteppingTimeStepEnum
Definition: EnumDefinitions.h:433
Hook::DeepEcho
void DeepEcho(void)
Definition: Hook.cpp:77
Elements
Declaration of Elements class.
Definition: Elements.h:17
Pengrid::DeepEcho
void DeepEcho()
Definition: Pengrid.cpp:103
SsetEnum
@ SsetEnum
Definition: EnumDefinitions.h:1282
Pengrid::ConstraintActivateThermal
void ConstraintActivateThermal(int *punstable)
Definition: Pengrid.cpp:417
PressureEnum
@ PressureEnum
Definition: EnumDefinitions.h:664
HydrologydcPenaltyFactorEnum
@ HydrologydcPenaltyFactorEnum
Definition: EnumDefinitions.h:188
ElementVector::values
IssmDouble * values
Definition: ElementVector.h:24
Pengrid::CreatePVector
void CreatePVector(Vector< IssmDouble > *pf)
Definition: Pengrid.cpp:175
Pengrid::PenaltyCreateKMatrixThermal
ElementMatrix * PenaltyCreateKMatrixThermal(IssmDouble kmax)
Definition: Pengrid.cpp:524
Pengrid::active
int active
Definition: Pengrid.h:38
Pengrid::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Pengrid.cpp:121
Pengrid::PenaltyCreatePVectorMelting
ElementVector * PenaltyCreatePVectorMelting(IssmDouble kmax)
Definition: Pengrid.cpp:565
Pengrid::Echo
void Echo()
Definition: Pengrid.cpp:115
Penta
Definition: Penta.h:29
Hook::reset
void reset(void)
Definition: Hook.cpp:211
Pengrid::Pengrid
Pengrid()
Definition: Pengrid.cpp:22
Pengrid::PenaltyCreatePVectorThermal
ElementVector * PenaltyCreatePVectorThermal(IssmDouble kmax)
Definition: Pengrid.cpp:606
HydrologyDCInefficientAnalysisEnum
@ HydrologyDCInefficientAnalysisEnum
Definition: EnumDefinitions.h:1099
Pengrid::GetNodesSidList
void GetNodesSidList(int *sidlist)
Definition: Pengrid.cpp:189
Element
Definition: Element.h:41
Node::ssize
int ssize
Definition: Node.h:46
Pengrid::Configure
void Configure(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)
Definition: Pengrid.cpp:153
MeltingAnalysisEnum
@ MeltingAnalysisEnum
Definition: EnumDefinitions.h:1182
Object
Definition: Object.h:13
Parameters::DeepEcho
void DeepEcho()
Definition: Parameters.cpp:99
Hook::delivers
Object * delivers(void)
Definition: Hook.cpp:191
Pengrid::element
Element * element
Definition: Pengrid.h:33
Materials
Declaration of Materials class.
Definition: Materials.h:16
Pengrid::id
int id
Definition: Pengrid.h:25
AdjointHorizAnalysisEnum
@ AdjointHorizAnalysisEnum
Definition: EnumDefinitions.h:972
Pengrid::zigzag_counter
int zigzag_counter
Definition: Pengrid.h:39
Pengrid::GetNodesLidList
void GetNodesLidList(int *lidlist)
Definition: Pengrid.cpp:181
Pengrid::ResetZigzagCounter
void ResetZigzagCounter(void)
Definition: Pengrid.cpp:636
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
Hook
Definition: Hook.h:16
MaterialsBetaEnum
@ MaterialsBetaEnum
Definition: EnumDefinitions.h:250
Pengrid
Definition: Pengrid.h:21
Hook::configure
void configure(DataSet *dataset)
Definition: Hook.cpp:145
Pengrid::ObjectEnum
int ObjectEnum()
Definition: Pengrid.cpp:146
GsetEnum
@ GsetEnum
Definition: EnumDefinitions.h:1093
Pengrid::ConstraintActivateHydrologyDCInefficient
void ConstraintActivateHydrologyDCInefficient(int *punstable)
Definition: Pengrid.cpp:357
HydrologyDCInefficientAnalysis
Definition: HydrologyDCInefficientAnalysis.h:12
Pengrid::GetNumberOfNodes
int GetNumberOfNodes(void)
Definition: Pengrid.cpp:197
MARSHALLING
#define MARSHALLING(FIELD)
Definition: Marshalling.h:29
HydrologyDCInefficientAnalysis::GetHydrologyDCInefficientHmax
void GetHydrologyDCInefficientHmax(IssmDouble *ph_max, Element *element, Node *innode)
Definition: HydrologyDCInefficientAnalysis.cpp:676
Node::IsClone
int IsClone()
Definition: Node.cpp:801
Pengrid::ResetHooks
void ResetHooks()
Definition: Pengrid.cpp:264
Pengrid::IsPenalty
bool IsPenalty(void)
Definition: Pengrid.cpp:202
ThermalPenaltyLockEnum
@ ThermalPenaltyLockEnum
Definition: EnumDefinitions.h:421
Hook::copy
Object * copy(void)
Definition: Hook.cpp:61
NUMVERTICES
#define NUMVERTICES
Definition: Pengrid.cpp:19
MARSHALLING_BACKWARD
@ MARSHALLING_BACKWARD
Definition: Marshalling.h:10
HydrologydcPenaltyLockEnum
@ HydrologydcPenaltyLockEnum
Definition: EnumDefinitions.h:189
Pengrid::CreateKMatrix
void CreateKMatrix(Matrix< IssmDouble > *Kff, Matrix< IssmDouble > *Kfs)
Definition: Pengrid.cpp:168
Element::TMeltingPoint
IssmDouble TMeltingPoint(IssmDouble pressure)
Definition: Element.cpp:4583
ThermalAnalysisEnum
@ ThermalAnalysisEnum
Definition: EnumDefinitions.h:1302
IoModel::singlenodetoelementconnectivity
int * singlenodetoelementconnectivity
Definition: IoModel.h:100
TemperatureEnum
@ TemperatureEnum
Definition: EnumDefinitions.h:831
SedimentHeadSubstepEnum
@ SedimentHeadSubstepEnum
Definition: EnumDefinitions.h:700
Pengrid::PenaltyCreatePVector
void PenaltyCreatePVector(Vector< IssmDouble > *pf, IssmDouble kmax)
Definition: Pengrid.cpp:234
Pengrid::parameters
Parameters * parameters
Definition: Pengrid.h:35
Loads
Declaration of Loads class.
Definition: Loads.h:16
Node
Definition: Node.h:23
Node::Lid
int Lid(void)
Definition: Node.cpp:618
Node::Sid
int Sid(void)
Definition: Node.cpp:622
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Pengrid::PenaltyCreatePVectorHydrologyDCInefficient
ElementVector * PenaltyCreatePVectorHydrologyDCInefficient(IssmDouble kmax)
Definition: Pengrid.cpp:541
Pengrid::ResetConstraint
void ResetConstraint(void)
Definition: Pengrid.cpp:631
Pengrid::hnode
Hook * hnode
Definition: Pengrid.h:28
Element::GetInputValue
void GetInputValue(bool *pvalue, int enum_type)
Definition: Element.cpp:1177
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Pengrid::copy
Object * copy()
Definition: Pengrid.cpp:75
ElementVector::AddToGlobal
void AddToGlobal(Vector< IssmDouble > *pf)
Definition: ElementVector.cpp:155
Node::gsize
int gsize
Definition: Node.h:44
Pengrid::node
Node * node
Definition: Pengrid.h:32
AnalysisTypeEnum
@ AnalysisTypeEnum
Definition: EnumDefinitions.h:36
Penta::GetInputValue
void GetInputValue(IssmDouble *pvalue, Vertex *vertex, int enumtype)
Definition: Penta.cpp:1693
ElementVector
Definition: ElementVector.h:20
ElementMatrix::AddToGlobal
void AddToGlobal(Matrix< IssmDouble > *Kff, Matrix< IssmDouble > *Kfs)
Definition: ElementMatrix.cpp:271
IoModel
Definition: IoModel.h:48
Pengrid::helement
Hook * helement
Definition: Pengrid.h:29
FsetEnum
@ FsetEnum
Definition: EnumDefinitions.h:1075
Pengrid::SetCurrentConfiguration
void SetCurrentConfiguration(Elements *elements, Loads *loads, Nodes *nodes, Vertices *vertices, Materials *materials, Parameters *parameters)
Definition: Pengrid.cpp:276
shared.h
ElementMatrix
Definition: ElementMatrix.h:19
Vector< IssmDouble >
Pengrid::~Pengrid
~Pengrid()
Definition: Pengrid.cpp:67
MeltingOffsetEnum
@ MeltingOffsetEnum
Definition: EnumDefinitions.h:269
Pengrid::PenaltyCreateKMatrixMelting
ElementMatrix * PenaltyCreateKMatrixMelting(IssmDouble kmax)
Definition: Pengrid.cpp:496
TemperaturePicardEnum
@ TemperaturePicardEnum
Definition: EnumDefinitions.h:833
Node::fsize
int fsize
Definition: Node.h:45
Hook::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Hook.cpp:122
ElementMatrix::values
IssmDouble * values
Definition: ElementMatrix.h:26