Changeset 16949
- Timestamp:
- 11/26/13 09:54:27 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r16940 r16949 830 830 case HOFSApproximationEnum: 831 831 return CreateKMatrixHOFS(element); 832 case SSAFSApproximationEnum: 833 return CreateKMatrixSSAFS(element); 832 834 case NoneApproximationEnum: 833 835 return NULL; … … 3069 3071 3070 3072 /*Coupling (Tiling)*/ 3073 ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSA3d(Element* element){/*{{{*/ 3074 3075 /*compute all stiffness matrices for this element*/ 3076 ElementMatrix* Ke1=CreateKMatrixSSA3dViscous(element); 3077 ElementMatrix* Ke2=CreateKMatrixSSA3dFriction(element); 3078 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 3079 3080 /*clean-up and return*/ 3081 delete Ke1; 3082 delete Ke2; 3083 return Ke; 3084 }/*}}}*/ 3085 ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSA3dFriction(Element* element){/*{{{*/ 3086 3087 return NULL; 3088 }/*}}}*/ 3089 ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSA3dViscous(Element* element){/*{{{*/ 3090 3091 /*Constants*/ 3092 const int numdof2d=2*3; 3093 3094 /*Intermediaries */ 3095 int i,j,approximation; 3096 int dim=3; 3097 IssmDouble Jdet,viscosity,oldviscosity,newviscosity,viscosity_overshoot; 3098 IssmDouble epsilon[5],oldepsilon[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/ 3099 IssmDouble epsilons[6]; //6 for FS 3100 IssmDouble B[3][numdof2d]; 3101 IssmDouble Bprime[3][numdof2d]; 3102 IssmDouble D[3][3]= {0.0}; // material matrix, simple scalar matrix. 3103 IssmDouble D_scalar; 3104 IssmDouble Ke_gg_gaussian[numdof2d][numdof2d]; 3105 IssmDouble *xyz_list = NULL; 3106 3107 /*Find penta on bed as this is a SSA elements: */ 3108 Element* pentabase=element->GetBasalElement(); 3109 Element* basaltria=pentabase->SpawnBasalElement(); 3110 3111 /*Initialize Element matrix*/ 3112 ElementMatrix* Ke=basaltria->NewElementMatrix(SSAApproximationEnum); 3113 element->GetInputValue(&approximation,ApproximationEnum); 3114 3115 /*Retrieve all inputs and parameters*/ 3116 element->GetVerticesCoordinates(&xyz_list); 3117 element->FindParam(&viscosity_overshoot,StressbalanceViscosityOvershootEnum); 3118 Input* vx_input =element->GetInput(VxEnum); _assert_(vx_input); 3119 Input* vy_input =element->GetInput(VyEnum); _assert_(vy_input); 3120 Input* vxold_input=element->GetInput(VxPicardEnum); _assert_(vxold_input); 3121 Input* vyold_input=element->GetInput(VyPicardEnum); _assert_(vyold_input); 3122 Input* vz_input =element->GetInput(VzEnum); _assert_(vz_input); 3123 3124 /* Start looping on the number of gaussian points: */ 3125 Gauss* gauss=element->NewGauss(5); 3126 Gauss* gauss_tria=new GaussTria(); 3127 for(int ig=gauss->begin();ig<gauss->end();ig++){ 3128 3129 gauss->GaussPoint(ig); 3130 gauss->SynchronizeGaussBase(gauss_tria); 3131 3132 element->JacobianDeterminant(&Jdet, xyz_list,gauss); 3133 this->GetBSSA(&B[0][0],basaltria, xyz_list, gauss_tria); 3134 this->GetBSSAprime(&Bprime[0][0], basaltria,xyz_list, gauss_tria); 3135 3136 if(approximation==SSAHOApproximationEnum){ 3137 element->ViscosityHO(&viscosity,xyz_list,gauss,vx_input,vy_input); 3138 element->ViscosityHO(&oldviscosity,xyz_list,gauss,vxold_input,vyold_input); 3139 newviscosity=viscosity+viscosity_overshoot*(viscosity-oldviscosity); 3140 } 3141 else if (approximation==SSAFSApproximationEnum){ 3142 element->ViscosityFS(&newviscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input); 3143 } 3144 else _error_("approximation " << approximation << " (" << EnumToStringx(approximation) << ") not supported yet"); 3145 3146 D_scalar=2*newviscosity*gauss->weight*Jdet; 3147 for (i=0;i<3;i++) D[i][i]=D_scalar; 3148 3149 TripleMultiply( &B[0][0],3,numdof2d,1, 3150 &D[0][0],3,3,0, 3151 &Bprime[0][0],3,numdof2d,0, 3152 &Ke_gg_gaussian[0][0],0); 3153 3154 for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof2d+j]+=Ke_gg_gaussian[i][j]; 3155 } 3156 3157 /*Transform Coordinate System*/ 3158 basaltria->TransformStiffnessMatrixCoord(Ke,XYEnum); 3159 3160 /*Clean up and return*/ 3161 xDelete<IssmDouble>(xyz_list); 3162 delete basaltria->material; 3163 delete basaltria; 3164 delete gauss_tria; 3165 delete gauss; 3166 return Ke; 3167 3168 }/*}}}*/ 3071 3169 ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOFS(Element* element){/*{{{*/ 3072 3170 … … 3094 3192 ElementMatrix* Ke2=CreateKMatrixHO(element); 3095 3193 ElementMatrix* Ke3=CreateKMatrixCouplingSSAHO(element); 3194 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); 3195 3196 /*clean-up and return*/ 3197 delete Ke1; 3198 delete Ke2; 3199 delete Ke3; 3200 return Ke; 3201 }/*}}}*/ 3202 ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSAFS(Element* element){/*{{{*/ 3203 3204 /*compute all stiffness matrices for this element*/ 3205 ElementMatrix* Ke1=CreateKMatrixFS(element); 3206 int indices[3]={18,19,20}; 3207 Ke1->StaticCondensation(3,&indices[0]); 3208 int init = element->FiniteElement(); 3209 element->SetTemporaryElementType(P1Enum); 3210 ElementMatrix* Ke2=CreateKMatrixSSA3d(element); 3211 element->SetTemporaryElementType(init); 3212 ElementMatrix* Ke3=CreateKMatrixCouplingSSAFS(element); 3096 3213 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3); 3097 3214 … … 3343 3460 xDelete<Node*>(node_list); 3344 3461 xDelete<int>(cs_list); 3462 return Ke; 3463 3464 }/*}}}*/ 3465 ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAFS(Element* element){/*{{{*/ 3466 3467 /*compute all stiffness matrices for this element*/ 3468 ElementMatrix* Ke1=CreateKMatrixCouplingSSAFSViscous(element); 3469 ElementMatrix* Ke2=CreateKMatrixCouplingSSAFSFriction(element); 3470 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 3471 3472 /*clean-up and return*/ 3473 delete Ke1; 3474 delete Ke2; 3475 return Ke; 3476 }/*}}}*/ 3477 ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAFSFriction(Element* element){/*{{{*/ 3478 return NULL; 3479 3480 }/*}}}*/ 3481 ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingSSAFSViscous(Element* element){/*{{{*/ 3482 3483 /*Constants*/ 3484 const int numdofm = 2 *3; 3485 const int numdofs = 4 *6+ 3; 3486 const int numdoftotal = 2 *numdofm+numdofs; 3487 3488 /*Intermediaries */ 3489 int i,j; 3490 int dim=3; 3491 IssmDouble Jdet,viscosity,FSreconditioning,D_scalar; 3492 IssmDouble B[4][numdofs]; 3493 IssmDouble Bprime[4][numdofm]; 3494 IssmDouble B2[3][numdofm]; 3495 IssmDouble Bprime2[3][numdofs]; 3496 IssmDouble D[4][4]={0.0}; // material matrix, simple scalar matrix. 3497 IssmDouble D2[3][3]={0.0}; // material matrix, simple scalar matrix. 3498 IssmDouble Ke_gg[numdofs][numdofm]={0.0}; //local element stiffness matrix 3499 IssmDouble Ke_gg2[numdofm][numdofs]={0.0}; //local element stiffness matrix 3500 IssmDouble Ke_gg_gaussian[numdofs][numdofm]; //stiffness matrix evaluated at the gaussian point. 3501 IssmDouble Ke_gg_gaussian2[numdofm][numdofs]; //stiffness matrix evaluated at the gaussian point. 3502 IssmDouble *xyz_list = NULL; 3503 Node *node_list[20]; 3504 3505 /*Find penta on bed as FS must be coupled to the dofs on the bed: */ 3506 Element* pentabase=element->GetBasalElement(); 3507 Element* basaltria=pentabase->SpawnBasalElement(); 3508 3509 int vnumnodes = element->GetNumberOfNodesVelocity(); 3510 int pnumnodes = element->GetNumberOfNodesPressure(); 3511 int numnodes = 2*vnumnodes-1+pnumnodes; 3512 3513 /*Prepare node list*/ 3514 int* cs_list = xNew<int>(2*vnumnodes+pnumnodes); 3515 for(i=0;i<vnumnodes-1;i++){ 3516 node_list[i] = pentabase->GetNode(i); 3517 cs_list[i] = XYEnum; 3518 } 3519 for(i=0;i<vnumnodes;i++){ 3520 node_list[i+vnumnodes-1] = element->GetNode(i); 3521 cs_list[i+vnumnodes-1] = XYZEnum; 3522 } 3523 for(i=0;i<pnumnodes;i++){ 3524 node_list[2*vnumnodes-1+i] = element->GetNode(vnumnodes+i); 3525 cs_list[2*vnumnodes-1+i] = PressureEnum; 3526 } 3527 3528 /*Initialize Element matrix and return if necessary*/ 3529 ElementMatrix* Ke1=element ->NewElementMatrix(FSvelocityEnum); 3530 ElementMatrix* Ke2=pentabase->NewElementMatrix(SSAApproximationEnum); 3531 ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2); 3532 delete Ke1; delete Ke2; 3533 3534 /* Get node coordinates and dof list: */ 3535 element->GetVerticesCoordinates(&xyz_list); 3536 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 3537 Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input); 3538 Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input); 3539 Input* vz_input=element->GetInput(VzEnum); _assert_(vz_input); 3540 3541 /* Start looping on the number of gaussian points: */ 3542 Gauss* gauss=element->NewGauss(5); 3543 Gauss* gauss_tria=new GaussTria(); 3544 for(int ig=gauss->begin();ig<gauss->end();ig++){ 3545 3546 gauss->GaussPoint(ig); 3547 gauss->SynchronizeGaussBase(gauss_tria); 3548 3549 element->JacobianDeterminant(&Jdet, xyz_list,gauss); 3550 this->GetBSSAFS(&B[0][0],element,xyz_list, gauss); 3551 this->GetBprimeSSAFSTria(&Bprime[0][0], basaltria,xyz_list, gauss_tria); 3552 this->GetBSSAFSTria(&B2[0][0], basaltria,xyz_list, gauss_tria); 3553 this->GetBprimeSSAFS(&Bprime2[0][0], element,xyz_list, gauss); 3554 3555 element->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input); 3556 3557 D_scalar=2*viscosity*gauss->weight*Jdet; 3558 for (i=0;i<3;i++) D[i][i]=D_scalar; 3559 D[3][3]=-gauss->weight*Jdet*FSreconditioning; 3560 for (i=0;i<3;i++) D2[i][i]=D_scalar; 3561 3562 TripleMultiply( &B[0][0],4,numdofs,1, 3563 &D[0][0],4,4,0, 3564 &Bprime[0][0],4,numdofm,0, 3565 &Ke_gg_gaussian[0][0],0); 3566 3567 TripleMultiply( &B2[0][0],3,numdofm,1, 3568 &D2[0][0],3,3,0, 3569 &Bprime2[0][0],3,numdofs,0, 3570 &Ke_gg_gaussian2[0][0],0); 3571 3572 for( i=0; i<numdofs; i++) for(j=0;j<numdofm; j++) Ke_gg[i][j]+=Ke_gg_gaussian[i][j]; 3573 for( i=0; i<numdofm; i++) for(j=0;j<numdofs; j++) Ke_gg2[i][j]+=Ke_gg_gaussian2[i][j]; 3574 } 3575 for(i=0;i<numdofs;i++) for(j=0;j<numdofm;j++) Ke->values[i*numdoftotal+j+numdofs]+=Ke_gg[i][j]; 3576 for(i=0;i<numdofm;i++) for(j=0;j<numdofs;j++) Ke->values[(i+numdofs)*numdoftotal+j]+=Ke_gg2[i][j]; 3577 3578 /*Transform Coordinate System*/ 3579 element->TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list); 3580 3581 /*Clean-up and return*/ 3582 xDelete<int>(cs_list); 3583 xDelete<IssmDouble>(xyz_list); 3584 delete basaltria->material; delete basaltria; 3585 delete gauss; 3586 delete gauss_tria; 3345 3587 return Ke; 3346 3588 … … 3756 3998 xDelete<IssmDouble>(dbasis); 3757 3999 }/*}}}*/ 4000 void StressbalanceAnalysis::GetBSSAFS(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 4001 /*Compute B matrix. B=[B1 B2 B3 B4 B5 B6] where Bi is of size 5*NDOF2. 4002 * For node i, Bi can be expressed in the actual coordinate system 4003 * by: 4004 * Bi=[ dh/dx 0 0 0 ] 4005 * [ 0 dh/dy 0 0 ] 4006 * [ 1/2*dh/dy 1/2*dh/dx 0 0 ] 4007 * [ 0 0 0 h ] 4008 * where h is the interpolation function for node i. 4009 * 4010 * We assume B has been allocated already, of size: 5x(NDOF2*NUMNODESP1) 4011 */ 4012 4013 int i; 4014 IssmDouble dbasismini[3][7]; 4015 IssmDouble basis[6]; 4016 4017 /*Get dbasis in actual coordinate system: */ 4018 element->NodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss); 4019 element->NodalFunctionsP1(basis,gauss); 4020 4021 /*Build B: */ 4022 for(i=0;i<6;i++){ 4023 B[(3*7+6)*0+3*i+0] = dbasismini[0][i]; 4024 B[(3*7+6)*0+3*i+1] = 0.; 4025 B[(3*7+6)*0+3*i+2] = 0.; 4026 B[(3*7+6)*1+3*i+0] = 0.; 4027 B[(3*7+6)*1+3*i+1] = dbasismini[1][i]; 4028 B[(3*7+6)*1+3*i+2] = 0.; 4029 B[(3*7+6)*2+3*i+0] = 0.5*dbasismini[1][i]; 4030 B[(3*7+6)*2+3*i+1] = 0.5*dbasismini[0][i]; 4031 B[(3*7+6)*2+3*i+2] = 0.; 4032 B[(3*7+6)*3+3*i+0] = 0.; 4033 B[(3*7+6)*3+3*i+1] = 0.; 4034 B[(3*7+6)*3+3*i+2] = 0.; 4035 } 4036 for(i=0;i<1;i++){ 4037 B[(3*7+6)*0+3*(6+i)+0] = 0.; 4038 B[(3*7+6)*0+3*(6+i)+1] = 0.; 4039 B[(3*7+6)*0+3*(6+i)+2] = 0.; 4040 B[(3*7+6)*1+3*(6+i)+0] = 0.; 4041 B[(3*7+6)*1+3*(6+i)+1] = 0.; 4042 B[(3*7+6)*1+3*(6+i)+2] = 0.; 4043 B[(3*7+6)*2+3*(6+i)+0] = 0.; 4044 B[(3*7+6)*2+3*(6+i)+1] = 0.; 4045 B[(3*7+6)*2+3*(6+i)+2] = 0.; 4046 B[(3*7+6)*3+3*(6+i)+0] = 0.; 4047 B[(3*7+6)*3+3*(6+i)+1] = 0.; 4048 B[(3*7+6)*3+3*(6+i)+2] = 0.; 4049 } 4050 4051 for(i=0;i<6;i++){ //last column not for the bubble function 4052 B[(3*7+6)*0+7*3+i] = 0; 4053 B[(3*7+6)*1+7*3+i] = 0; 4054 B[(3*7+6)*2+7*3+i] = 0; 4055 B[(3*7+6)*3+7*3+i] = basis[i]; 4056 } 4057 }/*}}}*/ 4058 void StressbalanceAnalysis::GetBprimeSSAFS(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 4059 /*Compute Bprime matrix. Bprime=[Bprime1 Bprime2 Bprime3 Bprime4 Bprime5 Bprime6] where Bprimei is of size 5*NDOF2. 4060 * For node i, Bprimei can be expressed in the actual coordinate system 4061 * by: 4062 * Bprimei=[ 2*dh/dx dh/dy 0 0 ] 4063 * [ dh/dx 2*dh/dy 0 0 ] 4064 * [ dh/dy dh/dx 0 0 ] 4065 * where h is the interpolation function for node i. 4066 * 4067 * We assume Bprime has been allocated already, of size: 5x(NDOF2*NUMNODESP1) 4068 */ 4069 4070 int i; 4071 IssmDouble dbasismini[3][7]; 4072 4073 /*Get dbasis in actual coordinate system: */ 4074 element->NodalFunctionsMINIDerivatives(&dbasismini[0][0],xyz_list, gauss); 4075 4076 /*Build Bprime: */ 4077 for(i=0;i<6;i++){ 4078 Bprime[(3*7+6)*0+3*i+0] = 2.*dbasismini[0][i]; 4079 Bprime[(3*7+6)*0+3*i+1] = dbasismini[1][i]; 4080 Bprime[(3*7+6)*0+3*i+2] = 0.; 4081 Bprime[(3*7+6)*1+3*i+0] = dbasismini[0][i]; 4082 Bprime[(3*7+6)*1+3*i+1] = 2.*dbasismini[1][i]; 4083 Bprime[(3*7+6)*1+3*i+2] = 0.; 4084 Bprime[(3*7+6)*2+3*i+0] = dbasismini[1][i]; 4085 Bprime[(3*7+6)*2+3*i+1] = dbasismini[0][i]; 4086 Bprime[(3*7+6)*2+3*i+2] = 0.; 4087 } 4088 4089 for(i=0;i<1;i++){ //Add zeros for the bubble function 4090 Bprime[(3*7+6)*0+3*(6+i)+0] = 0.; 4091 Bprime[(3*7+6)*0+3*(6+i)+1] = 0.; 4092 Bprime[(3*7+6)*0+3*(6+i)+2] = 0.; 4093 Bprime[(3*7+6)*1+3*(6+i)+0] = 0.; 4094 Bprime[(3*7+6)*1+3*(6+i)+1] = 0.; 4095 Bprime[(3*7+6)*1+3*(6+i)+2] = 0.; 4096 Bprime[(3*7+6)*2+3*(6+i)+0] = 0.; 4097 Bprime[(3*7+6)*2+3*(6+i)+1] = 0.; 4098 Bprime[(3*7+6)*2+3*(6+i)+2] = 0.; 4099 } 4100 4101 for(i=0;i<6;i++){ //last column not for the bubble function 4102 Bprime[(3*7+6)*0+7*3+i] = 0.; 4103 Bprime[(3*7+6)*1+7*3+i] = 0.; 4104 Bprime[(3*7+6)*2+7*3+i] = 0.; 4105 } 4106 }/*}}}*/ 4107 void StressbalanceAnalysis::GetBSSAFSTria(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 4108 /*Compute B matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. 4109 * For node i, Bi can be expressed in the actual coordinate system 4110 * by: 4111 * Bi=[ dN/dx 0 ] 4112 * [ 0 dN/dy ] 4113 * [ 1/2*dN/dy 1/2*dN/dx ] 4114 * where N is the finiteelement function for node i. 4115 * 4116 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes) 4117 */ 4118 4119 /*Fetch number of nodes for this finite element*/ 4120 int numnodes = element->GetNumberOfNodes(); 4121 4122 /*Get nodal functions derivatives*/ 4123 IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes); 4124 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 4125 4126 /*Build B': */ 4127 for(int i=0;i<numnodes;i++){ 4128 B[2*numnodes*0+2*i+0] = dbasis[0*numnodes+i]; 4129 B[2*numnodes*0+2*i+1] = 0.; 4130 B[2*numnodes*1+2*i+0] = 0.; 4131 B[2*numnodes*1+2*i+1] = dbasis[1*numnodes+i]; 4132 B[2*numnodes*2+2*i+0] = 0.5*dbasis[1*numnodes+i]; 4133 B[2*numnodes*2+2*i+1] = 0.5*dbasis[0*numnodes+i]; 4134 } 4135 4136 /*Clean-up*/ 4137 xDelete<IssmDouble>(dbasis); 4138 }/*}}}*/ 4139 void StressbalanceAnalysis::GetBprimeSSAFSTria(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 4140 /*Compute Bprime matrix. Bprime=[Bprime1 Bprime2 Bprime3] where Bprimei is of size 3*NDOF2. 4141 * For node i, Bprimei can be expressed in the actual coordinate system 4142 * by: 4143 * Bprimei=[ dN/dx 0 ] 4144 * [ 0 dN/dy ] 4145 * [ dN/dy dN/dx ] 4146 N [ dN/dx dN/dy ] 4147 * where N is the finiteelement function for node i. 4148 * 4149 * We assume Bprime has been allocated already, of size: 3x(NDOF2*numnodes) 4150 */ 4151 4152 /*Fetch number of nodes for this finite element*/ 4153 int numnodes = element->GetNumberOfNodes(); 4154 4155 /*Get nodal functions*/ 4156 IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes); 4157 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 4158 4159 /*Build Bprime: */ 4160 for(int i=0;i<numnodes;i++){ 4161 Bprime[2*numnodes*0+2*i+0] = dbasis[0*numnodes+i]; 4162 Bprime[2*numnodes*0+2*i+1] = 0.; 4163 Bprime[2*numnodes*1+2*i+0] = 0.; 4164 Bprime[2*numnodes*1+2*i+1] = dbasis[1*numnodes+i]; 4165 Bprime[2*numnodes*2+2*i+0] = dbasis[1*numnodes+i]; 4166 Bprime[2*numnodes*2+2*i+1] = dbasis[0*numnodes+i]; 4167 Bprime[2*numnodes*3+2*i+0] = dbasis[0*numnodes+i]; 4168 Bprime[2*numnodes*3+2*i+1] = dbasis[1*numnodes+i]; 4169 } 4170 4171 /*Clean-up*/ 4172 xDelete<IssmDouble>(dbasis); 4173 }/*}}}*/ 3758 4174 void StressbalanceAnalysis::InputUpdateFromSolutionHOFS(IssmDouble* solution,Element* element){/*{{{*/ 3759 4175 -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r16940 r16949 71 71 void InputUpdateFromSolutionFS(IssmDouble* solution,Element* element); 72 72 /*Coupling*/ 73 ElementMatrix* CreateKMatrixSSA3d(Element* element); 74 ElementMatrix* CreateKMatrixSSA3dFriction(Element* element); 75 ElementMatrix* CreateKMatrixSSA3dViscous(Element* element); 73 76 ElementMatrix* CreateKMatrixHOFS(Element* element); 74 77 ElementMatrix* CreateKMatrixSSAHO(Element* element); 78 ElementMatrix* CreateKMatrixSSAFS(Element* element); 75 79 ElementMatrix* CreateKMatrixCouplingHOFS(Element* element); 76 80 ElementMatrix* CreateKMatrixCouplingSSAHO(Element* element); 77 81 ElementMatrix* CreateKMatrixCouplingSSAHOFriction(Element* element); 78 82 ElementMatrix* CreateKMatrixCouplingSSAHOViscous(Element* element); 83 ElementMatrix* CreateKMatrixCouplingSSAFS(Element* element); 84 ElementMatrix* CreateKMatrixCouplingSSAFSFriction(Element* element); 85 ElementMatrix* CreateKMatrixCouplingSSAFSViscous(Element* element); 79 86 ElementVector* CreatePVectorSSAHO(Element* element); 80 87 ElementVector* CreatePVectorSSAFS(Element* element); … … 87 94 ElementVector* CreatePVectorCouplingHOFSViscous(Element* element); 88 95 void GetBSSAHO(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 96 void GetBSSAFS(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 97 void GetBprimeSSAFS(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss); 98 void GetBSSAFSTria(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 99 void GetBprimeSSAFSTria(IssmDouble* Bprime,Element* element,IssmDouble* xyz_list,Gauss* gauss); 89 100 void InputUpdateFromSolutionHOFS(IssmDouble* solution,Element* element); 90 101 void InputUpdateFromSolutionSSAFS(IssmDouble* solution,Element* element); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16947 r16949 120 120 virtual void NodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0; 121 121 virtual void NodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0; 122 virtual void NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0; 122 123 virtual void NodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss)=0; 123 124 virtual void NormalSection(IssmDouble* normal,IssmDouble* xyz_list)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r16947 r16949 2477 2477 _assert_(gauss->Enum()==GaussPentaEnum); 2478 2478 this->GetNodalFunctionsP1Derivatives(dbasis,xyz_list,(GaussPenta*)gauss); 2479 2480 } 2481 /*}}}*/ 2482 /*FUNCTION Penta::NodalFunctionsMINIDerivatives{{{*/ 2483 void Penta::NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss){ 2484 2485 _assert_(gauss->Enum()==GaussPentaEnum); 2486 this->GetNodalFunctionsMINIDerivatives(dbasis,xyz_list,(GaussPenta*)gauss); 2479 2487 2480 2488 } -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16947 r16949 254 254 void NodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 255 255 void NodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 256 void NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 256 257 void NodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 257 258 void NodalFunctionsVelocity(IssmDouble* basis,Gauss* gauss); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r16947 r16949 113 113 void NodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 114 114 void NodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");}; 115 void NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");}; 115 116 void NodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");}; 116 117 bool NoIceInElement(){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16947 r16949 287 287 void NodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 288 288 void NodalFunctionsP1Derivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");}; 289 void NodalFunctionsMINIDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss){_error_("not implemented yet");}; 289 290 void NodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,Gauss* gauss); 290 291 void NodalFunctionsVelocity(IssmDouble* basis,Gauss* gauss);
Note:
See TracChangeset
for help on using the changeset viewer.