Ignore:
Timestamp:
01/22/15 14:51:25 (10 years ago)
Author:
Mathieu Morlighem
Message:

NEW: testing new calving law

File:
1 edited

Legend:

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

    r19029 r19033  
    326326        delete gauss;
    327327
     328}
     329/*}}}*/
     330void       Tria::CalvingRateDev(){/*{{{*/
     331
     332        IssmDouble  xyz_list[NUMVERTICES][3];
     333        IssmDouble  epsilon[3]; /* epsilon=[exx,eyy,exy];*/
     334        IssmDouble  calvingratex[NUMVERTICES];
     335        IssmDouble  calvingratey[NUMVERTICES];
     336        IssmDouble  calvingrate[NUMVERTICES];
     337        IssmDouble  lambda1,lambda2,ex,ey,vx,vy,vel;
     338
     339        /* Get node coordinates and dof list: */
     340        ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     341
     342        /*Retrieve all inputs and parameters we will need*/
     343        Input* vx_input=inputs->GetInput(VxEnum);        _assert_(vx_input);
     344        Input* vy_input=inputs->GetInput(VyEnum);        _assert_(vy_input);
     345
     346        /* Start looping on the number of vertices: */
     347        GaussTria* gauss=new GaussTria();
     348        for(int iv=0;iv<NUMVERTICES;iv++){
     349                gauss->GaussVertex(iv);
     350
     351                /*Get velocity components and thickness*/
     352                vx_input->GetInputValue(&vx,gauss);
     353                vy_input->GetInputValue(&vy,gauss);
     354                vel=sqrt(vx*vx+vy*vy)+1.e-14;
     355
     356                /*Compute strain rate and viscosity: */
     357                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     358
     359                /*Get Eigen values*/
     360                Matrix2x2Eigen(&lambda1,&lambda2,&ex,&ey,epsilon[0],epsilon[2],epsilon[1]);
     361
     362                /*Process Eigen values*/
     363                lambda1>0? lambda1 = pow(lambda1,.3) : lambda1=0.;
     364                lambda2>0? lambda2 = pow(lambda2,.3) : lambda2=0.;
     365                lambda1 = lambda1*5.e-2;
     366                lambda2 = lambda2*5.e-2;
     367                _assert_(!xIsNan<IssmDouble>(lambda1));
     368                _assert_(!xIsNan<IssmDouble>(lambda2));
     369
     370                /*Assign values*/
     371                //calvingratex[iv]=ex*lambda1 - ey*lambda2;
     372                //calvingratey[iv]=ey*lambda1 + ex*lambda2;
     373                calvingratex[iv]=vx/vel*(lambda1 + lambda2);
     374                calvingratey[iv]=vy/vel*(lambda1 + lambda2);
     375                calvingrate[iv]=sqrt(calvingratex[iv]*calvingratex[iv] + calvingratey[iv]*calvingratey[iv]);
     376        }
     377
     378        /*Add input*/
     379        this->inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum));
     380        this->inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));
     381        this->inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));
     382
     383        /*Clean up and return*/
     384        delete gauss;
    328385}
    329386/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.