Changeset 24946
- Timestamp:
- 06/01/20 14:22:09 (5 years ago)
- Location:
- issm/trunk-jpl/src/c/classes
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.h
r24940 r24946 380 380 virtual void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks)=0; 381 381 virtual void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea)=0; 382 virtual void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius )=0;382 virtual void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz)=0; 383 383 virtual void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius)=0; 384 virtual void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,int horiz)=0;384 virtual void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz)=0; 385 385 #endif 386 386 -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r24940 r24946 215 215 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 216 216 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 217 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ){_error_("not implemented yet!");};217 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");}; 218 218 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){_error_("not implemented yet!");}; 219 219 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 220 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,int horiz){_error_("not implemented yet!");};220 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; 221 221 #endif 222 222 -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r24940 r24946 174 174 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 175 175 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 176 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ){_error_("not implemented yet!");};176 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");}; 177 177 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){_error_("not implemented yet!");}; 178 178 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 179 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,int horiz){_error_("not implemented yet!");};179 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; 180 180 IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; 181 181 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r24940 r24946 180 180 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 181 181 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 182 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ){_error_("not implemented yet!");};182 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){_error_("not implemented yet!");}; 183 183 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){_error_("not implemented yet!");}; 184 184 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 185 void SealevelriseGeodetic(IssmDouble* Up ,IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,int horiz){_error_("not implemented yet!");};185 void SealevelriseGeodetic(IssmDouble* Up ,IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; 186 186 IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; 187 187 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r24944 r24946 5578 5578 } 5579 5579 /*}}}*/ 5580 void Tria::SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){ /*{{{*/ 5581 5580 void Tria::SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){ /*{{{*/ 5582 5581 /*diverse:*/ 5583 5582 int gsize; 5584 5583 bool spherical=true; 5585 5584 IssmDouble llr_list[NUMVERTICES][3]; 5585 IssmDouble xyz_list[NUMVERTICES][3]; 5586 5586 IssmDouble area,eartharea; 5587 5587 IssmDouble I; //change in ice thickness or water level(Farrel and Clarke, Equ. 4) … … 5590 5590 IssmDouble lati,longi,ri; 5591 5591 IssmDouble constant; 5592 IssmDouble x_element,y_element,z_element,x,y,z,dx,dy,dz,N_azim,E_azim; 5592 5593 5593 5594 IssmDouble* G=NULL; 5595 IssmDouble* GU=NULL; 5596 IssmDouble* GN=NULL; 5597 IssmDouble* GE=NULL; 5594 5598 IssmDouble* G_elastic_precomputed=NULL; 5595 5599 IssmDouble* G_rigid_precomputed=NULL; 5600 IssmDouble* U_elastic_precomputed=NULL; 5601 IssmDouble* H_elastic_precomputed=NULL; 5596 5602 5597 5603 /*elastic green function:*/ 5598 5604 IssmDouble* indices=NULL; 5605 int index; 5599 5606 int M; 5600 5607 … … 5602 5609 bool computerigid = true; 5603 5610 bool computeelastic = true; 5611 int horiz; 5604 5612 5605 5613 /*recover parameters: */ … … 5609 5617 this->parameters->FindParam(&gsize,MeshNumberofverticesEnum); 5610 5618 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 5619 this->parameters->FindParam(&horiz,SealevelriseHorizEnum); 5611 5620 5612 5621 /*recover precomputed green function kernels:*/ … … 5616 5625 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseGElasticEnum)); _assert_(parameter); 5617 5626 parameter->GetParameterValueByPointer(&G_elastic_precomputed,&M); 5618 5627 5628 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(parameter); 5629 parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M); 5630 5631 parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(parameter); 5632 parameter->GetParameterValueByPointer(&U_elastic_precomputed,&M); 5633 5619 5634 /*allocate indices:*/ 5620 5635 indices=xNew<IssmDouble>(gsize); 5621 5636 G=xNewZeroInit<IssmDouble>(gsize); 5637 GU=xNewZeroInit<IssmDouble>(gsize); 5638 if(horiz){ 5639 GN=xNewZeroInit<IssmDouble>(gsize); 5640 GE=xNewZeroInit<IssmDouble>(gsize); 5641 } 5622 5642 5623 5643 /*compute area:*/ 5624 5644 area=GetAreaSpherical(); 5645 5646 /*figure out gravity center of our element (Cartesian): */ 5647 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 5648 x_element=(xyz_list[0][0]+xyz_list[1][0]+xyz_list[2][0])/3.0; 5649 y_element=(xyz_list[0][1]+xyz_list[1][1]+xyz_list[2][1])/3.0; 5650 z_element=(xyz_list[0][2]+xyz_list[1][2]+xyz_list[2][2])/3.0; 5625 5651 5626 5652 /* Where is the centroid of this element?:{{{*/ … … 5674 5700 alpha=2.*asin(sqrt(pow(sin(delPhi/2),2)+cos(lati)*cos(late)*pow(sin(delLambda/2),2))); 5675 5701 indices[i]=alpha/PI*reCast<IssmDouble,int>(M-1); 5676 5702 index=reCast<int,IssmDouble>(indices[i]); 5703 5677 5704 /*Rigid earth gravitational perturbation: */ 5678 5705 if(computerigid){ 5679 G[i]+=G_rigid_precomputed[ reCast<int,IssmDouble>(indices[i])];5706 G[i]+=G_rigid_precomputed[index]; 5680 5707 } 5681 5708 if(computeelastic){ 5682 G[i]+=G_elastic_precomputed[ reCast<int,IssmDouble>(indices[i])];5709 G[i]+=G_elastic_precomputed[index]; 5683 5710 } 5684 5711 G[i]=G[i]*constant; 5712 5713 /*Elastic components:*/ 5714 GU[i] = constant * U_elastic_precomputed[index]; 5715 if(horiz){ 5716 /*Compute azimuths, both north and east components: */ 5717 x = xx[i]; y = yy[i]; z = zz[i]; 5718 if(latitude[i]==90){ 5719 x=1e-12; y=1e-12; 5720 } 5721 if(latitude[i]==-90){ 5722 x=1e-12; y=1e-12; 5723 } 5724 dx = x_element-x; dy = y_element-y; dz = z_element-z; 5725 N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 5726 E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 5727 5728 GN[i] = constant*H_elastic_precomputed[index]*N_azim; 5729 GE[i] = constant*H_elastic_precomputed[index]*E_azim; 5730 } 5685 5731 } 5686 5732 … … 5688 5734 this->inputs2->SetArrayInput(SealevelriseIndicesEnum,this->lid,indices,gsize); 5689 5735 this->inputs2->SetArrayInput(SealevelriseGEnum,this->lid,G,gsize); 5736 this->inputs2->SetArrayInput(SealevelriseGUEnum,this->lid,GU,gsize); 5737 if(horiz){ 5738 this->inputs2->SetArrayInput(SealevelriseGNEnum,this->lid,GN,gsize); 5739 this->inputs2->SetArrayInput(SealevelriseGEEnum,this->lid,GE,gsize); 5740 } 5690 5741 this->inputs2->SetDoubleInput(AreaEnum,this->lid,area); 5691 5742 … … 5693 5744 xDelete(indices); 5694 5745 xDelete(G); 5746 xDelete(GU); 5747 if(horiz){ 5748 xDelete(GN); 5749 xDelete(GE); 5750 } 5695 5751 5696 5752 return; … … 6034 6090 } 6035 6091 /*}}}*/ 6036 void Tria::SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North ,IssmDouble* East,IssmDouble* Sg, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,int horiz){ /*{{{*/6092 void Tria::SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North ,IssmDouble* East,IssmDouble* Sg, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){ /*{{{*/ 6037 6093 6038 6094 /*diverse:*/ 6039 int gsize,dummy; 6040 bool spherical=true; 6041 IssmDouble llr_list[NUMVERTICES][3]; 6042 IssmDouble xyz_list[NUMVERTICES][3]; 6043 IssmDouble area,eartharea; 6095 int gsize; 6044 6096 IssmDouble I, S; //change in relative ice thickness and sea level 6045 IssmDouble late,longe,re; 6046 IssmDouble lati,longi,ri; 6047 IssmDouble rho_ice,rho_water,rho_earth; 6048 IssmDouble minlong=400; 6049 IssmDouble maxlong=-20; 6097 IssmDouble rho_ice,rho_water; 6098 int horiz; 6050 6099 6051 6100 /*precomputed elastic green functions:*/ 6052 IssmDouble* U_elastic_precomputed = NULL; 6053 IssmDouble* H_elastic_precomputed = NULL; 6054 int M; 6055 IssmDouble* indices=NULL; 6056 int index; 6057 6058 /*computation of Green functions:*/ 6059 IssmDouble* U_elastic= NULL; 6060 IssmDouble* N_elastic= NULL; 6061 IssmDouble* E_elastic= NULL; 6062 DoubleVecParam* U_parameter = NULL; 6063 DoubleVecParam* H_parameter = NULL; 6064 IssmDouble* U_values=NULL; 6065 IssmDouble* N_values=NULL; 6066 IssmDouble* E_values=NULL; 6067 6068 /*optimization:*/ 6069 bool store_green_functions=false; 6101 IssmDouble* GU=NULL; 6102 IssmDouble* GN=NULL; 6103 IssmDouble* GE=NULL; 6070 6104 6071 6105 /*computational flags:*/ 6072 bool computerigid = true;6073 6106 bool computeelastic= true; 6074 6107 … … 6079 6112 if(masks->isfullyfloating[this->lid])return; 6080 6113 6081 /*recover computational flags: */ 6082 this->parameters->FindParam(&computerigid,SealevelriseRigidEnum); 6114 /*recover parameters:*/ 6083 6115 this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum); 6116 this->parameters->FindParam(&horiz,SealevelriseHorizEnum); 6084 6117 6085 6118 /*early return if elastic not requested:*/ … … 6089 6122 rho_ice=FindParam(MaterialsRhoIceEnum); 6090 6123 rho_water=FindParam(MaterialsRhoSeawaterEnum); 6091 rho_earth=FindParam(MaterialsEarthDensityEnum);6092 6093 /*how many dofs are we working with here? */6094 this->parameters->FindParam(&gsize,MeshNumberofverticesEnum);6095 6096 /*recover earth area: */6097 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum);6098 6099 /*retrieve indices:*/6100 if(computerigid){this->inputs2->GetArrayPtr(SealevelriseIndicesEnum,this->lid,&indices,&dummy); _assert_(dummy==gsize);}6101 6102 /*Get area of element: precomputed in the sealevelrise_core_geometry:*/6103 this->GetInput2Value(&area,AreaEnum);6104 6105 /*figure out gravity center of our element (Cartesian): */6106 IssmDouble x_element, y_element, z_element;6107 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);6108 x_element=(xyz_list[0][0]+xyz_list[1][0]+xyz_list[2][0])/3.0;6109 y_element=(xyz_list[0][1]+xyz_list[1][1]+xyz_list[2][1])/3.0;6110 z_element=(xyz_list[0][2]+xyz_list[1][2]+xyz_list[2][2])/3.0;6111 6124 6112 6125 /*recover elastic Green's functions for displacement:*/ 6113 U_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseUElasticEnum)); _assert_(U_parameter); 6114 U_parameter->GetParameterValueByPointer(&U_elastic_precomputed,&M); 6126 this->inputs2->GetArrayPtr(SealevelriseGUEnum,this->lid,&GU,&gsize); 6115 6127 if(horiz){ 6116 H_parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseHElasticEnum)); _assert_(H_parameter);6117 H_parameter->GetParameterValueByPointer(&H_elastic_precomputed,&M);6128 this->inputs2->GetArrayPtr(SealevelriseGUEnum,this->lid,&GU,&gsize); 6129 this->inputs2->GetArrayPtr(SealevelriseGUEnum,this->lid,&GU,&gsize); 6118 6130 } 6119 6131 … … 6126 6138 deltathickness_input->GetInputAverage(&I); 6127 6139 6128 /*initialize: */ 6129 U_elastic=xNewZeroInit<IssmDouble>(gsize); 6130 if(horiz){ 6131 N_elastic=xNewZeroInit<IssmDouble>(gsize); 6132 E_elastic=xNewZeroInit<IssmDouble>(gsize); 6133 } 6134 6135 //int* indices=xNew<int>(gsize); 6136 //U_values=xNewZeroInit<IssmDouble>(gsize); 6137 if(horiz){ 6138 //N_values=xNewZeroInit<IssmDouble>(gsize); 6139 //E_values=xNewZeroInit<IssmDouble>(gsize); 6140 } 6141 IssmDouble alpha; 6142 IssmDouble delPhi,delLambda; 6143 IssmDouble dx, dy, dz, x, y, z; 6144 IssmDouble N_azim, E_azim; 6145 6146 /*we are going to use the result of these masks a lot: */ 6147 bool isiceonlyinelement=masks->isiceonly[this->lid]; 6148 bool isoceaninelement=masks->isoceanin[this->lid]; 6149 6150 for(int i=0;i<gsize;i++){ 6151 6152 /*Compute alpha angle between centroid and current vertex: */ 6153 /*lati=latitude[i]/180*PI; longi=longitude[i]/180*PI; 6154 delPhi=fabs(lati-late); delLambda=fabs(longi-longe); 6155 alpha=2.*asin(sqrt(pow(sin(delPhi/2),2.0)+cos(lati)*cos(late)*pow(sin(delLambda/2),2)));*/ 6156 6157 index=reCast<int,IssmDouble>(indices[i]); 6158 6159 /*Compute azimuths, both north and east components: */ 6160 x = xx[i]; y = yy[i]; z = zz[i]; 6161 if(latitude[i]==90){ 6162 x=1e-12; y=1e-12; 6163 } 6164 if(latitude[i]==-90){ 6165 x=1e-12; y=1e-12; 6166 } 6167 dx = x_element-x; dy = y_element-y; dz = z_element-z; 6168 if(horiz){ 6169 N_azim = (-z*x*dx-z*y*dy+(pow(x,2)+pow(y,2))*dz) /pow((pow(x,2)+pow(y,2))*(pow(x,2)+pow(y,2)+pow(z,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 6170 E_azim = (-y*dx+x*dy) /pow((pow(x,2)+pow(y,2))*(pow(dx,2)+pow(dy,2)+pow(dz,2)),0.5); 6171 } 6172 6173 /*Elastic component (from Eq 17 in Adhikari et al, GMD 2015): */ 6174 U_elastic[i] += U_elastic_precomputed[index]; 6175 if(horiz){ 6176 N_elastic[i] += H_elastic_precomputed[index]*N_azim; 6177 E_elastic[i] += H_elastic_precomputed[index]*E_azim; 6178 } 6179 6180 /*Add all components to the pUp solution vectors:*/ 6181 if(isiceonlyinelement){ 6182 Up[i]+=3*rho_ice/rho_earth*area/eartharea*I*U_elastic[i]; 6140 if (masks->isiceonly[this->lid]){ 6141 for(int i=0;i<gsize;i++){ 6142 Up[i]+=rho_ice*I*GU[i]; 6183 6143 if(horiz){ 6184 North[i]+= 3*rho_ice/rho_earth*area/eartharea*I*N_elastic[i];6185 East[i]+= 3*rho_ice/rho_earth*area/eartharea*I*E_elastic[i];6144 North[i]+=rho_ice*I*GN[i]; 6145 East[i]+=rho_ice*I*GE[i]; 6186 6146 } 6187 6147 } 6188 else if(isoceaninelement){ 6189 Up[i]+=3*rho_water/rho_earth*area/eartharea*S*U_elastic[i]; 6148 } 6149 else if(masks->isoceanin[this->lid]){ 6150 for(int i=0;i<gsize;i++){ 6151 Up[i]+=rho_water*S*GU[i]; 6190 6152 if(horiz){ 6191 North[i]+= 3*rho_water/rho_earth*area/eartharea*S*N_elastic[i];6192 East[i]+= 3*rho_water/rho_earth*area/eartharea*S*E_elastic[i];6153 North[i]+=rho_water*S*GN[i]; 6154 East[i]+=rho_water*S*GE[i]; 6193 6155 } 6194 6156 } 6195 }6196 6197 /*free ressources:*/6198 xDelete<IssmDouble>(U_values);6199 xDelete<IssmDouble>(U_elastic);6200 if(horiz){6201 xDelete<IssmDouble>(N_values); xDelete<IssmDouble>(E_values);6202 xDelete<IssmDouble>(N_elastic); xDelete<IssmDouble>(E_elastic);6203 6157 } 6204 6158 -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r24940 r24946 166 166 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,SealevelMasks* masks); 167 167 void SetSealevelMasks(SealevelMasks* masks); 168 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius );168 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 169 169 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea); 170 170 void SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea); 171 171 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi, IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea); 172 172 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius); 173 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,int horiz);173 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz); 174 174 #endif 175 175 /*}}}*/ -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r24944 r24946 4673 4673 #endif 4674 4674 #ifdef _HAVE_SEALEVELRISE_ 4675 void FemModel::SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius ) { /*{{{*/4675 void FemModel::SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz) { /*{{{*/ 4676 4676 4677 4677 /*Run sealevelrie geometry routine in elements:*/ 4678 4678 for(int i=0;i<elements->Size();i++){ 4679 4679 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4680 element->SealevelriseGeometry(latitude,longitude,radius );4680 element->SealevelriseGeometry(latitude,longitude,radius,xx,yy,zz); 4681 4681 } 4682 4682 … … 4854 4854 } 4855 4855 /*}}}*/ 4856 void FemModel::SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pRSLg, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop ,int horiz){/*{{{*/4856 void FemModel::SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pRSLg, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop){/*{{{*/ 4857 4857 4858 4858 /*serialized vectors:*/ … … 4863 4863 IssmDouble* East = NULL; 4864 4864 int* indices = NULL; 4865 int gsize; 4866 4865 int gsize; 4866 int horiz; 4867 4868 /*retrieve parameters:*/ 4869 this->parameters->FindParam(&horiz,SealevelriseHorizEnum); 4867 4870 4868 4871 /*Serialize vectors from previous iteration:*/ … … 4880 4883 for(int i=0;i<elements->Size();i++){ 4881 4884 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4882 element->SealevelriseGeodetic(Up,North,East,RSLg,masks, latitude,longitude,radius,xx,yy,zz ,horiz);4885 element->SealevelriseGeodetic(Up,North,East,RSLg,masks, latitude,longitude,radius,xx,yy,zz); 4883 4886 } 4884 4887 -
issm/trunk-jpl/src/c/classes/FemModel.h
r24940 r24946 164 164 #ifdef _HAVE_SEALEVELRISE_ 165 165 void SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,int loop); 166 void SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius );166 void SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 167 167 void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,bool verboseconvolution,int loop); 168 168 void SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius); 169 void SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop ,int horiz);169 void SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop); 170 170 IssmDouble SealevelriseOceanAverage(Vector<IssmDouble>* Sg,SealevelMasks* masks, IssmDouble oceanarea); 171 171 #endif
Note:
See TracChangeset
for help on using the changeset viewer.