Changeset 18393
- Timestamp:
- 08/14/14 16:15:31 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
r18391 r18393 234 234 /*Intermediaries*/ 235 235 IssmDouble Jdet,weight; 236 IssmDouble vxobs,vyobs ;237 IssmDouble nux,nuy,dphi[2] ;236 IssmDouble vxobs,vyobs,thicknessobs; 237 IssmDouble nux,nuy,dphi[2],dphinorm2,nuvobs2; 238 238 IssmDouble *xyz_list= NULL; 239 239 … … 255 255 Input* nuy_input = element->GetInput(BalancethicknessNuyEnum); _assert_(nuy_input); 256 256 Input* potential_input = element->GetInput(PotentialEnum); _assert_(potential_input); 257 Input* thicknessobs_input=element->GetInput(InversionThicknessObsEnum);_assert_(thicknessobs_input); 257 258 258 259 Gauss* gauss=element->NewGauss(2); … … 268 269 nuy_input->GetInputValue(&nuy,gauss); 269 270 potential_input->GetInputDerivativeValue(&dphi[0],xyz_list,gauss); 271 thicknessobs_input->GetInputValue(&thicknessobs,gauss); 272 273 dphinorm2 = dphi[0]*dphi[0] + dphi[1]*dphi[1]; 274 nuvobs2 = nux*vxobs*nux*vxobs + nuy*vyobs*nuy*vyobs; 270 275 271 276 /*Build gradient vector (actually -dJ/da): */ 272 277 for(int i=0;i<numvertices;i++){ 273 ge[i]+= - weight*Jdet*gauss->weight*(-vxobs)*dphi[1]*(nuy*vyobs*dphi[0] - nux*vxobs*dphi[1])*basis[i]; 278 //ge[i]+= - weight*Jdet*gauss->weight*(-vxobs)*dphi[1]*(nuy*vyobs*dphi[0] - nux*vxobs*dphi[1])*basis[i]; //THIS IS FOR Q//V 279 ge[i]+= - weight*Jdet*gauss->weight*basis[i]*( 280 -2.*nux*vxobs*vxobs*( 281 dphinorm2*dphinorm2 - thicknessobs*thicknessobs*dphinorm2*nuvobs2 282 )/ ( (pow(nux,6)+pow(nuy,6))*pow(vxobs,6) + 3*(nux*vxobs*nuy*vyobs)*(nux*vxobs*nuy*vyobs)*nuvobs2) 283 ); 274 284 _assert_(!xIsNan<IssmDouble>(ge[i])); 275 285 } … … 291 301 /*Intermediaries*/ 292 302 IssmDouble Jdet,weight; 293 IssmDouble vxobs,vyobs ;294 IssmDouble nux,nuy,dphi[2] ;303 IssmDouble vxobs,vyobs,thicknessobs; 304 IssmDouble nux,nuy,dphi[2],dphinorm2,nuvobs2; 295 305 IssmDouble *xyz_list= NULL; 296 306 … … 306 316 element->GetVerticesCoordinates(&xyz_list); 307 317 element->GradientIndexing(&vertexpidlist[0],control_index); 308 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 309 Input* vxobs_input = element->GetInput(BalancethicknessVxObsEnum); _assert_(vxobs_input); 310 Input* vyobs_input = element->GetInput(BalancethicknessVyObsEnum); _assert_(vyobs_input); 311 Input* nux_input = element->GetInput(BalancethicknessNuxEnum); _assert_(nux_input); 312 Input* nuy_input = element->GetInput(BalancethicknessNuyEnum); _assert_(nuy_input); 313 Input* potential_input = element->GetInput(PotentialEnum); _assert_(potential_input); 318 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 319 Input* vxobs_input = element->GetInput(BalancethicknessVxObsEnum); _assert_(vxobs_input); 320 Input* vyobs_input = element->GetInput(BalancethicknessVyObsEnum); _assert_(vyobs_input); 321 Input* nux_input = element->GetInput(BalancethicknessNuxEnum); _assert_(nux_input); 322 Input* nuy_input = element->GetInput(BalancethicknessNuyEnum); _assert_(nuy_input); 323 Input* potential_input = element->GetInput(PotentialEnum); _assert_(potential_input); 324 Input* thicknessobs_input = element->GetInput(InversionThicknessObsEnum);_assert_(thicknessobs_input); 314 325 315 326 … … 326 337 nuy_input->GetInputValue(&nuy,gauss); 327 338 potential_input->GetInputDerivativeValue(&dphi[0],xyz_list,gauss); 339 thicknessobs_input->GetInputValue(&thicknessobs,gauss); 340 341 dphinorm2 = dphi[0]*dphi[0] + dphi[1]*dphi[1]; 342 nuvobs2 = nux*vxobs*nux*vxobs + nuy*vyobs*nuy*vyobs; 343 328 344 329 345 /*Build gradient vector (actually -dJ/da): */ 330 346 for(int i=0;i<numvertices;i++){ 331 ge[i]+= - weight*Jdet*gauss->weight*(+vyobs)*dphi[0]*(nuy*vyobs*dphi[0] - nux*vxobs*dphi[1])*basis[i]; 347 //ge[i]+= - weight*Jdet*gauss->weight*(+vyobs)*dphi[0]*(nuy*vyobs*dphi[0] - nux*vxobs*dphi[1])*basis[i]; 348 ge[i]+= - weight*Jdet*gauss->weight*basis[i]*( 349 -2.*nuy*vyobs*vyobs*( 350 dphinorm2*dphinorm2 - thicknessobs*thicknessobs*dphinorm2*nuvobs2 351 )/ ( (pow(nux,6)+pow(nuy,6))*pow(vyobs,6) + 3*(nux*vxobs*nuy*vyobs)*(nux*vxobs*nuy*vyobs)*nuvobs2) 352 ); 332 353 _assert_(!xIsNan<IssmDouble>(ge[i])); 333 354 } -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r18390 r18393 1355 1355 1356 1356 /*J = (H^2 - Hobs^2)^2*/ 1357 //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; 1358 1358 /*J = phi^2*/ 1359 1359 //J +=.5*potential*potential*weight*Jdet*gauss->weight;// OK … … 1363 1363 //J +=0.5*((vxbarobs - vxbar)*(vxbarobs - vxbar) + (vybarobs - vybar)*(vybarobs - vybar))*weight*Jdet*gauss->weight; 1364 1364 /*J = 1/2 (vbar ^ gard(phi))^2*/ 1365 J += 0.5*(nuy*vyobs*dpotential[0] - nux*vxobs*dpotential[1])*(nuy*vyobs*dpotential[0] - nux*vxobs*dpotential[1])*weight*Jdet*gauss->weight;1365 //J += 0.5*(nuy*vyobs*dpotential[0] - nux*vxobs*dpotential[1])*(nuy*vyobs*dpotential[0] - nux*vxobs*dpotential[1])*weight*Jdet*gauss->weight; 1366 1366 } 1367 1367
Note:
See TracChangeset
for help on using the changeset viewer.