Ignore:
Timestamp:
07/07/13 13:58:41 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: preparing Newton for P2 elements

File:
1 edited

Legend:

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

    r15446 r15453  
    31193119        /*Initialize Element matrix, vectors and Gaussian points*/
    31203120        ElementMatrix* Ke=CreateKMatrixDiagnosticMacAyeal(); //Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)
    3121         IssmDouble*    dphi  = xNew<IssmDouble>(2*numnodes);
     3121        IssmDouble*    dbasis = xNew<IssmDouble>(2*numnodes);
    31223122
    31233123        /*Retrieve all inputs and parameters*/
     
    31343134
    31353135                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
    3136                 GetNodalFunctionsDerivatives(dphi,&xyz_list[0][0],gauss);
     3136                GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
    31373137
    31383138                thickness_input->GetInputValue(&thickness, gauss);
     
    31443144                for(i=0;i<numnodes;i++){
    31453145                        for(j=0;j<numnodes;j++){
    3146                                 eps1dotdphii=eps1[0]*dphi[0*numnodes+i]+eps1[1]*dphi[1*numnodes+i];
    3147                                 eps1dotdphij=eps1[0]*dphi[0*numnodes+j]+eps1[1]*dphi[1*numnodes+j];
    3148                                 eps2dotdphii=eps2[0]*dphi[0*numnodes+i]+eps2[1]*dphi[1*numnodes+i];
    3149                                 eps2dotdphij=eps2[0]*dphi[0*numnodes+j]+eps2[1]*dphi[1*numnodes+j];
     3146                                eps1dotdphii=eps1[0]*dbasis[0*numnodes+i]+eps1[1]*dbasis[1*numnodes+i];
     3147                                eps1dotdphij=eps1[0]*dbasis[0*numnodes+j]+eps1[1]*dbasis[1*numnodes+j];
     3148                                eps2dotdphii=eps2[0]*dbasis[0*numnodes+i]+eps2[1]*dbasis[1*numnodes+i];
     3149                                eps2dotdphij=eps2[0]*dbasis[0*numnodes+j]+eps2[1]*dbasis[1*numnodes+j];
    31503150
    31513151                                Ke->values[2*numnodes*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
     
    31583158
    31593159        /*Transform Coordinate System*/
    3160         TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
     3160        TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
    31613161
    31623162        /*Clean up and return*/
     3163        xDelete<IssmDouble>(dbasis);
    31633164        delete gauss;
    3164         xDelete<IssmDouble>(dphi);
    31653165        return Ke;
    31663166}
     
    52145214
    52155215        /*Constants*/
    5216         const int    numdof=NDOF2*NUMVERTICES;
     5216        const int numnodes = this->GetNumberOfNodes();
     5217        const int numdof   = NDOF2*numnodes;
    52175218
    52185219        /*Intermediaries */
    5219         int        i,j;
    5220         bool       incomplete_adjoint;
    5221         IssmDouble xyz_list[NUMVERTICES][3];
    5222         IssmDouble Jdet,thickness;
    5223         IssmDouble eps1dotdphii,eps1dotdphij;
    5224         IssmDouble eps2dotdphii,eps2dotdphij;
    5225         IssmDouble mu_prime;
    5226         IssmDouble epsilon[3];/* epsilon=[exx,eyy,exy];*/
    5227         IssmDouble eps1[2],eps2[2];
    5228         IssmDouble dphi[2][NUMVERTICES];
    5229         GaussTria *gauss=NULL;
     5220        int         i,j;
     5221        bool        incomplete_adjoint;
     5222        IssmDouble  xyz_list[NUMVERTICES][3];
     5223        IssmDouble  Jdet,thickness;
     5224        IssmDouble  eps1dotdphii,eps1dotdphij;
     5225        IssmDouble  eps2dotdphii,eps2dotdphij;
     5226        IssmDouble  mu_prime;
     5227        IssmDouble  epsilon[3];/* epsilon=[exx,eyy,exy];*/
     5228        IssmDouble  eps1[2],eps2[2];
     5229        GaussTria  *gauss=NULL;
    52305230
    52315231        /*Initialize Jacobian with regular MacAyeal (first part of the Gateau derivative)*/
     
    52405240        Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);
    52415241
     5242        /*Allocate dbasis*/
     5243        IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);
     5244
    52425245        /* Start  looping on the number of gaussian points: */
    52435246        gauss=new GaussTria(2);
     
    52475250
    52485251                GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
    5249                 GetNodalFunctionsDerivatives(&dphi[0][0],&xyz_list[0][0],gauss);
     5252                GetNodalFunctionsDerivatives(dbasis,&xyz_list[0][0],gauss);
    52505253
    52515254                thickness_input->GetInputValue(&thickness, gauss);
     
    52555258                eps1[1]=epsilon[2];                eps2[1]=epsilon[0]+2*epsilon[1];
    52565259
    5257                 for(i=0;i<3;i++){
    5258                         for(j=0;j<3;j++){
    5259                                 eps1dotdphii=eps1[0]*dphi[0][i]+eps1[1]*dphi[1][i];
    5260                                 eps1dotdphij=eps1[0]*dphi[0][j]+eps1[1]*dphi[1][j];
    5261                                 eps2dotdphii=eps2[0]*dphi[0][i]+eps2[1]*dphi[1][i];
    5262                                 eps2dotdphij=eps2[0]*dphi[0][j]+eps2[1]*dphi[1][j];
    5263 
    5264                                 Ke->values[6*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
    5265                                 Ke->values[6*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii;
    5266                                 Ke->values[6*(2*i+1)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps2dotdphii;
    5267                                 Ke->values[6*(2*i+1)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps2dotdphii;
     5260                for(i=0;i<numnodes;i++){
     5261                        for(j=0;j<numnodes;j++){
     5262                                eps1dotdphii=eps1[0]*dbasis[0*numnodes+i]+eps1[1]*dbasis[1*numnodes+i];
     5263                                eps1dotdphij=eps1[0]*dbasis[0*numnodes+j]+eps1[1]*dbasis[1*numnodes+j];
     5264                                eps2dotdphii=eps2[0]*dbasis[0*numnodes+i]+eps2[1]*dbasis[1*numnodes+i];
     5265                                eps2dotdphij=eps2[0]*dbasis[0*numnodes+j]+eps2[1]*dbasis[1*numnodes+j];
     5266
     5267                                Ke->values[2*numnodes*(2*i+0)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps1dotdphii;
     5268                                Ke->values[2*numnodes*(2*i+0)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps1dotdphii;
     5269                                Ke->values[2*numnodes*(2*i+1)+2*j+0]+=gauss->weight*Jdet*2*mu_prime*thickness*eps1dotdphij*eps2dotdphii;
     5270                                Ke->values[2*numnodes*(2*i+1)+2*j+1]+=gauss->weight*Jdet*2*mu_prime*thickness*eps2dotdphij*eps2dotdphii;
    52685271                        }
    52695272                }
     
    52715274
    52725275        /*Transform Coordinate System*/
    5273         TransformStiffnessMatrixCoord(Ke,nodes,NUMVERTICES,XYEnum);
     5276        TransformStiffnessMatrixCoord(Ke,nodes,numnodes,XYEnum);
    52745277
    52755278        /*Clean up and return*/
    52765279        delete gauss;
     5280        xDelete<IssmDouble>(dbasis);
    52775281        //Ke->Transpose();
    52785282        return Ke;
Note: See TracChangeset for help on using the changeset viewer.