Changeset 10514


Ignore:
Timestamp:
11/07/11 15:07:08 (13 years ago)
Author:
Mathieu Morlighem
Message:

cleaner Stokes friction

Location:
issm/trunk/src/c/objects/Elements
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r10509 r10514  
    59855985        /*compute all stiffness matrices for this element*/
    59865986        ElementMatrix* Ke1=CreateKMatrixDiagnosticStokesViscous();
    5987         //ElementMatrix* Ke2=CreateKMatrixDiagnosticStokesFriction();
    5988         ElementMatrix* Ke2=CreateKMatrixDiagnosticStokesFriction2();
     5987        ElementMatrix* Ke2=CreateKMatrixDiagnosticStokesFriction();
    59895988        ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2);
    59905989
     
    60566055}
    60576056/*}}}*/
    6058 /*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction {{{1*/
     6057/*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction{{{1*/
    60596058ElementMatrix* Penta::CreateKMatrixDiagnosticStokesFriction(void){
    60606059
     
    60666065        int        i,j,ig;
    60676066        int        analysis_type,approximation;
    6068         double     stokesreconditioning;
    6069         double     viscosity,alpha2_gauss,Jdet2d;
    6070         double    bed_normal[3];
     6067        double     alpha2,Jdet2d;
     6068        double     stokesreconditioning,viscosity;
    60716069        double     epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
    60726070        double     xyz_list[NUMVERTICES][3];
    60736071        double    xyz_list_tria[NUMVERTICES2D][3];
    6074         double     LStokes[14][numdof2d];
    6075         double     LprimeStokes[14][numdof2d];
    6076         double     DLStokes[14][14]={0.0};
     6072        double     LStokes[2][numdof2d];
     6073        double     DLStokes[2][2]={0.0};
    60776074        double     Ke_drag_gaussian[numdof2d][numdof2d];
    60786075        Friction*  friction=NULL;
     
    61046101                GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
    61056102                GetLStokes(&LStokes[0][0], gauss);
    6106                 GetLprimeStokes(&LprimeStokes[0][0], &xyz_list[0][0], gauss);
    61076103
    61086104                this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
    61096105                matice->GetViscosity3dStokes(&viscosity,&epsilon[0]);
    61106106
    6111                 BedNormal(&bed_normal[0],xyz_list_tria);
    6112                 friction->GetAlpha2(&alpha2_gauss, gauss,VxEnum,VyEnum,VzEnum);
    6113 
    6114                 DLStokes[0][0]=alpha2_gauss*gauss->weight*Jdet2d;
    6115                 DLStokes[1][1]=alpha2_gauss*gauss->weight*Jdet2d;
    6116                 DLStokes[2][2]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
    6117                 DLStokes[3][3]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
    6118                 DLStokes[4][4]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[0]*bed_normal[2];
    6119                 DLStokes[5][5]=-alpha2_gauss*gauss->weight*Jdet2d*bed_normal[1]*bed_normal[2];
    6120                 DLStokes[6][6]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0];
    6121                 DLStokes[7][7]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1];
    6122                 DLStokes[8][8]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[2];
    6123                 DLStokes[9][9]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[0]/2.0;
    6124                 DLStokes[10][10]=-2*viscosity*gauss->weight*Jdet2d*bed_normal[1]/2.0;
    6125                 DLStokes[11][11]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[0];
    6126                 DLStokes[12][12]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[1];
    6127                 DLStokes[13][13]=stokesreconditioning*gauss->weight*Jdet2d*bed_normal[2];
    6128 
    6129                 TripleMultiply( &LStokes[0][0],14,numdof2d,1,
    6130                                         &DLStokes[0][0],14,14,0,
    6131                                         &LprimeStokes[0][0],14,numdof2d,0,
     6107                friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
     6108
     6109                DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
     6110                DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
     6111
     6112                TripleMultiply( &LStokes[0][0],2,numdof2d,1,
     6113                                        &DLStokes[0][0],2,2,0,
     6114                                        &LStokes[0][0],2,numdof2d,0,
    61326115                                        &Ke_drag_gaussian[0][0],0);
    61336116
     
    61356118        }
    61366119
    6137 
    6138         /*Transform Coordinate System*/
    6139         TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,NDOF4);
    6140 
     6120        /*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
     6121        //TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,NDOF4);
     6122       
    61416123        /*Clean up and return*/
    61426124        delete gauss;
    61436125        delete friction;
    6144         return Ke;
    6145 }
    6146 /*}}}*/
    6147 /*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction2{{{1*/
    6148 ElementMatrix* Penta::CreateKMatrixDiagnosticStokesFriction2(void){
    6149 
    6150         /*Constants*/
    6151         const int numdof=NUMVERTICES*NDOF4;
    6152         const int numdof2d=NUMVERTICES2D*NDOF4;
    6153 
    6154         /*Intermediaries */
    6155         int        i,j,ig;
    6156         int        analysis_type,approximation;
    6157         double     alpha2,Jdet2d;
    6158         double     stokesreconditioning,viscosity;
    6159         double     epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
    6160         double     xyz_list[NUMVERTICES][3];
    6161         double    xyz_list_tria[NUMVERTICES2D][3];
    6162         double     LStokes2[2][numdof2d];
    6163         //double     LprimeStokes2[4][numdof2d];
    6164         double     DLStokes[2][2]={0.0};
    6165         double     Ke_drag_gaussian[numdof2d][numdof2d];
    6166         Friction*  friction=NULL;
    6167         GaussPenta *gauss=NULL;
    6168 
    6169         /*If on water or not Stokes, skip stiffness: */
    6170         inputs->GetInputValue(&approximation,ApproximationEnum);
    6171         if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return NULL;
    6172         ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
    6173 
    6174         /*Retrieve all inputs and parameters*/
    6175         GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
    6176         parameters->FindParam(&analysis_type,AnalysisTypeEnum);
    6177         parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
    6178         Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
    6179         Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
    6180         Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
    6181         for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
    6182 
    6183         /*build friction object, used later on: */
    6184         friction=new Friction("3d",inputs,matpar,analysis_type);
    6185 
    6186         /* Start  looping on the number of gaussian points: */
    6187         gauss=new GaussPenta(0,1,2,2);
    6188         for (ig=gauss->begin();ig<gauss->end();ig++){
    6189 
    6190                 gauss->GaussPoint(ig);
    6191 
    6192                 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
    6193                 GetLStokes3(&LStokes2[0][0], gauss);
    6194                 //GetLprimeStokes2(&LprimeStokes2[0][0], &xyz_list[0][0], gauss);
    6195 
    6196                 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
    6197                 matice->GetViscosity3dStokes(&viscosity,&epsilon[0]);
    6198 
    6199                 friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
    6200 
    6201                 DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
    6202                 DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
    6203                 //DLStokes[2][2] = +2*viscosity*gauss->weight*Jdet2d;
    6204                 //DLStokes[3][3] = -stokesreconditioning*gauss->weight*Jdet2d;
    6205 
    6206                 //TripleMultiply( &LStokes2[0][0],4,numdof2d,1,
    6207                 //                      &DLStokes[0][0],4,4,0,
    6208                 //                      &LprimeStokes2[0][0],4,numdof2d,0,
    6209                 //                      &Ke_drag_gaussian[0][0],0);
    6210                 TripleMultiply( &LStokes2[0][0],2,numdof2d,1,
    6211                                         &DLStokes[0][0],2,2,0,
    6212                                         &LStokes2[0][0],2,numdof2d,0,
    6213                                         &Ke_drag_gaussian[0][0],0);
    6214 
    6215                 for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof+j]+=Ke_drag_gaussian[i][j];
    6216         }
    6217 
    6218         /*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
    6219         //TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,NDOF4);
    6220        
    6221         //printf("New:\n");
    6222         //printarray(&Ke_drag_gaussian[0][0],numdof2d,numdof2d);
    6223         //printf("Old:\n");
    6224         //Ke=CreateKMatrixDiagnosticStokesFriction();
    6225         //_error_("STOP");
    6226         //if(id==1) printarray(Ke->values,4,Ke->ncols);
    6227         //if(id==1) printarray(Ke->values,1,9);
    6228 
    6229         /*Clean up and return*/
    6230         delete gauss;
    6231         delete friction;
    6232 
    6233         //return CreateKMatrixDiagnosticStokesFriction();
    62346126        return Ke;
    62356127}
  • issm/trunk/src/c/objects/Elements/Penta.h

    r10480 r10514  
    223223                ElementMatrix* CreateKMatrixDiagnosticStokesViscous(void);
    224224                ElementMatrix* CreateKMatrixDiagnosticStokesFriction(void);
    225                 ElementMatrix* CreateKMatrixDiagnosticStokesFriction2(void);
    226225                ElementMatrix* CreateKMatrixDiagnosticVert(void);
    227226                ElementMatrix* CreateKMatrixDiagnosticVertVolume(void);
  • issm/trunk/src/c/objects/Elements/PentaRef.cpp

    r10480 r10514  
    555555}
    556556/*}}}*/
    557 /*FUNCTION PentaRef::GetLStokes {{{1*/
     557/*FUNCTION PentaRef::GetLStokes{{{1*/
    558558void PentaRef::GetLStokes(double* LStokes, GaussPenta* gauss){
    559559        /*
     
    561561         * For node i, Li can be expressed in the actual coordinate system
    562562         * by:
    563          *       Li=[ h    0    0   0]
    564          *                    [ 0    h    0   0]
    565          *                    [ 0    0    h   0]
    566          *                    [ 0    0    h   0]
    567          *                    [ h    0    0   0]
    568          *                    [ 0    h    0   0]
    569          *                    [ h    0    0   0]
    570          *                    [ 0    h    0   0]
    571          *                    [ 0    0    h   0]
    572          *                    [ 0    0    h   0]
    573          *                    [ 0    0    h   0]
    574          *                    [ h    0    0   0]
    575          *                    [ 0    h    0   0]
    576          *                    [ 0    0    h   0]
    577          * where h is the interpolation function for node i.
    578          */
    579 
    580         int i;
    581         int num_dof=4;
    582 
     563         *       Li=[ h 0 ]
     564         *                    [ 0 h ]
     565         *                    [ 0 0 ]
     566         *                    [ 0 0 ]
     567         * where h is the interpolation function for node i.
     568         */
     569
     570        const int num_dof=4;
    583571        double l1l2l3[NUMNODESP1_2d];
    584 
    585572
    586573        /*Get l1l2l3 in actual coordinate system: */
     
    590577
    591578        /*Build LStokes: */
    592         for (i=0;i<3;i++){
    593                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
    594                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0;
    595                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0;
    596                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0;
    597                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i)=0;
    598                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
    599                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0;
    600                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0;
    601                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i)=0;
    602                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0;
    603                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=l1l2l3[i];
    604                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0;
    605                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i)=0;
    606                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0;
    607                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=l1l2l3[i];
    608                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=0;
    609                 *(LStokes+num_dof*NUMNODESP1_2d*4+num_dof*i)=l1l2l3[i];
    610                 *(LStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+1)=0;
    611                 *(LStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+2)=0;
    612                 *(LStokes+num_dof*NUMNODESP1_2d*4+num_dof*i+3)=0;
    613                 *(LStokes+num_dof*NUMNODESP1_2d*5+num_dof*i)=0;
    614                 *(LStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+1)=l1l2l3[i];
    615                 *(LStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+2)=0;
    616                 *(LStokes+num_dof*NUMNODESP1_2d*5+num_dof*i+3)=0;
    617                 *(LStokes+num_dof*NUMNODESP1_2d*6+num_dof*i)=l1l2l3[i];
    618                 *(LStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+1)=0;
    619                 *(LStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+2)=0;
    620                 *(LStokes+num_dof*NUMNODESP1_2d*6+num_dof*i+3)=0;
    621                 *(LStokes+num_dof*NUMNODESP1_2d*7+num_dof*i)=0;
    622                 *(LStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+1)=l1l2l3[i];
    623                 *(LStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+2)=0;
    624                 *(LStokes+num_dof*NUMNODESP1_2d*7+num_dof*i+3)=0;
    625                 *(LStokes+num_dof*NUMNODESP1_2d*8+num_dof*i)=0;
    626                 *(LStokes+num_dof*NUMNODESP1_2d*8+num_dof*i+1)=0;
    627                 *(LStokes+num_dof*NUMNODESP1_2d*8+num_dof*i+2)=l1l2l3[i];
    628                 *(LStokes+num_dof*NUMNODESP1_2d*8+num_dof*i+3)=0;
    629                 *(LStokes+num_dof*NUMNODESP1_2d*9+num_dof*i)=0;
    630                 *(LStokes+num_dof*NUMNODESP1_2d*9+num_dof*i+1)=0;
    631                 *(LStokes+num_dof*NUMNODESP1_2d*9+num_dof*i+2)=l1l2l3[i];
    632                 *(LStokes+num_dof*NUMNODESP1_2d*9+num_dof*i+3)=0;
    633                 *(LStokes+num_dof*NUMNODESP1_2d*10+num_dof*i)=0;
    634                 *(LStokes+num_dof*NUMNODESP1_2d*10+num_dof*i+1)=0;
    635                 *(LStokes+num_dof*NUMNODESP1_2d*10+num_dof*i+2)=l1l2l3[i];
    636                 *(LStokes+num_dof*NUMNODESP1_2d*10+num_dof*i+3)=0;
    637                 *(LStokes+num_dof*NUMNODESP1_2d*11+num_dof*i)=l1l2l3[i];
    638                 *(LStokes+num_dof*NUMNODESP1_2d*11+num_dof*i+1)=0;
    639                 *(LStokes+num_dof*NUMNODESP1_2d*11+num_dof*i+2)=0;
    640                 *(LStokes+num_dof*NUMNODESP1_2d*11+num_dof*i+3)=0;
    641                 *(LStokes+num_dof*NUMNODESP1_2d*12+num_dof*i)=0;
    642                 *(LStokes+num_dof*NUMNODESP1_2d*12+num_dof*i+1)=l1l2l3[i];
    643                 *(LStokes+num_dof*NUMNODESP1_2d*12+num_dof*i+2)=0;
    644                 *(LStokes+num_dof*NUMNODESP1_2d*12+num_dof*i+3)=0;
    645                 *(LStokes+num_dof*NUMNODESP1_2d*13+num_dof*i)=0;
    646                 *(LStokes+num_dof*NUMNODESP1_2d*13+num_dof*i+1)=0;
    647                 *(LStokes+num_dof*NUMNODESP1_2d*13+num_dof*i+2)=l1l2l3[i];
    648                 *(LStokes+num_dof*NUMNODESP1_2d*13+num_dof*i+3)=0;
    649 
    650         }
    651 }
    652 /*}}}*/
    653 /*FUNCTION PentaRef::GetLStokes2{{{1*/
    654 void PentaRef::GetLStokes2(double* LStokes, GaussPenta* gauss){
    655         /*
    656          * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
    657          * For node i, Li can be expressed in the actual coordinate system
    658          * by:
    659          *       Li=[ h 0 0 0]
    660          *                    [ 0 h 0 0]
    661          *                    [ 0 0 h h]
    662          *                    [ 0 0 0 0]
    663          * where h is the interpolation function for node i.
    664          */
    665 
    666         int i;
    667         int num_dof=4;
    668 
    669         double l1l2l3[NUMNODESP1_2d];
    670 
    671 
    672         /*Get l1l2l3 in actual coordinate system: */
    673         l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
    674         l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
    675         l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
    676 
    677         /*Build LStokes: */
    678         for (i=0;i<3;i++){
    679                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
     579        for (int i=0;i<3;i++){
     580                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i];
    680581                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
    681582                *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
     
    686587                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
    687588                *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
    688 
    689                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+0)=0.;
    690                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0.;
    691                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=l1l2l3[i];
    692                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0.;
    693 
    694                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+0)=0.;
    695                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0.;
    696                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=l1l2l3[i];
    697                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=0.;
    698         }
    699 }
    700 /*}}}*/
    701 /*FUNCTION PentaRef::GetLStokes3{{{1*/
    702 void PentaRef::GetLStokes3(double* LStokes, GaussPenta* gauss){
    703         /*
    704          * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
    705          * For node i, Li can be expressed in the actual coordinate system
    706          * by:
    707          *       Li=[ h 0 ]
    708          *                    [ 0 h ]
    709          *                    [ 0 0 ]
    710          *                    [ 0 0 ]
    711          * where h is the interpolation function for node i.
    712          */
    713 
    714         int i;
    715         int num_dof=4;
    716 
    717         double l1l2l3[NUMNODESP1_2d];
    718 
    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;
    724 
    725         /*Build LStokes: */
    726         for (i=0;i<3;i++){
    727                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
    728                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
    729                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
    730                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0.;
    731 
    732                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+0)=0.;
    733                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
    734                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
    735                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
    736         }
    737 }
    738 /*}}}*/
    739 /*FUNCTION PentaRef::GetLprimeStokes2{{{1*/
    740 void PentaRef::GetLprimeStokes2(double* LStokes,double* xyz_list,GaussPenta* gauss){
    741         /*
    742          * Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
    743          * For node i, Li can be expressed in the actual coordinate system
    744          * by:
    745          *       Li=[ h 0 0 0]
    746          *                    [ 0 h 0 0]
    747          *                    [ 0 0 dh\dz 0]
    748          *                    [ 0 0 0 h]
    749          * where h is the interpolation function for node i.
    750          */
    751 
    752         int i;
    753         int num_dof=4;
    754 
    755         double l1l2l3[NUMNODESP1_2d];
    756         double dh1dh6[3][NUMNODESP1];
    757 
    758 
    759         /*Get l1l2l3 in actual coordinate system: */
    760         l1l2l3[0]=gauss->coord1*(1-gauss->coord4)/2.0;
    761         l1l2l3[1]=gauss->coord2*(1-gauss->coord4)/2.0;
    762         l1l2l3[2]=gauss->coord3*(1-gauss->coord4)/2.0;
    763 
    764         GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list,gauss);
    765 
    766         /*Build LStokes: */
    767         for (i=0;i<3;i++){
    768                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+0)=l1l2l3[i]; //LStokes[0][NDOF2*i]=dh1dh3[0][i];
    769                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+1)=0.;
    770                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+2)=0.;
    771                 *(LStokes+num_dof*NUMNODESP1_2d*0+num_dof*i+3)=0.;
    772 
    773                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+0)=0.;
    774                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+1)=l1l2l3[i];
    775                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+2)=0.;
    776                 *(LStokes+num_dof*NUMNODESP1_2d*1+num_dof*i+3)=0.;
    777 
    778                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+0)=0.;
    779                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+1)=0.;
    780                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+2)=dh1dh6[2][i];
    781                 *(LStokes+num_dof*NUMNODESP1_2d*2+num_dof*i+3)=0.;
    782 
    783                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+0)=0.;
    784                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+1)=0.;
    785                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+2)=0.;
    786                 *(LStokes+num_dof*NUMNODESP1_2d*3+num_dof*i+3)=l1l2l3[i];
    787589        }
    788590}
  • issm/trunk/src/c/objects/Elements/PentaRef.h

    r10480 r10514  
    5151                void GetL(double* L, GaussPenta* gauss,int numdof);
    5252                void GetLStokes(double* LStokes, GaussPenta* gauss);
    53                 void GetLStokes2(double* LStokes, GaussPenta* gauss);
    54                 void GetLStokes3(double* LStokes, GaussPenta* gauss);
    55                 void GetLprimeStokes2(double* LStokes,double* xyz_list,GaussPenta* gauss);
    5653                void GetLprimeStokes(double* LprimeStokes, double* xyz_list, GaussPenta* gauss);
    5754                void GetLMacAyealStokes(double* LMacAyealStokes, GaussPenta* gauss);
Note: See TracChangeset for help on using the changeset viewer.