Ignore:
Timestamp:
10/20/10 11:49:18 (14 years ago)
Author:
Mathieu Morlighem
Message:

Added regularization for Balnced thickness CM and fix gradient bug

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r6260 r6347  
    12751275        int        i,ig;
    12761276        int        doflist1[NUMVERTICES];
    1277         double     thickness,Jdet;
     1277        double     thickness,Jdet,cm_noisedmp;
    12781278        double     l1l2l3[3];
    1279         double     Dlambda[2];
     1279        double     dbasis[NDOF2][NUMVERTICES];
     1280        double     Dlambda[2],dp[2];
    12801281        double     xyz_list[NUMVERTICES][3];
    12811282        double     grade_g[NUMVERTICES] = {0.0};
     
    12871288
    12881289        /*Retrieve all inputs we will be needing: */
     1290        this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum);
    12891291        Input* adjoint_input=inputs->GetInput(AdjointEnum);     ISSMASSERT(adjoint_input);
    12901292        Input* thickness_input=inputs->GetInput(ThicknessEnum); ISSMASSERT(thickness_input);
     
    12981300                GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
    12991301                GetNodalFunctions(l1l2l3, gauss);
     1302                GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
    13001303               
    13011304                adjoint_input->GetParameterDerivativeValue(&Dlambda[0],&xyz_list[0][0],gauss);
    13021305                thickness_input->GetParameterValue(&thickness, gauss);
    1303 
    1304                 for(i=0;i<NUMVERTICES;i++) grade_g[i]=thickness*Dlambda[0]*Jdet*gauss->weight*l1l2l3[i];
     1306                thickness_input->GetParameterDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
     1307
     1308                for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[0]*Jdet*gauss->weight*l1l2l3[i];
     1309
     1310                //noise dampening d/dki(1/2*(dk/dx)^2)
     1311                for (i=0;i<NUMVERTICES;i++) grade_g[i]-=cm_noisedmp*Jdet*gauss->weight*(dbasis[0][i]*dp[0]+dbasis[1][i]*dp[1]);
    13051312        }
    13061313
     
    13171324        int        i,ig;
    13181325        int        doflist1[NUMVERTICES];
    1319         double     thickness,Jdet;
     1326        double     thickness,Jdet,cm_noisedmp;
    13201327        double     l1l2l3[3];
    1321         double     Dlambda[2];
     1328        double     dbasis[NDOF2][NUMVERTICES];
     1329        double     Dlambda[2],dp[2];
    13221330        double     xyz_list[NUMVERTICES][3];
    13231331        double     grade_g[NUMVERTICES] = {0.0};
     
    13251333
    13261334        /* Get node coordinates and dof list: */
     1335        this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum);
    13271336        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
    13281337        GetDofList1(&doflist1[0]);
     
    13381347                gauss->GaussPoint(ig);
    13391348
     1349                GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
     1350                GetNodalFunctions(l1l2l3, gauss);
     1351                GetNodalFunctionsDerivatives(&dbasis[0][0],&xyz_list[0][0],gauss);
     1352
    13401353                adjoint_input->GetParameterDerivativeValue(&Dlambda[0],&xyz_list[0][0],gauss);
    13411354                thickness_input->GetParameterValue(&thickness, gauss);
    1342 
    1343                 GetJacobianDeterminant2d(&Jdet, &xyz_list[0][0],gauss);
    1344                 GetNodalFunctions(l1l2l3, gauss);
    1345 
    1346                 for(i=0;i<NUMVERTICES;i++) grade_g[i]=thickness*Dlambda[1]*Jdet*gauss->weight*l1l2l3[i];
     1355                thickness_input->GetParameterDerivativeValue(&dp[0],&xyz_list[0][0],gauss);
     1356
     1357                for(i=0;i<NUMVERTICES;i++) grade_g[i]+=thickness*Dlambda[1]*Jdet*gauss->weight*l1l2l3[i];
     1358
     1359                //noise dampening d/dki(1/2*(dk/dx)^2)
     1360                for (i=0;i<NUMVERTICES;i++) grade_g[i]-=cm_noisedmp*Jdet*gauss->weight*(dbasis[0][i]*dp[0]+dbasis[1][i]*dp[1]);
    13471361        }
    13481362
Note: See TracChangeset for help on using the changeset viewer.