Changeset 18192


Ignore:
Timestamp:
06/27/14 10:27:55 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: moved StrainRate to element

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

Legend:

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

    r18175 r18192  
    113113        /*Assign output pointer*/
    114114        *ptransform=transform;
     115}
     116/*}}}*/
     117void       Element::ComputeStrainRate(){/*{{{*/
     118
     119        int         dim;
     120        IssmDouble *xyz_list = NULL;
     121        IssmDouble  epsilon[6];
     122
     123        /*Retrieve all inputs we will be needing: */
     124        this->GetVerticesCoordinates(&xyz_list);
     125        parameters->FindParam(&dim,DomainDimensionEnum);
     126        Input* vx_input=this->GetInput(VxEnum); _assert_(vx_input);
     127        Input* vy_input=this->GetInput(VyEnum); _assert_(vy_input);
     128        Input* vz_input=NULL;
     129        if(dim==3){vz_input=this->GetInput(VzEnum); _assert_(vz_input);}
     130
     131        /*Allocate arrays*/
     132        int numvertices = this->GetNumberOfVertices();
     133        IssmDouble* eps_xx = xNew<IssmDouble>(numvertices);
     134        IssmDouble* eps_yy = xNew<IssmDouble>(numvertices);
     135        IssmDouble* eps_zz = xNew<IssmDouble>(numvertices);
     136        IssmDouble* eps_xy = xNew<IssmDouble>(numvertices);
     137        IssmDouble* eps_xz = xNew<IssmDouble>(numvertices);
     138        IssmDouble* eps_yz = xNew<IssmDouble>(numvertices);
     139
     140        /* Start looping on the number of vertices: */
     141        Gauss* gauss=this->NewGauss();
     142        for (int iv=0;iv<numvertices;iv++){
     143                gauss->GaussVertex(iv);
     144
     145                /*Compute strain rate viscosity and pressure: */
     146                if(dim==2)
     147                 this->StrainRateSSA(&epsilon[0],xyz_list,gauss,vx_input,vy_input);
     148                else
     149                 this->StrainRateFS(&epsilon[0],xyz_list,gauss,vx_input,vy_input,vz_input);
     150
     151                if(dim==2){
     152                         /* epsilon=[exx,eyy,exy];*/
     153                        eps_xx[iv]=epsilon[0];
     154                        eps_yy[iv]=epsilon[1];
     155                        eps_xy[iv]=epsilon[2];
     156                }
     157                else{
     158                        /*epsilon=[exx eyy ezz exy exz eyz]*/
     159                        eps_xx[iv]=epsilon[0];
     160                        eps_yy[iv]=epsilon[1];
     161                        eps_zz[iv]=epsilon[2];
     162                        eps_xy[iv]=epsilon[3];
     163                        eps_xz[iv]=epsilon[4];
     164                        eps_yz[iv]=epsilon[5];
     165                }
     166        }
     167
     168        /*Add Stress tensor components into inputs*/
     169        this->AddInput(StrainRatexxEnum,eps_xx,P1Enum);
     170        this->AddInput(StrainRatexyEnum,eps_xy,P1Enum);
     171        this->AddInput(StrainRatexzEnum,eps_xz,P1Enum);
     172        this->AddInput(StrainRateyyEnum,eps_yy,P1Enum);
     173        this->AddInput(StrainRateyzEnum,eps_yz,P1Enum);
     174        this->AddInput(StrainRatezzEnum,eps_zz,P1Enum);
     175
     176        /*Clean up and return*/
     177        delete gauss;
     178        xDelete<IssmDouble>(xyz_list);
     179        xDelete<IssmDouble>(eps_xx);
     180        xDelete<IssmDouble>(eps_yy);
     181        xDelete<IssmDouble>(eps_zz);
     182        xDelete<IssmDouble>(eps_xy);
     183        xDelete<IssmDouble>(eps_xz);
     184        xDelete<IssmDouble>(eps_yz);
     185
    115186}
    116187/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r18135 r18192  
    6060                /* bool       AnyActive(void); */
    6161                void       CoordinateSystemTransform(IssmDouble** ptransform,Node** nodes,int numnodes,int* cs_array);
     62                void       ComputeStrainRate();
    6263                void       Echo();
    6364                void       DeepEcho();
     
    209210                virtual void   ComputeSigmaNN(void)=0;
    210211                virtual void   ComputeBasalStress(Vector<IssmDouble>* sigma_b)=0;
    211                 virtual void   ComputeStrainRate()=0;
    212                 virtual void   ComputeStrainRate(Vector<IssmDouble>* eps)=0;
    213212                virtual void   ComputeStressTensor(void)=0;
    214213                virtual void   ComputeDeviatoricStressTensor(void)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r18190 r18192  
    223223        /*Add value to output*/
    224224        sigma_b->SetValue(id-1,value,INS_VAL);
    225 }
    226 /*}}}*/
    227 void       Penta::ComputeStrainRate(){/*{{{*/
    228 
    229         IssmDouble      xyz_list[NUMVERTICES][3];
    230         IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,exy];*/
    231         IssmDouble      eps_xx[NUMVERTICES];
    232         IssmDouble               eps_yy[NUMVERTICES];
    233         IssmDouble               eps_zz[NUMVERTICES];
    234         IssmDouble      eps_xy[NUMVERTICES];
    235         IssmDouble               eps_xz[NUMVERTICES];
    236         IssmDouble               eps_yz[NUMVERTICES];
    237         GaussPenta*     gauss=NULL;
    238 
    239         /* Get node coordinates and dof list: */
    240         ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    241 
    242         /*Retrieve all inputs we will be needing: */
    243         Input* vx_input=inputs->GetInput(VxEnum);             _assert_(vx_input);
    244         Input* vy_input=inputs->GetInput(VyEnum);             _assert_(vy_input);
    245         Input* vz_input=inputs->GetInput(VzEnum);             _assert_(vz_input);
    246 
    247         /* Start looping on the number of vertices: */
    248         gauss=new GaussPenta();
    249         for (int iv=0;iv<NUMVERTICES;iv++){
    250                 gauss->GaussVertex(iv);
    251 
    252                 /*Compute strain rate viscosity and pressure: */
    253                 this->StrainRateFS(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
    254 
    255                 eps_xx[iv]=epsilon[0];
    256                 eps_yy[iv]=epsilon[1];
    257                 eps_zz[iv]=epsilon[2];
    258                 eps_xy[iv]=epsilon[3];
    259                 eps_xz[iv]=epsilon[4];
    260                 eps_yz[iv]=epsilon[5];
    261         }
    262 
    263         /*Add Stress tensor components into inputs*/
    264         this->inputs->AddInput(new PentaInput(StrainRatexxEnum,&eps_xx[0],P1Enum));
    265         this->inputs->AddInput(new PentaInput(StrainRatexyEnum,&eps_xy[0],P1Enum));
    266         this->inputs->AddInput(new PentaInput(StrainRatexzEnum,&eps_xz[0],P1Enum));
    267         this->inputs->AddInput(new PentaInput(StrainRateyyEnum,&eps_yy[0],P1Enum));
    268         this->inputs->AddInput(new PentaInput(StrainRateyzEnum,&eps_yz[0],P1Enum));
    269         this->inputs->AddInput(new PentaInput(StrainRatezzEnum,&eps_zz[0],P1Enum));
    270 
    271         /*Clean up and return*/
    272         delete gauss;
    273225}
    274226/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r18135 r18192  
    5454                IssmDouble CharacteristicLength(void){_error_("not implemented yet");};
    5555                void   ComputeBasalStress(Vector<IssmDouble>* sigma_b);
    56                 void   ComputeStrainRate();
    57                 void   ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
    5856                void   ComputeSigmaNN(){_error_("not implemented yet");};
    5957                void   ComputeStressTensor();
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r18190 r18192  
    5555                void        ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");};
    5656                void        ComputeSigmaNN(){_error_("not implemented yet");};
    57                 void        ComputeStrainRate(){_error_("not implemented yet");};
    58                 void        ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
    5957                void        ComputeStressTensor(){_error_("not implemented yet");};
    6058                void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r18139 r18192  
    5555                void        ComputeBasalStress(Vector<IssmDouble>* sigma_b){_error_("not implemented yet");};
    5656                void        ComputeSigmaNN(){_error_("not implemented yet");};
    57                 void        ComputeStrainRate(){_error_("not implemented yet");};
    58                 void        ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
    5957                void        ComputeStressTensor(){_error_("not implemented yet");};
    6058                void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r18190 r18192  
    196196                delete gauss;
    197197        }
    198 }
    199 /*}}}*/
    200 void       Tria::ComputeStrainRate(){/*{{{*/
    201 
    202         IssmDouble      xyz_list[NUMVERTICES][3];
    203         IssmDouble      epsilon[6]; /* epsilon=[exx,eyy,exy];*/
    204         IssmDouble      eps_xx[NUMVERTICES];
    205         IssmDouble               eps_yy[NUMVERTICES];
    206         IssmDouble               eps_zz[NUMVERTICES]={0,0,0};
    207         IssmDouble      eps_xy[NUMVERTICES];
    208         IssmDouble               eps_xz[NUMVERTICES]={0,0,0};
    209         IssmDouble               eps_yz[NUMVERTICES]={0,0,0};
    210         GaussTria*     gauss=NULL;
    211 
    212         /* Get node coordinates and dof list: */
    213         ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    214 
    215         /*Retrieve all inputs we will be needing: */
    216         Input* vx_input=inputs->GetInput(VxEnum);             _assert_(vx_input);
    217         Input* vy_input=inputs->GetInput(VyEnum);             _assert_(vy_input);
    218 
    219         /* Start looping on the number of vertices: */
    220         gauss=new GaussTria();
    221         for (int iv=0;iv<NUMVERTICES;iv++){
    222                 gauss->GaussVertex(iv);
    223 
    224                 /*Compute strain rate viscosity and pressure: */
    225                 this->StrainRateSSA(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    226 
    227                 eps_xx[iv]=epsilon[0];
    228                 eps_yy[iv]=epsilon[1];
    229                 eps_xy[iv]=epsilon[2];
    230         }
    231 
    232         /*Add Stress tensor components into inputs*/
    233         this->inputs->AddInput(new TriaInput(StrainRatexxEnum,&eps_xx[0],P1Enum));
    234         this->inputs->AddInput(new TriaInput(StrainRatexyEnum,&eps_xy[0],P1Enum));
    235         this->inputs->AddInput(new TriaInput(StrainRatexzEnum,&eps_xz[0],P1Enum));
    236         this->inputs->AddInput(new TriaInput(StrainRateyyEnum,&eps_yy[0],P1Enum));
    237         this->inputs->AddInput(new TriaInput(StrainRateyzEnum,&eps_yz[0],P1Enum));
    238         this->inputs->AddInput(new TriaInput(StrainRatezzEnum,&eps_zz[0],P1Enum));
    239 
    240         /*Clean up and return*/
    241         delete gauss;
    242 
    243198}
    244199/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r18135 r18192  
    5353                void        ComputeBasalStress(Vector<IssmDouble>* sigma_b);
    5454                void        ComputeSigmaNN();
    55                 void               ComputeStrainRate();
    56                 void               ComputeStrainRate(Vector<IssmDouble>* eps){_error_("not implemented yet");};
    5755                void        ComputeStressTensor();
    5856                void        ComputeDeviatoricStressTensor();
Note: See TracChangeset for help on using the changeset viewer.