Changeset 16373


Ignore:
Timestamp:
10/10/13 16:39:59 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added friction for FS flowline

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

Legend:

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

    r16359 r16373  
    81868186        int         analysis_type,approximation;
    81878187        IssmDouble  alpha2,Jdet2d;
    8188         IssmDouble  FSreconditioning,viscosity;
    8189         IssmDouble  epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
    81908188        IssmDouble  xyz_list[NUMVERTICES][3];
    81918189        IssmDouble  xyz_list_tria[NUMVERTICES2D][3];
     
    82138211        GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    82148212        parameters->FindParam(&analysis_type,AnalysisTypeEnum);
    8215         parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    82168213        Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
    82178214        Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
     
    82308227                GetTriaJacobianDeterminant(&Jdet2d, &xyz_list_tria[0][0],gauss);
    82318228                GetLFS(BFriction,gauss);
    8232 
    8233                 this->GetStrainRate3d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
    8234                 material->GetViscosity3dFS(&viscosity,&epsilon[0]);
    82358229
    82368230                friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16371 r16373  
    32083208        /*Intermediaries */
    32093209        int         i,j;
    3210         int         analysis_type,approximation;
     3210        int         analysis_type;
    32113211        int         indices[2];
    32123212        IssmDouble  alpha2,Jdet;
    3213         IssmDouble  FSreconditioning,viscosity;
    3214         IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
    32153213        IssmDouble  xyz_list[NUMVERTICES][3];
    32163214        IssmDouble  xyz_list_seg[NUMVERTICES1D][3];
     
    32323230        /*Initialize Element matrix and vectors*/
    32333231        ElementMatrix* Ke        = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum);
    3234         IssmDouble*    BFriction = xNew<IssmDouble>(2*numdof);
    3235         IssmDouble*    D         = xNewZeroInit<IssmDouble>(2*2);
     3232        IssmDouble*    BFriction = xNew<IssmDouble>(1*numdof);
     3233        IssmDouble     D;
    32363234
    32373235        /*Retrieve all inputs and parameters*/
    32383236        GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    32393237        parameters->FindParam(&analysis_type,AnalysisTypeEnum);
    3240         parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    32413238        Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
    32423239        Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
     
    32563253
    32573254                GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss);
    3258 
    3259                 _error_("STOP");
     3255                GetLFS(BFriction,gauss);
     3256
     3257                friction->GetAlpha2(&alpha2,gauss,VxEnum,VyEnum,VzEnum);
     3258                D = +alpha2*gauss->weight*Jdet; //taub_x = -alpha2 vx
     3259
     3260                TripleMultiply(BFriction,1,numdof,1,
     3261                                        &D,1,1,0,
     3262                                        BFriction,1,numdof,0,
     3263                                        Ke->values,1);
    32603264        }
    32613265
     
    32673271        delete friction;
    32683272        xDelete<IssmDouble>(BFriction);
    3269         xDelete<IssmDouble>(D);
    32703273        xDelete<int>(cs_list);
    32713274        return Ke;
  • issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp

    r16371 r16373  
    469469        /*Clean-up*/
    470470        xDelete<IssmDouble>(basis);
     471}
     472/*}}}*/
     473/*FUNCTION TriaRef::GetLFS{{{*/
     474void TriaRef::GetLFS(IssmDouble* LFS, GaussTria* gauss){
     475        /* Compute L  matrix. L=[L1 L2 L3] where Li is square and of size numdof.
     476         * For node i, Li can be expressed in the actual coordinate system
     477         * by:
     478         *       Li=[ h 0 0 ]
     479         * where h is the interpolation function for node i.
     480         */
     481
     482        /*Fetch number of nodes for this finite element*/
     483        int pnumnodes = this->NumberofNodesPressure();
     484        int vnumnodes = this->NumberofNodesVelocity();
     485        int pnumdof   = pnumnodes;
     486        int vnumdof   = vnumnodes*NDOF2;
     487
     488        /*Get nodal functions derivatives*/
     489        IssmDouble* vbasis=xNew<IssmDouble>(vnumnodes);
     490        GetNodalFunctionsVelocity(vbasis,gauss);
     491
     492        /*Build LFS: */
     493        for(int i=0;i<vnumnodes;i++){
     494                LFS[2*i+0] = vbasis[i];
     495                LFS[2*i+1] = 0.;
     496        }
     497
     498        for(int i=0;i<pnumnodes;i++){
     499                LFS[i+vnumdof+0] = 0.;
     500        }
     501
     502        /*Clean-up*/
     503        xDelete<IssmDouble>(vbasis);
    471504}
    472505/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/TriaRef.h

    r16371 r16373  
    3737                void GetJacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,GaussTria* gauss);
    3838                void GetJacobianInvert(IssmDouble*  Jinv, IssmDouble* xyz_list,GaussTria* gauss);
     39                void GetLFS(IssmDouble* LFS, GaussTria* gauss);
    3940                void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss);
    4041                void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement);
  • issm/trunk-jpl/src/c/classes/Loads/Friction.cpp

    r15224 r16373  
    9191        if (Neff<0)Neff=0;
    9292
    93         if(strcmp(element_type,"2d")==0){
     93        if(strcmp(element_type,"1d")==0){
     94                this->GetInputValue(&vx, gauss,vxenum);
     95                vmag=sqrt(vx*vx);
     96        }
     97        else if(strcmp(element_type,"2d")==0){
    9498                this->GetInputValue(&vx, gauss,vxenum);
    9599                this->GetInputValue(&vy, gauss,vyenum);
Note: See TracChangeset for help on using the changeset viewer.