[17802] | 1 | Index: ../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;
|
---|
| 14 | Index: ../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 |
|
---|
| 88 | Index: ../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_
|
---|
| 101 | Index: ../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.)){
|
---|
| 114 | Index: ../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);
|
---|
| 127 | Index: ../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");};
|
---|