source: issm/oecreview/Archive/16554-17801/ISSM-17193-17194.diff@ 17802

Last change on this file since 17802 was 17802, checked in by Mathieu Morlighem, 11 years ago

Added archives

File size: 6.1 KB
RevLine 
[17802]1Index: ../trunk-jpl/src/c/classes/Elements/Element.h
2===================================================================
3--- ../trunk-jpl/src/c/classes/Elements/Element.h (revision 17193)
4+++ ../trunk-jpl/src/c/classes/Elements/Element.h (revision 17194)
5@@ -220,6 +220,8 @@
6 virtual int PressureInterpolation()=0;
7 virtual bool IsZeroLevelset(int levelset_enum)=0;
8 virtual void ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum)=0;
9+ virtual void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0;
10+ virtual void GetNormalFromLSF(IssmDouble *pnormal)=0;
11
12 #ifdef _HAVE_RESPONSES_
13 virtual void AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0;
14Index: ../trunk-jpl/src/c/classes/Elements/Tria.cpp
15===================================================================
16--- ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 17193)
17+++ ../trunk-jpl/src/c/classes/Elements/Tria.cpp (revision 17194)
18@@ -890,6 +890,69 @@
19 *pxyz_zero= xyz_zero;
20 }
21 /*}}}*/
22+void Tria::GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){/*{{{*/
23+
24+ /* Intermediaries */
25+ int i, dir,nrfrontnodes;
26+ IssmDouble levelset[NUMVERTICES];
27+
28+ /*Recover parameters and values*/
29+ GetInputListOnVertices(&levelset[0],levelsetenum);
30+
31+ int* indicesfront = xNew<int>(NUMVERTICES);
32+ /* Get nodes where there is no ice */
33+ nrfrontnodes=0;
34+ for(i=0;i<NUMVERTICES;i++){
35+ if(levelset[i]>=0.){
36+ indicesfront[nrfrontnodes]=i;
37+ nrfrontnodes++;
38+ }
39+ }
40+
41+ IssmDouble* xyz_front = xNew<IssmDouble>(3*nrfrontnodes);
42+ /* Return nodes */
43+ for(i=0;i<nrfrontnodes;i++){
44+ for(dir=0;dir<3;dir++){
45+ xyz_front[3*i+dir]=xyz_list[indicesfront[i]+dir];
46+ }
47+ }
48+
49+ *pxyz_front=xyz_front;
50+
51+ xDelete<int>(indicesfront);
52+}/*}}}*/
53+void Tria::GetNormalFromLSF(IssmDouble *pnormal){/*{{{*/
54+
55+ /* Intermediaries */
56+ const int dim=2;
57+ int i,counter;
58+ IssmDouble* xyz_list = NULL;
59+ IssmDouble dlevelset[dim], norm_dlevelset;
60+ IssmDouble normal[dim]={0.};
61+
62+ /*Retrieve all inputs and parameters*/
63+ Input* levelset_input=this->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);
64+ this->GetVerticesCoordinates(&xyz_list);
65+
66+ counter=0;
67+ Gauss* gauss = this->NewGauss(2);
68+ for(int ig=gauss->begin();ig<gauss->end();ig++){
69+ /* Get normal on node */
70+ levelset_input->GetInputDerivativeValue(&dlevelset[0],xyz_list,gauss);
71+ norm_dlevelset=0.;
72+ for(i=0;i<dim;i++) norm_dlevelset+=dlevelset[i]*dlevelset[i];
73+ norm_dlevelset=sqrt(norm_dlevelset)+1.e-14;
74+ for(i=0;i<dim;i++) normal[i]+=dlevelset[i]/norm_dlevelset;
75+ counter++;
76+ }
77+ _assert_(counter>0);
78+ for(i=0;i<dim;i++) normal[i]/counter;
79+
80+ pnormal=&normal[0];
81+
82+ delete gauss;
83+ xDelete<IssmDouble>(xyz_list);
84+}/*}}}*/
85 /*FUNCTION Tria::GetNodeIndex {{{*/
86 int Tria::GetNodeIndex(Node* node){
87
88Index: ../trunk-jpl/src/c/classes/Elements/Tria.h
89===================================================================
90--- ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 17193)
91+++ ../trunk-jpl/src/c/classes/Elements/Tria.h (revision 17194)
92@@ -130,6 +130,8 @@
93 int VertexConnectivity(int vertexindex);
94 void VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");};
95 void ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
96+ void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum);
97+ void GetNormalFromLSF(IssmDouble *pnormal);
98 bool IsZeroLevelset(int levelset_enum);
99
100 #ifdef _HAVE_RESPONSES_
101Index: ../trunk-jpl/src/c/classes/Elements/Penta.cpp
102===================================================================
103--- ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 17193)
104+++ ../trunk-jpl/src/c/classes/Elements/Penta.cpp (revision 17194)
105@@ -3165,7 +3165,7 @@
106 /*Retrieve all inputs and parameters*/
107 GetInputListOnVertices(&ls[0],levelset_enum);
108
109- /*If the level set is awlays <=0, there is no ice front here*/
110+ /*If the level set has always same sign, there is no ice front here*/
111 iszerols = false;
112 if(IsIceInElement()){
113 if(ls[0]*ls[1]<0. || ls[0]*ls[2]<0. || (ls[0]*ls[1]+ls[0]*ls[2]+ls[1]*ls[2]==0.)){
114Index: ../trunk-jpl/src/c/classes/Elements/Penta.h
115===================================================================
116--- ../trunk-jpl/src/c/classes/Elements/Penta.h (revision 17193)
117+++ ../trunk-jpl/src/c/classes/Elements/Penta.h (revision 17194)
118@@ -114,6 +114,8 @@
119 int PressureInterpolation();
120 bool IsZeroLevelset(int levelset_enum);
121 void ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum);
122+ void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
123+ void GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");};
124 void PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm);
125 void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe);
126 void ResetCoordinateSystem(void);
127Index: ../trunk-jpl/src/c/classes/Elements/Seg.h
128===================================================================
129--- ../trunk-jpl/src/c/classes/Elements/Seg.h (revision 17193)
130+++ ../trunk-jpl/src/c/classes/Elements/Seg.h (revision 17194)
131@@ -159,6 +159,8 @@
132 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};
133 bool IsZeroLevelset(int levelset_enum){_error_("not implemented");};
134 void ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented");};
135+ void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");};
136+ void GetNormalFromLSF(IssmDouble *pnormal){_error_("not implemented yet");};
137
138 #ifdef _HAVE_HYDROLOGY_
139 void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode){_error_("not implemented yet");};
Note: See TracBrowser for help on using the repository browser.