Changeset 20660


Ignore:
Timestamp:
05/28/16 02:55:19 (9 years ago)
Author:
Mathieu Morlighem
Message:

CHG: more flexible PenaltyCreateKMatrixStressbalanceFS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Loads/Penpair.cpp

    r20658 r20660  
    321321ElementMatrix* Penpair::PenaltyCreateKMatrixStressbalanceFS(IssmDouble kmax){/*{{{*/
    322322
    323         const int  numdof=NUMVERTICES*NDOF3;
     323        int        numdof,numdof2,N;
    324324        IssmDouble penalty_offset;
    325325
    326326        /*Initialize Element vector and return if necessary*/
    327         ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters);
     327        ElementMatrix* Ke=new ElementMatrix(nodes,NUMVERTICES,this->parameters,FSvelocityEnum);
    328328
    329329        /*recover parameters: */
    330330        parameters->FindParam(&penalty_offset,StressbalancePenaltyFactorEnum);
    331331
    332         //Create elementary matrix: add penalty to
    333         Ke->values[0*numdof+0]=+kmax*pow(10.,penalty_offset);
    334         Ke->values[0*numdof+3]=-kmax*pow(10.,penalty_offset);
    335         Ke->values[3*numdof+0]=-kmax*pow(10.,penalty_offset);
    336         Ke->values[3*numdof+3]=+kmax*pow(10.,penalty_offset);
    337 
    338         Ke->values[1*numdof+1]=+kmax*pow(10.,penalty_offset);
    339         Ke->values[1*numdof+4]=-kmax*pow(10.,penalty_offset);
    340         Ke->values[4*numdof+1]=-kmax*pow(10.,penalty_offset);
    341         Ke->values[4*numdof+4]=+kmax*pow(10.,penalty_offset);
    342 
    343         Ke->values[2*numdof+2]=+kmax*pow(10.,penalty_offset);
    344         Ke->values[2*numdof+5]=-kmax*pow(10.,penalty_offset);
    345         Ke->values[5*numdof+2]=-kmax*pow(10.,penalty_offset);
    346         Ke->values[5*numdof+5]=+kmax*pow(10.,penalty_offset);
     332        /*Get number of dof for these two nodes*/
     333        numdof =this->nodes[0]->GetNumberOfDofs(FSApproximationEnum,GsetEnum);
     334        numdof2=this->nodes[1]->GetNumberOfDofs(FSApproximationEnum,GsetEnum);
     335        N=NUMVERTICES*numdof;
     336
     337        /*Add penalty to Element matrix*/
     338        for(int i=0;i<numdof;i++){
     339                Ke->values[         i*N+i       ]=+kmax*pow(10.,penalty_offset);
     340                Ke->values[         i*N+numdof+i]=-kmax*pow(10.,penalty_offset);
     341                Ke->values[(numdof+i)*N+i       ]=-kmax*pow(10.,penalty_offset);
     342                Ke->values[(numdof+i)*N+numdof+i]=+kmax*pow(10.,penalty_offset);
     343        }
    347344
    348345        /*Clean up and return*/
     
    397394        numdof =this->nodes[0]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
    398395        numdof2=this->nodes[1]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum);
     396        _assert_(numdof==numdof2);
    399397        N=NUMVERTICES*numdof;
    400398
Note: See TracChangeset for help on using the changeset viewer.