- Timestamp:
- 12/08/20 08:45:53 (4 years ago)
- Location:
- issm/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/c
- Property svn:ignore
-
old new 23 23 issm_ocean 24 24 issm_dakota 25 issm_post
-
- Property svn:ignore
-
issm/trunk/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
r24686 r25836 4 4 #include "../shared/shared.h" 5 5 #include "../modules/modules.h" 6 #include "../classes/Inputs 2/DatasetInput2.h"6 #include "../classes/Inputs/DatasetInput.h" 7 7 8 8 /*Model processor*/ … … 19 19 return 1; 20 20 }/*}}}*/ 21 void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs 2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/21 void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs* inputs,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 22 22 _error_("not implemented yet"); 23 23 }/*}}}*/ … … 86 86 basalelement->FindParam(&num_responses,InversionNumCostFunctionsEnum); 87 87 basalelement->FindParam(&responses,NULL,InversionCostFunctionsEnum); 88 Input 2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input);89 Input 2* thicknessobs_input = basalelement->GetInput2(InversionThicknessObsEnum); _assert_(thicknessobs_input);90 DatasetInput 2* weights_input = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);91 Input 2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input);92 Input 2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input);88 Input* thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input); 89 Input* thicknessobs_input = basalelement->GetInput(InversionThicknessObsEnum); _assert_(thicknessobs_input); 90 DatasetInput* weights_input = basalelement->GetDatasetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 91 Input* vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input); 92 Input* vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input); 93 93 94 94 /* Start looping on the number of gaussian points: */ 95 95 Gauss* gauss=basalelement->NewGauss(2); 96 for(int ig=gauss->begin();ig<gauss->end();ig++){ 97 gauss->GaussPoint(ig); 96 while(gauss->next()){ 98 97 99 98 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); … … 156 155 _error_("not implemented yet"); 157 156 }/*}}}*/ 158 void AdjointBalancethicknessAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/157 void AdjointBalancethicknessAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_interp,int control_index){/*{{{*/ 159 158 /*The gradient of the cost function is calculated in 2 parts. 160 159 * … … 194 193 /*Deal with second term*/ 195 194 switch(control_type){ 196 case BalancethicknessSpcthicknessEnum: GradientJDirichlet(element,gradient,control_in dex); break;197 case BalancethicknessThickeningRateEnum: GradientJDhDt(element,gradient,control_in dex); break;198 case VxEnum: GradientJVx( element,gradient,control_in dex); break;199 case VyEnum: GradientJVy( element,gradient,control_in dex); break;195 case BalancethicknessSpcthicknessEnum: GradientJDirichlet(element,gradient,control_interp,control_index); break; 196 case BalancethicknessThickeningRateEnum: GradientJDhDt(element,gradient,control_interp,control_index); break; 197 case VxEnum: GradientJVx( element,gradient,control_interp,control_index); break; 198 case VyEnum: GradientJVy( element,gradient,control_interp,control_index); break; 200 199 default: _error_("control type not supported yet: " << EnumToStringx(control_type)); 201 200 } … … 205 204 206 205 }/*}}}*/ 207 void AdjointBalancethicknessAnalysis::GradientJDirichlet(Element* element,Vector<IssmDouble>* gradient,int control_in dex){/*{{{*/206 void AdjointBalancethicknessAnalysis::GradientJDirichlet(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/ 208 207 209 208 /*Fetch number of vertices for this finite element*/ … … 242 241 delete Ke; 243 242 }/*}}}*/ 244 void AdjointBalancethicknessAnalysis::GradientJDhDt(Element* element,Vector<IssmDouble>* gradient,int control_in dex){/*{{{*/243 void AdjointBalancethicknessAnalysis::GradientJDhDt(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/ 245 244 246 245 /*Fetch number of vertices for this finite element*/ … … 266 265 xDelete<int>(vertexpidlist); 267 266 }/*}}}*/ 268 void AdjointBalancethicknessAnalysis::GradientJVx(Element* element,Vector<IssmDouble>* gradient,int control_in dex){/*{{{*/267 void AdjointBalancethicknessAnalysis::GradientJVx(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/ 269 268 270 269 /*Intermediaries*/ … … 283 282 element->GetVerticesCoordinates(&xyz_list); 284 283 element->GradientIndexing(&vertexpidlist[0],control_index); 285 Input 2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);286 Input 2* adjoint_input = element->GetInput2(AdjointEnum); _assert_(adjoint_input);284 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 285 Input* adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input); 287 286 288 287 /* Start looping on the number of gaussian points: */ 289 288 Gauss* gauss=element->NewGauss(4); 290 for(int ig=gauss->begin();ig<gauss->end();ig++){ 291 gauss->GaussPoint(ig); 289 while(gauss->next()){ 292 290 293 291 adjoint_input->GetInputDerivativeValue(&Dlambda[0],xyz_list,gauss); … … 313 311 delete gauss; 314 312 }/*}}}*/ 315 void AdjointBalancethicknessAnalysis::GradientJVy(Element* element,Vector<IssmDouble>* gradient,int control_in dex){/*{{{*/313 void AdjointBalancethicknessAnalysis::GradientJVy(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/ 316 314 317 315 /*Intermediaries*/ … … 330 328 element->GetVerticesCoordinates(&xyz_list); 331 329 element->GradientIndexing(&vertexpidlist[0],control_index); 332 Input 2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input);333 Input 2* adjoint_input = element->GetInput2(AdjointEnum); _assert_(adjoint_input);330 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 331 Input* adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input); 334 332 335 333 /* Start looping on the number of gaussian points: */ 336 334 Gauss* gauss=element->NewGauss(4); 337 for(int ig=gauss->begin();ig<gauss->end();ig++){ 338 gauss->GaussPoint(ig); 335 while(gauss->next()){ 339 336 340 337 adjoint_input->GetInputDerivativeValue(&Dlambda[0],xyz_list,gauss);
Note:
See TracChangeset
for help on using the changeset viewer.