Changeset 17812


Ignore:
Timestamp:
04/22/14 12:19:15 (11 years ago)
Author:
jbondzio
Message:

ADD: Compute Strainrates for Penta and Tria

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

Legend:

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

    r17795 r17812  
    279279void  Penta::ComputeStrainRate(Vector<IssmDouble>* eps){
    280280
    281         _error_("Not implemented yet");
    282 
     281        IssmDouble      xyz_list[NUMVERTICES][3];
     282        IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,exy];*/
     283        IssmDouble      eps_xx[NUMVERTICES];
     284        IssmDouble               eps_yy[NUMVERTICES];
     285        IssmDouble               eps_zz[NUMVERTICES];
     286        IssmDouble      eps_xy[NUMVERTICES];
     287        IssmDouble               eps_xz[NUMVERTICES];
     288        IssmDouble               eps_yz[NUMVERTICES];
     289        GaussPenta*     gauss=NULL;
     290
     291        /* Get node coordinates and dof list: */
     292        ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     293
     294        /*Retrieve all inputs we will be needing: */
     295        Input* vx_input=inputs->GetInput(VxEnum);             _assert_(vx_input);
     296        Input* vy_input=inputs->GetInput(VyEnum);             _assert_(vy_input);
     297        Input* vz_input=inputs->GetInput(VzEnum);             _assert_(vz_input);
     298
     299        /* Start looping on the number of vertices: */
     300        gauss=new GaussPenta();
     301        for (int iv=0;iv<NUMVERTICES;iv++){
     302                gauss->GaussVertex(iv);
     303
     304                /*Compute strain rate viscosity and pressure: */
     305                this->StrainRateFS(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
     306
     307                eps_xx[iv]=epsilon[0];
     308                eps_yy[iv]=epsilon[1];
     309                eps_zz[iv]=epsilon[2];
     310                eps_xy[iv]=epsilon[3];
     311                eps_xz[iv]=epsilon[4];
     312                eps_yz[iv]=epsilon[5];
     313        }
     314
     315        /*Add Stress tensor components into inputs*/
     316        this->inputs->AddInput(new PentaInput(StrainRatexxEnum,&eps_xx[0],P1Enum));
     317        this->inputs->AddInput(new PentaInput(StrainRatexyEnum,&eps_xy[0],P1Enum));
     318        this->inputs->AddInput(new PentaInput(StrainRatexzEnum,&eps_xz[0],P1Enum));
     319        this->inputs->AddInput(new PentaInput(StrainRateyyEnum,&eps_yy[0],P1Enum));
     320        this->inputs->AddInput(new PentaInput(StrainRateyzEnum,&eps_yz[0],P1Enum));
     321        this->inputs->AddInput(new PentaInput(StrainRatezzEnum,&eps_zz[0],P1Enum));
     322
     323        /*Clean up and return*/
     324        delete gauss;
    283325}
    284326/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r17797 r17812  
    204204/*FUNCTION Tria::ComputeStrainRate {{{*/
    205205void  Tria::ComputeStrainRate(Vector<IssmDouble>* eps){
    206         _error_("Not Implemented yet");
     206
     207        IssmDouble      xyz_list[NUMVERTICES][3];
     208        IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,exy];*/
     209        IssmDouble      eps_xx[NUMVERTICES];
     210        IssmDouble               eps_yy[NUMVERTICES];
     211        IssmDouble               eps_zz[NUMVERTICES]={0,0,0};
     212        IssmDouble      eps_xy[NUMVERTICES];
     213        IssmDouble               eps_xz[NUMVERTICES]={0,0,0};
     214        IssmDouble               eps_yz[NUMVERTICES]={0,0,0};
     215        GaussPenta*     gauss=NULL;
     216
     217        /* Get node coordinates and dof list: */
     218        ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
     219
     220        /*Retrieve all inputs we will be needing: */
     221        Input* vx_input=inputs->GetInput(VxEnum);             _assert_(vx_input);
     222        Input* vy_input=inputs->GetInput(VyEnum);             _assert_(vy_input);
     223
     224        /* Start looping on the number of vertices: */
     225        gauss=new GaussPenta();
     226        for (int iv=0;iv<NUMVERTICES;iv++){
     227                gauss->GaussVertex(iv);
     228
     229                /*Compute strain rate viscosity and pressure: */
     230                this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
     231
     232                eps_xx[iv]=epsilon[0];
     233                eps_yy[iv]=epsilon[1];
     234                eps_xy[iv]=epsilon[2];
     235        }
     236
     237        /*Add Stress tensor components into inputs*/
     238        this->inputs->AddInput(new TriaInput(StrainRatexxEnum,&eps_xx[0],P1Enum));
     239        this->inputs->AddInput(new TriaInput(StrainRatexyEnum,&eps_xy[0],P1Enum));
     240        this->inputs->AddInput(new TriaInput(StrainRatexzEnum,&eps_xz[0],P1Enum));
     241        this->inputs->AddInput(new TriaInput(StrainRateyyEnum,&eps_yy[0],P1Enum));
     242        this->inputs->AddInput(new TriaInput(StrainRateyzEnum,&eps_yz[0],P1Enum));
     243        this->inputs->AddInput(new TriaInput(StrainRatezzEnum,&eps_zz[0],P1Enum));
     244
     245        /*Clean up and return*/
     246        delete gauss;
     247
    207248}
    208249/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.