source: issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp@ 19984

Last change on this file since 19984 was 19984, checked in by Eric.Larour, 9 years ago

CHG: new sea level rise solution. Not valdated yet!

This solution requires one Sealevelrise analysis (so added the corresponding EnumToAnalysis and analysis.h files + SealevelriseAnalysis.* files).
In terms of solution core: we have a new sealevelrise_core.cpp files + corresponding hook up in CorePointerFromSolutionEnum.
This core calls the new FemModel Sealevelrise module, which loops through the elements, hence the mods to Element.* along with all
derivatives classes, in particular Tria.
In terms of ModelProcessorx, we have a modified CreateElementsVerticesAndMaterials to include lat,long and radius, which also translsates
into modifications for the Vertex object. The VertexCoordinatesx module is also modified, to be able to retrieve x,y,z but also lat,long,r
from vertices.
Of course, this is all driven from matlab, where we have a new field in the model, the slr class.

File size: 3.5 KB
Line 
1#include "./SealevelriseAnalysis.h"
2#include "../toolkits/toolkits.h"
3#include "../classes/classes.h"
4#include "../shared/shared.h"
5#include "../modules/modules.h"
6
7/*Model processing*/
8void SealevelriseAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
9 /*No constraints*/
10}/*}}}*/
11void SealevelriseAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
12 /*No loads*/
13}/*}}}*/
14void SealevelriseAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
15 ::CreateNodes(nodes,iomodel,SealevelriseAnalysisEnum,P1Enum);
16}/*}}}*/
17int SealevelriseAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
18 return 1;
19}/*}}}*/
20void SealevelriseAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/
21
22 /*Update elements: */
23 int counter=0;
24 for(int i=0;i<iomodel->numberofelements;i++){
25 if(iomodel->my_elements[i]){
26 Element* element=(Element*)elements->GetObjectByOffset(counter);
27 element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
28 counter++;
29 }
30 }
31
32 /*Create inputs: */
33 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);
34 iomodel->FetchDataToInput(elements,MaskOceanLevelsetEnum);
35 iomodel->FetchDataToInput(elements,SealevelriseDeltathicknessEnum);
36
37}/*}}}*/
38void SealevelriseAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/
39
40 int nl;
41 IssmDouble* love_h=NULL;
42 IssmDouble* love_k=NULL;
43
44 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseReltolEnum));
45 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseAbstolEnum));
46 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseMaxiterEnum));
47 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseRigidEnum));
48 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseElasticEnum));
49 parameters->AddObject(iomodel->CopyConstantObject(SealevelriseEustaticEnum));
50
51 iomodel->FetchData(&love_h,&nl,NULL,SealevelriseLoveHEnum);
52 iomodel->FetchData(&love_k,&nl,NULL,SealevelriseLoveKEnum);
53
54 parameters->AddObject(new DoubleVecParam(SealevelriseLoveHEnum,love_h,nl));
55 parameters->AddObject(new DoubleVecParam(SealevelriseLoveKEnum,love_k,nl));
56
57 /*free ressources: */
58 xDelete<IssmDouble>(love_h);
59 xDelete<IssmDouble>(love_k);
60
61}/*}}}*/
62
63/*Finite Element Analysis*/
64void SealevelriseAnalysis::Core(FemModel* femmodel){/*{{{*/
65 _error_("not implemented");
66}/*}}}*/
67ElementVector* SealevelriseAnalysis::CreateDVector(Element* element){/*{{{*/
68 /*Default, return NULL*/
69 return NULL;
70}/*}}}*/
71ElementMatrix* SealevelriseAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/
72_error_("Not implemented");
73}/*}}}*/
74ElementMatrix* SealevelriseAnalysis::CreateKMatrix(Element* element){/*{{{*/
75 _error_("not implemented yet");
76}/*}}}*/
77ElementVector* SealevelriseAnalysis::CreatePVector(Element* element){/*{{{*/
78_error_("not implemented yet");
79}/*}}}*/
80void SealevelriseAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/
81 _error_("not implemented yet");
82}/*}}}*/
83void SealevelriseAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/
84 _error_("Not implemented yet");
85}/*}}}*/
86void SealevelriseAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
87 _error_("not implemented yet");
88}/*}}}*/
89void SealevelriseAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
90 /*Default, do nothing*/
91 return;
92}/*}}}*/
Note: See TracBrowser for help on using the repository browser.