Changeset 15564 for issm/trunk-jpl/src/c/classes/Elements
- Timestamp:
- 07/23/13 14:23:07 (12 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r15556 r15564 217 217 IssmDouble xyz_list[NUMVERTICES][3]; 218 218 IssmDouble xyz_list_tria[3][3]; 219 IssmDouble rho_ice,gravity, stokesreconditioning;219 IssmDouble rho_ice,gravity,FSreconditioning; 220 220 IssmDouble pressure,viscosity,Jdet2d; 221 221 IssmDouble bed_normal[3]; … … 234 234 /*Check analysis_types*/ 235 235 if (analysis_type!=DiagnosticHorizAnalysisEnum) _error_("Not supported yet!"); 236 if (approximation!= StokesApproximationEnum) _error_("Not supported yet!");236 if (approximation!=FSApproximationEnum) _error_("Not supported yet!"); 237 237 238 238 /*retrieve some parameters: */ 239 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);239 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 240 240 241 241 if(!IsOnBed()){ … … 267 267 /*Compute strain rate viscosity and pressure: */ 268 268 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 269 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);269 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 270 270 pressure_input->GetInputValue(&pressure,gauss); 271 271 272 272 /*Compute Stress*/ 273 sigma_xx=2*viscosity*epsilon[0]-pressure* stokesreconditioning; // sigma = nu eps - pressure274 sigma_yy=2*viscosity*epsilon[1]-pressure* stokesreconditioning;275 sigma_zz=2*viscosity*epsilon[2]-pressure* stokesreconditioning;273 sigma_xx=2*viscosity*epsilon[0]-pressure*FSreconditioning; // sigma = nu eps - pressure 274 sigma_yy=2*viscosity*epsilon[1]-pressure*FSreconditioning; 275 sigma_zz=2*viscosity*epsilon[2]-pressure*FSreconditioning; 276 276 sigma_xy=2*viscosity*epsilon[3]; 277 277 sigma_xz=2*viscosity*epsilon[4]; … … 415 415 Ke=CreateKMatrixAdjointHoriz(); 416 416 break; 417 case Diagnostic HutterAnalysisEnum:418 Ke=CreateKMatrixDiagnostic Hutter();417 case DiagnosticSIAAnalysisEnum: 418 Ke=CreateKMatrixDiagnosticSIA(); 419 419 break; 420 420 case DiagnosticVertAnalysisEnum: … … 546 546 pe=CreatePVectorDiagnosticHoriz(); 547 547 break; 548 case Diagnostic HutterAnalysisEnum:549 pe=CreatePVectorDiagnostic Hutter();548 case DiagnosticSIAAnalysisEnum: 549 pe=CreatePVectorDiagnosticSIA(); 550 550 break; 551 551 case DiagnosticVertAnalysisEnum: … … 1190 1190 int approximation; 1191 1191 inputs->GetInputValue(&approximation,ApproximationEnum); 1192 if(approximation== StokesApproximationEnum || approximation==NoneApproximationEnum){1193 GetSolutionFromInputsDiagnostic Stokes(solution);1194 } 1195 else if (approximation==MacAyealApproximationEnum || approximation== PattynApproximationEnum || approximation==HutterApproximationEnum){1192 if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){ 1193 GetSolutionFromInputsDiagnosticFS(solution); 1194 } 1195 else if (approximation==MacAyealApproximationEnum || approximation==HOApproximationEnum || approximation==SIAApproximationEnum){ 1196 1196 GetSolutionFromInputsDiagnosticHoriz(solution); 1197 1197 } 1198 else if (approximation==MacAyeal PattynApproximationEnum || approximation==PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){1198 else if (approximation==MacAyealHOApproximationEnum || approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){ 1199 1199 return; //the elements around will create the solution 1200 1200 } 1201 1201 break; 1202 case Diagnostic HutterAnalysisEnum:1203 GetSolutionFromInputsDiagnostic Hutter(solution);1202 case DiagnosticSIAAnalysisEnum: 1203 GetSolutionFromInputsDiagnosticSIA(solution); 1204 1204 break; 1205 1205 case DiagnosticVertAnalysisEnum: … … 1249 1249 } 1250 1250 /*}}}*/ 1251 /*FUNCTION Penta::GetStrainRate3d Pattyn{{{*/1252 void Penta::GetStrainRate3d Pattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input){1253 /*Compute the 3d Blatter/ PattynStrain Rate (5 components):1251 /*FUNCTION Penta::GetStrainRate3dHO{{{*/ 1252 void Penta::GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input){ 1253 /*Compute the 3d Blatter/HOStrain Rate (5 components): 1254 1254 * 1255 1255 * epsilon=[exx eyy exy exz eyz] … … 1271 1271 1272 1272 /*Get strain rate assuming that epsilon has been allocated*/ 1273 vx_input->GetVxStrainRate3d Pattyn(epsilonvx,xyz_list,gauss);1274 vy_input->GetVyStrainRate3d Pattyn(epsilonvy,xyz_list,gauss);1273 vx_input->GetVxStrainRate3dHO(epsilonvx,xyz_list,gauss); 1274 vy_input->GetVyStrainRate3dHO(epsilonvy,xyz_list,gauss); 1275 1275 1276 1276 /*Sum all contributions*/ … … 1973 1973 this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealApproximationEnum)); 1974 1974 } 1975 else if (iomodel->Data(FlowequationElementEquationEnum)[index]== PattynApproximationEnum){1976 this->inputs->AddInput(new IntInput(ApproximationEnum, PattynApproximationEnum));1977 } 1978 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyeal PattynApproximationEnum){1979 this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyeal PattynApproximationEnum));1980 } 1981 else if (iomodel->Data(FlowequationElementEquationEnum)[index]== HutterApproximationEnum){1982 this->inputs->AddInput(new IntInput(ApproximationEnum, HutterApproximationEnum));1975 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOApproximationEnum){ 1976 this->inputs->AddInput(new IntInput(ApproximationEnum,HOApproximationEnum)); 1977 } 1978 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealHOApproximationEnum){ 1979 this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealHOApproximationEnum)); 1980 } 1981 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==SIAApproximationEnum){ 1982 this->inputs->AddInput(new IntInput(ApproximationEnum,SIAApproximationEnum)); 1983 1983 } 1984 1984 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==L1L2ApproximationEnum){ 1985 1985 this->inputs->AddInput(new IntInput(ApproximationEnum,L1L2ApproximationEnum)); 1986 1986 } 1987 else if (iomodel->Data(FlowequationElementEquationEnum)[index]== StokesApproximationEnum){1988 this->inputs->AddInput(new IntInput(ApproximationEnum, StokesApproximationEnum));1989 } 1990 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyeal StokesApproximationEnum){1991 this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyeal StokesApproximationEnum));1992 } 1993 else if (iomodel->Data(FlowequationElementEquationEnum)[index]== PattynStokesApproximationEnum){1994 this->inputs->AddInput(new IntInput(ApproximationEnum, PattynStokesApproximationEnum));1987 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==FSApproximationEnum){ 1988 this->inputs->AddInput(new IntInput(ApproximationEnum,FSApproximationEnum)); 1989 } 1990 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==MacAyealFSApproximationEnum){ 1991 this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealFSApproximationEnum)); 1992 } 1993 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==HOFSApproximationEnum){ 1994 this->inputs->AddInput(new IntInput(ApproximationEnum,HOFSApproximationEnum)); 1995 1995 } 1996 1996 else if (iomodel->Data(FlowequationElementEquationEnum)[index]==NoneApproximationEnum){ … … 2031 2031 InputUpdateFromSolutionDiagnosticHoriz( solution); 2032 2032 break; 2033 case Diagnostic HutterAnalysisEnum:2034 InputUpdateFromSolutionDiagnostic Hutter( solution);2033 case DiagnosticSIAAnalysisEnum: 2034 InputUpdateFromSolutionDiagnosticSIA( solution); 2035 2035 break; 2036 2036 case DiagnosticVertAnalysisEnum: … … 2042 2042 int approximation; 2043 2043 inputs->GetInputValue(&approximation,ApproximationEnum); 2044 if(approximation== StokesApproximationEnum || approximation==NoneApproximationEnum){2045 InputUpdateFromSolutionAdjoint Stokes( solution);2044 if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){ 2045 InputUpdateFromSolutionAdjointFS( solution); 2046 2046 } 2047 2047 else{ … … 2651 2651 } 2652 2652 /*}}}*/ 2653 /*FUNCTION Penta::ReduceMatrix Stokes{{{*/2654 void Penta::ReduceMatrix Stokes(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){2653 /*FUNCTION Penta::ReduceMatrixFS {{{*/ 2654 void Penta::ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp){ 2655 2655 2656 2656 int i,j; … … 2693 2693 } 2694 2694 /*}}}*/ 2695 /*FUNCTION Penta::ReduceVector Stokes{{{*/2696 void Penta::ReduceVector Stokes(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){2695 /*FUNCTION Penta::ReduceVectorFS {{{*/ 2696 void Penta::ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp){ 2697 2697 2698 2698 int i,j; … … 2786 2786 IssmDouble xz_plane[6]; 2787 2787 2788 /*For Stokesonly: we want the CS to be tangential to the bedrock*/2788 /*For FS only: we want the CS to be tangential to the bedrock*/ 2789 2789 inputs->GetInputValue(&approximation,ApproximationEnum); 2790 if(IsFloating() || !IsOnBed() || (approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum)) return;2790 if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum)) return; 2791 2791 2792 2792 /*Get slope on each node*/ … … 2883 2883 if(analysis_type==DiagnosticHorizAnalysisEnum){ 2884 2884 inputs->GetInputValue(&approximation,ApproximationEnum); 2885 if(approximation==MacAyeal PattynApproximationEnum || approximation==MacAyealStokesApproximationEnum){2885 if(approximation==MacAyealHOApproximationEnum || approximation==MacAyealFSApproximationEnum){ 2886 2886 parameters->FindParam(&numlayers,MeshNumberoflayersEnum); 2887 2887 o_nz += numlayers*3; … … 3102 3102 int stabilization; 3103 3103 bool dakota_analysis; 3104 bool is stokes;3104 bool isFS; 3105 3105 IssmDouble beta,heatcapacity,referencetemperature,meltingpoint,latentheat; 3106 3106 … … 3109 3109 iomodel->Constant(&stabilization,PrognosticStabilizationEnum); 3110 3110 iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum); 3111 iomodel->Constant(&is stokes,FlowequationIsstokesEnum);3111 iomodel->Constant(&isFS,FlowequationIsFSEnum); 3112 3112 iomodel->Constant(&beta,MaterialsBetaEnum); 3113 3113 iomodel->Constant(&heatcapacity,MaterialsHeatcapacityEnum); … … 3175 3175 this->inputs->AddInput(new PentaInput(QmuPressureEnum,nodeinputs,P1Enum)); 3176 3176 } 3177 if(is stokes){3177 if(isFS){ 3178 3178 this->inputs->AddInput(new PentaInput(PressureEnum,nodeinputs,P1Enum)); 3179 3179 this->inputs->AddInput(new PentaInput(PressurePicardEnum,nodeinputs,P1Enum)); 3180 3180 } 3181 3181 } 3182 if(*(iomodel->Data(FlowequationElementEquationEnum)+index)== PattynStokesApproximationEnum){3183 /*Create Vz Pattyn and VzStokesEnums*/3184 if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorder stokesEnum)){3185 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorder stokesEnum)[penta_vertex_ids[i]-1];3186 this->inputs->AddInput(new PentaInput(Vz StokesEnum,nodeinputs,P1Enum));3187 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorder stokesEnum)[penta_vertex_ids[i]-1]);3188 this->inputs->AddInput(new PentaInput(Vz PattynEnum,nodeinputs,P1Enum));3182 if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==HOFSApproximationEnum){ 3183 /*Create VzHO and VzFS Enums*/ 3184 if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){ 3185 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]; 3186 this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum)); 3187 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]); 3188 this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum)); 3189 3189 } 3190 3190 else{ 3191 3191 for(i=0;i<6;i++)nodeinputs[i]=0; 3192 this->inputs->AddInput(new PentaInput(Vz StokesEnum,nodeinputs,P1Enum));3193 this->inputs->AddInput(new PentaInput(Vz PattynEnum,nodeinputs,P1Enum));3192 this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum)); 3193 this->inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum)); 3194 3194 } 3195 3195 } 3196 if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyeal StokesApproximationEnum){3197 /*Create VzMacAyeal and Vz StokesEnums*/3198 if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorder stokesEnum)){3199 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorder stokesEnum)[penta_vertex_ids[i]-1];3200 this->inputs->AddInput(new PentaInput(Vz StokesEnum,nodeinputs,P1Enum));3201 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorder stokesEnum)[penta_vertex_ids[i]-1]);3196 if(*(iomodel->Data(FlowequationElementEquationEnum)+index)==MacAyealFSApproximationEnum){ 3197 /*Create VzMacAyeal and VzFS Enums*/ 3198 if(iomodel->Data(VzEnum) && iomodel->Data(FlowequationBorderFSEnum)){ 3199 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]; 3200 this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum)); 3201 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data(VzEnum)[penta_vertex_ids[i]-1]*(1-iomodel->Data(FlowequationBorderFSEnum)[penta_vertex_ids[i]-1]); 3202 3202 this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum)); 3203 3203 } 3204 3204 else{ 3205 3205 for(i=0;i<6;i++)nodeinputs[i]=0; 3206 this->inputs->AddInput(new PentaInput(Vz StokesEnum,nodeinputs,P1Enum));3206 this->inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum)); 3207 3207 this->inputs->AddInput(new PentaInput(VzMacAyealEnum,nodeinputs,P1Enum)); 3208 3208 } … … 3289 3289 3290 3290 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 3291 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);3291 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 3292 3292 GetPhi(&phi, &epsilon[0], viscosity); 3293 3293 … … 4067 4067 4068 4068 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 4069 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);4069 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 4070 4070 GetPhi(&phi, &epsilon[0], viscosity); 4071 4071 … … 4323 4323 4324 4324 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 4325 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);4325 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 4326 4326 GetPhi(&phi, &epsilon[0], viscosity); 4327 4327 … … 4776 4776 case MacAyealApproximationEnum: 4777 4777 return CreateKMatrixAdjointMacAyeal2d(); 4778 case PattynApproximationEnum:4779 return CreateKMatrixAdjoint Pattyn();4780 case StokesApproximationEnum:4781 return CreateKMatrixAdjoint Stokes();4778 case HOApproximationEnum: 4779 return CreateKMatrixAdjointHO(); 4780 case FSApproximationEnum: 4781 return CreateKMatrixAdjointFS(); 4782 4782 case NoneApproximationEnum: 4783 4783 return NULL; … … 4821 4821 } 4822 4822 /*}}}*/ 4823 /*FUNCTION Penta::CreateKMatrixAdjoint Pattyn{{{*/4824 ElementMatrix* Penta::CreateKMatrixAdjoint Pattyn(void){4823 /*FUNCTION Penta::CreateKMatrixAdjointHO{{{*/ 4824 ElementMatrix* Penta::CreateKMatrixAdjointHO(void){ 4825 4825 4826 4826 /*Intermediaries */ … … 4838 4838 GaussPenta *gauss=NULL; 4839 4839 4840 /*Initialize Jacobian with regular Pattyn(first part of the Gateau derivative)*/4840 /*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/ 4841 4841 parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum); 4842 ElementMatrix* Ke=CreateKMatrixDiagnostic Pattyn();4842 ElementMatrix* Ke=CreateKMatrixDiagnosticHO(); 4843 4843 if(incomplete_adjoint) return Ke; 4844 4844 … … 4857 4857 GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss); 4858 4858 4859 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);4859 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 4860 4860 material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]); 4861 4861 eps1[0]=2*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2]; … … 4886 4886 } 4887 4887 /*}}}*/ 4888 /*FUNCTION Penta::CreateKMatrixAdjoint Stokes{{{*/4889 ElementMatrix* Penta::CreateKMatrixAdjoint Stokes(void){4888 /*FUNCTION Penta::CreateKMatrixAdjointFS{{{*/ 4889 ElementMatrix* Penta::CreateKMatrixAdjointFS(void){ 4890 4890 4891 4891 /*Constants*/ … … 4906 4906 GaussPenta *gauss=NULL; 4907 4907 4908 /*Initialize Jacobian with regular Stokes(first part of the Gateau derivative)*/4908 /*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/ 4909 4909 parameters->FindParam(&incomplete_adjoint,InversionIncompleteAdjointEnum); 4910 ElementMatrix* Ke=CreateKMatrixDiagnostic Stokes();4910 ElementMatrix* Ke=CreateKMatrixDiagnosticFS(); 4911 4911 if(incomplete_adjoint) return Ke; 4912 4912 … … 4926 4926 GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss); 4927 4927 4928 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);4928 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 4929 4929 material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]); 4930 4930 eps1[0]=epsilon[0]; eps2[0]=epsilon[2]; eps3[0]=epsilon[3]; … … 4973 4973 case MacAyealApproximationEnum: 4974 4974 return CreatePVectorAdjointMacAyeal(); 4975 case PattynApproximationEnum:4976 return CreatePVectorAdjoint Pattyn();4975 case HOApproximationEnum: 4976 return CreatePVectorAdjointHO(); 4977 4977 case NoneApproximationEnum: 4978 4978 return NULL; 4979 case StokesApproximationEnum:4980 return CreatePVectorAdjoint Stokes();4979 case FSApproximationEnum: 4980 return CreatePVectorAdjointFS(); 4981 4981 default: 4982 4982 _error_("Approximation " << EnumToStringx(approximation) << " not supported yet"); … … 4998 4998 } 4999 4999 /*}}}*/ 5000 /*FUNCTION Penta::CreatePVectorAdjoint Pattyn{{{*/5001 ElementVector* Penta::CreatePVectorAdjoint Pattyn(void){5000 /*FUNCTION Penta::CreatePVectorAdjointHO{{{*/ 5001 ElementVector* Penta::CreatePVectorAdjointHO(void){ 5002 5002 5003 5003 if (!IsOnSurface()) return NULL; … … 5012 5012 } 5013 5013 /*}}}*/ 5014 /*FUNCTION Penta::CreatePVectorAdjoint Stokes{{{*/5015 ElementVector* Penta::CreatePVectorAdjoint Stokes(void){5014 /*FUNCTION Penta::CreatePVectorAdjointFS{{{*/ 5015 ElementVector* Penta::CreatePVectorAdjointFS(void){ 5016 5016 5017 5017 if (!IsOnSurface()) return NULL; … … 5019 5019 /*Call Tria function*/ 5020 5020 Tria* tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face). 5021 ElementVector* pe=tria->CreatePVectorAdjoint Stokes();5021 ElementVector* pe=tria->CreatePVectorAdjointFS(); 5022 5022 delete tria->material; delete tria; 5023 5023 … … 5059 5059 GradjDragMacAyeal(gradient,control_index); 5060 5060 break; 5061 case PattynApproximationEnum:5062 GradjDrag Pattyn(gradient,control_index);5061 case HOApproximationEnum: 5062 GradjDragHO(gradient,control_index); 5063 5063 break; 5064 case StokesApproximationEnum:5065 GradjDrag Stokes(gradient,control_index);5064 case FSApproximationEnum: 5065 GradjDragFS(gradient,control_index); 5066 5066 break; 5067 5067 case NoneApproximationEnum: … … 5079 5079 GradjBbarMacAyeal(gradient,control_index); 5080 5080 break; 5081 case PattynApproximationEnum:5082 GradjBbar Pattyn(gradient,control_index);5081 case HOApproximationEnum: 5082 GradjBbarHO(gradient,control_index); 5083 5083 break; 5084 case StokesApproximationEnum:5085 GradjBbar Stokes(gradient,control_index);5084 case FSApproximationEnum: 5085 GradjBbarFS(gradient,control_index); 5086 5086 break; 5087 5087 case NoneApproximationEnum: … … 5143 5143 5144 5144 } /*}}}*/ 5145 /*FUNCTION Penta::GradjDrag Pattyn{{{*/5146 void Penta::GradjDrag Pattyn(Vector<IssmDouble>* gradient,int control_index){5145 /*FUNCTION Penta::GradjDragHO {{{*/ 5146 void Penta::GradjDragHO(Vector<IssmDouble>* gradient,int control_index){ 5147 5147 5148 5148 int i,j; … … 5214 5214 } 5215 5215 /*}}}*/ 5216 /*FUNCTION Penta::GradjDrag Stokes{{{*/5217 void Penta::GradjDrag Stokes(Vector<IssmDouble>* gradient,int control_index){5216 /*FUNCTION Penta::GradjDragFS {{{*/ 5217 void Penta::GradjDragFS(Vector<IssmDouble>* gradient,int control_index){ 5218 5218 5219 5219 int i,j; … … 5324 5324 5325 5325 } /*}}}*/ 5326 /*FUNCTION Penta::GradjBbar Pattyn{{{*/5327 void Penta::GradjBbar Pattyn(Vector<IssmDouble>* gradient,int control_index){5326 /*FUNCTION Penta::GradjBbarHO {{{*/ 5327 void Penta::GradjBbarHO(Vector<IssmDouble>* gradient,int control_index){ 5328 5328 5329 5329 /*Gradient is computed on bed only (Bbar)*/ … … 5341 5341 this->material->inputs->DeleteInput(MaterialsRheologyBbarEnum); 5342 5342 } /*}}}*/ 5343 /*FUNCTION Penta::GradjBbar Stokes{{{*/5344 void Penta::GradjBbar Stokes(Vector<IssmDouble>* gradient,int control_index){5343 /*FUNCTION Penta::GradjBbarFS {{{*/ 5344 void Penta::GradjBbarFS(Vector<IssmDouble>* gradient,int control_index){ 5345 5345 5346 5346 /*Gradient is computed on bed only (Bbar)*/ … … 5403 5403 } 5404 5404 /*}}}*/ 5405 /*FUNCTION Penta::InputUpdateFromSolutionAdjoint Stokes{{{*/5406 void Penta::InputUpdateFromSolutionAdjoint Stokes(IssmDouble* solution){5405 /*FUNCTION Penta::InputUpdateFromSolutionAdjointFS {{{*/ 5406 void Penta::InputUpdateFromSolutionAdjointFS(IssmDouble* solution){ 5407 5407 5408 5408 const int numdof=NDOF4*NUMVERTICES; … … 5951 5951 5952 5952 switch(approximation){ 5953 case StokesApproximationEnum:5954 return CreateDVectorDiagnostic Stokes();5953 case FSApproximationEnum: 5954 return CreateDVectorDiagnosticFS(); 5955 5955 default: 5956 return NULL; //no need for doftypes outside of stokesapproximation5957 } 5958 } 5959 /*}}}*/ 5960 /*FUNCTION Penta::CreateDVectorDiagnostic Stokes{{{*/5961 ElementVector* Penta::CreateDVectorDiagnostic Stokes(void){5956 return NULL; //no need for doftypes outside of FS approximation 5957 } 5958 } 5959 /*}}}*/ 5960 /*FUNCTION Penta::CreateDVectorDiagnosticFS{{{*/ 5961 ElementVector* Penta::CreateDVectorDiagnosticFS(void){ 5962 5962 5963 5963 /*output: */ … … 5969 5969 /*Initialize Element vector and return if necessary*/ 5970 5970 inputs->GetInputValue(&approximation,ApproximationEnum); 5971 if(approximation!= StokesApproximationEnum) return NULL;5972 5973 De=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);5971 if(approximation!=FSApproximationEnum) return NULL; 5972 5973 De=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 5974 5974 5975 5975 for (i=0;i<NUMVERTICES;i++){ … … 5983 5983 } 5984 5984 /*}}}*/ 5985 /*FUNCTION Penta::CreateKMatrixCouplingMacAyeal Pattyn{{{*/5986 ElementMatrix* Penta::CreateKMatrixCouplingMacAyeal Pattyn(void){5985 /*FUNCTION Penta::CreateKMatrixCouplingMacAyealHO{{{*/ 5986 ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHO(void){ 5987 5987 5988 5988 /*compute all stiffness matrices for this element*/ 5989 ElementMatrix* Ke1=CreateKMatrixCouplingMacAyeal PattynViscous();5990 ElementMatrix* Ke2=CreateKMatrixCouplingMacAyeal PattynFriction();5989 ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealHOViscous(); 5990 ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealHOFriction(); 5991 5991 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 5992 5992 … … 5997 5997 } 5998 5998 /*}}}*/ 5999 /*FUNCTION Penta::CreateKMatrixCouplingMacAyeal PattynViscous{{{*/6000 ElementMatrix* Penta::CreateKMatrixCouplingMacAyeal PattynViscous(void){5999 /*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOViscous{{{*/ 6000 ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOViscous(void){ 6001 6001 6002 6002 /*Constants*/ … … 6023 6023 int cs_list[numnodes]; 6024 6024 6025 /*Find penta on bed as pattynmust be coupled to the dofs on the bed: */6025 /*Find penta on bed as HO must be coupled to the dofs on the bed: */ 6026 6026 Penta* pentabase=GetBasalElement(); 6027 6027 Tria* tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria. … … 6037 6037 /*Initialize Element matrix*/ 6038 6038 ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum); 6039 ElementMatrix* Ke2=new ElementMatrix(this->nodes ,NUMVERTICES,this->parameters, PattynApproximationEnum);6039 ElementMatrix* Ke2=new ElementMatrix(this->nodes ,NUMVERTICES,this->parameters,HOApproximationEnum); 6040 6040 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 6041 6041 delete Ke1; delete Ke2; … … 6058 6058 6059 6059 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6060 GetBMacAyeal Pattyn(&B[0][0], &xyz_list[0][0], gauss);6060 GetBMacAyealHO(&B[0][0], &xyz_list[0][0], gauss); 6061 6061 tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria); 6062 6062 6063 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);6064 this->GetStrainRate3d Pattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);6063 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 6064 this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input); 6065 6065 material->GetViscosity3d(&viscosity, &epsilon[0]); 6066 6066 material->GetViscosity3d(&oldviscosity, &oldepsilon[0]); … … 6090 6090 } 6091 6091 /*}}}*/ 6092 /*FUNCTION Penta::CreateKMatrixCouplingMacAyeal PattynFriction{{{*/6093 ElementMatrix* Penta::CreateKMatrixCouplingMacAyeal PattynFriction(void){6092 /*FUNCTION Penta::CreateKMatrixCouplingMacAyealHOFriction{{{*/ 6093 ElementMatrix* Penta::CreateKMatrixCouplingMacAyealHOFriction(void){ 6094 6094 6095 6095 /*Constants*/ … … 6116 6116 if(IsFloating() || !IsOnBed()) return NULL; 6117 6117 ElementMatrix* Ke1=new ElementMatrix(nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum); 6118 ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters, PattynApproximationEnum);6118 ElementMatrix* Ke2=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum); 6119 6119 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 6120 6120 delete Ke1; delete Ke2; … … 6149 6149 6150 6150 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss); 6151 GetB PattynFriction(&L[0][0],gauss);6151 GetBHOFriction(&L[0][0],gauss); 6152 6152 6153 6153 DL_scalar=alpha2*gauss->weight*Jdet2d; … … 6175 6175 } 6176 6176 /*}}}*/ 6177 /*FUNCTION Penta::CreateKMatrixCouplingMacAyeal Stokes{{{*/6178 ElementMatrix* Penta::CreateKMatrixCouplingMacAyeal Stokes(void){6177 /*FUNCTION Penta::CreateKMatrixCouplingMacAyealFS{{{*/ 6178 ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFS(void){ 6179 6179 6180 6180 /*compute all stiffness matrices for this element*/ 6181 ElementMatrix* Ke1=CreateKMatrixCouplingMacAyeal StokesViscous();6182 ElementMatrix* Ke2=CreateKMatrixCouplingMacAyeal StokesFriction();6181 ElementMatrix* Ke1=CreateKMatrixCouplingMacAyealFSViscous(); 6182 ElementMatrix* Ke2=CreateKMatrixCouplingMacAyealFSFriction(); 6183 6183 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 6184 6184 … … 6189 6189 } 6190 6190 /*}}}*/ 6191 /*FUNCTION Penta::CreateKMatrixCouplingMacAyeal StokesViscous{{{*/6192 ElementMatrix* Penta::CreateKMatrixCouplingMacAyeal StokesViscous(void){6191 /*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSViscous{{{*/ 6192 ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSViscous(void){ 6193 6193 6194 6194 /*Constants*/ … … 6201 6201 int i,j; 6202 6202 IssmDouble Jdet; 6203 IssmDouble viscosity, stokesreconditioning; //viscosity6203 IssmDouble viscosity,FSreconditioning; //viscosity 6204 6204 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,exy,exz,eyz];*/ 6205 6205 IssmDouble xyz_list[NUMVERTICES][3]; … … 6220 6220 int cs_list[numnodes]; 6221 6221 6222 /*Find penta on bed as stokesmust be coupled to the dofs on the bed: */6222 /*Find penta on bed as FS must be coupled to the dofs on the bed: */ 6223 6223 Penta* pentabase=GetBasalElement(); 6224 6224 Tria* tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria. … … 6234 6234 /*Initialize Element matrix and return if necessary*/ 6235 6235 ElementMatrix* Ke1=new ElementMatrix(pentabase->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum); 6236 ElementMatrix* Ke2=new ElementMatrix(this->nodes ,NUMVERTICES,this->parameters, StokesApproximationEnum);6236 ElementMatrix* Ke2=new ElementMatrix(this->nodes ,NUMVERTICES,this->parameters,FSApproximationEnum); 6237 6237 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 6238 6238 delete Ke1; delete Ke2; … … 6240 6240 /* Get node coordinates and dof list: */ 6241 6241 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6242 parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);6242 parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 6243 6243 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 6244 6244 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 6254 6254 6255 6255 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6256 GetBMacAyeal Stokes(&B[0][0], &xyz_list[0][0], gauss);6257 tria->GetBprimeMacAyeal Stokes(&Bprime[0][0], &xyz_list[0][0], gauss_tria);6258 tria->GetBMacAyeal Stokes(&B2[0][0], &xyz_list[0][0], gauss_tria);6259 GetBprimeMacAyeal Stokes(&Bprime2[0][0], &xyz_list[0][0], gauss);6256 GetBMacAyealFS(&B[0][0], &xyz_list[0][0], gauss); 6257 tria->GetBprimeMacAyealFS(&Bprime[0][0], &xyz_list[0][0], gauss_tria); 6258 tria->GetBMacAyealFS(&B2[0][0], &xyz_list[0][0], gauss_tria); 6259 GetBprimeMacAyealFS(&Bprime2[0][0], &xyz_list[0][0], gauss); 6260 6260 6261 6261 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 6262 material->GetViscosity3d Stokes(&viscosity, &epsilon[0]);6262 material->GetViscosity3dFS(&viscosity, &epsilon[0]); 6263 6263 6264 6264 D_scalar=2*viscosity*gauss->weight*Jdet; 6265 6265 for (i=0;i<3;i++) D[i][i]=D_scalar; 6266 D[3][3]=-gauss->weight*Jdet* stokesreconditioning;6266 D[3][3]=-gauss->weight*Jdet*FSreconditioning; 6267 6267 for (i=0;i<3;i++) D2[i][i]=D_scalar; 6268 6268 … … 6293 6293 } 6294 6294 /*}}}*/ 6295 /*FUNCTION Penta::CreateKMatrixCouplingMacAyeal StokesFriction {{{*/6296 ElementMatrix* Penta::CreateKMatrixCouplingMacAyeal StokesFriction(void){6295 /*FUNCTION Penta::CreateKMatrixCouplingMacAyealFSFriction {{{*/ 6296 ElementMatrix* Penta::CreateKMatrixCouplingMacAyealFSFriction(void){ 6297 6297 6298 6298 /*Constants*/ … … 6307 6307 int i,j; 6308 6308 int analysis_type,approximation; 6309 IssmDouble stokesreconditioning;6309 IssmDouble FSreconditioning; 6310 6310 IssmDouble viscosity,alpha2_gauss,Jdet2d; 6311 6311 IssmDouble bed_normal[3]; … … 6313 6313 IssmDouble xyz_list[NUMVERTICES][3]; 6314 6314 IssmDouble xyz_list_tria[NUMVERTICES2D][3]; 6315 IssmDouble LMacAyeal Stokes[8][numdof2dm];6316 IssmDouble LprimeMacAyeal Stokes[8][numdof2d];6317 IssmDouble DLMacAyeal Stokes[8][8]={0.0};6318 IssmDouble L StokesMacAyeal[4][numdof2d];6319 IssmDouble Lprime StokesMacAyeal[4][numdof2dm];6320 IssmDouble DL StokesMacAyeal[4][4]={0.0};6315 IssmDouble LMacAyealFS[8][numdof2dm]; 6316 IssmDouble LprimeMacAyealFS[8][numdof2d]; 6317 IssmDouble DLMacAyealFS[8][8]={0.0}; 6318 IssmDouble LFSMacAyeal[4][numdof2d]; 6319 IssmDouble LprimeFSMacAyeal[4][numdof2dm]; 6320 IssmDouble DLFSMacAyeal[4][4]={0.0}; 6321 6321 IssmDouble Ke_drag_gaussian[numdof2dm][numdof2d]; 6322 6322 IssmDouble Ke_drag_gaussian2[numdof2d][numdof2dm]; … … 6326 6326 int cs_list[numnodes]; 6327 6327 6328 /*If on water or not Stokes, skip stiffness: */6328 /*If on water or not FS, skip stiffness: */ 6329 6329 inputs->GetInputValue(&approximation,ApproximationEnum); 6330 6330 if(IsFloating() || !IsOnBed()) return NULL; 6331 6331 ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,MacAyealApproximationEnum); 6332 ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);6332 ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 6333 6333 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 6334 6334 delete Ke1; delete Ke2; … … 6345 6345 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 6346 6346 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 6347 parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);6347 parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 6348 6348 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 6349 6349 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 6361 6361 6362 6362 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss); 6363 GetLMacAyeal Stokes(&LMacAyealStokes[0][0], gauss);6364 GetLprimeMacAyeal Stokes(&LprimeMacAyealStokes[0][0], &xyz_list[0][0], gauss);6365 GetL StokesMacAyeal(&LStokesMacAyeal[0][0], gauss);6366 GetLprime StokesMacAyeal(&LprimeStokesMacAyeal[0][0], &xyz_list[0][0], gauss);6363 GetLMacAyealFS(&LMacAyealFS[0][0], gauss); 6364 GetLprimeMacAyealFS(&LprimeMacAyealFS[0][0], &xyz_list[0][0], gauss); 6365 GetLFSMacAyeal(&LFSMacAyeal[0][0], gauss); 6366 GetLprimeFSMacAyeal(&LprimeFSMacAyeal[0][0], &xyz_list[0][0], gauss); 6367 6367 6368 6368 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 6369 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);6369 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 6370 6370 6371 6371 BedNormal(&bed_normal[0],xyz_list_tria); 6372 6372 friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum); 6373 6373 6374 DLMacAyeal Stokes[0][0]=alpha2_gauss*gauss->weight*Jdet2d;6375 DLMacAyeal Stokes[1][1]=alpha2_gauss*gauss->weight*Jdet2d;6376 DLMacAyeal Stokes[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];6377 DLMacAyeal Stokes[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];6378 DLMacAyeal Stokes[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];6379 DLMacAyeal Stokes[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];6380 DLMacAyeal Stokes[6][6]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[0];6381 DLMacAyeal Stokes[7][7]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[1];6382 6383 DL StokesMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d;6384 DL StokesMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d;6385 DL StokesMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];6386 DL StokesMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];6387 6388 TripleMultiply( &LMacAyeal Stokes[0][0],8,numdof2dm,1,6389 &DLMacAyeal Stokes[0][0],8,8,0,6390 &LprimeMacAyeal Stokes[0][0],8,numdof2d,0,6374 DLMacAyealFS[0][0]=alpha2_gauss*gauss->weight*Jdet2d; 6375 DLMacAyealFS[1][1]=alpha2_gauss*gauss->weight*Jdet2d; 6376 DLMacAyealFS[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2]; 6377 DLMacAyealFS[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2]; 6378 DLMacAyealFS[4][4]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0]; 6379 DLMacAyealFS[5][5]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1]; 6380 DLMacAyealFS[6][6]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[0]; 6381 DLMacAyealFS[7][7]=FSreconditioning*gauss->weight*Jdet2d*bed_normal[1]; 6382 6383 DLFSMacAyeal[0][0]=alpha2_gauss*gauss->weight*Jdet2d; 6384 DLFSMacAyeal[1][1]=alpha2_gauss*gauss->weight*Jdet2d; 6385 DLFSMacAyeal[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2]; 6386 DLFSMacAyeal[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2]; 6387 6388 TripleMultiply( &LMacAyealFS[0][0],8,numdof2dm,1, 6389 &DLMacAyealFS[0][0],8,8,0, 6390 &LprimeMacAyealFS[0][0],8,numdof2d,0, 6391 6391 &Ke_drag_gaussian[0][0],0); 6392 6392 6393 TripleMultiply( &L StokesMacAyeal[0][0],4,numdof2d,1,6394 &DL StokesMacAyeal[0][0],4,4,0,6395 &Lprime StokesMacAyeal[0][0],4,numdof2dm,0,6393 TripleMultiply( &LFSMacAyeal[0][0],4,numdof2d,1, 6394 &DLFSMacAyeal[0][0],4,4,0, 6395 &LprimeFSMacAyeal[0][0],4,numdof2dm,0, 6396 6396 &Ke_drag_gaussian2[0][0],0); 6397 6397 … … 6409 6409 } 6410 6410 /*}}}*/ 6411 /*FUNCTION Penta::CreateKMatrixCoupling PattynStokes{{{*/6412 ElementMatrix* Penta::CreateKMatrixCoupling PattynStokes(void){6411 /*FUNCTION Penta::CreateKMatrixCouplingHOFS{{{*/ 6412 ElementMatrix* Penta::CreateKMatrixCouplingHOFS(void){ 6413 6413 6414 6414 /*Constants*/ … … 6432 6432 6433 6433 /*compute all stiffness matrices for this element*/ 6434 ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters, PattynApproximationEnum);6435 ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);6434 ElementMatrix* Ke1=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,HOApproximationEnum); 6435 ElementMatrix* Ke2=new ElementMatrix(this->nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 6436 6436 ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2); 6437 6437 delete Ke1; 6438 6438 delete Ke2; 6439 Ke1=CreateKMatrixDiagnostic Pattyn(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);6440 Ke2=CreateKMatrixDiagnostic Stokes(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum);6439 Ke1=CreateKMatrixDiagnosticHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum); 6440 Ke2=CreateKMatrixDiagnosticFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,NUMVERTICES,XYZPEnum); 6441 6441 6442 6442 for(i=0;i<numdofs;i++) for(j=0;j<NUMVERTICES;j++){ … … 6469 6469 case L1L2ApproximationEnum: 6470 6470 return CreateKMatrixDiagnosticL1L2(); 6471 case PattynApproximationEnum:6472 return CreateKMatrixDiagnostic Pattyn();6473 case StokesApproximationEnum:6474 return CreateKMatrixDiagnostic Stokes();6475 case HutterApproximationEnum:6471 case HOApproximationEnum: 6472 return CreateKMatrixDiagnosticHO(); 6473 case FSApproximationEnum: 6474 return CreateKMatrixDiagnosticFS(); 6475 case SIAApproximationEnum: 6476 6476 return NULL; 6477 6477 case NoneApproximationEnum: 6478 6478 return NULL; 6479 case MacAyeal PattynApproximationEnum:6480 return CreateKMatrixDiagnosticMacAyeal Pattyn();6481 case MacAyeal StokesApproximationEnum:6482 return CreateKMatrixDiagnosticMacAyeal Stokes();6483 case PattynStokesApproximationEnum:6484 return CreateKMatrixDiagnostic PattynStokes();6479 case MacAyealHOApproximationEnum: 6480 return CreateKMatrixDiagnosticMacAyealHO(); 6481 case MacAyealFSApproximationEnum: 6482 return CreateKMatrixDiagnosticMacAyealFS(); 6483 case HOFSApproximationEnum: 6484 return CreateKMatrixDiagnosticHOFS(); 6485 6485 default: 6486 6486 _error_("Approximation " << EnumToStringx(approximation) << " not supported yet"); … … 6488 6488 } 6489 6489 /*}}}*/ 6490 /*FUNCTION Penta::CreateKMatrixDiagnostic Hutter{{{*/6491 ElementMatrix* Penta::CreateKMatrixDiagnostic Hutter(void){6490 /*FUNCTION Penta::CreateKMatrixDiagnosticSIA{{{*/ 6491 ElementMatrix* Penta::CreateKMatrixDiagnosticSIA(void){ 6492 6492 6493 6493 /*Constants*/ … … 6610 6610 IssmDouble viscosity , oldviscosity, newviscosity, viscosity_overshoot; 6611 6611 IssmDouble epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/ 6612 IssmDouble epsilons[6]; //6 for stokes6612 IssmDouble epsilons[6]; //6 for FS 6613 6613 IssmDouble xyz_list[NUMVERTICES][3]; 6614 6614 IssmDouble B[3][numdof2d]; … … 6622 6622 GaussTria *gauss_tria = NULL; 6623 6623 6624 /*Find penta on bed as this is a macayealelements: */6624 /*Find penta on bed as this is a SSA elements: */ 6625 6625 pentabase=GetBasalElement(); 6626 6626 tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria. … … 6651 6651 tria->GetBprimeMacAyeal(&Bprime[0][0], &xyz_list[0][0], gauss_tria); 6652 6652 6653 if(approximation==MacAyeal PattynApproximationEnum){6654 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);6655 this->GetStrainRate3d Pattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);6653 if(approximation==MacAyealHOApproximationEnum){ 6654 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 6655 this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input); 6656 6656 material->GetViscosity3d(&viscosity, &epsilon[0]); 6657 6657 material->GetViscosity3d(&oldviscosity, &oldepsilon[0]); … … 6659 6659 newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity); 6660 6660 } 6661 else if (approximation==MacAyeal StokesApproximationEnum){6661 else if (approximation==MacAyealFSApproximationEnum){ 6662 6662 this->GetStrainRate3d(&epsilons[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 6663 material->GetViscosity3d Stokes(&newviscosity,&epsilons[0]);6663 material->GetViscosity3dFS(&newviscosity,&epsilons[0]); 6664 6664 } 6665 6665 else _error_("approximation " << approximation << " (" << EnumToStringx(approximation) << ") not supported yet"); … … 6704 6704 } 6705 6705 /*}}}*/ 6706 /*FUNCTION Penta::CreateKMatrixDiagnosticMacAyeal Pattyn{{{*/6707 ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyeal Pattyn(void){6706 /*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealHO{{{*/ 6707 ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealHO(void){ 6708 6708 6709 6709 /*compute all stiffness matrices for this element*/ 6710 6710 ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d(); 6711 ElementMatrix* Ke2=CreateKMatrixDiagnostic Pattyn();6712 ElementMatrix* Ke3=CreateKMatrixCouplingMacAyeal Pattyn();6711 ElementMatrix* Ke2=CreateKMatrixDiagnosticHO(); 6712 ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealHO(); 6713 6713 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); 6714 6714 … … 6720 6720 } 6721 6721 /*}}}*/ 6722 /*FUNCTION Penta::CreateKMatrixDiagnosticMacAyeal Stokes{{{*/6723 ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyeal Stokes(void){6722 /*FUNCTION Penta::CreateKMatrixDiagnosticMacAyealFS{{{*/ 6723 ElementMatrix* Penta::CreateKMatrixDiagnosticMacAyealFS(void){ 6724 6724 6725 6725 /*compute all stiffness matrices for this element*/ 6726 6726 ElementMatrix* Ke1=CreateKMatrixDiagnosticMacAyeal3d(); 6727 ElementMatrix* Ke2=CreateKMatrixDiagnostic Stokes();6728 ElementMatrix* Ke3=CreateKMatrixCouplingMacAyeal Stokes();6727 ElementMatrix* Ke2=CreateKMatrixDiagnosticFS(); 6728 ElementMatrix* Ke3=CreateKMatrixCouplingMacAyealFS(); 6729 6729 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); 6730 6730 … … 6770 6770 GaussTria *gauss_tria = NULL; 6771 6771 6772 /*Find penta on bed as this is a macayealelements: */6772 /*Find penta on bed as this is a SSA elements: */ 6773 6773 pentabase=GetBasalElement(); 6774 6774 tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria. … … 6835 6835 } 6836 6836 /*}}}*/ 6837 /*FUNCTION Penta::CreateKMatrixDiagnostic Pattyn{{{*/6838 ElementMatrix* Penta::CreateKMatrixDiagnostic Pattyn(void){6837 /*FUNCTION Penta::CreateKMatrixDiagnosticHO{{{*/ 6838 ElementMatrix* Penta::CreateKMatrixDiagnosticHO(void){ 6839 6839 6840 6840 /*compute all stiffness matrices for this element*/ 6841 ElementMatrix* Ke1=CreateKMatrixDiagnostic PattynViscous();6842 ElementMatrix* Ke2=CreateKMatrixDiagnostic PattynFriction();6841 ElementMatrix* Ke1=CreateKMatrixDiagnosticHOViscous(); 6842 ElementMatrix* Ke2=CreateKMatrixDiagnosticHOFriction(); 6843 6843 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 6844 6844 … … 6850 6850 } 6851 6851 /*}}}*/ 6852 /*FUNCTION Penta::CreateKMatrixDiagnostic PattynViscous{{{*/6853 ElementMatrix* Penta::CreateKMatrixDiagnostic PattynViscous(void){6852 /*FUNCTION Penta::CreateKMatrixDiagnosticHOViscous{{{*/ 6853 ElementMatrix* Penta::CreateKMatrixDiagnosticHOViscous(void){ 6854 6854 6855 6855 /*Constants*/ … … 6871 6871 6872 6872 /*Initialize Element matrix*/ 6873 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters, PattynApproximationEnum);6873 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum); 6874 6874 6875 6875 /*Retrieve all inputs and parameters*/ … … 6889 6889 6890 6890 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 6891 GetB Pattyn(&B[0][0], &xyz_list[0][0], gauss);6892 GetBprime Pattyn(&Bprime[0][0], &xyz_list[0][0], gauss);6893 6894 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);6895 this->GetStrainRate3d Pattyn(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input);6891 GetBHO(&B[0][0], &xyz_list[0][0], gauss); 6892 GetBprimeHO(&Bprime[0][0], &xyz_list[0][0], gauss); 6893 6894 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 6895 this->GetStrainRate3dHO(&oldepsilon[0],&xyz_list[0][0],gauss,vxold_input,vyold_input); 6896 6896 material->GetViscosity3d(&viscosity, &epsilon[0]); 6897 6897 material->GetViscosity3d(&oldviscosity, &oldepsilon[0]); … … 6915 6915 } 6916 6916 /*}}}*/ 6917 /*FUNCTION Penta::CreateKMatrixDiagnostic PattynFriction{{{*/6918 ElementMatrix* Penta::CreateKMatrixDiagnostic PattynFriction(void){6917 /*FUNCTION Penta::CreateKMatrixDiagnosticHOFriction{{{*/ 6918 ElementMatrix* Penta::CreateKMatrixDiagnosticHOFriction(void){ 6919 6919 6920 6920 /*Constants*/ … … 6937 6937 if(IsFloating() || !IsOnBed()) return NULL; 6938 6938 6939 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters, PattynApproximationEnum);6939 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,HOApproximationEnum); 6940 6940 6941 6941 /*Retrieve all inputs and parameters*/ … … 6962 6962 6963 6963 GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0],gauss); 6964 GetB PattynFriction(&L[0][0],gauss);6964 GetBHOFriction(&L[0][0],gauss); 6965 6965 6966 6966 friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); … … 6985 6985 } 6986 6986 /*}}}*/ 6987 /*FUNCTION Penta::CreateKMatrixDiagnostic PattynStokes{{{*/6988 ElementMatrix* Penta::CreateKMatrixDiagnostic PattynStokes(void){6987 /*FUNCTION Penta::CreateKMatrixDiagnosticHOFS{{{*/ 6988 ElementMatrix* Penta::CreateKMatrixDiagnosticHOFS(void){ 6989 6989 6990 6990 /*compute all stiffness matrices for this element*/ 6991 ElementMatrix* Ke1=CreateKMatrixDiagnostic Pattyn();6992 ElementMatrix* Ke2=CreateKMatrixDiagnostic Stokes();6993 ElementMatrix* Ke3=CreateKMatrixCoupling PattynStokes();6991 ElementMatrix* Ke1=CreateKMatrixDiagnosticHO(); 6992 ElementMatrix* Ke2=CreateKMatrixDiagnosticFS(); 6993 ElementMatrix* Ke3=CreateKMatrixCouplingHOFS(); 6994 6994 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); 6995 6995 … … 7001 7001 } 7002 7002 /*}}}*/ 7003 /*FUNCTION Penta::CreateKMatrixDiagnostic Stokes{{{*/7004 ElementMatrix* Penta::CreateKMatrixDiagnostic Stokes(void){7005 7006 int fe_ stokes;7003 /*FUNCTION Penta::CreateKMatrixDiagnosticFS{{{*/ 7004 ElementMatrix* Penta::CreateKMatrixDiagnosticFS(void){ 7005 7006 int fe_FS; 7007 7007 ElementMatrix* Ke1; 7008 7008 ElementMatrix* Ke2; 7009 7009 ElementMatrix* Ke; 7010 parameters->FindParam(&fe_ stokes,FlowequationFeStokesEnum);7011 7012 switch(fe_ stokes){7010 parameters->FindParam(&fe_FS,FlowequationFeFSEnum); 7011 7012 switch(fe_FS){ 7013 7013 case 0: 7014 7014 /*compute all stiffness matrices for this element*/ 7015 Ke1=CreateKMatrixDiagnostic StokesViscous();7016 Ke2=CreateKMatrixDiagnostic StokesFriction();7015 Ke1=CreateKMatrixDiagnosticFSViscous(); 7016 Ke2=CreateKMatrixDiagnosticFSFriction(); 7017 7017 Ke =new ElementMatrix(Ke1,Ke2); 7018 7018 break; 7019 7019 case 1: 7020 7020 /*compute all stiffness matrices for this element*/ 7021 Ke1=CreateKMatrixDiagnostic StokesGLSViscous();7022 Ke2=CreateKMatrixDiagnostic StokesFriction();7021 Ke1=CreateKMatrixDiagnosticFSGLSViscous(); 7022 Ke2=CreateKMatrixDiagnosticFSFriction(); 7023 7023 Ke =new ElementMatrix(Ke1,Ke2); 7024 7024 break; 7025 7025 default: 7026 _error_("Finite element" << fe_ stokes<< " not supported yet");7026 _error_("Finite element" << fe_FS << " not supported yet"); 7027 7027 } 7028 7028 … … 7034 7034 } 7035 7035 /*}}}*/ 7036 /*FUNCTION Penta::CreateKMatrixDiagnostic StokesViscous {{{*/7037 ElementMatrix* Penta::CreateKMatrixDiagnostic StokesViscous(void){7036 /*FUNCTION Penta::CreateKMatrixDiagnosticFSViscous {{{*/ 7037 ElementMatrix* Penta::CreateKMatrixDiagnosticFSViscous(void){ 7038 7038 7039 7039 /*Intermediaries */ 7040 7040 int i,approximation; 7041 IssmDouble Jdet,viscosity, stokesreconditioning;7041 IssmDouble Jdet,viscosity,FSreconditioning; 7042 7042 IssmDouble xyz_list[NUMVERTICES][3]; 7043 7043 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ … … 7049 7049 GaussPenta *gauss=NULL; 7050 7050 7051 /*If on water or not Stokes, skip stiffness: */7051 /*If on water or not FS, skip stiffness: */ 7052 7052 inputs->GetInputValue(&approximation,ApproximationEnum); 7053 if(approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;7054 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7053 if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 7054 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7055 7055 7056 7056 /*Retrieve all inputs and parameters*/ 7057 7057 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7058 parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7058 parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7059 7059 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7060 7060 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 7068 7068 7069 7069 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 7070 GetB Stokes(&B[0][0],&xyz_list[0][0],gauss);7071 GetBprime Stokes(&B_prime[0][0],&xyz_list[0][0],gauss);7070 GetBFS(&B[0][0],&xyz_list[0][0],gauss); 7071 GetBprimeFS(&B_prime[0][0],&xyz_list[0][0],gauss); 7072 7072 7073 7073 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7074 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7074 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7075 7075 7076 7076 D_scalar=gauss->weight*Jdet; 7077 7077 for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity; 7078 for (i=6;i<8;i++) D[i][i]=-D_scalar* stokesreconditioning;7078 for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning; 7079 7079 7080 7080 TripleMultiply( &B[0][0],8,27,1, … … 7085 7085 7086 7086 /*Condensation*/ 7087 ReduceMatrix Stokes(Ke->values, &Ke_temp[0][0]);7087 ReduceMatrixFS(Ke->values, &Ke_temp[0][0]); 7088 7088 //Ke->Echo(); 7089 7089 //_error_("stop"); … … 7097 7097 } 7098 7098 /*}}}*/ 7099 /*FUNCTION Penta::CreateKMatrixDiagnostic StokesGLSViscous {{{*/7100 ElementMatrix* Penta::CreateKMatrixDiagnostic StokesGLSViscous(void){7099 /*FUNCTION Penta::CreateKMatrixDiagnosticFSGLSViscous {{{*/ 7100 ElementMatrix* Penta::CreateKMatrixDiagnosticFSGLSViscous(void){ 7101 7101 7102 7102 int numdof = NUMVERTICES*NDOF4; … … 7104 7104 /*Intermediaries */ 7105 7105 int i,j,approximation; 7106 IssmDouble Jdet,viscosity, stokesreconditioning,diameter,rigidity;7106 IssmDouble Jdet,viscosity,FSreconditioning,diameter,rigidity; 7107 7107 IssmDouble xyz_list[NUMVERTICES][3]; 7108 7108 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ … … 7128 7128 int c=3; //index of pressure 7129 7129 7130 /*If on water or not Stokes, skip stiffness: */7130 /*If on water or not FS, skip stiffness: */ 7131 7131 inputs->GetInputValue(&approximation,ApproximationEnum); 7132 if(approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;7133 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7132 if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 7133 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7134 7134 7135 7135 /*Retrieve all inputs and parameters*/ 7136 7136 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7137 parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7137 parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7138 7138 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7139 7139 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 7165 7165 7166 7166 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 7167 GetB StokesGLS(&B[0][0],&xyz_list[0][0],gauss);7168 GetBprime StokesGLS(&B_prime[0][0],&xyz_list[0][0],gauss);7167 GetBFSGLS(&B[0][0],&xyz_list[0][0],gauss); 7168 GetBprimeFSGLS(&B_prime[0][0],&xyz_list[0][0],gauss); 7169 7169 7170 7170 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7171 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7171 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7172 7172 7173 7173 D_scalar=gauss->weight*Jdet; 7174 7174 for (i=0;i<6;i++) D[i][i]=D_scalar*2.*2.*viscosity; 7175 for (i=6;i<8;i++) D[i][i]=-D_scalar* stokesreconditioning;7175 for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning; 7176 7176 7177 7177 TripleMultiply( &B[0][0],8,24,1, … … 7235 7235 } 7236 7236 /*}}}*/ 7237 /*FUNCTION Penta::CreateKMatrixDiagnostic StokesFriction{{{*/7238 ElementMatrix* Penta::CreateKMatrixDiagnostic StokesFriction(void){7237 /*FUNCTION Penta::CreateKMatrixDiagnosticFSFriction{{{*/ 7238 ElementMatrix* Penta::CreateKMatrixDiagnosticFSFriction(void){ 7239 7239 7240 7240 /*Constants*/ … … 7246 7246 int analysis_type,approximation; 7247 7247 IssmDouble alpha2,Jdet2d; 7248 IssmDouble stokesreconditioning,viscosity;7248 IssmDouble FSreconditioning,viscosity; 7249 7249 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ 7250 7250 IssmDouble xyz_list[NUMVERTICES][3]; 7251 7251 IssmDouble xyz_list_tria[NUMVERTICES2D][3]; 7252 IssmDouble L Stokes[2][numdof2d];7253 IssmDouble DL Stokes[2][2]={0.0};7252 IssmDouble LFS[2][numdof2d]; 7253 IssmDouble DLFS[2][2]={0.0}; 7254 7254 IssmDouble Ke_drag_gaussian[numdof2d][numdof2d]; 7255 7255 Friction* friction=NULL; 7256 7256 GaussPenta *gauss=NULL; 7257 7257 7258 /*If on water or not Stokes, skip stiffness: */7258 /*If on water or not FS, skip stiffness: */ 7259 7259 inputs->GetInputValue(&approximation,ApproximationEnum); 7260 if(IsFloating() || !IsOnBed() || (approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum)) return NULL;7261 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7260 if(IsFloating() || !IsOnBed() || (approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum)) return NULL; 7261 ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7262 7262 7263 7263 /*Retrieve all inputs and parameters*/ 7264 7264 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7265 7265 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 7266 parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7266 parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7267 7267 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7268 7268 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 7280 7280 7281 7281 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss); 7282 GetL Stokes(&LStokes[0][0], gauss);7282 GetLFS(&LFS[0][0], gauss); 7283 7283 7284 7284 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7285 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7285 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7286 7286 7287 7287 friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum); 7288 7288 7289 DL Stokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx7290 DL Stokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy7291 7292 TripleMultiply( &L Stokes[0][0],2,numdof2d,1,7293 &DL Stokes[0][0],2,2,0,7294 &L Stokes[0][0],2,numdof2d,0,7289 DLFS[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx 7290 DLFS[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy 7291 7292 TripleMultiply( &LFS[0][0],2,numdof2d,1, 7293 &DLFS[0][0],2,2,0, 7294 &LFS[0][0],2,numdof2d,0, 7295 7295 &Ke_drag_gaussian[0][0],0); 7296 7296 … … 7412 7412 } 7413 7413 /*}}}*/ 7414 /*FUNCTION Penta::CreatePVectorCouplingMacAyeal Stokes{{{*/7415 ElementVector* Penta::CreatePVectorCouplingMacAyeal Stokes(void){7414 /*FUNCTION Penta::CreatePVectorCouplingMacAyealFS {{{*/ 7415 ElementVector* Penta::CreatePVectorCouplingMacAyealFS(void){ 7416 7416 7417 7417 /*compute all load vectors for this element*/ 7418 ElementVector* pe1=CreatePVectorCouplingMacAyeal StokesViscous();7419 ElementVector* pe2=CreatePVectorCouplingMacAyeal StokesFriction();7418 ElementVector* pe1=CreatePVectorCouplingMacAyealFSViscous(); 7419 ElementVector* pe2=CreatePVectorCouplingMacAyealFSFriction(); 7420 7420 ElementVector* pe =new ElementVector(pe1,pe2); 7421 7421 … … 7426 7426 } 7427 7427 /*}}}*/ 7428 /*FUNCTION Penta::CreatePVectorCouplingMacAyeal StokesViscous {{{*/7429 ElementVector* Penta::CreatePVectorCouplingMacAyeal StokesViscous(void){7428 /*FUNCTION Penta::CreatePVectorCouplingMacAyealFSViscous {{{*/ 7429 ElementVector* Penta::CreatePVectorCouplingMacAyealFSViscous(void){ 7430 7430 7431 7431 /*Constants*/ … … 7436 7436 int approximation; 7437 7437 IssmDouble viscosity,Jdet; 7438 IssmDouble stokesreconditioning;7438 IssmDouble FSreconditioning; 7439 7439 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ 7440 7440 IssmDouble dw[3]; … … 7446 7446 /*Initialize Element vector and return if necessary*/ 7447 7447 inputs->GetInputValue(&approximation,ApproximationEnum); 7448 if(approximation!=MacAyeal StokesApproximationEnum) return NULL;7449 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7448 if(approximation!=MacAyealFSApproximationEnum) return NULL; 7449 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7450 7450 7451 7451 /*Retrieve all inputs and parameters*/ 7452 7452 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7453 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7453 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7454 7454 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7455 7455 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 7456 7456 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input); 7457 Input* vz macayeal_input=inputs->GetInput(VzMacAyealEnum); _assert_(vzmacayeal_input);7457 Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum); _assert_(vzSSA_input); 7458 7458 7459 7459 /* Start looping on the number of gaussian points: */ … … 7467 7467 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 7468 7468 7469 vz macayeal_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);7469 vzSSA_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss); 7470 7470 7471 7471 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7472 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7472 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7473 7473 7474 7474 for(i=0;i<NUMVERTICES;i++){ … … 7476 7476 pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i]; 7477 7477 pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]); 7478 pe->values[i*NDOF4+3]+=Jdet*gauss->weight* stokesreconditioning*dw[2]*basis[i];7478 pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i]; 7479 7479 } 7480 7480 } … … 7488 7488 } 7489 7489 /*}}}*/ 7490 /*FUNCTION Penta::CreatePVectorCouplingMacAyeal StokesFriction{{{*/7491 ElementVector* Penta::CreatePVectorCouplingMacAyeal StokesFriction(void){7490 /*FUNCTION Penta::CreatePVectorCouplingMacAyealFSFriction{{{*/ 7491 ElementVector* Penta::CreatePVectorCouplingMacAyealFSFriction(void){ 7492 7492 7493 7493 /*Constants*/ … … 7498 7498 int approximation,analysis_type; 7499 7499 IssmDouble Jdet,Jdet2d; 7500 IssmDouble stokesreconditioning;7500 IssmDouble FSreconditioning; 7501 7501 IssmDouble bed_normal[3]; 7502 7502 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ … … 7513 7513 if(!IsOnBed() || IsFloating()) return NULL; 7514 7514 inputs->GetInputValue(&approximation,ApproximationEnum); 7515 if(approximation!=MacAyeal StokesApproximationEnum) return NULL;7516 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7515 if(approximation!=MacAyealFSApproximationEnum) return NULL; 7516 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7517 7517 7518 7518 /*Retrieve all inputs and parameters*/ 7519 7519 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7520 7520 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 7521 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7521 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7522 7522 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7523 7523 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 7524 7524 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input); 7525 Input* vz macayeal_input=inputs->GetInput(VzMacAyealEnum); _assert_(vzmacayeal_input);7525 Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum); _assert_(vzSSA_input); 7526 7526 7527 7527 for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j]; … … 7539 7539 GetNodalFunctionsP1(basis, gauss); 7540 7540 7541 vz macayeal_input->GetInputValue(&w, gauss);7542 vz macayeal_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);7541 vzSSA_input->GetInputValue(&w, gauss); 7542 vzSSA_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss); 7543 7543 7544 7544 BedNormal(&bed_normal[0],xyz_list_tria); 7545 7545 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7546 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7546 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7547 7547 friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum); 7548 7548 … … 7563 7563 } 7564 7564 /*}}}*/ 7565 /*FUNCTION Penta::CreatePVectorCoupling PattynStokes{{{*/7566 ElementVector* Penta::CreatePVectorCoupling PattynStokes(void){7565 /*FUNCTION Penta::CreatePVectorCouplingHOFS {{{*/ 7566 ElementVector* Penta::CreatePVectorCouplingHOFS(void){ 7567 7567 7568 7568 /*compute all load vectors for this element*/ 7569 ElementVector* pe1=CreatePVectorCoupling PattynStokesViscous();7570 ElementVector* pe2=CreatePVectorCoupling PattynStokesFriction();7569 ElementVector* pe1=CreatePVectorCouplingHOFSViscous(); 7570 ElementVector* pe2=CreatePVectorCouplingHOFSFriction(); 7571 7571 ElementVector* pe =new ElementVector(pe1,pe2); 7572 7572 … … 7577 7577 } 7578 7578 /*}}}*/ 7579 /*FUNCTION Penta::CreatePVectorCoupling PattynStokesViscous {{{*/7580 ElementVector* Penta::CreatePVectorCoupling PattynStokesViscous(void){7579 /*FUNCTION Penta::CreatePVectorCouplingHOFSViscous {{{*/ 7580 ElementVector* Penta::CreatePVectorCouplingHOFSViscous(void){ 7581 7581 7582 7582 /*Constants*/ … … 7587 7587 int approximation; 7588 7588 IssmDouble viscosity,Jdet; 7589 IssmDouble stokesreconditioning;7589 IssmDouble FSreconditioning; 7590 7590 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ 7591 7591 IssmDouble dw[3]; … … 7597 7597 /*Initialize Element vector and return if necessary*/ 7598 7598 inputs->GetInputValue(&approximation,ApproximationEnum); 7599 if(approximation!= PattynStokesApproximationEnum) return NULL;7600 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7599 if(approximation!=HOFSApproximationEnum) return NULL; 7600 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7601 7601 7602 7602 /*Retrieve all inputs and parameters*/ 7603 7603 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7604 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7604 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7605 7605 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7606 7606 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 7607 7607 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input); 7608 Input* vz pattyn_input=inputs->GetInput(VzPattynEnum); _assert_(vzpattyn_input);7608 Input* vzHO_input=inputs->GetInput(VzHOEnum); _assert_(vzHO_input); 7609 7609 7610 7610 /* Start looping on the number of gaussian points: */ … … 7618 7618 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0], gauss); 7619 7619 7620 vz pattyn_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);7620 vzHO_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss); 7621 7621 7622 7622 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7623 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7623 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7624 7624 7625 7625 for(i=0;i<NUMVERTICES;i++){ … … 7627 7627 pe->values[i*NDOF4+1]+=-Jdet*gauss->weight*viscosity*dw[1]*dbasis[2][i]; 7628 7628 pe->values[i*NDOF4+2]+=-Jdet*gauss->weight*viscosity*(dw[0]*dbasis[0][i]+dw[1]*dbasis[1][i]+2*dw[2]*dbasis[2][i]); 7629 pe->values[i*NDOF4+3]+=Jdet*gauss->weight* stokesreconditioning*dw[2]*basis[i];7629 pe->values[i*NDOF4+3]+=Jdet*gauss->weight*FSreconditioning*dw[2]*basis[i]; 7630 7630 } 7631 7631 } … … 7639 7639 } 7640 7640 /*}}}*/ 7641 /*FUNCTION Penta::CreatePVectorCoupling PattynStokesFriction{{{*/7642 ElementVector* Penta::CreatePVectorCoupling PattynStokesFriction(void){7641 /*FUNCTION Penta::CreatePVectorCouplingHOFSFriction{{{*/ 7642 ElementVector* Penta::CreatePVectorCouplingHOFSFriction(void){ 7643 7643 7644 7644 /*Constants*/ … … 7649 7649 int approximation,analysis_type; 7650 7650 IssmDouble Jdet,Jdet2d; 7651 IssmDouble stokesreconditioning;7651 IssmDouble FSreconditioning; 7652 7652 IssmDouble bed_normal[3]; 7653 7653 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ … … 7664 7664 if(!IsOnBed() || IsFloating()) return NULL; 7665 7665 inputs->GetInputValue(&approximation,ApproximationEnum); 7666 if(approximation!= PattynStokesApproximationEnum) return NULL;7667 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);7666 if(approximation!=HOFSApproximationEnum) return NULL; 7667 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 7668 7668 7669 7669 /*Retrieve all inputs and parameters*/ 7670 7670 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 7671 7671 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 7672 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);7672 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 7673 7673 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 7674 7674 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 7675 7675 Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input); 7676 Input* vz pattyn_input=inputs->GetInput(VzPattynEnum); _assert_(vzpattyn_input);7676 Input* vzHO_input=inputs->GetInput(VzHOEnum); _assert_(vzHO_input); 7677 7677 7678 7678 for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j]; … … 7690 7690 GetNodalFunctionsP1(basis, gauss); 7691 7691 7692 vz pattyn_input->GetInputValue(&w, gauss);7693 vz pattyn_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);7692 vzHO_input->GetInputValue(&w, gauss); 7693 vzHO_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss); 7694 7694 7695 7695 BedNormal(&bed_normal[0],xyz_list_tria); 7696 7696 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 7697 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);7697 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 7698 7698 friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum); 7699 7699 … … 7723 7723 case MacAyealApproximationEnum: 7724 7724 return CreatePVectorDiagnosticMacAyeal(); 7725 case PattynApproximationEnum:7726 return CreatePVectorDiagnostic Pattyn();7725 case HOApproximationEnum: 7726 return CreatePVectorDiagnosticHO(); 7727 7727 case L1L2ApproximationEnum: 7728 7728 return CreatePVectorDiagnosticL1L2(); 7729 case HutterApproximationEnum:7729 case SIAApproximationEnum: 7730 7730 return NULL; 7731 7731 case NoneApproximationEnum: 7732 7732 return NULL; 7733 case StokesApproximationEnum:7734 return CreatePVectorDiagnostic Stokes();7735 case MacAyeal PattynApproximationEnum:7736 return CreatePVectorDiagnosticMacAyeal Pattyn();7737 case MacAyeal StokesApproximationEnum:7738 return CreatePVectorDiagnosticMacAyeal Stokes();7739 case PattynStokesApproximationEnum:7740 return CreatePVectorDiagnostic PattynStokes();7733 case FSApproximationEnum: 7734 return CreatePVectorDiagnosticFS(); 7735 case MacAyealHOApproximationEnum: 7736 return CreatePVectorDiagnosticMacAyealHO(); 7737 case MacAyealFSApproximationEnum: 7738 return CreatePVectorDiagnosticMacAyealFS(); 7739 case HOFSApproximationEnum: 7740 return CreatePVectorDiagnosticHOFS(); 7741 7741 default: 7742 7742 _error_("Approximation " << EnumToStringx(approximation) << " not supported yet"); … … 7744 7744 } 7745 7745 /*}}}*/ 7746 /*FUNCTION Penta::CreatePVectorDiagnosticMacAyeal Pattyn{{{*/7747 ElementVector* Penta::CreatePVectorDiagnosticMacAyeal Pattyn(void){7746 /*FUNCTION Penta::CreatePVectorDiagnosticMacAyealHO{{{*/ 7747 ElementVector* Penta::CreatePVectorDiagnosticMacAyealHO(void){ 7748 7748 7749 7749 /*compute all load vectors for this element*/ 7750 7750 ElementVector* pe1=CreatePVectorDiagnosticMacAyeal(); 7751 ElementVector* pe2=CreatePVectorDiagnostic Pattyn();7751 ElementVector* pe2=CreatePVectorDiagnosticHO(); 7752 7752 ElementVector* pe =new ElementVector(pe1,pe2); 7753 7753 … … 7758 7758 } 7759 7759 /*}}}*/ 7760 /*FUNCTION Penta::CreatePVectorDiagnosticMacAyeal Stokes{{{*/7761 ElementVector* Penta::CreatePVectorDiagnosticMacAyeal Stokes(void){7760 /*FUNCTION Penta::CreatePVectorDiagnosticMacAyealFS{{{*/ 7761 ElementVector* Penta::CreatePVectorDiagnosticMacAyealFS(void){ 7762 7762 7763 7763 /*compute all load vectors for this element*/ 7764 7764 ElementVector* pe1=CreatePVectorDiagnosticMacAyeal(); 7765 ElementVector* pe2=CreatePVectorDiagnostic Stokes();7766 ElementVector* pe3=CreatePVectorCouplingMacAyeal Stokes();7765 ElementVector* pe2=CreatePVectorDiagnosticFS(); 7766 ElementVector* pe3=CreatePVectorCouplingMacAyealFS(); 7767 7767 ElementVector* pe =new ElementVector(pe1,pe2,pe3); 7768 7768 … … 7774 7774 } 7775 7775 /*}}}*/ 7776 /*FUNCTION Penta::CreatePVectorDiagnostic PattynStokes{{{*/7777 ElementVector* Penta::CreatePVectorDiagnostic PattynStokes(void){7776 /*FUNCTION Penta::CreatePVectorDiagnosticHOFS{{{*/ 7777 ElementVector* Penta::CreatePVectorDiagnosticHOFS(void){ 7778 7778 7779 7779 /*compute all load vectors for this element*/ 7780 ElementVector* pe1=CreatePVectorDiagnostic Pattyn();7781 ElementVector* pe2=CreatePVectorDiagnostic Stokes();7782 ElementVector* pe3=CreatePVectorCoupling PattynStokes();7780 ElementVector* pe1=CreatePVectorDiagnosticHO(); 7781 ElementVector* pe2=CreatePVectorDiagnosticFS(); 7782 ElementVector* pe3=CreatePVectorCouplingHOFS(); 7783 7783 ElementVector* pe =new ElementVector(pe1,pe2,pe3); 7784 7784 … … 7790 7790 } 7791 7791 /*}}}*/ 7792 /*FUNCTION Penta::CreatePVectorDiagnostic Hutter{{{*/7793 ElementVector* Penta::CreatePVectorDiagnostic Hutter(void){7792 /*FUNCTION Penta::CreatePVectorDiagnosticSIA{{{*/ 7793 ElementVector* Penta::CreatePVectorDiagnosticSIA(void){ 7794 7794 7795 7795 /*Intermediaries*/ … … 7903 7903 } 7904 7904 /*}}}*/ 7905 /*FUNCTION Penta::CreatePVectorDiagnostic Pattyn{{{*/7906 ElementVector* Penta::CreatePVectorDiagnostic Pattyn(void){7905 /*FUNCTION Penta::CreatePVectorDiagnosticHO{{{*/ 7906 ElementVector* Penta::CreatePVectorDiagnosticHO(void){ 7907 7907 7908 7908 /*compute all load vectors for this element*/ 7909 ElementVector* pe1=CreatePVectorDiagnostic PattynDrivingStress();7910 ElementVector* pe2=CreatePVectorDiagnostic PattynFront();7909 ElementVector* pe1=CreatePVectorDiagnosticHODrivingStress(); 7910 ElementVector* pe2=CreatePVectorDiagnosticHOFront(); 7911 7911 ElementVector* pe =new ElementVector(pe1,pe2); 7912 7912 … … 7917 7917 } 7918 7918 /*}}}*/ 7919 /*FUNCTION Penta::CreatePVectorDiagnostic PattynDrivingStress{{{*/7920 ElementVector* Penta::CreatePVectorDiagnostic PattynDrivingStress(void){7919 /*FUNCTION Penta::CreatePVectorDiagnosticHODrivingStress{{{*/ 7920 ElementVector* Penta::CreatePVectorDiagnosticHODrivingStress(void){ 7921 7921 7922 7922 /*Constants*/ … … 7933 7933 7934 7934 /*Initialize Element vector*/ 7935 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, PattynApproximationEnum);7935 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,HOApproximationEnum); 7936 7936 7937 7937 /*Retrieve all inputs and parameters*/ … … 7965 7965 } 7966 7966 /*}}}*/ 7967 /*FUNCTION Penta::CreatePVectorDiagnostic PattynFront{{{*/7968 ElementVector* Penta::CreatePVectorDiagnostic PattynFront(void){7967 /*FUNCTION Penta::CreatePVectorDiagnosticHOFront{{{*/ 7968 ElementVector* Penta::CreatePVectorDiagnosticHOFront(void){ 7969 7969 7970 7970 /*Intermediaries */ … … 8000 8000 8001 8001 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 8002 ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters, PattynApproximationEnum);8002 ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,HOApproximationEnum); 8003 8003 Input* surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input); 8004 8004 rho_water=matpar->GetRhoWater(); … … 8043 8043 } 8044 8044 /*}}}*/ 8045 /*FUNCTION Penta::CreatePVectorDiagnostic Stokes{{{*/8046 ElementVector* Penta::CreatePVectorDiagnostic Stokes(void){8047 8048 int fe_ stokes;8045 /*FUNCTION Penta::CreatePVectorDiagnosticFS {{{*/ 8046 ElementVector* Penta::CreatePVectorDiagnosticFS(void){ 8047 8048 int fe_FS; 8049 8049 ElementVector* pe1; 8050 8050 ElementVector* pe2; 8051 8051 ElementVector* pe3; 8052 8052 ElementVector* pe; 8053 parameters->FindParam(&fe_ stokes,FlowequationFeStokesEnum);8054 8055 switch(fe_ stokes){8053 parameters->FindParam(&fe_FS,FlowequationFeFSEnum); 8054 8055 switch(fe_FS){ 8056 8056 case 0: 8057 8057 /*compute all stiffness matrices for this element*/ 8058 pe1=CreatePVectorDiagnostic StokesViscous();8059 pe2=CreatePVectorDiagnostic StokesShelf();8060 pe3=CreatePVectorDiagnostic StokesFront();8058 pe1=CreatePVectorDiagnosticFSViscous(); 8059 pe2=CreatePVectorDiagnosticFSShelf(); 8060 pe3=CreatePVectorDiagnosticFSFront(); 8061 8061 pe =new ElementVector(pe1,pe2,pe3); 8062 8062 break; 8063 8063 case 1: 8064 8064 /*compute all stiffness matrices for this element*/ 8065 pe1=CreatePVectorDiagnostic StokesGLSViscous();8066 pe2=CreatePVectorDiagnostic StokesShelf();8067 pe3=CreatePVectorDiagnostic StokesFront();8065 pe1=CreatePVectorDiagnosticFSGLSViscous(); 8066 pe2=CreatePVectorDiagnosticFSShelf(); 8067 pe3=CreatePVectorDiagnosticFSFront(); 8068 8068 pe =new ElementVector(pe1,pe2,pe3); 8069 8069 break; 8070 8070 default: 8071 _error_("Finite element" << fe_ stokes<< " not supported yet");8071 _error_("Finite element" << fe_FS << " not supported yet"); 8072 8072 } 8073 8073 … … 8080 8080 } 8081 8081 /*}}}*/ 8082 /*FUNCTION Penta::CreatePVectorDiagnostic StokesViscous {{{*/8083 ElementVector* Penta::CreatePVectorDiagnostic StokesViscous(void){8082 /*FUNCTION Penta::CreatePVectorDiagnosticFSViscous {{{*/ 8083 ElementVector* Penta::CreatePVectorDiagnosticFSViscous(void){ 8084 8084 8085 8085 /*Constants*/ … … 8090 8090 int approximation; 8091 8091 IssmDouble Jdet,viscosity; 8092 IssmDouble gravity,rho_ice, stokesreconditioning;8092 IssmDouble gravity,rho_ice,FSreconditioning; 8093 8093 IssmDouble forcex,forcey,forcez; 8094 8094 IssmDouble xyz_list[NUMVERTICES][3]; … … 8106 8106 /*Initialize Element vector and return if necessary*/ 8107 8107 inputs->GetInputValue(&approximation,ApproximationEnum); 8108 if(approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;8109 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);8108 if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 8109 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 8110 8110 8111 8111 /*Retrieve all inputs and parameters*/ 8112 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);8112 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 8113 8113 rho_ice=matpar->GetRhoIce(); 8114 8114 gravity=matpar->GetG(); … … 8128 8128 8129 8129 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss); 8130 GetB Stokes(&B[0][0],&xyz_list[0][0],gauss);8131 GetBprime Stokes(&B_prime[0][0],&xyz_list[0][0], gauss);8130 GetBFS(&B[0][0],&xyz_list[0][0],gauss); 8131 GetBprimeFS(&B_prime[0][0],&xyz_list[0][0], gauss); 8132 8132 GetNodalFunctionsMINI(&l1l7[0], gauss); 8133 8133 8134 8134 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 8135 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);8135 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 8136 8136 8137 8137 loadingforcex_input->GetInputValue(&forcex, gauss); … … 8151 8151 D_scalar=gauss->weight*Jdet; 8152 8152 for (i=0;i<6;i++) D[i][i]=D_scalar*2*viscosity; 8153 for (i=6;i<8;i++) D[i][i]=-D_scalar* stokesreconditioning;8153 for (i=6;i<8;i++) D[i][i]=-D_scalar*FSreconditioning; 8154 8154 8155 8155 TripleMultiply(&B[0][0],8,numdofbubble,1, … … 8160 8160 8161 8161 /*Condensation*/ 8162 ReduceVector Stokes(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);8162 ReduceVectorFS(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]); 8163 8163 8164 8164 /*Transform coordinate system*/ … … 8170 8170 } 8171 8171 /*}}}*/ 8172 /*FUNCTION Penta::CreatePVectorDiagnostic StokesFront{{{*/8173 ElementVector* Penta::CreatePVectorDiagnostic StokesFront(void){8172 /*FUNCTION Penta::CreatePVectorDiagnosticFSFront{{{*/ 8173 ElementVector* Penta::CreatePVectorDiagnosticFSFront(void){ 8174 8174 8175 8175 /*Intermediaries */ … … 8205 8205 8206 8206 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 8207 ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters, StokesApproximationEnum);8207 ElementVector* pe=new ElementVector(nodes,numnodes,this->parameters,FSApproximationEnum); 8208 8208 rho_water=matpar->GetRhoWater(); 8209 8209 rho_ice =matpar->GetRhoIce(); … … 8247 8247 } 8248 8248 /*}}}*/ 8249 /*FUNCTION Penta::CreatePVectorDiagnostic StokesGLSViscous {{{*/8250 ElementVector* Penta::CreatePVectorDiagnostic StokesGLSViscous(void){8249 /*FUNCTION Penta::CreatePVectorDiagnosticFSGLSViscous {{{*/ 8250 ElementVector* Penta::CreatePVectorDiagnosticFSGLSViscous(void){ 8251 8251 8252 8252 /*Constants*/ … … 8257 8257 int approximation; 8258 8258 IssmDouble Jdet,gravity,rho_ice,B,D_scalar_stab,viscosity; 8259 IssmDouble forcex,forcey,forcez,diameter, stokesreconditioning;8259 IssmDouble forcex,forcey,forcez,diameter,FSreconditioning; 8260 8260 IssmDouble xyz_list[NUMVERTICES][3]; 8261 8261 IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ … … 8276 8276 /*Initialize Element vector and return if necessary*/ 8277 8277 inputs->GetInputValue(&approximation,ApproximationEnum); 8278 if(approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;8279 parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);8280 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);8278 if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 8279 parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 8280 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 8281 8281 8282 8282 /*Retrieve all inputs and parameters*/ … … 8318 8318 GetNodalFunctionsP1(&l1l6[0], gauss); 8319 8319 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input); 8320 material->GetViscosity3d Stokes(&viscosity,&epsilon[0]);8320 material->GetViscosity3dFS(&viscosity,&epsilon[0]); 8321 8321 8322 8322 loadingforcex_input->GetInputValue(&forcex, gauss); … … 8372 8372 } 8373 8373 /*}}}*/ 8374 /*FUNCTION Penta::CreatePVectorDiagnostic StokesShelf{{{*/8375 ElementVector* Penta::CreatePVectorDiagnostic StokesShelf(void){8374 /*FUNCTION Penta::CreatePVectorDiagnosticFSShelf{{{*/ 8375 ElementVector* Penta::CreatePVectorDiagnosticFSShelf(void){ 8376 8376 8377 8377 /*Intermediaries*/ … … 8392 8392 inputs->GetInputValue(&approximation,ApproximationEnum); 8393 8393 this->parameters->FindParam(&shelf_dampening,DiagnosticShelfDampeningEnum); 8394 if(approximation!= StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;8395 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);8394 if(approximation!=FSApproximationEnum && approximation!=MacAyealFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 8395 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 8396 8396 8397 8397 /*Retrieve all inputs and parameters*/ … … 8477 8477 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 8478 8478 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 8479 Input* vz stokes_input=NULL;8480 if(approximation== PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){8481 vz stokes_input=inputs->GetInput(VzStokesEnum); _assert_(vzstokes_input);8479 Input* vzFS_input=NULL; 8480 if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){ 8481 vzFS_input=inputs->GetInput(VzFSEnum); _assert_(vzFS_input); 8482 8482 } 8483 8483 … … 8493 8493 vx_input->GetInputDerivativeValue(&du[0],&xyz_list[0][0],gauss); 8494 8494 vy_input->GetInputDerivativeValue(&dv[0],&xyz_list[0][0],gauss); 8495 if(approximation== PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){8496 vz stokes_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss);8495 if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){ 8496 vzFS_input->GetInputDerivativeValue(&dw[0],&xyz_list[0][0],gauss); 8497 8497 dwdz=dw[2]; 8498 8498 } … … 8539 8539 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 8540 8540 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 8541 Input* vz stokes_input=NULL;8542 if(approximation== PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){8543 vz stokes_input=inputs->GetInput(VzStokesEnum); _assert_(vzstokes_input);8541 Input* vzFS_input=NULL; 8542 if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){ 8543 vzFS_input=inputs->GetInput(VzFSEnum); _assert_(vzFS_input); 8544 8544 } 8545 8545 … … 8554 8554 vx_input->GetInputValue(&vx, gauss); 8555 8555 vy_input->GetInputValue(&vy, gauss); 8556 if(approximation== PattynStokesApproximationEnum || approximation==MacAyealStokesApproximationEnum){8557 vz stokes_input->GetInputValue(&vz, gauss);8556 if(approximation==HOFSApproximationEnum || approximation==MacAyealFSApproximationEnum){ 8557 vzFS_input->GetInputValue(&vz, gauss); 8558 8558 } 8559 8559 else vz=0; … … 8581 8581 switch(approximation){ 8582 8582 case MacAyealApproximationEnum: 8583 return CreateJacobianDiagnostic Macayeal2d();8584 case PattynApproximationEnum:8585 return CreateJacobianDiagnostic Pattyn();8586 case StokesApproximationEnum:8587 return CreateJacobianDiagnostic Stokes();8583 return CreateJacobianDiagnosticSSA2d(); 8584 case HOApproximationEnum: 8585 return CreateJacobianDiagnosticHO(); 8586 case FSApproximationEnum: 8587 return CreateJacobianDiagnosticFS(); 8588 8588 case NoneApproximationEnum: 8589 8589 return NULL; … … 8593 8593 } 8594 8594 /*}}}*/ 8595 /*FUNCTION Penta::CreateJacobianDiagnostic Macayeal2d{{{*/8596 ElementMatrix* Penta::CreateJacobianDiagnostic Macayeal2d(void){8595 /*FUNCTION Penta::CreateJacobianDiagnosticSSA2d{{{*/ 8596 ElementMatrix* Penta::CreateJacobianDiagnosticSSA2d(void){ 8597 8597 8598 8598 /*Figure out if this penta is collapsed. If so, then bailout, except if it is at the … … 8616 8616 /*Call Tria function*/ 8617 8617 Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria. 8618 ElementMatrix* Ke=tria->CreateJacobianDiagnostic Macayeal();8618 ElementMatrix* Ke=tria->CreateJacobianDiagnosticSSA(); 8619 8619 delete tria->material; delete tria; 8620 8620 … … 8627 8627 } 8628 8628 /*}}}*/ 8629 /*FUNCTION Penta::CreateJacobianDiagnostic Pattyn{{{*/8630 ElementMatrix* Penta::CreateJacobianDiagnostic Pattyn(void){8629 /*FUNCTION Penta::CreateJacobianDiagnosticHO{{{*/ 8630 ElementMatrix* Penta::CreateJacobianDiagnosticHO(void){ 8631 8631 8632 8632 /*Constants*/ … … 8645 8645 GaussPenta *gauss=NULL; 8646 8646 8647 /*Initialize Jacobian with regular Pattyn(first part of the Gateau derivative)*/8648 ElementMatrix* Ke=CreateKMatrixDiagnostic Pattyn();8647 /*Initialize Jacobian with regular HO (first part of the Gateau derivative)*/ 8648 ElementMatrix* Ke=CreateKMatrixDiagnosticHO(); 8649 8649 8650 8650 /*Retrieve all inputs and parameters*/ … … 8662 8662 GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss); 8663 8663 8664 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);8664 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 8665 8665 material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]); 8666 8666 eps1[0]=2*epsilon[0]+epsilon[1]; eps2[0]=epsilon[2]; … … 8691 8691 } 8692 8692 /*}}}*/ 8693 /*FUNCTION Penta::CreateJacobianDiagnostic Stokes{{{*/8694 ElementMatrix* Penta::CreateJacobianDiagnostic Stokes(void){8693 /*FUNCTION Penta::CreateJacobianDiagnosticFS{{{*/ 8694 ElementMatrix* Penta::CreateJacobianDiagnosticFS(void){ 8695 8695 8696 8696 /*Constants*/ … … 8710 8710 GaussPenta *gauss=NULL; 8711 8711 8712 /*Initialize Jacobian with regular Stokes(first part of the Gateau derivative)*/8713 ElementMatrix* Ke=CreateKMatrixDiagnostic Stokes();8712 /*Initialize Jacobian with regular FS (first part of the Gateau derivative)*/ 8713 ElementMatrix* Ke=CreateKMatrixDiagnosticFS(); 8714 8714 8715 8715 /*Retrieve all inputs and parameters*/ … … 8728 8728 GetNodalFunctionsP1Derivatives(&dphi[0][0],&xyz_list[0][0],gauss); 8729 8729 8730 this->GetStrainRate3d Pattyn(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);8730 this->GetStrainRate3dHO(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 8731 8731 material->GetViscosityDerivativeEpsSquare(&mu_prime,&epsilon[0]); 8732 8732 eps1[0]=epsilon[0]; eps2[0]=epsilon[2]; eps3[0]=epsilon[3]; … … 8784 8784 8785 8785 /*If the element is a coupling, do nothing: every node is also on an other elements 8786 * (as coupling is between MacAyeal and Pattyn) so the other element will take care of it*/8786 * (as coupling is between MacAyeal and HO) so the other element will take care of it*/ 8787 8787 GetDofList(&doflist,approximation,GsetEnum); 8788 8788 … … 8808 8808 } 8809 8809 /*}}}*/ 8810 /*FUNCTION Penta::GetSolutionFromInputsDiagnostic Hutter{{{*/8811 void Penta::GetSolutionFromInputsDiagnostic Hutter(Vector<IssmDouble>* solution){8810 /*FUNCTION Penta::GetSolutionFromInputsDiagnosticSIA{{{*/ 8811 void Penta::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){ 8812 8812 8813 8813 const int numdof=NDOF2*NUMVERTICES; … … 8877 8877 } 8878 8878 /*}}}*/ 8879 /*FUNCTION Penta::GetSolutionFromInputsDiagnostic Stokes{{{*/8880 void Penta::GetSolutionFromInputsDiagnostic Stokes(Vector<IssmDouble>* solution){8879 /*FUNCTION Penta::GetSolutionFromInputsDiagnosticFS{{{*/ 8880 void Penta::GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solution){ 8881 8881 8882 8882 const int numdof=NDOF4*NUMVERTICES; … … 8885 8885 int* doflist=NULL; 8886 8886 IssmDouble vx,vy,vz,p; 8887 IssmDouble stokesreconditioning;8887 IssmDouble FSreconditioning; 8888 8888 IssmDouble values[numdof]; 8889 8889 GaussPenta *gauss; 8890 8890 8891 8891 /*Get dof list: */ 8892 GetDofList(&doflist, StokesApproximationEnum,GsetEnum);8892 GetDofList(&doflist,FSApproximationEnum,GsetEnum); 8893 8893 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 8894 8894 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); … … 8897 8897 8898 8898 /*Recondition pressure: */ 8899 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);8899 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 8900 8900 8901 8901 /*Ok, we have vx vy vz and P in values, fill in vx vy vz P arrays: */ … … 8911 8911 values[i*NDOF4+1]=vy; 8912 8912 values[i*NDOF4+2]=vz; 8913 values[i*NDOF4+3]=p/ stokesreconditioning;8913 values[i*NDOF4+3]=p/FSreconditioning; 8914 8914 } 8915 8915 … … 8961 8961 8962 8962 /* Get eps_b*/ 8963 vx_input->GetVxStrainRate3d Pattyn(epsilonvx,xyz_list,gauss);8964 vy_input->GetVyStrainRate3d Pattyn(epsilonvy,xyz_list,gauss);8963 vx_input->GetVxStrainRate3dHO(epsilonvx,xyz_list,gauss); 8964 vy_input->GetVyStrainRate3dHO(epsilonvy,xyz_list,gauss); 8965 8965 for(i=0;i<5;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i]; 8966 8966 eps_b = sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[0]*epsilon[1] + epsilon[2]*epsilon[2]); … … 9015 9015 return; 9016 9016 } 9017 else if (approximation== PattynApproximationEnum){9018 InputUpdateFromSolutionDiagnostic Pattyn(solution);9019 } 9020 else if (approximation== PattynStokesApproximationEnum){9021 InputUpdateFromSolutionDiagnostic PattynStokes(solution);9022 } 9023 else if (approximation==MacAyeal StokesApproximationEnum){9024 InputUpdateFromSolutionDiagnosticMacAyeal Stokes(solution);9025 } 9026 else if (approximation== StokesApproximationEnum || approximation==NoneApproximationEnum){9027 InputUpdateFromSolutionDiagnostic Stokes(solution);9028 } 9029 else if (approximation==MacAyeal PattynApproximationEnum){9030 InputUpdateFromSolutionDiagnosticMacAyeal Pattyn(solution);9017 else if (approximation==HOApproximationEnum){ 9018 InputUpdateFromSolutionDiagnosticHO(solution); 9019 } 9020 else if (approximation==HOFSApproximationEnum){ 9021 InputUpdateFromSolutionDiagnosticHOFS(solution); 9022 } 9023 else if (approximation==MacAyealFSApproximationEnum){ 9024 InputUpdateFromSolutionDiagnosticMacAyealFS(solution); 9025 } 9026 else if (approximation==FSApproximationEnum || approximation==NoneApproximationEnum){ 9027 InputUpdateFromSolutionDiagnosticFS(solution); 9028 } 9029 else if (approximation==MacAyealHOApproximationEnum){ 9030 InputUpdateFromSolutionDiagnosticMacAyealHO(solution); 9031 9031 } 9032 9032 } … … 9113 9113 } 9114 9114 /*}}}*/ 9115 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyeal Pattyn{{{*/9116 void Penta::InputUpdateFromSolutionDiagnosticMacAyeal Pattyn(IssmDouble* solution){9115 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealHO {{{*/ 9116 void Penta::InputUpdateFromSolutionDiagnosticMacAyealHO(IssmDouble* solution){ 9117 9117 9118 9118 const int numdof=NDOF2*NUMVERTICES; … … 9121 9121 int i; 9122 9122 IssmDouble rho_ice,g; 9123 IssmDouble macayeal_values[numdof];9124 IssmDouble pattyn_values[numdof];9123 IssmDouble SSA_values[numdof]; 9124 IssmDouble HO_values[numdof]; 9125 9125 IssmDouble vx[NUMVERTICES]; 9126 9126 IssmDouble vy[NUMVERTICES]; … … 9134 9134 Penta *penta = NULL; 9135 9135 9136 /*OK, we have to add results of this element for pattyn9137 * and results from the penta at base for macayeal. Now recover results*/9136 /*OK, we have to add results of this element for HO 9137 * and results from the penta at base for SSA. Now recover results*/ 9138 9138 penta=GetBasalElement(); 9139 9139 9140 /*Get dof listof this element ( pattyn dofs) and of the penta at base (macayealdofs): */9141 GetDofList(&doflistp, PattynApproximationEnum,GsetEnum);9140 /*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */ 9141 GetDofList(&doflistp,HOApproximationEnum,GsetEnum); 9142 9142 penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum); 9143 9143 … … 9147 9147 /*Use the dof list to index into the solution vector: */ 9148 9148 for(i=0;i<numdof2d;i++){ 9149 pattyn_values[i]=solution[doflistp[i]];9150 macayeal_values[i]=solution[doflistm[i]];9149 HO_values[i]=solution[doflistp[i]]; 9150 SSA_values[i]=solution[doflistm[i]]; 9151 9151 } 9152 9152 for(i=numdof2d;i<numdof;i++){ 9153 pattyn_values[i]=solution[doflistp[i]];9154 macayeal_values[i]=macayeal_values[i-numdof2d];9153 HO_values[i]=solution[doflistp[i]]; 9154 SSA_values[i]=SSA_values[i-numdof2d]; 9155 9155 } 9156 9156 9157 9157 /*Transform solution in Cartesian Space*/ 9158 TransformSolutionCoord(& macayeal_values[0],penta->nodes,NUMVERTICES,XYEnum);9159 TransformSolutionCoord(& pattyn_values[0], this->nodes,NUMVERTICES,XYEnum);9158 TransformSolutionCoord(&SSA_values[0],penta->nodes,NUMVERTICES,XYEnum); 9159 TransformSolutionCoord(&HO_values[0], this->nodes,NUMVERTICES,XYEnum); 9160 9160 9161 9161 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ 9162 9162 for(i=0;i<NUMVERTICES;i++){ 9163 vx[i]= macayeal_values[i*NDOF2+0]+pattyn_values[i*NDOF2+0];9164 vy[i]= macayeal_values[i*NDOF2+1]+pattyn_values[i*NDOF2+1];9163 vx[i]=SSA_values[i*NDOF2+0]+HO_values[i*NDOF2+0]; 9164 vy[i]=SSA_values[i*NDOF2+1]+HO_values[i*NDOF2+1]; 9165 9165 9166 9166 /*Check solution*/ … … 9197 9197 } 9198 9198 /*}}}*/ 9199 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyeal Stokes{{{*/9200 void Penta::InputUpdateFromSolutionDiagnosticMacAyeal Stokes(IssmDouble* solution){9199 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticMacAyealFS {{{*/ 9200 void Penta::InputUpdateFromSolutionDiagnosticMacAyealFS(IssmDouble* solution){ 9201 9201 9202 9202 const int numdofm=NDOF2*NUMVERTICES; … … 9205 9205 9206 9206 int i; 9207 IssmDouble stokesreconditioning;9208 IssmDouble macayeal_values[numdofm];9209 IssmDouble stokes_values[numdofs];9207 IssmDouble FSreconditioning; 9208 IssmDouble SSA_values[numdofm]; 9209 IssmDouble FS_values[numdofs]; 9210 9210 IssmDouble vx[NUMVERTICES]; 9211 9211 IssmDouble vy[NUMVERTICES]; 9212 9212 IssmDouble vz[NUMVERTICES]; 9213 IssmDouble vz macayeal[NUMVERTICES];9214 IssmDouble vz stokes[NUMVERTICES];9213 IssmDouble vzSSA[NUMVERTICES]; 9214 IssmDouble vzFS[NUMVERTICES]; 9215 9215 IssmDouble vel[NUMVERTICES]; 9216 9216 IssmDouble pressure[NUMVERTICES]; … … 9220 9220 Penta *penta = NULL; 9221 9221 9222 /*OK, we have to add results of this element for macayeal9223 * and results from the penta at base for macayeal. Now recover results*/9222 /*OK, we have to add results of this element for SSA 9223 * and results from the penta at base for SSA. Now recover results*/ 9224 9224 penta=GetBasalElement(); 9225 9225 9226 /*Get dof listof this element ( macayeal dofs) and of the penta at base (macayealdofs): */9226 /*Get dof listof this element (SSA dofs) and of the penta at base (SSA dofs): */ 9227 9227 penta->GetDofList(&doflistm,MacAyealApproximationEnum,GsetEnum); 9228 GetDofList(&doflists, StokesApproximationEnum,GsetEnum);9229 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);9228 GetDofList(&doflists,FSApproximationEnum,GsetEnum); 9229 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 9230 9230 9231 9231 /*Get node data: */ … … 9234 9234 /*Use the dof list to index into the solution vector: */ 9235 9235 for(i=0;i<numdof2d;i++){ 9236 macayeal_values[i]=solution[doflistm[i]];9237 macayeal_values[i+numdof2d]=solution[doflistm[i]];9236 SSA_values[i]=solution[doflistm[i]]; 9237 SSA_values[i+numdof2d]=solution[doflistm[i]]; 9238 9238 } 9239 9239 for(i=0;i<numdofs;i++){ 9240 stokes_values[i]=solution[doflists[i]];9240 FS_values[i]=solution[doflists[i]]; 9241 9241 } 9242 9242 9243 9243 /*Transform solution in Cartesian Space*/ 9244 TransformSolutionCoord(& macayeal_values[0],this->nodes,NUMVERTICES,XYEnum);9245 TransformSolutionCoord(& stokes_values[0],this->nodes,NUMVERTICES,XYZPEnum);9244 TransformSolutionCoord(&SSA_values[0],this->nodes,NUMVERTICES,XYEnum); 9245 TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum); 9246 9246 9247 9247 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ 9248 9248 for(i=0;i<NUMVERTICES;i++){ 9249 vx[i]= stokes_values[i*NDOF4+0]+macayeal_values[i*NDOF2+0];9250 vy[i]= stokes_values[i*NDOF4+1]+macayeal_values[i*NDOF2+1];9251 vz stokes[i]=stokes_values[i*NDOF4+2];9252 pressure[i]= stokes_values[i*NDOF4+3]*stokesreconditioning;9249 vx[i]=FS_values[i*NDOF4+0]+SSA_values[i*NDOF2+0]; 9250 vy[i]=FS_values[i*NDOF4+1]+SSA_values[i*NDOF2+1]; 9251 vzFS[i]=FS_values[i*NDOF4+2]; 9252 pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning; 9253 9253 9254 9254 /*Check solution*/ 9255 9255 if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector"); 9256 9256 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 9257 if(xIsNan<IssmDouble>(vz stokes[i])) _error_("NaN found in solution vector");9257 if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector"); 9258 9258 if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector"); 9259 9259 } 9260 9260 9261 9261 /*Get Vz*/ 9262 Input* vz macayeal_input=inputs->GetInput(VzMacAyealEnum);9263 if (vz macayeal_input){9264 if (vz macayeal_input->ObjectEnum()!=PentaInputEnum){9265 _error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vz macayeal_input->ObjectEnum()));9266 } 9267 GetInputListOnVertices(&vz macayeal[0],VzMacAyealEnum);9262 Input* vzSSA_input=inputs->GetInput(VzMacAyealEnum); 9263 if (vzSSA_input){ 9264 if (vzSSA_input->ObjectEnum()!=PentaInputEnum){ 9265 _error_("Cannot compute Vel as VzMacAyeal is of type " << EnumToStringx(vzSSA_input->ObjectEnum())); 9266 } 9267 GetInputListOnVertices(&vzSSA[0],VzMacAyealEnum); 9268 9268 } 9269 9269 else{ … … 9273 9273 /*Now Compute vel*/ 9274 9274 for(i=0;i<NUMVERTICES;i++) { 9275 vz[i]=vz macayeal[i]+vzstokes[i];9275 vz[i]=vzSSA[i]+vzFS[i]; 9276 9276 vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5); 9277 9277 } … … 9288 9288 this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum)); 9289 9289 this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum)); 9290 this->inputs->AddInput(new PentaInput(Vz StokesEnum,vzstokes,P1Enum));9290 this->inputs->AddInput(new PentaInput(VzFSEnum,vzFS,P1Enum)); 9291 9291 this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum)); 9292 9292 this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum)); … … 9378 9378 } 9379 9379 /*}}}*/ 9380 /*FUNCTION Penta::InputUpdateFromSolutionDiagnostic Pattyn{{{*/9381 void Penta::InputUpdateFromSolutionDiagnostic Pattyn(IssmDouble* solution){9380 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHO {{{*/ 9381 void Penta::InputUpdateFromSolutionDiagnosticHO(IssmDouble* solution){ 9382 9382 9383 9383 const int numdof=NDOF2*NUMVERTICES; … … 9396 9396 9397 9397 /*Get dof list: */ 9398 GetDofList(&doflist, PattynApproximationEnum,GsetEnum);9398 GetDofList(&doflist,HOApproximationEnum,GsetEnum); 9399 9399 9400 9400 /*Get node data: */ … … 9452 9452 } 9453 9453 /*}}}*/ 9454 /*FUNCTION Penta::InputUpdateFromSolutionDiagnostic PattynStokes{{{*/9455 void Penta::InputUpdateFromSolutionDiagnostic PattynStokes(IssmDouble* solution){9454 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticHOFS {{{*/ 9455 void Penta::InputUpdateFromSolutionDiagnosticHOFS(IssmDouble* solution){ 9456 9456 9457 9457 const int numdofp=NDOF2*NUMVERTICES; … … 9459 9459 9460 9460 int i; 9461 IssmDouble pattyn_values[numdofp];9462 IssmDouble stokes_values[numdofs];9461 IssmDouble HO_values[numdofp]; 9462 IssmDouble FS_values[numdofs]; 9463 9463 IssmDouble vx[NUMVERTICES]; 9464 9464 IssmDouble vy[NUMVERTICES]; 9465 9465 IssmDouble vz[NUMVERTICES]; 9466 IssmDouble vz pattyn[NUMVERTICES];9467 IssmDouble vz stokes[NUMVERTICES];9466 IssmDouble vzHO[NUMVERTICES]; 9467 IssmDouble vzFS[NUMVERTICES]; 9468 9468 IssmDouble vel[NUMVERTICES]; 9469 9469 IssmDouble pressure[NUMVERTICES]; 9470 9470 IssmDouble xyz_list[NUMVERTICES][3]; 9471 IssmDouble stokesreconditioning;9471 IssmDouble FSreconditioning; 9472 9472 int* doflistp = NULL; 9473 9473 int* doflists = NULL; 9474 9474 Penta *penta = NULL; 9475 9475 9476 /*OK, we have to add results of this element for pattyn9477 * and results from the penta at base for macayeal. Now recover results*/9476 /*OK, we have to add results of this element for HO 9477 * and results from the penta at base for SSA. Now recover results*/ 9478 9478 penta=GetBasalElement(); 9479 9479 9480 /*Get dof listof this element ( pattyn dofs) and of the penta at base (macayealdofs): */9481 GetDofList(&doflistp, PattynApproximationEnum,GsetEnum);9482 GetDofList(&doflists, StokesApproximationEnum,GsetEnum);9483 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);9480 /*Get dof listof this element (HO dofs) and of the penta at base (SSA dofs): */ 9481 GetDofList(&doflistp,HOApproximationEnum,GsetEnum); 9482 GetDofList(&doflists,FSApproximationEnum,GsetEnum); 9483 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 9484 9484 9485 9485 /*Get node data: */ … … 9487 9487 9488 9488 /*Use the dof list to index into the solution vector: */ 9489 for(i=0;i<numdofp;i++) pattyn_values[i]=solution[doflistp[i]];9490 for(i=0;i<numdofs;i++) stokes_values[i]=solution[doflists[i]];9489 for(i=0;i<numdofp;i++) HO_values[i]=solution[doflistp[i]]; 9490 for(i=0;i<numdofs;i++) FS_values[i]=solution[doflists[i]]; 9491 9491 9492 9492 /*Transform solution in Cartesian Space*/ 9493 TransformSolutionCoord(& pattyn_values[0],this->nodes,NUMVERTICES,XYEnum);9494 TransformSolutionCoord(& stokes_values[0],this->nodes,NUMVERTICES,XYZPEnum);9493 TransformSolutionCoord(&HO_values[0],this->nodes,NUMVERTICES,XYEnum); 9494 TransformSolutionCoord(&FS_values[0],this->nodes,NUMVERTICES,XYZPEnum); 9495 9495 9496 9496 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ 9497 9497 for(i=0;i<NUMVERTICES;i++){ 9498 vx[i]= stokes_values[i*NDOF4+0]+pattyn_values[i*NDOF2+0];9499 vy[i]= stokes_values[i*NDOF4+1]+pattyn_values[i*NDOF2+1];9500 vz stokes[i]=stokes_values[i*NDOF4+2];9501 pressure[i]= stokes_values[i*NDOF4+3]*stokesreconditioning;9498 vx[i]=FS_values[i*NDOF4+0]+HO_values[i*NDOF2+0]; 9499 vy[i]=FS_values[i*NDOF4+1]+HO_values[i*NDOF2+1]; 9500 vzFS[i]=FS_values[i*NDOF4+2]; 9501 pressure[i]=FS_values[i*NDOF4+3]*FSreconditioning; 9502 9502 9503 9503 /*Check solution*/ 9504 9504 if(xIsNan<IssmDouble>(vx[i])) _error_("NaN found in solution vector"); 9505 9505 if(xIsNan<IssmDouble>(vy[i])) _error_("NaN found in solution vector"); 9506 if(xIsNan<IssmDouble>(vz stokes[i])) _error_("NaN found in solution vector");9506 if(xIsNan<IssmDouble>(vzFS[i])) _error_("NaN found in solution vector"); 9507 9507 if(xIsNan<IssmDouble>(pressure[i])) _error_("NaN found in solution vector"); 9508 9508 } 9509 9509 9510 9510 /*Get Vz*/ 9511 Input* vz pattyn_input=inputs->GetInput(VzPattynEnum);9512 if (vz pattyn_input){9513 if (vz pattyn_input->ObjectEnum()!=PentaInputEnum){9514 _error_("Cannot compute Vel as Vz Pattyn is of type " << EnumToStringx(vzpattyn_input->ObjectEnum()));9515 } 9516 GetInputListOnVertices(&vz pattyn[0],VzPattynEnum);9511 Input* vzHO_input=inputs->GetInput(VzHOEnum); 9512 if (vzHO_input){ 9513 if (vzHO_input->ObjectEnum()!=PentaInputEnum){ 9514 _error_("Cannot compute Vel as VzHO is of type " << EnumToStringx(vzHO_input->ObjectEnum())); 9515 } 9516 GetInputListOnVertices(&vzHO[0],VzHOEnum); 9517 9517 } 9518 9518 else{ 9519 _error_("Cannot update solution as Vz Pattynis not present");9519 _error_("Cannot update solution as VzHO is not present"); 9520 9520 } 9521 9521 9522 9522 /*Now Compute vel*/ 9523 9523 for(i=0;i<NUMVERTICES;i++) { 9524 vz[i]=vz pattyn[i]+vzstokes[i];9524 vz[i]=vzHO[i]+vzFS[i]; 9525 9525 vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5); 9526 9526 } … … 9537 9537 this->inputs->AddInput(new PentaInput(VyEnum,vy,P1Enum)); 9538 9538 this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum)); 9539 this->inputs->AddInput(new PentaInput(Vz StokesEnum,vzstokes,P1Enum));9539 this->inputs->AddInput(new PentaInput(VzFSEnum,vzFS,P1Enum)); 9540 9540 this->inputs->AddInput(new PentaInput(VelEnum,vel,P1Enum)); 9541 9541 this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum)); … … 9546 9546 } 9547 9547 /*}}}*/ 9548 /*FUNCTION Penta::InputUpdateFromSolutionDiagnostic Hutter{{{*/9549 void Penta::InputUpdateFromSolutionDiagnostic Hutter(IssmDouble* solution){9548 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticSIA {{{*/ 9549 void Penta::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){ 9550 9550 9551 9551 const int numdof=NDOF2*NUMVERTICES; … … 9621 9621 IssmDouble vy[NUMVERTICES]; 9622 9622 IssmDouble vz[NUMVERTICES]; 9623 IssmDouble vz macayeal[NUMVERTICES];9624 IssmDouble vz pattyn[NUMVERTICES];9625 IssmDouble vz stokes[NUMVERTICES];9623 IssmDouble vzSSA[NUMVERTICES]; 9624 IssmDouble vzHO[NUMVERTICES]; 9625 IssmDouble vzFS[NUMVERTICES]; 9626 9626 IssmDouble vel[NUMVERTICES]; 9627 9627 IssmDouble pressure[NUMVERTICES]; … … 9630 9630 int* doflist = NULL; 9631 9631 9632 /*Get the approximation and do nothing if the element in Stokesor None*/9632 /*Get the approximation and do nothing if the element in FS or None*/ 9633 9633 inputs->GetInputValue(&approximation,ApproximationEnum); 9634 if(approximation== StokesApproximationEnum || approximation==NoneApproximationEnum){9634 if(approximation==FSApproximationEnum || approximation==NoneApproximationEnum){ 9635 9635 return; 9636 9636 } … … 9653 9653 GetInputListOnVertices(&vy[0],VyEnum,0.0); //default is 0 9654 9654 9655 /*Do some modifications if we actually have a PattynStokes or MacAyealStokeselement*/9656 if(approximation== PattynStokesApproximationEnum){9657 Input* vz stokes_input=inputs->GetInput(VzStokesEnum);9658 if (vz stokes_input){9659 if (vz stokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));9660 GetInputListOnVertices(&vz stokes[0],VzStokesEnum);9661 } 9662 else _error_("Cannot compute Vz as Vz Stokes in not present in PattynStokeselement");9655 /*Do some modifications if we actually have a HOFS or MacAyealFS element*/ 9656 if(approximation==HOFSApproximationEnum){ 9657 Input* vzFS_input=inputs->GetInput(VzFSEnum); 9658 if (vzFS_input){ 9659 if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum())); 9660 GetInputListOnVertices(&vzFS[0],VzFSEnum); 9661 } 9662 else _error_("Cannot compute Vz as VzFS in not present in HOFS element"); 9663 9663 for(i=0;i<NUMVERTICES;i++){ 9664 vz pattyn[i]=vz[i];9665 vz[i]=vz pattyn[i]+vzstokes[i];9666 } 9667 } 9668 else if(approximation==MacAyeal StokesApproximationEnum){9669 Input* vz stokes_input=inputs->GetInput(VzStokesEnum);9670 if (vz stokes_input){9671 if (vz stokes_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzStokes is of type " << EnumToStringx(vzstokes_input->ObjectEnum()));9672 GetInputListOnVertices(&vz stokes[0],VzStokesEnum);9673 } 9674 else _error_("Cannot compute Vz as Vz Stokes in not present in MacAyealStokeselement");9664 vzHO[i]=vz[i]; 9665 vz[i]=vzHO[i]+vzFS[i]; 9666 } 9667 } 9668 else if(approximation==MacAyealFSApproximationEnum){ 9669 Input* vzFS_input=inputs->GetInput(VzFSEnum); 9670 if (vzFS_input){ 9671 if (vzFS_input->ObjectEnum()!=PentaInputEnum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum())); 9672 GetInputListOnVertices(&vzFS[0],VzFSEnum); 9673 } 9674 else _error_("Cannot compute Vz as VzFS in not present in MacAyealFS element"); 9675 9675 for(i=0;i<NUMVERTICES;i++){ 9676 vz macayeal[i]=vz[i];9677 vz[i]=vz macayeal[i]+vzstokes[i];9676 vzSSA[i]=vz[i]; 9677 vz[i]=vzSSA[i]+vzFS[i]; 9678 9678 } 9679 9679 } … … 9683 9683 9684 9684 /*For pressure: we have not computed pressure in this analysis, for this element. We are in 3D, 9685 *so the pressure is just the pressure at the z elevation: except it this is a PattynStokeselement */9686 if(approximation!= PattynStokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum){9685 *so the pressure is just the pressure at the z elevation: except it this is a HOFS element */ 9686 if(approximation!=HOFSApproximationEnum && approximation!=MacAyealFSApproximationEnum){ 9687 9687 rho_ice=matpar->GetRhoIce(); 9688 9688 g=matpar->GetG(); … … 9695 9695 this->inputs->ChangeEnum(VzEnum,VzPicardEnum); 9696 9696 9697 if(approximation!= PattynStokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum){9697 if(approximation!=HOFSApproximationEnum && approximation!=MacAyealFSApproximationEnum){ 9698 9698 this->inputs->ChangeEnum(PressureEnum,PressurePicardEnum); 9699 9699 this->inputs->AddInput(new PentaInput(PressureEnum,pressure,P1Enum)); 9700 9700 } 9701 else if(approximation== PattynStokesApproximationEnum){9702 this->inputs->AddInput(new PentaInput(Vz PattynEnum,vzpattyn,P1Enum));9703 } 9704 else if(approximation==MacAyeal StokesApproximationEnum){9705 this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vz macayeal,P1Enum));9701 else if(approximation==HOFSApproximationEnum){ 9702 this->inputs->AddInput(new PentaInput(VzHOEnum,vzHO,P1Enum)); 9703 } 9704 else if(approximation==MacAyealFSApproximationEnum){ 9705 this->inputs->AddInput(new PentaInput(VzMacAyealEnum,vzSSA,P1Enum)); 9706 9706 } 9707 9707 this->inputs->AddInput(new PentaInput(VzEnum,vz,P1Enum)); … … 9712 9712 } 9713 9713 /*}}}*/ 9714 /*FUNCTION Penta::InputUpdateFromSolutionDiagnostic Stokes{{{*/9715 void Penta::InputUpdateFromSolutionDiagnostic Stokes(IssmDouble* solution){9714 /*FUNCTION Penta::InputUpdateFromSolutionDiagnosticFS {{{*/ 9715 void Penta::InputUpdateFromSolutionDiagnosticFS(IssmDouble* solution){ 9716 9716 9717 9717 const int numdof=NDOF4*NUMVERTICES; … … 9724 9724 IssmDouble vel[NUMVERTICES]; 9725 9725 IssmDouble pressure[NUMVERTICES]; 9726 IssmDouble stokesreconditioning;9726 IssmDouble FSreconditioning; 9727 9727 int* doflist=NULL; 9728 9728 9729 9729 /*Get dof list: */ 9730 GetDofList(&doflist, StokesApproximationEnum,GsetEnum);9730 GetDofList(&doflist,FSApproximationEnum,GsetEnum); 9731 9731 9732 9732 /*Use the dof list to index into the solution vector: */ … … 9751 9751 9752 9752 /*Recondition pressure and compute vel: */ 9753 this->parameters->FindParam(& stokesreconditioning,DiagnosticStokesreconditioningEnum);9754 for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]* stokesreconditioning;9753 this->parameters->FindParam(&FSreconditioning,DiagnosticFSreconditioningEnum); 9754 for(i=0;i<NUMVERTICES;i++) pressure[i]=pressure[i]*FSreconditioning; 9755 9755 for(i=0;i<NUMVERTICES;i++) vel[i]=pow( pow(vx[i],2.0) + pow(vy[i],2.0) + pow(vz[i],2.0) , 0.5); 9756 9756 -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r15538 r15564 145 145 void Gradj(Vector<IssmDouble>* gradient,int control_type,int control_index); 146 146 void GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index); 147 void GradjDrag Pattyn(Vector<IssmDouble>* gradient,int control_index);148 void GradjDrag Stokes(Vector<IssmDouble>* gradient,int control_index);147 void GradjDragHO(Vector<IssmDouble>* gradient,int control_index); 148 void GradjDragFS(Vector<IssmDouble>* gradient,int control_index); 149 149 void GradjBbarMacAyeal(Vector<IssmDouble>* gradient,int control_index); 150 void GradjBbar Pattyn(Vector<IssmDouble>* gradient,int control_index);151 void GradjBbar Stokes(Vector<IssmDouble>* gradient,int control_index);150 void GradjBbarHO(Vector<IssmDouble>* gradient,int control_index); 151 void GradjBbarFS(Vector<IssmDouble>* gradient,int control_index); 152 152 void GetVectorFromControlInputs(Vector<IssmDouble>* gradient,int control_enum,int control_index,const char* data); 153 153 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index); … … 197 197 void GetSolutionFromInputsEnthalpy(Vector<IssmDouble>* solutiong); 198 198 IssmDouble GetStabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa); 199 void GetStrainRate3d Pattyn(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input);199 void GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input); 200 200 void GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, GaussPenta* gauss, Input* vx_input, Input* vy_input, Input* vz_input); 201 201 Penta* GetUpperElement(void); … … 215 215 bool IsOnWater(void); 216 216 IssmDouble MinEdgeLength(IssmDouble xyz_list[6][3]); 217 void ReduceMatrix Stokes(IssmDouble* Ke_reduced, IssmDouble* Ke_temp);218 void ReduceVector Stokes(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);217 void ReduceMatrixFS(IssmDouble* Ke_reduced, IssmDouble* Ke_temp); 218 void ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp); 219 219 void SetClone(int* minranks); 220 220 Tria* SpawnTria(int g0, int g1, int g2); … … 223 223 224 224 #ifdef _HAVE_DIAGNOSTIC_ 225 ElementMatrix* CreateKMatrixCouplingMacAyeal Pattyn(void);226 ElementMatrix* CreateKMatrixCouplingMacAyeal PattynViscous(void);227 ElementMatrix* CreateKMatrixCouplingMacAyeal PattynFriction(void);228 ElementMatrix* CreateKMatrixCouplingMacAyeal Stokes(void);229 ElementMatrix* CreateKMatrixCouplingMacAyeal StokesViscous(void);230 ElementMatrix* CreateKMatrixCouplingMacAyeal StokesFriction(void);231 ElementMatrix* CreateKMatrixCoupling PattynStokes(void);225 ElementMatrix* CreateKMatrixCouplingMacAyealHO(void); 226 ElementMatrix* CreateKMatrixCouplingMacAyealHOViscous(void); 227 ElementMatrix* CreateKMatrixCouplingMacAyealHOFriction(void); 228 ElementMatrix* CreateKMatrixCouplingMacAyealFS(void); 229 ElementMatrix* CreateKMatrixCouplingMacAyealFSViscous(void); 230 ElementMatrix* CreateKMatrixCouplingMacAyealFSFriction(void); 231 ElementMatrix* CreateKMatrixCouplingHOFS(void); 232 232 ElementMatrix* CreateKMatrixDiagnosticHoriz(void); 233 233 ElementMatrix* CreateKMatrixAdjointHoriz(void); 234 234 ElementVector* CreateDVectorDiagnosticHoriz(void); 235 ElementVector* CreateDVectorDiagnostic Stokes(void);236 ElementMatrix* CreateKMatrixDiagnostic Hutter(void);235 ElementVector* CreateDVectorDiagnosticFS(void); 236 ElementMatrix* CreateKMatrixDiagnosticSIA(void); 237 237 ElementMatrix* CreateKMatrixDiagnosticMacAyeal2d(void); 238 238 ElementMatrix* CreateKMatrixDiagnosticMacAyeal3d(void); 239 239 ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dViscous(void); 240 240 ElementMatrix* CreateKMatrixDiagnosticMacAyeal3dFriction(void); 241 ElementMatrix* CreateKMatrixDiagnosticMacAyeal Pattyn(void);242 ElementMatrix* CreateKMatrixDiagnosticMacAyeal Stokes(void);241 ElementMatrix* CreateKMatrixDiagnosticMacAyealHO(void); 242 ElementMatrix* CreateKMatrixDiagnosticMacAyealFS(void); 243 243 ElementMatrix* CreateKMatrixDiagnosticL1L2(void); 244 244 ElementMatrix* CreateKMatrixDiagnosticL1L2Viscous(void); 245 245 ElementMatrix* CreateKMatrixDiagnosticL1L2Friction(void); 246 ElementMatrix* CreateKMatrixDiagnostic Pattyn(void);247 ElementMatrix* CreateKMatrixDiagnostic PattynViscous(void);248 ElementMatrix* CreateKMatrixDiagnostic PattynFriction(void);249 ElementMatrix* CreateKMatrixDiagnostic PattynStokes(void);250 ElementMatrix* CreateKMatrixDiagnostic Stokes(void);251 ElementMatrix* CreateKMatrixDiagnostic StokesViscous(void);252 ElementMatrix* CreateKMatrixDiagnostic StokesGLSViscous(void);253 ElementMatrix* CreateKMatrixDiagnostic StokesFriction(void);254 ElementMatrix* CreateKMatrixDiagnostic StokesGLSFriction(void);246 ElementMatrix* CreateKMatrixDiagnosticHO(void); 247 ElementMatrix* CreateKMatrixDiagnosticHOViscous(void); 248 ElementMatrix* CreateKMatrixDiagnosticHOFriction(void); 249 ElementMatrix* CreateKMatrixDiagnosticHOFS(void); 250 ElementMatrix* CreateKMatrixDiagnosticFS(void); 251 ElementMatrix* CreateKMatrixDiagnosticFSViscous(void); 252 ElementMatrix* CreateKMatrixDiagnosticFSGLSViscous(void); 253 ElementMatrix* CreateKMatrixDiagnosticFSFriction(void); 254 ElementMatrix* CreateKMatrixDiagnosticFSGLSFriction(void); 255 255 ElementMatrix* CreateKMatrixDiagnosticVert(void); 256 256 ElementMatrix* CreateKMatrixDiagnosticVertVolume(void); 257 257 ElementMatrix* CreateKMatrixDiagnosticVertSurface(void); 258 258 ElementMatrix* CreateJacobianDiagnosticHoriz(void); 259 ElementMatrix* CreateJacobianDiagnostic Macayeal2d(void);260 ElementMatrix* CreateJacobianDiagnostic Pattyn(void);261 ElementMatrix* CreateJacobianDiagnostic Stokes(void);259 ElementMatrix* CreateJacobianDiagnosticSSA2d(void); 260 ElementMatrix* CreateJacobianDiagnosticHO(void); 261 ElementMatrix* CreateJacobianDiagnosticFS(void); 262 262 void InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solutiong); 263 263 void InputUpdateFromSolutionDiagnosticMacAyeal( IssmDouble* solutiong); 264 void InputUpdateFromSolutionDiagnosticMacAyeal Pattyn( IssmDouble* solutiong);265 void InputUpdateFromSolutionDiagnosticMacAyeal Stokes( IssmDouble* solutiong);264 void InputUpdateFromSolutionDiagnosticMacAyealHO( IssmDouble* solutiong); 265 void InputUpdateFromSolutionDiagnosticMacAyealFS( IssmDouble* solutiong); 266 266 void InputUpdateFromSolutionDiagnosticL1L2( IssmDouble* solutiong); 267 void InputUpdateFromSolutionDiagnostic Pattyn( IssmDouble* solutiong);268 void InputUpdateFromSolutionDiagnostic PattynStokes( IssmDouble* solutiong);269 void InputUpdateFromSolutionDiagnostic Hutter( IssmDouble* solutiong);267 void InputUpdateFromSolutionDiagnosticHO( IssmDouble* solutiong); 268 void InputUpdateFromSolutionDiagnosticHOFS( IssmDouble* solutiong); 269 void InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solutiong); 270 270 void InputUpdateFromSolutionDiagnosticVert( IssmDouble* solutiong); 271 void InputUpdateFromSolutionDiagnostic Stokes( IssmDouble* solutiong);271 void InputUpdateFromSolutionDiagnosticFS( IssmDouble* solutiong); 272 272 void GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solutiong); 273 void GetSolutionFromInputsDiagnostic Hutter(Vector<IssmDouble>* solutiong);274 void GetSolutionFromInputsDiagnostic Stokes(Vector<IssmDouble>* solutiong);273 void GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solutiong); 274 void GetSolutionFromInputsDiagnosticFS(Vector<IssmDouble>* solutiong); 275 275 void GetSolutionFromInputsDiagnosticVert(Vector<IssmDouble>* solutiong); 276 ElementVector* CreatePVectorCouplingMacAyeal Stokes(void);277 ElementVector* CreatePVectorCouplingMacAyeal StokesViscous(void);278 ElementVector* CreatePVectorCouplingMacAyeal StokesFriction(void);279 ElementVector* CreatePVectorCoupling PattynStokes(void);280 ElementVector* CreatePVectorCoupling PattynStokesViscous(void);281 ElementVector* CreatePVectorCoupling PattynStokesFriction(void);276 ElementVector* CreatePVectorCouplingMacAyealFS(void); 277 ElementVector* CreatePVectorCouplingMacAyealFSViscous(void); 278 ElementVector* CreatePVectorCouplingMacAyealFSFriction(void); 279 ElementVector* CreatePVectorCouplingHOFS(void); 280 ElementVector* CreatePVectorCouplingHOFSViscous(void); 281 ElementVector* CreatePVectorCouplingHOFSFriction(void); 282 282 ElementVector* CreatePVectorDiagnosticHoriz(void); 283 ElementVector* CreatePVectorDiagnostic Hutter(void);283 ElementVector* CreatePVectorDiagnosticSIA(void); 284 284 ElementVector* CreatePVectorDiagnosticMacAyeal(void); 285 ElementVector* CreatePVectorDiagnosticMacAyeal Pattyn(void);286 ElementVector* CreatePVectorDiagnosticMacAyeal Stokes(void);285 ElementVector* CreatePVectorDiagnosticMacAyealHO(void); 286 ElementVector* CreatePVectorDiagnosticMacAyealFS(void); 287 287 ElementVector* CreatePVectorDiagnosticL1L2(void); 288 ElementVector* CreatePVectorDiagnostic Pattyn(void);289 ElementVector* CreatePVectorDiagnostic PattynDrivingStress(void);290 ElementVector* CreatePVectorDiagnostic PattynFront(void);291 ElementVector* CreatePVectorDiagnostic PattynStokes(void);292 ElementVector* CreatePVectorDiagnostic Stokes(void);293 ElementVector* CreatePVectorDiagnostic StokesFront(void);294 ElementVector* CreatePVectorDiagnostic StokesViscous(void);295 ElementVector* CreatePVectorDiagnostic StokesGLSViscous(void);296 ElementVector* CreatePVectorDiagnostic StokesShelf(void);288 ElementVector* CreatePVectorDiagnosticHO(void); 289 ElementVector* CreatePVectorDiagnosticHODrivingStress(void); 290 ElementVector* CreatePVectorDiagnosticHOFront(void); 291 ElementVector* CreatePVectorDiagnosticHOFS(void); 292 ElementVector* CreatePVectorDiagnosticFS(void); 293 ElementVector* CreatePVectorDiagnosticFSFront(void); 294 ElementVector* CreatePVectorDiagnosticFSViscous(void); 295 ElementVector* CreatePVectorDiagnosticFSGLSViscous(void); 296 ElementVector* CreatePVectorDiagnosticFSShelf(void); 297 297 ElementVector* CreatePVectorDiagnosticVert(void); 298 298 ElementVector* CreatePVectorDiagnosticVertVolume(void); … … 304 304 ElementVector* CreatePVectorAdjointHoriz(void); 305 305 ElementMatrix* CreateKMatrixAdjointMacAyeal2d(void); 306 ElementMatrix* CreateKMatrixAdjoint Pattyn(void);307 ElementMatrix* CreateKMatrixAdjoint Stokes(void);306 ElementMatrix* CreateKMatrixAdjointHO(void); 307 ElementMatrix* CreateKMatrixAdjointFS(void); 308 308 ElementVector* CreatePVectorAdjointMacAyeal(void); 309 ElementVector* CreatePVectorAdjoint Pattyn(void);310 ElementVector* CreatePVectorAdjoint Stokes(void);309 ElementVector* CreatePVectorAdjointHO(void); 310 ElementVector* CreatePVectorAdjointFS(void); 311 311 void InputUpdateFromSolutionAdjointHoriz( IssmDouble* solutiong); 312 void InputUpdateFromSolutionAdjoint Stokes( IssmDouble* solutiong);312 void InputUpdateFromSolutionAdjointFS( IssmDouble* solutiong); 313 313 #endif 314 314 -
issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
r15511 r15564 54 54 55 55 /*Reference Element numerics*/ 56 /*FUNCTION PentaRef::GetBMacAyeal Pattyn{{{*/57 void PentaRef::GetBMacAyeal Pattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){56 /*FUNCTION PentaRef::GetBMacAyealHO {{{*/ 57 void PentaRef::GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){ 58 58 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 59 59 * For node i, Bi can be expressed in the actual coordinate system … … 85 85 } 86 86 /*}}}*/ 87 /*FUNCTION PentaRef::GetBMacAyeal Stokes{{{*/88 void PentaRef::GetBMacAyeal Stokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){87 /*FUNCTION PentaRef::GetBMacAyealFS{{{*/ 88 void PentaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){ 89 89 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 90 90 * For node i, Bi can be expressed in the actual coordinate system … … 131 131 } 132 132 /*}}}*/ 133 /*FUNCTION PentaRef::GetB Pattyn{{{*/134 void PentaRef::GetB Pattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){133 /*FUNCTION PentaRef::GetBHO {{{*/ 134 void PentaRef::GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){ 135 135 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 136 136 * For node i, Bi can be expressed in the actual coordinate system … … 171 171 } 172 172 /*}}}*/ 173 /*FUNCTION PentaRef::GetBprime Pattyn{{{*/174 void PentaRef::GetBprime Pattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){173 /*FUNCTION PentaRef::GetBprimeHO {{{*/ 174 void PentaRef::GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss_coord){ 175 175 /*Compute B prime matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 176 176 * For node i, Bi can be expressed in the actual coordinate system … … 209 209 } 210 210 /*}}}*/ 211 /*FUNCTION PentaRef::GetBprimeMacAyeal Stokes{{{*/212 void PentaRef::GetBprimeMacAyeal Stokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){211 /*FUNCTION PentaRef::GetBprimeMacAyealFS{{{*/ 212 void PentaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss){ 213 213 /*Compute Bprime matrix. Bprime=[Bprime1 Bprime2 Bprime3 Bprime4 Bprime5 Bprime6] where Bprimei is of size 5*NDOF2. 214 214 * For node i, Bprimei can be expressed in the actual coordinate system … … 249 249 } 250 250 /*}}}*/ 251 /*FUNCTION PentaRef::GetB Stokes{{{*/252 void PentaRef::GetB Stokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){251 /*FUNCTION PentaRef::GetBFS {{{*/ 252 void PentaRef::GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){ 253 253 254 254 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. … … 316 316 } 317 317 /*}}}*/ 318 /*FUNCTION PentaRef::GetB StokesGLS {{{*/319 void PentaRef::GetB StokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){318 /*FUNCTION PentaRef::GetBFSGLS {{{*/ 319 void PentaRef::GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss){ 320 320 321 321 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 3*NDOF4. … … 382 382 } 383 383 /*}}}*/ 384 /*FUNCTION PentaRef::GetBprime Stokes{{{*/385 void PentaRef::GetBprime Stokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){384 /*FUNCTION PentaRef::GetBprimeFS {{{*/ 385 void PentaRef::GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){ 386 386 /* Compute B' matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 387 387 * For node i, Bi' can be expressed in the actual coordinate system … … 449 449 } 450 450 /*}}}*/ 451 /*FUNCTION PentaRef::GetBprime StokesGLS {{{*/452 void PentaRef::GetBprime StokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){451 /*FUNCTION PentaRef::GetBprimeFSGLS {{{*/ 452 void PentaRef::GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss){ 453 453 /* Compute B' matrix. B'=[B1' B2' B3' B4' B5' B6' Bb'] where Bi' is of size 3*NDOF2. 454 454 * For node i, Bi' can be expressed in the actual coordinate system … … 618 618 } 619 619 /*}}}*/ 620 /*FUNCTION PentaRef::GetB PattynFriction{{{*/621 void PentaRef::GetB PattynFriction(IssmDouble* B, GaussPenta* gauss){620 /*FUNCTION PentaRef::GetBHOFriction{{{*/ 621 void PentaRef::GetBHOFriction(IssmDouble* B, GaussPenta* gauss){ 622 622 /*Compute B matrix. B=[B1 B2 B3] where Bi is square and of size 2x2. 623 623 ** For node i, Bi can be expressed in the actual coordinate system … … 642 642 } 643 643 /*}}}*/ 644 /*FUNCTION PentaRef::GetL Stokes{{{*/645 void PentaRef::GetL Stokes(IssmDouble* LStokes, GaussPenta* gauss){644 /*FUNCTION PentaRef::GetLFS{{{*/ 645 void PentaRef::GetLFS(IssmDouble* LFS, GaussPenta* gauss){ 646 646 /* Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. 647 647 * For node i, Li can be expressed in the actual coordinate system … … 655 655 656 656 const int num_dof=4; 657 IssmDouble l1l2l3[NUMNODESP1_2d];658 659 /*Get l1l2l3 in actual coordinate system: */660 l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;661 l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;662 l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;663 664 /*Build L Stokes: */657 IssmDouble L1L2l3[NUMNODESP1_2d]; 658 659 /*Get L1L2l3 in actual coordinate system: */ 660 L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0; 661 L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0; 662 L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0; 663 664 /*Build LFS: */ 665 665 for(int i=0;i<3;i++){ 666 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];667 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;668 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;669 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;670 671 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;672 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];673 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;674 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;675 } 676 } 677 /*}}}*/ 678 /*FUNCTION PentaRef::GetLprime Stokes{{{*/679 void PentaRef::GetLprime Stokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){666 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i]; 667 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.; 668 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.; 669 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.; 670 671 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.; 672 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i]; 673 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.; 674 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.; 675 } 676 } 677 /*}}}*/ 678 /*FUNCTION PentaRef::GetLprimeFS {{{*/ 679 void PentaRef::GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){ 680 680 /* Compute Lprime matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 681 681 * For node i, Lpi can be expressed in the actual coordinate system … … 715 715 int num_dof=4; 716 716 717 IssmDouble l1l2l3[NUMNODESP1_2d];717 IssmDouble L1L2l3[NUMNODESP1_2d]; 718 718 IssmDouble dbasis[3][NUMNODESP1]; 719 719 720 /*Get l1l2l3 in actual coordinate system: */721 l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;722 l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;723 l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;720 /*Get L1L2l3 in actual coordinate system: */ 721 L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0; 722 L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0; 723 L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0; 724 724 725 725 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss); 726 726 727 /*Build Lprime Stokes: */727 /*Build LprimeFS: */ 728 728 for(int i=0;i<3;i++){ 729 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];730 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;731 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;732 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;733 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;734 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];735 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;736 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;737 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];738 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;739 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = 0.;740 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;741 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;742 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];743 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = 0.;744 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;745 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;746 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;747 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = l1l2l3[i];748 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;749 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;750 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;751 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = l1l2l3[i];752 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;753 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;754 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;755 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = dbasis[2][i];756 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = 0.;757 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;758 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;759 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = dbasis[2][i];760 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = 0.;761 Lprime Stokes[num_dof*NUMNODESP1_2d*8+num_dof*i+0] = 0.;762 Lprime Stokes[num_dof*NUMNODESP1_2d*8+num_dof*i+1] = 0.;763 Lprime Stokes[num_dof*NUMNODESP1_2d*8+num_dof*i+2] = dbasis[2][i];764 Lprime Stokes[num_dof*NUMNODESP1_2d*8+num_dof*i+3] = 0.;765 Lprime Stokes[num_dof*NUMNODESP1_2d*9+num_dof*i+0] = dbasis[2][i];766 Lprime Stokes[num_dof*NUMNODESP1_2d*9+num_dof*i+1] = 0.;767 Lprime Stokes[num_dof*NUMNODESP1_2d*9+num_dof*i+2] = dbasis[0][i];768 Lprime Stokes[num_dof*NUMNODESP1_2d*9+num_dof*i+3] = 0.;769 Lprime Stokes[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.;770 Lprime Stokes[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i];771 Lprime Stokes[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i];772 Lprime Stokes[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.;773 Lprime Stokes[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.;774 Lprime Stokes[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.;775 Lprime Stokes[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.;776 Lprime Stokes[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = l1l2l3[i];777 Lprime Stokes[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.;778 Lprime Stokes[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.;779 Lprime Stokes[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.;780 Lprime Stokes[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = l1l2l3[i];781 Lprime Stokes[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.;782 Lprime Stokes[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0;783 Lprime Stokes[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0;784 Lprime Stokes[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = l1l2l3[i];785 } 786 } 787 /*}}}*/ 788 /*FUNCTION PentaRef::GetLMacAyeal Stokes{{{*/789 void PentaRef::GetLMacAyeal Stokes(IssmDouble* LStokes, GaussPenta* gauss){729 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i]; 730 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.; 731 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.; 732 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.; 733 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.; 734 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i]; 735 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.; 736 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.; 737 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i]; 738 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.; 739 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = 0.; 740 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.; 741 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.; 742 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i]; 743 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = 0.; 744 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.; 745 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.; 746 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.; 747 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = L1L2l3[i]; 748 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.; 749 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.; 750 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.; 751 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = L1L2l3[i]; 752 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.; 753 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.; 754 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.; 755 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = dbasis[2][i]; 756 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = 0.; 757 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.; 758 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.; 759 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = dbasis[2][i]; 760 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = 0.; 761 LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+0] = 0.; 762 LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+1] = 0.; 763 LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+2] = dbasis[2][i]; 764 LprimeFS[num_dof*NUMNODESP1_2d*8+num_dof*i+3] = 0.; 765 LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+0] = dbasis[2][i]; 766 LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+1] = 0.; 767 LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+2] = dbasis[0][i]; 768 LprimeFS[num_dof*NUMNODESP1_2d*9+num_dof*i+3] = 0.; 769 LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+0] = 0.; 770 LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+1] = dbasis[2][i]; 771 LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+2] = dbasis[1][i]; 772 LprimeFS[num_dof*NUMNODESP1_2d*10+num_dof*i+3] = 0.; 773 LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+0] = 0.; 774 LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+1] = 0.; 775 LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+2] = 0.; 776 LprimeFS[num_dof*NUMNODESP1_2d*11+num_dof*i+3] = L1L2l3[i]; 777 LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+0] = 0.; 778 LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+1] = 0.; 779 LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+2] = 0.; 780 LprimeFS[num_dof*NUMNODESP1_2d*12+num_dof*i+3] = L1L2l3[i]; 781 LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+0] = 0.; 782 LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+1] = 0; 783 LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+2] = 0; 784 LprimeFS[num_dof*NUMNODESP1_2d*13+num_dof*i+3] = L1L2l3[i]; 785 } 786 } 787 /*}}}*/ 788 /*FUNCTION PentaRef::GetLMacAyealFS {{{*/ 789 void PentaRef::GetLMacAyealFS(IssmDouble* LFS, GaussPenta* gauss){ 790 790 /* 791 791 * Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. … … 804 804 805 805 int num_dof=2; 806 IssmDouble l1l2l3[NUMNODESP1_2d];807 808 /*Get l1l2l3 in actual coordinate system: */809 l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;810 l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;811 l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;812 813 /*Build L Stokes: */806 IssmDouble L1L2l3[NUMNODESP1_2d]; 807 808 /*Get L1L2l3 in actual coordinate system: */ 809 L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0; 810 L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0; 811 L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0; 812 813 /*Build LFS: */ 814 814 for(int i=0;i<3;i++){ 815 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];816 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0;817 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0;818 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];819 L Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];820 L Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0;821 L Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0;822 L Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];823 L Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = l1l2l3[i];824 L Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0;825 L Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0;826 L Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = l1l2l3[i];827 L Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = l1l2l3[i];828 L Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0;829 L Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0;830 L Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = l1l2l3[i];831 } 832 } 833 /*}}}*/ 834 /*FUNCTION PentaRef::GetLprimeMacAyeal Stokes{{{*/835 void PentaRef::GetLprimeMacAyeal Stokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){815 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i]; 816 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0; 817 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0; 818 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i]; 819 LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i]; 820 LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0; 821 LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0; 822 LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i]; 823 LFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = L1L2l3[i]; 824 LFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0; 825 LFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0; 826 LFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = L1L2l3[i]; 827 LFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = L1L2l3[i]; 828 LFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0; 829 LFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0; 830 LFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = L1L2l3[i]; 831 } 832 } 833 /*}}}*/ 834 /*FUNCTION PentaRef::GetLprimeMacAyealFS {{{*/ 835 void PentaRef::GetLprimeMacAyealFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){ 836 836 /* Compute Lprime matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 837 837 * For node i, Lpi can be expressed in the actual coordinate system … … 848 848 */ 849 849 int num_dof=4; 850 IssmDouble l1l2l3[NUMNODESP1_2d];850 IssmDouble L1L2l3[NUMNODESP1_2d]; 851 851 IssmDouble dbasis[3][NUMNODESP1]; 852 852 853 /*Get l1l2l3 in actual coordinate system: */854 l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;855 l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;856 l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;853 /*Get L1L2l3 in actual coordinate system: */ 854 L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0; 855 L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0; 856 L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0; 857 857 858 858 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss); 859 859 860 /*Build Lprime Stokes: */860 /*Build LprimeFS: */ 861 861 for(int i=0;i<3;i++){ 862 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];863 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;864 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;865 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;866 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;867 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];868 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;869 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;870 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;871 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;872 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];873 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;874 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;875 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;876 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];877 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;878 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.;879 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.;880 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i];881 Lprime Stokes[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.;882 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.;883 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.;884 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i];885 Lprime Stokes[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.;886 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.;887 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.;888 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.;889 Lprime Stokes[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = l1l2l3[i];890 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.;891 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.;892 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.;893 Lprime Stokes[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = l1l2l3[i];894 } 895 } 896 /*}}}*/ 897 /*FUNCTION PentaRef::GetL StokesMacAyeal {{{*/898 void PentaRef::GetL StokesMacAyeal(IssmDouble* LStokes, GaussPenta* gauss){862 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i]; 863 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.; 864 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.; 865 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.; 866 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.; 867 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i]; 868 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.; 869 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.; 870 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.; 871 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.; 872 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i]; 873 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.; 874 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.; 875 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.; 876 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i]; 877 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.; 878 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+0] = 0.; 879 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+1] = 0.; 880 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+2] = dbasis[2][i]; 881 LprimeFS[num_dof*NUMNODESP1_2d*4+num_dof*i+3] = 0.; 882 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+0] = 0.; 883 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+1] = 0.; 884 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+2] = dbasis[2][i]; 885 LprimeFS[num_dof*NUMNODESP1_2d*5+num_dof*i+3] = 0.; 886 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+0] = 0.; 887 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+1] = 0.; 888 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+2] = 0.; 889 LprimeFS[num_dof*NUMNODESP1_2d*6+num_dof*i+3] = L1L2l3[i]; 890 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+0] = 0.; 891 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+1] = 0.; 892 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+2] = 0.; 893 LprimeFS[num_dof*NUMNODESP1_2d*7+num_dof*i+3] = L1L2l3[i]; 894 } 895 } 896 /*}}}*/ 897 /*FUNCTION PentaRef::GetLFSMacAyeal {{{*/ 898 void PentaRef::GetLFSMacAyeal(IssmDouble* LFS, GaussPenta* gauss){ 899 899 /* Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. 900 900 * For node i, Li can be expressed in the actual coordinate system … … 908 908 909 909 int num_dof=4; 910 IssmDouble l1l2l3[NUMNODESP1_2d];911 912 /*Get l1l2l3 in actual coordinate system: */913 l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;914 l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;915 l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;916 917 /*Build L Stokes: */910 IssmDouble L1L2l3[NUMNODESP1_2d]; 911 912 /*Get L1L2l3 in actual coordinate system: */ 913 L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0; 914 L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0; 915 L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0; 916 917 /*Build LFS: */ 918 918 for(int i=0;i<3;i++){ 919 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];920 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;921 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.;922 L Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.;923 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;924 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];925 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.;926 L Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.;927 L Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.;928 L Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;929 L Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = l1l2l3[i];930 L Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.;931 L Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;932 L Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.;933 L Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = l1l2l3[i];934 L Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.;935 } 936 } 937 /*}}}*/ 938 /*FUNCTION PentaRef::GetLprime StokesMacAyeal {{{*/939 void PentaRef::GetLprime StokesMacAyeal(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss){919 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i]; 920 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.; 921 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+2] = 0.; 922 LFS[num_dof*NUMNODESP1_2d*0+num_dof*i+3] = 0.; 923 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.; 924 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i]; 925 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+2] = 0.; 926 LFS[num_dof*NUMNODESP1_2d*1+num_dof*i+3] = 0.; 927 LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = 0.; 928 LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.; 929 LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+2] = L1L2l3[i]; 930 LFS[num_dof*NUMNODESP1_2d*2+num_dof*i+3] = 0.; 931 LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.; 932 LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = 0.; 933 LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+2] = L1L2l3[i]; 934 LFS[num_dof*NUMNODESP1_2d*3+num_dof*i+3] = 0.; 935 } 936 } 937 /*}}}*/ 938 /*FUNCTION PentaRef::GetLprimeFSMacAyeal {{{*/ 939 void PentaRef::GetLprimeFSMacAyeal(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss){ 940 940 /* Compute Lprime matrix. Lprime=[Lp1 Lp2 Lp3] where Lpi is square and of size numdof. 941 941 * For node i, Lpi can be expressed in the actual coordinate system … … 948 948 */ 949 949 int num_dof=2; 950 IssmDouble l1l2l3[NUMNODESP1_2d];950 IssmDouble L1L2l3[NUMNODESP1_2d]; 951 951 IssmDouble dbasis[3][NUMNODESP1]; 952 952 953 /*Get l1l2l3 in actual coordinate system: */954 l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;955 l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;956 l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;953 /*Get L1L2l3 in actual coordinate system: */ 954 L1L2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0; 955 L1L2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0; 956 L1L2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0; 957 957 GetNodalFunctionsP1Derivatives(&dbasis[0][0],xyz_list,gauss); 958 958 959 /*Build Lprime Stokes: */959 /*Build LprimeFS: */ 960 960 for(int i=0;i<3;i++){ 961 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = l1l2l3[i];962 Lprime Stokes[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.;963 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.;964 Lprime Stokes[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = l1l2l3[i];965 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = l1l2l3[i];966 Lprime Stokes[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.;967 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.;968 Lprime Stokes[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = l1l2l3[i];961 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+0] = L1L2l3[i]; 962 LprimeFS[num_dof*NUMNODESP1_2d*0+num_dof*i+1] = 0.; 963 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+0] = 0.; 964 LprimeFS[num_dof*NUMNODESP1_2d*1+num_dof*i+1] = L1L2l3[i]; 965 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+0] = L1L2l3[i]; 966 LprimeFS[num_dof*NUMNODESP1_2d*2+num_dof*i+1] = 0.; 967 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+0] = 0.; 968 LprimeFS[num_dof*NUMNODESP1_2d*3+num_dof*i+1] = L1L2l3[i]; 969 969 } 970 970 } -
issm/trunk-jpl/src/c/classes/Elements/PentaRef.h
r15425 r15564 38 38 void GetSegmentJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussPenta* gauss); 39 39 void GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussPenta* gauss); 40 void GetBMacAyeal Pattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);41 void GetBMacAyeal Stokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);42 void GetB Pattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);43 void GetB Stokes(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);44 void GetB StokesGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);45 void GetBprimeMacAyeal Stokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss);46 void GetBprime Pattyn(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss);47 void GetBprime Stokes(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);48 void GetBprime StokesGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss);40 void GetBMacAyealHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 41 void GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 42 void GetBHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 43 void GetBFS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 44 void GetBFSGLS(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 45 void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussPenta* gauss); 46 void GetBprimeHO(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 47 void GetBprimeFS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss); 48 void GetBprimeFSGLS(IssmDouble* B_prime, IssmDouble* xyz_list, GaussPenta* gauss); 49 49 void GetBprimeVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 50 50 void GetBAdvec(IssmDouble* B_advec, IssmDouble* xyz_list, GaussPenta* gauss); … … 52 52 void GetBVert(IssmDouble* B, IssmDouble* xyz_list, GaussPenta* gauss); 53 53 void GetBprimeAdvec(IssmDouble* Bprime_advec, IssmDouble* xyz_list, GaussPenta* gauss); 54 void GetB PattynFriction(IssmDouble* L, GaussPenta* gauss);55 void GetL Stokes(IssmDouble* LStokes, GaussPenta* gauss);56 void GetLprime Stokes(IssmDouble* LprimeStokes, IssmDouble* xyz_list, GaussPenta* gauss);57 void GetLMacAyeal Stokes(IssmDouble* LMacAyealStokes, GaussPenta* gauss);58 void GetLprimeMacAyeal Stokes(IssmDouble* LprimeMacAyealStokes, IssmDouble* xyz_list, GaussPenta* gauss);59 void GetL StokesMacAyeal(IssmDouble* LStokesMacAyeal, GaussPenta* gauss);60 void GetLprime StokesMacAyeal(IssmDouble* LprimeStokesMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss);54 void GetBHOFriction(IssmDouble* L, GaussPenta* gauss); 55 void GetLFS(IssmDouble* LFS, GaussPenta* gauss); 56 void GetLprimeFS(IssmDouble* LprimeFS, IssmDouble* xyz_list, GaussPenta* gauss); 57 void GetLMacAyealFS(IssmDouble* LMacAyealFS, GaussPenta* gauss); 58 void GetLprimeMacAyealFS(IssmDouble* LprimeMacAyealFS, IssmDouble* xyz_list, GaussPenta* gauss); 59 void GetLFSMacAyeal(IssmDouble* LFSMacAyeal, GaussPenta* gauss); 60 void GetLprimeFSMacAyeal(IssmDouble* LprimeFSMacAyeal, IssmDouble* xyz_list, GaussPenta* gauss); 61 61 void GetInputValue(IssmDouble* pvalue,IssmDouble* plist, GaussPenta* gauss); 62 62 void GetInputValue(IssmDouble* pvalue,IssmDouble* plist,GaussTria* gauss){_error_("only PentaGauss are supported");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r15544 r15564 193 193 Ke=CreateKMatrixDiagnosticMacAyeal(); 194 194 break; 195 case Diagnostic HutterAnalysisEnum:196 Ke=CreateKMatrixDiagnostic Hutter();195 case DiagnosticSIAAnalysisEnum: 196 Ke=CreateKMatrixDiagnosticSIA(); 197 197 break; 198 198 #endif … … 306 306 pe=CreatePVectorDiagnosticMacAyeal(); 307 307 break; 308 case Diagnostic HutterAnalysisEnum:309 pe=CreatePVectorDiagnostic Hutter();308 case DiagnosticSIAAnalysisEnum: 309 pe=CreatePVectorDiagnosticSIA(); 310 310 break; 311 311 #endif … … 423 423 #ifdef _HAVE_DIAGNOSTIC_ 424 424 case DiagnosticHorizAnalysisEnum: 425 Ke=CreateJacobianDiagnostic Macayeal();425 Ke=CreateJacobianDiagnosticSSA(); 426 426 break; 427 427 #endif … … 1201 1201 GetSolutionFromInputsDiagnosticHoriz(solution); 1202 1202 break; 1203 case Diagnostic HutterAnalysisEnum:1204 GetSolutionFromInputsDiagnostic Hutter(solution);1203 case DiagnosticSIAAnalysisEnum: 1204 GetSolutionFromInputsDiagnosticSIA(solution); 1205 1205 break; 1206 1206 #endif … … 1522 1522 InputUpdateFromSolutionDiagnosticHoriz(solution); 1523 1523 break; 1524 case Diagnostic HutterAnalysisEnum:1524 case DiagnosticSIAAnalysisEnum: 1525 1525 InputUpdateFromSolutionDiagnosticHoriz(solution); 1526 1526 break; … … 2343 2343 iomodel->Constant(&progstabilization,PrognosticStabilizationEnum); 2344 2344 iomodel->Constant(&balancestabilization,BalancethicknessStabilizationEnum); 2345 iomodel->Constant(&fe_ssa,FlowequationFeS saEnum);2345 iomodel->Constant(&fe_ssa,FlowequationFeSSAEnum); 2346 2346 iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum); 2347 2347 … … 3055 3055 } 3056 3056 /*}}}*/ 3057 /*FUNCTION Tria::CreateKMatrixDiagnostic Hutter{{{*/3058 ElementMatrix* Tria::CreateKMatrixDiagnostic Hutter(void){3057 /*FUNCTION Tria::CreateKMatrixDiagnosticSIA{{{*/ 3058 ElementMatrix* Tria::CreateKMatrixDiagnosticSIA(void){ 3059 3059 3060 3060 /*Intermediaries*/ … … 3224 3224 } 3225 3225 /*}}}*/ 3226 /*FUNCTION Tria::CreatePVectorDiagnostic Hutter{{{*/3227 ElementVector* Tria::CreatePVectorDiagnostic Hutter(void){3226 /*FUNCTION Tria::CreatePVectorDiagnosticSIA{{{*/ 3227 ElementVector* Tria::CreatePVectorDiagnosticSIA(void){ 3228 3228 3229 3229 /*Intermediaries */ … … 3274 3274 } 3275 3275 /*}}}*/ 3276 /*FUNCTION Tria::CreateJacobianDiagnostic Macayeal{{{*/3277 ElementMatrix* Tria::CreateJacobianDiagnostic Macayeal(void){3276 /*FUNCTION Tria::CreateJacobianDiagnosticSSA{{{*/ 3277 ElementMatrix* Tria::CreateJacobianDiagnosticSSA(void){ 3278 3278 3279 3279 /*Intermediaries */ … … 3382 3382 } 3383 3383 /*}}}*/ 3384 /*FUNCTION Tria::GetSolutionFromInputsDiagnostic Hutter{{{*/3385 void Tria::GetSolutionFromInputsDiagnostic Hutter(Vector<IssmDouble>* solution){3384 /*FUNCTION Tria::GetSolutionFromInputsDiagnosticSIA{{{*/ 3385 void Tria::GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution){ 3386 3386 3387 3387 const int numdof=NDOF2*NUMVERTICES; … … 3494 3494 } 3495 3495 /*}}}*/ 3496 /*FUNCTION Tria::InputUpdateFromSolutionDiagnostic Hutter{{{*/3497 void Tria::InputUpdateFromSolutionDiagnostic Hutter(IssmDouble* solution){3496 /*FUNCTION Tria::InputUpdateFromSolutionDiagnosticSIA {{{*/ 3497 void Tria::InputUpdateFromSolutionDiagnosticSIA(IssmDouble* solution){ 3498 3498 3499 3499 int i; … … 5137 5137 } 5138 5138 /*}}}*/ 5139 /*FUNCTION Tria::CreatePVectorAdjoint Stokes{{{*/5140 ElementVector* Tria::CreatePVectorAdjoint Stokes(void){5139 /*FUNCTION Tria::CreatePVectorAdjointFS{{{*/ 5140 ElementVector* Tria::CreatePVectorAdjointFS(void){ 5141 5141 5142 5142 /*Intermediaries */ … … 5156 5156 5157 5157 /*Initialize Element vector*/ 5158 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters, StokesApproximationEnum);5158 ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,FSApproximationEnum); 5159 5159 5160 5160 /*Retrieve all inputs and parameters*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r15517 r15564 147 147 void GradjZMacAyeal(Vector<IssmDouble>* gradient,int control_index); 148 148 void GradjDragMacAyeal(Vector<IssmDouble>* gradient,int control_index); 149 void GradjDrag Stokes(Vector<IssmDouble>* gradient,int control_index);149 void GradjDragFS(Vector<IssmDouble>* gradient,int control_index); 150 150 void GradjDragGradient(Vector<IssmDouble>* gradient,int weight_index,int control_index); 151 151 void GradjDhDtBalancedthickness(Vector<IssmDouble>* gradient,int control_index); … … 223 223 ElementMatrix* CreateKMatrixDiagnosticMacAyealViscous(void); 224 224 ElementMatrix* CreateKMatrixDiagnosticMacAyealFriction(void); 225 ElementMatrix* CreateKMatrixDiagnostic Hutter(void);225 ElementMatrix* CreateKMatrixDiagnosticSIA(void); 226 226 ElementVector* CreatePVectorDiagnosticMacAyeal(void); 227 227 ElementVector* CreatePVectorDiagnosticMacAyealDrivingStress(void); 228 228 ElementVector* CreatePVectorDiagnosticMacAyealFront(void); 229 ElementVector* CreatePVectorDiagnostic Hutter(void);230 ElementMatrix* CreateJacobianDiagnostic Macayeal(void);229 ElementVector* CreatePVectorDiagnosticSIA(void); 230 ElementMatrix* CreateJacobianDiagnosticSSA(void); 231 231 void GetSolutionFromInputsDiagnosticHoriz(Vector<IssmDouble>* solution); 232 void GetSolutionFromInputsDiagnostic Hutter(Vector<IssmDouble>* solution);232 void GetSolutionFromInputsDiagnosticSIA(Vector<IssmDouble>* solution); 233 233 void InputUpdateFromSolutionDiagnosticHoriz( IssmDouble* solution); 234 void InputUpdateFromSolutionDiagnostic Hutter( IssmDouble* solution);234 void InputUpdateFromSolutionDiagnosticSIA( IssmDouble* solution); 235 235 #endif 236 236 … … 239 239 ElementMatrix* CreateKMatrixAdjointMacAyeal(void); 240 240 ElementVector* CreatePVectorAdjointHoriz(void); 241 ElementVector* CreatePVectorAdjoint Stokes(void);241 ElementVector* CreatePVectorAdjointFS(void); 242 242 ElementVector* CreatePVectorAdjointBalancethickness(void); 243 243 void InputUpdateFromSolutionAdjointBalancethickness( IssmDouble* solution); -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
r15496 r15564 114 114 } 115 115 /*}}}*/ 116 /*FUNCTION TriaRef::GetBMacAyeal Stokes{{{*/117 void TriaRef::GetBMacAyeal Stokes(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){116 /*FUNCTION TriaRef::GetBMacAyealFS {{{*/ 117 void TriaRef::GetBMacAyealFS(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss){ 118 118 119 119 /*Compute B matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. … … 265 265 } 266 266 /*}}}*/ 267 /*FUNCTION TriaRef::GetBprimeMacAyeal Stokes{{{*/268 void TriaRef::GetBprimeMacAyeal Stokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){267 /*FUNCTION TriaRef::GetBprimeMacAyealFS {{{*/ 268 void TriaRef::GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss){ 269 269 /*Compute Bprime matrix. Bprime=[Bprime1 Bprime2 Bprime3] where Bprimei is of size 3*NDOF2. 270 270 * For node i, Bprimei can be expressed in the actual coordinate system -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.h
r15326 r15564 24 24 /*Numerics*/ 25 25 void GetBMacAyeal(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss); 26 void GetBMacAyeal Stokes(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss);26 void GetBMacAyealFS(IssmDouble* B , IssmDouble* xyz_list, GaussTria* gauss); 27 27 void GetBprimeMacAyeal(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss); 28 void GetBprimeMacAyeal Stokes(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss);28 void GetBprimeMacAyealFS(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss); 29 29 void GetBprimePrognostic(IssmDouble* Bprime, IssmDouble* xyz_list, GaussTria* gauss); 30 30 void GetBPrognostic(IssmDouble* B, IssmDouble* xyz_list, GaussTria* gauss);
Note:
See TracChangeset
for help on using the changeset viewer.