Changeset 18369


Ignore:
Timestamp:
08/12/14 16:38:41 (11 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixed H-Hobs cost function for balancethickness2

Location:
issm/trunk-jpl/src/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp

    r18224 r18369  
    100100                hu2 = hobs*hobs*vbarobs2;
    101101
    102                 /*H^2 - Hobs^2*/
    103                 NUMxH2 = 2.*dbasis[0]*dphi[0]*(dphi[0]*dphi[0] + dphi[1]*dphi[1] - hu2);
    104                 NUMyH2 = 2.*dbasis[1]*dphi[1]*(dphi[0]*dphi[0] + dphi[1]*dphi[1] - hu2);
    105                 DENH2 = vbarobs2*vbarobs2+1.e-14;
    106 
    107                 /*Ubar-Ubar_obs*/
    108                 NUMxUbar = (vyobsbar*dphi[0]*dphi[1] - vxobsbar*dphi[1]*dphi[1])*vbarobs*dbasis[0];
    109                 NUMyUbar = (vyobsbar*dphi[0]*dphi[0] - vxobsbar*dphi[0]*dphi[1])*vbarobs*dbasis[1];
    110                 DENUbar  = pow(dphi[0]*dphi[0] + dphi[1]*dphi[1],3./2.)+1.e-14;
    111 
    112102                /*Loop over all requested responses*/
    113103                for(int resp=0;resp<num_responses;resp++){
     
    117107                                case Balancethickness2MisfitEnum:
    118108                                        /*J = (H^2 - Hobs^2)^2*/
    119                                         //for(i=0;i<numnodes;i++) pe->values[i]+=(NUMxH2+NUMyH2)/DENH2 *weight*Jdet*gauss->weight; NOT WORKING
     109                                        for(i=0;i<numnodes;i++){
     110
     111                                                /*H^2 - Hobs^2*/
     112                                                NUMxH2 = 2.*dbasis[0*numnodes+i]*dphi[0]*(dphi[0]*dphi[0] + dphi[1]*dphi[1] - hu2);
     113                                                NUMyH2 = 2.*dbasis[1*numnodes+i]*dphi[1]*(dphi[0]*dphi[0] + dphi[1]*dphi[1] - hu2);
     114                                                DENH2 = vbarobs2*vbarobs2+1.e-14;
     115
     116                                                /*Ubar-Ubar_obs*/
     117                                                NUMxUbar = (vyobsbar*dphi[0]*dphi[1] - vxobsbar*dphi[1]*dphi[1])*vbarobs*dbasis[0*numnodes+i];
     118                                                NUMyUbar = (vyobsbar*dphi[0]*dphi[0] - vxobsbar*dphi[0]*dphi[1])*vbarobs*dbasis[1*numnodes+i];
     119                                                DENUbar  = pow(dphi[0]*dphi[0] + dphi[1]*dphi[1],3./2.)+1.e-14;
     120
     121                                                pe->values[i]+=(NUMxH2+NUMyH2)/DENH2 *weight*Jdet*gauss->weight;
     122                                        }
    120123                                        /*J = phi^2*/
    121                                         //for(i=0;i<numnodes;i++) pe->values[i]+= phi*basis[i]*weight*Jdet*gauss->weight; OK
     124                                        //for(i=0;i<numnodes;i++) pe->values[i]+= phi*basis[i]*weight*Jdet*gauss->weight; //OK
     125                                        /*J = grad J ^2*/
     126                                        //for(i=0;i<numnodes;i++) pe->values[i]+= (dphi[0]*dbasis[0*numnodes+i] + dphi[1]*dbasis[1*numnodes+i])*weight*Jdet*gauss->weight; //OK
    122127                                        /*J = (ubar - nux*uobs)^2*/
    123                                         for(i=0;i<numnodes;i++) pe->values[i]+=(NUMxUbar-NUMyUbar)/DENUbar *weight*Jdet*gauss->weight;
     128                                        //for(i=0;i<numnodes;i++) pe->values[i]+=(NUMxUbar-NUMyUbar)/DENUbar *weight*Jdet*gauss->weight;
    124129                                        break;
    125130                                default:
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r18363 r18369  
    13041304        IssmDouble J_sum;
    13051305
    1306         IssmDouble  weight,thicknessobs,thickness,potential;
     1306        IssmDouble  weight,thicknessobs,thickness,potential,dpotential[2];
    13071307        IssmDouble  vx,vy,vxbar,vybar,vxobs,vyobs,vxbarobs,vybarobs,nux,nuy;
    13081308        IssmDouble  Jdet;
     
    13431343                        thicknessobs_input->GetInputValue(&thicknessobs,gauss);
    13441344                        potential_input->GetInputValue(&potential,gauss);
     1345                        potential_input->GetInputDerivativeValue(&dpotential[0],xyz_list,gauss);
    13451346                        vxobs_input->GetInputValue(&vxobs,gauss);
    13461347                        vyobs_input->GetInputValue(&vyobs,gauss);
     
    13541355
    13551356                        /*J = (H^2 - Hobs^2)^2*/
    1356                         //J +=0.5*(thickness*thickness - thicknessobs*thicknessobs)*(thickness*thickness - thicknessobs*thicknessobs)*weight*Jdet*gauss->weight;
     1357                        J +=0.5*(thickness*thickness - thicknessobs*thicknessobs)*(thickness*thickness - thicknessobs*thicknessobs)*weight*Jdet*gauss->weight;
    13571358                        /*J = phi^2*/
    1358                         //J +=.5*potential*potential*weight*Jdet*gauss->weight; OK
     1359                        //J +=.5*potential*potential*weight*Jdet*gauss->weight;// OK
     1360                        /*J = grad phi^2*/
     1361                        //J +=.5*(dpotential[0]*dpotential[0] + dpotential[1]*dpotential[1])*weight*Jdet*gauss->weight;
    13591362                        /*J = (ubar - nux*uobs)^2*/
    1360                         J +=0.5*((vxbarobs - vxbar)*(vxbarobs - vxbar) + (vybarobs - vybar)*(vybarobs - vybar))*weight*Jdet*gauss->weight;
     1363                        //J +=0.5*((vxbarobs - vxbar)*(vxbarobs - vxbar) + (vybarobs - vybar)*(vybarobs - vybar))*weight*Jdet*gauss->weight;
    13611364                }
    13621365
Note: See TracChangeset for help on using the changeset viewer.