Changeset 15436


Ignore:
Timestamp:
07/05/13 09:22:25 (12 years ago)
Author:
seroussi
Message:

NEW: working on Stokes stabilized

Location:
issm/trunk-jpl/src/c/classes/Elements
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r15433 r15436  
    68166816                        /*compute all stiffness matrices for this element*/
    68176817                        Ke1=CreateKMatrixDiagnosticStokesGLSViscous();
    6818                         Ke2=CreateKMatrixDiagnosticStokesGLSFriction();
     6818                        Ke2=CreateKMatrixDiagnosticStokesFriction();
    68196819                        Ke =new ElementMatrix(Ke1,Ke2);
    68206820                        break;
     
    68946894ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSViscous(void){
    68956895
     6896        int        numdof = NDOF4*NUMVERTICES;
     6897
    68966898        /*Intermediaries */
    6897         int        i,approximation;
     6899        int        i,j,approximation;
    68986900        IssmDouble Jdet,viscosity,stokesreconditioning;
    68996901        IssmDouble xyz_list[NUMVERTICES][3];
     
    69036905        IssmDouble D_scalar;
    69046906        IssmDouble D[8][8]={0.0};
    6905         IssmDouble Ke_temp[24][24]={1.0}; //for the six nodes
     6907        IssmDouble Ke_temp[24][24]={0.0}; //for the six nodes
    69066908        GaussPenta *gauss=NULL;
    69076909
     
    69396941                                        &B_prime[0][0],8,24,0,
    69406942                                        &Ke_temp[0][0],1);
     6943
     6944                for(i=0;i<numdof;i++) for(j=0;j<numdof;j++) Ke->values[i*numdof+j]+=Ke_temp[i][j];
    69416945        }
    69426946
     
    69516955/*FUNCTION Penta::CreateKMatrixDiagnosticStokesFriction{{{*/
    69526956ElementMatrix* Penta::CreateKMatrixDiagnosticStokesFriction(void){
    6953 
    6954         /*Constants*/
    6955         const int numdof=NUMVERTICES*NDOF4;
    6956         const int numdof2d=NUMVERTICES2D*NDOF4;
    6957 
    6958         /*Intermediaries */
    6959         int        i,j;
    6960         int        analysis_type,approximation;
    6961         IssmDouble alpha2,Jdet2d;
    6962         IssmDouble stokesreconditioning,viscosity;
    6963         IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
    6964         IssmDouble xyz_list[NUMVERTICES][3];
    6965         IssmDouble xyz_list_tria[NUMVERTICES2D][3];
    6966         IssmDouble LStokes[2][numdof2d];
    6967         IssmDouble DLStokes[2][2]={0.0};
    6968         IssmDouble Ke_drag_gaussian[numdof2d][numdof2d];
    6969         Friction*  friction=NULL;
    6970         GaussPenta *gauss=NULL;
    6971 
    6972         /*If on water or not Stokes, skip stiffness: */
    6973         inputs->GetInputValue(&approximation,ApproximationEnum);
    6974         if(IsFloating() || !IsOnBed() || (approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum &&  approximation!=PattynStokesApproximationEnum)) return NULL;
    6975         ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
    6976 
    6977         /*Retrieve all inputs and parameters*/
    6978         GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    6979         parameters->FindParam(&analysis_type,AnalysisTypeEnum);
    6980         parameters->FindParam(&stokesreconditioning,DiagnosticStokesreconditioningEnum);
    6981         Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
    6982         Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
    6983         Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
    6984         for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
    6985 
    6986         /*build friction object, used later on: */
    6987         friction=new Friction("3d",inputs,matpar,analysis_type);
    6988 
    6989         /* Start  looping on the number of gaussian points: */
    6990         gauss=new GaussPenta(0,1,2,2);
    6991         for(int ig=gauss->begin();ig<gauss->end();ig++){
    6992 
    6993                 gauss->GaussPoint(ig);
    6994 
    6995                 GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
    6996                 GetLStokes(&LStokes[0][0], gauss);
    6997 
    6998                 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
    6999                 material->GetViscosity3dStokes(&viscosity,&epsilon[0]);
    7000 
    7001                 friction->GetAlpha2(&alpha2, gauss,VxEnum,VyEnum,VzEnum);
    7002 
    7003                 DLStokes[0][0] = +alpha2*gauss->weight*Jdet2d; //taub_x = -alpha2 vx
    7004                 DLStokes[1][1] = +alpha2*gauss->weight*Jdet2d; //taub_y = -alpha2 vy
    7005 
    7006                 TripleMultiply( &LStokes[0][0],2,numdof2d,1,
    7007                                         &DLStokes[0][0],2,2,0,
    7008                                         &LStokes[0][0],2,numdof2d,0,
    7009                                         &Ke_drag_gaussian[0][0],0);
    7010 
    7011                 for(i=0;i<numdof2d;i++) for(j=0;j<numdof2d;j++) Ke->values[i*numdof+j]+=Ke_drag_gaussian[i][j];
    7012         }
    7013 
    7014         /*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/
    7015         //TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYZPEnum);
    7016 
    7017         /*Clean up and return*/
    7018         delete gauss;
    7019         delete friction;
    7020         return Ke;
    7021 }
    7022 /*}}}*/
    7023 /*FUNCTION Penta::CreateKMatrixDiagnosticStokesGLSFriction{{{*/
    7024 ElementMatrix* Penta::CreateKMatrixDiagnosticStokesGLSFriction(void){
    70256957
    70266958        /*Constants*/
     
    77407672ElementVector* Penta::CreatePVectorDiagnosticStokes(void){
    77417673
    7742         /*compute all load vectors for this element*/
    7743         ElementVector* pe1=CreatePVectorDiagnosticStokesViscous();
    7744         ElementVector* pe2=CreatePVectorDiagnosticStokesShelf();
    7745         ElementVector* pe =new ElementVector(pe1,pe2);
     7674        int fe_stokes;
     7675        ElementVector* pe1;
     7676        ElementVector* pe2;
     7677        ElementVector* pe;
     7678        parameters->FindParam(&fe_stokes,FlowequationFeStokesEnum);
     7679
     7680        switch(fe_stokes){
     7681                case 0:
     7682                        /*compute all stiffness matrices for this element*/
     7683                        pe1=CreatePVectorDiagnosticStokesViscous();
     7684                        pe2=CreatePVectorDiagnosticStokesShelf();
     7685                        pe =new ElementVector(pe1,pe2);
     7686                        break;
     7687                case 1:
     7688                        /*compute all stiffness matrices for this element*/
     7689                        pe1=CreatePVectorDiagnosticStokesGLSViscous();
     7690                        pe2=CreatePVectorDiagnosticStokesShelf();
     7691                        pe =new ElementVector(pe1,pe2);
     7692                        break;
     7693                default:
     7694                        _error_("Finite element" << fe_stokes << " not supported yet");
     7695        }
     7696
    77467697
    77477698        /*clean-up and return*/
     
    78307781        }
    78317782
     7783        if(IsOnBed() || IsOnSurface()){
     7784                IssmDouble      xyz_list_tria[NUMVERTICES2D][3];
     7785                IssmDouble  pi=3.141592653589793;
     7786                IssmDouble  x,y,z;
     7787                IssmDouble  basis[6]; //for the six nodes of the penta
     7788                GaussPenta *gauss=NULL;
     7789                Input* x_input=inputs->GetInput(MeshXEnum);   _assert_(x_input);
     7790                Input* y_input=inputs->GetInput(MeshYEnum);   _assert_(y_input);
     7791                Input* z_input=inputs->GetInput(MeshZEnum);   _assert_(z_input);
     7792
     7793
     7794                if(IsOnBed()){
     7795                        for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i][j];
     7796                        gauss=new GaussPenta(0,1,2,2);
     7797                }
     7798                if(IsOnSurface()){
     7799                        for(i=0;i<NUMVERTICES2D;i++) for(j=0;j<3;j++) xyz_list_tria[i][j]=xyz_list[i+3][j];
     7800                        gauss=new GaussPenta(3,4,5,2);
     7801                }
     7802
     7803
     7804                for(int ig=gauss->begin();ig<gauss->end();ig++){
     7805
     7806                        gauss->GaussPoint(ig);
     7807
     7808                        GetTriaJacobianDeterminant(&Jdet, &xyz_list_tria[0][0], gauss);
     7809                        GetNodalFunctionsP1(basis, gauss);
     7810                        x_input->GetInputValue(&x, gauss);
     7811                        y_input->GetInputValue(&y, gauss);
     7812                        z_input->GetInputValue(&z, gauss);
     7813                       
     7814
     7815                        forcex=-((cos(2*pi*z)-1)*2*pi*sin(2*pi*y)*cos(2*pi*x)-2*(cos(2*pi*x)-1)*2*pi*sin(2*pi*y)*cos(2*pi*z))*1;
     7816                        forcey=-((cos(2*pi*z)-1)*2*pi*sin(2*pi*x)*cos(2*pi*y)+(cos(2*pi*y)-1)*2*pi*sin(2*pi*x)*cos(2*pi*z))*1;
     7817                        forcez=-(-2*pi*2*sin(2*pi*x)*sin(2*pi*y)*sin(2*pi*z)+sin(2*pi*x)*sin(2*pi*y)*sin(2*pi*z));
     7818
     7819                        if(IsOnBed()){
     7820                                for(i=0;i<3;i++){
     7821                                        Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*basis[i]*-1.;
     7822                                        Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*basis[i]*-1.;
     7823                                        Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*basis[i]*-1.;
     7824                                }
     7825                        }
     7826                        if(IsOnSurface()){
     7827                                for(i=3;i<6;i++){
     7828                                        Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*basis[i]*1.;
     7829                                        Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*basis[i]*1.;
     7830                                        Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*basis[i]*1.;
     7831                                }
     7832                        }
     7833                }
     7834        }
     7835
    78327836        /*Condensation*/
    78337837        ReduceVectorStokes(pe->values, &Ke_temp[0][0], &Pe_gaussian[0]);
     7838
     7839        /*Transform coordinate system*/
     7840        TransformLoadVectorCoord(pe,nodes,NUMVERTICES,XYZPEnum);
     7841
     7842        /*Clean up and return*/
     7843        delete gauss;
     7844        return pe;
     7845}
     7846/*}}}*/
     7847/*FUNCTION Penta::CreatePVectorDiagnosticStokesGLSViscous {{{*/
     7848ElementVector* Penta::CreatePVectorDiagnosticStokesGLSViscous(void){
     7849
     7850        /*Constants*/
     7851        const int numdof=NDOF4*NUMVERTICES;
     7852
     7853        /*Intermediaries*/
     7854        int        i,j;
     7855        int        approximation;
     7856        IssmDouble Jdet,gravity,rho_ice;
     7857        IssmDouble forcex,forcey,forcez;
     7858        IssmDouble xyz_list[NUMVERTICES][3];
     7859        IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
     7860        IssmDouble l1l6[6]; //for the six nodes and the bubble
     7861        IssmDouble Pe_gaussian[numdof]={0.0}; //for the six nodes and the bubble
     7862        GaussPenta *gauss=NULL;
     7863
     7864        /*Initialize Element vector and return if necessary*/
     7865        inputs->GetInputValue(&approximation,ApproximationEnum);
     7866        if(approximation!=StokesApproximationEnum && approximation!=MacAyealStokesApproximationEnum && approximation!=PattynStokesApproximationEnum) return NULL;
     7867        ElementVector* pe=new ElementVector(nodes,NUMVERTICES,this->parameters,StokesApproximationEnum);
     7868
     7869        /*Retrieve all inputs and parameters*/
     7870        rho_ice=matpar->GetRhoIce();
     7871        gravity=matpar->GetG();
     7872        GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     7873        Input* vx_input=inputs->GetInput(VxEnum);   _assert_(vx_input);
     7874        Input* vy_input=inputs->GetInput(VyEnum);   _assert_(vy_input);
     7875        Input* vz_input=inputs->GetInput(VzEnum);   _assert_(vz_input);
     7876        Input* loadingforcex_input=inputs->GetInput(LoadingforceXEnum);  _assert_(loadingforcex_input);
     7877        Input* loadingforcey_input=inputs->GetInput(LoadingforceYEnum);  _assert_(loadingforcey_input);
     7878        Input* loadingforcez_input=inputs->GetInput(LoadingforceZEnum);  _assert_(loadingforcez_input);
     7879
     7880        /* Start  looping on the number of gaussian points: */
     7881        gauss=new GaussPenta(5,5);
     7882        for(int ig=gauss->begin();ig<gauss->end();ig++){
     7883
     7884                gauss->GaussPoint(ig);
     7885
     7886                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
     7887                GetNodalFunctionsP1(&l1l6[0], gauss);
     7888
     7889                loadingforcex_input->GetInputValue(&forcex, gauss);
     7890                loadingforcey_input->GetInputValue(&forcey, gauss);
     7891                loadingforcez_input->GetInputValue(&forcez, gauss);
     7892
     7893                for(i=0;i<NUMVERTICES;i++){
     7894                        Pe_gaussian[i*NDOF4+2]+=-rho_ice*gravity*Jdet*gauss->weight*l1l6[i];
     7895                        Pe_gaussian[i*NDOF4+0]+=forcex*Jdet*gauss->weight*l1l6[i];
     7896                        Pe_gaussian[i*NDOF4+1]+=forcey*Jdet*gauss->weight*l1l6[i];
     7897                        Pe_gaussian[i*NDOF4+2]+=forcez*Jdet*gauss->weight*l1l6[i];
     7898                }
     7899        }
     7900
     7901        for(i=0;i<NUMVERTICES;i++) for(j=0;j<3;j++) pe->values[i*NDOF4+j]+=Pe_gaussian[i*NDOF4+j];
    78347902
    78357903        /*Transform coordinate system*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r15433 r15436  
    287287                ElementVector* CreatePVectorDiagnosticStokes(void);
    288288                ElementVector* CreatePVectorDiagnosticStokesViscous(void);
     289                ElementVector* CreatePVectorDiagnosticStokesGLSViscous(void);
    289290                ElementVector* CreatePVectorDiagnosticStokesShelf(void);
    290291                ElementVector* CreatePVectorDiagnosticVert(void);
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp

    r15425 r15436  
    275275        /*Build B: */
    276276        for (i=0;i<NUMNODESMINI;i++){
    277                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh7[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
    278                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0;
    279                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0;
    280                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0;
    281                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh7[1][i];
    282                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0;
    283                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0;
    284                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0;
    285                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh7[2][i];
    286                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=(float).5*dh1dh7[1][i];
    287                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=(float).5*dh1dh7[0][i];
    288                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0;
    289                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=(float).5*dh1dh7[2][i];
    290                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0;
    291                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=(float).5*dh1dh7[0][i];
    292                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0;
    293                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=(float).5*dh1dh7[2][i];
    294                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=(float).5*dh1dh7[1][i];
    295                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=0;
    296                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=0;
    297                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=0;
    298                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=dh1dh7[0][i];
    299                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=dh1dh7[1][i];
    300                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=dh1dh7[2][i];
     277                B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+0] = dh1dh7[0][i+0]; //B[0][NDOF4*i+0] = dh1dh6[0][i+0];
     278                B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1] = 0.;
     279                B[(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2] = 0.;
     280                B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+0] = 0.;
     281                B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1] = dh1dh7[1][i+0];
     282                B[(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2] = 0.;
     283                B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+0] = 0.;
     284                B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1] = 0.;
     285                B[(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2] = dh1dh7[2][i+0];
     286                B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+0] = (float).5*dh1dh7[1][i+0];
     287                B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1] = (float).5*dh1dh7[0][i+0];
     288                B[(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2] = 0.;
     289                B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+0] = (float).5*dh1dh7[2][i+0];
     290                B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1] = 0.;
     291                B[(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2] = (float).5*dh1dh7[0][i+0];
     292                B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+0] = 0.;
     293                B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1] = (float).5*dh1dh7[2][i+0];
     294                B[(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2] = (float).5*dh1dh7[1][i+0];
     295                B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+0] = 0.;
     296                B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1] = 0.;
     297                B[(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2] = 0.;
     298                B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+0] = dh1dh7[0][i+0];
     299                B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1] = dh1dh7[1][i+0];
     300                B[(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2] = dh1dh7[2][i+0];
    301301        }
    302302
     
    338338        /*Get dh1dh7 in actual coordinate system: */
    339339        GetNodalFunctionsP1Derivatives(&dh1dh6[0][0],xyz_list, gauss);
    340         GetNodalFunctionsP1(l1l6, gauss);
     340        GetNodalFunctionsP1(&l1l6[0], gauss);
    341341
    342342        /*Build B: */
    343343        for (i=0;i<NUMNODESP1;i++){
    344                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh6[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
    345                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0.;
    346                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0.;
    347                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0.;
    348                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh6[1][i];
    349                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0.;
    350                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.;
    351                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.;
    352                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh6[2][i];
    353                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=.5*dh1dh6[1][i];
    354                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=.5*dh1dh6[0][i];
    355                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0.;
    356                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=.5*dh1dh6[2][i];
    357                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0.;
    358                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=.5*dh1dh6[0][i];
    359                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0.;
    360                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=.5*dh1dh6[2][i];
    361                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=.5*dh1dh6[1][i];
    362                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=0.;
    363                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=0.;
    364                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=0.;
    365                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=dh1dh6[0][i];
    366                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=dh1dh6[1][i];
    367                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=dh1dh6[2][i];
     344                *(B+(NDOF4*NUMNODESP1)*0+NDOF4*i)=dh1dh6[0][i]; //B[0][NDOF4*i]=dh1dh6[0][i];
     345                *(B+(NDOF4*NUMNODESP1)*0+NDOF4*i+1)=0.;
     346                *(B+(NDOF4*NUMNODESP1)*0+NDOF4*i+2)=0.;
     347                *(B+(NDOF4*NUMNODESP1)*1+NDOF4*i)=0.;
     348                *(B+(NDOF4*NUMNODESP1)*1+NDOF4*i+1)=dh1dh6[1][i];
     349                *(B+(NDOF4*NUMNODESP1)*1+NDOF4*i+2)=0.;
     350                *(B+(NDOF4*NUMNODESP1)*2+NDOF4*i)=0.;
     351                *(B+(NDOF4*NUMNODESP1)*2+NDOF4*i+1)=0.;
     352                *(B+(NDOF4*NUMNODESP1)*2+NDOF4*i+2)=dh1dh6[2][i];
     353                *(B+(NDOF4*NUMNODESP1)*3+NDOF4*i)=.5*dh1dh6[1][i];
     354                *(B+(NDOF4*NUMNODESP1)*3+NDOF4*i+1)=.5*dh1dh6[0][i];
     355                *(B+(NDOF4*NUMNODESP1)*3+NDOF4*i+2)=0.;
     356                *(B+(NDOF4*NUMNODESP1)*4+NDOF4*i)=.5*dh1dh6[2][i];
     357                *(B+(NDOF4*NUMNODESP1)*4+NDOF4*i+1)=0.;
     358                *(B+(NDOF4*NUMNODESP1)*4+NDOF4*i+2)=.5*dh1dh6[0][i];
     359                *(B+(NDOF4*NUMNODESP1)*5+NDOF4*i)=0.;
     360                *(B+(NDOF4*NUMNODESP1)*5+NDOF4*i+1)=.5*dh1dh6[2][i];
     361                *(B+(NDOF4*NUMNODESP1)*5+NDOF4*i+2)=.5*dh1dh6[1][i];
     362                *(B+(NDOF4*NUMNODESP1)*6+NDOF4*i)=0.;
     363                *(B+(NDOF4*NUMNODESP1)*6+NDOF4*i+1)=0.;
     364                *(B+(NDOF4*NUMNODESP1)*6+NDOF4*i+2)=0.;
     365                *(B+(NDOF4*NUMNODESP1)*7+NDOF4*i)=dh1dh6[0][i];
     366                *(B+(NDOF4*NUMNODESP1)*7+NDOF4*i+1)=dh1dh6[1][i];
     367                *(B+(NDOF4*NUMNODESP1)*7+NDOF4*i+2)=dh1dh6[2][i];
     368                _assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
    368369        }
    369370
    370371        for (i=0;i<NUMNODESP1;i++){ //last column not for the bubble function
    371                 *(B+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0.;
    372                 *(B+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0.;
    373                 *(B+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0.;
    374                 *(B+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0.;
    375                 *(B+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0.;
    376                 *(B+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0.;
    377                 *(B+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=l1l6[i];
    378                 *(B+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=0.;
     372                B[(NDOF4*NUMNODESP1)*0+NDOF4*i+3]=0.;
     373                B[(NDOF4*NUMNODESP1)*1+NDOF4*i+3]=0.;
     374                B[(NDOF4*NUMNODESP1)*2+NDOF4*i+3]=0.;
     375                B[(NDOF4*NUMNODESP1)*3+NDOF4*i+3]=0.;
     376                B[(NDOF4*NUMNODESP1)*4+NDOF4*i+3]=0.;
     377                B[(NDOF4*NUMNODESP1)*5+NDOF4*i+3]=0.;
     378                B[(NDOF4*NUMNODESP1)*6+NDOF4*i+3]=l1l6[i];
     379                B[(NDOF4*NUMNODESP1)*7+NDOF4*i+3]=0.;
     380                _assert_(((NDOF4*NUMNODESP1)*7+NDOF4*i+3)<8*24);
    379381        }
    380382
     
    476478        /*B_primeuild B_prime: */
    477479        for (i=0;i<NUMNODESP1;i++){
    478                 *(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i)=dh1dh6[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
    479                 *(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+1)=0.;
    480                 *(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+2)=0.;
    481                 *(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i)=0.;
    482                 *(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+1)=dh1dh6[1][i];
    483                 *(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+2)=0.;
    484                 *(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i)=0.;
    485                 *(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+1)=0.;
    486                 *(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+2)=dh1dh6[2][i];
    487                 *(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i)=dh1dh6[1][i];
    488                 *(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+1)=dh1dh6[0][i];
    489                 *(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+2)=0.;
    490                 *(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i)=dh1dh6[2][i];
    491                 *(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+1)=0.;
    492                 *(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+2)=dh1dh6[0][i];
    493                 *(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i)=0.;
    494                 *(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+1)=dh1dh6[2][i];
    495                 *(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+2)=dh1dh6[1][i];
    496                 *(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i)=dh1dh6[0][i];
    497                 *(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+1)=dh1dh6[1][i];
    498                 *(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+2)=dh1dh6[2][i];
    499                 *(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i)=0.;
    500                 *(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+1)=0.;
    501                 *(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+2)=0.;
     480                *(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i)=dh1dh6[0][i]; //B_prime[0][NDOF4*i]=dh1dh6[0][i];
     481                *(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+1)=0.;
     482                *(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+2)=0.;
     483                *(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i)=0.;
     484                *(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+1)=dh1dh6[1][i];
     485                *(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+2)=0.;
     486                *(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i)=0.;
     487                *(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+1)=0.;
     488                *(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+2)=dh1dh6[2][i];
     489                *(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i)=dh1dh6[1][i];
     490                *(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+1)=dh1dh6[0][i];
     491                *(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+2)=0.;
     492                *(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i)=dh1dh6[2][i];
     493                *(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+1)=0.;
     494                *(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+2)=dh1dh6[0][i];
     495                *(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i)=0.;
     496                *(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+1)=dh1dh6[2][i];
     497                *(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+2)=dh1dh6[1][i];
     498                *(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i)=dh1dh6[0][i];
     499                *(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+1)=dh1dh6[1][i];
     500                *(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+2)=dh1dh6[2][i];
     501                *(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i)=0.;
     502                *(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+1)=0.;
     503                *(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+2)=0.;
     504                _assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
    502505        }
    503506
    504507        for (i=0;i<NUMNODESP1;i++){ //last column
    505                 *(B_prime+(NDOF4*NUMNODESP1+3)*0+NDOF4*i+3)=0.;
    506                 *(B_prime+(NDOF4*NUMNODESP1+3)*1+NDOF4*i+3)=0.;
    507                 *(B_prime+(NDOF4*NUMNODESP1+3)*2+NDOF4*i+3)=0.;
    508                 *(B_prime+(NDOF4*NUMNODESP1+3)*3+NDOF4*i+3)=0.;
    509                 *(B_prime+(NDOF4*NUMNODESP1+3)*4+NDOF4*i+3)=0.;
    510                 *(B_prime+(NDOF4*NUMNODESP1+3)*5+NDOF4*i+3)=0.;
    511                 *(B_prime+(NDOF4*NUMNODESP1+3)*6+NDOF4*i+3)=0.;
    512                 *(B_prime+(NDOF4*NUMNODESP1+3)*7+NDOF4*i+3)=l1l6[i];
     508                *(B_prime+(NDOF4*NUMNODESP1)*0+NDOF4*i+3)=0.;
     509                *(B_prime+(NDOF4*NUMNODESP1)*1+NDOF4*i+3)=0.;
     510                *(B_prime+(NDOF4*NUMNODESP1)*2+NDOF4*i+3)=0.;
     511                *(B_prime+(NDOF4*NUMNODESP1)*3+NDOF4*i+3)=0.;
     512                *(B_prime+(NDOF4*NUMNODESP1)*4+NDOF4*i+3)=0.;
     513                *(B_prime+(NDOF4*NUMNODESP1)*5+NDOF4*i+3)=0.;
     514                *(B_prime+(NDOF4*NUMNODESP1)*6+NDOF4*i+3)=0.;
     515                *(B_prime+(NDOF4*NUMNODESP1)*7+NDOF4*i+3)=l1l6[i];
     516                _assert_((NDOF4*NUMNODESP1)*7+NDOF4*i+2<8*24);
    513517        }
    514518
     
    10871091        if(*Jdet<0) _error_("negative jacobian determinant!");
    10881092}
    1089 /*}}}*/
     1093/*}}}*
    10901094/*FUNCTION PentaRef::GetSegmentJacobianDeterminant{{{*/
    10911095void PentaRef::GetSegmentJacobianDeterminant(IssmDouble*  Jdet, IssmDouble* xyz_list,GaussPenta* gauss){
Note: See TracChangeset for help on using the changeset viewer.