Changeset 11375
- Timestamp:
- 02/08/12 17:17:19 (13 years ago)
- Location:
- issm/trunk-jpl-damage/src/c/objects/Elements
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl-damage/src/c/objects/Elements/Tria.cpp
r11292 r11375 1440 1440 1441 1441 /*Go through all the input objects, and find the one corresponding to enum_type, if it exists: */ 1442 if (enum_type==MaterialsRheologyBbarEnum ) input=this->matice->inputs->GetInput(enum_type);1442 if (enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum) input=this->matice->inputs->GetInput(enum_type); 1443 1443 else input=this->inputs->GetInput(enum_type); 1444 1444 //if (!input) _error_("Input %s not found in tria->inputs",EnumToStringx(enum_type)); … … 1544 1544 break; 1545 1545 case MaterialsRheologyBbarEnum: 1546 case MaterialsRheologyZbarEnum: 1546 1547 /*Matice will take care of it*/ break; 1547 1548 default: … … 1732 1733 1733 1734 /*update input*/ 1734 if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum ){1735 if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyZbarEnum || name==MaterialsRheologyZEnum ){ 1735 1736 matice->inputs->AddInput(new TriaP1Input(name,values)); 1736 1737 } … … 2732 2733 *presponse=this->matice->GetBbar(); 2733 2734 break; 2735 case MaterialsRheologyZbarEnum: 2736 *presponse=this->matice->GetZbar(); 2737 break; 2734 2738 case VelEnum: 2735 2739 … … 3244 3248 for(int i=0;i<num_controls;i++){ 3245 3249 3246 if(control_type[i]==MaterialsRheologyBbarEnum ){3250 if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsRheologyZbarEnum){ 3247 3251 input=(Input*)matice->inputs->GetInput(control_type[i]); _assert_(input); 3248 3252 } … … 3271 3275 Input* input=NULL; 3272 3276 3273 if(enum_type==MaterialsRheologyBbarEnum ){3277 if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){ 3274 3278 input=(Input*)matice->inputs->GetInput(enum_type); 3275 3279 } … … 3289 3293 Input* input=NULL; 3290 3294 3291 if(enum_type==MaterialsRheologyBbarEnum ){3295 if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){ 3292 3296 input=(Input*)matice->inputs->GetInput(enum_type); 3293 3297 } … … 3308 3312 Input* input=NULL; 3309 3313 3310 if(enum_type==MaterialsRheologyBbarEnum ){3314 if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){ 3311 3315 input=(Input*)matice->inputs->GetInput(enum_type); 3312 3316 } … … 3338 3342 case MaterialsRheologyBbarEnum: 3339 3343 GradjBMacAyeal(gradient); 3344 break; 3345 case MaterialsRheologyZbarEnum: 3346 GradjZMacAyeal(gradient); 3340 3347 break; 3341 3348 case BalancethicknessThickeningRateEnum: … … 3423 3430 } 3424 3431 /*}}}*/ 3432 /*FUNCTION Tria::GradjZGradient{{{1*/ 3433 void Tria::GradjZGradient(Vec gradient, int weight_index){ 3434 3435 int i,ig; 3436 int doflist1[NUMVERTICES]; 3437 double Jdet,weight; 3438 double xyz_list[NUMVERTICES][3]; 3439 double dbasis[NDOF2][NUMVERTICES]; 3440 double dk[NDOF2]; 3441 double grade_g[NUMVERTICES]={0.0}; 3442 GaussTria *gauss=NULL; 3443 3444 /*Retrieve all inputs we will be needing: */ 3445 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 3446 GetDofList1(&doflist1[0]); 3447 Input* rheologyz_input=matice->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input); 3448 Input* weights_input=inputs->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 3449 3450 /* Start looping on the number of gaussian points: */ 3451 gauss=new GaussTria(2); 3452 for (ig=gauss->begin();ig<gauss->end();ig++){ 3453 3454 gauss->GaussPoint(ig); 3455 3456 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3457 GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss); 3458 weights_input->GetInputValue(&weight,gauss,weight_index); 3459 3460 /*Build alpha_complement_list: */ 3461 rheologyz_input->GetInputDerivativeValue(&dk[0],&xyz_list[0][0],gauss); 3462 3463 /*Build gradje_g_gaussian vector (actually -dJ/ddrag): */ 3464 for (i=0;i<NUMVERTICES;i++) grade_g[i]+=-weight*Jdet*gauss->weight*(dbasis[0][i]*dk[0]+dbasis[1][i]*dk[1]); 3465 } 3466 VecSetValues(gradient,NUMVERTICES,doflist1,(const double*)grade_g,ADD_VALUES); 3467 3468 /*Clean up and return*/ 3469 delete gauss; 3470 } 3471 /*}}}*/ 3425 3472 /*FUNCTION Tria::GradjBMacAyeal{{{1*/ 3426 3473 void Tria::GradjBMacAyeal(Vec gradient){ … … 3464 3511 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 3465 3512 matice->GetViscosityComplement(&viscosity_complement,&epsilon[0]); 3513 3514 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); 3515 GetNodalFunctions(basis,gauss); 3516 3517 /*standard gradient dJ/dki*/ 3518 for (i=0;i<NUMVERTICES;i++) grad[i]+=-viscosity_complement*thickness*( 3519 (2*dvx[0]+dvy[1])*2*dadjx[0]+(dvx[1]+dvy[0])*(dadjx[1]+dadjy[0])+(2*dvy[1]+dvx[0])*2*dadjy[1] 3520 )*Jdet*gauss->weight*basis[i]; 3521 } 3522 3523 VecSetValues(gradient,NUMVERTICES,doflist,(const double*)grad,ADD_VALUES); 3524 3525 /*clean-up*/ 3526 delete gauss; 3527 } 3528 /*}}}*/ 3529 /*FUNCTION Tria::GradjZMacAyeal{{{1*/ 3530 void Tria::GradjZMacAyeal(Vec gradient){ 3531 3532 /*Intermediaries*/ 3533 int i,ig; 3534 int doflist[NUMVERTICES]; 3535 double vx,vy,lambda,mu,thickness,Jdet; 3536 double viscosity_complement; 3537 double dvx[NDOF2],dvy[NDOF2],dadjx[NDOF2],dadjy[NDOF2],dZ[NDOF2]; 3538 double xyz_list[NUMVERTICES][3]; 3539 double basis[3],epsilon[3]; 3540 double grad[NUMVERTICES]={0.0}; 3541 GaussTria *gauss = NULL; 3542 3543 /* Get node coordinates and dof list: */ 3544 GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES); 3545 GetDofList1(&doflist[0]); 3546 3547 /*Retrieve all inputs*/ 3548 Input* thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input); 3549 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 3550 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 3551 Input* adjointx_input=inputs->GetInput(AdjointxEnum); _assert_(adjointx_input); 3552 Input* adjointy_input=inputs->GetInput(AdjointyEnum); _assert_(adjointy_input); 3553 Input* rheologyz_input=matice->inputs->GetInput(MaterialsRheologyZbarEnum); _assert_(rheologyz_input); 3554 3555 /* Start looping on the number of gaussian points: */ 3556 gauss=new GaussTria(4); 3557 for (ig=gauss->begin();ig<gauss->end();ig++){ 3558 3559 gauss->GaussPoint(ig); 3560 3561 thickness_input->GetInputValue(&thickness,gauss); 3562 rheologyz_input->GetInputDerivativeValue(&dZ[0],&xyz_list[0][0],gauss); 3563 vx_input->GetInputDerivativeValue(&dvx[0],&xyz_list[0][0],gauss); 3564 vy_input->GetInputDerivativeValue(&dvy[0],&xyz_list[0][0],gauss); 3565 adjointx_input->GetInputDerivativeValue(&dadjx[0],&xyz_list[0][0],gauss); 3566 adjointy_input->GetInputDerivativeValue(&dadjy[0],&xyz_list[0][0],gauss); 3567 3568 this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input); 3569 matice->GetViscosityZComplement(&viscosity_complement,&epsilon[0]); 3466 3570 3467 3571 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss); -
issm/trunk-jpl-damage/src/c/objects/Elements/Tria.h
r11260 r11375 142 142 void Gradj(Vec gradient,int control_type); 143 143 void GradjBGradient(Vec gradient,int weight_index); 144 void GradjZGradient(Vec gradient,int weight_index); 144 145 void GradjBMacAyeal(Vec gradient); 146 void GradjZMacAyeal(Vec gradient); 145 147 void GradjDragMacAyeal(Vec gradient); 146 148 void GradjDragStokes(Vec gradient);
Note:
See TracChangeset
for help on using the changeset viewer.