Changeset 16876
- Timestamp:
- 11/21/13 20:55:55 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
r16863 r16876 27 27 /*Finite Element Analysis*/ 28 28 ElementMatrix* AdjointHorizAnalysis::CreateKMatrix(Element* element){/*{{{*/ 29 _error_("not implemented yet"); 29 int approximation; 30 element->GetInputValue(&approximation,ApproximationEnum); 31 switch(approximation){ 32 case SSAApproximationEnum: 33 return CreateKMatrixSSA(element); 34 case HOApproximationEnum: 35 return CreateKMatrixHO(element); 36 case FSApproximationEnum: 37 return CreateKMatrixFS(element); 38 case NoneApproximationEnum: 39 return NULL; 40 default: 41 _error_("Approximation "<<EnumToStringx(approximation)<<" not supported"); 42 } 43 }/*}}}*/ 44 ElementMatrix* AdjointHorizAnalysis::CreateKMatrixSSA(Element* element){/*{{{*/ 45 46 /*Intermediaries*/ 47 int meshtype; 48 Element* basalelement; 49 50 /*Get basal element*/ 51 element->FindParam(&meshtype,MeshTypeEnum); 52 switch(meshtype){ 53 case Mesh2DhorizontalEnum: 54 basalelement = element; 55 break; 56 case Mesh3DEnum: 57 if(!element->IsOnBed()) return NULL; 58 basalelement = element->SpawnBasalElement(); 59 break; 60 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 61 } 62 63 /*Intermediaries */ 64 bool incomplete_adjoint; 65 IssmDouble Jdet,thickness,mu_prime; 66 IssmDouble eps1dotdphii,eps1dotdphij,eps2dotdphii,eps2dotdphij; 67 IssmDouble eps1[2],eps2[2],epsilon[3]; 68 IssmDouble *xyz_list = NULL; 69 70 /*Fetch number of nodes and dof for this finite element*/ 71 int numnodes = basalelement->GetNumberOfNodes(); 72 73 /*Initialize Jacobian with regular SSA (first part of the Gateau derivative)*/ 74 basalelement->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum); 75 StressbalanceAnalysis* analysis = new StressbalanceAnalysis(); 76 ElementMatrix* Ke=analysis->CreateKMatrix(element); 77 delete analysis; 78 if(incomplete_adjoint) return Ke; 79 80 /*Retrieve all inputs and parameters*/ 81 basalelement->GetVerticesCoordinates(&xyz_list); 82 Input* vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input); 83 Input* vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input); 84 Input* thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input); 85 86 /*Allocate dbasis*/ 87 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 88 89 /* Start looping on the number of gaussian points: */ 90 Gauss* gauss=basalelement->NewGauss(2); 91 for(int ig=gauss->begin();ig<gauss->end();ig++){ 92 gauss->GaussPoint(ig); 93 94 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); 95 basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 96 97 thickness_input->GetInputValue(&thickness, gauss); 98 basalelement->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input); 99 basalelement->ViscositySSADerivativeEpsSquare(&mu_prime,&epsilon[0]); 100 eps1[0]=2.*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2]; 101 eps1[1]=epsilon[2]; eps2[1]=epsilon[0]+2*epsilon[1]; 102 103 for(int i=0;i<numnodes;i++){ 104 for(int j=0;j<numnodes;j++){ 105 eps1dotdphii=eps1[0]*dbasis[0*numnodes+i]+eps1[1]*dbasis[1*numnodes+i]; 106 eps1dotdphij=eps1[0]*dbasis[0*numnodes+j]+eps1[1]*dbasis[1*numnodes+j]; 107 eps2dotdphii=eps2[0]*dbasis[0*numnodes+i]+eps2[1]*dbasis[1*numnodes+i]; 108 eps2dotdphij=eps2[0]*dbasis[0*numnodes+j]+eps2[1]*dbasis[1*numnodes+j]; 109 110 Ke->values[2*numnodes*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii; 111 Ke->values[2*numnodes*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii; 112 Ke->values[2*numnodes*(2*i+1)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps2dotdphii; 113 Ke->values[2*numnodes*(2*i+1)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps2dotdphii; 114 } 115 } 116 } 117 118 /*Transform Coordinate System*/ 119 basalelement->TransformStiffnessMatrixCoord(Ke,XYEnum); 120 121 /*Clean up and return*/ 122 delete gauss; 123 xDelete<IssmDouble>(dbasis); 124 xDelete<IssmDouble>(xyz_list); 125 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 126 return Ke; 127 }/*}}}*/ 128 ElementMatrix* AdjointHorizAnalysis::CreateKMatrixHO(Element* element){/*{{{*/ 129 _error_("S"); 130 }/*}}}*/ 131 ElementMatrix* AdjointHorizAnalysis::CreateKMatrixFS(Element* element){/*{{{*/ 132 _error_("S"); 30 133 }/*}}}*/ 31 134 ElementVector* AdjointHorizAnalysis::CreatePVector(Element* element){/*{{{*/ -
issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
r16847 r16876 22 22 /*Finite element Analysis*/ 23 23 ElementMatrix* CreateKMatrix(Element* element); 24 ElementMatrix* CreateKMatrixSSA(Element* element); 25 ElementMatrix* CreateKMatrixHO(Element* element); 26 ElementMatrix* CreateKMatrixFS(Element* element); 24 27 ElementVector* CreatePVector(Element* element); 25 28 ElementVector* CreatePVectorSSA(Element* element); -
issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
r16850 r16876 136 136 /*Finite Element Analysis*/ 137 137 ElementMatrix* StressbalanceSIAAnalysis::CreateKMatrix(Element* element){/*{{{*/ 138 _error_("not implemented yet"); 138 int meshtype; 139 element->FindParam(&meshtype,MeshTypeEnum); 140 switch(meshtype){ 141 case Mesh2DhorizontalEnum: 142 return CreateKMatrix2D(element); 143 case Mesh3DEnum: 144 return CreateKMatrix3D(element); 145 default: _error_("mesh "<<EnumToStringx(meshtype)<<" not supported yet"); 146 } 147 }/*}}}*/ 148 ElementMatrix* StressbalanceSIAAnalysis::CreateKMatrix2D(Element* element){/*{{{*/ 149 150 /*Intermediaries */ 151 IssmDouble connectivity; 152 153 /*Fetch number vertices for this element*/ 154 int numvertices = element->GetNumberOfVertices(); 155 156 /*Initialize Element vector*/ 157 ElementMatrix* Ke=element->NewElementMatrix(); 158 for(int iv=0;iv<numvertices;iv++){ 159 connectivity=(IssmDouble)element->VertexConnectivity(iv); 160 Ke->values[(2*iv+0)*2*numvertices+(2*iv+0)]=1./connectivity; 161 Ke->values[(2*iv+1)*2*numvertices+(2*iv+1)]=1./connectivity; 162 } 163 164 /*Clean up and return*/ 165 return Ke; 166 }/*}}}*/ 167 ElementMatrix* StressbalanceSIAAnalysis::CreateKMatrix3D(Element* element){/*{{{*/ 168 169 /*Intermediaries */ 170 int i0,i1,j0,j1,nodeup,nodedown,numsegments; 171 IssmDouble slope[2],connectivity[2],one0,one1; 172 int *pairindices = NULL; 173 174 /*Fetch number vertices for this element*/ 175 int numvertices = element->GetNumberOfVertices(); 176 int numdof = 2*numvertices; 177 178 /*Initialize Element vector*/ 179 ElementMatrix* Ke=element->NewElementMatrix(); 180 181 element->VerticalSegmentIndices(&pairindices,&numsegments); 182 for(int is=0;is<numsegments;is++){ 183 nodedown = pairindices[is*2+0]; 184 nodeup = pairindices[is*2+1]; 185 connectivity[0]=(IssmDouble)element->VertexConnectivity(nodedown); 186 connectivity[1]=(IssmDouble)element->VertexConnectivity(nodeup); 187 one0=1./connectivity[0]; 188 one1=1./connectivity[1]; 189 190 /*2 dofs of first node*/ 191 i0=2*nodedown; i1=2*nodedown+1; 192 /*2 dofs of second node*/ 193 j0=2*nodeup; j1=2*nodeup+1; 194 195 /*Create matrix for these two nodes*/ 196 if(element->IsOnBed() && element->IsOnSurface()){ 197 Ke->values[i0*numdof+i0] = +one0; 198 Ke->values[i1*numdof+i1] = +one0; 199 Ke->values[j0*numdof+i0] = -one1; 200 Ke->values[j0*numdof+j0] = +one1; 201 Ke->values[j1*numdof+i1] = -one1; 202 Ke->values[j1*numdof+j1] = +one1; 203 } 204 else if(element->IsOnBed()){ 205 Ke->values[i0*numdof+i0] = one0; 206 Ke->values[i1*numdof+i1] = one0; 207 Ke->values[j0*numdof+i0] = -2.*one1; 208 Ke->values[j0*numdof+j0] = +2.*one1; 209 Ke->values[j1*numdof+i1] = -2.*one1; 210 Ke->values[j1*numdof+j1] = +2.*one1; 211 } 212 else if(element->IsOnSurface()){ 213 Ke->values[j0*numdof+i0] = -one1; 214 Ke->values[j0*numdof+j0] = +one1; 215 Ke->values[j1*numdof+i1] = -one1; 216 Ke->values[j1*numdof+j1] = +one1; 217 } 218 else{ //node is on two horizontal layers and beams include the values only once, so the have to use half of the connectivity 219 Ke->values[j0*numdof+i0] = -2.*one1; 220 Ke->values[j0*numdof+j0] = +2.*one1; 221 Ke->values[j1*numdof+i1] = -2.*one1; 222 Ke->values[j1*numdof+j1] = +2.*one1; 223 } 224 } 225 226 /*Clean up and return*/ 227 xDelete<int>(pairindices); 228 return Ke; 139 229 }/*}}}*/ 140 230 ElementVector* StressbalanceSIAAnalysis::CreatePVector(Element* element){/*{{{*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
r16849 r16876 22 22 /*Finite element Analysis*/ 23 23 ElementMatrix* CreateKMatrix(Element* element); 24 ElementMatrix* CreateKMatrix2D(Element* element); 25 ElementMatrix* CreateKMatrix3D(Element* element); 24 26 ElementVector* CreatePVector(Element* element); 25 27 ElementVector* CreatePVector2D(Element* element); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16873 r16876 56 56 virtual IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure)=0; 57 57 virtual IssmDouble EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure)=0; 58 virtual void FindParam(bool* pvalue,int paramenum)=0; 58 59 virtual void FindParam(int* pvalue,int paramenum)=0; 59 60 virtual void FindParam(IssmDouble* pvalue,int paramenum)=0; … … 170 171 virtual void ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0; 171 172 virtual void ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0; 173 virtual void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon)=0; 174 virtual void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input)=0; 172 175 virtual int VelocityInterpolation()=0; 173 176 virtual int PressureInterpolation()=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r16873 r16876 867 867 IssmDouble Penta::EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure){ 868 868 return matpar->GetEnthalpyDiffusionParameterVolume(numvertices,enthalpy,pressure); 869 } 870 /*}}}*/ 871 /*FUNCTION Penta::FindParam(bool* pvalue,int paramenum){{{*/ 872 void Penta::FindParam(bool* pvalue,int paramenum){ 873 this->parameters->FindParam(pvalue,paramenum); 869 874 } 870 875 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16873 r16876 78 78 void DeleteMaterials(void){_error_("not implemented yet");}; 79 79 void ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz); 80 void FindParam(bool* pvalue,int paramenum); 80 81 void FindParam(int* pvalue,int paramenum); 81 82 void FindParam(IssmDouble* pvalue,int paramenum); … … 297 298 void ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 298 299 void ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");}; 300 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not implemented");}; 301 void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");}; 299 302 300 303 #ifdef _HAVE_STRESSBALANCE_ -
issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
r16862 r16876 88 88 } 89 89 /*}}}*/ 90 /*FUNCTION Seg::FindParam(bool* pvalue,int paramenum){{{*/ 91 void Seg::FindParam(bool* pvalue,int paramenum){ 92 this->parameters->FindParam(pvalue,paramenum); 93 } 94 /*}}}*/ 90 95 /*FUNCTION Seg::FindParam(int* pvalue,int paramenum){{{*/ 91 96 void Seg::FindParam(int* pvalue,int paramenum){ -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r16873 r16876 91 91 IssmDouble EnthalpyDiffusionParameter(IssmDouble enthalpy,IssmDouble pressure){_error_("not implemented");}; 92 92 IssmDouble EnthalpyDiffusionParameterVolume(int numvertices,IssmDouble* enthalpy,IssmDouble* pressure){_error_("not implemented");}; 93 void FindParam(bool* pvalue,int paramenum); 93 94 void FindParam(int* pvalue,int paramenum); 94 95 void FindParam(IssmDouble* pvalue,int paramenum); … … 172 173 void ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");}; 173 174 void ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");}; 175 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){_error_("not implemented");}; 176 void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented");}; 174 177 bool IsZeroLevelset(int levelset_enum){_error_("not implemented");}; 175 178 void ZeroLevelsetCoordinates(IssmDouble** pxyz_zero,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r16873 r16876 663 663 664 664 /*Compute strain rate viscosity and pressure: */ 665 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);665 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 666 666 material->GetViscosity2d(&viscosity,&epsilon[0]); 667 667 pressure_input->GetInputValue(&pressure,gauss); … … 848 848 } 849 849 /*}}}*/ 850 /*FUNCTION Tria::FindParam(bool* pvalue,int paramenum){{{*/ 851 void Tria::FindParam(bool* pvalue,int paramenum){ 852 this->parameters->FindParam(pvalue,paramenum); 853 } 854 /*}}}*/ 850 855 /*FUNCTION Tria::FindParam(int* pvalue,int paramenum){{{*/ 851 856 void Tria::FindParam(int* pvalue,int paramenum){ … … 1562 1567 void Tria::GetConnectivityList(int* connectivity){ 1563 1568 for(int i=0;i<NUMVERTICES;i++) connectivity[i]=vertices[i]->Connectivity(); 1564 }1565 /*}}}*/1566 /*FUNCTION Tria::GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, Gauss* gauss, Input* vx_input, Input* vy_input){{{*/1567 void Tria::GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list, Gauss* gauss, Input* vx_input, Input* vy_input){1568 /*Compute the 2d Strain Rate (3 components):1569 * epsilon=[exx eyy exy] */1570 1571 int i;1572 IssmDouble epsilonvx[3];1573 IssmDouble epsilonvy[3];1574 1575 /*Check that both inputs have been found*/1576 if (!vx_input || !vy_input){1577 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n");1578 }1579 1580 /*Get strain rate assuming that epsilon has been allocated*/1581 vx_input->GetVxStrainRate2d(epsilonvx,xyz_list,gauss);1582 vy_input->GetVyStrainRate2d(epsilonvy,xyz_list,gauss);1583 1584 /*Sum all contributions*/1585 for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];1586 1569 } 1587 1570 /*}}}*/ … … 3073 3056 IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy]; */ 3074 3057 3075 this-> GetStrainRate2d(&epsilon[0],xyz_list,gauss,vx_input,vy_input);3058 this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input); 3076 3059 material->GetViscosity2dvertical(&viscosity, &epsilon[0]); 3077 3060 … … 3087 3070 IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy]; */ 3088 3071 3089 this-> GetStrainRate2d(&epsilon[0],xyz_list,gauss,vx_input,vy_input);3072 this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input); 3090 3073 material->GetViscosity2d(&viscosity, &epsilon[0]); 3091 3074 3092 3075 /*Assign output pointer*/ 3093 3076 *pviscosity=viscosity; 3077 } 3078 /*}}}*/ 3079 /*FUNCTION Tria::ViscositySSADerivativeEpsSquare{{{*/ 3080 void Tria::ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon){ 3081 this->material->GetViscosity2dDerivativeEpsSquare(pmu_prime,epsilon); 3082 } 3083 /*}}}*/ 3084 /*FUNCTION Tria::StrainRateSSA{{{*/ 3085 void Tria::StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){ 3086 3087 int i; 3088 IssmDouble epsilonvx[3]; 3089 IssmDouble epsilonvy[3]; 3090 3091 /*Check that both inputs have been found*/ 3092 if (!vx_input || !vy_input){ 3093 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n"); 3094 } 3095 3096 /*Get strain rate assuming that epsilon has been allocated*/ 3097 vx_input->GetVxStrainRate2d(epsilonvx,xyz_list,gauss); 3098 vy_input->GetVyStrainRate2d(epsilonvy,xyz_list,gauss); 3099 3100 /*Sum all contributions*/ 3101 for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i]; 3094 3102 } 3095 3103 /*}}}*/ … … 3747 3755 GetBprimeFS(Bprime,&xyz_list[0][0],gauss); 3748 3756 3749 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);3757 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 3750 3758 material->GetViscosity2dvertical(&viscosity,&epsilon[0]); 3751 3759 … … 3897 3905 GetBprimeSSA(&Bprime[0], &xyz_list[0][0], gauss); 3898 3906 3899 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);3900 this-> GetStrainRate2d(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);3907 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 3908 this->StrainRateSSA(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input); 3901 3909 material->GetViscosity2d(&viscosity, &epsilon[0]); 3902 3910 material->GetViscosity2d(&oldviscosity, &oldepsilon[0]); … … 4486 4494 4487 4495 thickness_input->GetInputValue(&thickness, gauss); 4488 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);4496 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 4489 4497 material->GetViscosity2dDerivativeEpsSquare(&mu_prime,&epsilon[0]); 4490 4498 eps1[0]=2*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2]; … … 4869 4877 adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss); 4870 4878 4871 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);4879 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 4872 4880 material->GetViscosityComplement(&viscosity_complement,&epsilon[0]); 4873 4881 … … 4925 4933 adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss); 4926 4934 4927 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);4935 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 4928 4936 material->GetViscosityDComplement(&viscosity_complement,&epsilon[0]); 4929 4937 … … 6203 6211 6204 6212 thickness_input->GetInputValue(&thickness, gauss); 6205 this-> GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);6213 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 6206 6214 material->GetViscosity2dDerivativeEpsSquare(&mu_prime,&epsilon[0]); 6207 6215 eps1[0]=2*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2]; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16873 r16876 83 83 void ElementSizes(IssmDouble* hx,IssmDouble* hy,IssmDouble* hz){_error_("not implemented yet");}; 84 84 void EnthalpyToThermal(IssmDouble* ptemperature,IssmDouble* pwaterfraction,IssmDouble enthalpy,IssmDouble pressure){_error_("not implemented yet");}; 85 void FindParam(bool* pvalue,int paramenum); 85 86 void FindParam(int* pvalue,int paramenum); 86 87 void FindParam(IssmDouble* pvalue,int paramenum); … … 285 286 void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type); 286 287 void GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype); 287 void GetStrainRate2d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss, Input* vx_input, Input* vy_input);288 288 void InputChangeName(int enum_type,int enum_type_old); 289 289 void InputUpdateFromSolutionOneDof(IssmDouble* solution,int enum_type); … … 330 330 void ViscosityHO(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input){_error_("not implemented yet");}; 331 331 void ViscositySSA(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 332 void ViscositySSADerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon); 333 void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 332 334 333 335 #ifdef _HAVE_STRESSBALANCE_
Note:
See TracChangeset
for help on using the changeset viewer.