Changeset 11375


Ignore:
Timestamp:
02/08/12 17:17:19 (13 years ago)
Author:
cborstad
Message:

tria changes for new damage variable

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  
    14401440
    14411441        /*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);
    14431443        else input=this->inputs->GetInput(enum_type);
    14441444        //if (!input) _error_("Input %s not found in tria->inputs",EnumToStringx(enum_type));
     
    15441544                                        break;
    15451545                                case MaterialsRheologyBbarEnum:
     1546                                case MaterialsRheologyZbarEnum:
    15461547                                        /*Matice will take care of it*/ break;
    15471548                                default:
     
    17321733
    17331734                        /*update input*/
    1734                         if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum){
     1735                        if (name==MaterialsRheologyBbarEnum || name==MaterialsRheologyBEnum || name==MaterialsRheologyZbarEnum || name==MaterialsRheologyZEnum ){
    17351736                                matice->inputs->AddInput(new TriaP1Input(name,values));
    17361737                        }
     
    27322733                        *presponse=this->matice->GetBbar();
    27332734                        break;
     2735                case MaterialsRheologyZbarEnum:
     2736                        *presponse=this->matice->GetZbar();
     2737                        break;
    27342738                case VelEnum:
    27352739
     
    32443248        for(int i=0;i<num_controls;i++){
    32453249
    3246                 if(control_type[i]==MaterialsRheologyBbarEnum){
     3250                if(control_type[i]==MaterialsRheologyBbarEnum || control_type[i]==MaterialsRheologyZbarEnum){
    32473251                        input=(Input*)matice->inputs->GetInput(control_type[i]); _assert_(input);
    32483252                }
     
    32713275        Input* input=NULL;
    32723276
    3273         if(enum_type==MaterialsRheologyBbarEnum){
     3277        if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
    32743278                input=(Input*)matice->inputs->GetInput(enum_type);
    32753279        }
     
    32893293        Input* input=NULL;
    32903294
    3291         if(enum_type==MaterialsRheologyBbarEnum){
     3295        if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
    32923296                input=(Input*)matice->inputs->GetInput(enum_type);
    32933297        }
     
    33083312        Input* input=NULL;
    33093313
    3310         if(enum_type==MaterialsRheologyBbarEnum){
     3314        if(enum_type==MaterialsRheologyBbarEnum || enum_type==MaterialsRheologyZbarEnum){
    33113315                input=(Input*)matice->inputs->GetInput(enum_type);
    33123316        }
     
    33383342                case MaterialsRheologyBbarEnum:
    33393343                        GradjBMacAyeal(gradient);
     3344                        break;
     3345                case MaterialsRheologyZbarEnum:
     3346                        GradjZMacAyeal(gradient);
    33403347                        break;
    33413348                case BalancethicknessThickeningRateEnum:
     
    34233430}
    34243431/*}}}*/
     3432/*FUNCTION Tria::GradjZGradient{{{1*/
     3433void  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/*}}}*/
    34253472/*FUNCTION Tria::GradjBMacAyeal{{{1*/
    34263473void  Tria::GradjBMacAyeal(Vec gradient){
     
    34643511                this->GetStrainRate2d(&epsilon[0],&xyz_list[0][0],gauss,vx_input,vy_input);
    34653512                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*/
     3530void  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]);
    34663570
    34673571                GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
  • issm/trunk-jpl-damage/src/c/objects/Elements/Tria.h

    r11260 r11375  
    142142                void   Gradj(Vec gradient,int control_type);
    143143                void   GradjBGradient(Vec gradient,int weight_index);
     144                void   GradjZGradient(Vec gradient,int weight_index);
    144145                void   GradjBMacAyeal(Vec gradient);
     146                void   GradjZMacAyeal(Vec gradient);
    145147                void   GradjDragMacAyeal(Vec gradient);
    146148                void   GradjDragStokes(Vec gradient);
Note: See TracChangeset for help on using the changeset viewer.