Changeset 16996


Ignore:
Timestamp:
12/03/13 11:28:58 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: cleaning up

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

Legend:

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

    r16993 r16996  
    45204520}
    45214521/*}}}*/
    4522 /*FUNCTION Penta::KMatrixGLSstabilization{{{*/
    4523 void Penta::KMatrixGLSstabilization(ElementMatrix* Ke){
    4524 
    4525         int        numdof  = NUMVERTICES*NDOF4;
    4526 
    4527         /*Intermediaries */
    4528         int        i,j;
    4529         IssmDouble Jdet,viscosity,FSreconditioning,diameter,rigidity;
    4530         IssmDouble xyz_list[NUMVERTICES][3];
    4531         IssmDouble epsilon[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/
    4532         GaussPenta *gauss=NULL;
    4533 
    4534         /*Stabilization*/
    4535         IssmDouble D_scalar;
    4536         IssmDouble dbasis[3][6];
    4537         IssmDouble dmu[3];
    4538         IssmDouble mu;
    4539         IssmDouble dnodalbasis[6][6][3];
    4540         IssmDouble SU[6][4][4];
    4541         IssmDouble SW[6][4][4];
    4542         int p,q,ii;
    4543         int c=3; //index of pressure
    4544 
    4545         /*Retrieve all inputs and parameters*/
    4546         ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    4547         parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum);
    4548         Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);
    4549         Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);
    4550         Input* vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);
    4551 
    4552         /*Find minimal length and B*/
    4553         rigidity=material->GetB();
    4554         diameter=MinEdgeLength(&xyz_list[0][0]);
    4555 
    4556                 gauss=new GaussPenta();
    4557                 for(int iv=0;iv<6;iv++){
    4558                         gauss->GaussVertex(iv);
    4559                         GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    4560                         for(i=0;i<6;i++){
    4561                                 for(j=0;j<3;j++){
    4562                                         dnodalbasis[i][iv][j] = dbasis[j][i];
    4563                                 }
    4564                         }
    4565                 }
    4566                 delete gauss;
    4567 
    4568         /* Start  looping on the number of gaussian points: */
    4569         gauss=new GaussPenta(5,5);
    4570         for(int ig=gauss->begin();ig<gauss->end();ig++){
    4571 
    4572                 gauss->GaussPoint(ig);
    4573 
    4574                 GetJacobianDeterminant(&Jdet, &xyz_list[0][0],gauss);
    4575 
    4576                 this->StrainRateFS(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input,vz_input);
    4577                 material->GetViscosity3dFS(&viscosity,&epsilon[0]);
    4578 
    4579                 D_scalar=gauss->weight*Jdet;
    4580 
    4581                 /*Add stabilization*/
    4582                 GetNodalFunctionsP1Derivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    4583                 dmu[0]=0.; dmu[1]=0.; dmu[2]=0.;
    4584                 mu = 2.*viscosity;
    4585                 for(p=0;p<6;p++) for(i=0;i<4;i++) for(j=0;j<4;j++){
    4586                         SU[p][i][j]=0.;
    4587                         SW[p][i][j]=0.;
    4588                 }
    4589                 for(p=0;p<6;p++){
    4590                         for(i=0;i<3;i++){
    4591                                 SU[p][i][c] += dbasis[i][p];
    4592                                 SW[p][c][i] += dbasis[i][p];
    4593                                 for(j=0;j<3;j++){
    4594                                         SU[p][i][i] += -dmu[j]*dbasis[j][p];
    4595                                         SU[p][i][j] += -dmu[i]*dbasis[i][p];
    4596                                         for(ii=0;ii<6;ii++){
    4597                                                 SU[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
    4598                                                 SU[p][i][j] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
    4599                                         }
    4600                                         SW[p][i][i] += -dmu[j]*dbasis[j][p];
    4601                                         SW[p][j][i] += -dmu[j]*dbasis[i][p];
    4602                                         for(ii=0;ii<6;ii++){
    4603                                                 SW[p][i][i] += -mu*dnodalbasis[p][ii][j]*dbasis[j][ii];
    4604                                                 SW[p][j][i] += -mu*dnodalbasis[p][ii][i]*dbasis[j][ii];
    4605                                         }
    4606                                 }
    4607                         }
    4608                 }
    4609                 IssmDouble tau = 1./3.*pow(diameter,2)/(8.*2.*viscosity);
    4610                 for(p=0;p<6;p++){
    4611                         for(q=0;q<6;q++){
    4612                                 for(i=0;i<4;i++){
    4613                                         for(j=0;j<4;j++){
    4614                                                 Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][0]*SU[q][0][j];
    4615                                                 Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][1]*SU[q][1][j];
    4616                                                 Ke->values[(p*4+i)*numdof+q*4+j] += gauss->weight*Jdet*tau*SW[p][i][2]*SU[q][2][j];
    4617                                         }
    4618                                 }
    4619                         }
    4620                 }
    4621         }
    4622 
    4623         /*Clean up*/
    4624         delete gauss;
    4625 }
    4626 /*}}}*/
    46274522#endif
    46284523
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r16993 r16996  
    212212                void           GetMaterialInputValue(IssmDouble* pvalue,Node* node,int enumtype);
    213213                Node*          GetNode(int node_number);
    214                 void           GetStrainRate3dHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss, Input* vx_input, Input* vy_input);
    215                 void           GetStrainRate3d(IssmDouble* epsilon,IssmDouble* xyz_list, Gauss* gauss, Input* vx_input, Input* vy_input, Input* vz_input);
    216214                Penta*         GetUpperElement(void);
    217215                Penta*         GetLowerElement(void);
     
    257255                ElementVector* CreateDVectorStressbalanceHoriz(void);
    258256                ElementVector* CreateDVectorStressbalanceFS(void);
    259                 void           KMatrixGLSstabilization(ElementMatrix* Ke);
    260257                #endif
    261258
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r16993 r16996  
    30623062#endif
    30633063
    3064 #ifdef _HAVE_STRESSBALANCE_
    3065 /*FUNCTION Tria::GetYcoord {{{*/
    3066 IssmDouble Tria::GetYcoord(GaussTria* gauss){
    3067 
    3068         IssmDouble y;
    3069         IssmDouble xyz_list[NUMVERTICES][3];
    3070         IssmDouble y_list[NUMVERTICES];
    3071 
    3072         ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
    3073         for(int i=0;i<NUMVERTICES;i++) y_list[i]=xyz_list[i][1];
    3074         TriaRef::GetInputValue(&y,&y_list[0],gauss,P1Enum);
    3075 
    3076         return y;
    3077 }
    3078 /*}}}*/
    3079 #endif
    3080 
    30813064#ifdef _HAVE_CONTROL_
    30823065/*FUNCTION Tria::BalancethicknessMisfit{{{*/
     
    49054888#endif
    49064889
    4907 #ifdef _HAVE_DAMAGE_
    4908 /*FUNCTION Tria::DamageEvolutionF{{{*/
    4909 void Tria::DamageEvolutionF(IssmDouble* f){
    4910 
    4911         /*Intermediaries */
    4912         IssmDouble c1,c2,c3,healing,stress_threshold;
    4913         IssmDouble s_xx,s_xy,s_yy;
    4914         IssmDouble J2s;
    4915         IssmDouble Xis;
    4916         IssmDouble Psi;
    4917         IssmDouble PosPsi;
    4918         IssmDouble NegPsi;
    4919         Input* damage_input=NULL;
    4920         Input* sigma_xx_input  = NULL;
    4921         Input* sigma_xy_input  = NULL;
    4922         Input* sigma_yy_input  = NULL;
    4923         GaussTria* gauss=NULL;
    4924         IssmDouble damage,sigma_xx,sigma_xy,sigma_yy;
    4925 
    4926         /*retrieve parameters:*/
    4927         this->parameters->FindParam(&c1,DamageC1Enum);
    4928         this->parameters->FindParam(&c2,DamageC2Enum);
    4929         this->parameters->FindParam(&c3,DamageC3Enum);
    4930         this->parameters->FindParam(&healing,DamageHealingEnum);
    4931         this->parameters->FindParam(&stress_threshold,DamageStressThresholdEnum);
    4932 
    4933         /*Compute stress tensor: */
    4934         this->ComputeStressTensor();
    4935 
    4936         /*retrieve what we need: */
    4937         sigma_xx_input  = inputs->GetInput(StressTensorxxEnum);  _assert_(sigma_xx_input);
    4938         sigma_xy_input  = inputs->GetInput(StressTensorxyEnum);  _assert_(sigma_xy_input);
    4939         sigma_yy_input  = inputs->GetInput(StressTensoryyEnum);  _assert_(sigma_yy_input);
    4940         damage_input  = this->material->inputs->GetInput(DamageDbarEnum);        _assert_(damage_input);
    4941 
    4942         /*Damage evolution z mapping: */
    4943         gauss=new GaussTria();
    4944         J2s=0;
    4945         for (int iv=0;iv<NUMVERTICES;iv++){
    4946                 gauss->GaussVertex(iv);
    4947                
    4948                 damage_input->GetInputValue(&damage,gauss);
    4949                 sigma_xx_input->GetInputValue(&sigma_xx,gauss);
    4950                 sigma_xy_input->GetInputValue(&sigma_xy,gauss);
    4951                 sigma_yy_input->GetInputValue(&sigma_yy,gauss);
    4952 
    4953                 s_xx=sigma_xx/(1-damage);
    4954                 s_xy=sigma_xy/(1-damage);
    4955                 s_yy=sigma_yy/(1-damage);
    4956 
    4957                 J2s=1.0/sqrt(2.0)*sqrt(pow(s_xx,2)+pow(s_yy,2)+2*pow(s_xy,2));
    4958                
    4959                 Xis=sqrt(3.0)*J2s;
    4960 
    4961                 Psi=Xis-stress_threshold;
    4962 
    4963                 PosPsi=max(Psi,0.0);
    4964                 NegPsi=max(-Psi,0.0);
    4965 
    4966                 f[iv]= c1* ( pow(PosPsi,c2)   -  healing * pow(NegPsi,c2) )  *   pow((1 - damage),-c3);
    4967 
    4968         }
    4969        
    4970         /*Clean up and return*/
    4971         delete gauss;
    4972 }
    4973 /*}}}*/
    4974 #endif
    4975 
    49764890#ifdef _HAVE_DAKOTA_
    49774891/*FUNCTION Tria::InputUpdateFromVectorDakota(IssmDouble* vector, int name, int type);{{{*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r16993 r16996  
    261261                void           ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};
    262262
    263                 #ifdef _HAVE_STRESSBALANCE_
    264                 void           PVectorGLSstabilization(ElementVector* pe);
    265                 IssmDouble     GetYcoord(GaussTria* gauss);
    266                 #endif
    267 
    268263                void UpdateConstraintsExtrudeFromBase(void);
    269264                void UpdateConstraintsExtrudeFromTop(void);
     
    283278                void           HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask);
    284279                void           ComputeEPLThickness(void);
    285 
    286                 #endif
    287 
    288                 #ifdef _HAVE_DAMAGE_
    289                 void           DamageEvolutionF(IssmDouble* flist);
    290                 #endif
    291 
    292 
     280                #endif
    293281                /*}}}*/
    294282
Note: See TracChangeset for help on using the changeset viewer.