Changeset 24335
- Timestamp:
- 11/15/19 16:28:40 (5 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 24 added
- 154 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r24205 r24335 326 326 ./modules/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp\ 327 327 ./classes/Inputs/PentaInput.cpp\ 328 ./classes/Inputs/TetraInput.cpp 328 ./classes/Inputs/TetraInput.cpp\ 329 ./classes/Inputs2/Inputs2.cpp\ 330 ./classes/Inputs2/BoolInput2.cpp\ 331 ./classes/Inputs2/IntInput2.cpp\ 332 ./classes/Inputs2/ElementInput2.cpp\ 333 ./classes/Inputs2/SegInput2.cpp\ 334 ./classes/Inputs2/TriaInput2.cpp\ 335 ./classes/Inputs2/PentaInput2.cpp\ 336 ./classes/Inputs2/DatasetInput2.cpp\ 337 ./classes/Inputs2/ControlInput2.cpp\ 338 ./classes/Inputs2/TransientInput2.cpp\ 339 ./classes/Inputs2/ArrayInput2.cpp 329 340 #}}} 330 341 #ADJOINTMPI/MeDiPack sources {{{ -
issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
r23585 r24335 4 4 #include "../shared/shared.h" 5 5 #include "../modules/modules.h" 6 #include "../classes/Inputs2/DatasetInput2.h" 6 7 7 8 /*Model processor*/ … … 18 19 return 1; 19 20 }/*}}}*/ 20 void AdjointBalancethickness2Analysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/21 void AdjointBalancethickness2Analysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 22 _error_("not implemented yet"); 22 23 }/*}}}*/ … … 65 66 element->FindParam(&num_responses,InversionNumCostFunctionsEnum); 66 67 element->FindParam(&responses,NULL,InversionCostFunctionsEnum); 67 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);68 Input * surfaceobs_input = element->GetInput(InversionSurfaceObsEnum); _assert_(surfaceobs_input);69 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);70 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);71 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);68 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 69 Input2* surfaceobs_input = element->GetInput2(InversionSurfaceObsEnum); _assert_(surfaceobs_input); 70 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 71 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 72 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 72 73 73 74 /* Start looping on the number of gaussian points: */ … … 171 172 element->GetVerticesCoordinates(&xyz_list); 172 173 element->GradientIndexing(&vertexpidlist[0],control_index); 173 Input * adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input);174 Input2* adjoint_input = element->GetInput2(AdjointEnum); _assert_(adjoint_input); 174 175 175 176 Gauss* gauss=element->NewGauss(2); … … 215 216 element->GetVerticesCoordinates(&xyz_list); 216 217 element->GradientIndexing(&vertexpidlist[0],control_index); 217 Input * adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input);218 Input * omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);219 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);220 Input * surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input);221 Input * surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input);222 Input * velobs_input = element->GetInput(InversionVelObsEnum); _assert_(velobs_input);218 Input2* adjoint_input = element->GetInput2(AdjointEnum); _assert_(adjoint_input); 219 Input2* omega_input = element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input); 220 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 221 Input2* surfaceslopex_input = element->GetInput2(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 222 Input2* surfaceslopey_input = element->GetInput2(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 223 Input2* velobs_input = element->GetInput2(InversionVelObsEnum); _assert_(velobs_input); 223 224 224 225 Gauss* gauss=element->NewGauss(2); … … 272 273 element->GetVerticesCoordinates(&xyz_list); 273 274 element->GradientIndexing(&vertexpidlist[0],control_index); 274 Input * omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);275 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);275 Input2* omega_input = element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input); 276 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 276 277 277 278 /* Start looping on the number of gaussian points: */ … … 321 322 element->GetVerticesCoordinates(&xyz_list); 322 323 element->GradientIndexing(&vertexpidlist[0],control_index); 323 Input * omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);324 Input * omega0_input = element->GetInput(BalancethicknessOmega0Enum); _assert_(omega0_input);325 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);324 Input2* omega_input = element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input); 325 Input2* omega0_input = element->GetInput2(BalancethicknessOmega0Enum); _assert_(omega0_input); 326 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 326 327 327 328 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
r23585 r24335 4 4 #include "../shared/shared.h" 5 5 #include "../modules/modules.h" 6 #include "../classes/Inputs2/DatasetInput2.h" 6 7 7 8 /*Model processor*/ … … 18 19 return 1; 19 20 }/*}}}*/ 20 void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/21 void AdjointBalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 22 _error_("not implemented yet"); 22 23 }/*}}}*/ … … 85 86 basalelement->FindParam(&num_responses,InversionNumCostFunctionsEnum); 86 87 basalelement->FindParam(&responses,NULL,InversionCostFunctionsEnum); 87 Input * thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);88 Input * thicknessobs_input = basalelement->GetInput(InversionThicknessObsEnum); _assert_(thicknessobs_input);89 Input* weights_input = basalelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);90 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);91 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);88 Input2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input); 89 Input2* thicknessobs_input = basalelement->GetInput2(InversionThicknessObsEnum); _assert_(thicknessobs_input); 90 DatasetInput2* weights_input = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 91 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 92 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 92 93 93 94 /* Start looping on the number of gaussian points: */ … … 282 283 element->GetVerticesCoordinates(&xyz_list); 283 284 element->GradientIndexing(&vertexpidlist[0],control_index); 284 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);285 Input * adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input);285 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 286 Input2* adjoint_input = element->GetInput2(AdjointEnum); _assert_(adjoint_input); 286 287 287 288 /* Start looping on the number of gaussian points: */ … … 329 330 element->GetVerticesCoordinates(&xyz_list); 330 331 element->GradientIndexing(&vertexpidlist[0],control_index); 331 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);332 Input * adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input);332 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 333 Input2* adjoint_input = element->GetInput2(AdjointEnum); _assert_(adjoint_input); 333 334 334 335 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
r24270 r24335 4 4 #include "../shared/shared.h" 5 5 #include "../modules/modules.h" 6 #include "../classes/Inputs2/DatasetInput2.h" 6 7 7 8 /*Model processing*/ … … 18 19 _error_("not implemented"); 19 20 }/*}}}*/ 20 void AdjointHorizAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/21 void AdjointHorizAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 22 _error_("not implemented yet"); 22 23 }/*}}}*/ … … 86 87 /*Retrieve all inputs and parameters*/ 87 88 element->GetVerticesCoordinates(&xyz_list); 88 Input * vx_input = element->GetInput(VxEnum);_assert_(vx_input);89 Input * vy_input = element->GetInput(VyEnum);_assert_(vy_input);90 Input * vz_input = NULL;89 Input2* vx_input = element->GetInput2(VxEnum);_assert_(vx_input); 90 Input2* vy_input = element->GetInput2(VyEnum);_assert_(vy_input); 91 Input2* vz_input = NULL; 91 92 if(dim==3){ 92 vz_input = element->GetInput (VzEnum);93 vz_input = element->GetInput2(VzEnum); 93 94 } 94 95 else{ … … 170 171 /*Retrieve all inputs and parameters*/ 171 172 element->GetVerticesCoordinates(&xyz_list); 172 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);173 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);173 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 174 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 174 175 175 176 /*Allocate dbasis*/ … … 275 276 /*Retrieve all inputs and parameters*/ 276 277 basalelement->GetVerticesCoordinates(&xyz_list); 277 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);278 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);279 Input * thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);278 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 279 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 280 Input2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input); 280 281 281 282 /*Allocate dbasis*/ … … 374 375 element->FindParam(&num_responses,InversionNumCostFunctionsEnum); 375 376 element->FindParam(&responses,NULL,InversionCostFunctionsEnum); 376 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);377 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);378 Input * vxobs_input = element->GetInput(InversionVxObsEnum); _assert_(vxobs_input);379 Input * vy_input = NULL;380 Input * vyobs_input = NULL;377 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 378 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 379 Input2* vxobs_input = element->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 380 Input2* vy_input = NULL; 381 Input2* vyobs_input = NULL; 381 382 if(domaintype!=Domain2DverticalEnum){ 382 vy_input = element->GetInput (VyEnum); _assert_(vy_input);383 vyobs_input = element->GetInput (InversionVyObsEnum); _assert_(vyobs_input);383 vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 384 vyobs_input = element->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 384 385 } 385 386 IssmDouble epsvel = 2.220446049250313e-16; … … 611 612 element->FindParam(&num_responses,InversionNumCostFunctionsEnum); 612 613 element->FindParam(&responses,NULL,InversionCostFunctionsEnum); 613 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);614 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);615 Input * vxobs_input = element->GetInput(InversionVxObsEnum); _assert_(vxobs_input);616 Input * vy_input=NULL;617 Input * vyobs_input=NULL;614 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 615 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 616 Input2* vxobs_input = element->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 617 Input2* vy_input=NULL; 618 Input2* vyobs_input=NULL; 618 619 if(domaintype!=Domain2DverticalEnum){ 619 vy_input = element->GetInput (VyEnum); _assert_(vy_input);620 vyobs_input = element->GetInput (InversionVyObsEnum); _assert_(vyobs_input);620 vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 621 vyobs_input = element->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 621 622 } 622 623 IssmDouble epsvel = 2.220446049250313e-16; … … 862 863 basalelement->FindParam(&num_responses,InversionNumCostFunctionsEnum); 863 864 basalelement->FindParam(&responses,NULL,InversionCostFunctionsEnum); 864 Input* weights_input = basalelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);865 Input * vx_input = basalelement->GetInput(VxEnum);_assert_(vx_input);866 Input * vxobs_input = basalelement->GetInput(InversionVxObsEnum);_assert_(vxobs_input);867 Input * vy_input=NULL;868 Input * vyobs_input=NULL;865 DatasetInput2* weights_input = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 866 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 867 Input2* vxobs_input = basalelement->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 868 Input2* vy_input=NULL; 869 Input2* vyobs_input=NULL; 869 870 if(domaintype!=Domain2DverticalEnum){ 870 vy_input = basalelement->GetInput (VyEnum);_assert_(vy_input);871 vyobs_input = basalelement->GetInput (InversionVyObsEnum);_assert_(vyobs_input);871 vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 872 vyobs_input = basalelement->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 872 873 } 873 874 IssmDouble epsvel = 2.220446049250313e-16; … … 1214 1215 basalelement->GetVerticesCoordinates(&xyz_list); 1215 1216 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 1216 Input * rheologyb_input = basalelement->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);1217 Input* weights_input = basalelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);1217 Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input); 1218 DatasetInput2* weights_input = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 1218 1219 1219 1220 /* Start looping on the number of gaussian points: */ … … 1303 1304 basalelement->GetVerticesCoordinates(&xyz_list); 1304 1305 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 1305 Input * thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);1306 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);1307 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);1308 Input * adjointx_input = basalelement->GetInput(AdjointxEnum); _assert_(adjointx_input);1309 Input * adjointy_input = basalelement->GetInput(AdjointyEnum); _assert_(adjointy_input);1310 Input * rheologyb_input = basalelement->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);1306 Input2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input); 1307 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 1308 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 1309 Input2* adjointx_input = basalelement->GetInput2(AdjointxEnum); _assert_(adjointx_input); 1310 Input2* adjointy_input = basalelement->GetInput2(AdjointyEnum); _assert_(adjointy_input); 1311 Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input); 1311 1312 1312 1313 /* Start looping on the number of gaussian points: */ … … 1381 1382 element->GetVerticesCoordinates(&xyz_list); 1382 1383 element->GradientIndexing(&vertexpidlist[0],control_index); 1383 Input * rheology_input = element->GetInput(MaterialsRheologyBEnum); _assert_(rheology_input);1384 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);1384 Input2* rheology_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(rheology_input); 1385 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 1385 1386 /* Start looping on the number of gaussian points: */ 1386 1387 Gauss* gauss=element->NewGauss(2); … … 1447 1448 element->GetVerticesCoordinates(&xyz_list); 1448 1449 element->GradientIndexing(&vertexpidlist[0],control_index); 1449 Input * rheology_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(rheology_input);1450 Input * rheology0_input = element->GetInput(RheologyBInitialguessEnum); _assert_(rheology0_input);1451 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);1450 Input2* rheology_input = element->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheology_input); 1451 Input2* rheology0_input = element->GetInput2(RheologyBInitialguessEnum); _assert_(rheology0_input); 1452 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 1452 1453 1453 1454 /* Start looping on the number of gaussian points: */ … … 1502 1503 element->GetVerticesCoordinates(&xyz_list); 1503 1504 element->GradientIndexing(&vertexpidlist[0],control_index); 1504 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);1505 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);1506 Input * vy_input = NULL;1507 Input * adjointx_input = element->GetInput(AdjointxEnum); _assert_(adjointx_input);1508 Input * adjointy_input = NULL;1509 Input * rheologyb_input = element->GetInput(MaterialsRheologyBEnum); _assert_(rheologyb_input);1505 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 1506 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 1507 Input2* vy_input = NULL; 1508 Input2* adjointx_input = element->GetInput2(AdjointxEnum); _assert_(adjointx_input); 1509 Input2* adjointy_input = NULL; 1510 Input2* rheologyb_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(rheologyb_input); 1510 1511 if(domaintype!=Domain2DverticalEnum){ 1511 vy_input = element->GetInput (VyEnum); _assert_(vy_input);1512 adjointy_input = element->GetInput (AdjointyEnum); _assert_(adjointy_input);1512 vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 1513 adjointy_input = element->GetInput2(AdjointyEnum); _assert_(adjointy_input); 1513 1514 } 1514 1515 /* Start looping on the number of gaussian points: */ … … 1597 1598 basalelement->GetVerticesCoordinates(&xyz_list); 1598 1599 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 1599 Input * thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);1600 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);1601 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);1602 Input * adjointx_input = basalelement->GetInput(AdjointxEnum); _assert_(adjointx_input);1603 Input * adjointy_input = basalelement->GetInput(AdjointyEnum); _assert_(adjointy_input);1604 Input * rheologyb_input = basalelement->GetInput(MaterialsRheologyBEnum); _assert_(rheologyb_input);1600 Input2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input); 1601 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 1602 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 1603 Input2* adjointx_input = basalelement->GetInput2(AdjointxEnum); _assert_(adjointx_input); 1604 Input2* adjointy_input = basalelement->GetInput2(AdjointyEnum); _assert_(adjointy_input); 1605 Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBEnum); _assert_(rheologyb_input); 1605 1606 1606 1607 /* Start looping on the number of gaussian points: */ … … 1683 1684 basalelement->GetVerticesCoordinates(&xyz_list); 1684 1685 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 1685 Input * dragcoefficient_input = basalelement->GetInput(FrictionCoefficientEnum); _assert_(dragcoefficient_input);1686 Input* weights_input = basalelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);1686 Input2* dragcoefficient_input = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(dragcoefficient_input); 1687 DatasetInput2* weights_input = basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 1687 1688 1688 1689 /* Start looping on the number of gaussian points: */ … … 1752 1753 element->GetVerticesCoordinatesBase(&xyz_list_base); 1753 1754 element->GradientIndexing(&vertexpidlist[0],control_index); 1754 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);1755 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);1756 Input * adjointx_input = element->GetInput(AdjointxEnum); _assert_(adjointx_input);1757 Input * adjointy_input = element->GetInput(AdjointyEnum); _assert_(adjointy_input);1758 Input * vz_input = NULL;1759 Input * adjointz_input = NULL;1755 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 1756 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 1757 Input2* adjointx_input = element->GetInput2(AdjointxEnum); _assert_(adjointx_input); 1758 Input2* adjointy_input = element->GetInput2(AdjointyEnum); _assert_(adjointy_input); 1759 Input2* vz_input = NULL; 1760 Input2* adjointz_input = NULL; 1760 1761 if(domaintype!=Domain2DverticalEnum){ 1761 vz_input = element->GetInput (VzEnum); _assert_(vy_input);1762 adjointz_input = element->GetInput (AdjointzEnum); _assert_(adjointz_input);1763 } 1764 Input * dragcoeff_input = element->GetInput(FrictionCoefficientEnum); _assert_(dragcoeff_input);1762 vz_input = element->GetInput2(VzEnum); _assert_(vy_input); 1763 adjointz_input = element->GetInput2(AdjointzEnum); _assert_(adjointz_input); 1764 } 1765 Input2* dragcoeff_input = element->GetInput2(FrictionCoefficientEnum); _assert_(dragcoeff_input); 1765 1766 1766 1767 /* Start looping on the number of gaussian points: */ … … 1851 1852 element->GetVerticesCoordinatesBase(&xyz_list_base); 1852 1853 element->GradientIndexing(&vertexpidlist[0],control_index); 1853 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);1854 Input * vy_input = NULL;1855 Input * adjointx_input = element->GetInput(AdjointxEnum); _assert_(adjointx_input);1856 Input * adjointy_input = NULL;1857 Input * dragcoeff_input = element->GetInput(FrictionCoefficientEnum); _assert_(dragcoeff_input);1854 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 1855 Input2* vy_input = NULL; 1856 Input2* adjointx_input = element->GetInput2(AdjointxEnum); _assert_(adjointx_input); 1857 Input2* adjointy_input = NULL; 1858 Input2* dragcoeff_input = element->GetInput2(FrictionCoefficientEnum); _assert_(dragcoeff_input); 1858 1859 if(domaintype!=Domain2DverticalEnum){ 1859 vy_input = element->GetInput (VyEnum); _assert_(vy_input);1860 adjointy_input = element->GetInput (AdjointyEnum); _assert_(adjointy_input);1860 vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 1861 adjointy_input = element->GetInput2(AdjointyEnum); _assert_(adjointy_input); 1861 1862 } 1862 1863 /* Start looping on the number of gaussian points: */ … … 1944 1945 basalelement->GetVerticesCoordinates(&xyz_list); 1945 1946 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 1946 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);1947 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);1948 Input * adjointx_input = basalelement->GetInput(AdjointxEnum); _assert_(adjointx_input);1949 Input * adjointy_input = basalelement->GetInput(AdjointyEnum); _assert_(adjointy_input);1950 Input * dragcoeff_input = basalelement->GetInput(FrictionCoefficientEnum); _assert_(dragcoeff_input);1947 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 1948 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 1949 Input2* adjointx_input = basalelement->GetInput2(AdjointxEnum); _assert_(adjointx_input); 1950 Input2* adjointy_input = basalelement->GetInput2(AdjointyEnum); _assert_(adjointy_input); 1951 Input2* dragcoeff_input = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(dragcoeff_input); 1951 1952 1952 1953 /* Start looping on the number of gaussian points: */ … … 2016 2017 element->GetVerticesCoordinatesBase(&xyz_list_base); 2017 2018 element->GradientIndexing(&vertexpidlist[0],control_index); 2018 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);2019 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);2020 Input * adjointx_input = element->GetInput(AdjointxEnum); _assert_(adjointx_input);2021 Input * adjointy_input = element->GetInput(AdjointyEnum); _assert_(adjointy_input);2022 Input * vz_input = NULL;2023 Input * adjointz_input = NULL;2019 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 2020 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 2021 Input2* adjointx_input = element->GetInput2(AdjointxEnum); _assert_(adjointx_input); 2022 Input2* adjointy_input = element->GetInput2(AdjointyEnum); _assert_(adjointy_input); 2023 Input2* vz_input = NULL; 2024 Input2* adjointz_input = NULL; 2024 2025 if(domaintype!=Domain2DverticalEnum){ 2025 vz_input = element->GetInput (VzEnum); _assert_(vy_input);2026 adjointz_input = element->GetInput (AdjointzEnum); _assert_(adjointz_input);2026 vz_input = element->GetInput2(VzEnum); _assert_(vy_input); 2027 adjointz_input = element->GetInput2(AdjointzEnum); _assert_(adjointz_input); 2027 2028 } 2028 2029 … … 2113 2114 element->GetVerticesCoordinatesBase(&xyz_list_base); 2114 2115 element->GradientIndexing(&vertexpidlist[0],control_index); 2115 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);2116 Input * vy_input = NULL;2117 Input * adjointx_input = element->GetInput(AdjointxEnum); _assert_(adjointx_input);2118 Input * adjointy_input = NULL;2116 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 2117 Input2* vy_input = NULL; 2118 Input2* adjointx_input = element->GetInput2(AdjointxEnum); _assert_(adjointx_input); 2119 Input2* adjointy_input = NULL; 2119 2120 if(domaintype!=Domain2DverticalEnum){ 2120 vy_input = element->GetInput (VyEnum); _assert_(vy_input);2121 adjointy_input = element->GetInput (AdjointyEnum); _assert_(adjointy_input);2121 vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 2122 adjointy_input = element->GetInput2(AdjointyEnum); _assert_(adjointy_input); 2122 2123 } 2123 2124 /* Start looping on the number of gaussian points: */ … … 2206 2207 basalelement->GetVerticesCoordinates(&xyz_list); 2207 2208 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 2208 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);2209 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);2210 Input * adjointx_input = basalelement->GetInput(AdjointxEnum); _assert_(adjointx_input);2211 Input * adjointy_input = basalelement->GetInput(AdjointyEnum); _assert_(adjointy_input);2209 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 2210 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 2211 Input2* adjointx_input = basalelement->GetInput2(AdjointxEnum); _assert_(adjointx_input); 2212 Input2* adjointy_input = basalelement->GetInput2(AdjointyEnum); _assert_(adjointy_input); 2212 2213 2213 2214 IssmDouble q_exp; … … 2222 2223 2223 2224 /*Recover parameters: */ 2224 Input * qinput = basalelement->GetInput(FrictionQEnum);2225 Input * cinput = basalelement->GetInput(FrictionCEnum);2226 Input * Asinput = basalelement->GetInput(FrictionAsEnum);2227 Input * nInput =basalelement->GetInput(MaterialsRheologyNEnum);2228 Input * Ninput = basalelement->GetInput(FrictionEffectivePressureEnum);2225 Input2* qinput = basalelement->GetInput2(FrictionQEnum); 2226 Input2* cinput = basalelement->GetInput2(FrictionCEnum); 2227 Input2* Asinput = basalelement->GetInput2(FrictionAsEnum); 2228 Input2* nInput =basalelement->GetInput2(MaterialsRheologyNEnum); 2229 Input2* Ninput = basalelement->GetInput2(FrictionEffectivePressureEnum); 2229 2230 /* Start looping on the number of gaussian points: */ 2230 2231 Gauss* gauss=basalelement->NewGauss(4); … … 2325 2326 basalelement->GetVerticesCoordinates(&xyz_list); 2326 2327 basalelement->GradientIndexing(&vertexpidlist[0],control_index); 2327 Input * thickness_input = basalelement->GetInput(ThicknessEnum); _assert_(thickness_input);2328 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);2329 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);2330 Input * adjointx_input = basalelement->GetInput(AdjointxEnum); _assert_(adjointx_input);2331 Input * adjointy_input = basalelement->GetInput(AdjointyEnum); _assert_(adjointy_input);2332 Input * rheologyb_input = basalelement->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);2328 Input2* thickness_input = basalelement->GetInput2(ThicknessEnum); _assert_(thickness_input); 2329 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 2330 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 2331 Input2* adjointx_input = basalelement->GetInput2(AdjointxEnum); _assert_(adjointx_input); 2332 Input2* adjointy_input = basalelement->GetInput2(AdjointyEnum); _assert_(adjointy_input); 2333 Input2* rheologyb_input = basalelement->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input); 2333 2334 2334 2335 /* Start looping on the number of gaussian points: */ … … 2450 2451 2451 2452 /*Add vx and vy as inputs to the tria element: */ 2452 element->AddInput (AdjointxEnum,lambdax,element->VelocityInterpolation());2453 element->AddInput (AdjointyEnum,lambday,element->VelocityInterpolation());2454 if(domaintype!=Domain2DverticalEnum) element->AddInput (AdjointzEnum,lambdaz,element->VelocityInterpolation());2453 element->AddInput2(AdjointxEnum,lambdax,element->VelocityInterpolation()); 2454 element->AddInput2(AdjointyEnum,lambday,element->VelocityInterpolation()); 2455 if(domaintype!=Domain2DverticalEnum) element->AddInput2(AdjointzEnum,lambdaz,element->VelocityInterpolation()); 2455 2456 2456 2457 element->FindParam(&fe_FS,FlowequationFeFSEnum); 2457 2458 if(fe_FS!=LATaylorHoodEnum && fe_FS!=LACrouzeixRaviartEnum) 2458 element->AddInput (AdjointpEnum,lambdap,element->PressureInterpolation());2459 element->AddInput2(AdjointpEnum,lambdap,element->PressureInterpolation()); 2459 2460 2460 2461 /*Free ressources:*/ … … 2507 2508 2508 2509 /*Add vx and vy as inputs to the tria element: */ 2509 element->AddInput (AdjointxEnum,lambdax,element->GetElementType());2510 element->AddInput (AdjointyEnum,lambday,element->GetElementType());2510 element->AddInput2(AdjointxEnum,lambdax,element->GetElementType()); 2511 element->AddInput2(AdjointyEnum,lambday,element->GetElementType()); 2511 2512 2512 2513 /*Free ressources:*/ -
issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.h
r23867 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/Analysis.h
r23585 r24335 16 16 17 17 class Parameters; 18 class Inputs2; 18 19 class IoModel; 19 20 class Elements; … … 38 39 virtual void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false)=0; 39 40 virtual int DofsPerNode(int** doflist,int domaintype,int approximation)=0; 40 virtual void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type)=0;41 virtual void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type)=0; 41 42 virtual void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum)=0; 42 43 -
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
r23585 r24335 23 23 return 1; 24 24 }/*}}}*/ 25 void Balancethickness2Analysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/25 void Balancethickness2Analysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 26 26 27 27 /*Finite element type*/ … … 29 29 30 30 /*Load variables in element*/ 31 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);32 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);33 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);34 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);35 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);36 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);37 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);38 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);39 iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum);40 iomodel->FetchDataToInput( elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);31 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 32 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 33 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 34 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 35 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 36 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 37 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 38 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 39 iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 40 iomodel->FetchDataToInput(inputs2,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum); 41 41 42 42 /*Update elements: */ … … 45 45 if(iomodel->my_elements[i]){ 46 46 Element* element=(Element*)elements->GetObjectByOffset(counter); 47 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);47 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 48 48 49 49 counter++; … … 82 82 /*Retrieve all inputs and parameters*/ 83 83 element->GetVerticesCoordinates(&xyz_list); 84 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);85 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);84 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 85 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 86 86 87 87 /*Get element characteristic length*/ … … 142 142 /*Retrieve all inputs and parameters*/ 143 143 element->GetVerticesCoordinates(&xyz_list); 144 Input * ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input);145 Input * mb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);146 Input * dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);144 Input2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 145 Input2* mb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input); 146 Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 147 147 148 148 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
r23959 r24335 4 4 #include "../shared/shared.h" 5 5 #include "../modules/modules.h" 6 #include "../classes/Inputs2/DatasetInput2.h" 6 7 7 8 /*Model processing*/ … … 72 73 return 1; 73 74 }/*}}}*/ 74 void BalancethicknessAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/75 void BalancethicknessAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 75 76 76 77 int stabilization,finiteelement; … … 90 91 if(iomodel->my_elements[i]){ 91 92 Element* element=(Element*)elements->GetObjectByOffset(counter); 92 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);93 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 93 94 counter++; 94 95 } 95 96 } 96 97 97 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);98 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);99 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);100 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);101 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);102 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);103 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);104 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);105 iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum);106 iomodel->FetchDataToInput( elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);98 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 99 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 100 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 101 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 102 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 103 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 104 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 105 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 106 iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 107 iomodel->FetchDataToInput(inputs2,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum); 107 108 108 109 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 109 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);110 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);110 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 111 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 111 112 } 112 113 }/*}}}*/ … … 171 172 element->FindParam(&domaintype,DomainTypeEnum); 172 173 element->FindParam(&stabilization,BalancethicknessStabilizationEnum); 173 Input * vxaverage_input=NULL;174 Input * vyaverage_input=NULL;174 Input2* vxaverage_input=NULL; 175 Input2* vyaverage_input=NULL; 175 176 if(domaintype==Domain2DhorizontalEnum){ 176 vxaverage_input=element->GetInput (VxEnum); _assert_(vxaverage_input);177 vyaverage_input=element->GetInput (VyEnum); _assert_(vyaverage_input);177 vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input); 178 vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input); 178 179 } 179 180 else{ 180 vxaverage_input=element->GetInput (VxAverageEnum); _assert_(vxaverage_input);181 vyaverage_input=element->GetInput (VyAverageEnum); _assert_(vyaverage_input);181 vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input); 182 vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input); 182 183 } 183 184 h = element->CharacteristicLength(); … … 272 273 element->GetVerticesCoordinates(&xyz_list); 273 274 element->FindParam(&domaintype,DomainTypeEnum); 274 Input * vxaverage_input=NULL;275 Input * vyaverage_input=NULL;275 Input2* vxaverage_input=NULL; 276 Input2* vyaverage_input=NULL; 276 277 if(domaintype==Domain2DhorizontalEnum){ 277 vxaverage_input=element->GetInput (VxEnum); _assert_(vxaverage_input);278 vyaverage_input=element->GetInput (VyEnum); _assert_(vyaverage_input);278 vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input); 279 vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input); 279 280 } 280 281 else{ 281 vxaverage_input=element->GetInput (VxAverageEnum); _assert_(vxaverage_input);282 vyaverage_input=element->GetInput (VyAverageEnum); _assert_(vyaverage_input);282 vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input); 283 vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input); 283 284 } 284 285 … … 355 356 /*Retrieve all inputs and parameters*/ 356 357 element->GetVerticesCoordinates(&xyz_list); 357 Input * mb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);358 Input * ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input);359 Input * dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);358 Input2* mb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input); 359 Input2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 360 Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 360 361 361 362 /*Initialize mb_correction to 0, do not forget!:*/ … … 396 397 /*Retrieve all inputs and parameters*/ 397 398 element->GetVerticesCoordinates(&xyz_list); 398 Input * mb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);399 Input * ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input);400 Input * dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);399 Input2* mb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input); 400 Input2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 401 Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 401 402 402 403 /*Initialize mb_correction to 0, do not forget!:*/ … … 513 514 element->GetVerticesCoordinates(&xyz_list); 514 515 element->GradientIndexing(&vertexpidlist[0],control_index); 515 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);516 Input * thicknessobs_input = element->GetInput(InversionThicknessObsEnum); _assert_(thicknessobs_input);517 Input * weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);518 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);519 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);520 Input * surface_mass_balance_input = element->GetInput(SmbMassBalanceEnum); _assert_(surface_mass_balance_input);521 Input * basal_melting_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melting_input);522 Input * dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);516 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 517 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 518 Input2* thicknessobs_input = element->GetInput2(InversionThicknessObsEnum); _assert_(thicknessobs_input); 519 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 520 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 521 Input2* surface_mass_balance_input = element->GetInput2(SmbMassBalanceEnum); _assert_(surface_mass_balance_input); 522 Input2* basal_melting_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melting_input); 523 Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 523 524 524 525 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.cpp
r23585 r24335 12 12 _error_("not implemented yet"); 13 13 }/*}}}*/ 14 void BalancethicknessSoftAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/14 void BalancethicknessSoftAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 15 15 _error_("not implemented yet"); 16 16 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/BalancethicknessSoftAnalysis.h
r23585 r24335 15 15 int DofsPerNode(int** doflist,int domaintype,int approximation); 16 16 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 17 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);17 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 18 18 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 19 19 void CreateConstraints(Constraints* constraints,IoModel* iomodel); -
issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
r23585 r24335 26 26 return 1; 27 27 }/*}}}*/ 28 void BalancevelocityAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/28 void BalancevelocityAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 29 29 30 30 /*Update elements: */ … … 33 33 if(iomodel->my_elements[i]){ 34 34 Element* element=(Element*)elements->GetObjectByOffset(counter); 35 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);35 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 36 36 counter++; 37 37 } 38 38 } 39 39 40 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);41 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);42 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);43 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);44 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);45 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);46 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);47 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);48 iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum);49 iomodel->FetchDataToInput( elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum);40 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 41 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 42 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 43 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 44 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 45 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 46 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 47 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 48 iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 49 iomodel->FetchDataToInput(inputs2,elements,"md.balancethickness.thickening_rate",BalancethicknessThickeningRateEnum); 50 50 51 51 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 52 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);53 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);52 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 53 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 54 54 } 55 55 }/*}}}*/ … … 92 92 /*Retrieve all Inputs and parameters: */ 93 93 element->GetVerticesCoordinates(&xyz_list); 94 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);94 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 95 95 h = element->CharacteristicLength(); 96 96 … … 184 184 /*Retrieve all inputs and parameters*/ 185 185 basalelement->GetVerticesCoordinates(&xyz_list); 186 Input * ms_input = basalelement->GetInput(SmbMassBalanceEnum); _assert_(ms_input);187 Input * mb_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);188 Input * dhdt_input = basalelement->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);189 Input * H_input = basalelement->GetInput(ThicknessEnum); _assert_(H_input);186 Input2* ms_input = basalelement->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 187 Input2* mb_input = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input); 188 Input2* dhdt_input = basalelement->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 189 Input2* H_input = basalelement->GetInput2(ThicknessEnum); _assert_(H_input); 190 190 IssmDouble h = basalelement->CharacteristicLength(); 191 191 -
issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.cpp
r24240 r24335 40 40 return 1; 41 41 }/*}}}*/ 42 void DamageEvolutionAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/42 void DamageEvolutionAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 43 43 44 44 int finiteelement; … … 54 54 if(iomodel->my_elements[i]){ 55 55 Element* element=(Element*)elements->GetObjectByOffset(counter); 56 element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement); 56 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 57 58 /*Need to know the type of approximation for this element*/ 59 if(iomodel->Data("md.flowequation.element_equation")){ 60 inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i]))); 61 } 57 62 counter++; 58 63 } … … 63 68 for(int i=0;i<elements->Size();i++){ 64 69 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 65 int numvertices = element->GetNumberOfVertices(); 66 IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices); 67 element->AddInput(DamageFEnum,values,P1Enum); 68 xDelete<IssmDouble>(values); 70 element->SetElementInput(inputs2,DamageFEnum,0.); 69 71 } 70 72 71 73 72 74 /*What input do I need to run my damage evolution model?*/ 73 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);74 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);75 if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum);76 iomodel->FetchDataToInput( elements,"md.damage.D",DamageDEnum);77 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);78 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);75 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 76 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 77 if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum); 78 iomodel->FetchDataToInput(inputs2,elements,"md.damage.D",DamageDEnum); 79 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 80 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 79 81 80 82 }/*}}}*/ … … 137 139 138 140 /*Add input*/ 139 element->AddInput (DamageFEnum,f,element->GetElementType());141 element->AddInput2(DamageFEnum,f,element->GetElementType()); 140 142 141 143 /*Clean up and return*/ … … 172 174 element->ComputeDeviatoricStressTensor(); 173 175 174 Input * principalDevStress1_input = element->GetInput(DeviatoricStress1Enum); _assert_(principalDevStress1_input);175 Input * principalDevStress2_input = element->GetInput(DeviatoricStress2Enum); _assert_(principalDevStress2_input);176 177 Input * damage_input = NULL;176 Input2* principalDevStress1_input = element->GetInput2(DeviatoricStress1Enum); _assert_(principalDevStress1_input); 177 Input2* principalDevStress2_input = element->GetInput2(DeviatoricStress2Enum); _assert_(principalDevStress2_input); 178 179 Input2* damage_input = NULL; 178 180 if(domaintype==Domain2DhorizontalEnum){ 179 damage_input = element->GetInput (DamageDbarEnum); _assert_(damage_input);181 damage_input = element->GetInput2(DamageDbarEnum); _assert_(damage_input); 180 182 } 181 183 else{ 182 damage_input = element->GetInput (DamageDEnum); _assert_(damage_input);184 damage_input = element->GetInput2(DamageDEnum); _assert_(damage_input); 183 185 } 184 186 … … 220 222 221 223 /*Add input*/ 222 element->AddInput (DamageFEnum,f,element->GetElementType());224 element->AddInput2(DamageFEnum,f,element->GetElementType()); 223 225 224 226 /*Clean up and return*/ … … 248 250 249 251 /*retrieve what we need: */ 250 Input * eps_xx_input = element->GetInput(StrainRatexxEnum); _assert_(eps_xx_input);251 Input * eps_xy_input = element->GetInput(StrainRatexyEnum); _assert_(eps_xy_input);252 Input * eps_yy_input = element->GetInput(StrainRateyyEnum); _assert_(eps_yy_input);253 Input * n_input=element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);254 Input * damage_input = NULL;255 Input * B_input = NULL;252 Input2* eps_xx_input = element->GetInput2(StrainRatexxEnum); _assert_(eps_xx_input); 253 Input2* eps_xy_input = element->GetInput2(StrainRatexyEnum); _assert_(eps_xy_input); 254 Input2* eps_yy_input = element->GetInput2(StrainRateyyEnum); _assert_(eps_yy_input); 255 Input2* n_input=element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 256 Input2* damage_input = NULL; 257 Input2* B_input = NULL; 256 258 if(domaintype==Domain2DhorizontalEnum){ 257 damage_input = element->GetInput (DamageDbarEnum); _assert_(damage_input);258 B_input=element->GetInput (MaterialsRheologyBbarEnum); _assert_(B_input);259 damage_input = element->GetInput2(DamageDbarEnum); _assert_(damage_input); 260 B_input=element->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 259 261 } 260 262 else{ 261 damage_input = element->GetInput (DamageDEnum); _assert_(damage_input);262 B_input=element->GetInput (MaterialsRheologyBEnum); _assert_(B_input);263 damage_input = element->GetInput2(DamageDEnum); _assert_(damage_input); 264 B_input=element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 263 265 } 264 266 … … 295 297 296 298 /*Add input*/ 297 element->AddInput (DamageFEnum,f,element->GetElementType());299 element->AddInput2(DamageFEnum,f,P1DGEnum); 298 300 299 301 /*Clean up and return*/ … … 335 337 } 336 338 /*retrieve what we need: */ 337 Input * tau_xx_input = element->GetInput(DeviatoricStressxxEnum); _assert_(tau_xx_input);338 Input * tau_xy_input = element->GetInput(DeviatoricStressxyEnum); _assert_(tau_xy_input);339 Input * tau_yy_input = element->GetInput(DeviatoricStressyyEnum); _assert_(tau_yy_input);340 Input * tau_xz_input = NULL;341 Input * tau_yz_input = NULL;342 Input * tau_zz_input = NULL;343 Input * stressMaxPrincipal_input = NULL;339 Input2* tau_xx_input = element->GetInput2(DeviatoricStressxxEnum); _assert_(tau_xx_input); 340 Input2* tau_xy_input = element->GetInput2(DeviatoricStressxyEnum); _assert_(tau_xy_input); 341 Input2* tau_yy_input = element->GetInput2(DeviatoricStressyyEnum); _assert_(tau_yy_input); 342 Input2* tau_xz_input = NULL; 343 Input2* tau_yz_input = NULL; 344 Input2* tau_zz_input = NULL; 345 Input2* stressMaxPrincipal_input = NULL; 344 346 if(dim==3){ 345 tau_xz_input = element->GetInput (DeviatoricStressxzEnum); _assert_(tau_xz_input);346 tau_yz_input = element->GetInput (DeviatoricStressyzEnum); _assert_(tau_yz_input);347 tau_zz_input = element->GetInput (DeviatoricStresszzEnum); _assert_(tau_zz_input);348 stressMaxPrincipal_input = element->GetInput (StressMaxPrincipalEnum); _assert_(stressMaxPrincipal_input);349 } 350 Input * damage_input = NULL;347 tau_xz_input = element->GetInput2(DeviatoricStressxzEnum); _assert_(tau_xz_input); 348 tau_yz_input = element->GetInput2(DeviatoricStressyzEnum); _assert_(tau_yz_input); 349 tau_zz_input = element->GetInput2(DeviatoricStresszzEnum); _assert_(tau_zz_input); 350 stressMaxPrincipal_input = element->GetInput2(StressMaxPrincipalEnum); _assert_(stressMaxPrincipal_input); 351 } 352 Input2* damage_input = NULL; 351 353 if(domaintype==Domain2DhorizontalEnum){ 352 damage_input = element->GetInput (DamageDbarEnum); _assert_(damage_input);354 damage_input = element->GetInput2(DamageDbarEnum); _assert_(damage_input); 353 355 } 354 356 else{ 355 damage_input = element->GetInput (DamageDEnum); _assert_(damage_input);357 damage_input = element->GetInput2(DamageDEnum); _assert_(damage_input); 356 358 } 357 359 … … 414 416 } 415 417 /*Add input*/ 416 element->AddInput (DamageFEnum,f,element->GetElementType());418 element->AddInput2(DamageFEnum,f,P1DGEnum); 417 419 418 420 /*Clean up and return*/ … … 461 463 //printf("dt %f\n", dt); 462 464 element->FindParam(&stabilization,DamageStabilizationEnum); 463 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);464 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);465 Input * vz_input = NULL;465 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 466 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 467 Input2* vz_input = NULL; 466 468 if(dim==3){ 467 vz_input=element->GetInput (VzEnum); _assert_(vz_input);469 vz_input=element->GetInput2(VzEnum); _assert_(vz_input); 468 470 } 469 471 … … 634 636 } 635 637 636 Input * damaged_input = NULL;637 Input * damagef_input = element->GetInput(DamageFEnum); _assert_(damagef_input);638 Input2* damaged_input = NULL; 639 Input2* damagef_input = element->GetInput2(DamageFEnum); _assert_(damagef_input); 638 640 if(domaintype==Domain2DhorizontalEnum){ 639 damaged_input = element->GetInput (DamageDbarEnum); _assert_(damaged_input);641 damaged_input = element->GetInput2(DamageDbarEnum); _assert_(damaged_input); 640 642 } 641 643 else{ 642 damaged_input = element->GetInput (DamageDEnum); _assert_(damaged_input);644 damaged_input = element->GetInput2(DamageDEnum); _assert_(damaged_input); 643 645 } 644 646 … … 755 757 element->FindParam(&domaintype,DomainTypeEnum); 756 758 if(domaintype==Domain2DhorizontalEnum){ 757 element->AddInput (DamageDbarEnum,newdamage,element->GetElementType());759 element->AddInput2(DamageDbarEnum,newdamage,element->GetElementType()); 758 760 } 759 761 else{ 760 element->AddInput (DamageDEnum,newdamage,element->GetElementType());762 element->AddInput2(DamageDEnum,newdamage,element->GetElementType()); 761 763 } 762 764 … … 792 794 /*Retrieve all inputs and parameters*/ 793 795 element->GetVerticesCoordinates(&xyz_list); 794 Input * vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input);795 Input * vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input);796 Input2* vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input); 797 Input2* vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input); 796 798 797 799 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/DamageEvolutionAnalysis.h
r24146 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.cpp
r23585 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void DepthAverageAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void DepthAverageAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 int counter=0; … … 24 24 if(iomodel->my_elements[i]){ 25 25 Element* element=(Element*)elements->GetObjectByOffset(counter); 26 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);26 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 27 27 counter++; 28 28 } … … 30 30 31 31 if(iomodel->domaintype==Domain2DverticalEnum){ 32 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);32 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 33 33 } 34 34 }/*}}}*/ … … 114 114 element->GetVerticesCoordinates(&xyz_list); 115 115 element->FindParam(&input_enum,InputToDepthaverageInEnum); 116 Input * input = element->GetInput(input_enum); _assert_(input);116 Input2* input = element->GetInput2(input_enum); _assert_(input); 117 117 118 118 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/DepthAverageAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
r24240 r24335 99 99 return 1; 100 100 }/*}}}*/ 101 void EnthalpyAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/101 void EnthalpyAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 102 102 103 103 bool dakota_analysis,ismovingfront,isenthalpy; … … 124 124 if(iomodel->my_elements[i]){ 125 125 Element* element=(Element*)elements->GetObjectByOffset(counter); 126 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);126 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 127 127 counter++; 128 128 } … … 134 134 iomodel->FindConstant(&materialstype,"md.materials.type"); 135 135 136 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);137 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);138 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);139 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);140 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);141 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);136 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 137 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 138 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 139 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 140 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 141 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 142 142 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 143 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);144 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);145 } 146 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);147 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);148 iomodel->FetchDataToInput( elements,"md.initialization.waterfraction",WaterfractionEnum);149 iomodel->FetchDataToInput( elements,"md.initialization.enthalpy",EnthalpyEnum);150 iomodel->FetchDataToInput( elements,"md.initialization.watercolumn",WatercolumnEnum);151 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);152 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);153 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);154 iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum);155 InputUpdateFromConstantx( elements,0.,VxMeshEnum);156 InputUpdateFromConstantx( elements,0.,VyMeshEnum);157 InputUpdateFromConstantx( elements,0.,VzMeshEnum);143 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 144 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 145 } 146 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 147 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 148 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.waterfraction",WaterfractionEnum); 149 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.enthalpy",EnthalpyEnum); 150 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum); 151 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 152 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 153 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 154 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum); 155 InputUpdateFromConstantx(inputs2,elements,0.,VxMeshEnum); 156 InputUpdateFromConstantx(inputs2,elements,0.,VyMeshEnum); 157 InputUpdateFromConstantx(inputs2,elements,0.,VzMeshEnum); 158 158 if(ismovingfront){ 159 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes159 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes 160 160 } 161 161 … … 166 166 break; 167 167 default: 168 iomodel->FetchDataToInput( elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);168 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum); 169 169 break; 170 170 } 171 171 172 172 /*Rheology type*/ 173 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);173 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 174 174 switch(materialstype){ 175 175 case MatenhancediceEnum: 176 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);177 iomodel->FetchDataToInput( elements,"md.materials.rheology_E",MaterialsRheologyEEnum);176 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 177 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum); 178 178 break; 179 179 case MatdamageiceEnum: 180 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);180 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 181 181 break; 182 182 case MatestarEnum: 183 iomodel->FetchDataToInput( elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);184 iomodel->FetchDataToInput( elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);183 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum); 184 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum); 185 185 break; 186 186 case MaticeEnum: 187 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);187 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 188 188 break; 189 189 default: … … 195 195 case 1: 196 196 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 197 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);198 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);199 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);197 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 198 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 199 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 200 200 if (FrictionCoupling==3){ 201 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}201 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 202 202 else if(FrictionCoupling==4){ 203 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);203 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 204 204 } 205 205 break; 206 206 case 2: 207 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);208 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);207 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 208 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 209 209 break; 210 210 case 3: 211 211 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 212 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);213 iomodel->FetchDataToInput( elements,"md.friction.As",FrictionAsEnum);214 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);212 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 213 iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum); 214 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 215 215 if (FrictionCoupling==3){ 216 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}216 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 217 217 else if(FrictionCoupling==4){ 218 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);218 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 219 219 } 220 220 break; 221 221 case 4: 222 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);223 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);224 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);225 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);226 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);222 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 223 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 224 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 225 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 226 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 227 227 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 228 228 break; 229 229 case 5: 230 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);231 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);232 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);233 iomodel->FetchDataToInput( elements,"md.friction.water_layer",FrictionWaterLayerEnum);230 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 231 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 232 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 233 iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum); 234 234 break; 235 235 case 6: 236 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);237 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);238 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);239 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);236 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 237 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 238 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 239 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 240 240 break; 241 241 case 7: 242 242 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 243 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);244 iomodel->FetchDataToInput( elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);245 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);246 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);243 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 244 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum); 245 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 246 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 247 247 if (FrictionCoupling==3){ 248 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}248 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 249 249 else if(FrictionCoupling==4){ 250 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);250 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 251 251 } 252 252 break; 253 253 case 9: 254 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);255 iomodel->FetchDataToInput( elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);256 InputUpdateFromConstantx( elements,1.,FrictionPEnum);257 InputUpdateFromConstantx( elements,1.,FrictionQEnum);254 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 255 iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum); 256 InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum); 257 InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum); 258 258 break; 259 259 default: … … 318 318 319 319 /*Get parameters and inputs: */ 320 Input * pressure_input = element->GetInput(PressureEnum); _assert_(pressure_input);320 Input2* pressure_input = element->GetInput2(PressureEnum); _assert_(pressure_input); 321 321 322 322 /*Fetch indices of basal & surface nodes for this finite element*/ … … 400 400 401 401 /*retrieve inputs*/ 402 Input * enthalpy_input = element->GetInput(enthalpy_enum);_assert_(enthalpy_input);403 Input * pressure_input = element->GetInput(PressureEnum);_assert_(pressure_input);404 Input * geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);405 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);406 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);407 Input * vz_input = element->GetInput(VzEnum); _assert_(vz_input);402 Input2* enthalpy_input = element->GetInput2(enthalpy_enum); _assert_(enthalpy_input); 403 Input2* pressure_input = element->GetInput2(PressureEnum); _assert_(pressure_input); 404 Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input); 405 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 406 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 407 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 408 408 409 409 /*Build friction element, needed later: */ … … 503 503 /*feed updated variables back into model*/ 504 504 if(dt!=0.){ 505 element->AddInput (enthalpy_enum,enthalpies,element->GetElementType());506 element->AddInput (WatercolumnEnum,watercolumns,element->GetElementType());507 } 508 element->AddInput (BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,element->GetElementType());505 element->AddInput2(enthalpy_enum,enthalpies,P1DGEnum); 506 element->AddInput2(WatercolumnEnum,watercolumns,P1DGEnum); 507 } 508 element->AddInput2(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,P1DGEnum); 509 509 510 510 /*Clean up and return*/ … … 595 595 IssmDouble heatcapacity = element->FindParam(MaterialsHeatcapacityEnum); 596 596 IssmDouble thermalconductivity = element->FindParam(MaterialsThermalconductivityEnum); 597 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);598 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);599 Input * vz_input = element->GetInput(VzEnum); _assert_(vz_input);600 Input * vxm_input = element->GetInput(VxMeshEnum); _assert_(vxm_input);601 Input * vym_input = element->GetInput(VyMeshEnum); _assert_(vym_input);602 Input * vzm_input = element->GetInput(VzMeshEnum); _assert_(vzm_input);597 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 598 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 599 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 600 Input2* vxm_input = element->GetInput2(VxMeshEnum); _assert_(vxm_input); 601 Input2* vym_input = element->GetInput2(VyMeshEnum); _assert_(vym_input); 602 Input2* vzm_input = element->GetInput2(VzMeshEnum); _assert_(vzm_input); 603 603 604 604 /*Enthalpy diffusion parameter*/ … … 818 818 element->FindParam(&dt,TimesteppingTimeStepEnum); 819 819 element->FindParam(&stabilization,ThermalStabilizationEnum); 820 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);821 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);822 Input * vz_input=element->GetInput(VzEnum); _assert_(vz_input);823 Input * enthalpypicard_input=element->GetInput(EnthalpyPicardEnum); _assert_(enthalpypicard_input);824 Input * pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);825 Input * enthalpy_input=NULL;826 if(reCast<bool,IssmDouble>(dt)){enthalpy_input = element->GetInput (EnthalpyEnum); _assert_(enthalpy_input);}820 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 821 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 822 Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input); 823 Input2* enthalpypicard_input=element->GetInput2(EnthalpyPicardEnum); _assert_(enthalpypicard_input); 824 Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input); 825 Input2* enthalpy_input=NULL; 826 if(reCast<bool,IssmDouble>(dt)){enthalpy_input = element->GetInput2(EnthalpyEnum); _assert_(enthalpy_input);} 827 827 828 828 /* Start looping on the number of gaussian points: */ … … 940 940 if(dt==0. && !converged) enthalpy_enum=EnthalpyPicardEnum; // use enthalpy from last iteration 941 941 else enthalpy_enum=EnthalpyEnum; // use enthalpy from last time step 942 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);943 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);944 Input * vz_input = element->GetInput(VzEnum); _assert_(vz_input);945 Input * enthalpy_input = element->GetInput(enthalpy_enum); _assert_(enthalpy_input);946 Input * pressure_input = element->GetInput(PressureEnum); _assert_(pressure_input);947 Input * watercolumn_input = element->GetInput(WatercolumnEnum); _assert_(watercolumn_input);948 Input * meltingrate_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input);949 Input * geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);942 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 943 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 944 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 945 Input2* enthalpy_input = element->GetInput2(enthalpy_enum); _assert_(enthalpy_input); 946 Input2* pressure_input = element->GetInput2(PressureEnum); _assert_(pressure_input); 947 Input2* watercolumn_input = element->GetInput2(WatercolumnEnum); _assert_(watercolumn_input); 948 Input2* meltingrate_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input); 949 Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input); 950 950 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); 951 951 … … 1033 1033 element->GetVerticesCoordinatesBase(&xyz_list_base); 1034 1034 element->FindParam(&dt,TimesteppingTimeStepEnum); 1035 Input * pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);1035 Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input); 1036 1036 IssmDouble gravity = element->FindParam(ConstantsGEnum); 1037 1037 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); … … 1088 1088 drainage[k]=DrainageFunctionWaterfraction(waterfractions[k], dt); 1089 1089 } 1090 element->AddInput (WaterfractionDrainageEnum,drainage,element->GetElementType());1090 element->AddInput2(WaterfractionDrainageEnum,drainage,P1DGEnum); 1091 1091 1092 1092 xDelete<IssmDouble>(waterfractions); … … 1121 1121 drainage_int[k]*=thicknesses[k]; 1122 1122 } 1123 element->AddInput (WaterfractionDrainageIntegratedEnum, drainage_int, element->GetElementType());1123 element->AddInput2(WaterfractionDrainageIntegratedEnum, drainage_int, P1DGEnum); 1124 1124 1125 1125 xDelete<IssmDouble>(drainage_int); … … 1144 1144 watercolumn[basalnodeindices[k]]+=dt*drainage_int[basalnodeindices[k]]; 1145 1145 } 1146 element->AddInput (WatercolumnEnum, watercolumn, element->GetElementType());1146 element->AddInput2(WatercolumnEnum, watercolumn,P1DGEnum); 1147 1147 1148 1148 xDelete<IssmDouble>(watercolumn); … … 1180 1180 element->ThermalToEnthalpy(&enthalpies[k], temperatures[k], waterfractions[k], pressures[k]); 1181 1181 } 1182 element->AddInput (WaterfractionEnum,waterfractions,element->GetElementType());1183 element->AddInput (EnthalpyEnum,enthalpies,element->GetElementType());1182 element->AddInput2(WaterfractionEnum,waterfractions,P1DGEnum); 1183 element->AddInput2(EnthalpyEnum,enthalpies,P1DGEnum); 1184 1184 1185 1185 xDelete<IssmDouble>(enthalpies); … … 1366 1366 1367 1367 /*Get parameters and inputs: */ 1368 Input * enthalpy_input = element->GetInput(EnthalpyPicardEnum); _assert_(enthalpy_input);1369 Input * pressure_input = element->GetInput(PressureEnum); _assert_(pressure_input);1370 Input * watercolumn_input = element->GetInput(WatercolumnEnum); _assert_(watercolumn_input);1371 Input * meltingrate_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input);1368 Input2* enthalpy_input = element->GetInput2(EnthalpyPicardEnum); _assert_(enthalpy_input); 1369 Input2* pressure_input = element->GetInput2(PressureEnum); _assert_(pressure_input); 1370 Input2* watercolumn_input = element->GetInput2(WatercolumnEnum); _assert_(watercolumn_input); 1371 Input2* meltingrate_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input); 1372 1372 1373 1373 /*Fetch indices of basal & surface nodes for this finite element*/ … … 1437 1437 1438 1438 /*Get parameters and inputs: */ 1439 Input * enthalpy_input = element->GetInput(EnthalpyEnum);_assert_(enthalpy_input); //TODO: check EnthalpyPicard?1440 Input * pressure_input = element->GetInput(PressureEnum);_assert_(pressure_input);1441 Input * watercolumn_input = element->GetInput(WatercolumnEnum);_assert_(watercolumn_input);1442 Input * meltingrate_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);_assert_(meltingrate_input);1439 Input2* enthalpy_input = element->GetInput2(EnthalpyEnum); _assert_(enthalpy_input); //TODO: check EnthalpyPicard? 1440 Input2* pressure_input = element->GetInput2(PressureEnum); _assert_(pressure_input); 1441 Input2* watercolumn_input = element->GetInput2(WatercolumnEnum); _assert_(watercolumn_input); 1442 Input2* meltingrate_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(meltingrate_input); 1443 1443 1444 1444 /*Fetch indices of basal & surface nodes for this finite element*/ … … 1608 1608 //if(waterfraction[i]>1.) _error_("Water fraction >1 found in solution vector"); 1609 1609 } 1610 element->AddInput(EnthalpyEnum,values,element->GetElementType()); 1611 element->AddInput(WaterfractionEnum,waterfraction,element->GetElementType()); 1612 element->AddInput(TemperatureEnum,temperature,element->GetElementType()); 1610 _assert_(element->GetElementType()==P1Enum); 1611 element->AddInput2(EnthalpyEnum,values,P1DGEnum); 1612 element->AddInput2(WaterfractionEnum,waterfraction,P1DGEnum); 1613 element->AddInput2(TemperatureEnum,temperature,P1DGEnum); 1613 1614 1614 1615 IssmDouble* n = xNew<IssmDouble>(numnodes); … … 1630 1631 case BuddJackaEnum: 1631 1632 for(i=0;i<numnodes;i++) B[i]=BuddJacka(temperature[i]); 1632 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1633 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1633 1634 break; 1634 1635 case CuffeyEnum: 1635 1636 for(i=0;i<numnodes;i++) B[i]=Cuffey(temperature[i]); 1636 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1637 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1637 1638 break; 1638 1639 case CuffeyTemperateEnum: 1639 1640 for(i=0;i<numnodes;i++) B[i]=CuffeyTemperate(temperature[i], waterfraction[i],n[i]); 1640 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1641 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1641 1642 break; 1642 1643 case PatersonEnum: 1643 1644 for(i=0;i<numnodes;i++) B[i]=Paterson(temperature[i]); 1644 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1645 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1645 1646 break; 1646 1647 case NyeH2OEnum: 1647 1648 for(i=0;i<numnodes;i++) B[i]=NyeH2O(values[i]); 1648 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1649 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1649 1650 break; 1650 1651 case NyeCO2Enum: 1651 1652 for(i=0;i<numnodes;i++) B[i]=NyeCO2(values[i]); 1652 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1653 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1653 1654 break; 1654 1655 case ArrheniusEnum:{ 1655 1656 element->GetVerticesCoordinates(&xyz_list); 1656 1657 for(i=0;i<numnodes;i++) B[i]=Arrhenius(temperature[i],surface[i]-xyz_list[i*3+2],n[i]); 1657 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1658 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1658 1659 break; 1659 1660 } 1660 1661 case LliboutryDuvalEnum:{ 1661 for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n[i],element->FindParam(MaterialsBetaEnum),element->FindParam(ConstantsReferencetemperatureEnum),element->FindParam(MaterialsHeatcapacityEnum),element->FindParam(MaterialsLatentheatEnum)); 1662 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());1663 break; 1662 for(i=0;i<numnodes;i++) B[i]=LliboutryDuval(values[i],pressure[i],n[i],element->FindParam(MaterialsBetaEnum),element->FindParam(ConstantsReferencetemperatureEnum),element->FindParam(MaterialsHeatcapacityEnum),element->FindParam(MaterialsLatentheatEnum)); 1663 element->AddInput2(MaterialsRheologyBEnum,&B[0],P1DGEnum); 1664 break; 1664 1665 } 1665 1666 default: _error_("Rheology law " << EnumToStringx(rheology_law) << " not supported yet"); … … 1668 1669 } 1669 1670 else{ 1670 element->AddInput (EnthalpyPicardEnum,values,element->GetElementType());1671 element->AddInput2(EnthalpyPicardEnum,values,P1DGEnum); 1671 1672 } 1672 1673 … … 1691 1692 femmodel->parameters->FindParam(&isdrainicecolumn,ThermalIsdrainicecolumnEnum); 1692 1693 1693 if(isdrainicecolumn) DrainWaterfraction(femmodel); 1694 if(computebasalmeltingrates) ComputeBasalMeltingrate(femmodel); 1694 if(isdrainicecolumn){ 1695 DrainWaterfraction(femmodel); 1696 } 1697 if(computebasalmeltingrates){ 1698 ComputeBasalMeltingrate(femmodel); 1699 } 1695 1700 1696 1701 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.h
r23585 r24335 18 18 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 19 19 int DofsPerNode(int** doflist,int domaintype,int approximation); 20 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);20 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 21 21 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 22 22 -
issm/trunk-jpl/src/c/analyses/EnumToAnalysis.h
r23585 r24335 10 10 int DofsPerNode(int** doflist,int domaintype,int approximation); 11 11 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 12 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);12 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 13 13 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 14 14 void CreateConstraints(Constraints* constraints,IoModel* iomodel); -
issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp
r23585 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void EsaAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void EsaAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 /*Update elements: */ … … 25 25 if(iomodel->my_elements[i]){ 26 26 Element* element=(Element*)elements->GetObjectByOffset(counter); 27 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);27 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 28 28 counter++; 29 29 } … … 31 31 32 32 /*Create inputs: */ 33 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);34 iomodel->FetchDataToInput( elements,"md.esa.deltathickness",EsaDeltathicknessEnum);33 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 34 iomodel->FetchDataToInput(inputs2,elements,"md.esa.deltathickness",EsaDeltathicknessEnum); 35 35 36 36 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/EsaAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.cpp
r23585 r24335 26 26 } 27 27 /*}}}*/ 28 void ExtrapolationAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/28 void ExtrapolationAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 29 29 int finiteelement; 30 30 … … 37 37 if(iomodel->my_elements[i]){ 38 38 Element* element=(Element*)elements->GetObjectByOffset(counter); 39 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);39 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 40 40 counter++; 41 41 } 42 42 } 43 43 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 44 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);45 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);44 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 45 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 46 46 } 47 47 } … … 124 124 125 125 /*Retrieve all inputs and parameters*/ 126 Input * lsf_slopex_input=workelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);127 Input * lsf_slopey_input=workelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);126 Input2* lsf_slopex_input=workelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 127 Input2* lsf_slopey_input=workelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 128 128 workelement->GetVerticesCoordinates(&xyz_list); 129 129 … … 338 338 element->FindParam(&extvar_enum, ExtrapolationVariableEnum); 339 339 340 Input * active_input=element->GetInput(IceMaskNodeActivationEnum); _assert_(active_input);341 Input * extvar_input=element->GetInput(extvar_enum); _assert_(extvar_input);340 Input2* active_input=element->GetInput2(IceMaskNodeActivationEnum); _assert_(active_input); 341 Input2* extvar_input=element->GetInput2(extvar_enum); _assert_(extvar_input); 342 342 343 343 Gauss* gauss=element->NewGauss(); -
issm/trunk-jpl/src/c/analyses/ExtrapolationAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.cpp
r23585 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void ExtrudeFromBaseAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void ExtrudeFromBaseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 int counter=0; … … 24 24 if(iomodel->my_elements[i]){ 25 25 Element* element=(Element*)elements->GetObjectByOffset(counter); 26 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);26 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 27 27 counter++; 28 28 } … … 30 30 31 31 if(iomodel->domaintype==Domain2DverticalEnum){ 32 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);32 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 33 33 } 34 34 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/ExtrudeFromBaseAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.cpp
r23585 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void ExtrudeFromTopAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void ExtrudeFromTopAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 int counter=0; … … 24 24 if(iomodel->my_elements[i]){ 25 25 Element* element=(Element*)elements->GetObjectByOffset(counter); 26 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);26 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 27 27 counter++; 28 28 } … … 30 30 31 31 if(iomodel->domaintype==Domain2DverticalEnum){ 32 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);32 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 33 33 } 34 34 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/ExtrudeFromTopAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
r24145 r24335 55 55 return 1; 56 56 }/*}}}*/ 57 void FreeSurfaceBaseAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/57 void FreeSurfaceBaseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 58 58 59 59 /*Now, is the model 3d? otherwise, do nothing: */ … … 68 68 if(iomodel->my_elements[i]){ 69 69 Element* element=(Element*)elements->GetObjectByOffset(counter); 70 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);70 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 71 71 counter++; 72 72 } 73 73 } 74 74 75 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);76 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);77 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);78 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.);79 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);80 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);75 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 76 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 77 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 78 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum,0.); 79 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 80 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 81 81 if(iomodel->domaindim==3){ 82 iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum);82 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum); 83 83 } 84 84 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 85 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);86 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);85 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 86 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 87 87 } 88 88 … … 92 92 switch(basalforcing_model){ 93 93 case FloatingMeltRateEnum: 94 iomodel->FetchDataToInput( elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);94 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 95 95 break; 96 96 case LinearFloatingMeltRateEnum: … … 101 101 break; 102 102 case SpatialLinearFloatingMeltRateEnum: 103 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);104 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);105 iomodel->FetchDataToInput( elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);103 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 104 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 105 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 106 106 break; 107 107 case BasalforcingsPicoEnum: 108 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);108 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum); 109 109 break; 110 110 case BasalforcingsIsmip6Enum: 111 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);111 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum); 112 112 break; 113 113 case BeckmannGoosseFloatingMeltRateEnum: 114 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);115 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);114 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 115 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 116 116 break; 117 117 default: … … 176 176 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 177 177 basalelement->FindParam(&stabilization,MasstransportStabilizationEnum); 178 Input * vx_input=basalelement->GetInput(VxEnum); _assert_(vx_input);179 Input * vy_input=NULL;180 if(dim>1){vy_input = basalelement->GetInput (VyEnum); _assert_(vy_input);}178 Input2* vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input); 179 Input2* vy_input=NULL; 180 if(dim>1){vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input);} 181 181 h = basalelement->CharacteristicLength(); 182 182 … … 295 295 basalelement->GetVerticesCoordinates(&xyz_list); 296 296 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 297 Input * groundedice_input = basalelement->GetInput(MaskGroundediceLevelsetEnum); _assert_(groundedice_input);298 Input * gmb_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);299 Input * fmb_input = basalelement->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);300 Input * base_input = basalelement->GetInput(BaseEnum); _assert_(base_input);301 Input * vz_input = NULL;297 Input2* groundedice_input = basalelement->GetInput2(MaskGroundediceLevelsetEnum); _assert_(groundedice_input); 298 Input2* gmb_input = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 299 Input2* fmb_input = basalelement->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 300 Input2* base_input = basalelement->GetInput2(BaseEnum); _assert_(base_input); 301 Input2* vz_input = NULL; 302 302 switch(dim){ 303 case 1: vz_input = basalelement->GetInput (VyEnum); _assert_(vz_input); break;304 case 2: vz_input = basalelement->GetInput (VzEnum); _assert_(vz_input); break;303 case 1: vz_input = basalelement->GetInput2(VyEnum); _assert_(vz_input); break; 304 case 2: vz_input = basalelement->GetInput2(VzEnum); _assert_(vz_input); break; 305 305 default: _error_("not implemented"); 306 306 } … … 410 410 411 411 int numnodes = element->GetNumberOfNodes(); 412 Input * groundedice_input = element->GetInput(MaskGroundediceLevelsetEnum); _assert_(groundedice_input);413 Input * onbase_input = element->GetInput(MeshVertexonbaseEnum); _assert_(onbase_input);414 Input * base_input = element->GetInput(BaseEnum); _assert_(base_input);412 Input2* groundedice_input = element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(groundedice_input); 413 Input2* onbase_input = element->GetInput2(MeshVertexonbaseEnum); _assert_(onbase_input); 414 Input2* base_input = element->GetInput2(BaseEnum); _assert_(base_input); 415 415 416 416 Gauss* gauss=element->NewGauss(); -
issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
r23959 r24335 55 55 return 1; 56 56 }/*}}}*/ 57 void FreeSurfaceTopAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/57 void FreeSurfaceTopAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 58 58 59 59 /*Now, is the model 3d? otherwise, do nothing: */ … … 71 71 if(iomodel->my_elements[i]){ 72 72 Element* element=(Element*)elements->GetObjectByOffset(counter); 73 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);73 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 74 74 counter++; 75 75 } 76 76 } 77 77 78 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);79 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);80 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);81 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);78 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 79 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 80 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 81 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 82 82 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 83 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);84 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);83 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 84 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 85 85 } 86 86 if(iomodel->domaindim==3){ 87 iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum);87 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum); 88 88 } 89 89 switch(smb_model){ 90 90 case SMBforcingEnum: 91 iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);91 iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.); 92 92 break; 93 93 default: … … 153 153 topelement->FindParam(&dt,TimesteppingTimeStepEnum); 154 154 topelement->FindParam(&stabilization,MasstransportStabilizationEnum); 155 Input * vx_input=topelement->GetInput(VxEnum); _assert_(vx_input);156 Input * vy_input=NULL;157 if(dim>1){vy_input = topelement->GetInput (VyEnum); _assert_(vy_input);}155 Input2* vx_input=topelement->GetInput2(VxEnum); _assert_(vx_input); 156 Input2* vy_input=NULL; 157 if(dim>1){vy_input = topelement->GetInput2(VyEnum); _assert_(vy_input);} 158 158 h = topelement->CharacteristicLength(); 159 159 … … 211 211 vx_input->GetInputAverage(&vx); 212 212 vy_input->GetInputAverage(&vy); 213 213 214 D[0*dim+0]=h/2.0*fabs(vx); 214 215 D[1*dim+1]=h/2.0*fabs(vy); … … 272 273 topelement->GetVerticesCoordinates(&xyz_list); 273 274 topelement->FindParam(&dt,TimesteppingTimeStepEnum); 274 Input * ms_input = topelement->GetInput(SmbMassBalanceEnum); _assert_(ms_input);275 Input * surface_input = topelement->GetInput(SurfaceEnum); _assert_(surface_input);276 Input * vz_input = NULL;275 Input2* ms_input = topelement->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 276 Input2* surface_input = topelement->GetInput2(SurfaceEnum); _assert_(surface_input); 277 Input2* vz_input = NULL; 277 278 switch(dim){ 278 case 1: vz_input = topelement->GetInput (VyEnum); _assert_(vz_input); break;279 case 2: vz_input = topelement->GetInput (VzEnum); _assert_(vz_input); break;279 case 1: vz_input = topelement->GetInput2(VyEnum); _assert_(vz_input); break; 280 case 2: vz_input = topelement->GetInput2(VzEnum); _assert_(vz_input); break; 280 281 default: _error_("not implemented"); 281 282 } -
issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp
r24010 r24335 24 24 return 1; 25 25 }/*}}}*/ 26 void GLheightadvectionAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/26 void GLheightadvectionAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 27 27 28 28 /*Update elements: */ … … 31 31 if(iomodel->my_elements[i]){ 32 32 Element* element=(Element*)elements->GetObjectByOffset(counter); 33 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);33 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 34 34 counter++; 35 35 } … … 37 37 38 38 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 39 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);40 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);41 } 42 iomodel->FetchDataToInput( elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);39 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 40 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 41 } 42 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum); 43 43 }/*}}}*/ 44 44 void GLheightadvectionAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 71 71 IssmDouble vel,vx,vy; 72 72 IssmDouble* xyz_list = NULL; 73 Input * vx_input = NULL;74 Input * vy_input = NULL;75 Input * bc_input = NULL;73 Input2* vx_input = NULL; 74 Input2* vy_input = NULL; 75 Input2* bc_input = NULL; 76 76 77 77 /*Get problem dimension*/ … … 97 97 switch(domaintype){ 98 98 case Domain2DhorizontalEnum: 99 vx_input=basalelement->GetInput (VxEnum); _assert_(vx_input);100 vy_input=basalelement->GetInput (VyEnum); _assert_(vy_input);101 bc_input=basalelement->GetInput (MeshVertexonboundaryEnum); _assert_(bc_input);99 vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input); 100 vy_input=basalelement->GetInput2(VyEnum); _assert_(vy_input); 101 bc_input=basalelement->GetInput2(MeshVertexonboundaryEnum); _assert_(bc_input); 102 102 break; 103 103 case Domain3DEnum: 104 vx_input=basalelement->GetInput (VxAverageEnum); _assert_(vx_input);105 vy_input=basalelement->GetInput (VyAverageEnum); _assert_(vy_input);106 bc_input=basalelement->GetInput (MeshVertexonboundaryEnum); _assert_(bc_input);104 vx_input=basalelement->GetInput2(VxAverageEnum); _assert_(vx_input); 105 vy_input=basalelement->GetInput2(VyAverageEnum); _assert_(vy_input); 106 bc_input=basalelement->GetInput2(MeshVertexonboundaryEnum); _assert_(bc_input); 107 107 break; 108 108 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); -
issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/GiaIvinsAnalysis.cpp
r23585 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void GiaIvinsAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void GiaIvinsAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 /*Update elements: */ … … 25 25 if(iomodel->my_elements[i]){ 26 26 Element* element=(Element*)elements->GetObjectByOffset(counter); 27 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);27 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 28 28 counter++; 29 29 } 30 30 } 31 31 32 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);33 iomodel->FetchDataToInput( elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum);34 iomodel->FetchDataToInput( elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum);35 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);32 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 33 iomodel->FetchDataToInput(inputs2,elements,"md.gia.mantle_viscosity",GiaMantleViscosityEnum); 34 iomodel->FetchDataToInput(inputs2,elements,"md.gia.lithosphere_thickness",GiaLithosphereThicknessEnum); 35 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 36 36 }/*}}}*/ 37 37 void GiaIvinsAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ -
issm/trunk-jpl/src/c/analyses/GiaIvinsAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r24240 r24335 9 9 return 1; 10 10 }/*}}}*/ 11 12 11 void HydrologyDCEfficientAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 13 12 … … 35 34 parameters->AddObject(new IntParam(HydrologydcEplThickCompEnum,eplthickcomp)); 36 35 }/*}}}*/ 37 38 void HydrologyDCEfficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 36 void HydrologyDCEfficientAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 39 37 40 38 bool isefficientlayer; … … 54 52 if(iomodel->my_elements[i]){ 55 53 Element* element=(Element*)elements->GetObjectByOffset(counter); 56 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);54 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 57 55 counter++; 58 56 } 59 57 } 60 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);61 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);62 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);63 iomodel->FetchDataToInput( elements,"md.initialization.epl_head",EplHeadSubstepEnum);64 iomodel->FetchDataToInput( elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum);65 iomodel->FetchDataToInput( elements,"md.initialization.epl_thickness",HydrologydcEplThicknessSubstepEnum);66 iomodel->FetchDataToInput( elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);58 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 59 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 60 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 61 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_head",EplHeadSubstepEnum); 62 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum); 63 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_thickness",HydrologydcEplThicknessSubstepEnum); 64 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum); 67 65 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 68 iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 69 iomodel->FetchDataToInput(elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 70 } 71 }/*}}}*/ 72 66 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 67 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 68 } 69 }/*}}}*/ 73 70 void HydrologyDCEfficientAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/ 74 71 … … 89 86 iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface"); 90 87 }/*}}}*/ 91 92 88 void HydrologyDCEfficientAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/ 93 89 … … 104 100 IoModelToConstraintsx(constraints,iomodel,"md.hydrology.spcepl_head",HydrologyDCEfficientAnalysisEnum,P1Enum); 105 101 }/*}}}*/ 106 107 102 void HydrologyDCEfficientAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/ 108 103 … … 139 134 iomodel->DeleteData(1,"md.mesh.vertexonbase"); 140 135 }/*}}}*/ 141 142 136 void HydrologyDCEfficientAnalysis::InitZigZagCounter(FemModel* femmodel){/*{{{*/ 143 137 … … 147 141 xDelete<int>(eplzigzag_counter); 148 142 }/*}}}*/ 149 150 143 void HydrologyDCEfficientAnalysis::ResetCounter(FemModel* femmodel){/*{{{*/ 151 144 … … 163 156 _error_("not implemented"); 164 157 }/*}}}*/ 165 166 158 ElementVector* HydrologyDCEfficientAnalysis::CreateDVector(Element* element){/*{{{*/ 167 159 /*Default, return NULL*/ 168 160 return NULL; 169 161 }/*}}}*/ 170 171 162 ElementMatrix* HydrologyDCEfficientAnalysis::CreateJacobianMatrix(Element* element){/*{{{*/ 172 163 _error_("Not implemented"); 173 164 }/*}}}*/ 174 175 165 ElementMatrix* HydrologyDCEfficientAnalysis::CreateKMatrix(Element* element){/*{{{*/ 176 166 … … 193 183 } 194 184 195 Input* active_element_input = basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 196 active_element_input->GetInputValue(&active_element); 185 basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum); 197 186 198 187 /*Check that all nodes are active, else return empty matrix*/ … … 224 213 basalelement->GetVerticesCoordinates(&xyz_list); 225 214 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 226 227 Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input); 228 Input* epl_head_input = basalelement->GetInput(EplHeadSubstepEnum); _assert_(epl_head_input); 229 Input* base_input = basalelement->GetInput(BaseEnum); _assert_(base_input); 215 Input2* epl_thick_input = basalelement->GetInput2(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input); 216 Input2* epl_head_input = basalelement->GetInput2(EplHeadSubstepEnum); _assert_(epl_head_input); 217 Input2* base_input = basalelement->GetInput2(BaseEnum); _assert_(base_input); 230 218 231 219 /* Start looping on the number of gaussian points: */ … … 279 267 return Ke; 280 268 }/*}}}*/ 281 282 269 ElementVector* HydrologyDCEfficientAnalysis::CreatePVector(Element* element){/*{{{*/ 283 270 … … 300 287 } 301 288 302 Input* active_element_input = basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 303 active_element_input->GetInputValue(&active_element); 289 basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum); 304 290 305 291 /*Check that all nodes are active, else return empty matrix*/ … … 319 305 IssmDouble residual,connectivity; 320 306 321 IssmDouble *xyz_list= NULL;322 Input * old_wh_input= NULL;323 Input *surface_runoff_input = NULL;307 IssmDouble *xyz_list = NULL; 308 Input2 *old_wh_input = NULL; 309 Input2 *surface_runoff_input = NULL; 324 310 325 311 /*Fetch number of nodes and dof for this finite element*/ … … 336 322 basalelement ->FindParam(&smb_model,SmbEnum); 337 323 338 Input * epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input);339 Input * sed_head_input = basalelement->GetInput(SedimentHeadSubstepEnum); _assert_(sed_head_input);340 Input * epl_head_input = basalelement->GetInput(EplHeadSubstepEnum); _assert_(epl_head_input);341 Input * basal_melt_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);342 Input * residual_input = basalelement->GetInput(SedimentHeadResidualEnum); _assert_(residual_input);343 Input * base_input = basalelement->GetInput(BaseEnum); _assert_(base_input);324 Input2* epl_thick_input = basalelement->GetInput2(HydrologydcEplThicknessSubstepEnum); _assert_(epl_thick_input); 325 Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum); _assert_(sed_head_input); 326 Input2* epl_head_input = basalelement->GetInput2(EplHeadSubstepEnum); _assert_(epl_head_input); 327 Input2* basal_melt_input = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input); 328 Input2* residual_input = basalelement->GetInput2(SedimentHeadResidualEnum); _assert_(residual_input); 329 Input2* base_input = basalelement->GetInput2(BaseEnum); _assert_(base_input); 344 330 345 331 if(dt!= 0.){ 346 old_wh_input = basalelement->GetInput (EplHeadOldEnum); _assert_(old_wh_input);332 old_wh_input = basalelement->GetInput2(EplHeadOldEnum); _assert_(old_wh_input); 347 333 } 348 334 if(smb_model==SMBgradientscomponentsEnum){ 349 surface_runoff_input = basalelement->GetInput (SmbRunoffEnum); _assert_(surface_runoff_input);335 surface_runoff_input = basalelement->GetInput2(SmbRunoffEnum); _assert_(surface_runoff_input); 350 336 } 351 337 … … 397 383 return pe; 398 384 }/*}}}*/ 399 400 385 void HydrologyDCEfficientAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ 401 386 element->GetSolutionFromInputsOneDof(solution,EplHeadSubstepEnum); 402 387 }/*}}}*/ 403 404 388 void HydrologyDCEfficientAnalysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/ 405 389 _error_("Not implemented yet"); 406 390 }/*}}}*/ 407 408 391 void HydrologyDCEfficientAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 409 392 /*Intermediaries*/ … … 441 424 } 442 425 /*Add input to the element: */ 443 element->AddBasalInput(EplHeadSubstepEnum,eplHeads,P1Enum); 426 element->AddBasalInput2(EplHeadSubstepEnum,eplHeads,P1Enum); 427 444 428 /*Free ressources:*/ 445 429 xDelete<IssmDouble>(eplHeads); … … 447 431 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 448 432 } /*}}}*/ 449 450 433 void HydrologyDCEfficientAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/ 451 434 /*Default, do nothing*/ … … 475 458 return transfer; 476 459 }/*}}}*/ 477 478 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input* sed_head_input){/*{{{*/ 460 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* sed_head_input){/*{{{*/ 479 461 480 462 int transfermethod; … … 501 483 return transfer; 502 484 }/*}}}*/ 503 504 485 void HydrologyDCEfficientAnalysis::ComputeEPLThickness(FemModel* femmodel){/*{{{*/ 505 486 … … 534 515 IssmDouble* bed = xNew<IssmDouble>(numnodes); 535 516 536 Input* active_element_input=element->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 537 active_element_input->GetInputValue(&active_element); 517 element->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum); 538 518 element->FindParam(&dt,TimesteppingTimeStepEnum); 539 519 … … 590 570 } 591 571 } 592 element->AddInput (HydrologydcEplThicknessSubstepEnum,thickness,element->GetElementType());572 element->AddInput2(HydrologydcEplThicknessSubstepEnum,thickness,element->GetElementType()); 593 573 xDelete<IssmDouble>(thickness); 594 574 xDelete<IssmDouble>(eplhead); … … 602 582 } 603 583 }/*}}}*/ 604 605 584 void HydrologyDCEfficientAnalysis::GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 606 585 /*Compute B matrix. B=[B1 B2 B3] where Bi is of size 3*NDOF2. … … 630 609 xDelete<IssmDouble>(dbasis); 631 610 }/*}}}*/ 632 633 void HydrologyDCEfficientAnalysis::HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask, Vector<IssmDouble>* recurence, Element* element){ 611 void HydrologyDCEfficientAnalysis::HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask, Vector<IssmDouble>* recurence, Element* element){/*{{{*/ 634 612 635 613 bool active_element; … … 663 641 IssmDouble colapse_thick =basalelement->FindParam(HydrologydcEplColapseThicknessEnum); 664 642 665 Input* active_element_input=basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 666 active_element_input->GetInputValue(&active_element); 643 basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum); 667 644 668 645 basalelement-> GetInputListOnVertices(&old_active[0],HydrologydcMaskEplactiveNodeEnum); … … 712 689 } 713 690 } 714 basalelement->AddInput (HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType());691 basalelement->AddInput2(HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType()); 715 692 716 693 if(domaintype!=Domain2DhorizontalEnum){ … … 726 703 } 727 704 /*}}}*/ 728 IssmDouble HydrologyDCEfficientAnalysis::EplStoring(Element* element,Gauss* gauss, Input * epl_thick_input, Input* epl_head_input, Input* base_input){/*{{{*/705 IssmDouble HydrologyDCEfficientAnalysis::EplStoring(Element* element,Gauss* gauss, Input2* epl_thick_input, Input2* epl_head_input, Input2* base_input){/*{{{*/ 729 706 IssmDouble epl_storing; 730 707 IssmDouble water_sheet,storing; … … 757 734 return storing; 758 735 }/*}}}*/ 759 760 IssmDouble HydrologyDCEfficientAnalysis::EplTransmitivity(Element* element,Gauss* gauss, Input* epl_thick_input, Input* epl_head_input, Input* base_input){/*{{{*/ 736 IssmDouble HydrologyDCEfficientAnalysis::EplTransmitivity(Element* element,Gauss* gauss, Input2* epl_thick_input, Input2* epl_head_input, Input2* base_input){/*{{{*/ 761 737 IssmDouble epl_transmitivity; 762 738 IssmDouble water_sheet; … … 772 748 return epl_transmitivity; 773 749 }/*}}}*/ 774 775 750 void HydrologyDCEfficientAnalysis::HydrologyEPLGetActive(Vector<IssmDouble>* active_vec, Element* element){/*{{{*/ 776 751 /*Constants*/ … … 798 773 /*Pass the activity mask from elements to nodes*/ 799 774 basalelement->GetInputListOnVertices(&active[0],HydrologydcMaskEplactiveNodeEnum); 800 Input* active_element_input=basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 801 active_element_input->GetInputValue(&active_element); 775 basalelement->GetInputValue(&active_element,HydrologydcMaskEplactiveEltEnum); 802 776 803 777 for(int i=0;i<numnodes;i++) flag+=active[i]; … … 822 796 } 823 797 /*}}}*/ 824 825 798 void HydrologyDCEfficientAnalysis::GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode){/*{{{*/ 826 799 -
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.h
r23585 r24335 9 9 #include "./Analysis.h" 10 10 class Node; 11 class Input ;11 class Input2; 12 12 class HydrologyDCEfficientAnalysis: public Analysis{ 13 13 … … 16 16 int DofsPerNode(int** doflist,int domaintype,int approximation); 17 17 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 18 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);18 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 19 19 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 20 20 void CreateConstraints(Constraints* constraints,IoModel* iomodel); … … 37 37 void GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 38 38 IssmDouble GetHydrologyKMatrixTransfer(Element* element); 39 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input * sed_head_input);40 IssmDouble EplStoring(Element* element,Gauss* gauss, Input * epl_thick_input, Input* epl_head_input, Input* base_input);41 IssmDouble EplTransmitivity(Element* element,Gauss* gauss, Input * epl_thick_input, Input* epl_head_input, Input* base_input);39 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* sed_head_input); 40 IssmDouble EplStoring(Element* element,Gauss* gauss, Input2* epl_thick_input, Input2* epl_head_input, Input2* base_input); 41 IssmDouble EplTransmitivity(Element* element,Gauss* gauss, Input2* epl_thick_input, Input2* epl_head_input, Input2* base_input); 42 42 void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask, Vector<IssmDouble>* recurence, Element* element); 43 43 void HydrologyEPLGetActive(Vector<IssmDouble>* active_vec, Element* element); -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r24240 r24335 5 5 #include "../shared/shared.h" 6 6 #include "../modules/modules.h" 7 #include "../classes/Inputs2/TransientInput2.h" 7 8 8 9 /*Model processing*/ … … 74 75 iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs"); 75 76 }/*}}}*/ 76 void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/77 void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 77 78 78 79 bool isefficientlayer; … … 93 94 if(iomodel->my_elements[i]){ 94 95 Element* element=(Element*)elements->GetObjectByOffset(counter); 95 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);96 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 96 97 counter++; 97 98 } 98 99 } 99 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);100 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);101 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);102 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);103 iomodel->FetchDataToInput( elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum);104 iomodel->FetchDataToInput( elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum);105 iomodel->FetchDataToInput( elements,"md.hydrology.sediment_transmitivity",HydrologydcSedimentTransmitivityEnum);106 iomodel->FetchDataToInput( elements,"md.hydrology.mask_thawed_node",HydrologydcMaskThawedNodeEnum);100 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 101 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 102 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 103 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 104 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.basal_moulin_input",HydrologydcBasalMoulinInputEnum); 105 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.sediment_head",SedimentHeadSubstepEnum); 106 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.sediment_transmitivity",HydrologydcSedimentTransmitivityEnum); 107 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.mask_thawed_node",HydrologydcMaskThawedNodeEnum); 107 108 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 108 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);109 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);109 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 110 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 110 111 } 111 112 if(isefficientlayer){ 112 iomodel->FetchDataToInput( elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum);113 iomodel->FetchDataToInput( elements,"md.initialization.epl_head",EplHeadSubstepEnum);113 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum); 114 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_head",EplHeadSubstepEnum); 114 115 } 115 116 … … 200 201 } 201 202 202 Input* thawed_element_input = basalelement->GetInput(HydrologydcMaskThawedEltEnum); _assert_(thawed_element_input); 203 thawed_element_input->GetInputValue(&thawed_element); 203 basalelement->GetInput2Value(&thawed_element,HydrologydcMaskThawedEltEnum); 204 204 205 205 /*Check that all nodes are active, else return empty matrix*/ … … 219 219 IssmDouble *xyz_list = NULL; 220 220 221 /*Define transfer related variables*/222 Input* active_element_input =NULL;223 224 221 /*Fetch number of nodes and dof for this finite element*/ 225 222 int numnodes = basalelement->GetNumberOfNodes(); … … 235 232 basalelement ->FindParam(&dt,TimesteppingTimeStepEnum); 236 233 basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 237 Input * SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);238 Input * sed_head_input = basalelement->GetInput(SedimentHeadSubstepEnum);239 Input * base_input = basalelement->GetInput(BaseEnum);240 Input * old_wh_input = basalelement->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input);234 Input2* SedTrans_input = basalelement->GetInput2(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 235 Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum); 236 Input2* base_input = basalelement->GetInput2(BaseEnum); 237 Input2* old_wh_input = basalelement->GetInput2(SedimentHeadOldEnum); _assert_(old_wh_input); 241 238 242 239 /*Transfer related Inputs*/ 243 240 if(isefficientlayer){ 244 active_element_input = basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input);241 basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum); 245 242 } 246 243 … … 279 276 /*Transfer EPL part*/ 280 277 if(isefficientlayer){ 281 active_element_input->GetInputValue(&active_element);282 278 if(active_element){ 283 279 transfer=GetHydrologyKMatrixTransfer(basalelement); … … 324 320 } 325 321 326 Input* thawed_element_input = basalelement->GetInput(HydrologydcMaskThawedEltEnum); _assert_(thawed_element_input); 327 thawed_element_input->GetInputValue(&thawed_element); 322 basalelement->GetInput2Value(&thawed_element,HydrologydcMaskThawedEltEnum); 328 323 329 324 /*Check that all nodes are active, else return empty matrix*/ … … 345 340 IssmDouble Jdet; 346 341 347 IssmDouble *xyz_list = NULL;348 Input *active_element_input = NULL;349 Input *old_wh_input = NULL;350 Input *dummy_input = NULL;351 TransientInput * surface_runoff_input= NULL;342 IssmDouble *xyz_list = NULL; 343 Input2 *active_element_input = NULL; 344 Input2 *old_wh_input = NULL; 345 Input2 *dummy_input = NULL; 346 TransientInput2 *surface_runoff_input = NULL; 352 347 353 348 /*Fetch number of nodes and dof for this finite element*/ … … 364 359 basalelement->FindParam(&smb_model,SmbEnum); 365 360 366 Input * sed_head_input = basalelement->GetInput(SedimentHeadSubstepEnum);367 Input * epl_head_input = basalelement->GetInput(EplHeadSubstepEnum);368 Input * base_input = basalelement->GetInput(BaseEnum);369 Input * basal_melt_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input);370 Input * SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);361 Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum); 362 Input2* epl_head_input = basalelement->GetInput2(EplHeadSubstepEnum); 363 Input2* base_input = basalelement->GetInput2(BaseEnum); 364 Input2* basal_melt_input = basalelement->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(basal_melt_input); 365 Input2* SedTrans_input = basalelement->GetInput2(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 371 366 372 367 IssmDouble time; … … 375 370 376 371 if(dt!= 0.){ 377 old_wh_input = basalelement->GetInput (SedimentHeadOldEnum); _assert_(old_wh_input);372 old_wh_input = basalelement->GetInput2(SedimentHeadOldEnum); _assert_(old_wh_input); 378 373 } 379 374 if(smb_model==SMBgradientscomponentsEnum){ 380 375 basalelement->FindParam(&smbsubstepping,SmbStepsPerStepEnum); 381 376 if(smbsubstepping>1) { 382 dummy_input = basalelement->GetInput (SmbRunoffTransientEnum); _assert_(dummy_input);377 dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum); _assert_(dummy_input); 383 378 } 384 379 else { 385 dummy_input = basalelement->GetInput(SmbRunoffEnum); _assert_(dummy_input); 386 } 387 surface_runoff_input=xDynamicCast<TransientInput*>(dummy_input); _assert_(surface_runoff_input); 380 dummy_input = basalelement->GetInput2(SmbRunoffEnum); _assert_(dummy_input); 381 } 382 _assert_(surface_runoff_input->InstanceEnum()==TransientInput2Enum); 383 surface_runoff_input=xDynamicCast<TransientInput2*>(dummy_input); _assert_(surface_runoff_input); 388 384 } 389 385 390 386 /*Transfer related Inputs*/ 391 387 if(isefficientlayer){ 392 active_element_input = basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input);388 basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum); 393 389 } 394 390 … … 419 415 else{ 420 416 /*if EPL is present and active input is there not here*/ 421 active_element_input->GetInputValue(&active_element);422 417 if(!active_element){ 423 418 basal_melt_input->GetInputValue(&water_load,gauss); … … 439 434 if(isefficientlayer){ 440 435 /*Dealing with the sediment part of the transfer term*/ 441 active_element_input->GetInputValue(&active_element);442 436 if(active_element){ 443 437 transfer=GetHydrologyPVectorTransfer(basalelement,gauss,epl_head_input); … … 575 569 576 570 /*Add input to the element: */ 577 element->AddBasalInput (SedimentHeadSubstepEnum,values,P1Enum);578 element->AddBasalInput (EffectivePressureSubstepEnum,pressure,P1Enum);579 element->AddBasalInput (SedimentHeadResidualEnum,residual,P1Enum);571 element->AddBasalInput2(SedimentHeadSubstepEnum,values,P1Enum); 572 element->AddBasalInput2(EffectivePressureSubstepEnum,pressure,P1Enum); 573 element->AddBasalInput2(SedimentHeadResidualEnum,residual,P1Enum); 580 574 581 575 /*Free ressources:*/ … … 593 587 return; 594 588 }/*}}}*/ 595 IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input * sed_head_input, Input* base_input){/*{{{*/589 IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input){/*{{{*/ 596 590 int unconf_scheme; 597 591 IssmDouble expfac; … … 632 626 return sediment_storing; 633 627 }/*}}}*/ 634 IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input * sed_head_input, Input* base_input,Input* SedTrans_input){/*{{{*/628 IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input,Input2* SedTrans_input){/*{{{*/ 635 629 int unconf_scheme; 636 630 IssmDouble ratio,expfac; … … 722 716 return transfer; 723 717 }/*}}}*/ 724 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input * epl_head_input){/*{{{*/718 IssmDouble HydrologyDCInefficientAnalysis::GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* epl_head_input){/*{{{*/ 725 719 726 720 int transfermethod; … … 753 747 for(int i=0;i<femmodel->elements->Size();i++){ 754 748 element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 755 Input* node_mask_input = element->GetInput(HydrologydcMaskEplactiveNodeEnum); _assert_(node_mask_input); 756 757 if( node_mask_input->Max()>0.){749 750 Input2* input=element->GetInput2(HydrologydcMaskEplactiveNodeEnum); _assert_(input); 751 if(input->GetInputMax()>0.){ 758 752 element_active = true; 759 753 } … … 761 755 element_active = false; 762 756 } 763 element-> AddInput(new BoolInput(HydrologydcMaskEplactiveEltEnum,element_active));757 element->SetBoolInput(element->inputs2,HydrologydcMaskEplactiveEltEnum,element_active); 764 758 } 765 759 }/*}}}*/ … … 813 807 for(int i=0;i<femmodel->elements->Size();i++){ 814 808 element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 815 Input* node_mask_input = element->GetInput(HydrologydcMaskThawedNodeEnum); _assert_(node_mask_input); 816 817 if( node_mask_input->Max()>0.){809 810 Input2* input=element->GetInput2(HydrologydcMaskThawedNodeEnum); _assert_(input); 811 if(input->GetInputMax()>0.){ 818 812 element_active = true; 819 813 } … … 821 815 element_active = false; 822 816 } 823 element-> AddInput(new BoolInput(HydrologydcMaskThawedEltEnum,element_active));817 element->SetBoolInput(element->inputs2,HydrologydcMaskThawedEltEnum,element_active); 824 818 } 825 819 }/*}}}*/ … … 849 843 /*Pass the activity mask from elements to nodes*/ 850 844 basalelement->GetInputListOnVertices(&active[0],HydrologydcMaskThawedNodeEnum); 851 Input* active_element_input=basalelement->GetInput(HydrologydcMaskThawedEltEnum); _assert_(active_element_input); 852 active_element_input->GetInputValue(&active_element); 845 basalelement->GetInput2Value(&active_element,HydrologydcMaskThawedEltEnum); 853 846 854 847 for(int i=0;i<numnodes;i++) flag+=active[i]; -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.h
r23585 r24335 9 9 #include "./Analysis.h" 10 10 class Node; 11 class Input ;11 class Input2; 12 12 class HydrologyDCInefficientAnalysis: public Analysis{ 13 13 … … 16 16 int DofsPerNode(int** doflist,int domaintype,int approximation); 17 17 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 18 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);18 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 19 19 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 20 20 void CreateConstraints(Constraints* constraints,IoModel* iomodel); … … 34 34 /*Intermediaries*/ 35 35 void GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss); 36 IssmDouble SedimentStoring(Element* element, Gauss* gauss, Input * sed_head_input, Input* base_input);37 IssmDouble SedimentTransmitivity(Element* element,Gauss* gauss,Input * sed_head_input, Input* base_input,Input* SedTrans_input);36 IssmDouble SedimentStoring(Element* element, Gauss* gauss, Input2* sed_head_input, Input2* base_input); 37 IssmDouble SedimentTransmitivity(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input,Input2* SedTrans_input); 38 38 void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,Element* element, Node* innode); 39 39 IssmDouble GetHydrologyKMatrixTransfer(Element* element); 40 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input * epl_head_input);40 IssmDouble GetHydrologyPVectorTransfer(Element* element, Gauss* gauss, Input2* epl_head_input); 41 41 void ElementizeEplMask(FemModel* femmodel); 42 42 void HydrologyIDSGetMask(Vector<IssmDouble>* vec_mask, Element* element); -
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
r24133 r24335 107 107 return 1; 108 108 }/*}}}*/ 109 void HydrologyGlaDSAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/109 void HydrologyGlaDSAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 110 110 111 111 /*Fetch data needed: */ … … 121 121 if(iomodel->my_elements[i]){ 122 122 Element* element=(Element*)elements->GetObjectByOffset(counter); 123 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);123 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 124 124 counter++; 125 125 } 126 126 } 127 127 128 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);129 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);130 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);131 iomodel->FetchDataToInput( elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);132 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);128 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 129 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 130 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 131 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum); 132 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 133 133 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 134 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);135 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);136 } 137 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);138 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);139 iomodel->FetchDataToInput( elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);140 iomodel->FetchDataToInput( elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum);141 iomodel->FetchDataToInput( elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);142 iomodel->FetchDataToInput( elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);143 iomodel->FetchDataToInput( elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum);144 iomodel->FetchDataToInput( elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum);145 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);146 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);134 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 135 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 136 } 137 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 138 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 139 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum); 140 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum); 141 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum); 142 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum); 143 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",HydrologySheetThicknessEnum); 144 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.hydraulic_potential",HydraulicPotentialEnum); 145 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 146 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 147 147 iomodel->FindConstant(&frictionlaw,"md.friction.law"); 148 148 … … 150 150 switch(frictionlaw){ 151 151 case 1: 152 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);153 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);154 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);152 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 153 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 154 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 155 155 break; 156 156 case 8: 157 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);157 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 158 158 break; 159 159 default: … … 242 242 IssmDouble g = element->FindParam(ConstantsGEnum); 243 243 IssmDouble e_v = element->FindParam(HydrologyEnglacialVoidRatioEnum); 244 Input * k_input = element->GetInput(HydrologySheetConductivityEnum);_assert_(k_input);245 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);246 Input * h_input = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input);247 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);248 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);249 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);250 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);244 Input2* k_input = element->GetInput2(HydrologySheetConductivityEnum);_assert_(k_input); 245 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 246 Input2* h_input = element->GetInput2(HydrologySheetThicknessEnum); _assert_(h_input); 247 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 248 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 249 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 250 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 251 251 252 252 /* Start looping on the number of gaussian points: */ … … 342 342 IssmDouble g = element->FindParam(ConstantsGEnum); 343 343 IssmDouble e_v = element->FindParam(HydrologyEnglacialVoidRatioEnum); 344 Input * hr_input = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);345 Input * vx_input = element->GetInput(VxEnum);_assert_(vx_input);346 Input * vy_input = element->GetInput(VyEnum);_assert_(vy_input);347 Input * h_input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);348 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);349 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);350 Input * G_input = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(G_input);351 Input * m_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);_assert_(m_input);352 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);353 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);354 Input * phiold_input = element->GetInput(HydraulicPotentialOldEnum); _assert_(phiold_input);355 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);344 Input2* hr_input = element->GetInput2(HydrologyBumpHeightEnum);_assert_(hr_input); 345 Input2* vx_input = element->GetInput2(VxEnum);_assert_(vx_input); 346 Input2* vy_input = element->GetInput2(VyEnum);_assert_(vy_input); 347 Input2* h_input = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input); 348 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 349 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 350 Input2* G_input = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(G_input); 351 Input2* m_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum);_assert_(m_input); 352 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 353 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 354 Input2* phiold_input = element->GetInput2(HydraulicPotentialOldEnum); _assert_(phiold_input); 355 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 356 356 357 357 /*Build friction element, needed later: */ … … 479 479 IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum); 480 480 IssmDouble g = element->FindParam(ConstantsGEnum); 481 Input * hr_input = element->GetInput(HydrologyBumpHeightEnum);_assert_(hr_input);482 Input * vx_input = element->GetInput(VxEnum);_assert_(vx_input);483 Input * vy_input = element->GetInput(VyEnum);_assert_(vy_input);484 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);485 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);486 Input * hold_input = element->GetInput(HydrologySheetThicknessOldEnum);_assert_(hold_input);487 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);488 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);489 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);481 Input2* hr_input = element->GetInput2(HydrologyBumpHeightEnum);_assert_(hr_input); 482 Input2* vx_input = element->GetInput2(VxEnum);_assert_(vx_input); 483 Input2* vy_input = element->GetInput2(VyEnum);_assert_(vy_input); 484 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 485 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 486 Input2* hold_input = element->GetInput2(HydrologySheetThicknessOldEnum);_assert_(hold_input); 487 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 488 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 489 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 490 490 491 491 /* Start looping on the number of gaussian points: */ … … 532 532 } 533 533 534 element->AddInput (HydrologySheetThicknessEnum,h_new,P1Enum);534 element->AddInput2(HydrologySheetThicknessEnum,h_new,P1Enum); 535 535 536 536 /*Clean up and return*/ … … 562 562 IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum); 563 563 IssmDouble g = element->FindParam(ConstantsGEnum); 564 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);565 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);566 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);564 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 565 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 566 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 567 567 568 568 /* Start looping on the number of gaussian points: */ … … 592 592 } 593 593 594 element->AddInput (EffectivePressureEnum,N,element->FiniteElement());594 element->AddInput2(EffectivePressureEnum,N,element->FiniteElement()); 595 595 596 596 /*Clean up and return*/ -
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.h
r24080 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.cpp
r23644 r24335 22 22 return 0; 23 23 }/*}}}*/ 24 void HydrologyPismAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/24 void HydrologyPismAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 25 25 26 26 /*Fetch data needed: */ … … 32 32 33 33 /*Add input to elements*/ 34 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);35 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);36 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);37 iomodel->FetchDataToInput( elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum);38 iomodel->FetchDataToInput( elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);39 iomodel->FetchDataToInput( elements,"md.initialization.watercolumn",WatercolumnEnum,0.);34 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 35 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 36 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 37 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.drainage_rate",HydrologyDrainageRateEnum); 38 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum); 39 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum,0.); 40 40 }/*}}}*/ 41 41 void HydrologyPismAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 117 117 IssmDouble* meltingrate = xNew<IssmDouble>(numvertices); 118 118 IssmDouble* watercolumn_max = xNew<IssmDouble>(numvertices); 119 element->GetInputListOnVertices(&watercolumn[0],Water columnEnum);119 element->GetInputListOnVertices(&watercolumn[0],WaterColumnOldEnum); 120 120 element->GetInputListOnVertices(&drainagerate[0],HydrologyDrainageRateEnum); 121 121 element->GetInputListOnVertices(&meltingrate[0],BasalforcingsGroundediceMeltingRateEnum); … … 131 131 132 132 /* Divide by connectivity, add degree of channelization as an input */ 133 element->AddInput(WatercolumnEnum,&watercolumn[0],P1Enum); 133 /*FIXME: should be changed to P1, this is due to the NR, IsFloating will return 0 on this element, but it should not be DG*/ 134 element->AddInput2(WatercolumnEnum,&watercolumn[0],P1DGEnum); 134 135 135 136 /*Clean up and return*/ -
issm/trunk-jpl/src/c/analyses/HydrologyPismAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.cpp
r23972 r24335 80 80 return 1; 81 81 }/*}}}*/ 82 void HydrologyShaktiAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/82 void HydrologyShaktiAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 83 83 84 84 /*Fetch data needed: */ … … 94 94 if(iomodel->my_elements[i]){ 95 95 Element* element=(Element*)elements->GetObjectByOffset(counter); 96 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);96 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 97 97 counter++; 98 98 } 99 99 } 100 100 101 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);102 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);101 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 102 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 103 103 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 104 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);105 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);106 } 107 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);108 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);109 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);110 iomodel->FetchDataToInput( elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);111 iomodel->FetchDataToInput( elements,"md.hydrology.head",HydrologyHeadEnum);112 iomodel->FetchDataToInput( elements,"md.hydrology.gap_height",HydrologyGapHeightEnum);113 iomodel->FetchDataToInput( elements,"md.hydrology.englacial_input",HydrologyEnglacialInputEnum);114 iomodel->FetchDataToInput( elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum);115 iomodel->FetchDataToInput( elements,"md.hydrology.bump_spacing",HydrologyBumpSpacingEnum);116 iomodel->FetchDataToInput( elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum);117 iomodel->FetchDataToInput( elements,"md.hydrology.reynolds",HydrologyReynoldsEnum);118 iomodel->FetchDataToInput( elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum);119 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);120 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);104 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 105 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 106 } 107 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 108 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 109 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 110 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum); 111 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.head",HydrologyHeadEnum); 112 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.gap_height",HydrologyGapHeightEnum); 113 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.englacial_input",HydrologyEnglacialInputEnum); 114 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.moulin_input",HydrologyMoulinInputEnum); 115 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_spacing",HydrologyBumpSpacingEnum); 116 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.bump_height",HydrologyBumpHeightEnum); 117 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.reynolds",HydrologyReynoldsEnum); 118 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.neumannflux",HydrologyNeumannfluxEnum); 119 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 120 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 121 121 iomodel->FindConstant(&frictionlaw,"md.friction.law"); 122 122 … … 124 124 switch(frictionlaw){ 125 125 case 1: 126 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);127 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);128 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);126 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 127 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 128 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 129 129 break; 130 130 case 8: 131 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);131 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 132 132 break; 133 133 default: … … 244 244 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); 245 245 IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum); 246 Input * geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);247 Input * head_input = element->GetInput(HydrologyHeadEnum); _assert_(head_input);248 Input * gap_input = element->GetInput(HydrologyGapHeightEnum); _assert_(gap_input);249 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);250 Input * base_input = element->GetInput(BaseEnum); _assert_(base_input);251 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);252 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);253 Input * englacial_input = element->GetInput(HydrologyEnglacialInputEnum); _assert_(englacial_input);254 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);255 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);256 Input * lr_input = element->GetInput(HydrologyBumpSpacingEnum); _assert_(lr_input);257 Input * br_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(br_input);258 Input * headold_input = element->GetInput(HydrologyHeadOldEnum); _assert_(headold_input);246 Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input); 247 Input2* head_input = element->GetInput2(HydrologyHeadEnum); _assert_(head_input); 248 Input2* gap_input = element->GetInput2(HydrologyGapHeightEnum); _assert_(gap_input); 249 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 250 Input2* base_input = element->GetInput2(BaseEnum); _assert_(base_input); 251 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 252 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 253 Input2* englacial_input = element->GetInput2(HydrologyEnglacialInputEnum); _assert_(englacial_input); 254 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 255 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 256 Input2* lr_input = element->GetInput2(HydrologyBumpSpacingEnum); _assert_(lr_input); 257 Input2* br_input = element->GetInput2(HydrologyBumpHeightEnum); _assert_(br_input); 258 Input2* headold_input = element->GetInput2(HydrologyHeadOldEnum); _assert_(headold_input); 259 259 260 260 /*Get conductivity from inputs*/ … … 403 403 404 404 /*Add input to the element: */ 405 element->AddInput (HydrologyHeadEnum,values,element->GetElementType());406 element->AddInput (EffectivePressureEnum,eff_pressure,P1Enum);405 element->AddInput2(HydrologyHeadEnum,values,element->GetElementType()); 406 element->AddInput2(EffectivePressureEnum,eff_pressure,P1Enum); 407 407 408 408 /*Update reynolds number according to new solution*/ 409 409 element->GetVerticesCoordinates(&xyz_list); 410 Input* head_input = element->GetInput(HydrologyHeadEnum);_assert_(head_input); 411 head_input->GetInputDerivativeAverageValue(&dh[0],xyz_list); 410 Input2* head_input = element->GetInput2(HydrologyHeadEnum);_assert_(head_input); 412 411 IssmDouble conductivity = GetConductivity(element); 413 412 413 /*Get gap height derivatives at the center of the element*/ 414 Gauss* gauss=element->NewGauss(0); 415 head_input->GetInputDerivativeValue(&dh[0],xyz_list,gauss); 416 delete gauss; 417 414 418 IssmDouble reynolds = conductivity*sqrt(dh[0]*dh[0]+dh[1]*dh[1])/NU; 415 element->AddInput (HydrologyReynoldsEnum,&reynolds,P0Enum);419 element->AddInput2(HydrologyReynoldsEnum,&reynolds,P0Enum); 416 420 417 421 /*Free resources:*/ … … 439 443 440 444 /*Get Reynolds and gap average values*/ 441 Input * reynolds_input = element->GetInput(HydrologyReynoldsEnum); _assert_(reynolds_input);442 Input * gap_input = element->GetInput(HydrologyGapHeightEnum); _assert_(gap_input);445 Input2* reynolds_input = element->GetInput2(HydrologyReynoldsEnum); _assert_(reynolds_input); 446 Input2* gap_input = element->GetInput2(HydrologyGapHeightEnum); _assert_(gap_input); 443 447 reynolds_input->GetInputAverage(&reynolds); 444 448 gap_input->GetInputAverage(&gap); … … 482 486 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); 483 487 IssmDouble rho_water = element->FindParam(MaterialsRhoFreshwaterEnum); 484 Input * geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input);485 Input * head_input = element->GetInput(HydrologyHeadEnum); _assert_(head_input);486 Input * gap_input = element->GetInput(HydrologyGapHeightEnum); _assert_(gap_input);487 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);488 Input * base_input = element->GetInput(BaseEnum); _assert_(base_input);489 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);490 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);491 Input * englacial_input = element->GetInput(HydrologyEnglacialInputEnum); _assert_(englacial_input);492 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);493 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);494 Input * lr_input = element->GetInput(HydrologyBumpSpacingEnum); _assert_(lr_input);495 Input * br_input = element->GetInput(HydrologyBumpHeightEnum); _assert_(br_input);488 Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum);_assert_(geothermalflux_input); 489 Input2* head_input = element->GetInput2(HydrologyHeadEnum); _assert_(head_input); 490 Input2* gap_input = element->GetInput2(HydrologyGapHeightEnum); _assert_(gap_input); 491 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 492 Input2* base_input = element->GetInput2(BaseEnum); _assert_(base_input); 493 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 494 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 495 Input2* englacial_input = element->GetInput2(HydrologyEnglacialInputEnum); _assert_(englacial_input); 496 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 497 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 498 Input2* lr_input = element->GetInput2(HydrologyBumpSpacingEnum); _assert_(lr_input); 499 Input2* br_input = element->GetInput2(HydrologyBumpHeightEnum); _assert_(br_input); 496 500 497 501 /*Get conductivity from inputs*/ … … 578 582 579 583 /*Add new gap as an input*/ 580 element->AddInput (HydrologyGapHeightEnum,&newgap,P0Enum);584 element->AddInput2(HydrologyGapHeightEnum,&newgap,P0Enum); 581 585 582 586 /*Divide by connectivity, add basal flux as an input*/ 583 587 q = q/totalweights; 584 element->AddInput (HydrologyBasalFluxEnum,&q,P0Enum);588 element->AddInput2(HydrologyBasalFluxEnum,&q,P0Enum); 585 589 586 590 /* Divide by connectivity, add degree of channelization as an input */ 587 591 channelization = channelization/totalweights; 588 element->AddInput (DegreeOfChannelizationEnum,&channelization,P0Enum);592 element->AddInput2(DegreeOfChannelizationEnum,&channelization,P0Enum); 589 593 590 594 /*Clean up and return*/ -
issm/trunk-jpl/src/c/analyses/HydrologyShaktiAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.cpp
r23644 r24335 36 36 return 1; 37 37 }/*}}}*/ 38 void HydrologyShreveAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/38 void HydrologyShreveAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 39 39 40 40 /*Fetch data needed: */ … … 50 50 if(iomodel->my_elements[i]){ 51 51 Element* element=(Element*)elements->GetObjectByOffset(counter); 52 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);52 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 53 53 counter++; 54 54 } 55 55 } 56 56 57 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);58 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);59 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);60 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);57 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 58 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 59 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 60 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 61 61 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 62 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);63 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);64 } 65 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);66 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);67 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);68 iomodel->FetchDataToInput( elements,"md.initialization.watercolumn",WatercolumnEnum);69 70 elements->InputDuplicate(WatercolumnEnum,WaterColumnOldEnum);62 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 63 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 64 } 65 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 66 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 67 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 68 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum); 69 70 inputs2->DuplicateInput(WatercolumnEnum,WaterColumnOldEnum); 71 71 }/*}}}*/ 72 72 void HydrologyShreveAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 109 109 IssmDouble g = element->FindParam(ConstantsGEnum); 110 110 IssmDouble mu_water = element->FindParam(MaterialsMuWaterEnum); 111 Input * surfaceslopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(surfaceslopex_input);112 Input * surfaceslopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(surfaceslopey_input);113 Input * bedslopex_input = element->GetInput(BedSlopeXEnum); _assert_(bedslopex_input);114 Input * bedslopey_input = element->GetInput(BedSlopeYEnum); _assert_(bedslopey_input);115 Input * watercolumn_input = element->GetInput(WatercolumnEnum); _assert_(watercolumn_input);111 Input2* surfaceslopex_input = element->GetInput2(SurfaceSlopeXEnum); _assert_(surfaceslopex_input); 112 Input2* surfaceslopey_input = element->GetInput2(SurfaceSlopeYEnum); _assert_(surfaceslopey_input); 113 Input2* bedslopex_input = element->GetInput2(BedSlopeXEnum); _assert_(bedslopex_input); 114 Input2* bedslopey_input = element->GetInput2(BedSlopeYEnum); _assert_(bedslopey_input); 115 Input2* watercolumn_input = element->GetInput2(WatercolumnEnum); _assert_(watercolumn_input); 116 116 117 117 /*Fetch number of vertices and allocate output*/ … … 138 138 139 139 /*Add to inputs*/ 140 element->AddInput (HydrologyWaterVxEnum,vx,P1Enum);141 element->AddInput (HydrologyWaterVyEnum,vy,P1Enum);140 element->AddInput2(HydrologyWaterVxEnum,vx,P1Enum); 141 element->AddInput2(HydrologyWaterVyEnum,vy,P1Enum); 142 142 xDelete<IssmDouble>(vx); 143 143 xDelete<IssmDouble>(vy); … … 172 172 element->FindParam(&dt,TimesteppingTimeStepEnum); 173 173 element->FindParam(&diffusivity,HydrologyshreveStabilizationEnum); 174 Input * vx_input=element->GetInput(HydrologyWaterVxEnum); _assert_(vx_input);175 Input * vy_input=element->GetInput(HydrologyWaterVyEnum); _assert_(vy_input);174 Input2* vx_input=element->GetInput2(HydrologyWaterVxEnum); _assert_(vx_input); 175 Input2* vy_input=element->GetInput2(HydrologyWaterVyEnum); _assert_(vy_input); 176 176 h = element->CharacteristicLength(); 177 177 … … 257 257 element->GetVerticesCoordinates(&xyz_list); 258 258 element->FindParam(&dt,TimesteppingTimeStepEnum); 259 Input * mb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input);260 Input * oldw_input = element->GetInput(WaterColumnOldEnum); _assert_(oldw_input);259 Input2* mb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input); 260 Input2* oldw_input = element->GetInput2(WaterColumnOldEnum); _assert_(oldw_input); 261 261 262 262 /*Initialize mb_correction to 0, do not forget!:*/ … … 368 368 369 369 /*Add input to the element: */ 370 element->AddInput (WatercolumnEnum,values,element->GetElementType());370 element->AddInput2(WatercolumnEnum,values,element->GetElementType()); 371 371 372 372 /*Free ressources:*/ -
issm/trunk-jpl/src/c/analyses/HydrologyShreveAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
r23585 r24335 28 28 return 1; 29 29 }/*}}}*/ 30 void L2ProjectionBaseAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/30 void L2ProjectionBaseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 31 31 32 32 /*Update elements: */ … … 35 35 if(iomodel->my_elements[i]){ 36 36 Element* element=(Element*)elements->GetObjectByOffset(counter); 37 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);37 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 38 38 counter++; 39 39 } 40 40 } 41 41 42 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);43 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);44 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);45 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);42 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 43 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 44 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 45 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 46 46 if(iomodel->domaintype!=Domain2DhorizontalEnum & iomodel->domaintype!=Domain3DsurfaceEnum){ 47 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);48 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);47 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 48 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 49 49 } 50 50 }/*}}}*/ … … 148 148 int input_enum; 149 149 IssmDouble Jdet,value,slopes[2]; 150 Input 151 Input 150 Input2 *input = NULL; 151 Input2 *input2 = NULL; 152 152 IssmDouble *xyz_list = NULL; 153 153 … … 163 163 basalelement->FindParam(&input_enum,InputToL2ProjectEnum); 164 164 switch(input_enum){ 165 case SurfaceSlopeXEnum: input2 = basalelement->GetInput (SurfaceEnum); _assert_(input2); break;166 case SurfaceSlopeYEnum: input2 = basalelement->GetInput (SurfaceEnum); _assert_(input2); break;167 case BedSlopeXEnum: input2 = basalelement->GetInput (BaseEnum); _assert_(input2); break;168 case BedSlopeYEnum: input2 = basalelement->GetInput (BaseEnum); _assert_(input2); break;169 case BaseSlopeXEnum: input2 = basalelement->GetInput (BaseEnum); _assert_(input2); break;170 case BaseSlopeYEnum: input2 = basalelement->GetInput (BaseEnum); _assert_(input2); break;171 case LevelsetfunctionSlopeXEnum: input2 = basalelement->GetInput (MaskIceLevelsetEnum); _assert_(input2); break;172 case LevelsetfunctionSlopeYEnum: input2 = basalelement->GetInput (MaskIceLevelsetEnum); _assert_(input2); break;173 default: input = element->GetInput (input_enum);165 case SurfaceSlopeXEnum: input2 = basalelement->GetInput2(SurfaceEnum); _assert_(input2); break; 166 case SurfaceSlopeYEnum: input2 = basalelement->GetInput2(SurfaceEnum); _assert_(input2); break; 167 case BedSlopeXEnum: input2 = basalelement->GetInput2(BaseEnum); _assert_(input2); break; 168 case BedSlopeYEnum: input2 = basalelement->GetInput2(BaseEnum); _assert_(input2); break; 169 case BaseSlopeXEnum: input2 = basalelement->GetInput2(BaseEnum); _assert_(input2); break; 170 case BaseSlopeYEnum: input2 = basalelement->GetInput2(BaseEnum); _assert_(input2); break; 171 case LevelsetfunctionSlopeXEnum: input2 = basalelement->GetInput2(MaskIceLevelsetEnum); _assert_(input2); break; 172 case LevelsetfunctionSlopeYEnum: input2 = basalelement->GetInput2(MaskIceLevelsetEnum); _assert_(input2); break; 173 default: input = element->GetInput2(input_enum); 174 174 } 175 175 -
issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp
r24240 r24335 37 37 return 1; 38 38 }/*}}}*/ 39 void L2ProjectionEPLAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/39 void L2ProjectionEPLAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 40 40 41 41 bool isefficientlayer; … … 55 55 if(iomodel->my_elements[i]){ 56 56 Element* element=(Element*)elements->GetObjectByOffset(counter); 57 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);57 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 58 58 counter++; 59 59 } 60 60 } 61 61 62 iomodel->FetchDataToInput( elements,"md.initialization.epl_head",EplHeadSubstepEnum);63 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);62 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.epl_head",EplHeadSubstepEnum); 63 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 64 64 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 65 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);66 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);65 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 66 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 67 67 } 68 68 }/*}}}*/ … … 105 105 } 106 106 107 Input* active_element_input=basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 108 active_element_input->GetInputValue(&active_element); 107 basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum); 109 108 110 109 /* Check that all nodes are active, else return empty matrix */ … … 173 172 } 174 173 175 Input* active_element_input = basalelement->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 176 active_element_input->GetInputValue(&active_element); 174 basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum); 177 175 178 176 /*Check that all nodes are active, else return empty matrix*/ … … 188 186 int input_enum,index; 189 187 IssmDouble Jdet,slopes[2]; 190 Input 188 Input2 *input = NULL; 191 189 IssmDouble *xyz_list = NULL; 192 190 … … 202 200 basalelement->FindParam(&input_enum,InputToL2ProjectEnum); 203 201 switch(input_enum){ 204 case EplHeadSlopeXEnum: input = basalelement->GetInput (EplHeadSubstepEnum); index = 0; _assert_(input); break;205 case EplHeadSlopeYEnum: input = basalelement->GetInput (EplHeadSubstepEnum); index = 1; _assert_(input); break;202 case EplHeadSlopeXEnum: input = basalelement->GetInput2(EplHeadSubstepEnum); index = 0; _assert_(input); break; 203 case EplHeadSlopeYEnum: input = basalelement->GetInput2(EplHeadSubstepEnum); index = 1; _assert_(input); break; 206 204 default: _error_("not implemented"); 207 205 } -
issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r24240 r24335 32 32 } 33 33 /*}}}*/ 34 void LevelsetAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/34 void LevelsetAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 35 35 36 36 /*Finite element type*/ … … 43 43 if(iomodel->my_elements[i]){ 44 44 Element* element=(Element*)elements->GetObjectByOffset(counter); 45 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);45 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 46 46 counter++; 47 47 } 48 48 } 49 49 50 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);51 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);52 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);50 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 51 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 52 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 53 53 54 54 /*Get moving front parameters*/ … … 57 57 switch(calvinglaw){ 58 58 case DefaultCalvingEnum: 59 iomodel->FetchDataToInput( elements,"md.calving.calvingrate",CalvingCalvingrateEnum);59 iomodel->FetchDataToInput(inputs2,elements,"md.calving.calvingrate",CalvingCalvingrateEnum); 60 60 break; 61 61 case CalvingLevermannEnum: 62 iomodel->FetchDataToInput( elements,"md.calving.coeff",CalvinglevermannCoeffEnum);62 iomodel->FetchDataToInput(inputs2,elements,"md.calving.coeff",CalvinglevermannCoeffEnum); 63 63 break; 64 64 case CalvingVonmisesEnum: 65 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);66 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);67 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);65 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 66 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 67 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 68 68 break; 69 69 case CalvingMinthicknessEnum: 70 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);70 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 71 71 break; 72 72 case CalvingHabEnum: 73 iomodel->FetchDataToInput( elements,"md.calving.flotation_fraction",CalvingHabFractionEnum);73 iomodel->FetchDataToInput(inputs2,elements,"md.calving.flotation_fraction",CalvingHabFractionEnum); 74 74 break; 75 75 case CalvingCrevasseDepthEnum: 76 iomodel->FetchDataToInput( elements,"md.calving.water_height",WaterheightEnum);76 iomodel->FetchDataToInput(inputs2,elements,"md.calving.water_height",WaterheightEnum); 77 77 break; 78 78 case CalvingDev2Enum: 79 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum);80 iomodel->FetchDataToInput( elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum);79 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 80 iomodel->FetchDataToInput(inputs2,elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 81 81 break; 82 82 default: … … 89 89 switch(melt_parameterization){ 90 90 case FrontalForcingsDefaultEnum: 91 iomodel->FetchDataToInput( elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum);91 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.meltingrate",CalvingMeltingrateEnum); 92 92 break; 93 93 case FrontalForcingsRignotEnum: 94 iomodel->FetchDataToInput( elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum);95 iomodel->FetchDataToInput( elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum);96 iomodel->FetchDataToInput( elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum);94 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.basin",FrontalForcingsBasinIdEnum); 95 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.subglacial_discharge",FrontalForcingsSubglacialDischargeEnum); 96 iomodel->FetchDataToInput(inputs2,elements,"md.frontalforcings.thermalforcing",FrontalForcingsThermalForcingEnum); 97 97 break; 98 98 default: … … 226 226 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 227 227 basalelement->FindParam(&calvingmax,CalvingMaxEnum); 228 Input * vx_input = NULL;229 Input * vy_input = NULL;230 Input * calvingratex_input = NULL;231 Input * calvingratey_input = NULL;232 Input * lsf_slopex_input = NULL;233 Input * lsf_slopey_input = NULL;234 Input * calvingrate_input = NULL;235 Input * meltingrate_input = NULL;236 Input * gr_input = NULL;228 Input2* vx_input = NULL; 229 Input2* vy_input = NULL; 230 Input2* calvingratex_input = NULL; 231 Input2* calvingratey_input = NULL; 232 Input2* lsf_slopex_input = NULL; 233 Input2* lsf_slopey_input = NULL; 234 Input2* calvingrate_input = NULL; 235 Input2* meltingrate_input = NULL; 236 Input2* gr_input = NULL; 237 237 238 238 /*Load velocities*/ 239 239 switch(domaintype){ 240 240 case Domain2DverticalEnum: 241 vx_input=basalelement->GetInput (VxEnum); _assert_(vx_input);241 vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input); 242 242 break; 243 243 case Domain2DhorizontalEnum: 244 vx_input=basalelement->GetInput (VxEnum); _assert_(vx_input);245 vy_input=basalelement->GetInput (VyEnum); _assert_(vy_input);246 gr_input=basalelement->GetInput (MaskGroundediceLevelsetEnum); _assert_(gr_input);244 vx_input=basalelement->GetInput2(VxEnum); _assert_(vx_input); 245 vy_input=basalelement->GetInput2(VyEnum); _assert_(vy_input); 246 gr_input=basalelement->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gr_input); 247 247 break; 248 248 case Domain3DEnum: 249 vx_input=basalelement->GetInput (VxAverageEnum); _assert_(vx_input);250 vy_input=basalelement->GetInput (VyAverageEnum); _assert_(vy_input);251 gr_input=basalelement->GetInput (MaskGroundediceLevelsetEnum); _assert_(gr_input);249 vx_input=basalelement->GetInput2(VxAverageEnum); _assert_(vx_input); 250 vy_input=basalelement->GetInput2(VyAverageEnum); _assert_(vy_input); 251 gr_input=basalelement->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gr_input); 252 252 break; 253 253 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); … … 258 258 case DefaultCalvingEnum: 259 259 case CalvingVonmisesEnum: 260 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);261 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);262 calvingrate_input = basalelement->GetInput (CalvingCalvingrateEnum); _assert_(calvingrate_input);263 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);260 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 261 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 262 calvingrate_input = basalelement->GetInput2(CalvingCalvingrateEnum); _assert_(calvingrate_input); 263 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 264 264 break; 265 265 case CalvingLevermannEnum: 266 266 switch(domaintype){ 267 267 case Domain2DverticalEnum: 268 calvingratex_input=basalelement->GetInput (CalvingratexEnum); _assert_(calvingratex_input);268 calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 269 269 break; 270 270 case Domain2DhorizontalEnum: 271 calvingratex_input=basalelement->GetInput (CalvingratexEnum); _assert_(calvingratex_input);272 calvingratey_input=basalelement->GetInput (CalvingrateyEnum); _assert_(calvingratey_input);271 calvingratex_input=basalelement->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 272 calvingratey_input=basalelement->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 273 273 break; 274 274 case Domain3DEnum: 275 calvingratex_input=basalelement->GetInput (CalvingratexAverageEnum); _assert_(calvingratex_input);276 calvingratey_input=basalelement->GetInput (CalvingrateyAverageEnum); _assert_(calvingratey_input);275 calvingratex_input=basalelement->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input); 276 calvingratey_input=basalelement->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input); 277 277 break; 278 278 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 279 279 } 280 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);280 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 281 281 break; 282 282 case CalvingMinthicknessEnum: 283 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);284 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);285 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);283 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 284 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 285 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 286 286 break; 287 287 case CalvingHabEnum: 288 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);289 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);290 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);288 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 289 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 290 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 291 291 break; 292 292 case CalvingCrevasseDepthEnum: 293 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);294 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);295 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);293 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 294 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 295 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 296 296 break; 297 297 case CalvingDev2Enum: 298 298 basalelement->FindParam(&calvinghaf,CalvingHeightAboveFloatationEnum); 299 lsf_slopex_input = basalelement->GetInput (LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input);300 if(dim==2) lsf_slopey_input = basalelement->GetInput (LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input);301 calvingrate_input = basalelement->GetInput (CalvingCalvingrateEnum); _assert_(calvingrate_input);302 meltingrate_input = basalelement->GetInput (CalvingMeltingrateEnum); _assert_(meltingrate_input);299 lsf_slopex_input = basalelement->GetInput2(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 300 if(dim==2) lsf_slopey_input = basalelement->GetInput2(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 301 calvingrate_input = basalelement->GetInput2(CalvingCalvingrateEnum); _assert_(calvingrate_input); 302 meltingrate_input = basalelement->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 303 303 break; 304 304 default: … … 571 571 /*Retrieve all inputs and parameters*/ 572 572 basalelement->GetVerticesCoordinates(&xyz_list); 573 Input * levelset_input = basalelement->GetInput(MaskIceLevelsetEnum); _assert_(levelset_input);573 Input2* levelset_input = basalelement->GetInput2(MaskIceLevelsetEnum); _assert_(levelset_input); 574 574 575 575 /* Start looping on the number of gaussian points: */ … … 718 718 int numnodes = element->GetNumberOfNodes(); 719 719 Gauss* gauss = element->NewGauss(); 720 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);721 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);722 Input * sl_input = element->GetInput(SealevelEnum); _assert_(sl_input);720 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 721 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 722 Input2* sl_input = element->GetInput2(SealevelEnum); _assert_(sl_input); 723 723 724 724 /*Potentially constrain nodes of this element*/ … … 746 746 747 747 /*Get the fraction of the flotation thickness at the terminus*/ 748 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);748 InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum); 749 749 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum); 750 750 … … 758 758 int numnodes = element->GetNumberOfNodes(); 759 759 Gauss* gauss = element->NewGauss(); 760 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);761 Input * bed_input = element->GetInput(BedEnum); _assert_(bed_input);762 Input * hab_fraction_input = element->GetInput(CalvingHabFractionEnum); _assert_(hab_fraction_input);763 Input * ls_input = element->GetInput(DistanceToCalvingfrontEnum); _assert_(ls_input);760 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 761 Input2* bed_input = element->GetInput2(BedEnum); _assert_(bed_input); 762 Input2* hab_fraction_input = element->GetInput2(CalvingHabFractionEnum); _assert_(hab_fraction_input); 763 Input2* ls_input = element->GetInput2(DistanceToCalvingfrontEnum); _assert_(ls_input); 764 764 765 765 /*Potentially constrain nodes of this element*/ … … 793 793 794 794 /*Get the DistanceToCalvingfront*/ 795 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);795 InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum); 796 796 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0,DistanceToCalvingfrontEnum); 797 797 … … 803 803 int numnodes = element->GetNumberOfNodes(); 804 804 Gauss* gauss = element->NewGauss(); 805 Input * crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);806 Input * bed_input = element->GetInput(BedEnum); _assert_(bed_input);807 Input * surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);808 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);809 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);805 Input2* crevassedepth_input = element->GetInput2(CrevasseDepthEnum); _assert_(crevassedepth_input); 806 Input2* bed_input = element->GetInput2(BedEnum); _assert_(bed_input); 807 Input2* surface_crevasse_input = element->GetInput2(SurfaceCrevasseEnum); _assert_(surface_crevasse_input); 808 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 809 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 810 810 811 811 /*First, look at ice front and figure out if any of the nodes will be calved*/ … … 841 841 int numnodes = element->GetNumberOfNodes(); 842 842 Gauss* gauss = element->NewGauss(); 843 Input * levelset_input = element->GetInput(DistanceToCalvingfrontEnum); _assert_(levelset_input);844 Input * crevassedepth_input = element->GetInput(CrevasseDepthEnum); _assert_(crevassedepth_input);845 Input * bed_input = element->GetInput(BedEnum); _assert_(bed_input);846 Input * surface_crevasse_input = element->GetInput(SurfaceCrevasseEnum); _assert_(surface_crevasse_input);847 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);848 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);843 Input2* levelset_input = element->GetInput2(DistanceToCalvingfrontEnum); _assert_(levelset_input); 844 Input2* crevassedepth_input = element->GetInput2(CrevasseDepthEnum); _assert_(crevassedepth_input); 845 Input2* bed_input = element->GetInput2(BedEnum); _assert_(bed_input); 846 Input2* surface_crevasse_input = element->GetInput2(SurfaceCrevasseEnum); _assert_(surface_crevasse_input); 847 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 848 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 849 849 850 850 /*Is this element connected to a node that should be calved*/ -
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/LoveAnalysis.cpp
r23601 r24335 15 15 _error_("not needed!"); 16 16 }/*}}}*/ 17 void LoveAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/17 void LoveAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 18 18 19 19 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/LoveAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r24145 r24335 111 111 return 1; 112 112 }/*}}}*/ 113 void MasstransportAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/113 void MasstransportAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 114 114 115 115 int stabilization,finiteelement; … … 140 140 if(iomodel->my_elements[i]){ 141 141 Element* element=(Element*)elements->GetObjectByOffset(counter); 142 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);142 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 143 143 counter++; 144 144 } 145 145 } 146 146 147 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);148 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);149 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);150 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);151 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);152 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);153 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);154 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);155 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);156 if(isgroundingline) iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);147 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 148 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 149 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 150 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 151 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 152 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 153 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 154 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 155 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 156 if(isgroundingline) iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 157 157 /*Initialize cumdeltalthickness input*/ 158 InputUpdateFromConstantx( elements,0.,SealevelriseCumDeltathicknessEnum);158 InputUpdateFromConstantx(inputs2,elements,0.,SealevelriseCumDeltathicknessEnum); 159 159 /*Initialize ThicknessResidual input*/ 160 InputUpdateFromConstantx( elements,0.,ThicknessResidualEnum);160 InputUpdateFromConstantx(inputs2,elements,0.,ThicknessResidualEnum); 161 161 162 162 /*Get what we need for ocean-induced basal melting*/ … … 165 165 switch(basalforcing_model){ 166 166 case FloatingMeltRateEnum: 167 iomodel->FetchDataToInput( elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);167 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 168 168 break; 169 169 case LinearFloatingMeltRateEnum: … … 174 174 break; 175 175 case SpatialLinearFloatingMeltRateEnum: 176 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);177 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);178 iomodel->FetchDataToInput( elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);176 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 177 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 178 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 179 179 break; 180 180 case BasalforcingsPicoEnum: 181 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);181 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum); 182 182 break; 183 183 case BasalforcingsIsmip6Enum:{ 184 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);185 iomodel->FetchDataToInput( elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmip6MeltAnomalyEnum,0.);184 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum); 185 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.melt_anomaly",BasalforcingsIsmip6MeltAnomalyEnum,0.); 186 186 IssmDouble** array3d = NULL; int* Ms = NULL; int* Ns = NULL; int K; 187 187 iomodel->FetchData(&array3d,&Ms,&Ns,&K,"md.basalforcings.tf"); … … 191 191 if(iomodel->domaintype!=Domain2DhorizontalEnum && !element->IsOnBase()) continue; 192 192 for(int kk=0;kk<K;kk++){ 193 element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],i omodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,7,kk);193 element->DatasetInputAdd(BasalforcingsIsmip6TfEnum,array3d[kk],inputs2,iomodel,Ms[kk],Ns[kk],1,BasalforcingsIsmip6TfEnum,7,kk); 194 194 } 195 195 } … … 200 200 break; 201 201 case BeckmannGoosseFloatingMeltRateEnum: 202 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);203 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);202 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 203 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 204 204 break; 205 205 default: … … 208 208 209 209 if(!issmb){ 210 iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum);210 iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 211 211 } 212 212 if(stabilization==3){ 213 iomodel->FetchDataToInput( elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element213 iomodel->FetchDataToInput(inputs2,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for DG, we need the spc in the element 214 214 } 215 215 if(stabilization==4){ 216 iomodel->FetchDataToInput( elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties)216 iomodel->FetchDataToInput(inputs2,elements,"md.masstransport.spcthickness",MasstransportSpcthicknessEnum); //for FCT, we need the spc in the element (penlaties) 217 217 } 218 218 219 219 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 220 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);221 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);220 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 221 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 222 222 } 223 223 … … 318 318 element->FindParam(&domaintype,DomainTypeEnum); 319 319 element->FindParam(&stabilization,MasstransportStabilizationEnum); 320 Input * vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);321 Input * vyaverage_input=NULL;320 Input2* vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input); 321 Input2* vyaverage_input=NULL; 322 322 if(dim==2){ 323 vyaverage_input=element->GetInput (VyAverageEnum); _assert_(vyaverage_input);323 vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input); 324 324 } 325 325 … … 507 507 element->FindParam(&dt,TimesteppingTimeStepEnum); 508 508 element->FindParam(&domaintype,DomainTypeEnum); 509 Input * vxaverage_input=element->GetInput(VxAverageEnum); _assert_(vxaverage_input);510 Input * vyaverage_input=element->GetInput(VyAverageEnum); _assert_(vyaverage_input);509 Input2* vxaverage_input=element->GetInput2(VxAverageEnum); _assert_(vxaverage_input); 510 Input2* vyaverage_input=element->GetInput2(VyAverageEnum); _assert_(vyaverage_input); 511 511 512 512 /* Start looping on the number of gaussian points: */ … … 617 617 element->FindParam(&dt,TimesteppingTimeStepEnum); 618 618 element->FindParam(&stabilization,MasstransportStabilizationEnum); 619 Input* gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 620 Input* fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 621 Input* gllevelset_input = element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 622 Input* ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input); 623 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input); 624 Input* vxaverage_input = element->GetInput(VxAverageEnum); _assert_(vxaverage_input); 625 Input* vyaverage_input = element->GetInput(VyAverageEnum); _assert_(vyaverage_input); 619 Input2* gmb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 620 Input2* fmb_input = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 621 Input2* gllevelset_input = element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 622 Input2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 623 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 624 Input2* vxaverage_input = element->GetInput2(VxAverageEnum); _assert_(vxaverage_input); 625 Input2* vyaverage_input = element->GetInput2(VyAverageEnum); _assert_(vyaverage_input); 626 627 // if(element->Id()==9){ 628 // gmb_input->Echo(); 629 // _error_("S"); 630 // } 626 631 627 632 h=element->CharacteristicLength(); … … 726 731 element->FindParam(&dt,TimesteppingTimeStepEnum); 727 732 element->FindParam(&melt_style,GroundinglineMeltInterpolationEnum); 728 Input * gmb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input);729 Input * fmb_input = element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input);730 Input * ms_input = element->GetInput(SmbMassBalanceEnum); _assert_(ms_input);731 Input * gllevelset_input = element->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);732 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);733 Input2* gmb_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(gmb_input); 734 Input2* fmb_input = element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(fmb_input); 735 Input2* ms_input = element->GetInput2(SmbMassBalanceEnum); _assert_(ms_input); 736 Input2* gllevelset_input = element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 737 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 733 738 734 739 /*Recover portion of element that is grounded*/ … … 872 877 } 873 878 } 874 element->AddBasalInput (ThicknessEnum,newthickness,element->GetElementType());875 element->AddBasalInput (ThicknessResidualEnum,thicknessresidual,element->GetElementType());879 element->AddBasalInput2(ThicknessEnum,newthickness,element->GetElementType()); 880 element->AddBasalInput2(ThicknessResidualEnum,thicknessresidual,element->GetElementType()); 876 881 877 882 xDelete<int>(doflist); … … 905 910 basalelement->GetInputListOnVertices(&newthickness[0],ThicknessEnum); 906 911 basalelement->GetInputListOnVertices(&oldthickness[0],ThicknessOldEnum); 907 basalelement->GetInputListOnVertices(&oldbase[0],Base Enum);908 basalelement->GetInputListOnVertices(&oldsurface[0],Surface Enum);912 basalelement->GetInputListOnVertices(&oldbase[0],BaseOldEnum); 913 basalelement->GetInputListOnVertices(&oldsurface[0],SurfaceOldEnum); 909 914 basalelement->GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum); 910 915 basalelement->GetInputListOnVertices(&sealevel[0],SealevelEnum); 911 basalelement->GetInputListOnVertices(&cumdeltathickness[0],SealevelriseCumDeltathickness Enum);916 basalelement->GetInputListOnVertices(&cumdeltathickness[0],SealevelriseCumDeltathicknessOldEnum); 912 917 913 918 /*Do we do grounding line migration?*/ … … 953 958 954 959 /*Add input to the element: */ 955 element->AddBasalInput (SurfaceEnum,newsurface,P1Enum);956 element->AddBasalInput (BaseEnum,newbase,P1Enum);957 element->AddBasalInput (SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum);958 element->AddBasalInput (SealevelriseDeltathicknessEnum,deltathickness,P1Enum);960 element->AddBasalInput2(SurfaceEnum,newsurface,P1Enum); 961 element->AddBasalInput2(BaseEnum,newbase,P1Enum); 962 element->AddBasalInput2(SealevelriseCumDeltathicknessEnum,cumdeltathickness,P1Enum); 963 element->AddBasalInput2(SealevelriseDeltathicknessEnum,deltathickness,P1Enum); 959 964 960 965 /*Free ressources:*/ … … 1000 1005 /*Retrieve all inputs and parameters*/ 1001 1006 element->GetVerticesCoordinates(&xyz_list); 1002 Input * vxaverage_input=element->GetInput(VxEnum); _assert_(vxaverage_input);1003 Input * vyaverage_input=element->GetInput(VyEnum); _assert_(vyaverage_input);1007 Input2* vxaverage_input=element->GetInput2(VxEnum); _assert_(vxaverage_input); 1008 Input2* vyaverage_input=element->GetInput2(VyEnum); _assert_(vyaverage_input); 1004 1009 1005 1010 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
r23959 r24335 37 37 return 1; 38 38 }/*}}}*/ 39 void MeltingAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/39 void MeltingAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 40 40 41 41 /*Now, is the model 3d? otherwise, do nothing: */ … … 47 47 if(iomodel->my_elements[i]){ 48 48 Element* element=(Element*)elements->GetObjectByOffset(counter); 49 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);49 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 50 50 counter++; 51 51 } … … 53 53 54 54 /*Create inputs: */ 55 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);56 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);57 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);58 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);59 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);55 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 56 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 57 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 58 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 59 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 60 60 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 61 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);62 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);61 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 62 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 63 63 } 64 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);64 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 65 65 }/*}}}*/ 66 66 void MeltingAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ -
issm/trunk-jpl/src/c/analyses/MeltingAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
r24259 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void SealevelriseAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void SealevelriseAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 int geodetic=0; … … 27 27 if(iomodel->my_elements[i]){ 28 28 Element* element=(Element*)elements->GetObjectByOffset(counter); 29 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);29 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 30 30 counter++; 31 31 } … … 33 33 34 34 /*Create inputs: */ 35 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);36 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);35 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 36 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 37 37 //those only if we have requested geodetic computations: 38 38 iomodel->FetchData(&geodetic,"md.slr.geodetic"); … … 41 41 iomodel->FetchData(&masktype,"md.mask.type"); 42 42 if (strcmp(masktype,"maskpsl")==0){ 43 iomodel->FetchDataToInput( elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum);44 iomodel->FetchDataToInput( elements,"md.mask.land_levelset",MaskLandLevelsetEnum);43 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ocean_levelset",MaskOceanLevelsetEnum); 44 iomodel->FetchDataToInput(inputs2,elements,"md.mask.land_levelset",MaskLandLevelsetEnum); 45 45 } 46 46 xDelete<char>(masktype); 47 47 } 48 iomodel->FetchDataToInput( elements,"md.slr.deltathickness",SealevelriseDeltathicknessEnum);49 iomodel->FetchDataToInput( elements,"md.slr.spcthickness",SealevelriseSpcthicknessEnum);50 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);51 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);52 iomodel->FetchDataToInput( elements,"md.slr.Ngia",SealevelNGiaRateEnum);53 iomodel->FetchDataToInput( elements,"md.slr.Ugia",SealevelUGiaRateEnum);54 iomodel->FetchDataToInput( elements,"md.slr.steric_rate",SealevelriseStericRateEnum);55 iomodel->FetchDataToInput( elements,"md.slr.hydro_rate",SealevelriseHydroRateEnum);48 iomodel->FetchDataToInput(inputs2,elements,"md.slr.deltathickness",SealevelriseDeltathicknessEnum); 49 iomodel->FetchDataToInput(inputs2,elements,"md.slr.spcthickness",SealevelriseSpcthicknessEnum); 50 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 51 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 52 iomodel->FetchDataToInput(inputs2,elements,"md.slr.Ngia",SealevelNGiaRateEnum); 53 iomodel->FetchDataToInput(inputs2,elements,"md.slr.Ugia",SealevelUGiaRateEnum); 54 iomodel->FetchDataToInput(inputs2,elements,"md.slr.steric_rate",SealevelriseStericRateEnum); 55 iomodel->FetchDataToInput(inputs2,elements,"md.slr.hydro_rate",SealevelriseHydroRateEnum); 56 56 57 57 /*Initialize cumdeltalthickness and sealevel rise rate input*/ 58 InputUpdateFromConstantx( elements,0.,SealevelriseCumDeltathicknessEnum);59 InputUpdateFromConstantx( elements,0.,SealevelNEsaRateEnum);60 InputUpdateFromConstantx( elements,0.,SealevelUEsaRateEnum);61 InputUpdateFromConstantx( elements,0.,SealevelRSLRateEnum);62 InputUpdateFromConstantx( elements,0.,SealevelEustaticMaskEnum);63 InputUpdateFromConstantx( elements,0.,SealevelEustaticOceanMaskEnum);58 InputUpdateFromConstantx(inputs2,elements,0.,SealevelriseCumDeltathicknessEnum); 59 InputUpdateFromConstantx(inputs2,elements,0.,SealevelNEsaRateEnum); 60 InputUpdateFromConstantx(inputs2,elements,0.,SealevelUEsaRateEnum); 61 InputUpdateFromConstantx(inputs2,elements,0.,SealevelRSLRateEnum); 62 InputUpdateFromConstantx(inputs2,elements,0.,SealevelEustaticMaskEnum); 63 InputUpdateFromConstantx(inputs2,elements,0.,SealevelEustaticOceanMaskEnum); 64 64 65 65 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
r24253 r24335 21 21 return 1; 22 22 }/*}}}*/ 23 void SmbAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/23 void SmbAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 24 24 25 25 int smb_model; … … 31 31 if(iomodel->my_elements[i]){ 32 32 Element* element=(Element*)elements->GetObjectByOffset(counter); 33 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);33 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 34 34 counter++; 35 35 } … … 40 40 switch(smb_model){ 41 41 case SMBforcingEnum: 42 iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.);42 iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum,0.); 43 43 break; 44 44 case SMBgembEnum: 45 iomodel->FetchDataToInput( elements,"md.smb.Ta",SmbTaEnum);46 iomodel->FetchDataToInput( elements,"md.smb.V",SmbVEnum);47 iomodel->FetchDataToInput( elements,"md.smb.dswrf",SmbDswrfEnum);48 iomodel->FetchDataToInput( elements,"md.smb.dlwrf",SmbDlwrfEnum);49 iomodel->FetchDataToInput( elements,"md.smb.P",SmbPEnum);50 iomodel->FetchDataToInput( elements,"md.smb.eAir",SmbEAirEnum);51 iomodel->FetchDataToInput( elements,"md.smb.pAir",SmbPAirEnum);52 iomodel->FetchDataToInput( elements,"md.smb.zTop",SmbZTopEnum);53 iomodel->FetchDataToInput( elements,"md.smb.dzTop",SmbDzTopEnum);54 iomodel->FetchDataToInput( elements,"md.smb.dzMin",SmbDzMinEnum);55 iomodel->FetchDataToInput( elements,"md.smb.zY",SmbZYEnum);56 iomodel->FetchDataToInput( elements,"md.smb.zMax",SmbZMaxEnum);57 iomodel->FetchDataToInput( elements,"md.smb.zMin",SmbZMinEnum);58 iomodel->FetchDataToInput( elements,"md.smb.Tmean",SmbTmeanEnum);59 iomodel->FetchDataToInput( elements,"md.smb.Vmean",SmbVmeanEnum);60 iomodel->FetchDataToInput( elements,"md.smb.C",SmbCEnum);61 iomodel->FetchDataToInput( elements,"md.smb.Tz",SmbTzEnum);62 iomodel->FetchDataToInput( elements,"md.smb.Vz",SmbVzEnum);63 InputUpdateFromConstantx( elements,0.,SmbIsInitializedEnum);64 iomodel->FetchDataToInput( elements,"md.smb.Dzini",SmbDziniEnum);65 iomodel->FetchDataToInput( elements,"md.smb.Dini",SmbDiniEnum);66 iomodel->FetchDataToInput( elements,"md.smb.Reini",SmbReiniEnum);67 iomodel->FetchDataToInput( elements,"md.smb.Gdnini",SmbGdniniEnum);68 iomodel->FetchDataToInput( elements,"md.smb.Gspini",SmbGspiniEnum);69 iomodel->FetchDataToInput( elements,"md.smb.ECini",SmbECiniEnum);70 iomodel->FetchDataToInput( elements,"md.smb.Wini",SmbWiniEnum);71 iomodel->FetchDataToInput( elements,"md.smb.Aini",SmbAiniEnum);72 iomodel->FetchDataToInput( elements,"md.smb.Tini",SmbTiniEnum);73 iomodel->FetchDataToInput( elements,"md.smb.Sizeini",SmbSizeiniEnum);74 iomodel->FetchDataToInput( elements,"md.smb.aValue",SmbAValueEnum);75 iomodel->FetchDataToInput( elements,"md.smb.teValue",SmbTeValueEnum);45 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Ta",SmbTaEnum); 46 iomodel->FetchDataToInput(inputs2,elements,"md.smb.V",SmbVEnum); 47 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dswrf",SmbDswrfEnum); 48 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dlwrf",SmbDlwrfEnum); 49 iomodel->FetchDataToInput(inputs2,elements,"md.smb.P",SmbPEnum); 50 iomodel->FetchDataToInput(inputs2,elements,"md.smb.eAir",SmbEAirEnum); 51 iomodel->FetchDataToInput(inputs2,elements,"md.smb.pAir",SmbPAirEnum); 52 iomodel->FetchDataToInput(inputs2,elements,"md.smb.zTop",SmbZTopEnum); 53 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dzTop",SmbDzTopEnum); 54 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dzMin",SmbDzMinEnum); 55 iomodel->FetchDataToInput(inputs2,elements,"md.smb.zY",SmbZYEnum); 56 iomodel->FetchDataToInput(inputs2,elements,"md.smb.zMax",SmbZMaxEnum); 57 iomodel->FetchDataToInput(inputs2,elements,"md.smb.zMin",SmbZMinEnum); 58 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tmean",SmbTmeanEnum); 59 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Vmean",SmbVmeanEnum); 60 iomodel->FetchDataToInput(inputs2,elements,"md.smb.C",SmbCEnum); 61 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tz",SmbTzEnum); 62 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Vz",SmbVzEnum); 63 InputUpdateFromConstantx(inputs2,elements,0.,SmbIsInitializedEnum); 64 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Dzini",SmbDziniEnum); 65 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Dini",SmbDiniEnum); 66 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Reini",SmbReiniEnum); 67 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Gdnini",SmbGdniniEnum); 68 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Gspini",SmbGspiniEnum); 69 iomodel->FetchDataToInput(inputs2,elements,"md.smb.ECini",SmbECiniEnum); 70 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Wini",SmbWiniEnum); 71 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Aini",SmbAiniEnum); 72 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Tini",SmbTiniEnum); 73 iomodel->FetchDataToInput(inputs2,elements,"md.smb.Sizeini",SmbSizeiniEnum); 74 iomodel->FetchDataToInput(inputs2,elements,"md.smb.aValue",SmbAValueEnum); 75 iomodel->FetchDataToInput(inputs2,elements,"md.smb.teValue",SmbTeValueEnum); 76 76 break; 77 77 case SMBpddEnum: 78 78 iomodel->FindConstant(&isdelta18o,"md.smb.isdelta18o"); 79 79 iomodel->FindConstant(&ismungsm,"md.smb.ismungsm"); 80 iomodel->FetchDataToInput( elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);81 iomodel->FetchDataToInput( elements,"md.smb.s0p",SmbS0pEnum);82 iomodel->FetchDataToInput( elements,"md.smb.s0t",SmbS0tEnum);80 iomodel->FetchDataToInput(inputs2,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum); 81 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0p",SmbS0pEnum); 82 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum); 83 83 if(isdelta18o || ismungsm){ 84 iomodel->FetchDataToInput( elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum);85 iomodel->FetchDataToInput( elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);86 iomodel->FetchDataToInput( elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);87 iomodel->FetchDataToInput( elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum);84 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperatures_lgm",SmbTemperaturesLgmEnum); 85 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum); 86 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 87 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitations_lgm",SmbPrecipitationsLgmEnum); 88 88 }else{ 89 iomodel->FetchDataToInput( elements,"md.smb.precipitation",SmbPrecipitationEnum);90 iomodel->FetchDataToInput( elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);89 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitation",SmbPrecipitationEnum); 90 iomodel->FetchDataToInput(inputs2,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum); 91 91 } 92 92 break; 93 93 case SMBpddSicopolisEnum: 94 iomodel->FetchDataToInput( elements,"md.smb.s0p",SmbS0pEnum);95 iomodel->FetchDataToInput( elements,"md.smb.s0t",SmbS0tEnum);94 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0p",SmbS0pEnum); 95 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum); 96 96 iomodel->FindConstant(&isfirnwarming,"md.smb.isfirnwarming"); 97 iomodel->FetchDataToInput( elements,"md.smb.smb_corr",SmbSmbCorrEnum);98 iomodel->FetchDataToInput( elements,"md.smb.precipitation",SmbPrecipitationEnum);99 iomodel->FetchDataToInput( elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum);100 iomodel->FetchDataToInput( elements,"md.smb.precipitation_anomaly",SmbPrecipitationsAnomalyEnum);101 iomodel->FetchDataToInput( elements,"md.smb.temperature_anomaly",SmbTemperaturesAnomalyEnum);97 iomodel->FetchDataToInput(inputs2,elements,"md.smb.smb_corr",SmbSmbCorrEnum); 98 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitation",SmbPrecipitationEnum); 99 iomodel->FetchDataToInput(inputs2,elements,"md.smb.monthlytemperatures",SmbMonthlytemperaturesEnum); 100 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitation_anomaly",SmbPrecipitationsAnomalyEnum); 101 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperature_anomaly",SmbTemperaturesAnomalyEnum); 102 102 break; 103 103 case SMBd18opddEnum: … … 107 107 iomodel->FindConstant(&isd18opd,"md.smb.isd18opd"); 108 108 iomodel->FindConstant(&issetpddfac,"md.smb.issetpddfac"); 109 iomodel->FetchDataToInput( elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);110 iomodel->FetchDataToInput( elements,"md.smb.s0p",SmbS0pEnum);111 iomodel->FetchDataToInput( elements,"md.smb.s0t",SmbS0tEnum);109 iomodel->FetchDataToInput(inputs2,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum); 110 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0p",SmbS0pEnum); 111 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0t",SmbS0tEnum); 112 112 if(isd18opd){ 113 iomodel->FetchDataToInput( elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum);114 iomodel->FetchDataToInput( elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum);113 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperatures_presentday",SmbTemperaturesPresentdayEnum); 114 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitations_presentday",SmbPrecipitationsPresentdayEnum); 115 115 if(!istemperaturescaled){ 116 iomodel->FetchDataToInput( elements,"md.smb.temperatures_reconstructed",SmbTemperaturesReconstructedEnum);116 iomodel->FetchDataToInput(inputs2,elements,"md.smb.temperatures_reconstructed",SmbTemperaturesReconstructedEnum); 117 117 } 118 118 if(!isprecipscaled){ 119 iomodel->FetchDataToInput( elements,"md.smb.precipitations_reconstructed",SmbPrecipitationsReconstructedEnum);119 iomodel->FetchDataToInput(inputs2,elements,"md.smb.precipitations_reconstructed",SmbPrecipitationsReconstructedEnum); 120 120 } 121 121 } 122 122 if(issetpddfac){ 123 iomodel->FetchDataToInput( elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.);124 iomodel->FetchDataToInput( elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.);123 iomodel->FetchDataToInput(inputs2,elements,"md.smb.pddfac_snow",SmbPddfacSnowEnum,-1.); 124 iomodel->FetchDataToInput(inputs2,elements,"md.smb.pddfac_ice",SmbPddfacIceEnum,-1.); 125 125 } 126 126 break; 127 127 case SMBgradientsEnum: 128 iomodel->FetchDataToInput( elements,"md.smb.href",SmbHrefEnum);129 iomodel->FetchDataToInput( elements,"md.smb.smbref",SmbSmbrefEnum);130 iomodel->FetchDataToInput( elements,"md.smb.b_pos",SmbBPosEnum);131 iomodel->FetchDataToInput( elements,"md.smb.b_neg",SmbBNegEnum);128 iomodel->FetchDataToInput(inputs2,elements,"md.smb.href",SmbHrefEnum); 129 iomodel->FetchDataToInput(inputs2,elements,"md.smb.smbref",SmbSmbrefEnum); 130 iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_pos",SmbBPosEnum); 131 iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_neg",SmbBNegEnum); 132 132 break; 133 133 case SMBgradientselaEnum: 134 iomodel->FetchDataToInput( elements,"md.smb.ela",SmbElaEnum);135 iomodel->FetchDataToInput( elements,"md.smb.b_pos",SmbBPosEnum);136 iomodel->FetchDataToInput( elements,"md.smb.b_neg",SmbBNegEnum);137 iomodel->FetchDataToInput( elements,"md.smb.b_max",SmbBMaxEnum);138 iomodel->FetchDataToInput( elements,"md.smb.b_min",SmbBMinEnum);134 iomodel->FetchDataToInput(inputs2,elements,"md.smb.ela",SmbElaEnum); 135 iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_pos",SmbBPosEnum); 136 iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_neg",SmbBNegEnum); 137 iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_max",SmbBMaxEnum); 138 iomodel->FetchDataToInput(inputs2,elements,"md.smb.b_min",SmbBMinEnum); 139 139 break; 140 140 case SMBhenningEnum: 141 iomodel->FetchDataToInput( elements,"md.smb.smbref",SmbSmbrefEnum,0.);141 iomodel->FetchDataToInput(inputs2,elements,"md.smb.smbref",SmbSmbrefEnum,0.); 142 142 break; 143 143 case SMBcomponentsEnum: 144 iomodel->FetchDataToInput( elements,"md.smb.accumulation",SmbAccumulationEnum,0.);145 iomodel->FetchDataToInput( elements,"md.smb.evaporation",SmbEvaporationEnum,0.);146 iomodel->FetchDataToInput( elements,"md.smb.runoff",SmbRunoffEnum,0.);144 iomodel->FetchDataToInput(inputs2,elements,"md.smb.accumulation",SmbAccumulationEnum,0.); 145 iomodel->FetchDataToInput(inputs2,elements,"md.smb.evaporation",SmbEvaporationEnum,0.); 146 iomodel->FetchDataToInput(inputs2,elements,"md.smb.runoff",SmbRunoffEnum,0.); 147 147 break; 148 148 case SMBmeltcomponentsEnum: 149 iomodel->FetchDataToInput( elements,"md.smb.accumulation",SmbAccumulationEnum,0.);150 iomodel->FetchDataToInput( elements,"md.smb.evaporation",SmbEvaporationEnum,0.);151 iomodel->FetchDataToInput( elements,"md.smb.melt",SmbMeltEnum,0.);152 iomodel->FetchDataToInput( elements,"md.smb.refreeze",SmbRefreezeEnum,0.);149 iomodel->FetchDataToInput(inputs2,elements,"md.smb.accumulation",SmbAccumulationEnum,0.); 150 iomodel->FetchDataToInput(inputs2,elements,"md.smb.evaporation",SmbEvaporationEnum,0.); 151 iomodel->FetchDataToInput(inputs2,elements,"md.smb.melt",SmbMeltEnum,0.); 152 iomodel->FetchDataToInput(inputs2,elements,"md.smb.refreeze",SmbRefreezeEnum,0.); 153 153 break; 154 154 case SMBgradientscomponentsEnum: 155 iomodel->FetchDataToInput( elements,"md.smb.accualti",SmbAccualtiEnum);156 iomodel->FetchDataToInput( elements,"md.smb.accugrad",SmbAccugradEnum);157 iomodel->FetchDataToInput( elements,"md.smb.runoffalti",SmbRunoffaltiEnum);158 iomodel->FetchDataToInput( elements,"md.smb.runoffgrad",SmbRunoffgradEnum);155 iomodel->FetchDataToInput(inputs2,elements,"md.smb.accualti",SmbAccualtiEnum); 156 iomodel->FetchDataToInput(inputs2,elements,"md.smb.accugrad",SmbAccugradEnum); 157 iomodel->FetchDataToInput(inputs2,elements,"md.smb.runoffalti",SmbRunoffaltiEnum); 158 iomodel->FetchDataToInput(inputs2,elements,"md.smb.runoffgrad",SmbRunoffgradEnum); 159 159 break; 160 160 case SMBsemicEnum: 161 iomodel->FetchDataToInput( elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum);162 iomodel->FetchDataToInput( elements,"md.smb.s0gcm",SmbS0gcmEnum);163 iomodel->FetchDataToInput( elements,"md.smb.dailysnowfall",SmbDailysnowfallEnum);164 iomodel->FetchDataToInput( elements,"md.smb.dailyrainfall",SmbDailyrainfallEnum);165 iomodel->FetchDataToInput( elements,"md.smb.dailydsradiation",SmbDailydsradiationEnum);166 iomodel->FetchDataToInput( elements,"md.smb.dailydlradiation",SmbDailydlradiationEnum);167 iomodel->FetchDataToInput( elements,"md.smb.dailywindspeed",SmbDailywindspeedEnum);168 iomodel->FetchDataToInput( elements,"md.smb.dailypressure",SmbDailypressureEnum);169 iomodel->FetchDataToInput( elements,"md.smb.dailyairdensity",SmbDailyairdensityEnum);170 iomodel->FetchDataToInput( elements,"md.smb.dailyairhumidity",SmbDailyairhumidityEnum);171 iomodel->FetchDataToInput( elements,"md.smb.dailytemperature",SmbDailytemperatureEnum);161 iomodel->FetchDataToInput(inputs2,elements,"md.thermal.spctemperature",ThermalSpctemperatureEnum); 162 iomodel->FetchDataToInput(inputs2,elements,"md.smb.s0gcm",SmbS0gcmEnum); 163 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailysnowfall",SmbDailysnowfallEnum); 164 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailyrainfall",SmbDailyrainfallEnum); 165 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailydsradiation",SmbDailydsradiationEnum); 166 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailydlradiation",SmbDailydlradiationEnum); 167 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailywindspeed",SmbDailywindspeedEnum); 168 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailypressure",SmbDailypressureEnum); 169 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailyairdensity",SmbDailyairdensityEnum); 170 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailyairhumidity",SmbDailyairhumidityEnum); 171 iomodel->FetchDataToInput(inputs2,elements,"md.smb.dailytemperature",SmbDailytemperatureEnum); 172 172 break; 173 173 default: -
issm/trunk-jpl/src/c/analyses/SmbAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/SmoothAnalysis.cpp
r23644 r24335 18 18 return 1; 19 19 }/*}}}*/ 20 void SmoothAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/20 void SmoothAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 21 21 22 22 /*Update elements: */ … … 25 25 if(iomodel->my_elements[i]){ 26 26 Element* element=(Element*)elements->GetObjectByOffset(counter); 27 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);27 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 28 28 counter++; 29 29 } … … 70 70 element->FindParam(&l,SmoothThicknessMultiplierEnum); _assert_(l>0.); 71 71 element->GetVerticesCoordinates(&xyz_list); 72 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);72 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 73 73 74 74 /* Start looping on the number of gaussian points: */ … … 116 116 IssmDouble Jdet,value; 117 117 IssmDouble *xyz_list = NULL; 118 Input 118 Input2 *input = NULL; 119 119 120 120 /*SPECIFICS: Driving stress for balance velocities*/ 121 Input * H_input = NULL, *surface_input = NULL, *vx_input = NULL, *vy_input = NULL;121 Input2* H_input = NULL, *surface_input = NULL, *vx_input = NULL, *vy_input = NULL; 122 122 IssmDouble taud_x,norms,normv,vx,vy; 123 123 IssmDouble rho_ice,gravity,slope[2],thickness; … … 139 139 rho_ice = element->FindParam(MaterialsRhoIceEnum); 140 140 gravity = element->FindParam(ConstantsGEnum); 141 H_input = element->GetInput (ThicknessEnum); _assert_(H_input);142 surface_input = element->GetInput (SurfaceEnum); _assert_(surface_input);143 vx_input = element->GetInput (VxEnum);144 vy_input = element->GetInput (VyEnum);141 H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 142 surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 143 vx_input = element->GetInput2(VxEnum); 144 vy_input = element->GetInput2(VyEnum); 145 145 } 146 146 break; 147 147 case SurfaceSlopeXEnum: 148 148 case SurfaceSlopeYEnum:{ 149 surface_input = element->GetInput (SurfaceEnum); _assert_(surface_input);150 } 151 break; 152 default: input = element->GetInput (input_enum);149 surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 150 } 151 break; 152 default: input = element->GetInput2(input_enum); 153 153 } 154 154 -
issm/trunk-jpl/src/c/analyses/SmoothAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r24221 r24335 659 659 return numdofs; 660 660 }/*}}}*/ 661 void StressbalanceAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/661 void StressbalanceAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 662 662 663 663 /*Intermediaries*/ … … 730 730 if(iomodel->my_elements[i]){ 731 731 Element* element=(Element*)elements->GetObjectByOffset(counter); 732 element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]); 732 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement_list[i]); 733 734 /*Need to know the type of approximation for this element*/ 735 if(iomodel->Data("md.flowequation.element_equation")){ 736 inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i]))); 737 } 738 733 739 counter++; 734 740 } … … 736 742 737 743 /*Create inputs: */ 738 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);739 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);740 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);741 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);742 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);743 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);744 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum,0.);745 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum,0.);746 iomodel->FetchDataToInput( elements,"md.stressbalance.loadingforcex",LoadingforceXEnum);747 iomodel->FetchDataToInput( elements,"md.stressbalance.loadingforcey",LoadingforceYEnum);744 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 745 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 746 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 747 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 748 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 749 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 750 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.); 751 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.); 752 iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcex",LoadingforceXEnum); 753 iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcey",LoadingforceYEnum); 748 754 #ifdef LATERALFRICTION 749 iomodel->FetchDataToInput( elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum);755 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonboundary",MeshVertexonboundaryEnum); 750 756 #endif 751 757 752 758 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 753 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);754 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);759 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 760 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 755 761 } 756 762 if(iomodel->domaintype==Domain3DEnum){ 757 iomodel->FetchDataToInput( elements,"md.flowequation.borderFS",FlowequationBorderFSEnum);758 iomodel->FetchDataToInput( elements,"md.stressbalance.loadingforcez",LoadingforceZEnum);759 iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum,0.);763 iomodel->FetchDataToInput(inputs2,elements,"md.flowequation.borderFS",FlowequationBorderFSEnum); 764 iomodel->FetchDataToInput(inputs2,elements,"md.stressbalance.loadingforcez",LoadingforceZEnum); 765 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum,0.); 760 766 } 761 767 if(isFS){ 762 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum,0.);768 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum,0.); 763 769 764 770 /*Add basal forcings to compute melt rate*/ … … 767 773 switch(basalforcing_model){ 768 774 case FloatingMeltRateEnum: 769 iomodel->FetchDataToInput( elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);775 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 770 776 break; 771 777 case LinearFloatingMeltRateEnum: … … 776 782 break; 777 783 case SpatialLinearFloatingMeltRateEnum: 778 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);779 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);780 iomodel->FetchDataToInput( elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);784 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 785 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 786 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 781 787 break; 782 788 case BasalforcingsPicoEnum: 783 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);789 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum); 784 790 break; 785 791 case BasalforcingsIsmip6Enum: 786 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);792 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum); 787 793 break; 788 794 case BeckmannGoosseFloatingMeltRateEnum: 789 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);790 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);795 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 796 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 791 797 break; 792 798 default: … … 797 803 iomodel->FindConstant(&fe_FS,"md.flowequation.fe_FS"); 798 804 if(fe_FS==LATaylorHoodEnum || fe_FS==LACrouzeixRaviartEnum){ 799 InputUpdateFromConstantx( elements,0.,SigmaNNEnum);805 InputUpdateFromConstantx(inputs2,elements,0.,SigmaNNEnum); 800 806 } 801 807 … … 804 810 case 1: 805 811 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 806 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);807 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);808 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);812 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 813 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 814 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 809 815 if(FrictionCoupling==3){ 810 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}816 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 811 817 else if(FrictionCoupling==4){ 812 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);818 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 813 819 } 814 820 break; 815 821 case 2: 816 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);817 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);822 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 823 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 818 824 break; 819 825 case 3: 820 826 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 821 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);822 iomodel->FetchDataToInput( elements,"md.friction.As",FrictionAsEnum);823 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);827 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 828 iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum); 829 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 824 830 if(FrictionCoupling==3){ 825 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}831 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 826 832 else if(FrictionCoupling==4){ 827 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);833 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 828 834 } 829 835 break; 830 836 case 4: 831 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);832 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);833 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);834 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);835 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);837 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 838 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 839 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 840 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 841 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 836 842 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 837 843 break; 838 844 case 5: 839 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);840 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);841 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);842 iomodel->FetchDataToInput( elements,"md.friction.water_layer",FrictionWaterLayerEnum);845 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 846 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 847 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 848 iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum); 843 849 break; 844 850 case 6: 845 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);846 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);847 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);848 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);851 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 852 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 853 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 854 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 849 855 break; 850 856 case 7: 851 857 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 852 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);853 iomodel->FetchDataToInput( elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);854 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);855 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);858 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 859 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum); 860 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 861 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 856 862 if(FrictionCoupling==3){ 857 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}863 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 858 864 else if(FrictionCoupling==4){ 859 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);865 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 860 866 861 867 } 862 868 break; 863 869 case 9: 864 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);865 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);866 iomodel->FetchDataToInput( elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);867 InputUpdateFromConstantx( elements,1.,FrictionPEnum);868 InputUpdateFromConstantx( elements,1.,FrictionQEnum);870 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 871 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 872 iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum); 873 InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum); 874 InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum); 869 875 break; 870 876 case 10: 871 iomodel->FetchDataToInput( elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum);872 iomodel->FetchDataToInput( elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum);873 iomodel->FetchDataToInput( elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum);874 iomodel->FetchDataToInput( elements,"md.initialization.watercolumn",WatercolumnEnum,0.);877 iomodel->FetchDataToInput(inputs2,elements,"md.friction.till_friction_angle",FrictionTillFrictionAngleEnum); 878 iomodel->FetchDataToInput(inputs2,elements,"md.friction.sediment_compressibility_coefficient",FrictionSedimentCompressibilityCoefficientEnum); 879 iomodel->FetchDataToInput(inputs2,elements,"md.hydrology.watercolumn_max",HydrologyWatercolumnMaxEnum); 880 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.watercolumn",WatercolumnEnum,0.); 875 881 break; 876 882 case 11: 877 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);878 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);879 iomodel->FetchDataToInput( elements,"md.friction.Cmax",FrictionCmaxEnum);883 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 884 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 885 iomodel->FetchDataToInput(inputs2,elements,"md.friction.Cmax",FrictionCmaxEnum); 880 886 break; 881 887 case 12: 882 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);883 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);884 iomodel->FetchDataToInput( elements,"md.friction.f",FrictionfEnum);888 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 889 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 890 iomodel->FetchDataToInput(inputs2,elements,"md.friction.f",FrictionfEnum); 885 891 break; 886 892 default: … … 889 895 890 896 #ifdef _HAVE_ANDROID_ 891 elements->InputDuplicate(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum);897 inputs2->DuplicateInput(FrictionCoefficientEnum,AndroidFrictionCoefficientEnum); 892 898 #endif 893 899 … … 1059 1065 1060 1066 int approximation; 1061 element->GetInput Value(&approximation,ApproximationEnum);1067 element->GetInput2Value(&approximation,ApproximationEnum); 1062 1068 switch(approximation){ 1063 1069 case FSApproximationEnum: … … 1072 1078 1073 1079 int approximation; 1074 element->GetInput Value(&approximation,ApproximationEnum);1080 element->GetInput2Value(&approximation,ApproximationEnum); 1075 1081 switch(approximation){ 1076 1082 case SSAApproximationEnum: … … 1088 1094 ElementMatrix* StressbalanceAnalysis::CreateKMatrix(Element* element){/*{{{*/ 1089 1095 int approximation; 1090 element->GetInput Value(&approximation,ApproximationEnum);1096 element->GetInput2Value(&approximation,ApproximationEnum); 1091 1097 switch(approximation){ 1092 1098 case SIAApproximationEnum: … … 1115 1121 1116 1122 int approximation; 1117 element->GetInput Value(&approximation,ApproximationEnum);1123 element->GetInput2Value(&approximation,ApproximationEnum); 1118 1124 switch(approximation){ 1119 1125 case SIAApproximationEnum: … … 1142 1148 1143 1149 int approximation; 1144 element->GetInput Value(&approximation,ApproximationEnum);1150 element->GetInput2Value(&approximation,ApproximationEnum); 1145 1151 switch(approximation){ 1146 1152 case FSApproximationEnum: case NoneApproximationEnum: … … 1178 1184 int numnodes = element->GetNumberOfNodes(); 1179 1185 int numdof = numnodes*dofpernode; 1180 element->GetInput Value(&approximation,ApproximationEnum);1186 element->GetInput2Value(&approximation,ApproximationEnum); 1181 1187 1182 1188 /*Fetch dof list and allocate solution vector*/ … … 1185 1191 1186 1192 /*Get inputs*/ 1187 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);1188 Input * vy_input=NULL;1189 if(domaintype!=Domain2DverticalEnum){vy_input=element->GetInput (VyEnum); _assert_(vy_input);}1193 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 1194 Input2* vy_input=NULL; 1195 if(domaintype!=Domain2DverticalEnum){vy_input=element->GetInput2(VyEnum); _assert_(vy_input);} 1190 1196 1191 1197 /*Ok, we have vx and vy in values, fill in vx and vy arrays: */ … … 1216 1222 1217 1223 int approximation; 1218 element->GetInput Value(&approximation,ApproximationEnum);1224 element->GetInput2Value(&approximation,ApproximationEnum); 1219 1225 switch(approximation){ 1220 1226 case FSApproximationEnum: case NoneApproximationEnum: … … 1287 1293 /*Retrieve all inputs and parameters*/ 1288 1294 element->GetVerticesCoordinates(&xyz_list); 1289 Input * thickness_input = basalelement->GetInput(ThicknessEnum);_assert_(thickness_input);1290 Input * vx_input = basalelement->GetInput(VxEnum); _assert_(vx_input);1291 Input * vy_input = basalelement->GetInput(VyEnum); _assert_(vy_input);1295 Input2* thickness_input = basalelement->GetInput2(ThicknessEnum);_assert_(thickness_input); 1296 Input2* vx_input = basalelement->GetInput2(VxEnum); _assert_(vx_input); 1297 Input2* vy_input = basalelement->GetInput2(VyEnum); _assert_(vy_input); 1292 1298 1293 1299 /* Start looping on the number of gaussian points: */ … … 1406 1412 element->GetVerticesCoordinates(&xyz_list); 1407 1413 element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum); 1408 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);1409 Input * gllevelset_input = NULL;1414 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 1415 Input2* gllevelset_input = NULL; 1410 1416 1411 1417 /*build friction object, used later on: */ … … 1415 1421 if(!(friction_style==SubelementFriction2Enum)) phi=element->GetGroundedPortion(xyz_list); 1416 1422 if(friction_style==SubelementFriction2Enum){ 1417 gllevelset_input=element->GetInput (MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);1423 gllevelset_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 1418 1424 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 1419 1425 gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2); … … 1501 1507 element->GetVerticesCoordinates(&xyz_list); 1502 1508 element->GetLevelCoordinates(&xyz_list_boundary,xyz_list,MeshVertexonboundaryEnum,1.); 1503 Input * icelevelset_input = element->GetInput(MaskIceLevelsetEnum); _assert_(icelevelset_input);1509 Input2* icelevelset_input = element->GetInput2(MaskIceLevelsetEnum); _assert_(icelevelset_input); 1504 1510 1505 1511 /* Start looping on the number of gaussian points: */ … … 1563 1569 /*Retrieve all inputs and parameters*/ 1564 1570 element->GetVerticesCoordinates(&xyz_list); 1565 Input * thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);1566 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);1567 Input * vy_input = NULL;1571 Input2* thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input); 1572 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 1573 Input2* vy_input = NULL; 1568 1574 if(dim==2){ 1569 vy_input = element->GetInput (VyEnum); _assert_(vy_input);1575 vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 1570 1576 } 1571 1577 … … 1680 1686 /*Retrieve all inputs and parameters*/ 1681 1687 element->GetVerticesCoordinates(&xyz_list); 1682 Input * thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);1683 Input * surface_input =element->GetInput(SurfaceEnum); _assert_(surface_input);1688 Input2* thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input); 1689 Input2* surface_input =element->GetInput2(SurfaceEnum); _assert_(surface_input); 1684 1690 IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum); 1685 1691 … … 1744 1750 1745 1751 /*Retrieve all inputs and parameters*/ 1746 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);1747 Input * base_input = element->GetInput(BaseEnum); _assert_(base_input);1748 Input * sealevel_input = element->GetInput(SealevelEnum); _assert_(sealevel_input);1752 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 1753 Input2* base_input = element->GetInput2(BaseEnum); _assert_(base_input); 1754 Input2* sealevel_input = element->GetInput2(SealevelEnum); _assert_(sealevel_input); 1749 1755 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 1750 1756 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 1941 1947 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 1942 1948 } 1943 element->AddInput (PressureEnum,pressure,P1Enum);1949 element->AddInput2(PressureEnum,pressure,P1Enum); 1944 1950 xDelete<IssmDouble>(pressure); 1945 1951 xDelete<IssmDouble>(thickness); … … 1964 1970 /*Fetch dof list and allocate solution vectors*/ 1965 1971 basalelement->GetDofListLocal(&doflist,SSAApproximationEnum,GsetEnum); 1966 IssmDouble* values 1967 IssmDouble* vx 1968 IssmDouble* vy 1969 IssmDouble* vz 1970 IssmDouble* vel 1972 IssmDouble* values = xNew<IssmDouble>(numdof); 1973 IssmDouble* vx = xNew<IssmDouble>(numnodes); 1974 IssmDouble* vy = xNew<IssmDouble>(numnodes); 1975 IssmDouble* vz = xNew<IssmDouble>(numnodes); 1976 IssmDouble* vel = xNew<IssmDouble>(numnodes); 1971 1977 1972 1978 /*Use the dof list to index into the solution vector: */ … … 2000 2006 2001 2007 /*Add vx and vy as inputs to the tria element: */ 2002 element->AddBasalInput (VxEnum,vx,element->GetElementType());2003 if(dim==2)element->AddBasalInput (VyEnum,vy,element->GetElementType());2004 element->AddBasalInput (VelEnum,vel,element->GetElementType());2008 element->AddBasalInput2(VxEnum,vx,element->GetElementType()); 2009 if(dim==2)element->AddBasalInput2(VyEnum,vy,element->GetElementType()); 2010 element->AddBasalInput2(VelEnum,vel,element->GetElementType()); 2005 2011 2006 2012 /*Free ressources:*/ … … 2062 2068 /*Retrieve all inputs and parameters*/ 2063 2069 element->GetVerticesCoordinates(&xyz_list); 2064 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);2065 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);2066 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);2070 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 2071 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 2072 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 2067 2073 2068 2074 /* Start looping on the number of gaussian points: */ … … 2149 2155 /*Retrieve all inputs and parameters*/ 2150 2156 element->GetVerticesCoordinates(&xyz_list); 2151 Input * thickness_input=element->GetInput(ThicknessEnum); _assert_(thickness_input);2152 Input * surface_input =element->GetInput(SurfaceEnum); _assert_(surface_input);2157 Input2* thickness_input=element->GetInput2(ThicknessEnum); _assert_(thickness_input); 2158 Input2* surface_input =element->GetInput2(SurfaceEnum); _assert_(surface_input); 2153 2159 IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum); 2154 2160 … … 2200 2206 2201 2207 /*Retrieve all inputs and parameters*/ 2202 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);2203 Input * base_input = element->GetInput(BaseEnum); _assert_(base_input);2204 Input * sealevel_input = element->GetInput(SealevelEnum); _assert_(sealevel_input);2208 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 2209 Input2* base_input = element->GetInput2(BaseEnum); _assert_(base_input); 2210 Input2* sealevel_input = element->GetInput2(SealevelEnum); _assert_(sealevel_input); 2205 2211 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 2206 2212 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 2270 2276 for(i=0;i<numvertices;i++) pressure[i]=rho_ice*g*(surface[i]-xyz_list[i*3+2]); 2271 2277 } 2272 element->AddInput (PressureEnum,pressure,P1Enum);2278 element->AddInput2(PressureEnum,pressure,P1Enum); 2273 2279 xDelete<IssmDouble>(pressure); 2274 2280 xDelete<IssmDouble>(thickness); … … 2323 2329 2324 2330 /*Add vx and vy as inputs to the tria element: */ 2325 element->AddBasalInput (VxEnum,vx,element->GetElementType());2326 element->AddBasalInput (VyEnum,vy,element->GetElementType());2327 element->AddBasalInput (VelEnum,vel,element->GetElementType());2331 element->AddBasalInput2(VxEnum,vx,element->GetElementType()); 2332 element->AddBasalInput2(VyEnum,vy,element->GetElementType()); 2333 element->AddBasalInput2(VelEnum,vel,element->GetElementType()); 2328 2334 2329 2335 /*Free ressources:*/ … … 2359 2365 /*Retrieve all inputs and parameters*/ 2360 2366 element->GetVerticesCoordinates(&xyz_list); 2361 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);2362 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);2367 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 2368 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 2363 2369 2364 2370 /* Start looping on the number of gaussian points: */ … … 2445 2451 element->GetVerticesCoordinatesBase(&xyz_list_base); 2446 2452 element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum); 2447 Input * gllevelset_input = NULL;2453 Input2* gllevelset_input = NULL; 2448 2454 2449 2455 /*build friction object, used later on: */ … … 2453 2459 if(!(friction_style==SubelementFriction2Enum)) phi=element->GetGroundedPortion(xyz_list_base); 2454 2460 if(friction_style==SubelementFriction2Enum){ 2455 gllevelset_input=element->GetInput (MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);2461 gllevelset_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 2456 2462 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 2457 2463 gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2); … … 2513 2519 /*Intermediaries*/ 2514 2520 int dim,bsize; 2515 IssmDouble viscosity, thickness,Jdet;2521 IssmDouble viscosity,Jdet; 2516 2522 IssmDouble *xyz_list = NULL; 2517 2523 … … 2529 2535 /*Retrieve all inputs and parameters*/ 2530 2536 element->GetVerticesCoordinates(&xyz_list); 2531 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);2532 Input * vy_input = NULL;2537 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 2538 Input2* vy_input = NULL; 2533 2539 if(dim==3){ 2534 vy_input=element->GetInput (VyEnum); _assert_(vy_input);2540 vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 2535 2541 } 2536 2542 … … 2677 2683 /*Retrieve all inputs and parameters*/ 2678 2684 element->GetVerticesCoordinates(&xyz_list); 2679 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);2685 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 2680 2686 IssmDouble rhog = element->FindParam(MaterialsRhoIceEnum)*element->FindParam(ConstantsGEnum); 2681 2687 … … 2733 2739 2734 2740 /*Retrieve all inputs and parameters*/ 2735 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);2736 Input * sealevel_input = element->GetInput(SealevelEnum); _assert_(sealevel_input);2741 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 2742 Input2* sealevel_input = element->GetInput2(SealevelEnum); _assert_(sealevel_input); 2737 2743 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 2738 2744 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 2938 2944 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 2939 2945 } 2940 element->AddInput (PressureEnum,pressure,P1Enum);2946 element->AddInput2(PressureEnum,pressure,P1Enum); 2941 2947 xDelete<IssmDouble>(pressure); 2942 2948 xDelete<IssmDouble>(surface); … … 2983 2989 2984 2990 /*Add vx and vy as inputs to the element: */ 2985 element->AddInput (VxEnum,vx,element->GetElementType());2986 if(dim==3)element->AddInput (VyEnum,vy,element->GetElementType());2987 element->AddInput (VelEnum,vel,element->GetElementType());2991 element->AddInput2(VxEnum,vx,element->GetElementType()); 2992 if(dim==3)element->AddInput2(VyEnum,vy,element->GetElementType()); 2993 element->AddInput2(VelEnum,vel,element->GetElementType()); 2988 2994 2989 2995 /*Free ressources:*/ … … 3051 3057 /*Retrieve all inputs and parameters*/ 3052 3058 element->GetVerticesCoordinates(&xyz_list); 3053 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);3054 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);3055 Input * vz_input = element->GetInput(VzEnum); _assert_(vz_input);3059 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 3060 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 3061 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 3056 3062 3057 3063 /* Start looping on the number of gaussian points: */ … … 3141 3147 /*If on not water or not FS, skip stiffness: */ 3142 3148 int approximation,shelf_dampening; 3143 element->GetInput Value(&approximation,ApproximationEnum);3149 element->GetInput2Value(&approximation,ApproximationEnum); 3144 3150 if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 3145 3151 element->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum); … … 3174 3180 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 3175 3181 IssmDouble gravity = element->FindParam(ConstantsGEnum); 3176 Input * base_input = element->GetInput(BaseEnum); _assert_(base_input);3182 Input2* base_input = element->GetInput2(BaseEnum); _assert_(base_input); 3177 3183 3178 3184 /* Start looping on the number of gaussian points: */ … … 3232 3238 element->GetVerticesCoordinates(&xyz_list); 3233 3239 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 3234 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);3235 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);3236 Input * vz_input = NULL;3237 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}3240 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 3241 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 3242 Input2* vz_input = NULL; 3243 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 3238 3244 3239 3245 /* Start looping on the number of gaussian points: */ … … 3382 3388 element->GetVerticesCoordinates(&xyz_list); 3383 3389 //element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 3384 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);3385 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);3386 Input * vz_input = NULL;3387 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}3390 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 3391 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 3392 Input2* vz_input = NULL; 3393 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 3388 3394 3389 3395 … … 3456 3462 /*Retrieve all inputs and parameters*/ 3457 3463 element->GetVerticesCoordinates(&xyz_list); 3458 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);3459 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);3460 Input * vz_input = NULL;3461 if(dim==3){vz_input = element->GetInput (VzEnum); _assert_(vz_input);}3464 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 3465 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 3466 Input2* vz_input = NULL; 3467 if(dim==3){vz_input = element->GetInput2(VzEnum); _assert_(vz_input);} 3462 3468 3463 3469 /* Start looping on the number of gaussian points: */ … … 3581 3587 element->GetVerticesCoordinates(&xyz_list); 3582 3588 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 3583 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);3584 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);3585 Input * vz_input;3586 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}3589 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 3590 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 3591 Input2* vz_input; 3592 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 3587 3593 3588 3594 /* Start looping on the number of gaussian points: */ … … 3623 3629 /*If on water or not FS, skip stiffness: */ 3624 3630 int approximation; 3625 element->GetInput Value(&approximation,ApproximationEnum);3631 element->GetInput2Value(&approximation,ApproximationEnum); 3626 3632 if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 3627 3633 … … 3650 3656 element->GetVerticesCoordinatesBase(&xyz_list_base); 3651 3657 element->GetVerticesCoordinates(&xyz_list); 3652 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);3653 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);3654 Input * vz_input = NULL;3655 if(dim==3){ vz_input = element->GetInput (VzEnum); _assert_(vz_input);}3658 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 3659 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 3660 Input2* vz_input = NULL; 3661 if(dim==3){ vz_input = element->GetInput2(VzEnum); _assert_(vz_input);} 3656 3662 3657 3663 /* Start looping on the number of gaussian points: */ … … 3728 3734 /*Retrieve all inputs and parameters*/ 3729 3735 element->GetVerticesCoordinatesBase(&xyz_list_base); 3730 Input * alpha2_input=element->GetInput(FrictionCoefficientEnum); _assert_(alpha2_input);3736 Input2* alpha2_input=element->GetInput2(FrictionCoefficientEnum); _assert_(alpha2_input); 3731 3737 3732 3738 /* Start looping on the number of gaussian points: */ … … 3782 3788 /*Retrieve all inputs and parameters*/ 3783 3789 element->GetVerticesCoordinatesBase(&xyz_list_base); 3784 Input * sigmann_input=element->GetInput(VzEnum); _assert_(sigmann_input);3785 Input * sigmant_input=element->GetInput(TemperatureEnum); _assert_(sigmant_input);3786 Input * bedslope_input=element->GetInput(BedSlopeXEnum); _assert_(bedslope_input);3790 Input2* sigmann_input=element->GetInput2(VzEnum); _assert_(sigmann_input); 3791 Input2* sigmant_input=element->GetInput2(TemperatureEnum); _assert_(sigmant_input); 3792 Input2* bedslope_input=element->GetInput2(BedSlopeXEnum); _assert_(bedslope_input); 3787 3793 3788 3794 /* Start looping on the number of gaussian points: */ … … 3899 3905 /*If on water or not FS, skip stiffness: */ 3900 3906 int approximation; 3901 element->GetInput Value(&approximation,ApproximationEnum);3907 element->GetInput2Value(&approximation,ApproximationEnum); 3902 3908 if(approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum) return NULL; 3903 3909 … … 3927 3933 element->GetVerticesCoordinatesBase(&xyz_list_base); 3928 3934 element->FindParam(&friction_style,GroundinglineFrictionInterpolationEnum); 3929 Input * gllevelset_input = NULL;3935 Input2* gllevelset_input = NULL; 3930 3936 3931 3937 /*build friction object, used later on: */ … … 3936 3942 if(friction_style==SubelementFriction2Enum){ 3937 3943 if(domaintype==Domain2DverticalEnum) _error_("Subelement Friction 2 not implemented yet for Flowline"); 3938 gllevelset_input=element->GetInput (MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);3944 gllevelset_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 3939 3945 element->GetGroundedPart(&point1,&fraction1,&fraction2,&mainlyfloating); 3940 3946 //gauss = element->NewGauss(point1,fraction1,fraction2,mainlyfloating,2); … … 4068 4074 IssmDouble rho_ice =element->FindParam(MaterialsRhoIceEnum); 4069 4075 IssmDouble gravity =element->FindParam(ConstantsGEnum); 4070 Input * loadingforcex_input=element->GetInput(LoadingforceXEnum); _assert_(loadingforcex_input);4071 Input * loadingforcey_input=element->GetInput(LoadingforceYEnum); _assert_(loadingforcey_input);4072 Input * loadingforcez_input=NULL;4076 Input2* loadingforcex_input=element->GetInput2(LoadingforceXEnum); _assert_(loadingforcex_input); 4077 Input2* loadingforcey_input=element->GetInput2(LoadingforceYEnum); _assert_(loadingforcey_input); 4078 Input2* loadingforcez_input=NULL; 4073 4079 if(dim==3){ 4074 loadingforcez_input=element->GetInput (LoadingforceZEnum); _assert_(loadingforcez_input);4080 loadingforcez_input=element->GetInput2(LoadingforceZEnum); _assert_(loadingforcez_input); 4075 4081 } 4076 4082 … … 4146 4152 element->GetIcefrontCoordinates(&xyz_list_front,xyz_list,MaskIceLevelsetEnum); 4147 4153 element->NormalSection(&normal[0],xyz_list_front); 4148 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);4149 Input * sealevel_input = element->GetInput(SealevelEnum); _assert_(sealevel_input);4154 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 4155 Input2* sealevel_input = element->GetInput2(SealevelEnum); _assert_(sealevel_input); 4150 4156 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 4151 4157 IssmDouble gravity = element->FindParam(ConstantsGEnum); … … 4215 4221 /*Retrieve all inputs and parameters*/ 4216 4222 element->GetVerticesCoordinatesBase(&xyz_list_base); 4217 Input * base_input=element->GetInput(BaseEnum); _assert_(base_input);4223 Input2* base_input=element->GetInput2(BaseEnum); _assert_(base_input); 4218 4224 IssmDouble rho_water=element->FindParam(MaterialsRhoSeawaterEnum); 4219 4225 IssmDouble gravity =element->FindParam(ConstantsGEnum); … … 4239 4245 element->FindParam(&shelf_dampening,StressbalanceShelfDampeningEnum); 4240 4246 if(shelf_dampening) { 4241 Input * mb_input=element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(mb_input);4247 Input2* mb_input=element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(mb_input); 4242 4248 IssmDouble dt,mb; 4243 4249 element->FindParam(&dt,TimesteppingTimeStepEnum); … … 4290 4296 4291 4297 /*Get pressure and sigmann*/ 4292 Input * pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);4293 Input * sigmann_input =element->GetInput(SigmaNNEnum); _assert_(sigmann_input);4298 Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input); 4299 Input2* sigmann_input =element->GetInput2(SigmaNNEnum); _assert_(sigmann_input); 4294 4300 4295 4301 gauss=element->NewGauss(5); … … 4383 4389 4384 4390 /*Get d and tau*/ 4385 Input * epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);4386 Input * epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);4387 Input * epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);4388 Input * epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;4389 Input * sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);4390 Input * sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);4391 Input * sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);4392 Input * sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;4391 Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input); 4392 Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input); 4393 Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input); 4394 Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL; 4395 Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input); 4396 Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input); 4397 Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input); 4398 Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL; 4393 4399 if(dim==3){ 4394 epszz_input=element->GetInput (StrainRatezzEnum); _assert_(epszz_input);4395 epsxz_input=element->GetInput (StrainRatexzEnum); _assert_(epsxz_input);4396 epsyz_input=element->GetInput (StrainRateyzEnum); _assert_(epsyz_input);4397 sigmapzz_input=element->GetInput (DeviatoricStresszzEnum); _assert_(sigmapzz_input);4398 sigmapxz_input=element->GetInput (DeviatoricStressxzEnum); _assert_(sigmapxz_input);4399 sigmapyz_input=element->GetInput (DeviatoricStressyzEnum); _assert_(sigmapyz_input);4400 epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input); 4401 epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input); 4402 epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input); 4403 sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input); 4404 sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input); 4405 sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input); 4400 4406 } 4401 4407 … … 5059 5065 int* vdoflist=NULL; 5060 5066 int* pdoflist=NULL; 5061 Input * vz_input=NULL;5067 Input2* vz_input=NULL; 5062 5068 int dim; 5063 5069 IssmDouble vx,vy,vz,p; … … 5081 5087 element->GetDofListVelocity(&vdoflist,GsetEnum); 5082 5088 element->GetDofListPressure(&pdoflist,GsetEnum); 5083 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);5084 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);5085 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}5086 Input * p_input =element->GetInput(PressureEnum); _assert_(p_input);5089 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 5090 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 5091 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 5092 Input2* p_input =element->GetInput2(PressureEnum); _assert_(p_input); 5087 5093 5088 5094 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); … … 5142 5148 /*Get inputs and parameters*/ 5143 5149 element->GetVerticesCoordinates(&xyz_list); 5144 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);5145 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);5146 Input * vz_input;5147 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}5150 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 5151 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 5152 Input2* vz_input; 5153 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 5148 5154 5149 5155 /*Allocate new inputs*/ … … 5184 5190 5185 5191 /*Add inputs*/ 5186 element->AddInput (StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput(DeviatoricStressxxEnum,sigmapxx,P1DGEnum);5187 element->AddInput (StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput(DeviatoricStressyyEnum,sigmapyy,P1DGEnum);5188 element->AddInput (StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput(DeviatoricStressxyEnum,sigmapxy,P1DGEnum);5192 element->AddInput2(StrainRatexxEnum,epsxx,P1DGEnum); element->AddInput2(DeviatoricStressxxEnum,sigmapxx,P1DGEnum); 5193 element->AddInput2(StrainRateyyEnum,epsyy,P1DGEnum); element->AddInput2(DeviatoricStressyyEnum,sigmapyy,P1DGEnum); 5194 element->AddInput2(StrainRatexyEnum,epsxy,P1DGEnum); element->AddInput2(DeviatoricStressxyEnum,sigmapxy,P1DGEnum); 5189 5195 if(dim==3){ 5190 element->AddInput (StrainRatezzEnum,epszz,P1DGEnum); element->AddInput(DeviatoricStresszzEnum,sigmapzz,P1DGEnum);5191 element->AddInput (StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput(DeviatoricStressxzEnum,sigmapxz,P1DGEnum);5192 element->AddInput (StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput(DeviatoricStressyzEnum,sigmapyz,P1DGEnum);5196 element->AddInput2(StrainRatezzEnum,epszz,P1DGEnum); element->AddInput2(DeviatoricStresszzEnum,sigmapzz,P1DGEnum); 5197 element->AddInput2(StrainRatexzEnum,epsxz,P1DGEnum); element->AddInput2(DeviatoricStressxzEnum,sigmapxz,P1DGEnum); 5198 element->AddInput2(StrainRateyzEnum,epsyz,P1DGEnum); element->AddInput2(DeviatoricStressyzEnum,sigmapyz,P1DGEnum); 5193 5199 } 5194 5200 … … 5273 5279 5274 5280 /*Add vx and vy as inputs to the tria element: */ 5275 int fe_v =element->VelocityInterpolation();5276 //if(fe_v == P1bubblecondensedEnum) fe_v =P1Enum;5277 //if(fe_v == P1bubbleEnum) fe_v= P1Enum;5278 element->AddInput (VxEnum, vx, fe_v);5279 element->AddInput (VyEnum, vy, fe_v);5280 element->AddInput (VelEnum,vel,fe_v);5281 if(pnumdof>0) element->AddInput (PressureEnum,pressure,element->PressureInterpolation());5282 if(dim==3) element->AddInput (VzEnum,vz, fe_v);5281 int v_interp = element->VelocityInterpolation(); 5282 if(v_interp==P1bubbleEnum) v_interp=P1Enum; 5283 if(v_interp == P1bubblecondensedEnum) v_interp = P1Enum; 5284 element->AddInput2(VxEnum, vx, v_interp); 5285 element->AddInput2(VyEnum, vy, v_interp); 5286 element->AddInput2(VelEnum,vel,v_interp); 5287 if(pnumdof>0) element->AddInput2(PressureEnum,pressure,element->PressureInterpolation()); 5288 if(dim==3) element->AddInput2(VzEnum,vz,v_interp); 5283 5289 5284 5290 /*Free ressources:*/ … … 5314 5320 /*Get inputs and parameters*/ 5315 5321 element->GetVerticesCoordinates(&xyz_list); 5316 Input * B_input=element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);5317 Input * n_input=element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);5318 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);5319 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);5320 Input * vz_input;5321 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}5322 Input2* B_input=element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 5323 Input2* n_input=element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 5324 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 5325 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 5326 Input2* vz_input; 5327 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 5322 5328 5323 5329 /*Fetch number of nodes and dof for this finite element*/ … … 5338 5344 5339 5345 /*Get previous d*/ 5340 Input * epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);5341 Input * epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);5342 Input * epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);5343 Input * epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;5346 Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input); 5347 Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input); 5348 Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input); 5349 Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL; 5344 5350 if(dim==3){ 5345 epszz_input=element->GetInput (StrainRatezzEnum); _assert_(epszz_input);5346 epsxz_input=element->GetInput (StrainRatexzEnum); _assert_(epsxz_input);5347 epsyz_input=element->GetInput (StrainRateyzEnum); _assert_(epsyz_input);5351 epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input); 5352 epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input); 5353 epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input); 5348 5354 } 5349 5355 5350 5356 /*Get tau*/ 5351 Input * sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);5352 Input * sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);5353 Input * sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);5354 Input * sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;5357 Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input); 5358 Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input); 5359 Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input); 5360 Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL; 5355 5361 if(dim==3){ 5356 sigmapzz_input=element->GetInput (DeviatoricStresszzEnum); _assert_(sigmapzz_input);5357 sigmapxz_input=element->GetInput (DeviatoricStressxzEnum); _assert_(sigmapxz_input);5358 sigmapyz_input=element->GetInput (DeviatoricStressyzEnum); _assert_(sigmapyz_input);5362 sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input); 5363 sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input); 5364 sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input); 5359 5365 } 5360 5366 … … 5470 5476 for(int i=0;i<3;i++) _assert_(!xIsNan<IssmDouble>(d_yy[i])); 5471 5477 for(int i=0;i<3;i++) _assert_(!xIsNan<IssmDouble>(d_xx[i])); 5472 element->AddInput (StrainRatexxEnum,d_xx,P1DGEnum);5473 element->AddInput (StrainRateyyEnum,d_yy,P1DGEnum);5474 element->AddInput (StrainRatexyEnum,d_xy,P1DGEnum);5478 element->AddInput2(StrainRatexxEnum,d_xx,P1DGEnum); 5479 element->AddInput2(StrainRateyyEnum,d_yy,P1DGEnum); 5480 element->AddInput2(StrainRatexyEnum,d_xy,P1DGEnum); 5475 5481 } 5476 5482 else{ … … 5485 5491 Matrix4x4Solve(&d_xz[0],Ke,pe_xz); 5486 5492 Matrix4x4Solve(&d_yz[0],Ke,pe_yz); 5487 element->AddInput (StrainRatexxEnum,d_xx,P1DGEnum);5488 element->AddInput (StrainRateyyEnum,d_yy,P1DGEnum);5489 element->AddInput (StrainRatexyEnum,d_xy,P1DGEnum);5490 element->AddInput (StrainRatezzEnum,d_zz,P1DGEnum);5491 element->AddInput (StrainRatexzEnum,d_xz,P1DGEnum);5492 element->AddInput (StrainRateyzEnum,d_yz,P1DGEnum);5493 element->AddInput2(StrainRatexxEnum,d_xx,P1DGEnum); 5494 element->AddInput2(StrainRateyyEnum,d_yy,P1DGEnum); 5495 element->AddInput2(StrainRatexyEnum,d_xy,P1DGEnum); 5496 element->AddInput2(StrainRatezzEnum,d_zz,P1DGEnum); 5497 element->AddInput2(StrainRatexzEnum,d_xz,P1DGEnum); 5498 element->AddInput2(StrainRateyzEnum,d_yz,P1DGEnum); 5493 5499 } 5494 5500 … … 5527 5533 /*Get inputs and parameters*/ 5528 5534 element->GetVerticesCoordinates(&xyz_list); 5529 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);5530 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);5531 Input * vz_input=NULL;5532 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}5535 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 5536 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 5537 Input2* vz_input=NULL; 5538 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 5533 5539 5534 5540 /*Get previous tau*/ 5535 Input * sigmapxx_input=element->GetInput(DeviatoricStressxxEnum); _assert_(sigmapxx_input);5536 Input * sigmapyy_input=element->GetInput(DeviatoricStressyyEnum); _assert_(sigmapyy_input);5537 Input * sigmapxy_input=element->GetInput(DeviatoricStressxyEnum); _assert_(sigmapxy_input);5538 Input * sigmapzz_input=NULL; Input* sigmapxz_input=NULL; Input* sigmapyz_input=NULL;5541 Input2* sigmapxx_input=element->GetInput2(DeviatoricStressxxEnum); _assert_(sigmapxx_input); 5542 Input2* sigmapyy_input=element->GetInput2(DeviatoricStressyyEnum); _assert_(sigmapyy_input); 5543 Input2* sigmapxy_input=element->GetInput2(DeviatoricStressxyEnum); _assert_(sigmapxy_input); 5544 Input2* sigmapzz_input=NULL; Input2* sigmapxz_input=NULL; Input2* sigmapyz_input=NULL; 5539 5545 if(dim==3){ 5540 sigmapzz_input=element->GetInput (DeviatoricStresszzEnum); _assert_(sigmapzz_input);5541 sigmapxz_input=element->GetInput (DeviatoricStressxzEnum); _assert_(sigmapxz_input);5542 sigmapyz_input=element->GetInput (DeviatoricStressyzEnum); _assert_(sigmapyz_input);5546 sigmapzz_input=element->GetInput2(DeviatoricStresszzEnum); _assert_(sigmapzz_input); 5547 sigmapxz_input=element->GetInput2(DeviatoricStressxzEnum); _assert_(sigmapxz_input); 5548 sigmapyz_input=element->GetInput2(DeviatoricStressyzEnum); _assert_(sigmapyz_input); 5543 5549 } 5544 5550 5545 5551 /*Get NEW d*/ 5546 Input * epsxx_input=element->GetInput(StrainRatexxEnum); _assert_(epsxx_input);5547 Input * epsyy_input=element->GetInput(StrainRateyyEnum); _assert_(epsyy_input);5548 Input * epsxy_input=element->GetInput(StrainRatexyEnum); _assert_(epsxy_input);5549 Input * epszz_input=NULL; Input* epsxz_input=NULL; Input* epsyz_input=NULL;5552 Input2* epsxx_input=element->GetInput2(StrainRatexxEnum); _assert_(epsxx_input); 5553 Input2* epsyy_input=element->GetInput2(StrainRateyyEnum); _assert_(epsyy_input); 5554 Input2* epsxy_input=element->GetInput2(StrainRatexyEnum); _assert_(epsxy_input); 5555 Input2* epszz_input=NULL; Input2* epsxz_input=NULL; Input2* epsyz_input=NULL; 5550 5556 if(dim==3){ 5551 epszz_input=element->GetInput (StrainRatezzEnum); _assert_(epszz_input);5552 epsxz_input=element->GetInput (StrainRatexzEnum); _assert_(epsxz_input);5553 epsyz_input=element->GetInput (StrainRateyzEnum); _assert_(epsyz_input);5557 epszz_input=element->GetInput2(StrainRatezzEnum); _assert_(epszz_input); 5558 epsxz_input=element->GetInput2(StrainRatexzEnum); _assert_(epsxz_input); 5559 epsyz_input=element->GetInput2(StrainRateyzEnum); _assert_(epsyz_input); 5554 5560 } 5555 5561 … … 5620 5626 5621 5627 /*Add inputs*/ 5622 element->AddInput (DeviatoricStressxxEnum,tau_xx,P1DGEnum);5623 element->AddInput (DeviatoricStressyyEnum,tau_yy,P1DGEnum);5624 element->AddInput (DeviatoricStressxyEnum,tau_xy,P1DGEnum);5628 element->AddInput2(DeviatoricStressxxEnum,tau_xx,P1DGEnum); 5629 element->AddInput2(DeviatoricStressyyEnum,tau_yy,P1DGEnum); 5630 element->AddInput2(DeviatoricStressxyEnum,tau_xy,P1DGEnum); 5625 5631 if(dim==3){ 5626 element->AddInput (DeviatoricStresszzEnum,tau_zz,P1DGEnum);5627 element->AddInput (DeviatoricStressxzEnum,tau_xz,P1DGEnum);5628 element->AddInput (DeviatoricStressyzEnum,tau_yz,P1DGEnum);5632 element->AddInput2(DeviatoricStresszzEnum,tau_zz,P1DGEnum); 5633 element->AddInput2(DeviatoricStressxzEnum,tau_xz,P1DGEnum); 5634 element->AddInput2(DeviatoricStressyzEnum,tau_yz,P1DGEnum); 5629 5635 } 5630 5636 … … 5752 5758 5753 5759 /*If on water or not FS, skip stiffness: */ 5754 element->GetInput Value(&approximation,ApproximationEnum);5760 element->GetInput2Value(&approximation,ApproximationEnum); 5755 5761 if(element->IsFloating() || !element->IsOnBase()) return NULL; 5756 5762 … … 5784 5790 element->GetVerticesCoordinatesBase(&xyz_list_tria); 5785 5791 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 5786 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);5787 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);5788 Input * vz_input=element->GetInput(VzEnum); _assert_(vz_input);5792 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 5793 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 5794 Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input); 5789 5795 5790 5796 /*build friction object, used later on: */ … … 5905 5911 element->GetVerticesCoordinates(&xyz_list); 5906 5912 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 5907 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);5908 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);5909 Input * vz_input=element->GetInput(VzEnum); _assert_(vz_input);5913 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 5914 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 5915 Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input); 5910 5916 5911 5917 /* Start looping on the number of gaussian points: */ … … 6092 6098 /* Get node coordinates and dof list: */ 6093 6099 element->GetVerticesCoordinates(&xyz_list); 6094 Input * vx_input =element->GetInput(VxEnum); _assert_(vx_input);6095 Input * vy_input =element->GetInput(VyEnum); _assert_(vy_input);6100 Input2* vx_input =element->GetInput2(VxEnum); _assert_(vx_input); 6101 Input2* vy_input =element->GetInput2(VyEnum); _assert_(vy_input); 6096 6102 6097 6103 /* Start looping on the number of gaussian points: */ … … 6245 6251 /*Initialize Element matrix*/ 6246 6252 ElementMatrix* Ke=basaltria->NewElementMatrix(SSAApproximationEnum); 6247 element->GetInput Value(&approximation,ApproximationEnum);6253 element->GetInput2Value(&approximation,ApproximationEnum); 6248 6254 6249 6255 /*Retrieve all inputs and parameters*/ 6250 6256 element->GetVerticesCoordinates(&xyz_list); 6251 Input * vx_input =element->GetInput(VxEnum); _assert_(vx_input);6252 Input * vy_input =element->GetInput(VyEnum); _assert_(vy_input);6253 Input * vz_input =element->GetInput(VzEnum); _assert_(vz_input);6257 Input2* vx_input =element->GetInput2(VxEnum); _assert_(vx_input); 6258 Input2* vy_input =element->GetInput2(VyEnum); _assert_(vy_input); 6259 Input2* vz_input =element->GetInput2(VzEnum); _assert_(vz_input); 6254 6260 6255 6261 /* Start looping on the number of gaussian points: */ … … 6326 6332 /*Initialize Element vector and return if necessary*/ 6327 6333 if(!element->IsOnBase() || element->IsFloating()) return NULL; 6328 element->GetInput Value(&approximation,ApproximationEnum);6334 element->GetInput2Value(&approximation,ApproximationEnum); 6329 6335 if(approximation!=HOFSApproximationEnum) return NULL; 6330 6336 … … 6351 6357 element->GetVerticesCoordinatesBase(&xyz_list_tria); 6352 6358 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 6353 Input * vx_input= element->GetInput(VxEnum); _assert_(vx_input);6354 Input * vy_input= element->GetInput(VyEnum); _assert_(vy_input);6355 Input * vz_input= element->GetInput(VzEnum); _assert_(vz_input);6356 Input * vzHO_input=element->GetInput(VzHOEnum); _assert_(vzHO_input);6359 Input2* vx_input= element->GetInput2(VxEnum); _assert_(vx_input); 6360 Input2* vy_input= element->GetInput2(VyEnum); _assert_(vy_input); 6361 Input2* vz_input= element->GetInput2(VzEnum); _assert_(vz_input); 6362 Input2* vzHO_input=element->GetInput2(VzHOEnum); _assert_(vzHO_input); 6357 6363 6358 6364 /*build friction object, used later on: */ … … 6409 6415 6410 6416 /*Initialize Element vector and return if necessary*/ 6411 element->GetInput Value(&approximation,ApproximationEnum);6417 element->GetInput2Value(&approximation,ApproximationEnum); 6412 6418 if(approximation!=HOFSApproximationEnum) return NULL; 6413 6419 int vnumnodes = element->NumberofNodesVelocity(); … … 6430 6436 element->GetVerticesCoordinates(&xyz_list); 6431 6437 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 6432 Input * vx_input =element->GetInput(VxEnum); _assert_(vx_input);6433 Input * vy_input =element->GetInput(VyEnum); _assert_(vy_input);6434 Input * vz_input =element->GetInput(VzEnum); _assert_(vz_input);6435 Input * vzHO_input=element->GetInput(VzHOEnum); _assert_(vzHO_input);6438 Input2* vx_input =element->GetInput2(VxEnum); _assert_(vx_input); 6439 Input2* vy_input =element->GetInput2(VyEnum); _assert_(vy_input); 6440 Input2* vz_input =element->GetInput2(VzEnum); _assert_(vz_input); 6441 Input2* vzHO_input=element->GetInput2(VzHOEnum); _assert_(vzHO_input); 6436 6442 6437 6443 /* Start looping on the number of gaussian points: */ … … 6496 6502 /*Initialize Element vector and return if necessary*/ 6497 6503 if(!element->IsOnBase() || element->IsFloating()) return NULL; 6498 element->GetInput Value(&approximation,ApproximationEnum);6504 element->GetInput2Value(&approximation,ApproximationEnum); 6499 6505 if(approximation!=SSAFSApproximationEnum) return NULL; 6500 6506 int vnumnodes = element->NumberofNodesVelocity(); … … 6518 6524 element->GetVerticesCoordinatesBase(&xyz_list_tria); 6519 6525 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 6520 Input * vx_input= element->GetInput(VxEnum); _assert_(vx_input);6521 Input * vy_input= element->GetInput(VyEnum); _assert_(vy_input);6522 Input * vz_input= element->GetInput(VzEnum); _assert_(vz_input);6523 Input * vzSSA_input=element->GetInput(VzSSAEnum); _assert_(vzSSA_input);6526 Input2* vx_input= element->GetInput2(VxEnum); _assert_(vx_input); 6527 Input2* vy_input= element->GetInput2(VyEnum); _assert_(vy_input); 6528 Input2* vz_input= element->GetInput2(VzEnum); _assert_(vz_input); 6529 Input2* vzSSA_input=element->GetInput2(VzSSAEnum); _assert_(vzSSA_input); 6524 6530 6525 6531 /*build friction object, used later on: */ … … 6575 6581 6576 6582 /*Initialize Element vector and return if necessary*/ 6577 element->GetInput Value(&approximation,ApproximationEnum);6583 element->GetInput2Value(&approximation,ApproximationEnum); 6578 6584 if(approximation!=SSAFSApproximationEnum) return NULL; 6579 6585 int vnumnodes = element->NumberofNodesVelocity(); … … 6596 6602 element->GetVerticesCoordinates(&xyz_list); 6597 6603 element->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 6598 Input * vx_input =element->GetInput(VxEnum); _assert_(vx_input);6599 Input * vy_input =element->GetInput(VyEnum); _assert_(vy_input);6600 Input * vz_input =element->GetInput(VzEnum); _assert_(vz_input);6601 Input * vzSSA_input=element->GetInput(VzSSAEnum); _assert_(vzSSA_input);6604 Input2* vx_input =element->GetInput2(VxEnum); _assert_(vx_input); 6605 Input2* vy_input =element->GetInput2(VyEnum); _assert_(vy_input); 6606 Input2* vz_input =element->GetInput2(VzEnum); _assert_(vz_input); 6607 Input2* vzSSA_input=element->GetInput2(VzSSAEnum); _assert_(vzSSA_input); 6602 6608 6603 6609 /* Start looping on the number of gaussian points: */ … … 7192 7198 7193 7199 /*Add vx and vy as inputs to element: */ 7194 element->AddInput (VxEnum,vx,P1Enum);7195 element->AddInput (VyEnum,vy,P1Enum);7196 element->AddInput (VzEnum,vz,P1Enum);7197 element->AddInput (VzFSEnum,vzFS,P1Enum);7198 element->AddInput (VelEnum,vel,P1Enum);7199 element->AddInput(PressureEnum,pressure,P1Enum);7200 element->AddInput2(VxEnum,vx,P1Enum); 7201 element->AddInput2(VyEnum,vy,P1Enum); 7202 element->AddInput2(VzEnum,vz,P1Enum); 7203 element->AddInput2(VzFSEnum,vzFS,P1Enum); 7204 element->AddInput2(VelEnum,vel,P1Enum); 7205 //element->AddInput2(PressureEnum,pressure,P1Enum); 7200 7206 7201 7207 /*Free ressources:*/ … … 7295 7301 7296 7302 /*Add vx and vy as inputs to element: */ 7297 element->AddInput (VxEnum,vx,P1Enum);7298 element->AddInput (VyEnum,vy,P1Enum);7299 element->AddInput (VzEnum,vz,P1Enum);7300 element->AddInput (VzFSEnum,vzFS,P1Enum);7301 element->AddInput (VelEnum,vel,P1Enum);7302 element->AddInput(PressureEnum,pressure,P1Enum);7303 element->AddInput2(VxEnum,vx,P1Enum); 7304 element->AddInput2(VyEnum,vy,P1Enum); 7305 element->AddInput2(VzEnum,vz,P1Enum); 7306 element->AddInput2(VzFSEnum,vzFS,P1Enum); 7307 element->AddInput2(VelEnum,vel,P1Enum); 7308 //element->AddInput2(PressureEnum,pressure,P1Enum); 7303 7309 7304 7310 /*Free ressources:*/ … … 7388 7394 7389 7395 /*Add vx and vy as inputs to element: */ 7390 element->AddInput (VxEnum,vx,P1Enum);7391 element->AddInput (VyEnum,vy,P1Enum);7392 element->AddInput (VelEnum,vel,P1Enum);7393 element->AddInput (PressureEnum,pressure,P1Enum);7396 element->AddInput2(VxEnum,vx,P1Enum); 7397 element->AddInput2(VyEnum,vy,P1Enum); 7398 element->AddInput2(VelEnum,vel,P1Enum); 7399 element->AddInput2(PressureEnum,pressure,P1Enum); 7394 7400 7395 7401 /*Free ressources:*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.cpp
r23644 r24335 107 107 return 2; 108 108 }/*}}}*/ 109 void StressbalanceSIAAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/109 void StressbalanceSIAAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 110 110 111 111 /*Fetch data needed: */ … … 127 127 if(iomodel->my_elements[i]){ 128 128 Element* element=(Element*)elements->GetObjectByOffset(counter); 129 element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum); 129 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 130 /*Need to know the type of approximation for this element*/ 131 if(iomodel->Data("md.flowequation.element_equation")){ 132 inputs2->SetInput(ApproximationEnum,counter,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[i]))); 133 } 130 134 counter++; 131 135 } 132 136 } 137 138 /*Free data: */ 139 iomodel->DeleteData(1,"md.flowequation.element_equation"); 133 140 134 141 /*Friction law variables*/ 135 142 switch(frictionlaw){ 136 143 case 1: 137 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);138 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);139 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);144 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 145 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 146 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 140 147 break; 141 148 case 2: 142 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);143 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);149 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 150 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 144 151 break; 145 152 case 6: 146 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);147 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);148 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);149 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);153 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 154 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 155 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 156 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 150 157 break; 151 158 default: … … 153 160 } 154 161 155 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);156 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);162 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 163 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 157 164 if(ismovingfront){ 158 165 if(iomodel->domaintype!=Domain2DhorizontalEnum) 159 iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes 160 } 161 162 /*Free data: */ 163 iomodel->DeleteData(1,"md.flowequation.element_equation"); 166 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes 167 } 168 164 169 }/*}}}*/ 165 170 void StressbalanceSIAAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 321 326 IssmDouble gravity = element->FindParam(ConstantsGEnum); 322 327 IssmDouble B,n; 323 Input * B_input = element->GetInput(MaterialsRheologyBbarEnum);_assert_(B_input);324 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);325 Input * slopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(slopex_input);326 Input * slopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(slopey_input);327 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);328 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);329 Input * drag_input = NULL;328 Input2* B_input = element->GetInput2(MaterialsRheologyBbarEnum);_assert_(B_input); 329 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 330 Input2* slopex_input = element->GetInput2(SurfaceSlopeXEnum); _assert_(slopex_input); 331 Input2* slopey_input = element->GetInput2(SurfaceSlopeYEnum); _assert_(slopey_input); 332 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 333 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 334 Input2* drag_input = NULL; 330 335 if(frictionlaw!=5 && frictionlaw!=1){ 331 drag_input = element->GetInput (FrictionCoefficientEnum); _assert_(drag_input);336 drag_input = element->GetInput2(FrictionCoefficientEnum); _assert_(drag_input); 332 337 } 333 338 … … 411 416 IssmDouble gravity = element->FindParam(ConstantsGEnum); 412 417 IssmDouble B,n; 413 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);414 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);415 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);416 Input * slopex_input = element->GetInput(SurfaceSlopeXEnum); _assert_(slopex_input);417 Input * slopey_input = element->GetInput(SurfaceSlopeYEnum); _assert_(slopey_input);418 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);419 Input * drag_input = NULL;418 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 419 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 420 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 421 Input2* slopex_input = element->GetInput2(SurfaceSlopeXEnum); _assert_(slopex_input); 422 Input2* slopey_input = element->GetInput2(SurfaceSlopeYEnum); _assert_(slopey_input); 423 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 424 Input2* drag_input = NULL; 420 425 Friction* friction = NULL; 421 426 if(frictionlaw!=5 && frictionlaw!=1){ 422 drag_input = element->GetInput (FrictionCoefficientEnum); _assert_(drag_input);427 drag_input = element->GetInput2(FrictionCoefficientEnum); _assert_(drag_input); 423 428 } 424 429 else if(frictionlaw==5){ … … 530 535 /*Get dof list and inputs */ 531 536 element->GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 532 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);533 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);537 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 538 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 534 539 535 540 /*Ok, we have the velocities in inputs, fill in solution */ … … 617 622 618 623 /*Add vx and vy as inputs to the tria element: */ 619 element->AddInput (VxEnum,vx,P1Enum);620 element->AddInput (VyEnum,vy,P1Enum);621 element->AddInput (VelEnum,vel,P1Enum);622 element->AddInput (PressureEnum,pressure,P1Enum);624 element->AddInput2(VxEnum,vx,P1Enum); 625 element->AddInput2(VyEnum,vy,P1Enum); 626 element->AddInput2(VelEnum,vel,P1Enum); 627 element->AddInput2(PressureEnum,pressure,P1Enum); 623 628 624 629 /*Free ressources:*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceSIAAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
r24145 r24335 86 86 return 1; 87 87 }/*}}}*/ 88 void StressbalanceVerticalAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/88 void StressbalanceVerticalAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 89 89 90 90 /*return if not 3d mesh*/ … … 96 96 if(iomodel->my_elements[i]){ 97 97 Element* element=(Element*)elements->GetObjectByOffset(counter); 98 element->Update(i ,iomodel,analysis_counter,analysis_type,P1Enum);98 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,P1Enum); 99 99 counter++; 100 100 } 101 101 } 102 102 103 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);104 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);105 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);106 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);107 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);103 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 104 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 105 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 106 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 107 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 108 108 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 109 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);110 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);111 } 112 iomodel->FetchDataToInput( elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);113 //iomodel->FetchDataToInput( elements,"md.smb.mass_balance",SmbMassBalanceEnum);109 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 110 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 111 } 112 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum); 113 //iomodel->FetchDataToInput(inputs2,elements,"md.smb.mass_balance",SmbMassBalanceEnum); 114 114 115 115 … … 119 119 switch(basalforcing_model){ 120 120 case FloatingMeltRateEnum: 121 iomodel->FetchDataToInput( elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum);121 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 122 122 break; 123 123 case LinearFloatingMeltRateEnum: … … 128 128 break; 129 129 case SpatialLinearFloatingMeltRateEnum: 130 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum);131 iomodel->FetchDataToInput( elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum);132 iomodel->FetchDataToInput( elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum);130 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 131 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 132 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 133 133 break; 134 134 case BasalforcingsPicoEnum: 135 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum);135 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsPicoBasinIdEnum); 136 136 break; 137 137 case BasalforcingsIsmip6Enum: 138 iomodel->FetchDataToInput( elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);138 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum); 139 139 break; 140 140 case BeckmannGoosseFloatingMeltRateEnum: 141 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);142 iomodel->FetchDataToInput( elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);141 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 142 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 143 143 break; 144 144 default: 145 145 _error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet"); 146 146 } 147 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum,0.);148 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum,0.);147 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.); 148 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.); 149 149 }/*}}}*/ 150 150 void StressbalanceVerticalAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 353 353 element->GetVerticesCoordinatesBase(&xyz_list_base); 354 354 element->GetInputValue(&approximation,ApproximationEnum); 355 Input * base_input=element->GetInput(BaseEnum); _assert_(base_input);356 Input * groundedice_input=element->GetInput(MaskGroundediceLevelsetEnum); _assert_(groundedice_input);357 Input * groundedice_melting_input=element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input);358 Input * floatingice_melting_input=element->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingice_melting_input);359 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);360 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);361 Input * vzFS_input=NULL;355 Input2* base_input=element->GetInput2(BaseEnum); _assert_(base_input); 356 Input2* groundedice_input=element->GetInput2(MaskGroundediceLevelsetEnum); _assert_(groundedice_input); 357 Input2* groundedice_melting_input=element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input); 358 Input2* floatingice_melting_input=element->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingice_melting_input); 359 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 360 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 361 Input2* vzFS_input=NULL; 362 362 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 363 vzFS_input=element->GetInput (VzFSEnum); _assert_(vzFS_input);363 vzFS_input=element->GetInput2(VzFSEnum); _assert_(vzFS_input); 364 364 } 365 365 … … 419 419 element->GetVerticesCoordinatesTop(&xyz_list_surface); 420 420 element->GetInputValue(&approximation,ApproximationEnum); 421 Input * surface_input =element->GetInput(SurfaceEnum);_assert_(surface_input);422 Input * smb_input=element->GetInput(SmbMassBalanceEnum); _assert_(smb_input);423 Input * vx_input=element->GetInput(VxEnum);_assert_(vx_input);424 Input * vy_input=element->GetInput(VyEnum);_assert_(vy_input);425 Input * vzFS_input=NULL;421 Input2* surface_input =element->GetInput2(SurfaceEnum); _assert_(surface_input); 422 Input2* smb_input=element->GetInput2(SmbMassBalanceEnum); _assert_(smb_input); 423 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 424 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 425 Input2* vzFS_input=NULL; 426 426 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 427 vzFS_input=element->GetInput (VzFSEnum);_assert_(vzFS_input);427 vzFS_input=element->GetInput2(VzFSEnum); _assert_(vzFS_input); 428 428 } 429 429 … … 474 474 element->GetVerticesCoordinates(&xyz_list); 475 475 element->GetInputValue(&approximation,ApproximationEnum); 476 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);477 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);478 Input * vzFS_input=NULL;476 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 477 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 478 Input2* vzFS_input=NULL; 479 479 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 480 vzFS_input=element->GetInput (VzFSEnum); _assert_(vzFS_input);480 vzFS_input=element->GetInput2(VzFSEnum); _assert_(vzFS_input); 481 481 } 482 482 … … 561 561 /*Do some modifications if we actually have a HOFS or SSAFS element*/ 562 562 if(approximation==HOFSApproximationEnum){ 563 Input * vzFS_input=element->GetInput(VzFSEnum);563 Input2* vzFS_input=element->GetInput2(VzFSEnum); 564 564 if (vzFS_input){ 565 if (vzFS_input->ObjectEnum()!=PentaInput Enum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));565 if (vzFS_input->ObjectEnum()!=PentaInput2Enum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum())); 566 566 element->GetInputListOnNodes(&vzFS[0],VzFSEnum,0.); 567 567 } … … 573 573 } 574 574 else if(approximation==SSAFSApproximationEnum){ 575 Input * vzFS_input=element->GetInput(VzFSEnum);575 Input2* vzFS_input=element->GetInput2(VzFSEnum); 576 576 if (vzFS_input){ 577 if (vzFS_input->ObjectEnum()!=PentaInput Enum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum()));577 if (vzFS_input->ObjectEnum()!=PentaInput2Enum) _error_("Cannot compute Vel as VzFS is of type " << EnumToStringx(vzFS_input->ObjectEnum())); 578 578 element->GetInputListOnNodes(&vzFS[0],VzFSEnum,0.); 579 579 } … … 597 597 } 598 598 if(approximation!=HOFSApproximationEnum && approximation!=SSAFSApproximationEnum){ 599 element->AddInput (PressureEnum,pressure,element->GetElementType());599 element->AddInput2(PressureEnum,pressure,element->GetElementType()); 600 600 } 601 601 else if(approximation==HOFSApproximationEnum){ 602 element->AddInput (VzHOEnum,vzHO,P1Enum);602 element->AddInput2(VzHOEnum,vzHO,P1Enum); 603 603 } 604 604 else if(approximation==SSAFSApproximationEnum){ 605 element->AddInput (VzSSAEnum,vzSSA,P1Enum);606 } 607 element->AddInput (VzEnum,vz,P1Enum);608 element->AddInput (VelEnum,vel,P1Enum);605 element->AddInput2(VzSSAEnum,vzSSA,P1Enum); 606 } 607 element->AddInput2(VzEnum,vz,P1Enum); 608 element->AddInput2(VelEnum,vel,P1Enum); 609 609 610 610 /*Free ressources:*/ -
issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
r24136 r24335 104 104 return 1; 105 105 }/*}}}*/ 106 void ThermalAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/106 void ThermalAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 107 107 108 108 int frictionlaw,basalforcing_model,materialstype; … … 119 119 if(iomodel->my_elements[i]){ 120 120 Element* element=(Element*)elements->GetObjectByOffset(counter); 121 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);121 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 122 122 counter++; 123 123 } … … 130 130 iomodel->FindConstant(&materialstype,"md.materials.type"); 131 131 132 iomodel->FetchDataToInput( elements,"md.geometry.thickness",ThicknessEnum);133 iomodel->FetchDataToInput( elements,"md.geometry.surface",SurfaceEnum);134 iomodel->FetchDataToInput( elements,"md.geometry.base",BaseEnum);135 iomodel->FetchDataToInput( elements,"md.slr.sealevel",SealevelEnum,0);136 iomodel->FetchDataToInput( elements,"md.mask.ice_levelset",MaskIceLevelsetEnum);137 iomodel->FetchDataToInput( elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum);132 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.thickness",ThicknessEnum); 133 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.surface",SurfaceEnum); 134 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.base",BaseEnum); 135 iomodel->FetchDataToInput(inputs2,elements,"md.slr.sealevel",SealevelEnum,0); 136 iomodel->FetchDataToInput(inputs2,elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 137 iomodel->FetchDataToInput(inputs2,elements,"md.mask.groundedice_levelset",MaskGroundediceLevelsetEnum); 138 138 if(iomodel->domaintype!=Domain2DhorizontalEnum){ 139 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);140 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);141 } 142 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);143 iomodel->FetchDataToInput( elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum);144 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);145 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);146 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum);147 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum);148 iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum);149 InputUpdateFromConstantx( elements,0.,VxMeshEnum);150 InputUpdateFromConstantx( elements,0.,VyMeshEnum);151 InputUpdateFromConstantx( elements,0.,VzMeshEnum);139 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 140 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 141 } 142 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); 143 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonsurface",MeshVertexonsurfaceEnum); 144 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 145 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 146 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum); 147 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum); 148 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum); 149 InputUpdateFromConstantx(inputs2,elements,0.,VxMeshEnum); 150 InputUpdateFromConstantx(inputs2,elements,0.,VyMeshEnum); 151 InputUpdateFromConstantx(inputs2,elements,0.,VzMeshEnum); 152 152 153 153 /*Rheology type*/ 154 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);154 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 155 155 switch(materialstype){ 156 156 case MatenhancediceEnum: 157 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);158 iomodel->FetchDataToInput( elements,"md.materials.rheology_E",MaterialsRheologyEEnum);157 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 158 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum); 159 159 break; 160 160 case MatdamageiceEnum: 161 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);161 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 162 162 break; 163 163 case MatestarEnum: 164 iomodel->FetchDataToInput( elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);165 iomodel->FetchDataToInput( elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);164 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum); 165 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum); 166 166 break; 167 167 case MaticeEnum: 168 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);168 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 169 169 break; 170 170 default: … … 172 172 } 173 173 if(ismovingfront){ 174 iomodel->FetchDataToInput( elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes174 iomodel->FetchDataToInput(inputs2,elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum); // required for updating active nodes 175 175 } 176 176 /*Basal forcings variables*/ … … 180 180 break; 181 181 default: 182 iomodel->FetchDataToInput( elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);182 iomodel->FetchDataToInput(inputs2,elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum); 183 183 break; 184 184 } … … 187 187 case 1: 188 188 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 189 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);190 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);191 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);189 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 190 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 191 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 192 192 if (FrictionCoupling==3){ 193 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}193 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 194 194 else if(FrictionCoupling==4){ 195 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);195 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 196 196 } 197 197 break; 198 198 case 2: 199 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);200 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);199 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 200 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 201 201 break; 202 202 case 3: 203 203 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 204 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);205 iomodel->FetchDataToInput( elements,"md.friction.As",FrictionAsEnum);206 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);204 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 205 iomodel->FetchDataToInput(inputs2,elements,"md.friction.As",FrictionAsEnum); 206 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 207 207 if (FrictionCoupling==3){ 208 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}208 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 209 209 else if(FrictionCoupling==4){ 210 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);210 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 211 211 } 212 212 break; 213 213 case 4: 214 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);215 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);216 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);217 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);218 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);214 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 215 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 216 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 217 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 218 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 219 219 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 220 220 break; 221 221 case 5: 222 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);223 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);224 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);225 iomodel->FetchDataToInput( elements,"md.friction.water_layer",FrictionWaterLayerEnum);222 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 223 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 224 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 225 iomodel->FetchDataToInput(inputs2,elements,"md.friction.water_layer",FrictionWaterLayerEnum); 226 226 break; 227 227 case 6: 228 iomodel->FetchDataToInput( elements,"md.friction.C",FrictionCEnum);229 iomodel->FetchDataToInput( elements,"md.friction.m",FrictionMEnum);230 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum);231 iomodel->FetchDataToInput( elements,"md.initialization.temperature",TemperatureEnum);228 iomodel->FetchDataToInput(inputs2,elements,"md.friction.C",FrictionCEnum); 229 iomodel->FetchDataToInput(inputs2,elements,"md.friction.m",FrictionMEnum); 230 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum); 231 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.temperature",TemperatureEnum); 232 232 break; 233 233 case 7: 234 234 iomodel->FindConstant(&FrictionCoupling,"md.friction.coupling"); 235 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);236 iomodel->FetchDataToInput( elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum);237 iomodel->FetchDataToInput( elements,"md.friction.p",FrictionPEnum);238 iomodel->FetchDataToInput( elements,"md.friction.q",FrictionQEnum);235 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 236 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficientcoulomb",FrictionCoefficientcoulombEnum); 237 iomodel->FetchDataToInput(inputs2,elements,"md.friction.p",FrictionPEnum); 238 iomodel->FetchDataToInput(inputs2,elements,"md.friction.q",FrictionQEnum); 239 239 if (FrictionCoupling==3){ 240 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);}240 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",FrictionEffectivePressureEnum);} 241 241 else if(FrictionCoupling==4){ 242 iomodel->FetchDataToInput( elements,"md.friction.effective_pressure",EffectivePressureEnum);242 iomodel->FetchDataToInput(inputs2,elements,"md.friction.effective_pressure",EffectivePressureEnum); 243 243 } 244 244 break; 245 245 case 9: 246 iomodel->FetchDataToInput( elements,"md.friction.coefficient",FrictionCoefficientEnum);247 iomodel->FetchDataToInput( elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum);248 InputUpdateFromConstantx( elements,1.,FrictionPEnum);249 InputUpdateFromConstantx( elements,1.,FrictionQEnum);246 iomodel->FetchDataToInput(inputs2,elements,"md.friction.coefficient",FrictionCoefficientEnum); 247 iomodel->FetchDataToInput(inputs2,elements,"md.friction.pressure_adjusted_temperature",FrictionPressureAdjustedTemperatureEnum); 248 InputUpdateFromConstantx(inputs2,elements,1.,FrictionPEnum); 249 InputUpdateFromConstantx(inputs2,elements,1.,FrictionQEnum); 250 250 break; 251 251 default: … … 338 338 element->GetVerticesCoordinatesBase(&xyz_list_base); 339 339 element->FindParam(&dt,TimesteppingTimeStepEnum); 340 IssmDouble 341 IssmDouble 342 IssmDouble 343 IssmDouble 344 IssmDouble 345 IssmDouble 340 IssmDouble gravity = element->FindParam(ConstantsGEnum); 341 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 342 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); 343 IssmDouble heatcapacity = element->FindParam(MaterialsHeatcapacityEnum); 344 IssmDouble mixed_layer_capacity= element->FindParam(MaterialsMixedLayerCapacityEnum); 345 IssmDouble thermal_exchange_vel= element->FindParam(MaterialsThermalExchangeVelocityEnum); 346 346 347 347 /* Start looping on the number of gaussian points: */ … … 401 401 IssmDouble thermalconductivity = element->FindParam(MaterialsThermalconductivityEnum); 402 402 IssmDouble kappa = thermalconductivity/(rho_ice*heatcapacity); 403 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);404 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);405 Input * vz_input = element->GetInput(VzEnum); _assert_(vz_input);406 Input * vxm_input = element->GetInput(VxMeshEnum); _assert_(vxm_input);407 Input * vym_input = element->GetInput(VyMeshEnum); _assert_(vym_input);408 Input * vzm_input = element->GetInput(VzMeshEnum); _assert_(vzm_input);403 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 404 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 405 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 406 Input2* vxm_input = element->GetInput2(VxMeshEnum); _assert_(vxm_input); 407 Input2* vym_input = element->GetInput2(VyMeshEnum); _assert_(vym_input); 408 Input2* vzm_input = element->GetInput2(VzMeshEnum); _assert_(vzm_input); 409 409 410 410 /* Start looping on the number of gaussian points: */ … … 551 551 element->GetVerticesCoordinatesBase(&xyz_list_base); 552 552 element->FindParam(&dt,TimesteppingTimeStepEnum); 553 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);554 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);555 Input * vz_input = element->GetInput(VzEnum); _assert_(vz_input);556 Input * geothermalflux_input = element->GetInput(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input);553 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 554 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 555 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 556 Input2* geothermalflux_input = element->GetInput2(BasalforcingsGeothermalfluxEnum); _assert_(geothermalflux_input); 557 557 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); 558 558 IssmDouble heatcapacity = element->FindParam(MaterialsHeatcapacityEnum); … … 612 612 element->GetVerticesCoordinatesBase(&xyz_list_base); 613 613 element->FindParam(&dt,TimesteppingTimeStepEnum); 614 Input * pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input);614 Input2* pressure_input=element->GetInput2(PressureEnum); _assert_(pressure_input); 615 615 IssmDouble gravity = element->FindParam(ConstantsGEnum); 616 616 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); … … 674 674 element->FindParam(&dt,TimesteppingTimeStepEnum); 675 675 element->FindParam(&stabilization,ThermalStabilizationEnum); 676 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);677 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);678 Input * vz_input=element->GetInput(VzEnum); _assert_(vz_input);679 Input * temperature_input = NULL;680 if(reCast<bool,IssmDouble>(dt)){temperature_input = element->GetInput (TemperatureEnum); _assert_(temperature_input);}676 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 677 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 678 Input2* vz_input=element->GetInput2(VzEnum); _assert_(vz_input); 679 Input2* temperature_input = NULL; 680 if(reCast<bool,IssmDouble>(dt)){temperature_input = element->GetInput2(TemperatureEnum); _assert_(temperature_input);} 681 681 682 682 /* Start looping on the number of gaussian points: */ … … 873 873 element->GetInputValue(&converged,ConvergedEnum); 874 874 if(converged){ 875 element->AddInput (TemperatureEnum,values,element->GetElementType());875 element->AddInput2(TemperatureEnum,values,element->GetElementType()); 876 876 877 877 IssmDouble* n = xNew<IssmDouble>(numnodes); … … 894 894 case BuddJackaEnum: 895 895 for(i=0;i<numnodes;i++) B[i]=BuddJacka(values[i]); 896 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());896 element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType()); 897 897 break; 898 898 case CuffeyEnum: 899 899 for(i=0;i<numnodes;i++) B[i]=Cuffey(values[i]); 900 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());900 element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType()); 901 901 break; 902 902 case PatersonEnum: 903 903 for(i=0;i<numnodes;i++) B[i]=Paterson(values[i]); 904 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());904 element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType()); 905 905 break; 906 906 case NyeH2OEnum: 907 907 for(i=0;i<numnodes;i++) B[i]=NyeH2O(values[i]); 908 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());908 element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType()); 909 909 break; 910 910 case NyeCO2Enum: 911 911 for(i=0;i<numnodes;i++) B[i]=NyeCO2(values[i]); 912 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());912 element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType()); 913 913 break; 914 914 case ArrheniusEnum:{ 915 915 element->GetVerticesCoordinates(&xyz_list); 916 916 for(i=0;i<numnodes;i++) B[i]=Arrhenius(values[i],surface[i]-xyz_list[i*3+2],n[i]); 917 element->AddInput (MaterialsRheologyBEnum,&B[0],element->GetElementType());917 element->AddInput2(MaterialsRheologyBEnum,&B[0],element->GetElementType()); 918 918 break; 919 919 } … … 924 924 } 925 925 else{ 926 element->AddInput (TemperaturePicardEnum,values,element->GetElementType());926 element->AddInput2(TemperaturePicardEnum,values,element->GetElementType()); 927 927 } 928 928 -
issm/trunk-jpl/src/c/analyses/ThermalAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.cpp
r23629 r24335 27 27 return 1; 28 28 }/*}}}*/ 29 void UzawaPressureAnalysis::UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/29 void UzawaPressureAnalysis::UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 30 30 31 31 /*Update elements: */ … … 42 42 if(iomodel->my_elements[i]){ 43 43 Element* element=(Element*)elements->GetObjectByOffset(counter); 44 element->Update(i ,iomodel,analysis_counter,analysis_type,finiteelement);44 element->Update(inputs2,i,iomodel,analysis_counter,analysis_type,finiteelement); 45 45 counter++; 46 46 } 47 47 } 48 48 49 iomodel->FetchDataToInput( elements,"md.initialization.vx",VxEnum,0.);50 iomodel->FetchDataToInput( elements,"md.initialization.vy",VyEnum,0.);51 if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput( elements,"md.initialization.vz",VzEnum,0.);52 iomodel->FetchDataToInput( elements,"md.initialization.pressure",PressureEnum,0.);53 InputUpdateFromConstantx( elements,0.,SigmaNNEnum);49 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vx",VxEnum,0.); 50 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vy",VyEnum,0.); 51 if(iomodel->domaintype==Domain3DEnum) iomodel->FetchDataToInput(inputs2,elements,"md.initialization.vz",VzEnum,0.); 52 iomodel->FetchDataToInput(inputs2,elements,"md.initialization.pressure",PressureEnum,0.); 53 InputUpdateFromConstantx(inputs2,elements,0.,SigmaNNEnum); 54 54 }/*}}}*/ 55 55 void UzawaPressureAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 130 130 IssmDouble* dvz = xNew<IssmDouble>(dim); 131 131 132 Input * vx_input=element->GetInput(VxEnum); _assert_(vx_input);133 Input * vy_input=element->GetInput(VyEnum); _assert_(vy_input);134 Input * vz_input = NULL;135 if(dim==3){vz_input=element->GetInput (VzEnum); _assert_(vz_input);}132 Input2* vx_input=element->GetInput2(VxEnum); _assert_(vx_input); 133 Input2* vy_input=element->GetInput2(VyEnum); _assert_(vy_input); 134 Input2* vz_input = NULL; 135 if(dim==3){vz_input=element->GetInput2(VzEnum); _assert_(vz_input);} 136 136 137 137 Gauss* gauss = element->NewGauss(5); … … 209 209 IssmDouble* valueslambda = xNewZeroInit<IssmDouble>(numnodessigma); 210 210 IssmDouble* pressure = xNew<IssmDouble>(numnodes); 211 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);212 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);213 Input * vz_input = NULL;214 if(dim==3){vz_input = element->GetInput (VzEnum); _assert_(vz_input);}211 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 212 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 213 Input2* vz_input = NULL; 214 if(dim==3){vz_input = element->GetInput2(VzEnum); _assert_(vz_input);} 215 215 element->GetInputListOnNodes(&pressure[0],PressureEnum); 216 216 … … 219 219 values[i] = pressure[i] + solution[doflist[i]]; 220 220 } 221 element->AddInput (PressureEnum,values,element->GetElementType());221 element->AddInput2(PressureEnum,values,element->GetElementType()); 222 222 223 223 /*Now compute sigmann if on base*/ 224 224 if(element->IsOnBase() && 0){ 225 Input * sigmann_input = element->GetInput(SigmaNNEnum); _assert_(sigmann_input);225 Input2* sigmann_input = element->GetInput2(SigmaNNEnum); _assert_(sigmann_input); 226 226 if(dim==3) _error_("not implemented yet"); 227 227 … … 234 234 IssmDouble deltalambda[3] = {0.0}; 235 235 IssmDouble* vertexonbase = xNew<IssmDouble>(numnodessigma); 236 Input * vertexonbase_input = element->GetInput(MeshVertexonbaseEnum); _assert_(vertexonbase_input);236 Input2* vertexonbase_input = element->GetInput2(MeshVertexonbaseEnum); _assert_(vertexonbase_input); 237 237 Gauss* gauss = element->NewGauss(); 238 238 … … 288 288 xDelete<IssmDouble>(basis); 289 289 290 element->AddInput (SigmaNNEnum,valueslambda,P2Enum);290 element->AddInput2(SigmaNNEnum,valueslambda,P2Enum); 291 291 } 292 292 -
issm/trunk-jpl/src/c/analyses/UzawaPressureAnalysis.h
r23585 r24335 17 17 void CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr=false); 18 18 int DofsPerNode(int** doflist,int domaintype,int approximation); 19 void UpdateElements(Elements* elements,I oModel* iomodel,int analysis_counter,int analysis_type);19 void UpdateElements(Elements* elements,Inputs2* inputs2,IoModel* iomodel,int analysis_counter,int analysis_type); 20 20 void UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum); 21 21 -
issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp
r23066 r24335 22 22 #include "../classes/Inputs/Input.h" 23 23 #include "../classes/gauss/Gauss.h" 24 #include "./Inputs2/DatasetInput2.h" 24 25 /*}}}*/ 25 26 … … 151 152 152 153 /*Get input if it already exists*/ 153 Input* tempinput = basalelement->GetInput(definitionenum); 154 /*Cast it to a Datasetinput*/ 155 if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do! confused!"); 156 DatasetInput* datasetinput = (DatasetInput*)tempinput; 157 158 /*Get the drag from the model*/ 159 Input* drag_input=basalelement->GetInput(FrictionCoefficientEnum); _assert_(drag_input); 154 DatasetInput2 *datasetinput = basalelement->GetDatasetInput2(definitionenum); _assert_(datasetinput); 155 Input2 *drag_input = basalelement->GetInput2(FrictionCoefficientEnum); _assert_(drag_input); 160 156 161 157 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp
r23066 r24335 22 22 #include "../classes/Inputs/Input.h" 23 23 #include "../classes/gauss/Gauss.h" 24 #include "./Inputs2/DatasetInput2.h" 24 25 /*}}}*/ 25 26 … … 162 163 163 164 /*Get model values*/ 164 Input * vx_input =topelement->GetInput(VxEnum);_assert_(vx_input);165 Input * vy_input =NULL;165 Input2 *vx_input = topelement->GetInput2(VxEnum); _assert_(vx_input); 166 Input2 *vy_input = NULL; 166 167 if(numcomponents==2){ 167 vy_input =topelement->GetInput(VyEnum);_assert_(vy_input);168 vy_input = topelement->GetInput2(VyEnum); _assert_(vy_input); 168 169 } 169 170 170 171 /*Retrieve all inputs we will be needing: */ 171 DatasetInput* datasetinput = NULL; 172 Input* tempinput = topelement->GetInput(definitionenum); 173 /*Cast it to a Datasetinput*/ 174 if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do"); 175 datasetinput = (DatasetInput*)tempinput; 172 DatasetInput2 *datasetinput = topelement->GetDatasetInput2(definitionenum); _assert_(datasetinput); 176 173 177 174 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
r23066 r24335 22 22 #include "../classes/Inputs/Input.h" 23 23 #include "../classes/gauss/Gauss.h" 24 #include "./Inputs2/DatasetInput2.h" 24 25 /*}}}*/ 25 26 … … 167 168 168 169 /*Retrieve all inputs we will be needing: */ 169 170 DatasetInput* datasetinput = NULL; 171 172 /*Get input if it already exists*/ 173 Input* tempinput = topelement->GetInput(definitionenum); 174 175 /*Cast it to a Datasetinput*/ 176 if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do"); 177 datasetinput = (DatasetInput*)tempinput; 178 179 Input* model_input=topelement->GetInput(model_enum); _assert_(model_input); 180 //Input* observation_input=topelement->GetInput(observation_enum); _assert_(observation_input); 181 //Input* weights_input =topelement->GetInput(weights_enum); _assert_(weights_input); 170 DatasetInput2 *datasetinput = topelement->GetDatasetInput2(definitionenum); _assert_(datasetinput); 171 Input2 *model_input = topelement->GetInput2(model_enum); _assert_(model_input); 182 172 183 173 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r24334 r24335 15 15 #include "../../shared/shared.h" 16 16 #include "../../modules/SurfaceMassBalancex/SurfaceMassBalancex.h" 17 #include "../Inputs2/BoolInput2.h" 18 #include "../Inputs2/TransientInput2.h" 19 #include "../Inputs2/ElementInput2.h" 20 #include "../Inputs2/DatasetInput2.h" 21 #include "../Inputs2/ArrayInput2.h" 17 22 /*}}}*/ 18 23 … … 28 33 this->id = -1; 29 34 this->sid = -1; 35 this->lid = -1; 30 36 this->inputs = NULL; 37 this->inputs2 = NULL; 31 38 this->nodes = NULL; 32 39 this->vertices = NULL; … … 60 67 this->GetVerticesCoordinates(&xyz_list); 61 68 parameters->FindParam(&dim,DomainDimensionEnum); 62 Input * vx_input=this->GetInput(VxEnum); _assert_(vx_input);63 Input * vy_input=this->GetInput(VyEnum); _assert_(vy_input);64 Input * vz_input=NULL;65 if(dim==3){vz_input=this->GetInput (VzEnum); _assert_(vz_input);}69 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 70 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 71 Input2* vz_input=NULL; 72 if(dim==3){vz_input=this->GetInput2(VzEnum); _assert_(vz_input);} 66 73 67 74 /*Allocate arrays*/ … … 122 129 123 130 /*Add Stress tensor components into inputs*/ 124 this->AddInput (LambdaSEnum,lambdas,P1Enum);131 this->AddInput2(LambdaSEnum,lambdas,P1Enum); 125 132 126 133 /*Clean up and return*/ … … 148 155 149 156 /* Retrieve inputs */ 150 Input * eps_xx_input=this->GetInput(StrainRatexxEnum); _assert_(eps_xx_input);151 Input * eps_yy_input=this->GetInput(StrainRateyyEnum); _assert_(eps_yy_input);152 Input * eps_xy_input=this->GetInput(StrainRatexyEnum); _assert_(eps_xy_input);153 Input * eps_xz_input=NULL;154 Input * eps_yz_input=NULL;155 Input * eps_zz_input=NULL;157 Input2* eps_xx_input=this->GetInput2(StrainRatexxEnum); _assert_(eps_xx_input); 158 Input2* eps_yy_input=this->GetInput2(StrainRateyyEnum); _assert_(eps_yy_input); 159 Input2* eps_xy_input=this->GetInput2(StrainRatexyEnum); _assert_(eps_xy_input); 160 Input2* eps_xz_input=NULL; 161 Input2* eps_yz_input=NULL; 162 Input2* eps_zz_input=NULL; 156 163 if(dim==3){ 157 eps_xz_input=this->GetInput (StrainRatexzEnum); _assert_(eps_xz_input);158 eps_yz_input=this->GetInput (StrainRateyzEnum); _assert_(eps_yz_input);159 eps_zz_input=this->GetInput (StrainRatezzEnum); _assert_(eps_zz_input);164 eps_xz_input=this->GetInput2(StrainRatexzEnum); _assert_(eps_xz_input); 165 eps_yz_input=this->GetInput2(StrainRateyzEnum); _assert_(eps_yz_input); 166 eps_zz_input=this->GetInput2(StrainRatezzEnum); _assert_(eps_zz_input); 160 167 } 161 168 … … 165 172 166 173 /* Retrieve domain-dependent inputs */ 167 Input * n_input=this->GetInput(MaterialsRheologyNEnum); _assert_(n_input);168 Input * damage_input = NULL;169 Input * B_input = NULL;174 Input2* n_input=this->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 175 Input2* damage_input = NULL; 176 Input2* B_input = NULL; 170 177 int domaintype; 171 178 parameters->FindParam(&domaintype,DomainTypeEnum); 172 179 if(domaintype==Domain2DhorizontalEnum){ 173 damage_input = this->GetInput (DamageDbarEnum); _assert_(damage_input);174 B_input=this->GetInput (MaterialsRheologyBbarEnum); _assert_(B_input);180 damage_input = this->GetInput2(DamageDbarOldEnum); _assert_(damage_input); 181 B_input=this->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 175 182 } 176 183 else{ 177 damage_input = this->GetInput (DamageDEnum); _assert_(damage_input);178 B_input=this->GetInput (MaterialsRheologyBEnum); _assert_(B_input);184 damage_input = this->GetInput2(DamageDOldEnum); _assert_(damage_input); 185 B_input=this->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 179 186 } 180 187 … … 217 224 218 225 /* Add new damage input to DamageEnum and NewDamageEnum */ 219 this->AddInput (NewDamageEnum,newD,this->GetElementType());226 this->AddInput2(NewDamageEnum,newD,P1DGEnum); 220 227 if(domaintype==Domain2DhorizontalEnum){ 221 this->AddInput (DamageDbarEnum,newD,this->GetElementType());228 this->AddInput2(DamageDbarEnum,newD,this->GetElementType()); 222 229 } 223 230 else{ 224 this->AddInput (DamageDEnum,newD,this->GetElementType());231 this->AddInput2(DamageDEnum,newD,this->GetElementType()); 225 232 } 226 233 … … 240 247 this->GetVerticesCoordinates(&xyz_list); 241 248 parameters->FindParam(&dim,DomainDimensionEnum); 242 Input * vx_input=this->GetInput(VxEnum); _assert_(vx_input);243 Input * vy_input=this->GetInput(VyEnum); _assert_(vy_input);244 Input * vz_input=NULL;245 if(dim==3){vz_input=this->GetInput (VzEnum); _assert_(vz_input);}249 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 250 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 251 Input2* vz_input=NULL; 252 if(dim==3){vz_input=this->GetInput2(VzEnum); _assert_(vz_input);} 246 253 247 254 /*Allocate arrays*/ … … 289 296 290 297 /*Add Stress tensor components into inputs*/ 291 this->AddInput (StrainRatexxEnum,eps_xx,P1Enum);292 this->AddInput (StrainRatexyEnum,eps_xy,P1Enum);293 this->AddInput (StrainRatexzEnum,eps_xz,P1Enum);294 this->AddInput (StrainRateyyEnum,eps_yy,P1Enum);295 this->AddInput (StrainRateyzEnum,eps_yz,P1Enum);296 this->AddInput (StrainRatezzEnum,eps_zz,P1Enum);297 this->AddInput (StrainRateeffectiveEnum,eps_ef,P1Enum);298 this->AddInput2(StrainRatexxEnum,eps_xx,P1Enum); 299 this->AddInput2(StrainRatexyEnum,eps_xy,P1Enum); 300 this->AddInput2(StrainRatexzEnum,eps_xz,P1Enum); 301 this->AddInput2(StrainRateyyEnum,eps_yy,P1Enum); 302 this->AddInput2(StrainRateyzEnum,eps_yz,P1Enum); 303 this->AddInput2(StrainRatezzEnum,eps_zz,P1Enum); 304 this->AddInput2(StrainRateeffectiveEnum,eps_ef,P1Enum); 298 305 299 306 /*Clean up and return*/ … … 389 396 _printf_(" id : "<<this->id <<"\n"); 390 397 _printf_(" sid: "<<this->sid<<"\n"); 398 _printf_(" lid: "<<this->lid<<"\n"); 391 399 if(vertices){ 392 400 const int NUM_VERTICES = this->GetNumberOfVertices(); … … 429 437 if(!IsOnBase()) return; 430 438 431 const int NUM_VERTICES 439 const int NUM_VERTICES = this->GetNumberOfVertices(); 432 440 const int NUM_VERTICES_MONTHS_PER_YEAR = NUM_VERTICES * 12; 433 441 434 442 int i; 443 int* vertexlids=xNew<int>(NUM_VERTICES); 435 444 IssmDouble* monthlytemperatures=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); 436 445 IssmDouble* monthlyprec=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); … … 439 448 IssmDouble* PrecipitationsPresentday=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); 440 449 IssmDouble* tmp=xNew<IssmDouble>(NUM_VERTICES); 441 IssmDouble Delta18oPresent,Delta18oLgm,Delta18oTime;442 IssmDouble Delta18oSurfacePresent,Delta18oSurfaceLgm,Delta18oSurfaceTime;443 IssmDouble time,yts,finaltime,time_yr;444 450 445 451 /*Recover parameters*/ 452 IssmDouble time,yts,finaltime; 446 453 this->parameters->FindParam(&time,TimeEnum); 447 454 this->parameters->FindParam(&yts,ConstantsYtsEnum); 448 455 this->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 449 time_yr=floor(time/yts)*yts; 450 451 /*Recover present day temperature and precipitation*/ 452 Input* input=this->inputs->GetInput(SmbTemperaturesPresentdayEnum); _assert_(input); 453 Input* input2=this->inputs->GetInput(SmbTemperaturesLgmEnum); _assert_(input2); 454 Input* input3=this->inputs->GetInput(SmbPrecipitationsPresentdayEnum); _assert_(input3); 456 this->GetVerticesLidList(vertexlids); 457 IssmDouble time_yr=floor(time/yts)*yts; 458 455 459 /*loop over vertices: */ 456 460 Gauss* gauss=this->NewGauss(); 457 461 for(int month=0;month<12;month++){ 462 463 /*Recover present day temperature and precipitation*/ 464 Input2* input1=this->GetInput2(SmbTemperaturesPresentdayEnum,month/12.*yts); _assert_(input1); 465 Input2* input2=this->GetInput2(SmbTemperaturesLgmEnum,month/12.*yts); _assert_(input2); 466 Input2* input3=this->GetInput2(SmbPrecipitationsPresentdayEnum,month/12.*yts); _assert_(input3); 467 458 468 for(int iv=0;iv<NUM_VERTICES;iv++){ 459 469 gauss->GaussVertex(iv); 460 input ->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss,month/12.*yts);461 input2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss ,month/12.*yts);462 input3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss ,month/12.*yts);470 input1->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss); 471 input2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss); 472 input3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss); 463 473 464 474 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; … … 467 477 468 478 /*Recover delta18o and Delta18oSurface at present day, lgm and at time t*/ 479 IssmDouble Delta18oPresent,Delta18oLgm,Delta18oTime; 480 IssmDouble Delta18oSurfacePresent,Delta18oSurfaceLgm,Delta18oSurfaceTime; 469 481 this->parameters->FindParam(&Delta18oPresent,SmbDelta18oEnum,finaltime); 470 482 this->parameters->FindParam(&Delta18oLgm,SmbDelta18oEnum,(finaltime-(21000*yts))); … … 484 496 485 497 /*Update inputs*/ 486 TransientInput* NewTemperatureInput = new TransientInput(SmbMonthlytemperaturesEnum);487 TransientInput* NewPrecipitationInput = new TransientInput(SmbPrecipitationEnum);488 498 for (int imonth=0;imonth<12;imonth++) { 489 499 for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlytemperatures[i*12+imonth]; 490 500 switch(this->ObjectEnum()){ 491 case TriaEnum: NewTemperatureInput->AddTimeInput(new TriaInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 492 case PentaEnum: NewTemperatureInput->AddTimeInput(new PentaInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 493 case TetraEnum: NewTemperatureInput->AddTimeInput(new TetraInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 501 case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 502 case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 494 503 default: _error_("Not implemented yet"); 495 504 } 496 505 for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlyprec[i*12+imonth]/yts; 497 506 switch(this->ObjectEnum()){ 498 case TriaEnum: NewPrecipitationInput->AddTimeInput(new TriaInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 499 case PentaEnum: NewPrecipitationInput->AddTimeInput(new PentaInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 500 case TetraEnum: NewPrecipitationInput->AddTimeInput(new TetraInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 507 case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 508 case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 501 509 default: _error_("Not implemented yet"); 502 510 } 503 511 } 504 NewTemperatureInput->Configure(this->parameters);505 NewPrecipitationInput->Configure(this->parameters);506 507 this->inputs->AddInput(NewTemperatureInput);508 this->inputs->AddInput(NewPrecipitationInput);509 512 510 513 switch(this->ObjectEnum()){ … … 512 515 case PentaEnum: 513 516 case TetraEnum: 514 this-> InputExtrude(SmbMonthlytemperaturesEnum,-1);515 this-> InputExtrude(SmbPrecipitationEnum,-1);517 this->DatasetInputExtrude(SmbMonthlytemperaturesEnum,-1); 518 this->DatasetInputExtrude(SmbPrecipitationEnum,-1); 516 519 break; 517 520 default: _error_("Not implemented yet"); … … 526 529 xDelete<IssmDouble>(PrecipitationsPresentday); 527 530 xDelete<IssmDouble>(tmp); 528 529 } 530 /*}}}*/531 xDelete<int>(vertexlids); 532 533 } /*}}}*/ 531 534 void Element::Delta18opdParameterization(void){/*{{{*/ 532 535 /*Are we on the base? If not, return*/ … … 537 540 538 541 int i; 542 int* vertexlids=xNew<int>(NUM_VERTICES); 539 543 IssmDouble* monthlytemperatures=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); 540 544 IssmDouble* monthlyprec=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); … … 552 556 this->parameters->FindParam(&yts,ConstantsYtsEnum); 553 557 this->parameters->FindParam(&f,SmbFEnum); 558 this->GetVerticesLidList(vertexlids); 554 559 time_yr=floor(time/yts)*yts; 555 time_clim =ceil(time/yts + 1e-10)*yts;560 time_clim =ceil(time/yts + 1e-10)*yts; 556 561 time_climt=ceil(time/yts + 1e-10)*yts; 557 562 time_climp=ceil(time/yts + 1e-10)*yts; … … 563 568 this->parameters->FindParam(&isPrecipScaled,SmbIsprecipscaledEnum); 564 569 565 /*Recover present day temperature and precipitation*/566 Input* input=this->inputs->GetInput(SmbTemperaturesPresentdayEnum); _assert_(input);567 Input* input2=this->inputs->GetInput(SmbPrecipitationsPresentdayEnum); _assert_(input2);568 Input* input3=NULL;569 Input* input4=NULL;570 /*Recover present day temperature and precipitation*/ 571 TransientInput2 *tinput = this->inputs2->GetTransientInput(SmbTemperaturesPresentdayEnum); _assert_(tinput); 572 TransientInput2 *tinput2 = this->inputs2->GetTransientInput(SmbPrecipitationsPresentdayEnum); _assert_(tinput2); 573 TransientInput2 *tinput3 = NULL; 574 TransientInput2 *tinput4 = NULL; 570 575 int offset; 571 576 572 offset =dynamic_cast<TransientInput*>(input)->GetTimeInputOffset(time_clim);573 time_clim =dynamic_cast<TransientInput*>(input)->GetTimeByOffset(offset-11-fmod(offset-11,12.));577 offset = tinput->GetTimeInputOffset(time_clim); 578 time_clim = tinput->GetTimeByOffset(offset-11-fmod(offset-11,12.)); 574 579 575 580 if(!isTemperatureScaled){ 576 input3=this->inputs->GetInput(SmbTemperaturesReconstructedEnum); _assert_(input3);577 offset =dynamic_cast<TransientInput*>(input3)->GetTimeInputOffset(time_climt);578 time_climt =dynamic_cast<TransientInput*>(input3)->GetTimeByOffset(offset-11-fmod(offset-11,12.));581 tinput3=this->inputs2->GetTransientInput(SmbTemperaturesReconstructedEnum); _assert_(tinput3); 582 offset = tinput3->GetTimeInputOffset(time_climt); 583 time_climt = tinput3->GetTimeByOffset(offset-11-fmod(offset-11,12.)); 579 584 } 580 585 if(!isPrecipScaled){ 581 input4=this->inputs->GetInput(SmbPrecipitationsReconstructedEnum); _assert_(input4);582 offset =dynamic_cast<TransientInput*>(input4)->GetTimeInputOffset(time_climp);583 time_climp =dynamic_cast<TransientInput*>(input4)->GetTimeByOffset(offset-11-fmod(offset-11,12.));586 tinput4=this->inputs2->GetTransientInput(SmbPrecipitationsReconstructedEnum); _assert_(tinput4); 587 offset = tinput4->GetTimeInputOffset(time_climp); 588 time_climp = tinput4->GetTimeByOffset(offset-11-fmod(offset-11,12.)); 584 589 } 585 590 … … 587 592 Gauss* gauss=this->NewGauss(); 588 593 for(int month=0;month<12;month++) { 594 Input2 *input = this->GetInput2(SmbTemperaturesPresentdayEnum,time_clim+month/12.*yts); _assert_(input); 595 Input2 *input2 = this->GetInput2(SmbPrecipitationsPresentdayEnum,time_clim+month/12.*yts); _assert_(input2); 596 Input2 *input3 = NULL; 597 Input2 *input4 = NULL; 598 if(!isTemperatureScaled){ 599 input3=this->GetInput2(SmbTemperaturesReconstructedEnum,time_climt+month/12.*yts); _assert_(input3); 600 } 601 if(!isPrecipScaled){ 602 input4=this->GetInput2(SmbPrecipitationsReconstructedEnum,time_climp+month/12.*yts); 603 } 589 604 for(int iv=0;iv<NUM_VERTICES;iv++) { 590 605 gauss->GaussVertex(iv); 591 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss ,time_clim+month/12.*yts);592 input2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss ,time_clim+month/12.*yts);606 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss); 607 input2->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss); 593 608 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; 594 609 595 610 if(!isTemperatureScaled){ 596 input3->GetInputValue(&TemperaturesReconstructed[iv*12+month],gauss ,time_climt+month/12.*yts);611 input3->GetInputValue(&TemperaturesReconstructed[iv*12+month],gauss); 597 612 } 598 613 if(!isPrecipScaled){ 599 input4->GetInputValue(&PrecipitationsReconstructed[iv*12+month],gauss ,time_climp+month/12.*yts);614 input4->GetInputValue(&PrecipitationsReconstructed[iv*12+month],gauss); 600 615 PrecipitationsReconstructed[iv*12+month]=PrecipitationsReconstructed[iv*12+month]*yts; 601 616 } 602 603 617 } 604 618 } … … 616 630 617 631 /*Update inputs*/ 618 TransientInput* NewTemperatureInput = new TransientInput(SmbMonthlytemperaturesEnum);619 TransientInput* NewPrecipitationInput = new TransientInput(SmbPrecipitationEnum);620 632 for (int imonth=0;imonth<12;imonth++) { 621 633 for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlytemperatures[i*12+imonth]; 622 634 switch(this->ObjectEnum()){ 623 case TriaEnum: NewTemperatureInput->AddTimeInput(new TriaInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 624 case PentaEnum: NewTemperatureInput->AddTimeInput(new PentaInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 625 case TetraEnum: NewTemperatureInput->AddTimeInput(new TetraInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 635 case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 636 case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 626 637 default: _error_("Not implemented yet"); 627 638 } 628 639 for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlyprec[i*12+imonth]/yts; 629 640 switch(this->ObjectEnum()){ 630 case TriaEnum: NewPrecipitationInput->AddTimeInput(new TriaInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 631 case PentaEnum: NewPrecipitationInput->AddTimeInput(new PentaInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 632 case TetraEnum: NewPrecipitationInput->AddTimeInput(new TetraInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 641 case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 642 case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 633 643 default: _error_("Not implemented yet"); 634 644 } 635 645 } 636 NewTemperatureInput->Configure(this->parameters);637 NewPrecipitationInput->Configure(this->parameters);638 639 this->inputs->AddInput(NewTemperatureInput);640 this->inputs->AddInput(NewPrecipitationInput);641 646 642 647 switch(this->ObjectEnum()){ … … 644 649 case PentaEnum: 645 650 case TetraEnum: 646 this-> InputExtrude(SmbMonthlytemperaturesEnum,-1);647 this-> InputExtrude(SmbPrecipitationEnum,-1);651 this->DatasetInputExtrude(SmbMonthlytemperaturesEnum,-1); 652 this->DatasetInputExtrude(SmbPrecipitationEnum,-1); 648 653 break; 649 654 default: _error_("Not implemented yet"); … … 659 664 xDelete<IssmDouble>(PrecipitationsReconstructed); 660 665 xDelete<IssmDouble>(tmp); 661 662 } 663 /*}}}*/666 xDelete<int>(vertexlids); 667 668 } /*}}}*/ 664 669 void Element::SmbGradCompParameterization(void){/*{{{*/ 665 670 … … 744 749 /*Get inputs and parameters*/ 745 750 this->FindParam(&dim,DomainDimensionEnum); 746 Input * vx_input = this->GetInput(VxEnum); _assert_(vx_input);747 Input * vy_input = this->GetInput(VyEnum); _assert_(vy_input);748 Input * vz_input = NULL;751 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 752 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 753 Input2* vz_input = NULL; 749 754 if(dim==3){ 750 vz_input = this->GetInput (VzEnum); _assert_(vz_input);755 vz_input = this->GetInput2(VzEnum); _assert_(vz_input); 751 756 } 752 757 this->GetVerticesCoordinates(&xyz_list); … … 775 780 return divergence; 776 781 }/*}}}*/ 777 void Element::dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input){/*{{{*/782 void Element::dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/ 778 783 779 784 /*Intermediaries*/ … … 812 817 } 813 818 /*}}}*/ 814 void Element::dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input){/*{{{*/819 void Element::dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 815 820 816 821 /*Intermediaries*/ … … 849 854 } 850 855 /*}}}*/ 851 void Element::dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input){/*{{{*/856 void Element::dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 852 857 853 858 /*Intermediaries*/ … … 886 891 } 887 892 /*}}}*/ 888 void Element::dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input){/*{{{*/893 void Element::dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 889 894 890 895 /*Intermediaries*/ … … 917 922 _printf_(" id : "<<this->id <<"\n"); 918 923 _printf_(" sid: "<<this->sid<<"\n"); 924 _printf_(" lid: "<<this->lid<<"\n"); 919 925 if(vertices){ 920 926 const int NUM_VERTICES = this->GetNumberOfVertices(); … … 1119 1125 _assert_(pvalue); 1120 1126 1121 Input *input = this->GetInput(enumtype);1127 Input2 *input = this->GetInput2(enumtype); 1122 1128 int numnodes = this->GetNumberOfNodes(); 1123 1129 … … 1140 1146 _assert_(pvalue); 1141 1147 1142 int numnodes = this->GetNumberOfNodes();1143 Input *input = this->GetInput(enumtype);1148 int numnodes = this->GetNumberOfNodes(); 1149 Input2 *input = this->GetInput2(enumtype); 1144 1150 if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1145 1151 … … 1157 1163 _assert_(pvalue); 1158 1164 1159 int numnodes = this->NumberofNodesVelocity();1160 Input *input = this->GetInput(enumtype);1165 int numnodes = this->NumberofNodesVelocity(); 1166 Input2 *input = this->GetInput2(enumtype); 1161 1167 if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1162 1168 … … 1170 1176 } 1171 1177 /*}}}*/ 1172 void Element::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){/*{{{*/ 1173 1174 /*Recover input*/ 1175 Input* input=this->GetInput(enumtype); 1176 if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1178 void Element::GetInputListOnVertices(IssmDouble* pvalue,ElementInput2* input){/*{{{*/ 1179 1177 1180 /*Fetch number vertices for this element*/ 1178 1181 const int NUM_VERTICES = this->GetNumberOfVertices(); 1179 1182 1180 1183 /*Checks in debugging mode*/ 1184 _assert_(input); 1181 1185 _assert_(pvalue); 1182 1186 … … 1187 1191 input->GetInputValue(&pvalue[iv],gauss); 1188 1192 } 1189 1190 /*clean-up*/1191 1193 delete gauss; 1192 1194 } 1193 1195 /*}}}*/ 1194 void Element::GetInputListOnVerticesAtTime(IssmDouble* pvalue, int enumtype, IssmDouble time){/*{{{*/ 1195 1196 /*Recover input*/ 1197 Input* input=this->GetInput(enumtype); 1198 if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1196 void Element::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){/*{{{*/ 1199 1197 1200 1198 /*Fetch number vertices for this element*/ … … 1204 1202 _assert_(pvalue); 1205 1203 1204 /*Recover input*/ 1205 Input2* input2=this->GetInput2(enumtype); 1206 if(!input2) _error_("input "<<EnumToStringx(enumtype)<<" not found in element"); 1206 1207 /* Start looping on the number of vertices: */ 1207 1208 Gauss*gauss=this->NewGauss(); 1208 1209 for(int iv=0;iv<NUM_VERTICES;iv++){ 1209 1210 gauss->GaussVertex(iv); 1210 input->GetInputValue(&pvalue[iv],gauss,time); 1211 input2->GetInputValue(&pvalue[iv],gauss); 1212 } 1213 delete gauss; 1214 } 1215 /*}}}*/ 1216 void Element::GetInputListOnVerticesAtTime(IssmDouble* pvalue, int enumtype, IssmDouble time){/*{{{*/ 1217 1218 /*Recover input*/ 1219 Input2* input=this->GetInput2(enumtype,time); 1220 if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1221 1222 /*Fetch number vertices for this element*/ 1223 const int NUM_VERTICES = this->GetNumberOfVertices(); 1224 1225 /*Checks in debugging mode*/ 1226 _assert_(pvalue); 1227 1228 /* Start looping on the number of vertices: */ 1229 Gauss*gauss=this->NewGauss(); 1230 for(int iv=0;iv<NUM_VERTICES;iv++){ 1231 gauss->GaussVertex(iv); 1232 input->GetInputValue(&pvalue[iv],gauss); 1211 1233 } 1212 1234 … … 1218 1240 1219 1241 /*Recover input*/ 1220 Input * input=this->GetInput(enumtype);1242 Input2* input=this->GetInput2(enumtype); 1221 1243 1222 1244 /*Checks in debugging mode*/ … … 1267 1289 void Element::GetInputValue(bool* pvalue,int inputenum){/*{{{*/ 1268 1290 1269 Input* input=inputs->GetInput(inputenum); 1291 this->inputs2->GetInputValue(pvalue,inputenum,this->lid); 1292 1293 }/*}}}*/ 1294 void Element::GetInputValue(int* pvalue,int inputenum){/*{{{*/ 1295 this->inputs2->GetInputValue(pvalue,inputenum,this->lid); 1296 }/*}}}*/ 1297 void Element::GetInput2Value(bool* pvalue,int inputenum){/*{{{*/ 1298 1299 this->inputs2->GetInputValue(pvalue,inputenum,this->lid); 1300 1301 }/*}}}*/ 1302 void Element::GetInput2Value(int* pvalue,int inputenum){/*{{{*/ 1303 1304 this->inputs2->GetInputValue(pvalue,inputenum,this->lid); 1305 1306 }/*}}}*/ 1307 void Element::GetInputValue(IssmDouble* pvalue,int inputenum){/*{{{*/ 1308 1309 Input2* input=this->GetInput2(inputenum); 1270 1310 if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element"); 1271 input->GetInputValue(pvalue); 1272 1273 }/*}}}*/ 1274 void Element::GetInputValue(int* pvalue,int inputenum){/*{{{*/ 1275 1276 Input* input=inputs->GetInput(inputenum); 1277 if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element"); 1278 input->GetInputValue(pvalue); 1279 1280 }/*}}}*/ 1281 void Element::GetInputValue(IssmDouble* pvalue,int inputenum){/*{{{*/ 1282 1283 Input* input=inputs->GetInput(inputenum); 1284 if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element"); 1285 input->GetInputValue(pvalue); 1311 //input->GetInputValue(pvalue); 1312 _error_("not supported yet (Trying to fetch "<<EnumToStringx(inputenum)<<")"); 1286 1313 1287 1314 }/*}}}*/ 1288 1315 void Element::GetInputValue(IssmDouble* pvalue,Gauss* gauss,int inputenum){/*{{{*/ 1289 1316 1290 Input * input=inputs->GetInput(inputenum);1317 Input2* input=this->GetInput2(inputenum); 1291 1318 if(!input) _error_("Input " << EnumToStringx(inputenum) << " not found in element"); 1292 1319 input->GetInputValue(pvalue,gauss); … … 1404 1431 1405 1432 /*Get inputs*/ 1406 Input * enum_input=inputs->GetInput(enum_type); _assert_(enum_input);1433 Input2* enum_input=this->GetInput2(enum_type); _assert_(enum_input); 1407 1434 1408 1435 /*Ok, we have the values, fill in the array: */ … … 1450 1477 IssmDouble value; 1451 1478 IssmDouble* values = NULL; 1452 Input *input = NULL;1479 Input2* input = NULL; 1453 1480 1454 1481 switch(type){ 1455 1482 case ElementSIdEnum: 1456 input= inputs->GetInput(input_enum); _assert_(input);1483 input=this->GetInput2(input_enum); _assert_(input); 1457 1484 input->GetInputAverage(&value); 1458 1485 vector->SetValue(this->sid,value,INS_VAL); … … 1672 1699 /*}}}*/ 1673 1700 bool Element::HasNodeOnBase(){/*{{{*/ 1674 return (this->inputs->Max(MeshVertexonbaseEnum)>0.); 1701 Input2* input=this->GetInput2(MeshVertexonbaseEnum); _assert_(input); 1702 return (input->GetInputMax()>0.); 1675 1703 }/*}}}*/ 1676 1704 bool Element::HasNodeOnSurface(){/*{{{*/ 1677 return (this->inputs->Max(MeshVertexonsurfaceEnum)>0.); 1705 Input2* input=this->GetInput2(MeshVertexonsurfaceEnum); _assert_(input); 1706 return (input->GetInputMax()>0.); 1678 1707 }/*}}}*/ 1679 1708 IssmDouble Element::IceMass(bool scaled){/*{{{*/ … … 1738 1767 } 1739 1768 /*}}}*/ 1740 void Element::InputCreate(IssmDouble* vector,I oModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){/*{{{*/1769 void Element::InputCreate(IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code){/*{{{*/ 1741 1770 1742 1771 /*Intermediaries*/ … … 1748 1777 const int NUM_VERTICES = this->GetNumberOfVertices(); 1749 1778 1750 int *vertexids = xNew<int>(NUM_VERTICES); 1751 IssmDouble *values = xNew<IssmDouble>(NUM_VERTICES); 1779 int *vertexids = xNew<int>(NUM_VERTICES); 1780 int *vertexlids = xNew<int>(NUM_VERTICES); 1781 IssmDouble *values = xNew<IssmDouble>(NUM_VERTICES); 1752 1782 1753 1783 /*Recover vertices ids needed to initialize inputs*/ 1754 1784 _assert_(iomodel->elements); 1755 1785 for(i=0;i<NUM_VERTICES;i++){ 1756 vertexids[i]=reCast<int>(iomodel->elements[NUM_VERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 1786 vertexids[i] =reCast<int>(iomodel->elements[NUM_VERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 1787 vertexlids[i]=iomodel->my_vertices_lids[vertexids[i]-1]; 1757 1788 } 1758 1789 … … 1760 1791 if(M==1){ 1761 1792 values[0]=vector[0]; 1762 this-> AddInput(vector_enum,values,P0Enum);1793 this->SetElementInput(inputs2,vector_enum,vector[0]); 1763 1794 } 1764 1795 else if(M==iomodel->numberofvertices){ 1765 1796 for(i=0;i<NUM_VERTICES;i++) values[i]=vector[vertexids[i]-1]; 1766 this-> AddInput(vector_enum,values,P1Enum);1797 this->SetElementInput(inputs2,NUM_VERTICES,vertexlids,values,vector_enum); 1767 1798 } 1768 1799 else if(M==iomodel->numberofvertices+1){ … … 1770 1801 IssmDouble* times = xNew<IssmDouble>(N); 1771 1802 for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t]; 1772 TransientInput* transientinput=new TransientInput(vector_enum,times,N); 1803 inputs2->SetTransientInput(vector_enum,times,N); 1804 TransientInput2* transientinput = inputs2->GetTransientInput(vector_enum); 1773 1805 for(t=0;t<N;t++){ 1774 1806 for(i=0;i<NUM_VERTICES;i++) values[i]=vector[N*(vertexids[i]-1)+t]; 1775 1807 switch(this->ObjectEnum()){ 1776 case TriaEnum: transientinput->AddTimeInput(new TriaInput( vector_enum,values,P1Enum)); break; 1777 case PentaEnum: transientinput->AddTimeInput(new PentaInput(vector_enum,values,P1Enum)); break; 1778 case TetraEnum: transientinput->AddTimeInput(new TetraInput(vector_enum,values,P1Enum)); break; 1808 case TriaEnum: transientinput->AddTriaTimeInput( t,NUM_VERTICES,vertexlids,values,P1Enum); break; 1809 case PentaEnum: transientinput->AddPentaTimeInput(t,NUM_VERTICES,vertexlids,values,P1Enum); break; 1779 1810 default: _error_("Not implemented yet"); 1780 1811 } 1781 1812 } 1782 this->inputs->AddInput(transientinput);1783 1813 xDelete<IssmDouble>(times); 1784 1814 } … … 1790 1820 for(int j=0;j<N;j++) values[j]=vector[this->Sid()*N+j]; 1791 1821 1792 if (N==this->GetNumberOfNodes(P1Enum) ) this->AddInput (vector_enum,values,P1Enum);1793 else if(N==this->GetNumberOfNodes(P0Enum) ) this->AddInput (vector_enum,values,P0Enum);1794 else if(N==this->GetNumberOfNodes(P1xP2Enum)) this->AddInput (vector_enum,values,P1xP2Enum);1795 else if(N==this->GetNumberOfNodes(P1xP3Enum)) this->AddInput (vector_enum,values,P1xP3Enum);1822 if (N==this->GetNumberOfNodes(P1Enum) ) this->AddInput2(vector_enum,values,P1Enum); 1823 else if(N==this->GetNumberOfNodes(P0Enum) ) this->AddInput2(vector_enum,values,P0Enum); 1824 else if(N==this->GetNumberOfNodes(P1xP2Enum)) this->AddInput2(vector_enum,values,P1xP2Enum); 1825 else if(N==this->GetNumberOfNodes(P1xP3Enum)) this->AddInput2(vector_enum,values,P1xP3Enum); 1796 1826 else _error_("Patch interpolation not supported yet"); 1797 1827 … … 1803 1833 xDelete<IssmDouble>(values); 1804 1834 xDelete<int>(vertexids); 1835 xDelete<int>(vertexlids); 1805 1836 } 1806 1837 else if(vector_type==2){ //element vector … … 1811 1842 if(M==iomodel->numberofelements){ 1812 1843 if (code==5){ //boolean 1813 this-> inputs->AddInput(new BoolInput(vector_enum,reCast<bool>(vector[this->Sid()])));1844 this->SetBoolInput(inputs2,vector_enum,reCast<bool>(vector[this->Sid()])); 1814 1845 } 1815 1846 else if (code==6){ //integer 1816 this-> inputs->AddInput(new IntInput(vector_enum,reCast<int>(vector[this->Sid()])));1847 this->SetIntInput(inputs2,vector_enum,reCast<int>(vector[this->Sid()])); 1817 1848 } 1818 1849 else if (code==7){ //IssmDouble 1819 this-> inputs->AddInput(new DoubleInput(vector_enum,vector[this->Sid()]));1850 this->SetElementInput(inputs2,vector_enum,vector[this->Sid()]); 1820 1851 } 1821 1852 else _error_("could not recognize nature of vector from code " << code); … … 1825 1856 IssmDouble* times = xNew<IssmDouble>(N); 1826 1857 for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t]; 1827 TransientInput* transientinput=newTransientInput(vector_enum,times,N);1828 Tr iaInput* bof=NULL;1858 inputs2->SetTransientInput(vector_enum,times,N); 1859 TransientInput2* transientinput = inputs2->GetTransientInput(vector_enum); 1829 1860 for(t=0;t<N;t++){ 1830 1861 value=vector[N*this->Sid()+t]; 1831 1862 switch(this->ObjectEnum()){ 1832 case TriaEnum: transientinput->AddTimeInput(new TriaInput( vector_enum,&value,P0Enum)); break; 1833 case PentaEnum: transientinput->AddTimeInput(new PentaInput(vector_enum,&value,P0Enum)); break; 1834 case TetraEnum: transientinput->AddTimeInput(new TetraInput(vector_enum,&value,P0Enum)); break; 1863 case TriaEnum: transientinput->AddTriaTimeInput( t,1,&(this->lid),&value,P0Enum); break; 1864 case PentaEnum: transientinput->AddPentaTimeInput(t,1,&(this->lid),&value,P0Enum); break; 1835 1865 default: _error_("Not implemented yet"); 1836 1866 } 1837 1867 } 1838 this->inputs->AddInput(transientinput);1839 1868 xDelete<IssmDouble>(times); 1840 1869 } 1841 1870 else _error_("element vector is either numberofelements or numberofelements+1 long. Field provided (" << EnumToStringx(vector_enum) << ") is " << M << " long"); 1842 1871 } 1843 else if(vector_type==3){ // element vector1872 else if(vector_type==3){ //Double array matrix 1844 1873 1845 1874 /*For right now we are static */ 1846 1875 if(M==iomodel->numberofelements){ 1847 /*create transient input: */ 1848 IssmDouble* layers = xNewZeroInit<IssmDouble>(N);; 1876 IssmDouble* layers = xNewZeroInit<IssmDouble>(N); 1849 1877 for(t=0;t<N;t++) layers[t] = vector[N*this->Sid()+t]; 1850 DoubleArrayInput* arrayinput=new DoubleArrayInput(vector_enum,layers,N); 1851 this->inputs->AddInput(arrayinput); 1878 inputs2->SetArrayInput(vector_enum,this->lid,layers,N); 1852 1879 xDelete<IssmDouble>(layers); 1853 1880 } … … 1857 1884 } 1858 1885 /*}}}*/ 1859 void Element::ControlInputCreate(IssmDouble* vector,IssmDouble* min_vector,IssmDouble* max_vector,I oModel* iomodel,int M,int N,int input_enum,int id){/*{{{*/1886 void Element::ControlInputCreate(IssmDouble* vector,IssmDouble* min_vector,IssmDouble* max_vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id){/*{{{*/ 1860 1887 1861 1888 /*Intermediaries*/ 1862 const int NUM_VERTICES= this->GetNumberOfVertices();1863 1864 int *vertexids = xNew<int>( NUM_VERTICES);1865 IssmDouble *values = xNew<IssmDouble>( NUM_VERTICES);1866 IssmDouble *values_min = xNew<IssmDouble>( NUM_VERTICES);1867 IssmDouble *values_max = xNew<IssmDouble>( NUM_VERTICES);1889 const int numvertices = this->GetNumberOfVertices(); 1890 1891 int *vertexids = xNew<int>(numvertices); 1892 IssmDouble *values = xNew<IssmDouble>(numvertices); 1893 IssmDouble *values_min = xNew<IssmDouble>(numvertices); 1894 IssmDouble *values_max = xNew<IssmDouble>(numvertices); 1868 1895 1869 1896 /*Some sanity checks*/ … … 1872 1899 _assert_(max_vector); 1873 1900 1874 /*For now we only support nodal vectors*/1875 //if(M!=iomodel->numberofvertices) _error_("not supported");1876 //if(N!=1) _error_("not supported");1877 1878 1901 /*Recover vertices ids needed to initialize inputs*/ 1879 1902 _assert_(iomodel->elements); 1880 for(int i=0;i< NUM_VERTICES;i++){1881 vertexids[i]=reCast<int>(iomodel->elements[ NUM_VERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab1903 for(int i=0;i<numvertices;i++){ 1904 vertexids[i]=reCast<int>(iomodel->elements[numvertices*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 1882 1905 } 1883 1906 1884 1907 /*Are we in transient or static? */ 1885 if(M==iomodel->numberofvertices){ 1886 for(int i=0;i<NUM_VERTICES;i++){ 1887 values[i]=vector[vertexids[i]-1]; 1888 values_min[i] = min_vector[vertexids[i]-1]; 1889 values_max[i] = max_vector[vertexids[i]-1]; 1890 } 1891 this->AddControlInput(input_enum,values,values_min,values_max,P1Enum,id); 1892 } 1893 1894 else if(M==iomodel->numberofvertices+1){ 1908 if(M==iomodel->numberofvertices && N==1){ 1909 for(int i=0;i<numvertices;i++){ 1910 values[i] = vector[vertexids[i]-1]; 1911 values_min[i] = scale*min_vector[vertexids[i]-1]; 1912 values_max[i] = scale*max_vector[vertexids[i]-1]; 1913 } 1914 this->AddControlInput(input_enum,inputs2,iomodel,values,values_min,values_max,P1Enum,id); 1915 } 1916 1917 else if(M==iomodel->numberofvertices+1 && N>1){ 1918 _error_("not supported tet"); 1895 1919 /*create transient input: */ 1896 1920 IssmDouble* times = xNew<IssmDouble>(N); … … 1902 1926 TransientInput* grad_input = new TransientInput(ControlInputGradEnum); 1903 1927 for(int t=0;t<N;t++){ 1904 for(int i=0;i< NUM_VERTICES;i++){1928 for(int i=0;i<numvertices;i++){ 1905 1929 values[i]=vector[N*(vertexids[i]-1)+t]; 1906 1930 values_min[i] = min_vector[N*(vertexids[i]-1)+t]; … … 1933 1957 /*clean up*/ 1934 1958 xDelete<IssmDouble>(values); 1959 xDelete<IssmDouble>(values_min); 1960 xDelete<IssmDouble>(values_max); 1935 1961 xDelete<int>(vertexids); 1936 1962 } 1937 1963 /*}}}*/ 1938 void Element::DatasetInputAdd(int enum_type,IssmDouble* vector,I oModel* iomodel,int M,int N,int vector_type,int input_enum,int code,int input_id){/*{{{*/1964 void Element::DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int input_enum,int code,int input_id){/*{{{*/ 1939 1965 /*enum_type: the name of the DatasetInput (eg Outputdefinition1) 1940 1966 * vector: information being stored (eg observations) … … 1945 1971 1946 1972 /*Intermediaries*/ 1947 int i,t; 1948 DatasetInput* datasetinput = NULL; 1949 1950 /*Get input if it already exists*/ 1951 Input* tempinput = GetInput(enum_type); 1952 if(tempinput){ 1953 /*Cast it to a Datasetinput*/ 1954 if(tempinput->ObjectEnum()!=DatasetInputEnum) _error_("don't know what to do"); 1955 datasetinput = (DatasetInput*)tempinput; 1956 } 1957 else{ 1958 datasetinput=new DatasetInput(enum_type); 1959 this->inputs->AddInput(datasetinput); 1960 } 1973 int i,t; 1961 1974 1962 1975 /*Branch on type of vector: nodal or elementary: */ … … 1965 1978 const int NUM_VERTICES = this->GetNumberOfVertices(); 1966 1979 1967 int *vertexids = xNew<int>(NUM_VERTICES); 1968 IssmDouble *values = xNew<IssmDouble>(NUM_VERTICES); 1980 int *vertexids = xNew<int>(NUM_VERTICES); 1981 int *vertexlids = xNew<int>(NUM_VERTICES); 1982 IssmDouble *values = xNew<IssmDouble>(NUM_VERTICES); 1969 1983 1970 1984 /*Recover vertices ids needed to initialize inputs*/ 1971 1985 _assert_(iomodel->elements); 1972 1986 for(i=0;i<NUM_VERTICES;i++){ 1973 vertexids[i]=reCast<int>(iomodel->elements[NUM_VERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 1987 vertexids[i] =reCast<int>(iomodel->elements[NUM_VERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 1988 vertexlids[i]=iomodel->my_vertices_lids[vertexids[i]-1]; 1974 1989 } 1975 1990 … … 1977 1992 if(M==1){ 1978 1993 values[0]=vector[0]; 1979 switch(this->ObjectEnum()){ 1980 case TriaEnum: datasetinput->AddInput(new TriaInput(input_enum,values,P0Enum),input_id); break; 1981 case PentaEnum: datasetinput->AddInput(new PentaInput(input_enum,values,P0Enum),input_id); break; 1982 case TetraEnum: datasetinput->AddInput(new TetraInput(input_enum,values,P0Enum),input_id); break; 1983 default: _error_("Not implemented yet"); 1984 } 1994 //this->AddInput2(vector_enum,values,P0Enum); 1995 _error_("not implemented yet"); 1985 1996 } 1986 1997 else if(M==iomodel->numberofvertices){ 1987 1998 for(i=0;i<NUM_VERTICES;i++) values[i]=vector[vertexids[i]-1]; 1988 1999 switch(this->ObjectEnum()){ 1989 case TriaEnum: datasetinput->AddInput(new TriaInput(input_enum,values,P1Enum),input_id); break;1990 case PentaEnum: datasetinput->AddInput(new PentaInput(input_enum,values,P1Enum),input_id); break;1991 case TetraEnum: datasetinput->AddInput(new TetraInput(input_enum,values,P1Enum),input_id); break;1992 default: _error_("Not implemented yet");1993 }}2000 case TriaEnum: inputs2->SetTriaDatasetInput(enum_type,input_id,P1Enum,NUM_VERTICES,vertexlids,values); break; 2001 case PentaEnum: inputs2->SetPentaDatasetInput(enum_type,input_id,P1Enum,NUM_VERTICES,vertexlids,values); break; 2002 default: _error_("Not implemented yet for "<<this->ObjectEnum()); 2003 } 2004 } 1994 2005 else if(M==iomodel->numberofvertices+1){ 1995 2006 /*create transient input: */ 1996 2007 IssmDouble* times = xNew<IssmDouble>(N); 1997 2008 for(t=0;t<N;t++) times[t] = vector[(M-1)*N+t]; 1998 TransientInput * transientinput=new TransientInput(input_enum,times,N);2009 TransientInput2* transientinput = inputs2->SetDatasetTransientInput(enum_type,input_id,times,N); 1999 2010 for(t=0;t<N;t++){ 2000 2011 for(i=0;i<NUM_VERTICES;i++) values[i]=vector[N*(vertexids[i]-1)+t]; 2001 2012 switch(this->ObjectEnum()){ 2002 case TriaEnum: transientinput->AddTimeInput(new TriaInput( input_enum,values,P1Enum)); break; 2003 case PentaEnum: transientinput->AddTimeInput(new PentaInput(input_enum,values,P1Enum)); break; 2004 case TetraEnum: transientinput->AddTimeInput(new TetraInput(input_enum,values,P1Enum)); break; 2013 case TriaEnum: transientinput->AddTriaTimeInput( t,NUM_VERTICES,vertexlids,values,P1Enum); break; 2014 case PentaEnum: transientinput->AddPentaTimeInput(t,NUM_VERTICES,vertexlids,values,P1Enum); break; 2005 2015 default: _error_("Not implemented yet"); 2006 2016 } 2007 2017 } 2008 datasetinput->AddInput(transientinput,input_id);2009 2018 xDelete<IssmDouble>(times); 2010 2019 } 2011 else if(M==iomodel->numberofelements){2012 2013 /*This is a Patch!*/2014 xDelete<IssmDouble>(values);2015 values = xNew<IssmDouble>(N);2016 for(int j=0;j<N;j++) values[j]=vector[this->Sid()*N+j];2017 2018 if (N==this->GetNumberOfNodes(P1Enum) ){2019 switch(this->ObjectEnum()){2020 case TriaEnum: datasetinput->AddInput(new TriaInput(input_enum,values,P1Enum),input_id); break;2021 case PentaEnum: datasetinput->AddInput(new PentaInput(input_enum,values,P1Enum),input_id); break;2022 case TetraEnum: datasetinput->AddInput(new TetraInput(input_enum,values,P1Enum),input_id); break;2023 default: _error_("Not implemented yet");2024 }2025 }2026 else if(N==this->GetNumberOfNodes(P0Enum) ){2027 switch(this->ObjectEnum()){2028 case TriaEnum: datasetinput->AddInput(new TriaInput(input_enum,values,P0Enum),input_id); break;2029 case PentaEnum: datasetinput->AddInput(new PentaInput(input_enum,values,P0Enum),input_id); break;2030 case TetraEnum: datasetinput->AddInput(new TetraInput(input_enum,values,P0Enum),input_id); break;2031 default: _error_("Not implemented yet");2032 }2033 }2034 else if(N==this->GetNumberOfNodes(P1xP2Enum)){2035 switch(this->ObjectEnum()){2036 case TriaEnum: datasetinput->AddInput(new TriaInput(input_enum,values,P1xP2Enum),input_id); break;2037 case PentaEnum: datasetinput->AddInput(new PentaInput(input_enum,values,P1xP2Enum),input_id); break;2038 case TetraEnum: datasetinput->AddInput(new TetraInput(input_enum,values,P1xP2Enum),input_id); break;2039 default: _error_("Not implemented yet");2040 }2041 }2042 else if(N==this->GetNumberOfNodes(P1xP3Enum)) {2043 switch(this->ObjectEnum()){2044 case TriaEnum: datasetinput->AddInput(new TriaInput(input_enum,values,P1xP3Enum),input_id); break;2045 case PentaEnum: datasetinput->AddInput(new PentaInput(input_enum,values,P1xP3Enum),input_id); break;2046 case TetraEnum: datasetinput->AddInput(new TetraInput(input_enum,values,P1xP3Enum),input_id); break;2047 default: _error_("Not implemented yet");2048 }2049 }2050 else _error_("Patch interpolation not supported yet");2051 2052 }2053 2020 else{ 2054 _error_("no dal vector is either numberofvertices or numberofvertices+1 long. Field provided (" << EnumToStringx(input_enum) << ") is " << M << " long");2021 _error_("not implemented yet (M="<<M<<")"); 2055 2022 } 2056 2023 2057 2024 xDelete<IssmDouble>(values); 2058 2025 xDelete<int>(vertexids); 2026 xDelete<int>(vertexlids); 2059 2027 } 2060 2028 else if(vector_type==2){ //element vector 2029 _error_("not supported"); 2061 2030 2062 2031 IssmDouble value; … … 2065 2034 if(M==iomodel->numberofelements){ 2066 2035 if (code==5){ //boolean 2067 datasetinput->AddInput(new BoolInput(input_enum,reCast<bool>(vector[this->Sid()])),input_id); 2036 _error_("not implemented"); 2037 //datasetinput->AddInput(new BoolInput(input_enum,reCast<bool>(vector[this->Sid()])),input_id); 2068 2038 } 2069 2039 else if (code==6){ //integer 2070 datasetinput->AddInput(new IntInput(input_enum,reCast<int>(vector[this->Sid()])),input_id); 2040 _error_("not implemented"); 2041 //datasetinput->AddInput(new IntInput(input_enum,reCast<int>(vector[this->Sid()])),input_id); 2071 2042 } 2072 2043 else if (code==7){ //IssmDouble 2073 datasetinput->AddInput(new DoubleInput(input_enum,vector[this->Sid()]),input_id); 2044 _error_("not implemented"); 2045 //datasetinput->AddInput(new DoubleInput(input_enum,vector[this->Sid()]),input_id); 2074 2046 } 2075 2047 else _error_("could not recognize nature of vector from code " << code); 2076 2048 } 2077 2049 else if(M==iomodel->numberofelements+1){ 2050 _error_("not supported"); 2078 2051 /*create transient input: */ 2079 2052 IssmDouble* times = xNew<IssmDouble>(N); … … 2090 2063 } 2091 2064 } 2092 datasetinput->AddInput(transientinput,input_id);2065 //datasetinput->AddInput(transientinput,input_id); 2093 2066 xDelete<IssmDouble>(times); 2094 2067 } … … 2096 2069 } 2097 2070 else if(vector_type==3){ //element vector 2071 _error_("not supported"); 2098 2072 2099 2073 /*For right now we are static */ … … 2103 2077 for(t=0;t<N;t++) layers[t] = vector[N*this->Sid()+t]; 2104 2078 DoubleArrayInput* arrayinput=new DoubleArrayInput(input_enum,layers,N); 2105 datasetinput->AddInput(arrayinput,input_id);2079 //datasetinput->AddInput(arrayinput,input_id); 2106 2080 xDelete<IssmDouble>(layers); 2107 2081 } 2108 2082 else _error_("element vector is either numberofelements or numberofelements+1 long. Field provided (" << EnumToStringx(input_enum) << ") is " << M << " long"); 2109 2083 } 2110 else _error_("Cannot add input for vector type " << vector_type << " (not supported)"); 2111 } 2112 /*}}}*/ 2113 void Element::InputDuplicate(int original_enum,int new_enum){/*{{{*/ 2114 2115 if(!IsInputEnum(original_enum)) _error_("Enum "<<EnumToStringx(original_enum)<<" is not in IsInput"); 2116 2117 /*Call inputs method*/ 2118 this->inputs->DuplicateInput(original_enum,new_enum); 2119 2084 else{ 2085 _error_("Cannot add input for vector type " << vector_type << " (not supported)"); 2086 } 2120 2087 } 2121 2088 /*}}}*/ … … 2126 2093 2127 2094 /*update input*/ 2128 this-> inputs->AddInput(new IntInput(name,constant));2095 this->SetBoolInput(this->inputs2,name,constant); 2129 2096 } 2130 2097 /*}}}*/ … … 2135 2102 2136 2103 /*update input*/ 2137 this-> inputs->AddInput(new DoubleInput(name,constant));2104 this->SetElementInput(name,constant); 2138 2105 } 2139 2106 /*}}}*/ … … 2144 2111 2145 2112 /*update input*/ 2146 this->inputs->AddInput(new BoolInput(name,constant)); 2147 } 2148 /*}}}*/ 2113 this->SetBoolInput(this->inputs2,name,constant); 2114 } 2115 /*}}}*/ 2116 bool Element::IsOnSurface(){/*{{{*/ 2117 return this->isonsurface; 2118 }/*}}}*/ 2119 bool Element::IsOnBase(){/*{{{*/ 2120 return this->isonbase; 2121 }/*}}}*/ 2149 2122 bool Element::IsFloating(){/*{{{*/ 2150 2123 … … 2153 2126 parameters->FindParam(&migration_style,GroundinglineMigrationEnum); 2154 2127 2128 Input2* input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(input); 2129 2155 2130 if(migration_style==SubelementMigrationEnum){ //Floating if all nodes are floating 2156 if( this->inputs->Max(MaskGroundediceLevelsetEnum) <= 0.) shelf=true;2131 if(input->GetInputMax() <= 0.) shelf=true; 2157 2132 else shelf=false; 2158 2133 } 2159 2134 else if(migration_style==ContactEnum){ 2160 if( this->inputs->Min(MaskGroundediceLevelsetEnum) < 0.) shelf=true;2135 if(input->GetInputMin() < 0.) shelf=true; 2161 2136 else shelf=false; 2162 2137 } 2163 2138 else if(migration_style==NoneEnum || migration_style==AggressiveMigrationEnum || migration_style==SoftMigrationEnum || migration_style==GroundingOnlyEnum){ //Floating if all nodes are floating 2164 if( this->inputs->Min(MaskGroundediceLevelsetEnum) > 0.) shelf=false;2139 if(input->GetInputMin() > 0.) shelf=false; 2165 2140 else shelf=true; 2166 2141 } … … 2171 2146 bool Element::IsGrounded(){/*{{{*/ 2172 2147 2173 if(this->inputs->Max(MaskGroundediceLevelsetEnum) > 0.){ 2148 Input2* input=this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(input); 2149 if(input->GetInputMax() > 0.){ 2174 2150 return true; 2175 2151 } … … 2179 2155 }/*}}}*/ 2180 2156 bool Element::IsIceInElement(){/*{{{*/ 2181 return (this->inputs->Min(MaskIceLevelsetEnum)<0.); 2157 Input2* input=this->GetInput2(MaskIceLevelsetEnum); _assert_(input); 2158 return (input->GetInputMin()<0.); 2182 2159 } 2183 2160 /*}}}*/ 2184 2161 bool Element::IsLandInElement(){/*{{{*/ 2185 return (this->inputs->Max(MaskLandLevelsetEnum)>0.); 2162 Input2* input=this->GetInput2(MaskLandLevelsetEnum); _assert_(input); 2163 return (input->GetInputMax()>0.); 2186 2164 } 2187 2165 /*}}}*/ … … 2211 2189 2212 2190 /* Get parameters and inputs */ 2213 this-> inputs->GetInputValue(&basinid,BasalforcingsIsmip6BasinIdEnum);2191 this->GetInputValue(&basinid,BasalforcingsIsmip6BasinIdEnum); 2214 2192 this->parameters->FindParam(&num_basins,BasalforcingsIsmip6NumBasinsEnum); 2215 2193 this->parameters->FindParam(&gamma0,BasalforcingsIsmip6Gamma0Enum); … … 2219 2197 this->parameters->FindParam(&mean_tf,&N,BasalforcingsIsmip6AverageTfEnum); _assert_(N==num_basins); 2220 2198 } 2221 Input * tf_input = this->GetInput(BasalforcingsIsmip6TfShelfEnum); _assert_(tf_input);2222 Input * meltanomaly_input = this->GetInput(BasalforcingsIsmip6MeltAnomalyEnum); _assert_(meltanomaly_input);2199 Input2* tf_input = this->GetInput2(BasalforcingsIsmip6TfShelfEnum); _assert_(tf_input); 2200 Input2* meltanomaly_input = this->GetInput2(BasalforcingsIsmip6MeltAnomalyEnum); _assert_(meltanomaly_input); 2223 2201 delta_t_basin = delta_t[basinid]; 2224 2202 if(!islocal) mean_tf_basin = mean_tf[basinid]; … … 2241 2219 2242 2220 /*Return basal melt rate*/ 2243 this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,basalmeltrate,P1Enum);2221 this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrate,P1DGEnum); 2244 2222 2245 2223 /*Cleanup and return*/ … … 2252 2230 }/*}}}*/ 2253 2231 bool Element::IsWaterInElement(){/*{{{*/ 2254 return (this->inputs->Max(MaskOceanLevelsetEnum)>0.); 2232 Input2* input=this->GetInput2(MaskOceanLevelsetEnum); _assert_(input); 2233 return (input->GetInputMax()>0.); 2255 2234 } 2256 2235 /*}}}*/ … … 2285 2264 } 2286 2265 2287 this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);2266 this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2288 2267 xDelete<IssmDouble>(base); 2289 2268 xDelete<IssmDouble>(values); … … 2311 2290 } 2312 2291 2313 this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);2292 this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2314 2293 xDelete<IssmDouble>(base); 2315 2294 xDelete<IssmDouble>(deepwaterel); … … 2361 2340 } 2362 2341 2363 this->AddInput (BasalforcingsGeothermalfluxEnum,values,P1Enum);2342 this->AddInput2(BasalforcingsGeothermalfluxEnum,values,P1Enum); 2364 2343 xDelete<IssmDouble>(xyz_list); 2365 2344 xDelete<IssmDouble>(values); … … 2378 2357 MARSHALLING(id); 2379 2358 MARSHALLING(sid); 2359 MARSHALLING(lid); 2380 2360 MARSHALLING(element_type); 2381 2361 MARSHALLING_DYNAMIC(element_type_list,int,numanalyses); … … 2460 2440 } 2461 2441 } 2462 this->AddInput (MaskGroundediceLevelsetEnum,&phi[0],P1Enum);2442 this->AddInput2(MaskGroundediceLevelsetEnum,&phi[0],P1Enum); 2463 2443 2464 2444 /*Update inputs*/ 2465 this->AddInput (SurfaceEnum,&s[0],P1Enum);2466 this->AddInput (BaseEnum,&b[0],P1Enum);2445 this->AddInput2(SurfaceEnum,&s[0],P1Enum); 2446 this->AddInput2(BaseEnum,&b[0],P1Enum); 2467 2447 2468 2448 /*Delete*/ … … 2500 2480 } 2501 2481 2502 this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);2482 this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2503 2483 xDelete<IssmDouble>(base); 2504 2484 xDelete<IssmDouble>(bed); … … 2539 2519 } 2540 2520 2541 this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);2521 this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2542 2522 xDelete<IssmDouble>(base); 2543 2523 xDelete<IssmDouble>(values); … … 2554 2534 2555 2535 int i; 2536 int* vertexlids=xNew<int>(NUM_VERTICES); 2556 2537 IssmDouble* monthlytemperatures=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); 2557 2538 IssmDouble* monthlyprec=xNew<IssmDouble>(NUM_VERTICES_MONTHS_PER_YEAR); … … 2562 2543 IssmDouble* tmp=xNew<IssmDouble>(NUM_VERTICES); 2563 2544 IssmDouble TdiffTime,PfacTime; 2545 2546 /*Recover parameters*/ 2564 2547 IssmDouble time,yts,time_yr; 2565 2548 this->parameters->FindParam(&time,TimeEnum); 2566 2549 this->parameters->FindParam(&yts,ConstantsYtsEnum); 2550 this->GetVerticesLidList(vertexlids); 2567 2551 time_yr=floor(time/yts)*yts; 2568 2552 2569 /*Recover present day temperature and precipitation*/2570 Input* input=this->inputs->GetInput(SmbTemperaturesPresentdayEnum); _assert_(input);2571 Input* input2=this->inputs->GetInput(SmbTemperaturesLgmEnum); _assert_(input2);2572 Input* input3=this->inputs->GetInput(SmbPrecipitationsPresentdayEnum); _assert_(input3);2573 Input* input4=this->inputs->GetInput(SmbPrecipitationsLgmEnum); _assert_(input4);2574 2553 /*loop over vertices: */ 2575 2554 Gauss* gauss=this->NewGauss(); 2576 2555 for(int month=0;month<12;month++) { 2556 /*Recover present day temperature and precipitation*/ 2557 Input2* input =this->GetInput2(SmbTemperaturesPresentdayEnum,month/12.*yts); _assert_(input); 2558 Input2* input2=this->GetInput2(SmbTemperaturesLgmEnum,month/12.*yts); _assert_(input2); 2559 Input2* input3=this->GetInput2(SmbPrecipitationsPresentdayEnum,month/12.*yts); _assert_(input3); 2560 Input2* input4=this->GetInput2(SmbPrecipitationsLgmEnum,month/12.*yts); _assert_(input4); 2577 2561 for(int iv=0;iv<NUM_VERTICES;iv++) { 2578 2562 gauss->GaussVertex(iv); 2579 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss ,month/12.*yts);2580 input2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss ,month/12.*yts);2581 input3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss ,month/12.*yts);2582 input4->GetInputValue(&PrecipitationsLgm[iv*12+month],gauss ,month/12.*yts);2563 input->GetInputValue(&TemperaturesPresentday[iv*12+month],gauss); 2564 input2->GetInputValue(&TemperaturesLgm[iv*12+month],gauss); 2565 input3->GetInputValue(&PrecipitationsPresentday[iv*12+month],gauss); 2566 input4->GetInputValue(&PrecipitationsLgm[iv*12+month],gauss); 2583 2567 2584 2568 PrecipitationsPresentday[iv*12+month]=PrecipitationsPresentday[iv*12+month]*yts; … … 2600 2584 2601 2585 /*Update inputs*/ 2602 TransientInput* NewTemperatureInput = new TransientInput(SmbMonthlytemperaturesEnum);2603 TransientInput* NewPrecipitationInput = new TransientInput(SmbPrecipitationEnum);2604 2586 for (int imonth=0;imonth<12;imonth++) { 2605 2587 for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlytemperatures[i*12+imonth]; 2606 2588 switch(this->ObjectEnum()){ 2607 case TriaEnum: NewTemperatureInput->AddTimeInput(new TriaInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 2608 case PentaEnum: NewTemperatureInput->AddTimeInput(new PentaInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 2609 case TetraEnum: NewTemperatureInput->AddTimeInput(new TetraInput(SmbMonthlytemperaturesEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 2589 case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 2590 case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbMonthlytemperaturesEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 2610 2591 default: _error_("Not implemented yet"); 2611 2592 } 2612 2593 for(i=0;i<NUM_VERTICES;i++) tmp[i]=monthlyprec[i*12+imonth]/yts; 2613 2594 switch(this->ObjectEnum()){ 2614 case TriaEnum: NewPrecipitationInput->AddTimeInput(new TriaInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 2615 case PentaEnum: NewPrecipitationInput->AddTimeInput(new PentaInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 2616 case TetraEnum: NewPrecipitationInput->AddTimeInput(new TetraInput(SmbPrecipitationEnum,&tmp[0],P1Enum),time_yr+imonth/12.*yts); break; 2595 case TriaEnum: this->inputs2->SetTriaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 2596 case PentaEnum: this->inputs2->SetPentaDatasetInput(SmbPrecipitationEnum,imonth,P1Enum,NUM_VERTICES,vertexlids,tmp); break; 2617 2597 default: _error_("Not implemented yet"); 2618 2598 } 2619 2599 } 2620 NewTemperatureInput->Configure(this->parameters);2621 NewPrecipitationInput->Configure(this->parameters);2622 2623 this->inputs->AddInput(NewTemperatureInput);2624 this->inputs->AddInput(NewPrecipitationInput);2625 2600 2626 2601 switch(this->ObjectEnum()){ … … 2628 2603 case PentaEnum: 2629 2604 case TetraEnum: 2630 this-> InputExtrude(SmbMonthlytemperaturesEnum,-1);2631 this-> InputExtrude(SmbPrecipitationEnum,-1);2605 this->DatasetInputExtrude(SmbMonthlytemperaturesEnum,-1); 2606 this->DatasetInputExtrude(SmbPrecipitationEnum,-1); 2632 2607 break; 2633 2608 default: _error_("Not implemented yet"); … … 2643 2618 xDelete<IssmDouble>(PrecipitationsLgm); 2644 2619 xDelete<IssmDouble>(tmp); 2620 xDelete<int>(vertexlids); 2645 2621 2646 2622 } … … 2665 2641 IssmDouble dist_gl,dist_cf; 2666 2642 2667 inputs->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum);2643 this->GetInputValue(&basin_id,BasalforcingsPicoBasinIdEnum); 2668 2644 IssmDouble boxid_max=reCast<IssmDouble>(max_boxid_basin_list[basin_id])+1.; 2669 2645 2670 Input * dist_gl_input=inputs->GetInput(DistanceToGroundinglineEnum); _assert_(dist_gl_input);2671 Input * dist_cf_input=inputs->GetInput(DistanceToCalvingfrontEnum); _assert_(dist_cf_input);2646 Input2* dist_gl_input=this->GetInput2(DistanceToGroundinglineEnum); _assert_(dist_gl_input); 2647 Input2* dist_cf_input=this->GetInput2(DistanceToCalvingfrontEnum); _assert_(dist_cf_input); 2672 2648 2673 2649 /*Get dist_gl and dist_cf at center of element*/ … … 2696 2672 if(boxid==-1) _error_("No boxid found for element " << this->Sid() << "!"); 2697 2673 2698 this-> inputs->AddInput(new IntInput(BasalforcingsPicoBoxIdEnum, boxid));2674 this->SetIntInput(this->inputs2,BasalforcingsPicoBoxIdEnum, boxid); 2699 2675 2700 2676 }/*}}}*/ … … 2704 2680 2705 2681 int boxid; 2706 this-> inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);2682 this->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum); 2707 2683 if(loopboxid!=boxid) return; 2708 2684 … … 2734 2710 this->parameters->FindParam(&overturning_coeff,BasalforcingsPicoOverturningCoeffEnum); 2735 2711 this->parameters->FindParam(&maxbox,BasalforcingsPicoMaxboxcountEnum); 2736 this-> inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);2712 this->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 2737 2713 this->parameters->FindParam(&isplume, BasalforcingsPicoIsplumeEnum); 2738 Input * thickness_input=this->GetInput(ThicknessEnum); _assert_(thickness_input);2714 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 2739 2715 _assert_(basinid<=num_basins); 2740 2716 … … 2781 2757 } 2782 2758 2783 if(!isplume) this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);2784 this->AddInput (BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);2785 this->AddInput (BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);2786 this->AddInput (BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1Enum);2759 if(!isplume) this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum); 2760 this->AddInput2(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1DGEnum); 2761 this->AddInput2(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1DGEnum); 2762 this->AddInput2(BasalforcingsPicoSubShelfOceanOverturningEnum,overturnings,P1DGEnum); 2787 2763 2788 2764 /*Cleanup and return*/ … … 2817 2793 } 2818 2794 2819 if(!isplume) this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);2820 this->AddInput (BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1Enum);2821 this->AddInput (BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1Enum);2795 if(!isplume) this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum); 2796 this->AddInput2(BasalforcingsPicoSubShelfOceanTempEnum,Tocs,P1DGEnum); 2797 this->AddInput2(BasalforcingsPicoSubShelfOceanSalinityEnum,Socs,P1DGEnum); 2822 2798 2823 2799 /*Cleanup and return*/ … … 2875 2851 2876 2852 /*Get inputs*/ 2877 Input * zgl_input = this->GetInput(GroundinglineHeightEnum); _assert_(zgl_input);2878 Input * toc_input = this->GetInput(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(toc_input);2879 Input * soc_input = this->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(soc_input);2880 Input * base_input = this->GetInput(BaseEnum); _assert_(base_input);2881 Input * baseslopex_input = this->GetInput(BaseSlopeXEnum); _assert_(baseslopex_input);2882 Input * baseslopey_input = this->GetInput(BaseSlopeYEnum); _assert_(baseslopey_input);2853 Input2* zgl_input = this->GetInput2(GroundinglineHeightEnum); _assert_(zgl_input); 2854 Input2* toc_input = this->GetInput2(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(toc_input); 2855 Input2* soc_input = this->GetInput2(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(soc_input); 2856 Input2* base_input = this->GetInput2(BaseEnum); _assert_(base_input); 2857 Input2* baseslopex_input = this->GetInput2(BaseSlopeXEnum); _assert_(baseslopex_input); 2858 Input2* baseslopey_input = this->GetInput2(BaseSlopeYEnum); _assert_(baseslopey_input); 2883 2859 this->FindParam(&yts, ConstantsYtsEnum); 2884 2860 … … 2930 2906 2931 2907 /*Save computed melt-rate*/ 2932 this->AddInput (BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1Enum);2908 this->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,basalmeltrates_shelf,P1DGEnum); 2933 2909 2934 2910 /*Cleanup and return*/ … … 2968 2944 rlapslgm=this->FindParam(SmbRlapslgmEnum); 2969 2945 2970 /*Recover monthly temperatures and precipitation and compute the yearly mean temperatures*/2971 Input* input=this->inputs->GetInput(SmbMonthlytemperaturesEnum); _assert_(input);2972 Input* input2=this->inputs->GetInput(SmbPrecipitationEnum); _assert_(input2);2973 2946 IssmDouble time,yts,time_yr; 2974 2947 this->parameters->FindParam(&time,TimeEnum); … … 2976 2949 time_yr=floor(time/yts)*yts; 2977 2950 2951 /*Get inputs*/ 2952 DatasetInput2* dinput =this->GetDatasetInput2(SmbMonthlytemperaturesEnum); _assert_(dinput); 2953 DatasetInput2* dinput2=this->GetDatasetInput2(SmbPrecipitationEnum); _assert_(dinput2); 2954 2978 2955 /*loop over vertices: */ 2979 2956 Gauss* gauss=this->NewGauss(); 2980 2957 for(int month=0;month<12;month++) { 2958 /*Recover monthly temperatures and precipitation and compute the yearly mean temperatures*/ 2959 2981 2960 for(int iv=0;iv<NUM_VERTICES;iv++) { 2982 2961 gauss->GaussVertex(iv); 2983 input->GetInputValue(&monthlytemperatures[iv*12+month],gauss,time_yr+month/12.*yts);2962 dinput->GetInputValue(&monthlytemperatures[iv*12+month],gauss,month); 2984 2963 // yearlytemperatures[iv]=yearlytemperatures[iv]+monthlytemperatures[iv*12+month]*mavg; // Has to be in Kelvin 2985 2964 monthlytemperatures[iv*12+month]=monthlytemperatures[iv*12+month]-273.15; // conversion from Kelvin to celcius for PDD module 2986 input2->GetInputValue(&monthlyprec[iv*12+month],gauss,time_yr+month/12.*yts);2965 dinput2->GetInputValue(&monthlyprec[iv*12+month],gauss,month); 2987 2966 monthlyprec[iv*12+month]=monthlyprec[iv*12+month]*yts; 2988 2967 } … … 3004 2983 * This parameter is set, if the user wants to define the 3005 2984 * pdd factors regionally, if issetpddfac==1 in the d18opdd method */ 3006 if (issetpddfac==1){ 3007 input=this->GetInput(SmbPddfacSnowEnum); _assert_(input); 3008 input2=this->GetInput(SmbPddfacIceEnum); _assert_(input2); 2985 Input2* input = NULL; 2986 Input2* input2 = NULL; 2987 if(issetpddfac==1){ 2988 input = this->GetInput2(SmbPddfacSnowEnum); _assert_(input); 2989 input2 = this->GetInput2(SmbPddfacIceEnum); _assert_(input2); 3009 2990 } 3010 2991 … … 3016 2997 3017 2998 /*measure the surface mass balance*/ 3018 for 2999 for(int iv = 0; iv<NUM_VERTICES; iv++){ 3019 3000 gauss->GaussVertex(iv); 3020 3001 pddsnowfac=0.; … … 3051 3032 switch(this->ObjectEnum()){ 3052 3033 case TriaEnum: 3053 // this->inputs->AddInput(new TriaInput(TemperatureEnum,&yearlytemperatures[0],P1Enum)); 3054 this->inputs->AddInput(new TriaInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum)); 3055 this->inputs->AddInput(new TriaInput(SmbMassBalanceEnum,&agd[0],P1Enum)); 3056 this->inputs->AddInput(new TriaInput(SmbAccumulationEnum,&accu[0],P1Enum)); 3057 this->inputs->AddInput(new TriaInput(SmbMeltEnum,&melt[0],P1Enum)); 3034 this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum); 3035 this->AddInput2(SmbMassBalanceEnum,&agd[0],P1Enum); 3036 this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum); 3037 this->AddInput2(SmbMeltEnum,&melt[0],P1Enum); 3058 3038 break; 3059 3039 case PentaEnum: … … 3066 3046 yearlytemperatures[1] = s[1]; 3067 3047 yearlytemperatures[2] = s[2]; 3068 this-> inputs->AddInput(new PentaInput(TemperatureEnum,&yearlytemperatures[0],P1Enum));3048 this->AddInput2(TemperatureEnum,&yearlytemperatures[0],P1Enum); 3069 3049 3070 3050 bool isenthalpy; … … 3077 3057 ThermalToEnthalpy(&enthalpy[4],yearlytemperatures[4],0.,0.); 3078 3058 ThermalToEnthalpy(&enthalpy[5],yearlytemperatures[5],0.,0.); 3079 this-> inputs->AddInput(new PentaInput(EnthalpyEnum,&enthalpy[0],P1Enum));3059 this->AddInput2(EnthalpyEnum,&enthalpy[0],P1Enum); 3080 3060 } 3081 3061 } 3082 this->inputs->AddInput(new PentaInput(SmbMassBalanceEnum,&agd[0],P1Enum)); 3083 this->inputs->AddInput(new PentaInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum)); 3084 this->InputExtrude(TemperaturePDDEnum,-1); 3085 this->InputExtrude(SmbMassBalanceEnum,-1); 3086 break; 3087 case TetraEnum: 3088 if(IsOnSurface()){ 3089 GetInputListOnVertices(&s[0],TemperatureEnum); 3090 yearlytemperatures[0] = s[0]; 3091 yearlytemperatures[1] = s[1]; 3092 yearlytemperatures[2] = s[2]; 3093 this->inputs->AddInput(new TetraInput(TemperatureEnum,&yearlytemperatures[0],P1Enum)); 3094 } 3095 this->inputs->AddInput(new TetraInput(SmbMassBalanceEnum,&agd[0],P1Enum)); 3096 this->inputs->AddInput(new TetraInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum)); 3062 this->AddInput2(SmbMassBalanceEnum,&agd[0],P1Enum); 3063 this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum); 3097 3064 this->InputExtrude(TemperaturePDDEnum,-1); 3098 3065 this->InputExtrude(SmbMassBalanceEnum,-1); … … 3100 3067 default: _error_("Not implemented yet"); 3101 3068 } 3102 // this->inputs->AddInput(NewTemperatureInput);3103 // this->inputs->AddInput(NewPrecipitationInput);3104 // this->inputs->AddInput(new TriaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));3105 3106 //this->InputExtrude(SmbMassBalanceEnum,-1);3107 // this->InputExtrude(SmbMonthlytemperaturesEnum,-1);3108 // this->InputExtrude(SmbPrecipitationEnum,-1);3109 3069 3110 3070 /*clean-up*/ … … 3157 3117 rlaps=this->FindParam(SmbRlapsEnum); 3158 3118 3159 /*Recover monthly temperatures and precipitation*/3160 Input* input=this->inputs->GetInput(SmbMonthlytemperaturesEnum); _assert_(input);3161 Input* input2=this->inputs->GetInput(SmbPrecipitationEnum); _assert_(input2);3162 /*Recover smb correction term */3163 Input* input3=this->inputs->GetInput(SmbSmbCorrEnum); _assert_(input3);3164 3165 3119 /* Get time */ 3166 3120 this->parameters->FindParam(&time,TimeEnum); … … 3172 3126 IssmDouble mu = MU_0*(1000.0*86400.0)*(rho_ice/rho_water); // (d*deg C)/(mm WE) --> (s*deg C)/(m IE) 3173 3127 3128 3174 3129 /*loop over vertices: */ 3175 3130 Gauss* gauss=this->NewGauss(); 3176 3131 for(int month=0;month<12;month++){ 3132 3133 /*Recover monthly temperatures and precipitation*/ 3134 Input2* dinput =this->GetInput2(SmbMonthlytemperaturesEnum,reCast<IssmDouble>(month+1)/12.*yts); _assert_(dinput); 3135 Input2* dinput2=this->GetInput2(SmbPrecipitationEnum,reCast<IssmDouble>(month+1)/12.*yts); _assert_(dinput2); 3136 3177 3137 for(int iv=0;iv<NUM_VERTICES;iv++){ 3178 3138 gauss->GaussVertex(iv); 3179 input->GetInputValue(&monthlytemperatures[iv*12+month],gauss,(month+1)/12.*yts);3139 dinput->GetInputValue(&monthlytemperatures[iv*12+month],gauss); 3180 3140 monthlytemperatures[iv*12+month]=monthlytemperatures[iv*12+month]-273.15; // conversion from Kelvin to celcius for PDD module 3181 input2->GetInputValue(&monthlyprec[iv*12+month],gauss,(month+1)/12.*yts);3141 dinput2->GetInputValue(&monthlyprec[iv*12+month],gauss); 3182 3142 monthlyprec[iv*12+month]=monthlyprec[iv*12+month]*yts; 3183 3143 } … … 3216 3176 switch(this->ObjectEnum()){ 3217 3177 case TriaEnum: 3218 // this->inputs->AddInput(new TriaInput(TemperatureEnum,&yearlytemperatures[0],P1Enum));3219 this-> inputs->AddInput(new TriaInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum));3220 this-> inputs->AddInput(new TriaInput(SmbMassBalanceEnum,&smb[0],P1Enum));3221 this-> inputs->AddInput(new TriaInput(SmbAccumulationEnum,&accu[0],P1Enum));3222 this-> inputs->AddInput(new TriaInput(SmbMeltEnum,&melt[0],P1Enum));3178 //this->AddInput2(TemperatureEnum,&yearlytemperatures[0],P1Enum); 3179 this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum); 3180 this->AddInput2(SmbMassBalanceEnum,&smb[0],P1Enum); 3181 this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum); 3182 this->AddInput2(SmbMeltEnum,&melt[0],P1Enum); 3223 3183 break; 3224 3184 case PentaEnum: … … 3236 3196 yearlytemperatures[1] = s[1]; 3237 3197 yearlytemperatures[2] = s[2]; 3238 this-> inputs->AddInput(new PentaInput(TemperatureEnum,&yearlytemperatures[0],P1Enum));3198 this->AddInput2(TemperatureEnum,&yearlytemperatures[0],P1Enum); 3239 3199 if(isenthalpy){ 3240 3200 /*Convert that to enthalpy for the enthalpy model*/ … … 3244 3204 ThermalToEnthalpy(&enthalpy[4],yearlytemperatures[4],0.,0.); 3245 3205 ThermalToEnthalpy(&enthalpy[5],yearlytemperatures[5],0.,0.); 3246 this-> inputs->AddInput(new PentaInput(EnthalpyEnum,&enthalpy[0],P1Enum));3206 this->AddInput2(EnthalpyEnum,&enthalpy[0],P1Enum); 3247 3207 } 3248 3208 } 3249 3209 } 3250 this-> inputs->AddInput(new PentaInput(SmbMassBalanceEnum,&smb[0],P1Enum));3251 this-> inputs->AddInput(new PentaInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum));3252 this-> inputs->AddInput(new PentaInput(SmbAccumulationEnum,&accu[0],P1Enum));3253 this-> inputs->AddInput(new PentaInput(SmbMeltEnum,&melt[0],P1Enum));3210 this->AddInput2(SmbMassBalanceEnum,&smb[0],P1Enum); 3211 this->AddInput2(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum); 3212 this->AddInput2(SmbAccumulationEnum,&accu[0],P1Enum); 3213 this->AddInput2(SmbMeltEnum,&melt[0],P1Enum); 3254 3214 this->InputExtrude(TemperaturePDDEnum,-1); 3255 3215 this->InputExtrude(SmbMassBalanceEnum,-1); 3256 3216 this->InputExtrude(SmbAccumulationEnum,-1); 3257 3217 this->InputExtrude(SmbMeltEnum,-1); 3258 break;3259 case TetraEnum:3260 if(IsOnSurface()){3261 GetInputListOnVertices(&s[0],TemperatureEnum);3262 yearlytemperatures[0] = s[0];3263 yearlytemperatures[1] = s[1];3264 yearlytemperatures[2] = s[2];3265 this->inputs->AddInput(new TetraInput(TemperatureEnum,&yearlytemperatures[0],P1Enum));3266 }3267 this->inputs->AddInput(new TetraInput(SmbMassBalanceEnum,&smb[0],P1Enum));3268 this->inputs->AddInput(new TetraInput(TemperaturePDDEnum,&yearlytemperatures[0],P1Enum));3269 this->InputExtrude(TemperaturePDDEnum,-1);3270 this->InputExtrude(SmbMassBalanceEnum,-1);3271 3218 break; 3272 3219 default: _error_("Not implemented yet"); … … 3324 3271 case SigmaNNEnum: this->ComputeSigmaNN(); break; 3325 3272 case LambdaSEnum: this->ComputeLambdaS(); break; 3326 case NewDamageEnum: this->ComputeNewDamage(); break;3327 3273 case StressIntensityFactorEnum: this->StressIntensityFactor(); break; 3328 3274 case CalvingratexEnum: … … 3359 3305 } 3360 3306 3361 /*Find input*/3362 Input* input=this->inputs->GetInput(output_enum);3363 3364 3307 /*If this input is not already in Inputs, maybe it needs to be computed?*/ 3308 Input2* input2 = this->GetInput2(output_enum); 3309 if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 3310 3311 /*Assign output pointer*/ 3312 *pinterpolation = input2->GetResultInterpolation(); 3313 *pnodesperelement = input2->GetResultNumberOfNodes(); 3314 *parray_size = input2->GetResultArraySize(); 3315 return; 3316 }/*}}}*/ 3317 void Element::ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum){/*{{{*/ 3318 3319 Input2* input=this->GetInput2(output_enum); 3365 3320 if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 3366 3321 3367 /*Assign output pointer*/ 3368 *pinterpolation = input->GetResultInterpolation(); 3369 *pnodesperelement = input->GetResultNumberOfNodes(); 3370 *parray_size = input->GetResultArraySize(); 3371 }/*}}}*/ 3372 void Element::ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum){/*{{{*/ 3373 3374 Input* input=this->inputs->GetInput(output_enum); 3375 if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 3376 3377 input->ResultToPatch(values,nodesperelement,this->Sid()); 3322 _error_("not implemented yet "); 3323 //input->ResultToPatch(values,nodesperelement,this->Sid()); 3378 3324 3379 3325 } /*}}}*/ 3380 3326 void Element::ResultToMatrix(IssmDouble* values,int ncols,int output_enum){/*{{{*/ 3381 3327 3382 Input * input=this->inputs->GetInput(output_enum);3328 Input2* input=this->GetInput2(output_enum); 3383 3329 if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 3384 3330 3385 input->ResultToMatrix(values,ncols,this->Sid()); 3331 _error_("not implemented yet"); 3332 //input->ResultToMatrix(values,ncols,this->Sid()); 3386 3333 3387 3334 } /*}}}*/ 3388 3335 void Element::ResultToVector(Vector<IssmDouble>* vector,int output_enum){/*{{{*/ 3389 3336 3390 Input* input=this->inputs->GetInput(output_enum); 3391 if(!input) _error_("input "<<EnumToStringx(output_enum)<<" not found in element");3392 3393 switch(input->GetResultInterpolation()){ 3394 case P0Enum:{3395 IssmDouble value;3396 bool bvalue;3397 Input* input = this->GetInput(output_enum); _assert_(input);3398 switch(input->ObjectEnum()){3399 case DoubleInputEnum:3400 input->GetInputValue(&value);3401 break;3402 case BoolInputEnum:3403 input->GetInputValue(&bvalue);3404 value=reCast<IssmDouble>(bvalue);3405 break;3406 default:3407 Gauss* gauss = this->NewGauss();3408 input->GetInputValue(&value,gauss);3409 delete gauss;3337 3338 Input2* input2=this->GetInput2(output_enum); 3339 if(!input2) _error_("input "<<EnumToStringx(output_enum)<<" not found in element"); 3340 3341 switch(input2->GetResultInterpolation()){ 3342 case P0Enum:{ 3343 IssmDouble value; 3344 bool bvalue; 3345 switch(input2->ObjectEnum()){ 3346 case BoolInputEnum: 3347 (xDynamicCast<BoolInput2*>(input2))->GetInput(&bvalue,this->lid); 3348 value=reCast<IssmDouble>(bvalue); 3349 break; 3350 default: 3351 Gauss* gauss = this->NewGauss(); 3352 input2->GetInputValue(&value,gauss); 3353 delete gauss; 3354 } 3355 vector->SetValue(this->Sid(),value,INS_VAL); 3356 break; 3410 3357 } 3411 vector->SetValue(this->Sid(),value,INS_VAL); 3412 break; 3413 } 3414 case P1Enum:{ 3415 const int NUM_VERTICES = this->GetNumberOfVertices(); 3416 3417 IssmDouble *values = xNew<IssmDouble>(NUM_VERTICES); 3418 int *connectivity= xNew<int>(NUM_VERTICES); 3419 int *sidlist = xNew<int>(NUM_VERTICES); 3420 3421 this->GetVerticesSidList(sidlist); 3422 this->GetVerticesConnectivityList(connectivity); 3423 this->GetInputListOnVertices(values,output_enum); 3424 for(int i=0;i<NUM_VERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]); 3425 3426 vector->SetValues(NUM_VERTICES,sidlist,values,ADD_VAL); 3427 3428 xDelete<IssmDouble>(values); 3429 xDelete<int>(connectivity); 3430 xDelete<int>(sidlist); 3431 break; 3432 } 3433 default: 3434 _error_("interpolation "<<EnumToStringx(input->GetResultInterpolation())<<" not supported yet"); 3435 } 3358 case P1Enum:{ 3359 const int NUM_VERTICES = this->GetNumberOfVertices(); 3360 3361 IssmDouble *values = xNew<IssmDouble>(NUM_VERTICES); 3362 int *connectivity= xNew<int>(NUM_VERTICES); 3363 int *sidlist = xNew<int>(NUM_VERTICES); 3364 3365 this->GetVerticesSidList(sidlist); 3366 this->GetVerticesConnectivityList(connectivity); 3367 this->GetInputListOnVertices(values,output_enum); 3368 for(int i=0;i<NUM_VERTICES;i++) values[i] = values[i]/reCast<IssmDouble>(connectivity[i]); 3369 3370 vector->SetValues(NUM_VERTICES,sidlist,values,ADD_VAL); 3371 3372 xDelete<IssmDouble>(values); 3373 xDelete<int>(connectivity); 3374 xDelete<int>(sidlist); 3375 break; 3376 } 3377 default: 3378 _error_("interpolation "<<EnumToStringx(input2->GetResultInterpolation())<<" not supported yet"); 3379 } 3436 3380 } /*}}}*/ 3381 void Element::SetBoolInput(Inputs2* inputs2,int enum_in,bool value){/*{{{*/ 3382 3383 _assert_(inputs2); 3384 inputs2->SetInput(enum_in,this->lid,value); 3385 3386 } 3387 /*}}}*/ 3388 void Element::SetIntInput(Inputs2* inputs2,int enum_in,int value){/*{{{*/ 3389 3390 _assert_(inputs2); 3391 inputs2->SetInput(enum_in,this->lid,value); 3392 3393 } 3394 /*}}}*/ 3437 3395 void Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){/*{{{*/ 3438 3396 … … 3492 3450 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 3493 3451 if(analysis_type==StressbalanceAnalysisEnum){ 3494 inputs->GetInputValue(&approximation,ApproximationEnum);3452 this->GetInput2Value(&approximation,ApproximationEnum); 3495 3453 if(approximation==SSAHOApproximationEnum || approximation==SSAFSApproximationEnum){ 3496 3454 parameters->FindParam(&numlayers,MeshNumberoflayersEnum); … … 3549 3507 rdl=this->FindParam(SmbRdlEnum); 3550 3508 3551 /* Retrieve inputs: */3552 Input* dailysnowfall_input=this->GetInput(SmbDailysnowfallEnum); _assert_(dailysnowfall_input);3553 Input* dailyrainfall_input=this->GetInput(SmbDailyrainfallEnum); _assert_(dailyrainfall_input);3554 Input* dailydlradiation_input=this->GetInput(SmbDailydlradiationEnum); _assert_(dailydlradiation_input);3555 Input* dailydsradiation_input=this->GetInput(SmbDailydsradiationEnum); _assert_(dailydsradiation_input);3556 Input* dailywindspeed_input=this->GetInput(SmbDailywindspeedEnum); _assert_(dailywindspeed_input);3557 Input* dailypressure_input=this->GetInput(SmbDailypressureEnum); _assert_(dailypressure_input);3558 Input* dailyairdensity_input=this->GetInput(SmbDailyairdensityEnum); _assert_(dailyairdensity_input);3559 Input* dailyairhumidity_input=this->GetInput(SmbDailyairhumidityEnum); _assert_(dailyairhumidity_input);3560 Input* dailytemperature_input=this->GetInput(SmbDailytemperatureEnum); _assert_(dailytemperature_input);3561 3562 3509 /* Recover info at the vertices: */ 3563 3510 GetInputListOnVertices(&s[0],SurfaceEnum); … … 3567 3514 Gauss* gauss=this->NewGauss(); 3568 3515 for (int iday = 0; iday < 365; iday++){ 3569 for(int iv=0;iv<NUM_VERTICES;iv++) { 3516 /* Retrieve inputs: */ 3517 Input2* dailysnowfall_input = this->GetInput2(SmbDailysnowfallEnum,time_yr+(iday+1)/365.*yts); _assert_(dailysnowfall_input); 3518 Input2* dailyrainfall_input = this->GetInput2(SmbDailyrainfallEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyrainfall_input); 3519 Input2* dailydlradiation_input = this->GetInput2(SmbDailydlradiationEnum,time_yr+(iday+1)/365.*yts); _assert_(dailydlradiation_input); 3520 Input2* dailydsradiation_input = this->GetInput2(SmbDailydsradiationEnum,time_yr+(iday+1)/365.*yts); _assert_(dailydsradiation_input); 3521 Input2* dailywindspeed_input = this->GetInput2(SmbDailywindspeedEnum,time_yr+(iday+1)/365.*yts); _assert_(dailywindspeed_input); 3522 Input2* dailypressure_input = this->GetInput2(SmbDailypressureEnum,time_yr+(iday+1)/365.*yts); _assert_(dailypressure_input); 3523 Input2* dailyairdensity_input = this->GetInput2(SmbDailyairdensityEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyairdensity_input); 3524 Input2* dailyairhumidity_input = this->GetInput2(SmbDailyairhumidityEnum,time_yr+(iday+1)/365.*yts); _assert_(dailyairhumidity_input); 3525 Input2* dailytemperature_input = this->GetInput2(SmbDailytemperatureEnum,time_yr+(iday+1)/365.*yts); _assert_(dailytemperature_input); 3526 3527 for(int iv=0;iv<NUM_VERTICES;iv++){ 3570 3528 gauss->GaussVertex(iv); 3571 3529 /* get forcing */ 3572 dailyrainfall_input->GetInputValue(&dailyrainfall[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3573 dailysnowfall_input->GetInputValue(&dailysnowfall[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3574 dailydlradiation_input->GetInputValue(&dailydlradiation[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3575 dailydsradiation_input->GetInputValue(&dailydsradiation[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3576 dailywindspeed_input->GetInputValue(&dailywindspeed[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3577 dailypressure_input->GetInputValue(&dailypressure[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3578 dailyairdensity_input->GetInputValue(&dailyairdensity[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3579 dailyairhumidity_input->GetInputValue(&dailyairhumidity[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3580 dailytemperature_input->GetInputValue(&dailytemperature[iv*365+iday],gauss ,time_yr+(iday+1)/365.*yts);3530 dailyrainfall_input->GetInputValue(&dailyrainfall[iv*365+iday],gauss); 3531 dailysnowfall_input->GetInputValue(&dailysnowfall[iv*365+iday],gauss); 3532 dailydlradiation_input->GetInputValue(&dailydlradiation[iv*365+iday],gauss); 3533 dailydsradiation_input->GetInputValue(&dailydsradiation[iv*365+iday],gauss); 3534 dailywindspeed_input->GetInputValue(&dailywindspeed[iv*365+iday],gauss); 3535 dailypressure_input->GetInputValue(&dailypressure[iv*365+iday],gauss); 3536 dailyairdensity_input->GetInputValue(&dailyairdensity[iv*365+iday],gauss); 3537 dailyairhumidity_input->GetInputValue(&dailyairhumidity[iv*365+iday],gauss); 3538 dailytemperature_input->GetInputValue(&dailytemperature[iv*365+iday],gauss); 3581 3539 3582 3540 /* Surface temperature correction */ … … 3608 3566 switch(this->ObjectEnum()){ 3609 3567 case TriaEnum: 3610 this-> inputs->AddInput(new TriaInput(TemperatureSEMICEnum,&tsurf_out[0],P1Enum)); // TODO add TemperatureSEMICEnum to EnumDefinitions3611 this-> inputs->AddInput(new TriaInput(SmbMassBalanceEnum,&smb_out[0],P1Enum));3612 this-> inputs->AddInput(new TriaInput(SmbAccumulationEnum,&saccu_out[0],P1Enum));3613 this-> inputs->AddInput(new TriaInput(SmbMeltEnum,&smelt_out[0],P1Enum));3568 this->AddInput2(TemperatureSEMICEnum,&tsurf_out[0],P1Enum); // TODO add TemperatureSEMICEnum to EnumDefinitions 3569 this->AddInput2(SmbMassBalanceEnum,&smb_out[0],P1Enum); 3570 this->AddInput2(SmbAccumulationEnum,&saccu_out[0],P1Enum); 3571 this->AddInput2(SmbMeltEnum,&smelt_out[0],P1Enum); 3614 3572 break; 3615 3573 case PentaEnum: … … 3652 3610 void Element::SmbGemb(){/*{{{*/ 3653 3611 3612 /*only compute SMB at the surface: */ 3613 if (!IsOnSurface()) return; 3614 3654 3615 /*Intermediary variables: {{{*/ 3655 3616 IssmDouble isinitialized=0.0; … … 3664 3625 IssmDouble C=0.0; 3665 3626 IssmDouble Tz,Vz=0.0; 3666 IssmDouble rho_ice, rho_water,aSnow,aIce;3667 3627 IssmDouble time,dt,starttime,finaltime; 3668 3628 IssmDouble timeclim=0.0; … … 3704 3664 int offsetend=-1; 3705 3665 IssmDouble time0, timeend, delta; 3706 3707 3666 /*}}}*/ 3708 3667 /*Output variables:{{{ */ … … 3728 3687 IssmDouble mAdd = 0.0; 3729 3688 IssmDouble dz_add = 0.0; 3730 3731 3689 IssmDouble* dzini=NULL; 3732 3690 IssmDouble* dini = NULL; … … 3737 3695 IssmDouble* aini = NULL; 3738 3696 IssmDouble* Tini = NULL; 3739 3740 3697 int m=0; 3741 3698 int count=0; 3742 3699 /*}}}*/ 3743 3700 3744 /*only compute SMB at the surface: */3745 if (!IsOnSurface()) return;3746 3747 3701 /*Retrieve material properties and parameters:{{{ */ 3748 rho_ice= FindParam(MaterialsRhoIceEnum);3749 rho_water = FindParam(MaterialsRhoFreshwaterEnum);3750 parameters->FindParam(&aSnow,SmbASnowEnum);3751 parameters->FindParam(&aIce,SmbAIceEnum);3702 IssmDouble rho_ice = FindParam(MaterialsRhoIceEnum); 3703 IssmDouble rho_water = FindParam(MaterialsRhoFreshwaterEnum); 3704 IssmDouble aSnow = parameters->FindParam(SmbASnowEnum); 3705 IssmDouble aIce = parameters->FindParam(SmbAIceEnum); 3752 3706 parameters->FindParam(&time,TimeEnum); /*transient core time at which we run the smb core*/ 3753 3707 parameters->FindParam(&dt,TimesteppingTimeStepEnum); /*transient core time step*/ … … 3776 3730 parameters->FindParam(&thermo_scaling,SmbThermoDeltaTScalingEnum); 3777 3731 parameters->FindParam(&adThresh,SmbAdThreshEnum); 3778 3779 3732 /*}}}*/ 3780 3733 /*Retrieve inputs: {{{*/ 3781 Input* zTop_input=this->GetInput(SmbZTopEnum); _assert_(zTop_input); 3782 Input* dzTop_input=this->GetInput(SmbDzTopEnum); _assert_(dzTop_input); 3783 Input* dzMin_input=this->GetInput(SmbDzMinEnum); _assert_(dzMin_input); 3784 Input* zMax_input=this->GetInput(SmbZMaxEnum); _assert_(zMax_input); 3785 Input* zMin_input=this->GetInput(SmbZMinEnum); _assert_(zMin_input); 3786 Input* zY_input=this->GetInput(SmbZYEnum); _assert_(zY_input); 3787 Input* Tmean_input=this->GetInput(SmbTmeanEnum); _assert_(Tmean_input); 3788 Input* Vmean_input=this->GetInput(SmbVmeanEnum); _assert_(Vmean_input); 3789 Input* C_input=this->GetInput(SmbCEnum); _assert_(C_input); 3790 Input* Tz_input=this->GetInput(SmbTzEnum); _assert_(Tz_input); 3791 Input* Vz_input=this->GetInput(SmbVzEnum); _assert_(Vz_input); 3792 Input* Ta_input=this->GetInput(SmbTaEnum); _assert_(Ta_input); 3793 Input* V_input=this->GetInput(SmbVEnum); _assert_(V_input); 3794 Input* Dlwr_input=this->GetInput(SmbDlwrfEnum); _assert_(Dlwr_input); 3795 Input* Dswr_input=this->GetInput(SmbDswrfEnum); _assert_(Dswr_input); 3796 Input* P_input=this->GetInput(SmbPEnum); _assert_(P_input); 3797 Input* eAir_input=this->GetInput(SmbEAirEnum); _assert_(eAir_input); 3798 Input* pAir_input=this->GetInput(SmbPAirEnum); _assert_(pAir_input); 3799 Input* teValue_input=this->GetInput(SmbTeValueEnum); _assert_(teValue_input); 3800 Input* aValue_input=this->GetInput(SmbAValueEnum); _assert_(aValue_input); 3801 Input* isinitialized_input=this->GetInput(SmbIsInitializedEnum); _assert_(isinitialized_input); 3734 _error_("fix...."); 3735 Input2 *zTop_input = this->GetInput2(SmbZTopEnum); _assert_(zTop_input); 3736 Input2 *dzTop_input = this->GetInput2(SmbDzTopEnum); _assert_(dzTop_input); 3737 Input2 *dzMin_input = this->GetInput2(SmbDzMinEnum); _assert_(dzMin_input); 3738 Input2 *zMax_input = this->GetInput2(SmbZMaxEnum); _assert_(zMax_input); 3739 Input2 *zMin_input = this->GetInput2(SmbZMinEnum); _assert_(zMin_input); 3740 Input2 *zY_input = this->GetInput2(SmbZYEnum); _assert_(zY_input); 3741 Input2 *Tmean_input = this->GetInput2(SmbTmeanEnum); _assert_(Tmean_input); 3742 Input2 *Vmean_input = this->GetInput2(SmbVmeanEnum); _assert_(Vmean_input); 3743 Input2 *C_input = this->GetInput2(SmbCEnum); _assert_(C_input); 3744 Input2 *Tz_input = this->GetInput2(SmbTzEnum); _assert_(Tz_input); 3745 Input2 *Vz_input = this->GetInput2(SmbVzEnum); _assert_(Vz_input); 3746 Input *Ta_input = this->GetInput(SmbTaEnum); _assert_(Ta_input); 3747 Input *V_input = this->GetInput(SmbVEnum); _assert_(V_input); 3748 Input *Dlwr_input = this->GetInput(SmbDlwrfEnum); _assert_(Dlwr_input); 3749 Input *Dswr_input = this->GetInput(SmbDswrfEnum); _assert_(Dswr_input); 3750 Input *P_input = this->GetInput(SmbPEnum); _assert_(P_input); 3751 Input *eAir_input = this->GetInput(SmbEAirEnum); _assert_(eAir_input); 3752 Input *pAir_input = this->GetInput(SmbPAirEnum); _assert_(pAir_input); 3753 Input2 *teValue_input = this->GetInput2(SmbTeValueEnum); _assert_(teValue_input); 3754 Input2 *aValue_input = this->GetInput2(SmbAValueEnum); _assert_(aValue_input); 3755 3802 3756 /*Retrieve input values:*/ 3803 3757 Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0); 3804 3758 3759 this->GetInputValue(&isinitialized,SmbIsInitializedEnum); 3805 3760 zTop_input->GetInputValue(&zTop,gauss); 3806 3761 dzTop_input->GetInputValue(&dzTop,gauss); … … 3816 3771 teValue_input->GetInputValue(&teValue,gauss); 3817 3772 aValue_input->GetInputValue(&aValue,gauss); 3818 isinitialized_input->GetInputValue(&isinitialized);3819 3773 /*}}}*/ 3820 3774 … … 4059 4013 4060 4014 /*Save generated inputs: */ 4015 _error_("Fix this mess"); 4061 4016 this->AddInput(new DoubleArrayInput(SmbDzEnum,dz,m)); 4062 4017 this->AddInput(new DoubleArrayInput(SmbDEnum,d,m)); … … 4239 4194 4240 4195 }/*}}}*/ 4196 void Element::StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 4197 4198 /*Intermediaries*/ 4199 IssmDouble dvx[3]; 4200 IssmDouble dvy[3]; 4201 4202 /*Check that both inputs have been found*/ 4203 if(!vx_input || !vy_input){ 4204 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n"); 4205 } 4206 4207 /*Get strain rate assuming that epsilon has been allocated*/ 4208 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4209 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 4210 epsilon[0] = dvx[0]; // normal strain rate x-direction 4211 epsilon[1] = dvy[1]; // normal strain rate y-direction 4212 epsilon[2] = 0.5*(dvx[1] + dvy[0]); // shear strain rate 4213 epsilon[3] = 0.5*(dvx[1] - dvy[0]); // rotation rate 4214 4215 }/*}}}*/ 4216 void Element::StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/ 4217 /*Compute the 3d Strain Rate (6 components): 4218 * 4219 * epsilon=[exx eyy ezz exy exz eyz] 4220 */ 4221 4222 /*Intermediaries*/ 4223 IssmDouble dvx[3]; 4224 IssmDouble dvy[3]; 4225 IssmDouble dvz[3]; 4226 4227 /*Check that both inputs have been found*/ 4228 if (!vx_input || !vy_input || !vz_input){ 4229 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << ", vz: " << vz_input << "\n"); 4230 } 4231 4232 /*Get strain rate assuming that epsilon has been allocated*/ 4233 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4234 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 4235 vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss); 4236 4237 epsilon[0] = dvx[0]; 4238 epsilon[1] = dvy[1]; 4239 epsilon[2] = dvz[2]; 4240 epsilon[3] = 0.5*(dvx[1] + dvy[0]); 4241 epsilon[4] = 0.5*(dvx[2] + dvz[0]); 4242 epsilon[5] = 0.5*(dvy[2] + dvz[1]); 4243 4244 }/*}}}*/ 4245 void Element::StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 4246 /*Compute the 3d Blatter/HOStrain Rate (5 components): 4247 * 4248 * epsilon=[exx eyy exy exz eyz] 4249 * 4250 * with exz=1/2 du/dz 4251 * eyz=1/2 dv/dz 4252 * 4253 * the contribution of vz is neglected 4254 */ 4255 4256 /*Intermediaries*/ 4257 IssmDouble dvx[3]; 4258 IssmDouble dvy[3]; 4259 4260 /*Check that both inputs have been found*/ 4261 if (!vx_input || !vy_input){ 4262 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n"); 4263 } 4264 4265 /*Get strain rate assuming that epsilon has been allocated*/ 4266 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4267 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 4268 epsilon[0] = dvx[0]; 4269 epsilon[1] = dvy[1]; 4270 epsilon[2] = 0.5*(dvx[1] + dvy[0]); 4271 epsilon[3] = 0.5*dvx[2]; 4272 epsilon[4] = 0.5*dvy[2]; 4273 4274 }/*}}}*/ 4275 void Element::StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 4276 /*Compute the 2d Blatter/HOStrain Rate (2 components): 4277 * 4278 * epsilon=[exx exz] 4279 * 4280 * with exz=1/2 du/dz 4281 * 4282 * the contribution of vz is neglected 4283 */ 4284 4285 /*Intermediaries*/ 4286 IssmDouble dvx[3]; 4287 4288 /*Check that both inputs have been found*/ 4289 if (!vx_input){ 4290 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input <<"\n"); 4291 } 4292 4293 /*Get strain rate assuming that epsilon has been allocated*/ 4294 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4295 epsilon[0] = dvx[0]; 4296 epsilon[1] = 0.5*dvx[1]; 4297 4298 }/*}}}*/ 4299 void Element::StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 4300 4301 /*Intermediaries*/ 4302 IssmDouble dvx[3]; 4303 IssmDouble dvy[3]; 4304 4305 /*Check that both inputs have been found*/ 4306 if(!vx_input || !vy_input){ 4307 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << ", vy: " << vy_input << "\n"); 4308 } 4309 4310 /*Get strain rate assuming that epsilon has been allocated*/ 4311 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4312 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 4313 epsilon[0] = dvx[0]; 4314 epsilon[1] = dvy[1]; 4315 epsilon[2] = 0.5*(dvx[1] + dvy[0]); 4316 4317 }/*}}}*/ 4318 void Element::StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input){/*{{{*/ 4319 4320 /*Intermediaries*/ 4321 IssmDouble dvx[3]; 4322 4323 /*Check that both inputs have been found*/ 4324 if (!vx_input){ 4325 _error_("Input missing. Here are the input pointers we have for vx: " << vx_input << "\n"); 4326 } 4327 4328 /*Get strain rate assuming that epsilon has been allocated*/ 4329 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 4330 *epsilon = dvx[0]; 4331 4332 }/*}}}*/ 4241 4333 void Element::StressMaxPrincipalCreateInput(void){/*{{{*/ 4242 4334 … … 4260 4352 /*Retrieve all inputs and parameters*/ 4261 4353 this->GetVerticesCoordinatesBase(&xyz_list); 4262 Input * sigma_xx_input = this->GetInput(StressTensorxxEnum); _assert_(sigma_xx_input);4263 Input * sigma_yy_input = this->GetInput(StressTensoryyEnum); _assert_(sigma_yy_input);4264 Input * sigma_xy_input = this->GetInput(StressTensorxyEnum); _assert_(sigma_xy_input);4265 Input * sigma_xz_input = NULL;4266 Input * sigma_yz_input = NULL;4267 Input * sigma_zz_input = NULL;4354 Input2* sigma_xx_input = this->GetInput2(StressTensorxxEnum); _assert_(sigma_xx_input); 4355 Input2* sigma_yy_input = this->GetInput2(StressTensoryyEnum); _assert_(sigma_yy_input); 4356 Input2* sigma_xy_input = this->GetInput2(StressTensorxyEnum); _assert_(sigma_xy_input); 4357 Input2* sigma_xz_input = NULL; 4358 Input2* sigma_yz_input = NULL; 4359 Input2* sigma_zz_input = NULL; 4268 4360 if(dim==3){ 4269 sigma_xz_input = this->GetInput (StressTensorxzEnum); _assert_(sigma_xz_input);4270 sigma_yz_input = this->GetInput (StressTensoryzEnum); _assert_(sigma_yz_input);4271 sigma_zz_input = this->GetInput (StressTensorzzEnum); _assert_(sigma_zz_input);4361 sigma_xz_input = this->GetInput2(StressTensorxzEnum); _assert_(sigma_xz_input); 4362 sigma_yz_input = this->GetInput2(StressTensoryzEnum); _assert_(sigma_yz_input); 4363 sigma_zz_input = this->GetInput2(StressTensorzzEnum); _assert_(sigma_zz_input); 4272 4364 } 4273 4365 … … 4319 4411 4320 4412 /*Create input*/ 4321 this->AddInput (StressMaxPrincipalEnum,maxprincipal,P1Enum);4413 this->AddInput2(StressMaxPrincipalEnum,maxprincipal,P1Enum); 4322 4414 4323 4415 /*Clean up and return*/ … … 4603 4695 /*Retrieve all inputs and parameters*/ 4604 4696 this->GetVerticesCoordinates(&xyz_list); 4605 Input * vx_input = this->GetInput(VxEnum); _assert_(vx_input);4606 Input * vy_input = this->GetInput(VyEnum); _assert_(vy_input);4607 Input * vz_input = this->GetInput(VzEnum); _assert_(vz_input);4697 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 4698 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 4699 Input2* vz_input = this->GetInput2(VzEnum); _assert_(vz_input); 4608 4700 4609 4701 /*loop over vertices: */ … … 4618 4710 4619 4711 /*Create PentaVertex input, which will hold the basal friction:*/ 4620 this->AddInput (ViscousHeatingEnum,viscousheating,P1Enum);4712 this->AddInput2(ViscousHeatingEnum,viscousheating,P1Enum); 4621 4713 4622 4714 /*Clean up and return*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r24208 r24335 23 23 class Materials; 24 24 class Material; 25 class Inputs2; 25 26 class Inputs; 27 class Input2; 26 28 class Input; 29 class ElementInput2; 30 class DatasetInput2; 27 31 class IoModel; 28 32 class Gauss; … … 39 43 int id; 40 44 int sid; 45 int lid; 41 46 Inputs *inputs; 47 Inputs2 *inputs2; 42 48 Node **nodes; 43 49 Vertex **vertices; 44 50 Material *material; 45 51 Parameters *parameters; 52 bool isonsurface; 53 bool isonbase; 46 54 47 55 int* element_type_list; … … 68 76 void SmbGradCompParameterization(void); 69 77 IssmDouble Divergence(void); 70 void dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input);71 void dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input);72 void dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input);73 void dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input);78 void dViscositydBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input); 79 void dViscositydBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 80 void dViscositydBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 81 void dViscositydDSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 74 82 void Echo(); 75 83 void FindParam(bool* pvalue,int paramenum); … … 89 97 void GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue); 90 98 void GetInputListOnNodesVelocity(IssmDouble* pvalue,int enumtype); 99 void GetInputListOnVertices(IssmDouble* pvalue,ElementInput2* input); 91 100 void GetInputListOnVertices(IssmDouble* pvalue,int enumtype); 92 101 void GetInputListOnVerticesAtTime(IssmDouble* pvalue,int enumtype,IssmDouble time); … … 95 104 void GetInputValue(bool* pvalue,int enum_type); 96 105 void GetInputValue(int* pvalue,int enum_type); 106 void GetInput2Value(bool* pvalue,int enum_type); 107 void GetInput2Value(int* pvalue,int enum_type); 97 108 void GetInputValue(IssmDouble* pvalue,int enum_type); 98 109 void GetInputValue(IssmDouble* pvalue,Gauss* gauss,int enum_type); … … 124 135 int Id(); 125 136 void InputChangeName(int enum_type,int enum_type_old); 126 void InputCreate(IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code); 127 void ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,IoModel* iomodel,int M,int N,int input_enum,int id); 128 void DatasetInputAdd(int enum_type,IssmDouble* vector,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum); 129 void InputDuplicate(int original_enum,int new_enum); 137 void InputCreate(IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code); 138 void ControlInputCreate(IssmDouble* doublearray,IssmDouble* independents_min,IssmDouble* independents_max,Inputs2*inputs2,IoModel* iomodel,int M,int N,IssmDouble scale,int input_enum,int id); 139 void DatasetInputAdd(int enum_type,IssmDouble* vector,Inputs2* inputs2,IoModel* iomodel,int M,int N,int vector_type,int vector_enum,int code,int input_enum); 130 140 void InputUpdateFromConstant(IssmDouble constant, int name); 131 141 void InputUpdateFromConstant(int constant, int name); … … 134 144 bool IsFloating(); 135 145 bool IsGrounded(); 146 bool IsOnBase(); 147 bool IsOnSurface(); 136 148 bool IsIceInElement(); 137 149 bool IsLandInElement(); … … 159 171 void ResultToVector(Vector<IssmDouble>* vector,int output_enum); 160 172 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum); 173 void SetBoolInput(Inputs2* inputs2,int enum_in,bool value); 174 175 void SetIntInput(Inputs2* inputs2,int enum_in,int value); 161 176 void SmbSemic(); 162 177 int Sid(); … … 168 183 void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input); 169 184 void StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input); 185 void StrainRateESA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 186 void StrainRateFS(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input); 187 void StrainRateHO(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 188 void StrainRateHO2dvertical(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 189 void StrainRateSSA(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 190 void StrainRateSSA1d(IssmDouble* epsilon,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input); 170 191 void StressMaxPrincipalCreateInput(void); 171 192 IssmDouble TotalFloatingBmb(IssmDouble* mask, bool scaled); … … 204 225 virtual void AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum)=0; 205 226 virtual void AddInput(int input_enum, IssmDouble* values, int interpolation_enum)=0; 206 virtual void AddControlInput(int input_enum, IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){_error_("not supported yet");}; 207 virtual void DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum){_error_("not supported");}; 227 virtual void AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");}; 228 virtual void AddInput2(int input_enum, IssmDouble* values, int interpolation_enum){_error_("not implemented");}; 229 virtual void AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){_error_("not supported yet");}; 230 virtual void DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){_error_("not supported");}; 208 231 virtual void AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part)=0; 209 232 virtual void BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement){_error_("not implemented yet");}; … … 219 242 virtual void ComputeStressTensor(void)=0; 220 243 virtual void ComputeEsaStrainAndVorticity(void)=0; 221 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters )=0;244 virtual void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs2* inputs2in)=0; 222 245 virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M)=0; 223 246 virtual void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index)=0; … … 236 259 virtual IssmDouble GetIcefrontArea(){_error_("not implemented");}; 237 260 virtual void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum)=0; 261 virtual DatasetInput2* GetDatasetInput2(int inputenum){_error_("not implemented");}; 262 virtual Input2* GetInput2(int inputenum)=0; 263 virtual Input2* GetInput2(int inputenum,IssmDouble time)=0; 238 264 virtual void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");}; 239 265 virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");}; … … 255 281 virtual IssmDouble GroundinglineMassFlux(bool scaled){_error_("not implemented");}; 256 282 virtual void InputDepthAverageAtBase(int enum_type,int average_enum_type)=0; 283 virtual void DatasetInputExtrude(int input_enum,int start){_error_("not implemented yet");}; 257 284 virtual void InputExtrude(int input_enum,int start)=0; 258 285 virtual void InputUpdateFromSolutionOneDofCollapsed(IssmDouble* solution,int inputenum)=0; … … 267 294 virtual bool IsIcefront(void)=0; 268 295 virtual bool IsNodeOnShelfFromFlags(IssmDouble* flags)=0; 269 virtual bool IsOnBase()=0; 270 virtual bool IsOnSurface()=0; 296 271 297 virtual bool IsZeroLevelset(int levelset_enum)=0; 272 298 virtual void JacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss)=0; … … 284 310 virtual Gauss* NewGauss(void)=0; 285 311 virtual Gauss* NewGauss(int order)=0; 286 287 288 289 312 virtual Gauss* NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order)=0; 313 virtual Gauss* NewGauss(IssmDouble* xyz_list, IssmDouble* xyz_list_front,int order_horiz,int order_vert)=0; 314 virtual Gauss* NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,bool mainlyfloating,int order)=0; 315 virtual Gauss* NewGauss(int point1,IssmDouble fraction1,IssmDouble fraction2,int order)=0; 290 316 virtual Gauss* NewGaussBase(int order)=0; 291 317 virtual Gauss* NewGaussLine(int vertex1,int vertex2,int order)=0; … … 313 339 virtual void ResetHooks()=0; 314 340 virtual void RignotMeltParameterization(void){_error_("not implemented yet");}; 341 virtual void SetElementInput(int enum_in,IssmDouble values){_error_("not implemented yet");}; 342 virtual void SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values){_error_("not implemented yet");}; 343 virtual void SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){_error_("not implemented yet");}; 315 344 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M)=0; 316 345 virtual void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index)=0; … … 332 361 virtual IssmDouble TotalGroundedBmb(bool scaled)=0; 333 362 virtual IssmDouble TotalSmb(bool scaled)=0; 334 virtual void Update( int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0;363 virtual void Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finite_element)=0; 335 364 virtual void UpdateConstraintsExtrudeFromBase(void)=0; 336 365 virtual void UpdateConstraintsExtrudeFromTop(void)=0; … … 342 371 virtual void VerticalSegmentIndices(int** pindices,int* pnumseg)=0; 343 372 virtual void VerticalSegmentIndicesBase(int** pindices,int* pnumseg)=0; 344 virtual void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input)=0;373 virtual void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){_error_("not implemented yet");}; 345 374 virtual void WriteFieldIsovalueSegment(DataSet* segments,int fieldenum,IssmDouble fieldvalue){_error_("not implemented yet");}; 346 375 -
issm/trunk-jpl/src/c/classes/Elements/Elements.cpp
r20810 r24335 34 34 35 35 /*Object management*/ 36 void Elements::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters ){/*{{{*/36 void Elements::Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs2* inputs2){/*{{{*/ 37 37 38 38 vector<Object*>::iterator object; 39 Element* element=NULL;40 39 41 for ( object=objects.begin() ; object < objects.end(); object++ ){ 42 43 element=xDynamicCast<Element*>((*object)); 44 element->Configure(elements,loads,nodes,vertices,materials,parameters); 45 40 for(object=objects.begin() ; object < objects.end(); object++ ){ 41 Element* element=xDynamicCast<Element*>((*object)); 42 element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs2); 46 43 } 47 44 48 } 49 /*}}}*/ 50 void Elements::InputDuplicate(int input_enum,int output_enum){/*{{{*/ 51 52 for(int i=0;i<this->Size();i++){ 53 Element* element=xDynamicCast<Element*>(this->GetObjectByOffset(i)); 54 element->InputDuplicate(input_enum,output_enum); 55 } 56 } 57 /*}}}*/ 45 }/*}}}*/ 58 46 int Elements::MaxNumNodes(void){/*{{{*/ 59 47 -
issm/trunk-jpl/src/c/classes/Elements/Elements.h
r20810 r24335 24 24 25 25 /*numerics*/ 26 void Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters); 27 void InputDuplicate(int input_enum,int output_enum); 26 void Configure(Elements* elements,Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs2* inputs2); 28 27 int MaxNumNodes(void); 29 28 int NumberOfElements(void); -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r24240 r24335 12 12 13 13 #include "../classes.h" 14 #include "../Inputs2/PentaInput2.h" 15 #include "../Inputs2/ControlInput2.h" 16 #include "../Inputs2/TransientInput2.h" 17 #include "../Inputs2/DatasetInput2.h" 14 18 #include "../../shared/shared.h" 15 19 /*}}}*/ … … 24 28 } 25 29 /*}}}*/ 26 Penta::Penta(int penta_id, int penta_sid, IoModel* iomodel,int nummodels)/*{{{*/30 Penta::Penta(int penta_id, int penta_sid,int penta_lid,IoModel* iomodel,int nummodels)/*{{{*/ 27 31 :ElementHook(nummodels,penta_id,NUMVERTICES,iomodel){ 28 32 … … 36 40 this->id = penta_id; 37 41 this->sid = penta_sid; 42 this->lid = penta_lid; 43 44 /*surface and base*/ 45 this->isonsurface = false; 46 this->isonbase = false; 38 47 39 48 /*Build neighbors list*/ … … 58 67 /*Only allocate pointer*/ 59 68 this->element_type_list=xNew<int>(nummodels); 69 70 /*surface and base*/ 71 _assert_(iomodel->Data("md.mesh.vertexonsurface")); 72 _assert_(iomodel->Data("md.mesh.vertexonbase")); 73 this->isonsurface = false; 74 this->isonbase = false; 75 IssmDouble sum = 0.; 76 for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonsurface")[reCast<int>(iomodel->elements[(penta_id-1)*NUMVERTICES+i])-1]; 77 _assert_(sum>=0 && sum<4); 78 if(sum>2.5) this->isonsurface = true; 79 sum = 0.; 80 for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonbase")[reCast<int>(iomodel->elements[(penta_id-1)*NUMVERTICES+i])-1]; 81 _assert_(sum>=0 && sum<4); 82 if(sum>2.5) this->isonbase = true; 60 83 } 61 84 /*}}}*/ … … 98 121 penta->id = this->id; 99 122 penta->sid = this->sid; 123 penta->lid = this->lid; 100 124 if(this->inputs) penta->inputs = (Inputs*)(this->inputs->Copy()); 101 125 else penta->inputs=new Inputs(); 126 penta->isonbase = this->isonbase; 127 penta->isonsurface = this->isonsurface; 102 128 103 129 /*point parameters: */ … … 123 149 124 150 MARSHALLING_ENUM(PentaEnum); 151 MARSHALLING(this->isonsurface); 152 MARSHALLING(this->isonbase); 125 153 126 154 /*Call parent classes: */ … … 137 165 138 166 /*Other*/ 167 void Penta::AddBasalInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/ 168 169 _assert_(this->inputs2); 170 if(!IsOnBase()) return; 171 else{ 172 if(interpolation_enum==P1Enum){ 173 IssmDouble extrudedvalues[NUMVERTICES]; 174 for(int i=0;i<NUMVERTICES2D;i++){ 175 extrudedvalues[i]=values[i]; 176 extrudedvalues[i+NUMVERTICES2D]=values[i]; 177 } 178 Penta* penta=this; 179 for(;;){ 180 penta->AddInput2(input_enum,&extrudedvalues[0],P1Enum); 181 if (penta->IsOnSurface()) break; 182 penta=penta->GetUpperPenta(); _assert_(penta->Id()!=this->id); 183 } 184 } 185 else _error_("not implemented yet"); 186 } 187 188 } 189 /*}}}*/ 190 void Penta::AddInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/ 191 192 /**/ 193 int vertexlids[NUMVERTICES]; 194 195 /*Call inputs method*/ 196 _assert_(this->inputs2); 197 switch(interpolation_enum){ 198 case P1Enum: 199 for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid; 200 inputs2->SetPentaInput(input_enum,interpolation_enum,NUMVERTICES,vertexlids,values); 201 break; 202 case P1DGEnum: 203 inputs2->SetPentaInput(input_enum,interpolation_enum,this->lid,NUMVERTICES,values); 204 break; 205 default: 206 inputs2->SetPentaInput(input_enum,interpolation_enum,this->lid,this->GetNumberOfNodes(interpolation_enum),values); 207 } 208 209 } 210 /*}}}*/ 139 211 void Penta::AddBasalInput(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/ 140 212 … … 165 237 166 238 _assert_(this->inputs); 239 printf("-------------- file: Penta.cpp line: %i\n",__LINE__); 167 240 this->inputs->AddInput(new PentaInput(input_enum,values,interpolation_enum)); 241 } 242 /*}}}*/ 243 void Penta::AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/ 244 245 /*Intermediaries*/ 246 int vertexlids[NUMVERTICES]; 247 248 _assert_(iomodel->elements); 249 for(int i=0;i<NUMVERTICES;i++){ 250 int vertexid =reCast<int>(iomodel->elements[NUMVERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 251 vertexlids[i]=iomodel->my_vertices_lids[vertexid-1]; 252 } 253 254 /*Call inputs method*/ 255 switch(interpolation_enum){ 256 case P1Enum: 257 inputs2->SetPentaControlInput(input_enum,PentaInput2Enum,interpolation_enum,id,NUMVERTICES,vertexlids,values,values_min,values_max); 258 break; 259 default: 260 _error_("Cannot add \""<<EnumToStringx(input_enum)<<"\" interpolation "<<EnumToStringx(interpolation_enum)<<" not supported"); 261 } 262 263 } 264 /*}}}*/ 265 void Penta::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){/*{{{*/ 266 267 _error_("not implemeted"); 268 IssmDouble nodeinputs[NUMVERTICES]; 269 if(num_inputs<1) _error_("Cannot create a DatasetInput of size <1"); 270 if(M!=iomodel->numberofvertices) _error_("not supported yet"); 271 if(N!=num_inputs) _error_("sizes are not consistent"); 272 273 int penta_vertex_ids[NUMVERTICES]; 274 275 for(int k=0;k<6;k++){ 276 penta_vertex_ids[k]=reCast<int>(iomodel->elements[6*this->Sid()+k]); //ids for vertices are in the elements array from Matlab 277 } 278 /*Create inputs and add to DataSetInput*/ 279 DatasetInput* datasetinput=new DatasetInput(input_enum); 280 for(int i=0;i<num_inputs;i++){ 281 for(int j=0;j<NUMVERTICES;j++)nodeinputs[j]=array[(penta_vertex_ids[j]-1)*N+i]; 282 datasetinput->AddInput(new PentaInput(input_enum,nodeinputs,P1Enum),individual_enums[i]); 283 } 284 285 /*Add datasetinput to element inputs*/ 286 this->inputs->AddInput(datasetinput); 168 287 } 169 288 /*}}}*/ … … 201 320 202 321 /*Retrieve all inputs and parameters we will need*/ 203 Input * vx_input = inputs->GetInput(VxAverageEnum); _assert_(vx_input);204 Input * vy_input = inputs->GetInput(VyAverageEnum); _assert_(vy_input);205 Input * gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);206 Input * bs_input = inputs->GetInput(BaseEnum); _assert_(bs_input);207 Input * B_input = inputs->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);208 Input * n_input = inputs->GetInput(MaterialsRheologyNEnum); _assert_(n_input);209 Input * smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);210 Input * smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);211 Input * sl_input = inputs->GetInput(SealevelEnum); _assert_(sl_input);322 Input2* vx_input = this->GetInput2(VxAverageEnum); _assert_(vx_input); 323 Input2* vy_input = this->GetInput2(VyAverageEnum); _assert_(vy_input); 324 Input2* gr_input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gr_input); 325 Input2* bs_input = this->GetInput2(BaseEnum); _assert_(bs_input); 326 Input2* B_input = this->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 327 Input2* n_input = this->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 328 Input2* smax_fl_input = this->GetInput2(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input); 329 Input2* smax_gr_input = this->GetInput2(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input); 330 Input2* sl_input = this->GetInput2(SealevelEnum); _assert_(sl_input); 212 331 213 332 /* Start looping on the number of vertices: */ … … 263 382 264 383 /*Add input*/ 265 this-> inputs->AddInput(new PentaInput(CalvingratexEnum,&calvingratex[0],P1Enum));266 this-> inputs->AddInput(new PentaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));267 this-> inputs->AddInput(new PentaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));268 this-> inputs->AddInput(new PentaInput(SigmaVMEnum,&sigma_vm[0],P1Enum));384 this->AddInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum); 385 this->AddInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum); 386 this->AddInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum); 387 this->AddInput2(SigmaVMEnum,&sigma_vm[0],P1DGEnum); 269 388 270 389 this->InputExtrude(CalvingratexEnum,-1); … … 293 412 294 413 /*Retrieve all inputs and parameters we will need*/ 295 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);296 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);297 Input * strainparallel_input=inputs->GetInput(StrainRateparallelEnum); _assert_(strainparallel_input);298 Input * strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum); _assert_(strainperpendicular_input);299 Input * levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input);414 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 415 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 416 Input2* strainparallel_input=this->GetInput2(StrainRateparallelEnum); _assert_(strainparallel_input); 417 Input2* strainperpendicular_input=this->GetInput2(StrainRateperpendicularEnum); _assert_(strainperpendicular_input); 418 Input2* levermanncoeff_input=this->GetInput2(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input); 300 419 301 420 /* Start looping on the number of vertices: */ … … 322 441 323 442 /*Add input*/ 324 this-> inputs->AddInput(new PentaInput(CalvingratexEnum,&calvingratex[0],P1Enum));325 this-> inputs->AddInput(new PentaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));326 this-> inputs->AddInput(new PentaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));443 this->AddInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum); 444 this->AddInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum); 445 this->AddInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum); 327 446 328 447 /*Clean up and return*/ … … 336 455 if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){ 337 456 IssmDouble flux_per_area=0; 338 this-> inputs->AddInput(new PentaInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum));457 this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum); 339 458 } 340 459 else{ … … 424 543 IssmDouble calvingratex,calvingratey,thickness,Jdet,flux_per_area; 425 544 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 426 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);427 Input * calvingratex_input=NULL;428 Input * calvingratey_input=NULL;429 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);430 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);545 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 546 Input2* calvingratex_input=NULL; 547 Input2* calvingratey_input=NULL; 548 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 549 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 431 550 432 551 /*Start looping on Gaussian points*/ … … 446 565 } 447 566 448 this-> inputs->AddInput(new PentaInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum));567 this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum); 449 568 450 569 /*Clean up and return*/ … … 458 577 if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){ 459 578 IssmDouble flux_per_area=0; 460 this-> inputs->AddInput(new PentaInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum));579 this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum); 461 580 } 462 581 else{ … … 546 665 IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet,flux_per_area; 547 666 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 548 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);549 Input * calvingratex_input=NULL;550 Input * calvingratey_input=NULL;551 Input * vx_input=NULL;552 Input * vy_input=NULL;553 Input * meltingrate_input=NULL;554 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);555 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);556 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);557 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);558 meltingrate_input= inputs->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);667 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 668 Input2* calvingratex_input=NULL; 669 Input2* calvingratey_input=NULL; 670 Input2* vx_input=NULL; 671 Input2* vy_input=NULL; 672 Input2* meltingrate_input=NULL; 673 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 674 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 675 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 676 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 677 meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 559 678 560 679 /*Start looping on Gaussian points*/ … … 580 699 } 581 700 582 this-> inputs->AddInput(new PentaInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum));701 this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum); 583 702 584 703 /*Clean up and return*/ … … 609 728 /*retrive parameters: */ 610 729 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 611 inputs->GetInputValue(&approximation,ApproximationEnum);730 this->GetInput2Value(&approximation,ApproximationEnum); 612 731 613 732 /*Check analysis_types*/ … … 633 752 634 753 /*Retrieve all inputs we will be needing: */ 635 Input * pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);636 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);637 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);638 Input * vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);754 Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input); 755 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 756 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 757 Input2* vz_input=this->GetInput2(VzEnum); _assert_(vz_input); 639 758 640 759 /* Start looping on the number of gaussian points: */ … … 693 812 694 813 /*Retrieve all inputs we will be needing: */ 695 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);696 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);697 Input * vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);814 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 815 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 816 Input2* vz_input=this->GetInput2(VzEnum); _assert_(vz_input); 698 817 699 818 /* Start looping on the number of vertices: */ … … 721 840 722 841 /*Add Stress tensor components into inputs*/ 723 this-> inputs->AddInput(new PentaInput(DeviatoricStressxxEnum,&tau_xx[0],P1Enum));724 this-> inputs->AddInput(new PentaInput(DeviatoricStressxyEnum,&tau_xy[0],P1Enum));725 this-> inputs->AddInput(new PentaInput(DeviatoricStressxzEnum,&tau_xz[0],P1Enum));726 this-> inputs->AddInput(new PentaInput(DeviatoricStressyyEnum,&tau_yy[0],P1Enum));727 this-> inputs->AddInput(new PentaInput(DeviatoricStressyzEnum,&tau_yz[0],P1Enum));728 this-> inputs->AddInput(new PentaInput(DeviatoricStresszzEnum,&tau_zz[0],P1Enum));729 this-> inputs->AddInput(new PentaInput(DeviatoricStresseffectiveEnum,&tau_eff[0],P1Enum));842 this->AddInput2(DeviatoricStressxxEnum,&tau_xx[0],P1DGEnum); 843 this->AddInput2(DeviatoricStressxyEnum,&tau_xy[0],P1DGEnum); 844 this->AddInput2(DeviatoricStressxzEnum,&tau_xz[0],P1DGEnum); 845 this->AddInput2(DeviatoricStressyyEnum,&tau_yy[0],P1DGEnum); 846 this->AddInput2(DeviatoricStressyzEnum,&tau_yz[0],P1DGEnum); 847 this->AddInput2(DeviatoricStresszzEnum,&tau_zz[0],P1DGEnum); 848 this->AddInput2(DeviatoricStresseffectiveEnum,&tau_eff[0],P1DGEnum); 730 849 731 850 /*Clean up and return*/ … … 750 869 751 870 /*Retrieve all inputs we will be needing: */ 752 Input * pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);753 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);754 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);755 Input * vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);871 Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input); 872 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 873 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 874 Input2* vz_input=this->GetInput2(VzEnum); _assert_(vz_input); 756 875 757 876 /* Start looping on the number of vertices: */ … … 775 894 776 895 /*Add Stress tensor components into inputs*/ 777 this-> inputs->AddInput(new PentaInput(StressTensorxxEnum,&sigma_xx[0],P1Enum));778 this-> inputs->AddInput(new PentaInput(StressTensorxyEnum,&sigma_xy[0],P1Enum));779 this-> inputs->AddInput(new PentaInput(StressTensorxzEnum,&sigma_xz[0],P1Enum));780 this-> inputs->AddInput(new PentaInput(StressTensoryyEnum,&sigma_yy[0],P1Enum));781 this-> inputs->AddInput(new PentaInput(StressTensoryzEnum,&sigma_yz[0],P1Enum));782 this-> inputs->AddInput(new PentaInput(StressTensorzzEnum,&sigma_zz[0],P1Enum));896 this->AddInput2(StressTensorxxEnum,&sigma_xx[0],P1DGEnum); 897 this->AddInput2(StressTensorxyEnum,&sigma_xy[0],P1DGEnum); 898 this->AddInput2(StressTensorxzEnum,&sigma_xz[0],P1DGEnum); 899 this->AddInput2(StressTensoryyEnum,&sigma_yy[0],P1DGEnum); 900 this->AddInput2(StressTensoryzEnum,&sigma_yz[0],P1DGEnum); 901 this->AddInput2(StressTensorzzEnum,&sigma_zz[0],P1DGEnum); 783 902 784 903 /*Clean up and return*/ … … 786 905 } 787 906 /*}}}*/ 788 void Penta::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin ){/*{{{*/907 void Penta::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin,Inputs2* inputs2in){/*{{{*/ 789 908 790 909 int analysis_counter; … … 812 931 /*point parameters to real dataset: */ 813 932 this->parameters=parametersin; 933 this->inputs2=inputs2in; 814 934 815 935 /*get inputs configured too: */ … … 819 939 void Penta::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){/*{{{*/ 820 940 941 if(enum_type==MaterialsRheologyBbarEnum) enum_type = MaterialsRheologyBEnum; 942 if(enum_type==DamageDbarEnum) enum_type = DamageDEnum; 943 944 _error_("not implemented"); 821 945 int vertexpidlist[NUMVERTICES]; 822 946 IssmDouble grad_list[NUMVERTICES]; 823 Input * grad_input=NULL;824 Input * input=NULL;947 Input2* grad_input=NULL; 948 Input2* input=NULL; 825 949 826 950 if(enum_type==MaterialsRheologyBbarEnum){ 827 input= (Input*)inputs->GetInput(MaterialsRheologyBEnum);951 input=this->GetInput2(MaterialsRheologyBEnum); 828 952 } 829 953 else if(enum_type==DamageDbarEnum){ 830 input= (Input*)inputs->GetInput(DamageDEnum);954 input=this->GetInput2(DamageDEnum); 831 955 } 832 956 else{ 833 input= inputs->GetInput(enum_type);957 input=this->GetInput2(enum_type); 834 958 } 835 959 if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found"); 836 if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput");960 if(input->ObjectEnum()!=ControlInput2Enum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput"); 837 961 838 962 GradientIndexing(&vertexpidlist[0],control_index); 839 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]]; 840 grad_input=new PentaInput(GradientEnum,grad_list,P1Enum); 841 ((ControlInput*)input)->SetGradient(grad_input); 963 964 //for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]]; 965 //grad_input=new PentaInput(GradientEnum,grad_list,P1Enum); 966 //((ControlInput*)input)->SetGradient(grad_input); 967 _error_("not implemented"); 842 968 843 969 } … … 845 971 void Penta::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){/*{{{*/ 846 972 847 int vertexpidlist[NUMVERTICES]; 973 int idlist[NUMVERTICES]; 974 int vertexlids[NUMVERTICES]; 848 975 IssmDouble grad_list[NUMVERTICES]; 849 Input* grad_input=NULL; 850 Input* input=NULL; 851 852 if(enum_type==MaterialsRheologyBbarEnum){ 853 input=(Input*)inputs->GetInput(MaterialsRheologyBEnum); 854 } 855 else if(enum_type==DamageDbarEnum){ 856 input=(Input*)inputs->GetInput(DamageDEnum); 857 } 858 else{ 859 input=inputs->GetInput(enum_type); 860 } 861 if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found"); 862 if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput"); 863 864 GradientIndexing(&vertexpidlist[0],control_index); 865 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]]; 866 grad_input=new PentaInput(GradientEnum,grad_list,P1Enum); 867 ((ControlInput*)input)->SetGradient(grad_input); 868 976 977 if(enum_type==MaterialsRheologyBbarEnum) enum_type = MaterialsRheologyBEnum; 978 if(enum_type==DamageDbarEnum) enum_type = DamageDEnum; 979 980 GradientIndexing(&idlist[0],control_index); 981 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[idlist[i]]; 982 for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid; 983 984 this->inputs2->SetTriaControlInputGradient(enum_type,P1Enum,NUMVERTICES,&vertexlids[0],&grad_list[0]); 869 985 }/*}}}*/ 870 986 void Penta::ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){/*{{{*/ 871 987 872 Input* input=NULL;873 874 if(control_enum==MaterialsRheologyBbarEnum){875 input=(Input*)inputs->GetInput(MaterialsRheologyBEnum);876 }877 else if(control_enum==DamageDbarEnum){878 input=(Input*)inputs->GetInput(DamageDEnum);879 }880 else{881 input=inputs->GetInput(control_enum);882 }883 if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");884 if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");885 886 988 int sidlist[NUMVERTICES]; 989 int lidlist[NUMVERTICES]; 887 990 int connectivity[NUMVERTICES]; 888 991 IssmPDouble values[NUMVERTICES]; … … 890 993 IssmDouble value,gradient; 891 994 995 if(control_enum==MaterialsRheologyBbarEnum) control_enum = MaterialsRheologyBEnum; 996 if(control_enum==DamageDbarEnum) control_enum = DamageDEnum; 997 892 998 this->GetVerticesConnectivityList(&connectivity[0]); 893 999 this->GetVerticesSidList(&sidlist[0]); 1000 this->GetVerticesLidList(&lidlist[0]); 1001 1002 ElementInput2* control_value = this->inputs2->GetControlInput2Data(control_enum,"value"); _assert_(control_value); 1003 ElementInput2* control_gradient = this->inputs2->GetControlInput2Data(control_enum,"gradient"); _assert_(control_gradient); 1004 control_value->Serve(NUMVERTICES,&lidlist[0]); 1005 control_gradient->Serve(NUMVERTICES,&lidlist[0]); 894 1006 895 1007 GaussPenta* gauss=new GaussPenta(); … … 897 1009 gauss->GaussVertex(iv); 898 1010 899 ((ControlInput*)input)->GetInputValue(&value,gauss);900 ((ControlInput*)input)->GetGradientValue(&gradient,gauss);1011 control_value->GetInputValue(&value,gauss); 1012 control_gradient->GetInputValue(&gradient,gauss); 901 1013 902 1014 values[iv] = reCast<IssmPDouble>(value)/reCast<IssmPDouble>(connectivity[iv]); … … 907 1019 vector_control->SetValues(NUMVERTICES,&sidlist[0],&values[0],ADD_VAL); 908 1020 vector_gradient->SetValues(NUMVERTICES,&sidlist[0],&gradients[0],ADD_VAL); 909 910 1021 }/*}}}*/ 911 1022 void Penta::CreateDistanceInputFromSegmentlist(IssmDouble* distances,int distanceenum){/*{{{*/ … … 932 1043 933 1044 /*Update Levelset*/ 934 this-> inputs->AddInput(new PentaInput(distanceenum,&ls[0],P1Enum));1045 this->AddInput2(distanceenum,&ls[0],P1Enum); 935 1046 } 936 1047 /*}}}*/ … … 949 1060 /*Get input:*/ 950 1061 IssmDouble vel; 951 Input* vel_input; 952 953 vel_input=this->inputs->GetInput(VelEnum); _assert_(vel_input); 1062 Input2* vel_input=this->GetInput2(VelEnum); _assert_(vel_input); 954 1063 vel_input->GetInputAverage(&vel); 955 1064 … … 1014 1123 1015 1124 if(scaled==true){ 1016 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);1125 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 1017 1126 scalefactor_input->GetInputAverage(&scalefactor); 1018 1127 floatingarea=floatingarea*scalefactor; … … 1028 1137 1029 1138 int approximation; 1030 inputs->GetInputValue(&approximation,ApproximationEnum);1139 this->GetInput2Value(&approximation,ApproximationEnum); 1031 1140 if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum || approximation==SSAHOApproximationEnum || approximation==HOFSApproximationEnum){ 1032 1141 _error_("Cannot compute contact condition for non FS elements"); … … 1053 1162 1054 1163 /*Retrieve all inputs we will be needing: */ 1055 Input * vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);1056 Input * vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);1057 Input * vz_input = inputs->GetInput(VzEnum); _assert_(vz_input);1164 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 1165 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 1166 Input2* vz_input = this->GetInput2(VzEnum); _assert_(vz_input); 1058 1167 1059 1168 /*1. Recover stresses at the base*/ … … 1472 1581 xDelete<int>(indicesfront); 1473 1582 }/*}}}*/ 1583 Input2* Penta::GetInput2(int inputenum){/*{{{*/ 1584 1585 /*Get Input from dataset*/ 1586 PentaInput2* input = this->inputs2->GetPentaInput(inputenum); 1587 if(!input) return input; 1588 1589 /*Intermediaries*/ 1590 int numindices; 1591 int indices[30]; /*Max numnodes*/ 1592 1593 /*Check interpolation*/ 1594 int interpolation = input->GetInterpolation(); 1595 if(interpolation==P1Enum){ 1596 numindices = 6; 1597 for(int i=0;i<6;i++) indices[i] = vertices[i]->lid; 1598 input->Serve(numindices,&indices[0]); 1599 } 1600 else{ 1601 input->Serve(this->lid,this->GetNumberOfNodes(interpolation)); 1602 } 1603 1604 /*Tell input it is NOT collapsed*/ 1605 //input->SetServeCollapsed(0); FIXME: not needed? 1606 1607 /*Return*/ 1608 return input; 1609 }/*}}}*/ 1610 Input2* Penta::GetInput2(int inputenum,IssmDouble time){/*{{{*/ 1611 1612 /*Get Input from dataset*/ 1613 PentaInput2* input = this->inputs2->GetPentaInput(inputenum,time); 1614 if(!input) return input; 1615 1616 /*Intermediaries*/ 1617 int numindices; 1618 int indices[30]; /*Max numnodes*/ 1619 1620 /*Check interpolation*/ 1621 int interpolation = input->GetInterpolation(); 1622 if(interpolation==P1Enum){ 1623 numindices = 6; 1624 for(int i=0;i<6;i++) indices[i] = vertices[i]->lid; 1625 input->Serve(numindices,&indices[0]); 1626 } 1627 else{ 1628 input->Serve(this->lid,this->GetNumberOfNodes(interpolation)); 1629 } 1630 1631 /*Tell input it is NOT collapsed*/ 1632 //input->SetServeCollapsed(0); FIXME: not needed? 1633 1634 /*Return*/ 1635 return input; 1636 }/*}}}*/ 1637 DatasetInput2* Penta::GetDatasetInput2(int inputenum){/*{{{*/ 1638 1639 DatasetInput2* datasetinput = this->inputs2->GetDatasetInput2(inputenum); 1640 if(!datasetinput) return NULL; 1641 1642 for(int i=0;i<datasetinput->GetNumIds();i++){ 1643 1644 PentaInput2* input = datasetinput->GetPentaInputByOffset(i); _assert_(input); 1645 1646 /*Intermediaries*/ 1647 int numindices; 1648 int indices[30]; /*Max numnodes*/ 1649 1650 /*Check interpolation*/ 1651 int interpolation = input->GetInterpolation(); 1652 if(interpolation==P1Enum){ 1653 numindices = 6; 1654 for(int i=0;i<6;i++) indices[i] = vertices[i]->lid; 1655 input->Serve(numindices,&indices[0]); 1656 } 1657 else{ 1658 input->Serve(this->lid,this->GetNumberOfNodes(interpolation)); 1659 } 1660 1661 } 1662 1663 return datasetinput; 1664 }/*}}}*/ 1474 1665 void Penta::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/ 1475 1666 1476 Input * input=inputs->GetInput(enumtype);1667 Input2* input=this->GetInput2(enumtype); 1477 1668 if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria"); 1478 1669 … … 1488 1679 void Penta::GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){/*{{{*/ 1489 1680 1490 Input * input=inputs->GetInput(enumtype);1681 Input2* input=this->GetInput2(enumtype); 1491 1682 if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria"); 1492 1683 … … 1617 1808 void Penta::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){/*{{{*/ 1618 1809 1619 int vertexidlist[NUMVERTICES];1620 1621 1810 /*Get out if this is not an element input*/ 1622 1811 if(!IsInputEnum(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput"); 1623 1812 1624 1813 /*Prepare index list*/ 1625 GradientIndexing(&vertexidlist[0],control_index); 1814 int idlist[NUMVERTICES]; 1815 GradientIndexing(&idlist[0],control_index); 1626 1816 1627 1817 /*Get input (either in element or material)*/ 1628 1818 if(control_enum==MaterialsRheologyBbarEnum) control_enum=MaterialsRheologyBEnum; 1629 Input* input=inputs->GetInput(control_enum); 1630 if(!input) _error_("Input " << EnumToStringx(control_enum) << " not found in element"); 1631 1632 /*Check that it is a ControlInput*/ 1633 if (input->ObjectEnum()!=ControlInputEnum){ 1634 _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 1635 } 1636 1637 ((ControlInput*)input)->GetVectorFromInputs(vector,&vertexidlist[0],data); 1819 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data); _assert_(input); 1820 1821 /*Intermediaries*/ 1822 int numindices; 1823 int indices[NUMVERTICES]; 1824 1825 /*Check interpolation*/ 1826 int interpolation = input->GetInterpolation(); 1827 switch(interpolation){ 1828 case P1Enum: 1829 numindices = NUMVERTICES; 1830 for(int i=0;i<NUMVERTICES;i++) indices[i] = vertices[i]->lid; 1831 input->Serve(numindices,&indices[0]); 1832 break; 1833 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 1834 } 1835 1836 /* Start looping on the number of vertices: */ 1837 IssmDouble values[NUMVERTICES]; 1838 Gauss*gauss=this->NewGauss(); 1839 for(int iv=0;iv<NUMVERTICES;iv++){ 1840 gauss->GaussVertex(iv); 1841 input->GetInputValue(&values[iv],gauss); 1842 } 1843 delete gauss; 1844 1845 vector->SetValues(NUMVERTICES,idlist,&values[0],INS_VAL); 1638 1846 } 1639 1847 /*}}}*/ … … 1642 1850 int* idlist = NULL; 1643 1851 IssmDouble* values = NULL; 1644 int* M = NULL; 1645 1646 /*Get out if this is not an element input*/ 1647 if(!IsInputEnum(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput"); 1648 Input* input=(Input*)this->inputs->GetInput(control_enum); _assert_(input); 1649 1650 /*Cast to Controlinput*/ 1651 if(input->ObjectEnum()!=ControlInputEnum) _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 1652 ControlInput* controlinput = xDynamicCast<ControlInput*>(input); 1653 1654 if(strcmp(data,"value")==0){ 1655 input = controlinput->values; 1656 } 1657 else if (strcmp(data,"lowerbound")==0){ 1658 input = controlinput->minvalues; 1659 } 1660 else if (strcmp(data,"upperbound")==0){ 1661 input = controlinput->maxvalues; 1662 } 1663 else if (strcmp(data,"gradient")==0){ 1664 input = controlinput->gradient; 1665 } 1666 else{ 1667 _error_("Data " << data << " not supported yet"); 1668 } 1852 1853 /*Get input*/ 1854 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data); _assert_(input); 1855 1669 1856 /*Check what input we are dealing with*/ 1670 1671 1857 switch(input->ObjectEnum()){ 1672 case PentaInput Enum:1858 case PentaInput2Enum: 1673 1859 { 1674 PentaInput * pentainput = xDynamicCast<PentaInput*>(input);1675 if(pentainput-> interpolation_type!=P1Enum) _error_("not supported yet");1860 PentaInput2* pentainput = xDynamicCast<PentaInput2*>(input); 1861 if(pentainput->GetInputInterpolationType()!=P1Enum) _error_("not supported yet"); 1676 1862 1677 1863 /*Create list of indices and values for global vector*/ … … 1680 1866 GradientIndexing(&idlist[0],control_index); 1681 1867 for(int i=0;i<NUMVERTICES;i++){ 1682 values[i] = pentainput-> values[i];1868 values[i] = pentainput->element_values[i]; 1683 1869 } 1684 1870 vector->SetValues(NUMVERTICES,idlist,values,INS_VAL); … … 1688 1874 case TransientInputEnum: 1689 1875 { 1690 parameters->FindParam(&M,NULL,ControlInputSizeMEnum); 1691 TransientInput* transientinput = xDynamicCast<TransientInput*>(input); 1692 int N = transientinput->numtimesteps; 1693 idlist = xNew<int>(NUMVERTICES*N); 1694 values = xNew<IssmDouble>(NUMVERTICES*N); 1695 for(int t=0;t<transientinput->numtimesteps;t++) { 1696 IssmDouble time = transientinput->GetTimeByOffset(t); 1697 input = transientinput->GetTimeInput(time); 1698 TriaInput* timeinput = xDynamicCast<TriaInput*>(input); 1699 if(timeinput->interpolation_type!=P1Enum) _error_("not supported yet"); 1700 /*Create list of indices and values for global vector*/ 1701 for(int i=0;i<NUMVERTICES;i++){ 1702 idlist[N*i+t] = offset + this->vertices[i]->Sid()+t*M[control_index]; 1703 values[N*i+t] = timeinput->values[i]; 1704 } 1705 } 1706 1707 vector->SetValues(NUMVERTICES*transientinput->numtimesteps,idlist,values,INS_VAL); 1876 _error_("not implemented (see Tria)"); 1708 1877 break; 1709 1878 } … … 1753 1922 1754 1923 if(scaled==true){ 1755 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);1924 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 1756 1925 scalefactor_input->GetInputAverage(&scalefactor); 1757 1926 groundedarea=groundedarea*scalefactor; … … 1857 2026 IssmDouble vx,vy,thickness,Jdet; 1858 2027 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 1859 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);1860 Input * vx_input=NULL;1861 Input * vy_input=NULL;1862 vx_input= inputs->GetInput(VxAverageEnum); _assert_(vx_input);1863 vy_input= inputs->GetInput(VyAverageEnum); _assert_(vy_input);2028 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 2029 Input2* vx_input=NULL; 2030 Input2* vy_input=NULL; 2031 vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input); 2032 vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input); 1864 2033 1865 2034 /*Start looping on Gaussian points*/ … … 1895 2064 1896 2065 if(scaled==true){ //scale for area projection correction 1897 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);2066 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 1898 2067 scalefactor_input->GetInputAverage(&scalefactor); 1899 2068 base=base*scalefactor; … … 1925 2094 base = 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1])); 1926 2095 if(scaled==true){ 1927 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);2096 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 1928 2097 scalefactor_input->GetInputAverage(&scalefactor); 1929 2098 base=base*scalefactor; … … 1931 2100 1932 2101 /*Now get the average height above floatation*/ 1933 Input * surface_input = inputs->GetInput(SurfaceEnum); _assert_(surface_input);1934 Input * base_input = inputs->GetInput(BaseEnum); _assert_(base_input);1935 Input * bed_input = inputs->GetInput(BedEnum); _assert_(bed_input);2102 Input2* surface_input = this->GetInput2(SurfaceEnum); _assert_(surface_input); 2103 Input2* base_input = this->GetInput2(BaseEnum); _assert_(base_input); 2104 Input2* bed_input = this->GetInput2(BedEnum); _assert_(bed_input); 1936 2105 if(!bed_input) _error_("Could not find bed"); 1937 2106 surface_input->GetInputAverage(&surface); … … 1949 2118 IssmDouble xyz_list_line[2][3]; 1950 2119 IssmDouble total[NUMVERTICES] = {0.}; 2120 int lidlist[NUMVERTICES]; 1951 2121 IssmDouble intz[NUMVERTICES] = {0.}; 1952 Input 1953 Input 2122 Input2 *original_input = NULL; 2123 Input2 *depth_averaged_input = NULL; 1954 2124 1955 2125 /*Are we on the base? If not, return*/ … … 1962 2132 1963 2133 /*Step1: Get original input (to be depth-avegaged): */ 1964 original_input= (Input*)penta->inputs->GetInput(original_enum);2134 original_input=penta->GetInput2(original_enum); 1965 2135 if(!original_input) _error_("could not find input with enum " << EnumToStringx(original_enum)); 1966 2136 … … 1998 2168 total[iv+3] = total[iv]; 1999 2169 } 2170 GetVerticesLidList(&lidlist[0]); 2000 2171 switch(original_input->ObjectEnum()){ 2001 2172 case PentaInputEnum: 2173 case PentaInput2Enum: 2002 2174 case ControlInputEnum: 2003 depth_averaged_input=new PentaInput(average_enum,&total[0],P1Enum);2175 this->inputs2->SetPentaInput(average_enum,P1Enum,NUMVERTICES,lidlist,&total[0]); 2004 2176 break; 2005 2177 default: 2006 2178 _error_("Interpolation " << EnumToStringx(original_input->ObjectEnum()) << " not supported yet"); 2007 2179 } 2008 2009 /*Finally, add to inputs*/ 2010 this->inputs->AddInput((Input*)depth_averaged_input); 2011 } 2012 /*}}}*/ 2013 void Penta::InputExtrude(int enum_type,int start){/*{{{*/ 2180 } 2181 /*}}}*/ 2182 void Penta::DatasetInputExtrude(int enum_type,int start){/*{{{*/ 2014 2183 2015 2184 _assert_(start==-1 || start==+1); 2185 _assert_(this->inputs2); 2016 2186 2017 2187 /*Are we on the the boundary we want to be?*/ … … 2019 2189 if(start==+1 && !IsOnSurface()) return; 2020 2190 2021 /*Step1: Get and Extrude original input: */ 2022 Input* base_input=(Input*)this->inputs->GetInput(enum_type); 2023 if(!base_input) _error_("could not find input with enum " << EnumToStringx(enum_type)); 2024 base_input->Extrude(start); 2025 2026 /*Stop if there is only one layer of element*/ 2027 if(start==-1 && this->IsOnSurface()) return; 2028 if(start==+1 && this->IsOnBase()) return; 2029 2030 /*Step 2: this input has been extruded for this element, now follow the upper element*/ 2031 Penta* penta=this; 2032 for(;;){ 2033 /*get upper/lower Penta*/ 2034 if(start==-1) penta=penta->GetUpperPenta(); 2035 else penta=penta->GetLowerPenta(); 2036 _assert_(penta->Id()!=this->id); 2037 2038 /*Add input of the basal element to penta->inputs*/ 2039 Input* copy=(Input*)base_input->copy(); 2040 penta->inputs->AddInput((Input*)copy); 2041 2042 /*Stop if we have reached the surface/base*/ 2043 if(start==-1 && penta->IsOnSurface()) break; 2044 if(start==+1 && penta->IsOnBase()) break; 2191 /*Get original input*/ 2192 DatasetInput2* dinput = this->inputs2->GetDatasetInput2(enum_type); 2193 2194 int lidlist[NUMVERTICES]; 2195 this->GetVerticesLidList(&lidlist[0]); 2196 2197 for(int id=0;id<dinput->GetNumIds();id++){ 2198 2199 PentaInput2* pentainput = dinput->GetPentaInputByOffset(id); 2200 pentainput->Serve(NUMVERTICES,&lidlist[0]); 2201 2202 if(pentainput->GetInterpolation()==P1Enum){ 2203 2204 /*Extrude values first*/ 2205 IssmDouble extrudedvalues[NUMVERTICES]; 2206 this->GetInputListOnVertices(&extrudedvalues[0],pentainput); 2207 2208 if(start==-1){ 2209 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i+NUMVERTICES2D]=extrudedvalues[i]; 2210 } 2211 else{ 2212 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i]=extrudedvalues[i+NUMVERTICES2D]; 2213 } 2214 2215 /*Propagate to other Pentas*/ 2216 Penta* penta=this; 2217 for(;;){ 2218 2219 /*Add input of the basal element to penta->inputs*/ 2220 int vertexlids[NUMVERTICES]; 2221 penta->GetVerticesLidList(&vertexlids[0]); 2222 pentainput->SetInput(P1Enum,NUMVERTICES,&vertexlids[0],&extrudedvalues[0]); 2223 2224 /*Stop if we have reached the surface/base*/ 2225 if(start==-1 && penta->IsOnSurface()) break; 2226 if(start==+1 && penta->IsOnBase()) break; 2227 2228 /*get upper/lower Penta*/ 2229 if(start==-1) penta=penta->GetUpperPenta(); 2230 else penta=penta->GetLowerPenta(); 2231 _assert_(penta->Id()!=this->id); 2232 } 2233 } 2234 else{ 2235 _error_("not implemented yet"); 2236 } 2237 } 2238 } 2239 /*}}}*/ 2240 void Penta::ControlInputExtrude(int enum_type,int start){/*{{{*/ 2241 2242 _assert_(start==-1 || start==+1); 2243 _assert_(this->inputs2); 2244 2245 /*Are we on the the boundary we want to be?*/ 2246 if(start==-1 && !IsOnBase()) return; 2247 if(start==+1 && !IsOnSurface()) return; 2248 2249 /*Get original input*/ 2250 ElementInput2* input = this->inputs2->GetControlInput2Data(enum_type,"value"); 2251 if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet"); 2252 PentaInput2* pentainput = xDynamicCast<PentaInput2*>(input); 2253 ElementInput2* input2 = this->inputs2->GetControlInput2Data(enum_type,"savedvalues"); 2254 if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet"); 2255 PentaInput2* pentainput2= xDynamicCast<PentaInput2*>(input2); 2256 /*FIXME: this should not be necessary*/ 2257 ElementInput2* input3 = this->inputs2->GetControlInput2Data(enum_type,"gradient"); 2258 if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet"); 2259 PentaInput2* pentainput3= xDynamicCast<PentaInput2*>(input3); 2260 2261 int lidlist[NUMVERTICES]; 2262 this->GetVerticesLidList(&lidlist[0]); 2263 pentainput->Serve(NUMVERTICES,&lidlist[0]); 2264 pentainput2->Serve(NUMVERTICES,&lidlist[0]); 2265 pentainput3->Serve(NUMVERTICES,&lidlist[0]); 2266 2267 if(pentainput->GetInterpolation()==P1Enum){ 2268 2269 /*Extrude values first*/ 2270 IssmDouble extrudedvalues[NUMVERTICES]; 2271 IssmDouble extrudedvalues2[NUMVERTICES]; 2272 IssmDouble extrudedvalues3[NUMVERTICES]; 2273 2274 this->GetInputListOnVertices(&extrudedvalues[0],pentainput); 2275 this->GetInputListOnVertices(&extrudedvalues2[0],pentainput2); 2276 this->GetInputListOnVertices(&extrudedvalues3[0],pentainput3); 2277 2278 if(start==-1){ 2279 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i+NUMVERTICES2D]=extrudedvalues[i]; 2280 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues2[i+NUMVERTICES2D]=extrudedvalues2[i]; 2281 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues3[i+NUMVERTICES2D]=extrudedvalues3[i]/2.; /*FIXME: this is just for NR*/ 2282 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues3[i]=extrudedvalues3[i]/2.; /*FIXME: this is just for NR*/ 2283 } 2284 else{ 2285 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i]=extrudedvalues[i+NUMVERTICES2D]; 2286 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues2[i]=extrudedvalues2[i+NUMVERTICES2D]; 2287 } 2288 2289 /*Propagate to other Pentas*/ 2290 Penta* penta=this; 2291 for(;;){ 2292 2293 if(penta->IsOnSurface() && start==-1){ /*FIXME: this is just for NR*/ 2294 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues3[i+NUMVERTICES2D]=0.; 2295 } 2296 2297 /*Add input of the basal element to penta->inputs*/ 2298 int vertexlids[NUMVERTICES]; 2299 penta->GetVerticesLidList(&vertexlids[0]); 2300 pentainput->SetInput(P1Enum,NUMVERTICES,&vertexlids[0],&extrudedvalues[0]); 2301 pentainput2->SetInput(P1Enum,NUMVERTICES,&vertexlids[0],&extrudedvalues2[0]); 2302 if(start==-1 && !penta->IsOnBase()){ 2303 pentainput3->SetInput(P1Enum,NUMVERTICES,&vertexlids[0],&extrudedvalues3[0]); 2304 } 2305 2306 /*Stop if we have reached the surface/base*/ 2307 if(start==-1 && penta->IsOnSurface()) break; 2308 if(start==+1 && penta->IsOnBase()) break; 2309 2310 /*get upper/lower Penta*/ 2311 if(start==-1) penta=penta->GetUpperPenta(); 2312 else penta=penta->GetLowerPenta(); 2313 _assert_(penta->Id()!=this->id); 2314 } 2315 } 2316 else{ 2317 _error_("not implemented yet"); 2318 } 2319 } 2320 /*}}}*/ 2321 void Penta::InputExtrude(int enum_type,int start){/*{{{*/ 2322 2323 _assert_(start==-1 || start==+1); 2324 _assert_(this->inputs2); 2325 2326 /*Are we on the the boundary we want to be?*/ 2327 if(start==-1 && !IsOnBase()) return; 2328 if(start==+1 && !IsOnSurface()) return; 2329 2330 2331 /*Get original input*/ 2332 Input2* input = this->GetInput2(enum_type); 2333 if(input->ObjectEnum()!=PentaInput2Enum) _error_("not supported yet"); 2334 PentaInput2* pentainput = xDynamicCast<PentaInput2*>(input); 2335 2336 if(pentainput->GetInterpolation()==P1Enum || pentainput->GetInterpolation()==P1DGEnum){ 2337 /*Extrude values first*/ 2338 IssmDouble extrudedvalues[NUMVERTICES]; 2339 2340 this->GetInputListOnVertices(&extrudedvalues[0],enum_type); 2341 if(start==-1){ 2342 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i+NUMVERTICES2D]=extrudedvalues[i]; 2343 } 2344 else{ 2345 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i]=extrudedvalues[i+NUMVERTICES2D]; 2346 } 2347 2348 /*Propagate to other Pentas*/ 2349 Penta* penta=this; 2350 for(;;){ 2351 2352 /*Add input of the basal element to penta->inputs*/ 2353 penta->AddInput2(enum_type,&extrudedvalues[0],pentainput->GetInterpolation()); 2354 2355 /*Stop if we have reached the surface/base*/ 2356 if(start==-1 && penta->IsOnSurface()) break; 2357 if(start==+1 && penta->IsOnBase()) break; 2358 2359 /*get upper/lower Penta*/ 2360 if(start==-1) penta=penta->GetUpperPenta(); 2361 else penta=penta->GetLowerPenta(); 2362 _assert_(penta->Id()!=this->id); 2363 } 2364 } 2365 else{ 2366 _error_("interpolation "<<EnumToStringx(pentainput->GetInterpolation())<<" not implemented yet"); 2045 2367 } 2046 2368 } … … 2071 2393 penta_vertex_ids[i]=iomodel->elements[NUMVERTICES*index+i]; //ids for vertices are in the elements array from Matlab 2072 2394 } 2073 2074 /*Control Inputs*/2075 if (control_analysis){2076 iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");2077 for(i=0;i<num_control_type;i++){2078 _assert_(controls[i]);2079 int control = StringToEnumx(controls[i]);2080 switch(control){2081 case BalancethicknessThickeningRateEnum:2082 if (iomodel->Data("md.balancethickness.thickening_rate")){2083 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[penta_vertex_ids[j]-1];2084 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;2085 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;2086 this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));2087 }2088 break;2089 case VxEnum:2090 if (iomodel->Data("md.initialization.vx")){2091 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[penta_vertex_ids[j]-1];2092 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;2093 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;2094 this->inputs->AddInput(new ControlInput(VxEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));2095 }2096 break;2097 case VyEnum:2098 if (iomodel->Data("md.initialization.vy")){2099 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[penta_vertex_ids[j]-1];2100 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;2101 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;2102 this->inputs->AddInput(new ControlInput(VyEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));2103 }2104 break;2105 case FrictionCoefficientEnum:2106 if (iomodel->Data("md.friction.coefficient")){2107 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[penta_vertex_ids[j]-1];2108 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];2109 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];2110 this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));2111 }2112 break;2113 case MaterialsRheologyBbarEnum:2114 if(iomodel->Data("md.materials.rheology_B")){2115 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[penta_vertex_ids[j]-1];2116 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];2117 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];2118 this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));2119 }2120 break;2121 case DamageDbarEnum:2122 if(iomodel->Data("md.damage.D")){2123 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[penta_vertex_ids[j]-1];2124 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];2125 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(penta_vertex_ids[j]-1)*num_control_type+i];2126 this->inputs->AddInput(new ControlInput(DamageDEnum,PentaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));2127 }2128 break;2129 default:2130 _error_("Control " << EnumToStringx(control) << " not implemented yet");2131 }2132 }2133 for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]);2134 xDelete<char*>(controls);2135 }2136 2137 /*Need to know the type of approximation for this element*/2138 if(iomodel->Data("md.flowequation.element_equation")){2139 this->inputs->AddInput(new IntInput(ApproximationEnum,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[index]))));2140 }2141 2142 /*DatasetInputs*/2143 if(control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")) {2144 2145 /*Generate cost functions associated with the iomodel*/2146 char** cost_functions = NULL;2147 int* cost_functions_enums = NULL;2148 int num_cost_functions;2149 2150 iomodel->FindConstant(&num_cost_functions,"md.inversion.num_cost_functions");2151 iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.inversion.cost_functions");2152 if(num_cost_functions<1) _error_("No cost functions found");2153 cost_functions_enums=xNew<int>(num_cost_functions);2154 for(j=0;j<num_cost_functions;j++){ cost_functions_enums[j]=StringToEnumx(cost_functions[j]); }2155 2156 /*Create inputs and add to DataSetInput*/2157 DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);2158 for(i=0;i<num_responses;i++){2159 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(penta_vertex_ids[j]-1)*num_responses+i];2160 datasetinput->AddInput(new PentaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),cost_functions_enums[i]);2161 }2162 2163 /*Add datasetinput to element inputs*/2164 this->inputs->AddInput(datasetinput);2165 2166 /*Free resources*/2167 for(int j=0;j<num_cost_functions;j++) xDelete<char>(cost_functions[j]);2168 xDelete<char*>(cost_functions);2169 xDelete<int>(cost_functions_enums);2170 }2171 2395 } 2172 2396 /*}}}*/ … … 2191 2415 2192 2416 /*Add input to the element: */ 2193 this-> inputs->AddInput(new PentaInput(enum_type,values,this->element_type));2417 this->AddInput2(enum_type,values,this->element_type); 2194 2418 2195 2419 /*Free ressources:*/ … … 2225 2449 for(;;){ 2226 2450 /*Add input to the element: */ 2227 penta-> inputs->AddInput(new PentaInput(enum_type,values,P1Enum));2451 penta->AddInput2(enum_type,values,P1Enum); 2228 2452 2229 2453 /*Stop if we have reached the surface*/ … … 2243 2467 int *doflist = NULL; 2244 2468 IssmDouble values[numdof]; 2469 int lidlist[NUMVERTICES]; 2470 2471 GetVerticesLidList(&lidlist[0]); 2245 2472 2246 2473 /*Check that name is an element input*/ … … 2253 2480 } 2254 2481 /*update input*/ 2255 this->inputs->AddInput(new PentaInput(name,values,P1Enum));2482 inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2256 2483 return; 2257 2484 … … 2261 2488 } 2262 2489 /*update input*/ 2263 this->inputs->AddInput(new PentaInput(name,values,P1Enum));2490 inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2264 2491 return; 2265 2492 … … 2269 2496 } 2270 2497 /*update input*/ 2271 this->inputs->AddInput(new PentaInput(name,values,P1Enum));2498 inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2272 2499 return; 2273 2500 … … 2283 2510 } 2284 2511 /*Add input to the element: */ 2285 this->inputs->AddInput(new PentaInput(name,values,P1Enum));2512 inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2286 2513 2287 2514 /*Free ressources:*/ … … 2296 2523 } 2297 2524 /*Add input to the element: */ 2298 this->inputs->AddInput(new PentaInput(name,values,P1Enum));2525 inputs2->SetPentaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2299 2526 2300 2527 /*Free ressources:*/ … … 2340 2567 } 2341 2568 /*}}}*/ 2342 bool Penta::IsOnBase(void){/*{{{*/2343 2344 IssmDouble values[NUMVERTICES];2345 IssmDouble sum;2346 2347 /*Retrieve all inputs and parameters*/2348 GetInputListOnVertices(&values[0],MeshVertexonbaseEnum);2349 sum = values[0]+values[1]+values[2]+values[3]+values[4]+values[5];2350 _assert_(sum==0. || sum==3.);2351 2352 if(sum==3){2353 return true;2354 }2355 else{2356 return false;2357 }2358 }2359 /*}}}*/2360 bool Penta::IsOnSurface(void){/*{{{*/2361 2362 IssmDouble values[NUMVERTICES];2363 IssmDouble sum;2364 2365 /*Retrieve all inputs and parameters*/2366 GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);2367 sum = values[0]+values[1]+values[2]+values[3]+values[4]+values[5];2368 _assert_(sum==0. || sum==3.);2369 2370 if(sum==3){2371 return true;2372 }2373 else{2374 return false;2375 }2376 }2377 /*}}}*/2378 2569 bool Penta::IsZeroLevelset(int levelset_enum){/*{{{*/ 2379 2570 … … 2613 2804 int found=0; 2614 2805 IssmDouble value; 2615 Input* data=NULL;2616 2806 GaussPenta* gauss=NULL; 2617 2807 2618 2808 /*First, serarch the input: */ 2619 data=inputs->GetInput(natureofdataenum);2809 Input2* data=this->GetInput2(natureofdataenum); 2620 2810 2621 2811 /*figure out if we have the vertex id: */ … … 2772 2962 if(this->element_type==MINIcondensedEnum){ 2773 2963 int approximation; 2774 inputs->GetInputValue(&approximation,ApproximationEnum);2964 this->GetInput2Value(&approximation,ApproximationEnum); 2775 2965 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 2776 2966 //Do nothing, condensation already done in PVectorCoupling … … 2796 2986 if(analysis_type==StressbalanceAnalysisEnum){ 2797 2987 int approximation; 2798 inputs->GetInputValue(&approximation,ApproximationEnum);2988 this->GetInput2Value(&approximation,ApproximationEnum); 2799 2989 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 2800 2990 //Do nothing condensatino already done for Stokes part … … 2829 3019 2830 3020 /*For FS only: we want the CS to be tangential to the bedrock*/ 2831 inputs->GetInputValue(&approximation,ApproximationEnum);3021 this->GetInput2Value(&approximation,ApproximationEnum); 2832 3022 if(!IsOnBase() || (approximation!=FSApproximationEnum && approximation!=SSAFSApproximationEnum && approximation!=HOFSApproximationEnum)) return; 2833 3023 … … 2836 3026 2837 3027 /*Get inputs*/ 2838 Input * slopex_input=inputs->GetInput(BedSlopeXEnum); _assert_(slopex_input);2839 Input * slopey_input=inputs->GetInput(BedSlopeYEnum); _assert_(slopey_input);2840 Input * groundedicelevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(groundedicelevelset_input);3028 Input2* slopex_input=this->GetInput2(BedSlopeXEnum); _assert_(slopex_input); 3029 Input2* slopey_input=this->GetInput2(BedSlopeYEnum); _assert_(slopey_input); 3030 Input2* groundedicelevelset_input=this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(groundedicelevelset_input); 2841 3031 2842 3032 /*Loop over basal nodes and update their CS*/ … … 2915 3105 2916 3106 /*Get inputs*/ 2917 Input * bed_input = this->GetInput(BedEnum); _assert_(bed_input);2918 Input * qsg_input = this->GetInput(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input);2919 Input * TF_input = this->GetInput(FrontalForcingsThermalForcingEnum); _assert_(TF_input);3107 Input2* bed_input = this->GetInput2(BedEnum); _assert_(bed_input); 3108 Input2* qsg_input = this->GetInput2(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input); 3109 Input2* TF_input = this->GetInput2(FrontalForcingsThermalForcingEnum); _assert_(TF_input); 2920 3110 GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum); 2921 3111 … … 2950 3140 2951 3141 /*Add input*/ 2952 this-> inputs->AddInput(new PentaInput(CalvingMeltingrateEnum,&meltrates[0],P1Enum));3142 this->AddInput2(CalvingMeltingrateEnum,&meltrates[0],P1Enum); 2953 3143 2954 3144 this->InputExtrude(CalvingMeltingrateEnum,-1); … … 2957 3147 xDelete<IssmDouble>(basin_icefront_area); 2958 3148 delete gauss; 3149 } 3150 /*}}}*/ 3151 void Penta::SetElementInput(int enum_in,IssmDouble value){/*{{{*/ 3152 3153 this->SetElementInput(this->inputs2,enum_in,value); 3154 3155 } 3156 /*}}}*/ 3157 void Penta::SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble value){/*{{{*/ 3158 3159 _assert_(inputs2); 3160 inputs2->SetPentaInput(enum_in,P0Enum,this->lid,value); 3161 3162 } 3163 /*}}}*/ 3164 void Penta::SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){/*{{{*/ 3165 3166 _assert_(inputs2); 3167 inputs2->SetPentaInput(enum_in,P1Enum,numindices,indices,values); 3168 2959 3169 } 2960 3170 /*}}}*/ … … 2985 3195 values[i]=vector[vertexpidlist[i]]; 2986 3196 } 2987 Input* new_input = new PentaInput(control_enum,values,P1Enum); 2988 Input* input=(Input*)this->inputs->GetInput(control_enum); _assert_(input); 3197 _error_("not implemented"); 3198 //Input* new_input = new PentaInput(control_enum,values,P1Enum); 3199 Input2* input=(Input2*)this->GetInput2(control_enum); _assert_(input); 2989 3200 if(input->ObjectEnum()!=ControlInputEnum){ 2990 3201 _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 2991 3202 } 2992 3203 2993 ((ControlInput*)input)->SetInput(new_input);3204 //((ControlInput*)input)->SetInput(new_input); 2994 3205 2995 3206 if(control_init==MaterialsRheologyBbarEnum){ … … 3004 3215 3005 3216 IssmDouble values[NUMVERTICES]; 3006 int vertexpidlist[NUMVERTICES],control_init; 3217 int lidlist[NUMVERTICES]; 3218 int idlist[NUMVERTICES],control_init; 3007 3219 3008 3220 /*Specific case for depth averaged quantities*/ … … 3017 3229 } 3018 3230 3231 /*Get Domain type*/ 3232 int domaintype; 3233 parameters->FindParam(&domaintype,DomainTypeEnum); 3234 3235 /*Specific case for depth averaged quantities*/ 3236 if(domaintype==Domain2DverticalEnum){ 3237 if(control_enum==MaterialsRheologyBbarEnum){ 3238 control_enum=MaterialsRheologyBEnum; 3239 if(!IsOnBase()) return; 3240 } 3241 if(control_enum==DamageDbarEnum){ 3242 control_enum=DamageDEnum; 3243 if(!IsOnBase()) return; 3244 } 3245 } 3246 3019 3247 /*Get out if this is not an element input*/ 3020 3248 if(!IsInputEnum(control_enum)) return; 3021 3249 3022 /*Prepare index list*/ 3023 GradientIndexing(&vertexpidlist[0],control_index); 3250 /*prepare index list*/ 3251 this->GetVerticesLidList(&lidlist[0]); 3252 GradientIndexing(&idlist[0],control_index); 3024 3253 3025 3254 /*Get values on vertices*/ 3026 3255 for(int i=0;i<NUMVERTICES;i++){ 3027 values[i]=vector[vertexpidlist[i]]; 3028 } 3029 Input* new_input = new PentaInput(control_enum,values,P1Enum); 3030 Input* input=(Input*)this->inputs->GetInput(control_enum); _assert_(input); 3031 if(input->ObjectEnum()!=ControlInputEnum){ 3032 _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 3033 } 3034 3035 ((ControlInput*)input)->SetInput(new_input); 3036 3256 values[i]=vector[idlist[i]]; 3257 } 3258 3259 /*Set Input*/ 3260 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"value"); _assert_(input); 3261 input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]); 3037 3262 if(control_init==MaterialsRheologyBbarEnum){ 3038 this-> InputExtrude(control_enum,-1);3263 this->ControlInputExtrude(control_enum,-1); 3039 3264 } 3040 3265 if(control_init==DamageDbarEnum){ 3041 this-> InputExtrude(control_enum,-1);3266 this->ControlInputExtrude(control_enum,-1); 3042 3267 } 3043 3268 } … … 3080 3305 _error_("not supported yet"); 3081 3306 } 3082 if(this-> inputs->GetInput(VxEnum)) this->InputDepthAverageAtBase(VxEnum,VxAverageEnum);3083 if(this-> inputs->GetInput(VyEnum)) this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);3084 if(this-> inputs->GetInput(CalvingratexEnum)) this->InputDepthAverageAtBase(CalvingratexEnum,CalvingratexAverageEnum);3085 if(this-> inputs->GetInput(CalvingrateyEnum)) this->InputDepthAverageAtBase(CalvingrateyEnum,CalvingrateyAverageEnum);3307 if(this->GetInput2(VxEnum)) this->InputDepthAverageAtBase(VxEnum,VxAverageEnum); 3308 if(this->GetInput2(VyEnum)) this->InputDepthAverageAtBase(VyEnum,VyAverageEnum); 3309 if(this->GetInput2(CalvingratexEnum)) this->InputDepthAverageAtBase(CalvingratexEnum,CalvingratexAverageEnum); 3310 if(this->GetInput2(CalvingrateyEnum)) this->InputDepthAverageAtBase(CalvingrateyEnum,CalvingrateyAverageEnum); 3086 3311 3087 3312 Tria* tria=(Tria*)SpawnTria(0,1,2); … … 3123 3348 Tria* tria=new Tria(); 3124 3349 tria->id=this->id; 3125 tria->inputs=(Inputs*)this->inputs->SpawnTriaInputs(index1,index2,index3); 3350 tria->sid=this->sid; 3351 tria->lid=this->lid; 3352 tria->inputs=NULL;//(Inputs*)this->inputs->SpawnTriaInputs(index1,index2,index3); 3126 3353 tria->parameters=this->parameters; 3354 tria->inputs2=this->inputs2; 3127 3355 tria->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED) 3128 3356 this->SpawnTriaHook(xDynamicCast<ElementHook*>(tria),index1,index2,index3); 3357 3358 if(index1==0 && index2==1 && index3==2){ 3359 tria->iscollapsed = 1; 3360 } 3361 else if(index1==3 && index2==4 && index3==5){ 3362 tria->iscollapsed = 2; 3363 } 3129 3364 3130 3365 /*Spawn material*/ … … 3197 3432 3198 3433 /*Retrieve all inputs we will need*/ 3199 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);3200 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);3201 Input * vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);3434 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 3435 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 3436 Input2* vz_input=this->GetInput2(VzEnum); _assert_(vz_input); 3202 3437 3203 3438 /* Start looping on the number of vertices: */ … … 3222 3457 3223 3458 /*Add input*/ 3224 this-> inputs->AddInput(new PentaInput(StrainRateparallelEnum,&strainparallel[0],P1Enum));3459 this->AddInput2(StrainRateparallelEnum,&strainparallel[0],P1DGEnum); 3225 3460 3226 3461 /*Clean up and return*/ … … 3244 3479 3245 3480 /*Retrieve all inputs we will need*/ 3246 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);3247 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);3248 Input * vz_input=inputs->GetInput(VzEnum); _assert_(vz_input);3481 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 3482 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 3483 Input2* vz_input=this->GetInput2(VzEnum); _assert_(vz_input); 3249 3484 3250 3485 /* Start looping on the number of vertices: */ … … 3269 3504 3270 3505 /*Add input*/ 3271 this-> inputs->AddInput(new PentaInput(StrainRateperpendicularEnum,&strainperpendicular[0],P1Enum));3506 this->AddInput2(StrainRateperpendicularEnum,&strainperpendicular[0],P1DGEnum); 3272 3507 3273 3508 /*Clean up and return*/ … … 3301 3536 3302 3537 /*Retrieve all inputs we will need*/ 3303 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);3304 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);3305 Input * vel_input=inputs->GetInput(VelEnum); _assert_(vel_input);3306 Input * pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);3307 Input * deviaxx_input=inputs->GetInput(DeviatoricStressxxEnum); _assert_(deviaxx_input);3308 Input * deviaxy_input=inputs->GetInput(DeviatoricStressxyEnum); _assert_(deviaxy_input);3309 Input * deviayy_input=inputs->GetInput(DeviatoricStressyyEnum); _assert_(deviayy_input);3310 Input * surface_input=inputs->GetInput(SurfaceEnum); _assert_(surface_input);3311 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);3538 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 3539 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 3540 Input2* vel_input=this->GetInput2(VelEnum); _assert_(vel_input); 3541 Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input); 3542 Input2* deviaxx_input=this->GetInput2(DeviatoricStressxxEnum); _assert_(deviaxx_input); 3543 Input2* deviaxy_input=this->GetInput2(DeviatoricStressxyEnum); _assert_(deviaxy_input); 3544 Input2* deviayy_input=this->GetInput2(DeviatoricStressyyEnum); _assert_(deviayy_input); 3545 Input2* surface_input=this->GetInput2(SurfaceEnum); _assert_(surface_input); 3546 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 3312 3547 3313 3548 /* Start looping on the number of 2D vertices: */ … … 3349 3584 3350 3585 /*Add input*/ 3351 this-> inputs->AddInput(new PentaInput(StressIntensityFactorEnum,&ki[0],P1Enum));3586 this->AddInput2(StressIntensityFactorEnum,&ki[0],P1Enum); 3352 3587 this->InputExtrude(StressIntensityFactorEnum,-1); 3353 3588 } … … 3360 3595 3361 3596 /*retrieve inputs :*/ 3362 inputs->GetInputValue(&approximation,ApproximationEnum);3597 this->GetInput2Value(&approximation,ApproximationEnum); 3363 3598 3364 3599 /*If on water, return 0: */ … … 3391 3626 IssmDouble Penta::TimeAdapt(void){/*{{{*/ 3392 3627 3393 int i; 3394 IssmDouble C,dx,dy,dz,dt; 3395 IssmDouble maxabsvx,maxabsvy,maxabsvz; 3396 IssmDouble maxx,minx,maxy,miny,maxz,minz; 3628 /*intermediary: */ 3629 IssmDouble C; 3397 3630 IssmDouble xyz_list[NUMVERTICES][3]; 3398 3631 … … 3401 3634 3402 3635 /*Get for Vx and Vy, the max of abs value: */ 3403 maxabsvx = this->inputs->MaxAbs(VxEnum); 3404 maxabsvy = this->inputs->MaxAbs(VyEnum); 3405 maxabsvz = this->inputs->MaxAbs(VzEnum); 3636 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 3637 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 3638 Input2* vz_input = this->GetInput2(VzEnum); _assert_(vz_input); 3639 IssmDouble maxabsvx = vx_input->GetInputMaxAbs(); 3640 IssmDouble maxabsvy = vy_input->GetInputMaxAbs(); 3641 IssmDouble maxabsvz = vz_input->GetInputMaxAbs(); 3406 3642 3407 3643 /* Get node coordinates and dof list: */ 3408 3644 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 3409 3645 3410 minx=xyz_list[0][0];3411 maxx=xyz_list[0][0];3412 miny=xyz_list[0][1];3413 maxy=xyz_list[0][1];3414 minz=xyz_list[0][2];3415 maxz=xyz_list[0][2];3416 3417 for(i =1;i<NUMVERTICES;i++){3418 if (xyz_list[i][0]<minx)minx=xyz_list[i][0];3419 if (xyz_list[i][0]>maxx)maxx=xyz_list[i][0];3420 if (xyz_list[i][1]<miny)miny=xyz_list[i][1];3421 if (xyz_list[i][1]>maxy)maxy=xyz_list[i][1];3422 if (xyz_list[i][2]<minz)minz=xyz_list[i][2];3423 if (xyz_list[i][2]>maxz)maxz=xyz_list[i][2];3424 } 3425 dx=maxx-minx;3426 dy=maxy-miny;3427 dz=maxz-minz;3646 IssmDouble minx=xyz_list[0][0]; 3647 IssmDouble maxx=xyz_list[0][0]; 3648 IssmDouble miny=xyz_list[0][1]; 3649 IssmDouble maxy=xyz_list[0][1]; 3650 IssmDouble minz=xyz_list[0][2]; 3651 IssmDouble maxz=xyz_list[0][2]; 3652 3653 for(int i=1;i<NUMVERTICES;i++){ 3654 if(xyz_list[i][0]<minx) minx=xyz_list[i][0]; 3655 if(xyz_list[i][0]>maxx) maxx=xyz_list[i][0]; 3656 if(xyz_list[i][1]<miny) miny=xyz_list[i][1]; 3657 if(xyz_list[i][1]>maxy) maxy=xyz_list[i][1]; 3658 if(xyz_list[i][2]<minz) minz=xyz_list[i][2]; 3659 if(xyz_list[i][2]>maxz) maxz=xyz_list[i][2]; 3660 } 3661 IssmDouble dx=maxx-minx; 3662 IssmDouble dy=maxy-miny; 3663 IssmDouble dz=maxz-minz; 3428 3664 3429 3665 /*CFL criterion: */ 3430 dt=C/(maxabsvx/dx+maxabsvy/dy+maxabsvz/dz);3666 IssmDouble dt = C/(maxabsvx/dx+maxabsvy/dy+maxabsvz/dz); 3431 3667 3432 3668 return dt; … … 3525 3761 IssmDouble calvingratex,calvingratey,thickness,Jdet; 3526 3762 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 3527 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);3528 Input * calvingratex_input=NULL;3529 Input * calvingratey_input=NULL;3530 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);3531 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);3763 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 3764 Input2* calvingratex_input=NULL; 3765 Input2* calvingratey_input=NULL; 3766 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 3767 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 3532 3768 3533 3769 /*Start looping on Gaussian points*/ … … 3646 3882 IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet; 3647 3883 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 3648 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);3649 Input * calvingratex_input=NULL;3650 Input * calvingratey_input=NULL;3651 Input * vx_input=NULL;3652 Input * vy_input=NULL;3653 Input * meltingrate_input=NULL;3654 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);3655 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);3656 vx_input= inputs->GetInput(VxAverageEnum); _assert_(vx_input);3657 vy_input= inputs->GetInput(VyAverageEnum); _assert_(vy_input);3658 meltingrate_input= inputs->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);3884 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 3885 Input2* calvingratex_input=NULL; 3886 Input2* calvingratey_input=NULL; 3887 Input2* vx_input=NULL; 3888 Input2* vy_input=NULL; 3889 Input2* meltingrate_input=NULL; 3890 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 3891 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 3892 vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input); 3893 vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input); 3894 meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 3659 3895 3660 3896 /*Start looping on Gaussian points*/ … … 3698 3934 /*Get material parameters :*/ 3699 3935 rho_ice=FindParam(MaterialsRhoIceEnum); 3700 Input * floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input);3701 Input * gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);3702 Input * scalefactor_input = NULL;3936 Input2* floatingmelt_input = this->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input); 3937 Input2* gllevelset_input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 3938 Input2* scalefactor_input = NULL; 3703 3939 if(scaled==true){ 3704 scalefactor_input = this->GetInput (MeshScaleFactorEnum); _assert_(scalefactor_input);3940 scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 3705 3941 } 3706 3942 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); … … 3743 3979 /*Get material parameters :*/ 3744 3980 rho_ice=FindParam(MaterialsRhoIceEnum); 3745 Input * groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input);3746 Input * gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);3747 Input * scalefactor_input= NULL;3981 Input2* groundedmelt_input = this->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input); 3982 Input2* gllevelset_input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 3983 Input2* scalefactor_input = NULL; 3748 3984 if(scaled==true){ 3749 scalefactor_input = this->GetInput (MeshScaleFactorEnum); _assert_(scalefactor_input);3985 scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 3750 3986 } 3751 3987 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); … … 3793 4029 3794 4030 /*Now get the average SMB over the element*/ 3795 Input * smb_input = inputs->GetInput(SmbMassBalanceEnum); _assert_(smb_input);4031 Input2* smb_input = this->GetInput2(SmbMassBalanceEnum); _assert_(smb_input); 3796 4032 3797 4033 smb_input->GetInputAverage(&smb); 3798 4034 if(scaled==true){ 3799 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);4035 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 3800 4036 scalefactor_input->GetInputAverage(&scalefactor);// average scalefactor on element 3801 4037 } … … 3809 4045 } 3810 4046 /*}}}*/ 3811 void Penta::Update( int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/4047 void Penta::Update(Inputs2* inputs2,int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/ 3812 4048 3813 4049 /*Intermediaries*/ … … 4188 4424 xDelete<int>(penta_node_ids); 4189 4425 4190 /*Fill with IoModel*/4191 this->InputUpdateFromIoModel(index,iomodel);4192 4193 4426 /*Defaults if not provided in iomodel*/ 4194 4427 switch(analysis_type){ … … 4198 4431 4199 4432 if((IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[index])))==HOFSApproximationEnum){ 4433 int vertexlids[NUMVERTICES]; 4434 for(i=0;i<NUMVERTICES;i++) vertexlids[i]=iomodel->my_vertices_lids[penta_vertex_ids[i]-1]; 4200 4435 /*Create VzHO and VzFS Enums*/ 4201 4436 if(iomodel->Data("md.initialization.vz") && iomodel->Data("md.flowequation.borderFS")){ 4202 4437 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]; 4203 this-> inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));4438 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum); 4204 4439 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*(1-iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]); 4205 this-> inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));4440 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzHOEnum); 4206 4441 } 4207 4442 else{ 4208 4443 for(i=0;i<6;i++)nodeinputs[i]=0; 4209 this-> inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));4210 this-> inputs->AddInput(new PentaInput(VzHOEnum,nodeinputs,P1Enum));4444 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum); 4445 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzHOEnum); 4211 4446 } 4212 4447 } 4213 4448 if((IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[index])))==SSAFSApproximationEnum){ 4449 int vertexlids[NUMVERTICES]; 4450 for(i=0;i<NUMVERTICES;i++) vertexlids[i]=iomodel->my_vertices_lids[penta_vertex_ids[i]-1]; 4214 4451 /*Create VzSSA and VzFS Enums*/ 4215 4452 if(iomodel->Data("md.initialization.vz") && iomodel->Data("md.flowequation.borderFS")){ 4216 4453 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]; 4217 this-> inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));4454 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum); 4218 4455 for(i=0;i<6;i++) nodeinputs[i]=iomodel->Data("md.initialization.vz")[penta_vertex_ids[i]-1]*(1-iomodel->Data("md.flowequation.borderFS")[penta_vertex_ids[i]-1]); 4219 this-> inputs->AddInput(new PentaInput(VzSSAEnum,nodeinputs,P1Enum));4456 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzSSAEnum); 4220 4457 } 4221 4458 else{ 4222 4459 for(i=0;i<6;i++)nodeinputs[i]=0; 4223 this-> inputs->AddInput(new PentaInput(VzFSEnum,nodeinputs,P1Enum));4224 this-> inputs->AddInput(new PentaInput(VzSSAEnum,nodeinputs,P1Enum));4460 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzFSEnum); 4461 this->SetElementInput(inputs2,NUMVERTICES,vertexlids,nodeinputs,VzSSAEnum); 4225 4462 } 4226 4463 } … … 4240 4477 4241 4478 this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum); 4242 Input * input = inputs->GetInput(extrusioninput); _assert_(extrusioninput);4243 Input * onbase = inputs->GetInput(MeshVertexonbaseEnum); _assert_(onbase);4479 Input2* input = this->GetInput2(extrusioninput); _assert_(extrusioninput); 4480 Input2* onbase = this->GetInput2(MeshVertexonbaseEnum); _assert_(onbase); 4244 4481 4245 4482 GaussPenta* gauss=new GaussPenta(); … … 4265 4502 4266 4503 this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum); 4267 Input * input = inputs->GetInput(extrusioninput); _assert_(extrusioninput);4504 Input2* input = this->GetInput2(extrusioninput); _assert_(extrusioninput); 4268 4505 4269 4506 GaussPenta* gauss=new GaussPenta(); … … 4333 4570 } 4334 4571 /*}}}*/ 4335 void Penta::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input){/*{{{*/4572 void Penta::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/ 4336 4573 4337 4574 /*Intermediaries*/ … … 4360 4597 void Penta::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){/*{{{*/ 4361 4598 4362 int i,t,row;4363 IssmDouble time;4364 TransientInput *transientinput = NULL;4365 IssmDouble values[6];4366 IssmDouble value;4367 4368 4599 /*Check that name is an element input*/ 4369 4600 if(!IsInputEnum(name)) _error_("Enum "<<EnumToStringx(name)<<" is not in IsInput"); 4601 TransientInput2* transientinput = inputs2->GetTransientInput(name); 4370 4602 4371 4603 switch(type){ 4372 4604 4373 4605 case VertexEnum: 4606 4607 /*Get LID lists once for all*/ 4608 IssmDouble values[NUMVERTICES]; 4609 int lidlist[NUMVERTICES]; 4610 this->GetVerticesLidList(&lidlist[0]); 4611 4374 4612 /*Create transient input: */ 4375 for( t=0;t<ncols;t++){ //ncols is the number of times4613 for(int t=0;t<ncols;t++){ //ncols is the number of times 4376 4614 4377 4615 /*create input values: */ 4378 for(i =0;i<6;i++){4379 row=this->vertices[i]->Sid();4616 for(int i=0;i<6;i++){ 4617 int row=this->vertices[i]->Sid(); 4380 4618 values[i]=matrix[ncols*row+t]; 4381 4619 } 4382 4620 4383 4621 /*time:*/ 4384 time=matrix[(nrows-1)*ncols+t]; 4385 4386 if(t==0) transientinput=new TransientInput(name); 4387 transientinput->AddTimeInput(new PentaInput(name,values,P1Enum),time); 4388 transientinput->Configure(parameters); 4622 IssmDouble time=matrix[(nrows-1)*ncols+t]; 4623 4624 transientinput->AddPentaTimeInput(t,NUMVERTICES,&lidlist[0],&values[0],P1Enum); 4389 4625 } 4390 this->inputs->AddInput(transientinput);4391 4626 break; 4392 4627 4393 4628 case ElementEnum: 4394 4629 /*Get value for the element: */ 4395 for(t=0;t<ncols;t++){ //ncols is the number of times 4396 value=matrix[ncols*(this->Sid())+t]; 4397 4398 /*time:*/ 4399 time=matrix[(nrows-1)*ncols+t]; 4400 4401 if(t==0) transientinput=new TransientInput(name); 4402 transientinput->AddTimeInput(new PentaInput(name,&value,P0Enum),time); 4403 transientinput->Configure(parameters); 4630 for(int t=0;t<ncols;t++){ //ncols is the number of times 4631 IssmDouble value=matrix[ncols*(this->Sid())+t]; 4632 IssmDouble time=matrix[(nrows-1)*ncols+t]; 4633 transientinput->AddPentaTimeInput(t,1,&(this->lid),&value,P0Enum); 4404 4634 } 4405 this->inputs->AddInput(transientinput);4406 4635 break; 4407 4636 … … 4496 4725 4497 4726 /*Add new inputs: */ 4498 this-> inputs->AddInput(new PentaInput(ThicknessEnum,thickness,P1Enum));4499 this-> inputs->AddInput(new PentaInput(BaseEnum,bed,P1Enum));4500 this-> inputs->AddInput(new PentaInput(SurfaceEnum,surface,P1Enum));4727 this->AddInput2(ThicknessEnum,thickness,P1Enum); 4728 this->AddInput2(BaseEnum,bed,P1Enum); 4729 this->AddInput2(SurfaceEnum,surface,P1Enum); 4501 4730 break; 4502 4731 4503 4732 default: 4504 this-> inputs->AddInput(new PentaInput(name,values,P1Enum));4733 this->AddInput2(name,values,P1Enum); 4505 4734 } 4506 4735 break; … … 4510 4739 /*Get value for the element: */ 4511 4740 value=vector[this->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!) 4512 this-> inputs->AddInput(new PentaInput(name,&value,P0Enum));4741 this->AddInput2(name,&value,P0Enum); 4513 4742 break; 4514 4743 -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r24208 r24335 35 35 /*Penta constructors and destructor: {{{*/ 36 36 Penta(){}; 37 Penta(int penta_id,int penta_sid, IoModel* iomodel,int nummodels);37 Penta(int penta_id,int penta_sid,int penta_lid,IoModel* iomodel,int nummodels); 38 38 ~Penta(); 39 39 /*}}}*/ … … 45 45 /*Penta routines:{{{*/ 46 46 void AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum); 47 void AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum); 47 48 void AddInput(int input_enum, IssmDouble* values, int interpolation_enum); 49 void AddInput2(int input_enum, IssmDouble* values, int interpolation_enum); 50 void AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id); 51 void ControlInputExtrude(int enum_type,int start); 52 void DatasetInputExtrude(int enum_type,int start); 53 void DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum); 48 54 void AverageOntoPartition(Vector<IssmDouble>* partition_contributions,Vector<IssmDouble>* partition_areas,IssmDouble* vertex_response,IssmDouble* qmu_part); 49 55 void BasalNodeIndices(int* pnumindices,int** pindices,int finiteelement); … … 58 64 void ComputeSigmaNN(){_error_("not implemented yet");}; 59 65 void ComputeStressTensor(); 60 void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters );66 void Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters,Inputs2* inputs2in); 61 67 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M); 62 68 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index); … … 79 85 IssmDouble GetIcefrontArea(); 80 86 void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum); 87 Input2* GetInput2(int enumtype); 88 Input2* GetInput2(int enumtype,IssmDouble time); 89 DatasetInput2* GetDatasetInput2(int inputenum); 81 90 void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype); 82 91 void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype); … … 107 116 bool IsIcefront(void); 108 117 bool IsNodeOnShelfFromFlags(IssmDouble* flags); 109 bool IsOnBase(void);110 bool IsOnSurface(void);111 118 bool IsZeroLevelset(int levelset_enum); 112 119 void JacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss); … … 154 161 void ResetHooks(); 155 162 void RignotMeltParameterization(); 163 void SetElementInput(int enum_in,IssmDouble values); 164 void SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values); 165 void SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in); 156 166 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset, int N,int M); 157 167 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index); … … 174 184 IssmDouble TotalGroundedBmb(bool scaled); 175 185 IssmDouble TotalSmb(bool scaled); 176 void Update( int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);186 void Update(Inputs2* inputs,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement); 177 187 void UpdateConstraintsExtrudeFromBase(void); 178 188 void UpdateConstraintsExtrudeFromTop(void); … … 184 194 void VerticalSegmentIndices(int** pindices,int* pnumseg); 185 195 void VerticalSegmentIndicesBase(int** pindices,int* pnumseg); 186 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input);196 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input); 187 197 188 198 #ifdef _HAVE_DAKOTA_ -
issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
r23644 r24335 13 13 #include <string.h> 14 14 #include "../classes.h" 15 #include "../Inputs2/SegInput2.h" 16 #include "../Inputs2/TriaInput2.h" 15 17 #include "../../shared/shared.h" 16 18 /*}}}*/ … … 19 21 #define NUMVERTICES 2 20 22 /*Constructors/destructor/copy*/ 21 Seg::Seg(int seg_id, int seg_sid, IoModel* iomodel,int nummodels)/*{{{*/23 Seg::Seg(int seg_id, int seg_sid,int seg_lid,IoModel* iomodel,int nummodels)/*{{{*/ 22 24 :ElementHook(nummodels,seg_id,NUMVERTICES,iomodel){ 25 26 this->iscollapsed = 0; 27 this->collapsed_ids[0] = -1; 28 this->collapsed_ids[1] = -1; 23 29 24 30 /*id: */ 25 31 this->id = seg_id; 26 32 this->sid = seg_sid; 33 this->lid = seg_lid; 34 35 /*surface and base*/ 36 this->isonsurface = false; 37 this->isonbase = false; 27 38 28 39 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. … … 39 50 /*Only allocate pointer*/ 40 51 this->element_type_list=xNew<int>(nummodels); 52 53 /*surface and base*/ 54 this->isonsurface = true; 55 this->isonbase = true; 41 56 } 42 57 /*}}}*/ … … 51 66 52 67 seg=new Seg(); 68 69 seg->iscollapsed=this->iscollapsed; 70 seg->collapsed_ids[0]=this->collapsed_ids[0]; 71 seg->collapsed_ids[1]=this->collapsed_ids[1]; 53 72 54 73 //deal with TriaRef mother class … … 82 101 seg->id = this->id; 83 102 seg->sid = this->sid; 103 seg->lid = this->lid; 84 104 if(this->inputs) seg->inputs = (Inputs*)(this->inputs->Copy()); 85 105 else seg->inputs=new Inputs(); 106 seg->isonbase = this->isonbase; 107 seg->isonsurface = this->isonsurface; 86 108 87 109 /*point parameters: */ … … 106 128 107 129 MARSHALLING_ENUM(SegEnum); 130 MARSHALLING(this->iscollapsed); 131 MARSHALLING(this->isonsurface); 132 MARSHALLING(this->isonbase); 133 MARSHALLING(this->collapsed_ids[0]); 134 MARSHALLING(this->collapsed_ids[1]); 108 135 109 136 /*Call parent classes: */ … … 163 190 *pxyz_front=xyz_front; 164 191 }/*}}}*/ 192 Input2* Seg::GetInput2(int inputenum){/*{{{*/ 193 194 if(this->iscollapsed){ 195 TriaInput2* input = this->inputs2->GetTriaInput(inputenum); 196 if(!input) return input; 197 198 /*Intermediaries*/ 199 int numindices; 200 int indices[7]; 201 202 /*Check interpolation*/ 203 int interpolation = input->GetInterpolation(); 204 switch(interpolation){ 205 case P0Enum: 206 numindices = 1; 207 indices[0] = this->lid; 208 input->Serve(numindices,&indices[0]); 209 break; 210 case P1Enum: 211 numindices = 2; 212 for(int i=0;i<numindices;i++) indices[i] = vertices[i]->lid; 213 input->Serve(numindices,&indices[0]); 214 break; 215 case P1DGEnum: 216 case P1bubbleEnum: 217 default: 218 input->ServeCollapsed(this->lid,this->collapsed_ids[0],this->collapsed_ids[1]); 219 break; 220 //default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 221 } 222 /*Flag as collapsed for later use*/ 223 input->SetServeCollapsed(true); 224 225 return input; 226 } 227 else{ 228 SegInput2* input = this->inputs2->GetSegInput(inputenum); 229 if(!input) return input; 230 231 /*Intermediaries*/ 232 int numindices; 233 int indices[7]; 234 235 /*Check interpolation*/ 236 int interpolation = input->GetInterpolation(); 237 switch(interpolation){ 238 case P0Enum: 239 numindices = 1; 240 indices[0] = this->lid; 241 input->Serve(numindices,&indices[0]); 242 break; 243 case P1Enum: 244 numindices = 3; 245 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 246 input->Serve(numindices,&indices[0]); 247 break; 248 case P1DGEnum: 249 numindices = 3; 250 input->Serve(this->lid,numindices); 251 break; 252 default: 253 input->Serve(this->lid,this->GetNumberOfNodes(interpolation)); 254 } 255 256 return input; 257 } 258 }/*}}}*/ 259 Input2* Seg::GetInput2(int inputenum,IssmDouble time){/*{{{*/ 260 _error_("not implemented yet"); 261 }/*}}}*/ 165 262 IssmDouble Seg::GetGroundedPortion(IssmDouble* xyz_list){/*{{{*/ 166 263 /*Computeportion of the element that is grounded*/ -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r24208 r24335 28 28 29 29 public: 30 int iscollapsed; 31 int collapsed_ids[2]; 30 32 31 33 /*Seg constructors, destructors {{{*/ 32 34 Seg(){}; 33 Seg(int seg_id,int seg_sid, IoModel* iomodel,int nummodels);35 Seg(int seg_id,int seg_sid,int seg_lid,IoModel* iomodel,int nummodels); 34 36 ~Seg(); 35 37 /*}}}*/ … … 49 51 void ComputeSigmaNN(){_error_("not implemented yet");}; 50 52 void ComputeStressTensor(){_error_("not implemented yet");}; 51 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters ){_error_("not implemented yet");};53 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs2* inputs2in){_error_("not implemented yet");}; 52 54 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");}; 53 55 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");}; … … 63 65 IssmDouble GetGroundedPortion(IssmDouble* xyz_list); 64 66 void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum); 67 Input2* GetInput2(int enumtype); 68 Input2* GetInput2(int enumtype,IssmDouble time); 65 69 void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");}; 66 70 void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented");}; … … 86 90 bool IsIcefront(void); 87 91 bool IsNodeOnShelfFromFlags(IssmDouble* flags){_error_("not implemented yet");}; 88 bool IsOnBase(){_error_("not implemented yet");};89 bool IsOnSurface(){_error_("not implemented yet");};90 92 bool IsZeroLevelset(int levelset_enum){_error_("not implemented");}; 91 93 void JacobianDeterminant(IssmDouble* Jdet, IssmDouble* xyz_list,Gauss* gauss); … … 148 150 IssmDouble TotalGroundedBmb(bool scaled){_error_("not implemented yet");}; 149 151 IssmDouble TotalSmb(bool scaled){_error_("not implemented yet");}; 150 void Update( int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");};152 void Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement){_error_("not implemented yet");}; 151 153 void UpdateConstraintsExtrudeFromBase(){_error_("not implemented");}; 152 154 void UpdateConstraintsExtrudeFromTop(){_error_("not implemented");}; … … 158 160 void VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");}; 159 161 void VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");}; 160 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};161 162 IssmDouble GetArea3D(void){_error_("not implemented yet!");}; 162 163 IssmDouble GetAreaSpherical(void){_error_("not implemented yet!");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
r24089 r24335 13 13 #include <string.h> 14 14 #include "../classes.h" 15 #include "../Inputs2/ElementInput2.h" 15 16 #include "../../shared/shared.h" 16 17 /*}}}*/ … … 20 21 21 22 /*Constructors/destructor/copy*/ 22 Tetra::Tetra(int tet_id, int tet_sid, IoModel* iomodel,int nummodels)/*{{{*/23 Tetra::Tetra(int tet_id, int tet_sid,int tet_lid,IoModel* iomodel,int nummodels)/*{{{*/ 23 24 :ElementHook(nummodels,tet_id,NUMVERTICES,iomodel){ 24 25 … … 26 27 this->id = tet_id; 27 28 this->sid = tet_sid; 29 this->lid = tet_lid; 30 31 /*surface and base*/ 32 this->isonsurface = false; 33 this->isonbase = false; 28 34 29 35 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. … … 40 46 /*Only allocate pointer*/ 41 47 this->element_type_list=xNew<int>(nummodels); 48 49 /*surface and base*/ 50 _assert_(iomodel->Data("md.mesh.vertexonsurface")); 51 _assert_(iomodel->Data("md.mesh.vertexonbase")); 52 this->isonsurface = false; 53 this->isonbase = false; 54 IssmDouble sum = 0.; 55 for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonsurface")[reCast<int>(iomodel->elements[(tet_id-1)*NUMVERTICES+i])-1]; 56 _assert_(sum>=0 && sum<4); 57 if(sum>2.5) this->isonsurface = true; 58 sum = 0.; 59 for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonbase")[reCast<int>(iomodel->elements[(tet_id-1)*NUMVERTICES+i])-1]; 60 _assert_(sum>=0 && sum<4); 61 if(sum>2.5) this->isonbase = true; 42 62 } 43 63 /*}}}*/ … … 83 103 tetra->id = this->id; 84 104 tetra->sid = this->sid; 105 tetra->lid = this->lid; 85 106 if(this->inputs) tetra->inputs = (Inputs*)(this->inputs->Copy()); 86 107 else tetra->inputs=new Inputs(); 108 tetra->isonbase = this->isonbase; 109 tetra->isonsurface = this->isonsurface; 87 110 88 111 /*point parameters: */ … … 103 126 104 127 MARSHALLING_ENUM(TetraEnum); 128 MARSHALLING(this->isonsurface); 129 MARSHALLING(this->isonbase); 105 130 106 131 /*Call parent classes: */ … … 122 147 } 123 148 /*}}}*/ 124 void Tetra::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin ){/*{{{*/149 void Tetra::Configure(Elements* elementsin, Loads* loadsin, Nodes* nodesin,Vertices* verticesin, Materials* materialsin, Parameters* parametersin,Inputs2* inputs2in){/*{{{*/ 125 150 126 151 int analysis_counter; … … 146 171 /*point parameters to real dataset: */ 147 172 this->parameters=parametersin; 173 this->inputs2=inputs2in; 148 174 149 175 /*get inputs configured too: */ … … 246 272 } 247 273 /*}}}*/ 274 Input2* Tetra::GetInput2(int inputenum){/*{{{*/ 275 _error_("not implemented yet"); 276 }/*}}}*/ 277 Input2* Tetra::GetInput2(int inputenum,IssmDouble time){/*{{{*/ 278 _error_("not implemented yet"); 279 }/*}}}*/ 248 280 void Tetra::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/ 249 281 250 Input * input=inputs->GetInput(enumtype);282 Input2* input=this->GetInput2(enumtype); 251 283 if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria"); 252 284 … … 363 395 tetra_vertex_ids[i]=iomodel->elements[NUMVERTICES*index+i]; //ids for vertices are in the elements array from Matlab 364 396 } 365 366 /*Control Inputs*/367 if (control_analysis){368 iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters");369 for(i=0;i<num_control_type;i++){370 _assert_(controls[i]);371 int control = StringToEnumx(controls[i]);372 switch(control){373 case BalancethicknessThickeningRateEnum:374 if (iomodel->Data("md.balancethickness.thickening_rate")){375 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tetra_vertex_ids[j]-1];376 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;377 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;378 this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));379 }380 break;381 case VxEnum:382 if (iomodel->Data("md.initialization.vx")){383 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tetra_vertex_ids[j]-1];384 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;385 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;386 this->inputs->AddInput(new ControlInput(VxEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));387 }388 break;389 case VyEnum:390 if (iomodel->Data("md.initialization.vy")){391 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tetra_vertex_ids[j]-1];392 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;393 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i]/yts;394 this->inputs->AddInput(new ControlInput(VyEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));395 }396 break;397 case FrictionCoefficientEnum:398 if (iomodel->Data("md.friction.coefficient")){399 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tetra_vertex_ids[j]-1];400 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];401 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];402 this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));403 }404 break;405 case MaterialsRheologyBbarEnum:406 if(iomodel->Data("md.materials.rheology_B")){407 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tetra_vertex_ids[j]-1];408 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];409 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];410 this->inputs->AddInput(new ControlInput(MaterialsRheologyBEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));411 }412 break;413 case DamageDbarEnum:414 if(iomodel->Data("md.damage.D")){415 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tetra_vertex_ids[j]-1];416 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];417 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tetra_vertex_ids[j]-1)*num_control_type+i];418 this->inputs->AddInput(new ControlInput(DamageDEnum,TetraInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1));419 }420 break;421 default:422 _error_("Control " << EnumToStringx(control) << " not implemented yet");423 }424 }425 for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]);426 xDelete<char*>(controls);427 }428 429 /*Need to know the type of approximation for this element*/430 if(iomodel->Data("md.flowequation.element_equation")){431 this->inputs->AddInput(new IntInput(ApproximationEnum,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[index]))));432 }433 434 /*DatasetInputs*/435 if (control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")) {436 437 /*Generate cost functions associated with the iomodel*/438 char** cost_functions = NULL;439 int* cost_functions_enums = NULL;440 int num_cost_functions;441 442 iomodel->FindConstant(&num_cost_functions,"md.inversion.num_cost_functions");443 iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.inversion.cost_functions");444 if(num_cost_functions<1) _error_("No cost functions found");445 cost_functions_enums=xNew<int>(num_cost_functions);446 for(j=0;j<num_cost_functions;j++){ cost_functions_enums[j]=StringToEnumx(cost_functions[j]); }447 448 /*Create inputs and add to DataSetInput*/449 DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum);450 for(i=0;i<num_responses;i++){451 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(tetra_vertex_ids[j]-1)*num_responses+i];452 datasetinput->AddInput(new TetraInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),cost_functions_enums[i]);453 }454 455 /*Add datasetinput to element inputs*/456 this->inputs->AddInput(datasetinput);457 458 /*Clean up cost functions*/459 xDelete<int>(cost_functions_enums);460 for(int j=0;j<num_cost_functions;j++) xDelete<char>(cost_functions[j]);461 xDelete<char*>(cost_functions);462 }463 397 } 464 398 /*}}}*/ … … 504 438 return false; 505 439 }/*}}}*/ 506 bool Tetra::IsOnBase(){/*{{{*/507 return HasFaceOnBase();508 }509 /*}}}*/510 bool Tetra::IsOnSurface(){/*{{{*/511 return HasFaceOnSurface();512 }513 /*}}}*/514 440 void Tetra::JacobianDeterminant(IssmDouble* pJdet,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 515 441 … … 744 670 //printf("element number %i \n",this->id); 745 671 /*Get inputs*/ 746 Input * slopex_input=inputs->GetInput(BedSlopeXEnum); _assert_(slopex_input);747 Input * slopey_input=inputs->GetInput(BedSlopeYEnum); _assert_(slopey_input);748 Input * groundedicelevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(groundedicelevelset_input);672 Input2* slopex_input=this->GetInput2(BedSlopeXEnum); _assert_(slopex_input); 673 Input2* slopey_input=this->GetInput2(BedSlopeYEnum); _assert_(slopey_input); 674 Input2* groundedicelevelset_input=this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(groundedicelevelset_input); 749 675 vertexonbase = xNew<IssmDouble>(numnodes); 750 676 this->GetInputListOnNodesVelocity(&vertexonbase[0],MeshVertexonbaseEnum); … … 864 790 } 865 791 /*}}}*/ 866 void Tetra::Update( int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/792 void Tetra::Update(Inputs2* inputs2,int index,IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){ /*{{{*/ 867 793 868 794 /*Intermediaries*/ … … 992 918 } 993 919 /*}}}*/ 994 void Tetra::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input){/*{{{*/920 void Tetra::ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/ 995 921 996 922 /*Intermediaries*/ -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r24208 r24335 31 31 /*Tetra constructors, destructors {{{*/ 32 32 Tetra(){}; 33 Tetra(int tet_id,int tet_sid, IoModel* iomodel,int nummodels);33 Tetra(int tet_id,int tet_sid,int tet_lid,IoModel* iomodel,int nummodels); 34 34 ~Tetra(); 35 35 /*}}}*/ … … 49 49 void ComputeDeviatoricStressTensor(){_error_("not implemented yet");}; 50 50 void ComputeEsaStrainAndVorticity(){_error_("not implemented yet!");}; 51 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters );51 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs2* inputs2in); 52 52 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");}; 53 53 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){_error_("not implemented yet");}; … … 62 62 IssmDouble FloatingArea(bool scaled){_error_("not implemented yet");}; 63 63 void FSContactMigration(Vector<IssmDouble>* vertexgrounded,Vector<IssmDouble>* vertexfloating){_error_("not implemented yet");}; 64 IssmDouble 65 IssmDouble 64 IssmDouble GetArea3D(void){_error_("not implemented yet!");}; 65 IssmDouble GetAreaSpherical(void){_error_("not implemented yet!");}; 66 66 Element* GetBasalElement(void){_error_("not implemented yet");}; 67 67 int GetElementType(void); … … 69 69 IssmDouble GetGroundedPortion(IssmDouble* xyz_list){_error_("not implemented yet");}; 70 70 void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum){_error_("not implemented yet");}; 71 Input2* GetInput2(int enumtype); 72 Input2* GetInput2(int enumtype,IssmDouble time); 71 73 void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype); 72 74 void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented yet");}; … … 88 90 bool IsIcefront(void); 89 91 bool IsNodeOnShelfFromFlags(IssmDouble* flags){_error_("not implemented yet");}; 90 bool IsOnBase();91 bool IsOnSurface();92 92 bool IsZeroLevelset(int levelset_enum){_error_("not implemented");}; 93 93 void InputDepthAverageAtBase(int enum_type,int average_enum_type){_error_("not implemented yet");}; … … 157 157 IssmDouble TotalGroundedBmb(bool scaled){_error_("not implemented yet");}; 158 158 IssmDouble TotalSmb(bool scaled){_error_("not implemented yet");}; 159 void Update( int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);159 void Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement); 160 160 void UpdateConstraintsExtrudeFromBase(){_error_("not implemented");}; 161 161 void UpdateConstraintsExtrudeFromTop(){_error_("not implemented");}; … … 167 167 void VerticalSegmentIndices(int** pindices,int* pnumseg){_error_("not implemented yet");}; 168 168 void VerticalSegmentIndicesBase(int** pindices,int* pnumseg){_error_("not implemented yet");}; 169 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input * vx_input,Input* vy_input,Input* vz_input);169 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input); 170 170 171 171 #ifdef _HAVE_GIAIVINS_ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r24240 r24335 14 14 #include <math.h> 15 15 #include "../classes.h" 16 #include "../Inputs2/TriaInput2.h" 17 #include "../Inputs2/PentaInput2.h" 18 #include "../Inputs2/ControlInput2.h" 19 #include "../Inputs2/DatasetInput2.h" 20 #include "../Inputs2/TransientInput2.h" 16 21 #include "../../shared/shared.h" 17 22 #ifdef _HAVE_GIAIVINS_ … … 25 30 26 31 /*Constructors/destructor/copy*/ 27 Tria::Tria(int tria_id, int tria_sid,IoModel* iomodel,int nummodels)/*{{{*/32 Tria::Tria(int tria_id,int tria_sid,int tria_lid,IoModel* iomodel,int nummodels)/*{{{*/ 28 33 :ElementHook(nummodels,tria_id,NUMVERTICES,iomodel){ 34 35 this->iscollapsed = 0; 29 36 30 37 /*id: */ 31 38 this->id = tria_id; 32 39 this->sid = tria_sid; 33 34 //this->parameters: we still can't point to it, it may not even exist. Configure will handle this. 40 this->lid = tria_lid; 41 42 /*this->parameters: we still can't point to it, it may not even exist. Configure will handle this.*/ 35 43 this->parameters = NULL; 36 44 … … 48 56 else this->element_type_list = NULL; 49 57 50 } 51 /*}}}*/ 58 /*surface and base*/ 59 IssmDouble sum; 60 this->isonsurface = false; 61 this->isonbase = false; 62 switch(iomodel->domaintype){ 63 case Domain2DverticalEnum: 64 _assert_(iomodel->Data("md.mesh.vertexonsurface")); 65 _assert_(iomodel->Data("md.mesh.vertexonbase")); 66 sum = 0.; 67 for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonsurface")[reCast<int>(iomodel->elements[(tria_id-1)*NUMVERTICES+i])-1]; 68 _assert_(sum>=0 && sum<3); 69 if(sum>1.) this->isonsurface = true; 70 sum = 0.; 71 for(int i=0;i<NUMVERTICES;i++) sum += iomodel->Data("md.mesh.vertexonbase")[reCast<int>(iomodel->elements[(tria_id-1)*NUMVERTICES+i])-1]; 72 _assert_(sum>=0 && sum<3); 73 if(sum>1.) this->isonbase = true; 74 break; 75 case Domain2DhorizontalEnum: 76 this->isonsurface = true; 77 this->isonbase = true; 78 break; 79 default: _error_("mesh "<<EnumToStringx(iomodel->domaintype)<<" not supported yet"); 80 } 81 82 }/*}}}*/ 52 83 Tria::~Tria(){/*{{{*/ 53 84 this->parameters=NULL; … … 60 91 61 92 tria=new Tria(); 93 94 tria->iscollapsed=this->iscollapsed; 62 95 63 96 //deal with TriaRef mother class … … 91 124 tria->id = this->id; 92 125 tria->sid = this->sid; 126 tria->lid = this->lid; 93 127 if(this->inputs) tria->inputs = (Inputs*)(this->inputs->Copy()); 94 128 else tria->inputs=new Inputs(); 129 tria->isonbase = this->isonbase; 130 tria->isonsurface = this->isonsurface; 95 131 96 132 /*point parameters: */ … … 114 150 115 151 MARSHALLING_ENUM(TriaEnum); 152 MARSHALLING(this->iscollapsed); 153 MARSHALLING(this->isonsurface); 154 MARSHALLING(this->isonbase); 116 155 117 156 /*Call parent classes: */ … … 127 166 128 167 /*Other*/ 168 void Tria::AddBasalInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/ 169 170 /*Call inputs method*/ 171 _assert_(this->inputs2); 172 173 int domaintype; 174 parameters->FindParam(&domaintype,DomainTypeEnum); 175 switch(domaintype){ 176 case Domain2DhorizontalEnum: 177 this->AddInput2(input_enum,values,interpolation_enum); 178 break; 179 case Domain2DverticalEnum:{ 180 _error_("not implemented yet"); 181 } 182 break; 183 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet"); 184 } 185 186 } 187 /*}}}*/ 188 void Tria::AddInput2(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/ 189 190 /*Intermediaries*/ 191 int vertexlids[NUMVERTICES]; 192 193 /*Call inputs method*/ 194 if(!this->inputs2){ 195 int* temp = xNew<int>(3); 196 } 197 _assert_(this->inputs2); 198 switch(interpolation_enum){ 199 case P1Enum: 200 for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid; 201 inputs2->SetTriaInput(input_enum,interpolation_enum,NUMVERTICES,vertexlids,values); 202 break; 203 case P1DGEnum: 204 for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid; 205 inputs2->SetTriaInput(input_enum,interpolation_enum,this->lid,NUMVERTICES,values); 206 break; 207 default: 208 inputs2->SetTriaInput(input_enum,interpolation_enum,this->lid,this->GetNumberOfNodes(interpolation_enum),values); 209 } 210 211 } 212 /*}}}*/ 129 213 void Tria::AddBasalInput(int input_enum,IssmDouble* values, int interpolation_enum){/*{{{*/ 130 214 … … 166 250 } 167 251 /*}}}*/ 168 void Tria::AddControlInput(int input_enum,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/ 252 void Tria::AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id){/*{{{*/ 253 254 /*Intermediaries*/ 255 int vertexlids[NUMVERTICES]; 256 257 _assert_(iomodel->elements); 258 for(int i=0;i<NUMVERTICES;i++){ 259 int vertexid =reCast<int>(iomodel->elements[NUMVERTICES*this->Sid()+i]); //ids for vertices are in the elements array from Matlab 260 vertexlids[i]=iomodel->my_vertices_lids[vertexid-1]; 261 } 169 262 170 263 /*Call inputs method*/ 171 _assert_(this->inputs); 172 this->inputs->AddInput(new ControlInput(input_enum,TriaInputEnum,values,values_min,values_max,interpolation_enum,id)); 173 } 174 /*}}}*/ 175 void Tria::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum){/*{{{*/ 264 switch(interpolation_enum){ 265 case P1Enum: 266 inputs2->SetTriaControlInput(input_enum,TriaInput2Enum,interpolation_enum,id,NUMVERTICES,vertexlids,values,values_min,values_max); 267 break; 268 default: 269 _error_("Cannot add \""<<EnumToStringx(input_enum)<<"\" interpolation "<<EnumToStringx(interpolation_enum)<<" not supported"); 270 } 271 272 } 273 /*}}}*/ 274 void Tria::DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum){/*{{{*/ 176 275 177 276 IssmDouble nodeinputs[NUMVERTICES]; … … 179 278 if(M!=iomodel->numberofvertices) _error_("not supported yet"); 180 279 if(N!=num_inputs) _error_("sizes are not consistent"); 280 181 281 182 282 int tria_vertex_ids[3]; … … 251 351 252 352 /*Retrieve all inputs and parameters we will need*/ 253 Input * vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);254 Input * vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);255 Input * B_input = inputs->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);256 Input * gr_input = inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input);257 Input * bs_input = inputs->GetInput(BaseEnum); _assert_(bs_input);258 Input * smax_fl_input = inputs->GetInput(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input);259 Input * smax_gr_input = inputs->GetInput(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input);260 Input * n_input = inputs->GetInput(MaterialsRheologyNEnum); _assert_(n_input);261 Input * sl_input = inputs->GetInput(SealevelEnum); _assert_(sl_input);353 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 354 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 355 Input2* B_input = this->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 356 Input2* gr_input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gr_input); 357 Input2* bs_input = this->GetInput2(BaseEnum); _assert_(bs_input); 358 Input2* smax_fl_input = this->GetInput2(CalvingStressThresholdFloatingiceEnum); _assert_(smax_fl_input); 359 Input2* smax_gr_input = this->GetInput2(CalvingStressThresholdGroundediceEnum); _assert_(smax_gr_input); 360 Input2* n_input = this->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 361 Input2* sl_input = this->GetInput2(SealevelEnum); _assert_(sl_input); 262 362 263 363 … … 320 420 321 421 /*Add input*/ 322 this-> inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum));323 this-> inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));324 this-> inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));325 this-> inputs->AddInput(new TriaInput(SigmaVMEnum,&sigma_vm[0],P1Enum));422 this->AddInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum); 423 this->AddInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum); 424 this->AddInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum); 425 this->AddInput2(SigmaVMEnum,&sigma_vm[0],P1DGEnum); 326 426 327 427 /*Clean up and return*/ … … 351 451 IssmDouble constant_g = this->FindParam(ConstantsGEnum); 352 452 353 Input * H_input = inputs->GetInput(ThicknessEnum); _assert_(H_input);354 Input * bed_input = inputs->GetInput(BedEnum); _assert_(bed_input);355 Input * surface_input = inputs->GetInput(SurfaceEnum); _assert_(surface_input);356 Input * strainrateparallel_input = inputs->GetInput(StrainRateparallelEnum); _assert_(strainrateparallel_input);357 Input * strainrateeffective_input = inputs->GetInput(StrainRateeffectiveEnum); _assert_(strainrateeffective_input);358 Input * vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);359 Input * vy_input = inputs->GetInput(VxEnum); _assert_(vy_input);360 Input * waterheight_input = inputs->GetInput(WaterheightEnum); _assert_(waterheight_input);361 Input * s_xx_input = inputs->GetInput(DeviatoricStressxxEnum); _assert_(s_xx_input);362 Input * s_xy_input = inputs->GetInput(DeviatoricStressxyEnum); _assert_(s_xy_input);363 Input * s_yy_input = inputs->GetInput(DeviatoricStressyyEnum); _assert_(s_yy_input);364 Input * B_input = inputs->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);365 Input * n_input = inputs->GetInput(MaterialsRheologyNEnum); _assert_(n_input);453 Input2* H_input = this->GetInput2(ThicknessEnum); _assert_(H_input); 454 Input2* bed_input = this->GetInput2(BedEnum); _assert_(bed_input); 455 Input2* surface_input = this->GetInput2(SurfaceEnum); _assert_(surface_input); 456 Input2* strainrateparallel_input = this->GetInput2(StrainRateparallelEnum); _assert_(strainrateparallel_input); 457 Input2* strainrateeffective_input = this->GetInput2(StrainRateeffectiveEnum); _assert_(strainrateeffective_input); 458 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 459 Input2* vy_input = this->GetInput2(VxEnum); _assert_(vy_input); 460 Input2* waterheight_input = this->GetInput2(WaterheightEnum); _assert_(waterheight_input); 461 Input2* s_xx_input = this->GetInput2(DeviatoricStressxxEnum); _assert_(s_xx_input); 462 Input2* s_xy_input = this->GetInput2(DeviatoricStressxyEnum); _assert_(s_xy_input); 463 Input2* s_yy_input = this->GetInput2(DeviatoricStressyyEnum); _assert_(s_yy_input); 464 Input2* B_input = this->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 465 Input2* n_input = this->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 366 466 367 467 /*Loop over all elements of this partition*/ … … 420 520 } 421 521 422 this-> inputs->AddInput(new TriaInput(SurfaceCrevasseEnum,&surface_crevasse[0],P1Enum));423 this-> inputs->AddInput(new TriaInput(BasalCrevasseEnum,&basal_crevasse[0],P1Enum));424 this-> inputs->AddInput(new TriaInput(CrevasseDepthEnum,&crevasse_depth[0],P1Enum));522 this->AddInput2(SurfaceCrevasseEnum,&surface_crevasse[0],P1DGEnum); 523 this->AddInput2(BasalCrevasseEnum,&basal_crevasse[0],P1DGEnum); 524 this->AddInput2(CrevasseDepthEnum,&crevasse_depth[0],P1DGEnum); 425 525 426 526 delete gauss; … … 442 542 443 543 /*Retrieve all inputs and parameters we will need*/ 444 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);445 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);446 Input * bs_input = inputs->GetInput(BaseEnum); _assert_(bs_input);447 Input * strainparallel_input=inputs->GetInput(StrainRateparallelEnum); _assert_(strainparallel_input);448 Input * strainperpendicular_input=inputs->GetInput(StrainRateperpendicularEnum);_assert_(strainperpendicular_input);449 Input * levermanncoeff_input=inputs->GetInput(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input);544 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 545 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 546 Input2* bs_input = this->GetInput2(BaseEnum); _assert_(bs_input); 547 Input2* strainparallel_input=this->GetInput2(StrainRateparallelEnum); _assert_(strainparallel_input); 548 Input2* strainperpendicular_input=this->GetInput2(StrainRateperpendicularEnum);_assert_(strainperpendicular_input); 549 Input2* levermanncoeff_input=this->GetInput2(CalvinglevermannCoeffEnum); _assert_(levermanncoeff_input); 450 550 451 551 /* Start looping on the number of vertices: */ … … 475 575 476 576 /*Add input*/ 477 this-> inputs->AddInput(new TriaInput(CalvingratexEnum,&calvingratex[0],P1Enum));478 this-> inputs->AddInput(new TriaInput(CalvingrateyEnum,&calvingratey[0],P1Enum));479 this-> inputs->AddInput(new TriaInput(CalvingCalvingrateEnum,&calvingrate[0],P1Enum));577 this->AddInput2(CalvingratexEnum,&calvingratex[0],P1DGEnum); 578 this->AddInput2(CalvingrateyEnum,&calvingratey[0],P1DGEnum); 579 this->AddInput2(CalvingCalvingrateEnum,&calvingrate[0],P1DGEnum); 480 580 481 581 /*Clean up and return*/ … … 489 589 if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){ 490 590 IssmDouble flux_per_area=0; 491 this-> inputs->AddInput(new TriaInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum));591 this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum); 492 592 } 493 593 else{ … … 585 685 IssmDouble calvingratex,calvingratey,thickness,Jdet,flux_per_area; 586 686 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 587 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);588 Input * calvingratex_input=NULL;589 Input * calvingratey_input=NULL;687 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 688 Input2* calvingratex_input=NULL; 689 Input2* calvingratey_input=NULL; 590 690 if(domaintype==Domain2DhorizontalEnum){ 591 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);592 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);691 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 692 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 593 693 } 594 694 else{ 595 calvingratex_input= inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);596 calvingratey_input= inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);695 calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input); 696 calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input); 597 697 } 598 698 … … 613 713 } 614 714 615 this-> inputs->AddInput(new TriaInput(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum));715 this->AddInput2(CalvingFluxLevelsetEnum,&flux_per_area,P0Enum); 616 716 617 717 /*Clean up and return*/ … … 625 725 if(!IsIceInElement() || !IsZeroLevelset(MaskIceLevelsetEnum)){ 626 726 IssmDouble flux_per_area=0; 627 this-> inputs->AddInput(new TriaInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum));727 this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum); 628 728 } 629 729 else{ … … 722 822 IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet,flux_per_area; 723 823 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 724 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);725 Input * calvingratex_input=NULL;726 Input * calvingratey_input=NULL;727 Input * vx_input=NULL;728 Input * vy_input=NULL;729 Input * meltingrate_input=NULL;824 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 825 Input2* calvingratex_input=NULL; 826 Input2* calvingratey_input=NULL; 827 Input2* vx_input=NULL; 828 Input2* vy_input=NULL; 829 Input2* meltingrate_input=NULL; 730 830 if(domaintype==Domain2DhorizontalEnum){ 731 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);732 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);733 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);734 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);735 meltingrate_input= inputs->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);831 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 832 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 833 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 834 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 835 meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 736 836 } 737 837 else{ 738 calvingratex_input= inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);739 calvingratey_input= inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);838 calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input); 839 calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input); 740 840 } 741 841 … … 762 862 } 763 863 764 this-> inputs->AddInput(new TriaInput(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum));864 this->AddInput2(CalvingMeltingFluxLevelsetEnum,&flux_per_area,P0Enum); 765 865 766 866 /*Clean up and return*/ … … 797 897 /*Get approximation*/ 798 898 int approximation; 799 inputs->GetInputValue(&approximation,ApproximationEnum);899 this->GetInput2Value(&approximation,ApproximationEnum); 800 900 801 901 /* Get node coordinates and dof list: */ … … 804 904 /*Retrieve all inputs we will be needing: */ 805 905 this->FindParam(&domaintype,DomainTypeEnum); 806 Input * vx_input=inputs->GetInput(VxEnum);_assert_(vx_input);807 Input * vy_input=inputs->GetInput(VyEnum);_assert_(vy_input);906 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 907 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 808 908 809 909 /* Start looping on the number of vertices: */ … … 839 939 840 940 /*Add Stress tensor components into inputs*/ 841 this-> inputs->AddInput(new TriaInput(DeviatoricStressxxEnum,&tau_xx[0],P1Enum));842 this-> inputs->AddInput(new TriaInput(DeviatoricStressxyEnum,&tau_xy[0],P1Enum));843 this-> inputs->AddInput(new TriaInput(DeviatoricStressxzEnum,&tau_xz[0],P1Enum));844 this-> inputs->AddInput(new TriaInput(DeviatoricStressyyEnum,&tau_yy[0],P1Enum));845 this-> inputs->AddInput(new TriaInput(DeviatoricStressyzEnum,&tau_yz[0],P1Enum));846 this-> inputs->AddInput(new TriaInput(DeviatoricStresszzEnum,&tau_zz[0],P1Enum));847 this-> inputs->AddInput(new TriaInput(DeviatoricStresseffectiveEnum,&tau_e[0],P1Enum));848 this-> inputs->AddInput(new TriaInput(DeviatoricStress1Enum,&tau_1[0],P1Enum));849 this-> inputs->AddInput(new TriaInput(DeviatoricStress2Enum,&tau_2[0],P1Enum));941 this->AddInput2(DeviatoricStressxxEnum,&tau_xx[0],P1DGEnum); 942 this->AddInput2(DeviatoricStressxyEnum,&tau_xy[0],P1DGEnum); 943 this->AddInput2(DeviatoricStressxzEnum,&tau_xz[0],P1DGEnum); 944 this->AddInput2(DeviatoricStressyyEnum,&tau_yy[0],P1DGEnum); 945 this->AddInput2(DeviatoricStressyzEnum,&tau_yz[0],P1DGEnum); 946 this->AddInput2(DeviatoricStresszzEnum,&tau_zz[0],P1DGEnum); 947 this->AddInput2(DeviatoricStresseffectiveEnum,&tau_e[0],P1DGEnum); 948 this->AddInput2(DeviatoricStress1Enum,&tau_1[0],P1DGEnum); 949 this->AddInput2(DeviatoricStress2Enum,&tau_2[0],P1DGEnum); 850 950 851 951 /*Clean up and return*/ … … 867 967 868 968 /*Retrieve all inputs we will be needing: */ 869 Input * vx_input=this->GetInput(EsaXmotionEnum); _assert_(vx_input);870 Input * vy_input=this->GetInput(EsaYmotionEnum); _assert_(vy_input);969 Input2* vx_input=this->GetInput2(EsaXmotionEnum); _assert_(vx_input); 970 Input2* vy_input=this->GetInput2(EsaYmotionEnum); _assert_(vy_input); 871 971 872 972 /* Start looping on the number of vertices: */ … … 886 986 887 987 /*Add Stress tensor components into inputs*/ 888 this-> inputs->AddInput(new TriaInput(EsaStrainratexxEnum,&strain_xx[0],P1Enum));889 this-> inputs->AddInput(new TriaInput(EsaStrainrateyyEnum,&strain_yy[0],P1Enum));890 this-> inputs->AddInput(new TriaInput(EsaStrainratexyEnum,&strain_xy[0],P1Enum));891 this-> inputs->AddInput(new TriaInput(EsaRotationrateEnum,&vorticity_xy[0],P1Enum));988 this->AddInput2(EsaStrainratexxEnum,&strain_xx[0],P1DGEnum); 989 this->AddInput2(EsaStrainrateyyEnum,&strain_yy[0],P1DGEnum); 990 this->AddInput2(EsaStrainratexyEnum,&strain_xy[0],P1DGEnum); 991 this->AddInput2(EsaRotationrateEnum,&vorticity_xy[0],P1DGEnum); 892 992 893 993 /*Clean up and return*/ … … 899 999 if(!IsOnBase()){ 900 1000 IssmDouble sigma_nn[3]={0.}; 901 this-> inputs->AddInput(new TriaInput(SigmaNNEnum,&sigma_nn[0],P1Enum));1001 this->AddInput2(SigmaNNEnum,&sigma_nn[0],P1Enum); 902 1002 return; 903 1003 } … … 919 1019 this->FindParam(&domaintype,DomainTypeEnum); 920 1020 if(domaintype==Domain2DhorizontalEnum) _error_("stress tensor calculation not supported for mesh of type " <<EnumToStringx(domaintype)<<", extrude mesh or call ComputeDeviatoricStressTensor"); 921 Input * pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);922 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);923 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);1021 Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input); 1022 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 1023 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 924 1024 925 1025 /* Start looping on the number of vertices: */ … … 946 1046 947 1047 /*Add Stress tensor components into inputs*/ 948 this-> inputs->AddInput(new TriaInput(SigmaNNEnum,&sigma_nn[0],P1Enum));1048 this->AddInput2(SigmaNNEnum,&sigma_nn[0],P1Enum); 949 1049 950 1050 /*Clean up and return*/ … … 975 1075 this->FindParam(&domaintype,DomainTypeEnum); 976 1076 if(domaintype==Domain2DhorizontalEnum) _error_("stress tensor calculation not supported for mesh of type " <<EnumToStringx(domaintype)<<", extrude mesh or call ComputeDeviatoricStressTensor"); 977 Input * pressure_input=inputs->GetInput(PressureEnum); _assert_(pressure_input);978 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);979 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);1077 Input2* pressure_input=this->GetInput2(PressureEnum); _assert_(pressure_input); 1078 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 1079 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 980 1080 981 1081 /* Start looping on the number of vertices: */ … … 996 1096 997 1097 /*Add Stress tensor components into inputs*/ 998 this-> inputs->AddInput(new TriaInput(StressTensorxxEnum,&sigma_xx[0],P1Enum));999 this-> inputs->AddInput(new TriaInput(StressTensorxyEnum,&sigma_xy[0],P1Enum));1000 this-> inputs->AddInput(new TriaInput(StressTensorxzEnum,&sigma_xz[0],P1Enum));1001 this-> inputs->AddInput(new TriaInput(StressTensoryyEnum,&sigma_yy[0],P1Enum));1002 this-> inputs->AddInput(new TriaInput(StressTensoryzEnum,&sigma_yz[0],P1Enum));1003 this-> inputs->AddInput(new TriaInput(StressTensorzzEnum,&sigma_zz[0],P1Enum));1098 this->AddInput2(StressTensorxxEnum,&sigma_xx[0],P1DGEnum); 1099 this->AddInput2(StressTensorxyEnum,&sigma_xy[0],P1DGEnum); 1100 this->AddInput2(StressTensorxzEnum,&sigma_xz[0],P1DGEnum); 1101 this->AddInput2(StressTensoryyEnum,&sigma_yy[0],P1DGEnum); 1102 this->AddInput2(StressTensoryzEnum,&sigma_yz[0],P1DGEnum); 1103 this->AddInput2(StressTensorzzEnum,&sigma_zz[0],P1DGEnum); 1004 1104 1005 1105 /*Clean up and return*/ … … 1007 1107 } 1008 1108 /*}}}*/ 1009 void Tria::Configure(Elements* elementsin, Loads* loadsin,Nodes* nodesin,Vertices *verticesin,Materials* materialsin, Parameters* parametersin ){/*{{{*/1109 void Tria::Configure(Elements* elementsin, Loads* loadsin,Nodes* nodesin,Vertices *verticesin,Materials* materialsin, Parameters* parametersin,Inputs2* inputs2in){/*{{{*/ 1010 1110 1011 1111 /*go into parameters and get the analysis_counter: */ … … 1034 1134 /*point parameters to real dataset: */ 1035 1135 this->parameters=parametersin; 1136 this->inputs2=inputs2in; 1036 1137 1037 1138 /*get inputs configured too: */ 1038 1139 this->inputs->Configure(this->parameters); 1039 1140 1040 } 1041 /*}}}*/ 1141 }/*}}}*/ 1042 1142 void Tria::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N, int M){/*{{{*/ 1043 1143 1044 int idlist[NUMVERTICES]; 1045 int gradidlist[NUMVERTICES]; 1046 IssmDouble grad_list[NUMVERTICES]; 1047 Input* grad_input=NULL; 1048 1049 Input* input=inputs->GetInput(enum_type); 1050 if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found"); 1051 if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput"); 1144 int idlist[NUMVERTICES]; 1145 int vertexlids[NUMVERTICES]; 1146 int gradidlist[NUMVERTICES]; 1147 IssmDouble grad_list[NUMVERTICES]; 1052 1148 1053 1149 GradientIndexing(&gradidlist[0],control_index); 1054 1055 for(int n=0;n<N;n++){ 1056 for(int i=0;i<NUMVERTICES;i++){ 1057 idlist[i] = offset + this->vertices[i]->Sid()+n*M; 1058 grad_list[i]=gradient[idlist[i]]; 1059 } 1060 1061 ControlInput* controlinput = xDynamicCast<ControlInput*>(input); 1062 if(controlinput->layout_enum!=TransientInputEnum){ 1063 grad_input=new TriaInput(GradientEnum,grad_list,P1Enum); 1064 controlinput->SetGradient(grad_input); 1065 } 1066 else{ 1067 grad_input = new TriaInput(GradientEnum,grad_list,P1Enum); 1068 controlinput->SetGradient(grad_input,n); 1069 controlinput->Configure(parameters); 1150 for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid; 1151 1152 if(N==1){ 1153 this->inputs2->SetTriaControlInputGradient(enum_type,P1Enum,NUMVERTICES,&vertexlids[0],&grad_list[0]); 1154 } 1155 else{ 1156 for(int n=0;n<N;n++){ 1157 for(int i=0;i<NUMVERTICES;i++){ 1158 idlist[i] = offset + this->vertices[i]->Sid()+n*M; 1159 grad_list[i]=gradient[idlist[i]]; 1160 } 1161 this->inputs2->SetTriaControlInputGradient(enum_type,P1Enum,NUMVERTICES,&vertexlids[0],&grad_list[0],n); 1070 1162 } 1071 1163 } … … 1074 1166 void Tria::ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index){/*{{{*/ 1075 1167 1076 int vertexpidlist[NUMVERTICES]; 1168 int idlist[NUMVERTICES]; 1169 int vertexlids[NUMVERTICES]; 1077 1170 IssmDouble grad_list[NUMVERTICES]; 1078 Input* grad_input=NULL; 1079 1080 Input* input=inputs->GetInput(enum_type); 1081 if (!input) _error_("Input " << EnumToStringx(enum_type) << " not found"); 1082 if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(enum_type) << " is not a ControlInput"); 1083 1084 GradientIndexing(&vertexpidlist[0],control_index); 1085 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[vertexpidlist[i]]; 1086 grad_input=new TriaInput(GradientEnum,grad_list,P1Enum); 1087 1088 ((ControlInput*)input)->SetGradient(grad_input); 1171 1172 GradientIndexing(&idlist[0],control_index); 1173 for(int i=0;i<NUMVERTICES;i++) grad_list[i]=gradient[idlist[i]]; 1174 for(int i=0;i<NUMVERTICES;i++) vertexlids[i]=this->vertices[i]->lid; 1175 1176 this->inputs2->SetTriaControlInputGradient(enum_type,P1Enum,NUMVERTICES,&vertexlids[0],&grad_list[0]); 1089 1177 1090 1178 }/*}}}*/ 1091 1179 void Tria::ControlToVectors(Vector<IssmPDouble>* vector_control, Vector<IssmPDouble>* vector_gradient,int control_enum){/*{{{*/ 1092 1180 1093 Input* input=inputs->GetInput(control_enum);1094 if (!input) _error_("Input " << EnumToStringx(control_enum) << " not found");1095 if (input->ObjectEnum()!=ControlInputEnum) _error_("Input " << EnumToStringx(control_enum) << " is not a ControlInput");1096 1097 1181 int sidlist[NUMVERTICES]; 1182 int lidlist[NUMVERTICES]; 1098 1183 int connectivity[NUMVERTICES]; 1099 1184 IssmPDouble values[NUMVERTICES]; … … 1103 1188 this->GetVerticesConnectivityList(&connectivity[0]); 1104 1189 this->GetVerticesSidList(&sidlist[0]); 1190 this->GetVerticesLidList(&lidlist[0]); 1191 1192 ElementInput2* control_value = this->inputs2->GetControlInput2Data(control_enum,"value"); _assert_(control_value); 1193 ElementInput2* control_gradient = this->inputs2->GetControlInput2Data(control_enum,"gradient"); _assert_(control_gradient); 1194 control_value->Serve(NUMVERTICES,&lidlist[0]); 1195 control_gradient->Serve(NUMVERTICES,&lidlist[0]); 1105 1196 1106 1197 GaussTria* gauss=new GaussTria(); … … 1108 1199 gauss->GaussVertex(iv); 1109 1200 1110 ((ControlInput*)input)->GetInputValue(&value,gauss);1111 ((ControlInput*)input)->GetGradientValue(&gradient,gauss);1201 control_value->GetInputValue(&value,gauss); 1202 control_gradient->GetInputValue(&gradient,gauss); 1112 1203 1113 1204 values[iv] = reCast<IssmPDouble>(value)/reCast<IssmPDouble>(connectivity[iv]); … … 1143 1234 1144 1235 /*Update Levelset*/ 1145 this-> inputs->AddInput(new TriaInput(distanceenum,&ls[0],P1Enum));1236 this->AddInput2(distanceenum,&ls[0],P1Enum); 1146 1237 } 1147 1238 /*}}}*/ … … 1233 1324 /*Get input:*/ 1234 1325 IssmDouble vel; 1235 Input* vel_input; 1236 1237 vel_input=this->inputs->GetInput(VelEnum); _assert_(vel_input); 1326 Input2* vel_input=this->GetInput2(VelEnum); _assert_(vel_input); 1238 1327 vel_input->GetInputAverage(&vel); 1239 1328 … … 1291 1380 floatingarea=(1-phi)*this->GetArea(); 1292 1381 if(scaled==true){ 1293 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);1382 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 1294 1383 scalefactor_input->GetInputAverage(&scalefactor); 1295 1384 floatingarea=floatingarea*scalefactor; … … 1306 1395 1307 1396 int approximation; 1308 inputs->GetInputValue(&approximation,ApproximationEnum);1397 this->GetInput2Value(&approximation,ApproximationEnum); 1309 1398 1310 1399 if(approximation==HOApproximationEnum || approximation==SSAApproximationEnum || approximation==SSAHOApproximationEnum){ … … 1329 1418 GetVerticesCoordinates(&xyz_list); 1330 1419 /*Retrieve all inputs we will be needing: */ 1331 Input * vx_input = inputs->GetInput(VxEnum); _assert_(vx_input);1332 Input * vy_input = inputs->GetInput(VyEnum); _assert_(vy_input);1420 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 1421 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 1333 1422 1334 1423 /*1. Recover stresses at the base*/ … … 1832 1921 *pxyz_front=xyz_front; 1833 1922 }/*}}}*/ 1923 Input2* Tria::GetInput2(int inputenum){/*{{{*/ 1924 1925 /*Get Input from dataset*/ 1926 if(this->iscollapsed){ 1927 PentaInput2* input = this->inputs2->GetPentaInput(inputenum); 1928 if(!input) return input; 1929 1930 /*Intermediaries*/ 1931 int numindices; 1932 int indices[7]; 1933 1934 /*Check interpolation*/ 1935 int interpolation = input->GetInterpolation(); 1936 switch(interpolation){ 1937 case P0Enum: 1938 numindices = 1; 1939 indices[0] = this->lid; 1940 input->Serve(numindices,&indices[0]); 1941 break; 1942 case P1Enum: 1943 numindices = 3; 1944 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 1945 input->Serve(numindices,&indices[0]); 1946 break; 1947 case P1DGEnum: 1948 case P1bubbleEnum: 1949 input->ServeCollapsed(this->lid,this->iscollapsed); 1950 break; 1951 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 1952 } 1953 1954 /*Flag as collapsed for later use*/ 1955 input->SetServeCollapsed(true); 1956 1957 return input; 1958 } 1959 else{ 1960 TriaInput2* input = this->inputs2->GetTriaInput(inputenum); 1961 if(!input) return input; 1962 1963 /*Intermediaries*/ 1964 int numindices; 1965 int indices[7]; 1966 1967 /*Check interpolation*/ 1968 int interpolation = input->GetInterpolation(); 1969 switch(interpolation){ 1970 case P0Enum: 1971 numindices = 1; 1972 indices[0] = this->lid; 1973 input->Serve(numindices,&indices[0]); 1974 break; 1975 case P1Enum: 1976 numindices = 3; 1977 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 1978 input->Serve(numindices,&indices[0]); 1979 break; 1980 case P1DGEnum: 1981 numindices = 3; 1982 input->Serve(this->lid,numindices); 1983 break; 1984 default: 1985 input->Serve(this->lid,this->GetNumberOfNodes(interpolation)); 1986 } 1987 1988 return input; 1989 } 1990 }/*}}}*/ 1991 Input2* Tria::GetInput2(int inputenum,IssmDouble time){/*{{{*/ 1992 1993 /*Get Input from dataset*/ 1994 if(this->iscollapsed){ 1995 PentaInput2* input = this->inputs2->GetPentaInput(inputenum,time); 1996 if(!input) return input; 1997 1998 /*Intermediaries*/ 1999 int numindices; 2000 int indices[3]; 2001 2002 /*Check interpolation*/ 2003 int interpolation = input->GetInterpolation(); 2004 switch(interpolation){ 2005 case P0Enum: 2006 numindices = 1; 2007 indices[0] = this->lid; 2008 input->Serve(numindices,&indices[0]); 2009 break; 2010 case P1Enum: 2011 numindices = 3; 2012 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 2013 input->Serve(numindices,&indices[0]); 2014 break; 2015 case P1DGEnum: 2016 case P1bubbleEnum: 2017 input->ServeCollapsed(this->lid,this->iscollapsed); 2018 break; 2019 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 2020 } 2021 2022 /*Flag as collapsed for later use*/ 2023 input->SetServeCollapsed(true); 2024 2025 return input; 2026 } 2027 else{ 2028 TriaInput2* input = this->inputs2->GetTriaInput(inputenum,time); 2029 if(!input) return input; 2030 2031 /*Intermediaries*/ 2032 int numindices; 2033 int indices[7]; 2034 2035 /*Check interpolation*/ 2036 int interpolation = input->GetInterpolation(); 2037 switch(interpolation){ 2038 case P0Enum: 2039 numindices = 1; 2040 indices[0] = this->lid; 2041 input->Serve(numindices,&indices[0]); 2042 break; 2043 case P1Enum: 2044 numindices = 3; 2045 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 2046 input->Serve(numindices,&indices[0]); 2047 break; 2048 case P1DGEnum: 2049 numindices = 3; 2050 input->Serve(this->lid,numindices); 2051 break; 2052 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 2053 } 2054 2055 return input; 2056 } 2057 }/*}}}*/ 2058 DatasetInput2* Tria::GetDatasetInput2(int inputenum){/*{{{*/ 2059 2060 DatasetInput2* datasetinput = this->inputs2->GetDatasetInput2(inputenum); 2061 if(!datasetinput) return NULL; 2062 2063 for(int i=0;i<datasetinput->GetNumIds();i++){ 2064 2065 /*Get Input from dataset*/ 2066 if(this->iscollapsed){ 2067 2068 PentaInput2* input = datasetinput->GetPentaInputByOffset(i); _assert_(input); 2069 2070 /*Intermediaries*/ 2071 int numindices; 2072 int indices[3]; 2073 2074 /*Check interpolation*/ 2075 int interpolation = input->GetInterpolation(); 2076 switch(interpolation){ 2077 case P0Enum: 2078 numindices = 1; 2079 indices[0] = this->lid; 2080 input->Serve(numindices,&indices[0]); 2081 break; 2082 case P1Enum: 2083 numindices = 3; 2084 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 2085 input->Serve(numindices,&indices[0]); 2086 break; 2087 case P1DGEnum: 2088 case P1bubbleEnum: 2089 input->ServeCollapsed(this->lid,this->iscollapsed); 2090 break; 2091 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 2092 } 2093 2094 /*Flag as collapsed for later use*/ 2095 input->SetServeCollapsed(true); 2096 } 2097 else{ 2098 2099 TriaInput2* input = datasetinput->GetTriaInputByOffset(i); _assert_(input); 2100 2101 /*Intermediaries*/ 2102 int numindices; 2103 int indices[7]; 2104 2105 /*Check interpolation*/ 2106 int interpolation = input->GetInterpolation(); 2107 switch(interpolation){ 2108 case P0Enum: 2109 numindices = 1; 2110 indices[0] = this->lid; 2111 input->Serve(numindices,&indices[0]); 2112 break; 2113 case P1Enum: 2114 numindices = 3; 2115 for(int i=0;i<3;i++) indices[i] = vertices[i]->lid; 2116 input->Serve(numindices,&indices[0]); 2117 break; 2118 case P1DGEnum: 2119 numindices = 3; 2120 input->Serve(this->lid,numindices); 2121 break; 2122 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 2123 } 2124 2125 } 2126 } 2127 2128 return datasetinput; 2129 }/*}}}*/ 1834 2130 void Tria::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/ 1835 2131 1836 Input * input=inputs->GetInput(enumtype);2132 Input2* input=this->GetInput2(enumtype); 1837 2133 if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria"); 1838 2134 … … 1848 2144 void Tria::GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){/*{{{*/ 1849 2145 1850 Input * input=inputs->GetInput(enumtype);2146 Input2* input=this->GetInput2(enumtype); 1851 2147 if(!input) _error_("No input of type " << EnumToStringx(enumtype) << " found in tria"); 1852 2148 … … 2052 2348 void Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data){/*{{{*/ 2053 2349 2054 int vertexidlist[NUMVERTICES];2055 Input *input=NULL;2056 2057 2350 /*Get out if this is not an element input*/ 2058 2351 if(!IsInputEnum(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput"); 2059 2352 2060 2353 /*Prepare index list*/ 2061 GradientIndexing(&vertexidlist[0],control_index); 2354 int idlist[NUMVERTICES]; 2355 GradientIndexing(&idlist[0],control_index); 2062 2356 2063 2357 /*Get input (either in element or material)*/ 2064 input=(Input*)this->inputs->GetInput(control_enum); _assert_(input); 2065 2066 /*Check that it is a ControlInput*/ 2067 if (input->ObjectEnum()!=ControlInputEnum){ 2068 _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 2069 } 2070 2071 ((ControlInput*)input)->GetVectorFromInputs(vector,&vertexidlist[0],data); 2358 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data); _assert_(input); 2359 2360 /*Intermediaries*/ 2361 int numindices; 2362 int indices[NUMVERTICES]; 2363 2364 /*Check interpolation*/ 2365 int interpolation = input->GetInterpolation(); 2366 switch(interpolation){ 2367 case P1Enum: 2368 numindices = NUMVERTICES; 2369 for(int i=0;i<NUMVERTICES;i++) indices[i] = vertices[i]->lid; 2370 input->Serve(numindices,&indices[0]); 2371 break; 2372 default: _error_("interpolation "<<EnumToStringx(interpolation)<<" not supported"); 2373 } 2374 2375 /*Flag as collapsed for later use*/ 2376 if(this->iscollapsed){ 2377 xDynamicCast<PentaInput2*>(input)->SetServeCollapsed(true); 2378 } 2379 2380 /* Start looping on the number of vertices: */ 2381 IssmDouble values[NUMVERTICES]; 2382 Gauss*gauss=this->NewGauss(); 2383 for(int iv=0;iv<NUMVERTICES;iv++){ 2384 gauss->GaussVertex(iv); 2385 input->GetInputValue(&values[iv],gauss); 2386 } 2387 delete gauss; 2388 2389 vector->SetValues(NUMVERTICES,idlist,&values[0],INS_VAL); 2072 2390 } 2073 2391 /*}}}*/ 2074 2392 void Tria::GetVectorFromControlInputs(Vector<IssmDouble>* vector,int control_enum,int control_index,const char* data,int offset){/*{{{*/ 2075 2393 2076 int* idlist = NULL; 2077 IssmDouble* values = NULL; 2078 int* M = NULL; 2079 2080 /*Get out if this is not an element input*/ 2081 if(!IsInputEnum(control_enum)) _error_("Enum "<<EnumToStringx(control_enum)<<" is not in IsInput"); 2082 Input* input=(Input*)this->inputs->GetInput(control_enum); _assert_(input); 2083 2084 parameters->FindParam(&M,NULL,ControlInputSizeMEnum); 2085 2086 /*Cast to Controlinput*/ 2087 if(input->ObjectEnum()!=ControlInputEnum) _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 2088 ControlInput* controlinput = xDynamicCast<ControlInput*>(input); 2089 2090 if(strcmp(data,"value")==0){ 2091 input = controlinput->values; 2092 } 2093 else if (strcmp(data,"lowerbound")==0){ 2094 input = controlinput->minvalues; 2095 } 2096 else if (strcmp(data,"upperbound")==0){ 2097 input = controlinput->maxvalues; 2098 } 2099 else if (strcmp(data,"gradient")==0){ 2100 input = controlinput->gradient; 2101 } 2102 else{ 2103 _error_("Data " << data << " not supported yet"); 2104 } 2394 /*Get input*/ 2395 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,data); _assert_(input); 2396 2397 /*Lid list once for all*/ 2398 int lidlist[NUMVERTICES]; 2399 for(int i=0;i<NUMVERTICES;i++) lidlist[i] = vertices[i]->lid; 2400 2105 2401 /*Check what input we are dealing with*/ 2106 2107 2402 switch(input->ObjectEnum()){ 2108 case TriaInput Enum:2403 case TriaInput2Enum: 2109 2404 { 2110 TriaInput* triainput = xDynamicCast<TriaInput*>(input); 2111 if(triainput->interpolation_type!=P1Enum) _error_("not supported yet"); 2405 IssmDouble values[NUMVERTICES]; 2406 int idlist[NUMVERTICES]; 2407 2408 TriaInput2* triainput = xDynamicCast<TriaInput2*>(input); 2409 if(triainput->GetInputInterpolationType()!=P1Enum) _error_("not supported yet"); 2410 input->Serve(NUMVERTICES,&lidlist[0]); 2112 2411 2113 2412 /*Create list of indices and values for global vector*/ 2114 idlist = xNew<int>(NUMVERTICES);2115 values = xNew<IssmDouble>(NUMVERTICES);2116 2413 GradientIndexing(&idlist[0],control_index); 2117 for(int i=0;i<NUMVERTICES;i++){ 2118 values[i] = triainput->values[i]; 2119 } 2414 for(int i=0;i<NUMVERTICES;i++) values[i] = triainput->element_values[i]; 2120 2415 vector->SetValues(NUMVERTICES,idlist,values,INS_VAL); 2121 2416 break; … … 2124 2419 case TransientInputEnum: 2125 2420 { 2126 TransientInput * transientinput = xDynamicCast<TransientInput*>(input);2421 TransientInput2* transientinput = xDynamicCast<TransientInput2*>(input); 2127 2422 int N = transientinput->numtimesteps; 2128 idlist = xNew<int>(NUMVERTICES*N); 2129 values = xNew<IssmDouble>(NUMVERTICES*N); 2423 int* M=NULL; 2424 parameters->FindParam(&M,NULL,ControlInputSizeMEnum); 2425 int* idlist = xNew<int>(NUMVERTICES*N); 2426 IssmDouble* values = xNew<IssmDouble>(NUMVERTICES*N); 2130 2427 for(int t=0;t<transientinput->numtimesteps;t++) { 2131 2428 IssmDouble time = transientinput->GetTimeByOffset(t); 2132 input = transientinput->GetTimeInput(time); 2133 TriaInput* timeinput = xDynamicCast<TriaInput*>(input); 2429 TriaInput* timeinput = xDynamicCast<TriaInput*>(transientinput->GetTimeInput(time)); 2134 2430 if(timeinput->interpolation_type!=P1Enum) _error_("not supported yet"); 2431 input->Serve(NUMVERTICES,&lidlist[0]); 2135 2432 /*Create list of indices and values for global vector*/ 2136 2433 for(int i=0;i<NUMVERTICES;i++){ … … 2140 2437 } 2141 2438 vector->SetValues(NUMVERTICES*transientinput->numtimesteps,idlist,values,INS_VAL); 2439 xDelete<int>(M); 2440 xDelete<int>(idlist); 2441 xDelete<IssmDouble>(values); 2142 2442 break; 2143 2443 } 2144 default: _error_("input "<<input->ObjectEnum()<<" not supported yet"); 2145 } 2146 xDelete<int>(idlist); 2147 xDelete<IssmDouble>(values); 2444 default: _error_("input "<<EnumToStringx(input->ObjectEnum())<<" not supported yet"); 2445 } 2148 2446 } 2149 2447 /*}}}*/ … … 2199 2497 groundedarea=phi*this->GetArea(); 2200 2498 if(scaled==true){ 2201 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);2499 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 2202 2500 scalefactor_input->GetInputAverage(&scalefactor); 2203 2501 groundedarea=groundedarea*scalefactor; … … 2279 2577 IssmDouble vx,vy,thickness,Jdet; 2280 2578 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 2281 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);2282 Input * vx_input=NULL;2283 Input * vy_input=NULL;2579 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 2580 Input2* vx_input=NULL; 2581 Input2* vy_input=NULL; 2284 2582 if(domaintype==Domain2DhorizontalEnum){ 2285 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);2286 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);2583 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 2584 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 2287 2585 } 2288 2586 else{ 2289 vx_input= inputs->GetInput(VxAverageEnum); _assert_(vx_input);2290 vy_input= inputs->GetInput(VyAverageEnum); _assert_(vy_input);2587 vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input); 2588 vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input); 2291 2589 } 2292 2590 … … 2408 2706 IssmDouble vx,vy,thickness,Jdet; 2409 2707 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 2410 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);2411 Input * vx_input=NULL;2412 Input * vy_input=NULL;2708 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 2709 Input2* vx_input=NULL; 2710 Input2* vy_input=NULL; 2413 2711 if(domaintype==Domain2DhorizontalEnum){ 2414 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);2415 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);2712 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 2713 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 2416 2714 } 2417 2715 else{ 2418 vx_input= inputs->GetInput(VxAverageEnum); _assert_(vx_input);2419 vy_input= inputs->GetInput(VyAverageEnum); _assert_(vy_input);2716 vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input); 2717 vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input); 2420 2718 } 2421 2719 … … 2535 2833 IssmDouble vx,vy,thickness,Jdet; 2536 2834 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 2537 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);2538 Input * vx_input=NULL;2539 Input * vy_input=NULL;2835 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 2836 Input2* vx_input=NULL; 2837 Input2* vy_input=NULL; 2540 2838 if(domaintype==Domain2DhorizontalEnum){ 2541 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);2542 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);2839 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 2840 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 2543 2841 } 2544 2842 else{ 2545 vx_input= inputs->GetInput(VxAverageEnum); _assert_(vx_input);2546 vy_input= inputs->GetInput(VyAverageEnum); _assert_(vy_input);2843 vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input); 2844 vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input); 2547 2845 } 2548 2846 … … 2642 2940 area_base=this->GetArea(); 2643 2941 if(scaled==true){ 2644 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);2942 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 2645 2943 scalefactor_input->GetInputAverage(&scalefactor); 2646 2944 area_base=area_base*scalefactor; … … 2648 2946 2649 2947 /*Now get the average height*/ 2650 Input * surface_input = inputs->GetInput(SurfaceEnum); _assert_(surface_input);2651 Input * base_input = inputs->GetInput(BaseEnum);_assert_(base_input);2948 Input2* surface_input = this->GetInput2(SurfaceEnum); _assert_(surface_input); 2949 Input2* base_input = this->GetInput2(BaseEnum); _assert_(base_input); 2652 2950 surface_input->GetInputAverage(&surface); 2653 2951 base_input->GetInputAverage(&base); … … 2686 2984 base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1])); 2687 2985 if(scaled==true){ 2688 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);2986 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 2689 2987 scalefactor_input->GetInputAverage(&scalefactor); 2690 2988 base=base*scalefactor; … … 2692 2990 2693 2991 /*Now get the average height and bathymetry*/ 2694 Input * surface_input = inputs->GetInput(SurfaceEnum);_assert_(surface_input);2695 Input * base_input = inputs->GetInput(BaseEnum);_assert_(base_input);2696 Input * bed_input = inputs->GetInput(BedEnum);_assert_(bed_input);2992 Input2* surface_input = this->GetInput2(SurfaceEnum); _assert_(surface_input); 2993 Input2* base_input = this->GetInput2(BaseEnum); _assert_(base_input); 2994 Input2* bed_input = this->GetInput2(BedEnum); _assert_(bed_input); 2697 2995 if(!bed_input) _error_("Could not find bed"); 2698 2996 surface_input->GetInputAverage(&surface); … … 2707 3005 2708 3006 /*New input*/ 2709 Input * oldinput=NULL;2710 Input * newinput=NULL;3007 Input2* oldinput=NULL; 3008 Input2* newinput=NULL; 2711 3009 2712 3010 /*copy input of enum_type*/ 2713 oldinput= (Input*)this->inputs->GetInput(enum_type);3011 oldinput=this->GetInput2(enum_type); 2714 3012 if(!oldinput)_error_("could not find old input with enum: " << EnumToStringx(enum_type)); 2715 newinput= (Input*)oldinput->copy();3013 newinput=oldinput->copy(); 2716 3014 2717 3015 /*Assign new name (average)*/ … … 2719 3017 2720 3018 /*Add new input to current element*/ 3019 _error_("not implemented"); 2721 3020 this->inputs->AddInput((Input*)newinput); 2722 3021 } … … 2749 3048 } 2750 3049 2751 /*Need to know the type of approximation for this element*/ 2752 if(iomodel->Data("md.flowequation.element_equation")){ 2753 this->inputs->AddInput(new IntInput(ApproximationEnum,IoCodeToEnumElementEquation(reCast<int>(iomodel->Data("md.flowequation.element_equation")[index])))); 2754 } 2755 2756 /*Control Inputs*/ 2757 if (control_analysis && !ad_analysis){ 2758 if(!ad_analysis)iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters"); 2759 if(ad_analysis)iomodel->FindConstant(&controls,NULL,"md.autodiff.independent_object_names"); 2760 2761 for(i=0;i<num_control_type;i++){ 2762 _assert_(controls[i]); 2763 int control = StringToEnumx(controls[i]); 2764 switch(control){ 2765 case BalancethicknessThickeningRateEnum: 2766 if (iomodel->Data("md.balancethickness.thickening_rate")){ 2767 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tria_vertex_ids[j]-1]; 2768 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 2769 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 2770 this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2771 } 2772 break; 2773 case VxEnum: 2774 if (iomodel->Data("md.initialization.vx")){ 2775 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tria_vertex_ids[j]-1]; 2776 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 2777 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 2778 this->inputs->AddInput(new ControlInput(VxEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2779 } 2780 break; 2781 case VyEnum: 2782 if (iomodel->Data("md.initialization.vy")){ 2783 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tria_vertex_ids[j]-1]; 2784 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 2785 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 2786 this->inputs->AddInput(new ControlInput(VyEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2787 } 2788 break; 2789 case ThicknessEnum: 2790 if(iomodel->Data("md.geometry.thickness")){ 2791 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.geometry.thickness")[tria_vertex_ids[j]-1]; 2792 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2793 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2794 this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2795 } 2796 break; 2797 case BalancethicknessSpcthicknessEnum: 2798 if(iomodel->Data("md.balancethickness.spcthickness")){ 2799 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.spcthickness")[tria_vertex_ids[j]-1]; 2800 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2801 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2802 this->inputs->AddInput(new ControlInput(BalancethicknessSpcthicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2803 } 2804 break; 2805 case BalancethicknessOmegaEnum: 2806 if(iomodel->Data("md.balancethickness.omega")){ 2807 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.omega")[tria_vertex_ids[j]-1]; 2808 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2809 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2810 this->inputs->AddInput(new ControlInput(BalancethicknessOmegaEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2811 } 2812 break; 2813 case FrictionCoefficientEnum: 2814 if (iomodel->Data("md.friction.coefficient")){ 2815 for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tria_vertex_ids[j]-1]; 2816 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2817 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2818 this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2819 } 2820 break; 2821 case MaterialsRheologyBbarEnum: 2822 if(iomodel->Data("md.materials.rheology_B")){ 2823 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tria_vertex_ids[j]-1]; 2824 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2825 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2826 this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2827 } 2828 break; 2829 case DamageDbarEnum: 2830 if(iomodel->Data("md.damage.D")){ 2831 for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tria_vertex_ids[j]-1]; 2832 for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2833 for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 2834 this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 2835 } 2836 break; 2837 default: 2838 _error_("Control " << EnumToStringx(control) << " not implemented yet"); 2839 } 2840 } 2841 for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]); 2842 xDelete<char*>(controls); 2843 } 2844 2845 /*DatasetInputs*/ 2846 if (control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")){ 2847 2848 /*Generate cost functions associated with the iomodel*/ 2849 char** cost_functions = NULL; 2850 int* cost_functions_enums = NULL; 2851 int num_cost_functions; 2852 2853 iomodel->FindConstant(&num_cost_functions,"md.inversion.num_cost_functions"); 2854 iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.inversion.cost_functions"); 2855 if(num_cost_functions<1) _error_("No cost functions found"); 2856 cost_functions_enums=xNew<int>(num_cost_functions); 2857 for(j=0;j<num_cost_functions;j++){ cost_functions_enums[j]=StringToEnumx(cost_functions[j]); } 2858 2859 /*Create inputs and add to DataSetInput*/ 2860 DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum); 2861 for(i=0;i<num_responses;i++){ 2862 for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(tria_vertex_ids[j]-1)*num_responses+i]; 2863 datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),cost_functions_enums[i]); 2864 } 2865 2866 /*Add datasetinput to element inputs*/ 2867 this->inputs->AddInput(datasetinput); 2868 2869 /*Clean up cost functions*/ 2870 xDelete<int>(cost_functions_enums); 2871 for(int j=0;j<num_cost_functions;j++) xDelete<char>(cost_functions[j]); 2872 xDelete<char*>(cost_functions); 2873 } 3050 // /*Control Inputs*/ 3051 // if (control_analysis && !ad_analysis){ 3052 // if(!ad_analysis)iomodel->FindConstant(&controls,NULL,"md.inversion.control_parameters"); 3053 // if(ad_analysis)iomodel->FindConstant(&controls,NULL,"md.autodiff.independent_object_names"); 3054 // 3055 // for(i=0;i<num_control_type;i++){ 3056 // _assert_(controls[i]); 3057 // int control = StringToEnumx(controls[i]); 3058 // switch(control){ 3059 // case BalancethicknessThickeningRateEnum: 3060 // if (iomodel->Data("md.balancethickness.thickening_rate")){ 3061 // for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.balancethickness.thickening_rate")[tria_vertex_ids[j]-1]; 3062 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 3063 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 3064 // this->inputs->AddInput(new ControlInput(BalancethicknessThickeningRateEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3065 // } 3066 // break; 3067 // case VxEnum: 3068 // if (iomodel->Data("md.initialization.vx")){ 3069 // for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vx")[tria_vertex_ids[j]-1]; 3070 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 3071 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 3072 // this->inputs->AddInput(new ControlInput(VxEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3073 // } 3074 // break; 3075 // case VyEnum: 3076 // if (iomodel->Data("md.initialization.vy")){ 3077 // for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.initialization.vy")[tria_vertex_ids[j]-1]; 3078 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 3079 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]/yts; 3080 // this->inputs->AddInput(new ControlInput(VyEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3081 // } 3082 // break; 3083 // case ThicknessEnum: 3084 // if(iomodel->Data("md.geometry.thickness")){ 3085 // for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.geometry.thickness")[tria_vertex_ids[j]-1]; 3086 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3087 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3088 // this->inputs->AddInput(new ControlInput(ThicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3089 // } 3090 // break; 3091 // case BalancethicknessSpcthicknessEnum: 3092 // if(iomodel->Data("md.balancethickness.spcthickness")){ 3093 // for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.spcthickness")[tria_vertex_ids[j]-1]; 3094 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3095 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3096 // this->inputs->AddInput(new ControlInput(BalancethicknessSpcthicknessEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3097 // } 3098 // break; 3099 // case BalancethicknessOmegaEnum: 3100 // if(iomodel->Data("md.balancethickness.omega")){ 3101 // for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.balancethickness.omega")[tria_vertex_ids[j]-1]; 3102 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3103 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3104 // this->inputs->AddInput(new ControlInput(BalancethicknessOmegaEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3105 // } 3106 // break; 3107 // case FrictionCoefficientEnum: 3108 // if (iomodel->Data("md.friction.coefficient")){ 3109 // for(j=0;j<NUMVERTICES;j++)nodeinputs[j]=iomodel->Data("md.friction.coefficient")[tria_vertex_ids[j]-1]; 3110 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3111 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3112 // this->inputs->AddInput(new ControlInput(FrictionCoefficientEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3113 // } 3114 // break; 3115 // case MaterialsRheologyBbarEnum: 3116 // if(iomodel->Data("md.materials.rheology_B")){ 3117 // for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.materials.rheology_B")[tria_vertex_ids[j]-1]; 3118 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3119 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3120 // this->inputs->AddInput(new ControlInput(MaterialsRheologyBbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3121 // } 3122 // break; 3123 // case DamageDbarEnum: 3124 // if(iomodel->Data("md.damage.D")){ 3125 // for(j=0;j<NUMVERTICES;j++) nodeinputs[j]=iomodel->Data("md.damage.D")[tria_vertex_ids[j]-1]; 3126 // for(j=0;j<NUMVERTICES;j++)cmmininputs[j]=iomodel->Data("md.inversion.min_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3127 // for(j=0;j<NUMVERTICES;j++)cmmaxinputs[j]=iomodel->Data("md.inversion.max_parameters")[(tria_vertex_ids[j]-1)*num_control_type+i]; 3128 // this->inputs->AddInput(new ControlInput(DamageDbarEnum,TriaInputEnum,nodeinputs,cmmininputs,cmmaxinputs,P1Enum,i+1)); 3129 // } 3130 // break; 3131 // default: 3132 // _error_("Control " << EnumToStringx(control) << " not implemented yet"); 3133 // } 3134 // } 3135 // for(i=0;i<num_control_type;i++) xDelete<char>(controls[i]); 3136 // xDelete<char*>(controls); 3137 // } 3138 // 3139 // /*DatasetInputs*/ 3140 // if (control_analysis && iomodel->Data("md.inversion.cost_functions_coefficients")){ 3141 // 3142 // /*Generate cost functions associated with the iomodel*/ 3143 // char** cost_functions = NULL; 3144 // int* cost_functions_enums = NULL; 3145 // int num_cost_functions; 3146 // 3147 // iomodel->FindConstant(&num_cost_functions,"md.inversion.num_cost_functions"); 3148 // iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.inversion.cost_functions"); 3149 // if(num_cost_functions<1) _error_("No cost functions found"); 3150 // cost_functions_enums=xNew<int>(num_cost_functions); 3151 // for(j=0;j<num_cost_functions;j++){ cost_functions_enums[j]=StringToEnumx(cost_functions[j]); } 3152 // 3153 // /*Create inputs and add to DataSetInput*/ 3154 // DatasetInput* datasetinput=new DatasetInput(InversionCostFunctionsCoefficientsEnum); 3155 // for(i=0;i<num_responses;i++){ 3156 // for(j=0;j<3;j++)nodeinputs[j]=iomodel->Data("md.inversion.cost_functions_coefficients")[(tria_vertex_ids[j]-1)*num_responses+i]; 3157 // datasetinput->AddInput(new TriaInput(InversionCostFunctionsCoefficientsEnum,nodeinputs,P1Enum),cost_functions_enums[i]); 3158 // } 3159 // 3160 // /*Add datasetinput to element inputs*/ 3161 // this->inputs->AddInput(datasetinput); 3162 // 3163 // /*Clean up cost functions*/ 3164 // xDelete<int>(cost_functions_enums); 3165 // for(int j=0;j<num_cost_functions;j++) xDelete<char>(cost_functions[j]); 3166 // xDelete<char*>(cost_functions); 3167 // } 2874 3168 } 2875 3169 /*}}}*/ … … 2894 3188 2895 3189 /*Add input to the element: */ 2896 this-> inputs->AddInput(new TriaInput(enum_type,values,this->element_type));3190 this->AddInput2(enum_type,values,this->element_type); 2897 3191 2898 3192 /*Free ressources:*/ … … 2908 3202 int numnodes; 2909 3203 IssmDouble value; 3204 int lidlist[NUMVERTICES]; 2910 3205 int *doflist = NULL; 2911 3206 IssmDouble *values = NULL; 3207 3208 GetVerticesLidList(&lidlist[0]); 2912 3209 2913 3210 switch(type){ … … 2920 3217 } 2921 3218 /*update input*/ 2922 this->inputs->AddInput(new TriaInput(name,values,P1Enum));3219 inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2923 3220 break; 2924 3221 … … 2931 3228 } 2932 3229 /*update input*/ 2933 this->inputs->AddInput(new TriaInput(name,values,P1Enum));3230 inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2934 3231 break; 2935 3232 … … 2942 3239 } 2943 3240 /*update input*/ 2944 this->inputs->AddInput(new TriaInput(name,values,P1Enum));3241 inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values); 2945 3242 break; 2946 3243 … … 2956 3253 if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector"); 2957 3254 } 2958 this->inputs->AddInput(new TriaInput(name,values,this->element_type)); 3255 //this->inputs->AddInput(new TriaInput(name,values,this->element_type)); 3256 _error_("not implemented"); 2959 3257 break; 2960 3258 … … 2969 3267 if(xIsInf<IssmDouble>(values[i])) _error_("Inf found in vector"); 2970 3268 } 2971 this->inputs->AddInput(new TriaInput(name,values,this->element_type)); 3269 //this->inputs->AddInput(new TriaInput(name,values,this->element_type)); 3270 _error_("not implemented"); 2972 3271 break; 2973 3272 … … 2977 3276 if(xIsInf<IssmDouble>(value)) _error_("Inf found in vector"); 2978 3277 /*update input*/ 2979 this->inputs->AddInput(new DoubleInput(name,value)); 3278 //this->inputs->AddInput(new DoubleInput(name,value)); 3279 //inputs2->SetTriaInput(name,P1Enum,NUMVERTICES,lidlist,values); 3280 _error_("not implemented"); 2980 3281 break; 2981 3282 … … 3043 3344 } 3044 3345 /*}}}*/ 3045 bool Tria::IsOnBase(){/*{{{*/3046 3047 int domaintype;3048 this->parameters->FindParam(&domaintype,DomainTypeEnum);3049 switch(domaintype){3050 case Domain2DverticalEnum:3051 return HasEdgeOnBase();3052 case Domain2DhorizontalEnum:3053 return true;3054 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");3055 }3056 }3057 /*}}}*/3058 bool Tria::IsOnSurface(){/*{{{*/3059 3060 int domaintype;3061 this->parameters->FindParam(&domaintype,DomainTypeEnum);3062 switch(domaintype){3063 case Domain2DverticalEnum:3064 return HasEdgeOnSurface();3065 case Domain2DhorizontalEnum:3066 return true;3067 default: _error_("mesh "<<EnumToStringx(domaintype)<<" not supported yet");3068 }3069 }3070 /*}}}*/3071 3346 bool Tria::IsZeroLevelset(int levelset_enum){/*{{{*/ 3072 3347 … … 3120 3395 /*intermediary: */ 3121 3396 IssmDouble* values=NULL; 3122 Input *thickness_input=NULL;3397 Input2* thickness_input=NULL; 3123 3398 IssmDouble thickness; 3124 3399 IssmDouble weight; … … 3138 3413 3139 3414 /*Retrieve inputs required:*/ 3140 thickness_input=this->GetInput (ThicknessEnum); _assert_(thickness_input);3415 thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 3141 3416 3142 3417 /*Retrieve material parameters: */ … … 3200 3475 /*Get velocity and thickness*/ 3201 3476 this->parameters->FindParam(&domaintype,DomainTypeEnum); 3202 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);3203 Input * vx_input=NULL;3204 Input * vy_input=NULL;3477 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 3478 Input2* vx_input=NULL; 3479 Input2* vy_input=NULL; 3205 3480 if(domaintype==Domain2DhorizontalEnum){ 3206 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);3207 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);3481 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 3482 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 3208 3483 } 3209 3484 else{ 3210 vx_input= inputs->GetInput(VxAverageEnum); _assert_(vx_input);3211 vy_input= inputs->GetInput(VyAverageEnum); _assert_(vy_input);3485 vx_input=this->GetInput2(VxAverageEnum); _assert_(vx_input); 3486 vy_input=this->GetInput2(VyAverageEnum); _assert_(vy_input); 3212 3487 } 3213 3488 … … 3248 3523 /*Retrieve all inputs we will be needing: */ 3249 3524 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 3250 Input * model_input=inputs->GetInput(modelenum); _assert_(model_input);3251 Input * observation_input=inputs->GetInput(observationenum);_assert_(observation_input);3252 Input * weights_input =inputs->GetInput(weightsenum); _assert_(weights_input);3525 Input2* model_input=this->GetInput2(modelenum); _assert_(model_input); 3526 Input2* observation_input=this->GetInput2(observationenum);_assert_(observation_input); 3527 Input2* weights_input =this->GetInput2(weightsenum); _assert_(weights_input); 3253 3528 3254 3529 /* Start looping on the number of gaussian points: */ … … 3289 3564 /*Retrieve all inputs we will be needing: */ 3290 3565 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 3291 Input * weights_input =inputs->GetInput(weightsenum); _assert_(weights_input);3566 Input2* weights_input =this->GetInput2(weightsenum); _assert_(weights_input); 3292 3567 3293 3568 /* Start looping on the number of gaussian points: */ … … 3425 3700 int found = 0; 3426 3701 IssmDouble value; 3427 Input *data = NULL;3428 3702 GaussTria *gauss = NULL; 3429 3703 3430 3704 /*First, serarch the input: */ 3431 data=inputs->GetInput(natureofdataenum);3705 Input2* data=this->GetInput2(natureofdataenum); 3432 3706 3433 3707 /*figure out if we have the vertex id: */ … … 3594 3868 3595 3869 /*For FS only: we want the CS to be tangential to the bedrock*/ 3596 inputs->GetInputValue(&approximation,ApproximationEnum);3870 this->GetInput2Value(&approximation,ApproximationEnum); 3597 3871 if(!HasNodeOnBase() || approximation!=FSApproximationEnum) return; 3598 3872 3599 3873 /*Get inputs*/ 3600 Input * slope_input=inputs->GetInput(BedSlopeXEnum); _assert_(slope_input);3601 Input * groundedicelevelset_input=inputs->GetInput(MaskGroundediceLevelsetEnum); _assert_(groundedicelevelset_input);3874 Input2* slope_input=this->GetInput2(BedSlopeXEnum); _assert_(slope_input); 3875 Input2* groundedicelevelset_input=this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(groundedicelevelset_input); 3602 3876 vertexonbase = xNew<IssmDouble>(numnodes); 3603 3877 this->GetInputListOnNodesVelocity(&vertexonbase[0],MeshVertexonbaseEnum); … … 3665 3939 3666 3940 /*Get inputs*/ 3667 Input * bed_input = this->GetInput(BedEnum); _assert_(bed_input);3668 Input * qsg_input = this->GetInput(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input);3669 Input * TF_input = this->GetInput(FrontalForcingsThermalForcingEnum); _assert_(TF_input);3941 Input2* bed_input = this->GetInput2(BedEnum); _assert_(bed_input); 3942 Input2* qsg_input = this->GetInput2(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input); 3943 Input2* TF_input = this->GetInput2(FrontalForcingsThermalForcingEnum); _assert_(TF_input); 3670 3944 GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum); 3671 3945 … … 3710 3984 3711 3985 IssmDouble values[NUMVERTICES]; 3986 int lidlist[NUMVERTICES]; 3712 3987 int idlist[NUMVERTICES],control_init; 3713 3988 … … 3732 4007 if(!IsInputEnum(control_enum)) return; 3733 4008 3734 Input* input = (Input*)this->inputs->GetInput(control_enum); _assert_(input); 3735 if(input->ObjectEnum()!=ControlInputEnum){ 3736 _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 3737 } 3738 3739 ControlInput* controlinput = xDynamicCast<ControlInput*>(input); 3740 input = controlinput->values; 4009 this->GetVerticesLidList(&lidlist[0]); 4010 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"value"); _assert_(input); 3741 4011 3742 4012 /*Get values on vertices*/ … … 3746 4016 values[i]=vector[idlist[i]]; 3747 4017 } 3748 if(input->ObjectEnum()==TriaInput Enum){3749 Input* new_input = new TriaInput(control_enum,values,P1Enum);3750 controlinput->SetInput(new_input);3751 }3752 else if(input->ObjectEnum()==TransientInputEnum){3753 Input* new_input = new TriaInput(control_enum,values,P1Enum);3754 controlinput->SetInput(new_input,n);3755 controlinput->Configure(parameters);4018 if(input->ObjectEnum()==TriaInput2Enum){ 4019 input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]); 4020 } 4021 else if(input->ObjectEnum()==TransientInput2Enum){ 4022 _error_("not implemented"); 4023 //Input* new_input = new TriaInput(control_enum,values,P1Enum); 4024 //controlinput->SetInput(new_input,n); 4025 //controlinput->Configure(parameters); 3756 4026 } 3757 4027 else _error_("Type not supported"); … … 3762 4032 3763 4033 IssmDouble values[NUMVERTICES]; 3764 int vertexpidlist[NUMVERTICES],control_init; 4034 int idlist[NUMVERTICES]; 4035 int lidlist[NUMVERTICES]; 3765 4036 3766 4037 /*Get Domain type*/ … … 3769 4040 3770 4041 /*Specific case for depth averaged quantities*/ 3771 control_init=control_enum;3772 4042 if(domaintype==Domain2DverticalEnum){ 3773 4043 if(control_enum==MaterialsRheologyBbarEnum){ … … 3784 4054 if(!IsInputEnum(control_enum)) return; 3785 4055 3786 /*hrepare index list*/ 3787 GradientIndexing(&vertexpidlist[0],control_index); 4056 /*prepare index list*/ 4057 this->GetVerticesLidList(&lidlist[0]); 4058 GradientIndexing(&idlist[0],control_index); 3788 4059 3789 4060 /*Get values on vertices*/ 3790 4061 for(int i=0;i<NUMVERTICES;i++){ 3791 values[i]=vector[vertexpidlist[i]]; 3792 } 3793 Input* new_input = new TriaInput(control_enum,values,P1Enum); 3794 Input* input = (Input*)this->inputs->GetInput(control_enum); _assert_(input); 3795 if(input->ObjectEnum()!=ControlInputEnum){ 3796 _error_("input " << EnumToStringx(control_enum) << " is not a ControlInput"); 3797 } 3798 3799 ((ControlInput*)input)->SetInput(new_input); 4062 values[i]=vector[idlist[i]]; 4063 } 4064 4065 /*Set Input*/ 4066 ElementInput2* input=this->inputs2->GetControlInput2Data(control_enum,"value"); _assert_(input); 4067 input->SetInput(P1Enum,NUMVERTICES,&lidlist[0],&values[0]); 3800 4068 } 3801 4069 /*}}}*/ … … 3813 4081 this->nodes=(Node**)this->hnodes[analysis_counter]->deliverp(); 3814 4082 } 4083 4084 } 4085 /*}}}*/ 4086 void Tria::SetElementInput(int enum_in,IssmDouble value){/*{{{*/ 4087 4088 this->SetElementInput(this->inputs2,enum_in,value); 4089 4090 } 4091 /*}}}*/ 4092 void Tria::SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble value){/*{{{*/ 4093 4094 _assert_(inputs2); 4095 inputs2->SetTriaInput(enum_in,P0Enum,this->lid,value); 4096 4097 } 4098 /*}}}*/ 4099 void Tria::SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in){/*{{{*/ 4100 4101 _assert_(inputs2); 4102 inputs2->SetTriaInput(enum_in,P1Enum,numindices,indices,values); 3815 4103 3816 4104 } … … 3844 4132 Seg* seg=new Seg(); 3845 4133 seg->id=this->id; 3846 seg->inputs=(Inputs*)this->inputs->SpawnSegInputs(index1,index2); 4134 seg->inputs=NULL;//(Inputs*)this->inputs->SpawnSegInputs(index1,index2); 4135 seg->inputs2=this->inputs2; 3847 4136 seg->parameters=this->parameters; 3848 4137 seg->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED) 3849 4138 this->SpawnSegHook(xDynamicCast<ElementHook*>(seg),index1,index2); 4139 4140 seg->iscollapsed = 1; 4141 seg->collapsed_ids[0] = index1; 4142 seg->collapsed_ids[1] = index2; 3850 4143 3851 4144 /*Spawn material*/ … … 3893 4186 3894 4187 /*Retrieve all inputs we will need*/ 3895 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);3896 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);4188 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 4189 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 3897 4190 3898 4191 /* Start looping on the number of vertices: */ … … 3917 4210 3918 4211 /*Add input*/ 3919 this-> inputs->AddInput(new TriaInput(StrainRateparallelEnum,&strainparallel[0],P1Enum));4212 this->AddInput2(StrainRateparallelEnum,&strainparallel[0],P1DGEnum); 3920 4213 3921 4214 /*Clean up and return*/ … … 3939 4232 3940 4233 /*Retrieve all inputs we will need*/ 3941 Input * vx_input=inputs->GetInput(VxEnum); _assert_(vx_input);3942 Input * vy_input=inputs->GetInput(VyEnum); _assert_(vy_input);4234 Input2* vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 4235 Input2* vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 3943 4236 3944 4237 /* Start looping on the number of vertices: */ … … 3963 4256 3964 4257 /*Add input*/ 3965 this-> inputs->AddInput(new TriaInput(StrainRateperpendicularEnum,&strainperpendicular[0],P1Enum));4258 this->AddInput2(StrainRateperpendicularEnum,&strainperpendicular[0],P1DGEnum); 3966 4259 3967 4260 /*Clean up and return*/ … … 4004 4297 4005 4298 /*intermediary: */ 4006 int i; 4007 IssmDouble C,dt; 4008 IssmDouble dx,dy; 4009 IssmDouble maxx,minx; 4010 IssmDouble maxy,miny; 4011 IssmDouble maxabsvx,maxabsvy; 4299 IssmDouble C; 4012 4300 IssmDouble xyz_list[NUMVERTICES][3]; 4013 4301 … … 4016 4304 4017 4305 /*Get for Vx and Vy, the max of abs value: */ 4018 maxabsvx = this->inputs->MaxAbs(VxEnum); 4019 maxabsvy = this->inputs->MaxAbs(VyEnum); 4306 Input2* vx_input = this->GetInput2(VxEnum); _assert_(vx_input); 4307 Input2* vy_input = this->GetInput2(VyEnum); _assert_(vy_input); 4308 IssmDouble maxabsvx = vx_input->GetInputMaxAbs(); 4309 IssmDouble maxabsvy = vy_input->GetInputMaxAbs(); 4020 4310 4021 4311 /* Get node coordinates and dof list: */ 4022 4312 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 4023 4313 4024 minx=xyz_list[0][0];4025 maxx=xyz_list[0][0];4026 miny=xyz_list[0][1];4027 maxy=xyz_list[0][1];4028 4029 for(i =1;i<NUMVERTICES;i++){4030 if (xyz_list[i][0]<minx)minx=xyz_list[i][0];4031 if (xyz_list[i][0]>maxx)maxx=xyz_list[i][0];4032 if (xyz_list[i][1]<miny)miny=xyz_list[i][1];4033 if (xyz_list[i][1]>maxy)maxy=xyz_list[i][1];4034 } 4035 dx=maxx-minx;4036 dy=maxy-miny;4314 IssmDouble minx=xyz_list[0][0]; 4315 IssmDouble maxx=xyz_list[0][0]; 4316 IssmDouble miny=xyz_list[0][1]; 4317 IssmDouble maxy=xyz_list[0][1]; 4318 4319 for(int i=1;i<NUMVERTICES;i++){ 4320 if(xyz_list[i][0]<minx) minx=xyz_list[i][0]; 4321 if(xyz_list[i][0]>maxx) maxx=xyz_list[i][0]; 4322 if(xyz_list[i][1]<miny) miny=xyz_list[i][1]; 4323 if(xyz_list[i][1]>maxy) maxy=xyz_list[i][1]; 4324 } 4325 IssmDouble dx=maxx-minx; 4326 IssmDouble dy=maxy-miny; 4037 4327 4038 4328 /*CFL criterion: */ 4039 dt=C/(maxabsvx/dx+maxabsvy/dy);4329 IssmDouble dt = C/(maxabsvx/dx+maxabsvy/dy); 4040 4330 4041 4331 return dt; … … 4143 4433 IssmDouble calvingratex,calvingratey,thickness,Jdet; 4144 4434 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 4145 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);4146 Input * calvingratex_input=NULL;4147 Input * calvingratey_input=NULL;4435 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 4436 Input2* calvingratex_input=NULL; 4437 Input2* calvingratey_input=NULL; 4148 4438 if(domaintype==Domain2DhorizontalEnum){ 4149 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);4150 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);4439 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 4440 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 4151 4441 } 4152 4442 else{ 4153 calvingratex_input= inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);4154 calvingratey_input= inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);4443 calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input); 4444 calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input); 4155 4445 } 4156 4446 … … 4272 4562 IssmDouble calvingratex,calvingratey,vx,vy,vel,meltingrate,meltingratex,meltingratey,thickness,Jdet; 4273 4563 IssmDouble rho_ice=FindParam(MaterialsRhoIceEnum); 4274 Input * thickness_input=inputs->GetInput(ThicknessEnum); _assert_(thickness_input);4275 Input * calvingratex_input=NULL;4276 Input * calvingratey_input=NULL;4277 Input * vx_input=NULL;4278 Input * vy_input=NULL;4279 Input * meltingrate_input=NULL;4564 Input2* thickness_input=this->GetInput2(ThicknessEnum); _assert_(thickness_input); 4565 Input2* calvingratex_input=NULL; 4566 Input2* calvingratey_input=NULL; 4567 Input2* vx_input=NULL; 4568 Input2* vy_input=NULL; 4569 Input2* meltingrate_input=NULL; 4280 4570 if(domaintype==Domain2DhorizontalEnum){ 4281 calvingratex_input= inputs->GetInput(CalvingratexEnum); _assert_(calvingratex_input);4282 calvingratey_input= inputs->GetInput(CalvingrateyEnum); _assert_(calvingratey_input);4283 vx_input= inputs->GetInput(VxEnum); _assert_(vx_input);4284 vy_input= inputs->GetInput(VyEnum); _assert_(vy_input);4285 meltingrate_input= inputs->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input);4571 calvingratex_input=this->GetInput2(CalvingratexEnum); _assert_(calvingratex_input); 4572 calvingratey_input=this->GetInput2(CalvingrateyEnum); _assert_(calvingratey_input); 4573 vx_input=this->GetInput2(VxEnum); _assert_(vx_input); 4574 vy_input=this->GetInput2(VyEnum); _assert_(vy_input); 4575 meltingrate_input=this->GetInput2(CalvingMeltingrateEnum); _assert_(meltingrate_input); 4286 4576 } 4287 4577 else{ 4288 calvingratex_input= inputs->GetInput(CalvingratexAverageEnum); _assert_(calvingratex_input);4289 calvingratey_input= inputs->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input);4578 calvingratex_input=this->GetInput2(CalvingratexAverageEnum); _assert_(calvingratex_input); 4579 calvingratey_input=this->GetInput2(CalvingrateyAverageEnum); _assert_(calvingratey_input); 4290 4580 } 4291 4581 … … 4327 4617 /*Get material parameters :*/ 4328 4618 rho_ice=FindParam(MaterialsRhoIceEnum); 4329 Input * floatingmelt_input = this->GetInput(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input);4330 Input * gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);4331 Input * scalefactor_input= NULL;4619 Input2* floatingmelt_input = this->GetInput2(BasalforcingsFloatingiceMeltingRateEnum); _assert_(floatingmelt_input); 4620 Input2* gllevelset_input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 4621 Input2* scalefactor_input = NULL; 4332 4622 if(scaled==true){ 4333 scalefactor_input = this->GetInput (MeshScaleFactorEnum); _assert_(scalefactor_input);4623 scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 4334 4624 } 4335 4625 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); … … 4372 4662 /*Get material parameters :*/ 4373 4663 rho_ice=FindParam(MaterialsRhoIceEnum); 4374 Input * groundedmelt_input = this->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input);4375 Input * gllevelset_input = this->GetInput(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input);4376 Input * scalefactor_input = NULL;4664 Input2* groundedmelt_input = this->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedmelt_input); 4665 Input2* gllevelset_input = this->GetInput2(MaskGroundediceLevelsetEnum); _assert_(gllevelset_input); 4666 Input2* scalefactor_input = NULL; 4377 4667 if(scaled==true){ 4378 scalefactor_input = this->GetInput (MeshScaleFactorEnum); _assert_(scalefactor_input);4668 scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 4379 4669 } 4380 4670 ::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); … … 4422 4712 4423 4713 /*Now get the average SMB over the element*/ 4424 Input * smb_input = inputs->GetInput(SmbMassBalanceEnum); _assert_(smb_input);4714 Input2* smb_input = this->GetInput2(SmbMassBalanceEnum); _assert_(smb_input); 4425 4715 smb_input->GetInputAverage(&smb); // average smb on element in m ice s-1 4426 4716 if(scaled==true){ 4427 Input * scalefactor_input = inputs->GetInput(MeshScaleFactorEnum); _assert_(scalefactor_input);4717 Input2* scalefactor_input = this->GetInput2(MeshScaleFactorEnum); _assert_(scalefactor_input); 4428 4718 scalefactor_input->GetInputAverage(&scalefactor);// average scalefactor on element 4429 4719 } … … 4437 4727 } 4438 4728 /*}}}*/ 4439 void Tria::Update( int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){/*{{{*/4729 void Tria::Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finiteelement_type){/*{{{*/ 4440 4730 4441 4731 /*Intermediaries*/ … … 4581 4871 this->SetHookNodes(tria_node_ids,numnodes,analysis_counter); this->nodes=NULL; 4582 4872 xDelete<int>(tria_node_ids); 4583 4584 /*Fill with IoModel*/4585 this->InputUpdateFromIoModel(index,iomodel);4586 4873 } 4587 4874 /*}}}*/ … … 4594 4881 4595 4882 this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum); 4596 Input * input = inputs->GetInput(extrusioninput); _assert_(input);4597 Input * onbase = inputs->GetInput(MeshVertexonbaseEnum); _assert_(onbase);4883 Input2* input = this->GetInput2(extrusioninput); _assert_(input); 4884 Input2* onbase = this->GetInput2(MeshVertexonbaseEnum); _assert_(onbase); 4598 4885 4599 4886 GaussTria* gauss=new GaussTria(); … … 4618 4905 4619 4906 this->parameters->FindParam(&extrusioninput,InputToExtrudeEnum); 4620 Input * input = inputs->GetInput(extrusioninput); _assert_(input);4621 Input * onsurf = inputs->GetInput(MeshVertexonsurfaceEnum); _assert_(onsurf);4907 Input2* input = this->GetInput2(extrusioninput); _assert_(input); 4908 Input2* onsurf = this->GetInput2(MeshVertexonsurfaceEnum); _assert_(onsurf); 4622 4909 4623 4910 GaussTria* gauss=new GaussTria(); … … 4751 5038 IssmDouble currenttime; 4752 5039 int numtimes; 4753 Input * thickness_input=NULL;5040 Input2* thickness_input=NULL; 4754 5041 4755 5042 /*gia solution parameters:*/ … … 4761 5048 IssmDouble mantle_shear_modulus; 4762 5049 IssmDouble mantle_density; 4763 Input * mantle_viscosity_input=NULL;5050 Input2* mantle_viscosity_input=NULL; 4764 5051 IssmDouble mantle_viscosity; 4765 Input * lithosphere_thickness_input=NULL;5052 Input2* lithosphere_thickness_input=NULL; 4766 5053 IssmDouble lithosphere_thickness; 4767 5054 … … 4797 5084 4798 5085 /*pull thickness averages: */ 4799 thickness_input= inputs->GetInput(ThicknessEnum);5086 thickness_input=this->GetInput2(ThicknessEnum); 4800 5087 if (!thickness_input)_error_("thickness input needed to compute gia deflection!"); 4801 5088 thickness_input->GetInputAveragesUpToCurrentTime(&hes,×,&numtimes,currenttime); 4802 5089 4803 5090 /*recover mantle viscosity: */ 4804 mantle_viscosity_input= inputs->GetInput(GiaMantleViscosityEnum);5091 mantle_viscosity_input=this->GetInput2(GiaMantleViscosityEnum); 4805 5092 if (!mantle_viscosity_input)_error_("mantle viscosity input needed to compute gia deflection!"); 4806 5093 mantle_viscosity_input->GetInputAverage(&mantle_viscosity); 4807 5094 4808 5095 /*recover lithosphere thickness: */ 4809 lithosphere_thickness_input= inputs->GetInput(GiaLithosphereThicknessEnum);5096 lithosphere_thickness_input=this->GetInput2(GiaLithosphereThicknessEnum); 4810 5097 if (!lithosphere_thickness_input)_error_("lithosphere thickness input needed to compute gia deflection!"); 4811 5098 lithosphere_thickness_input->GetInputAverage(&lithosphere_thickness); … … 4891 5178 4892 5179 /*Compute ice thickness change: */ 4893 Input * deltathickness_input=inputs->GetInput(EsaDeltathicknessEnum);5180 Input2* deltathickness_input=this->GetInput2(EsaDeltathicknessEnum); 4894 5181 if (!deltathickness_input)_error_("delta thickness input needed to compute elastic adjustment!"); 4895 5182 deltathickness_input->GetInputAverage(&I); … … 5029 5316 5030 5317 /*Compute ice thickness change: */ 5031 Input * deltathickness_input=inputs->GetInput(EsaDeltathicknessEnum);5318 Input2* deltathickness_input=this->GetInput2(EsaDeltathicknessEnum); 5032 5319 if (!deltathickness_input)_error_("delta thickness input needed to compute elastic adjustment!"); 5033 5320 deltathickness_input->GetInputAverage(&I); … … 5263 5550 5264 5551 /*Compute ice thickness change: */ 5265 Input * deltathickness_input=inputs->GetInput(SealevelriseDeltathicknessEnum);5552 Input2* deltathickness_input=this->GetInput2(SealevelriseDeltathicknessEnum); 5266 5553 if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!"); 5267 5554 deltathickness_input->GetInputAverage(&I); … … 5398 5685 5399 5686 /*Compute ice thickness change: */ 5400 Input * deltathickness_input=inputs->GetInput(SealevelriseDeltathicknessEnum);5687 Input2* deltathickness_input=this->GetInput2(SealevelriseDeltathicknessEnum); 5401 5688 if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!"); 5402 5689 … … 5740 6027 5741 6028 /*Compute ice thickness change: */ 5742 Input * deltathickness_input=inputs->GetInput(SealevelriseDeltathicknessEnum);6029 Input2* deltathickness_input=this->GetInput2(SealevelriseDeltathicknessEnum); 5743 6030 if (!deltathickness_input)_error_("delta thickness input needed to compute sea level rise!"); 5744 6031 deltathickness_input->GetInputAverage(&I); … … 5833 6120 void Tria::InputUpdateFromMatrixDakota(IssmDouble* matrix, int nrows, int ncols, int name, int type){/*{{{*/ 5834 6121 5835 int i,t,row;5836 IssmDouble time;5837 TransientInput *transientinput = NULL;5838 IssmDouble values[3];5839 IssmDouble value;5840 5841 6122 /*Check that name is an element input*/ 5842 6123 if(!IsInputEnum(name)) _error_("Enum "<<EnumToStringx(name)<<" is not in IsInput"); 6124 TransientInput2* transientinput = inputs2->GetTransientInput(name); 5843 6125 5844 6126 switch(type){ 5845 6127 5846 6128 case VertexEnum: 6129 6130 /*Get LID lists once for all*/ 6131 IssmDouble values[NUMVERTICES]; 6132 int lidlist[NUMVERTICES]; 6133 this->GetVerticesLidList(&lidlist[0]); 6134 5847 6135 /*Create transient input: */ 5848 for(t=0;t<ncols;t++){ //ncols is the number of times 5849 5850 /*create input values: */ 5851 for(i=0;i<3;i++){ 5852 row=this->vertices[i]->Sid(); 6136 for(int t=0;t<ncols;t++){ //ncols is the number of times 6137 for(int i=0;i<3;i++){ 6138 int row=this->vertices[i]->Sid(); 5853 6139 values[i]=matrix[ncols*row+t]; 5854 6140 } 5855 6141 5856 6142 /*time:*/ 5857 time=matrix[(nrows-1)*ncols+t]; 5858 5859 if(t==0) transientinput=new TransientInput(name); 5860 transientinput->AddTimeInput(new TriaInput(name,values,P1Enum),time); 5861 transientinput->Configure(parameters); 6143 IssmDouble time=matrix[(nrows-1)*ncols+t]; 6144 6145 transientinput->AddTriaTimeInput(t,NUMVERTICES,&lidlist[0],&values[0],P1Enum); 5862 6146 } 5863 this->inputs->AddInput(transientinput);5864 6147 break; 5865 6148 5866 6149 case ElementEnum: 5867 6150 /*Get value for the element: */ 5868 for(t=0;t<ncols;t++){ //ncols is the number of times 5869 value=matrix[ncols*(this->Sid())+t]; 5870 5871 /*time:*/ 5872 time=matrix[(nrows-1)*ncols+t]; 5873 5874 if(t==0) transientinput=new TransientInput(name); 5875 transientinput->AddTimeInput(new TriaInput(name,&value,P0Enum),time); 5876 transientinput->Configure(parameters); 6151 for(int t=0;t<ncols;t++){ //ncols is the number of times 6152 IssmDouble value=matrix[ncols*(this->Sid())+t]; 6153 IssmDouble time=matrix[(nrows-1)*ncols+t]; 6154 transientinput->AddTriaTimeInput(t,1,&(this->lid),&value,P0Enum); 5877 6155 } 5878 this->inputs->AddInput(transientinput);5879 6156 break; 5880 6157 … … 5882 6159 _error_("type " << type << " (" << EnumToStringx(type) << ") not implemented yet"); 5883 6160 } 5884 5885 6161 } 5886 6162 /*}}}*/ … … 5957 6233 5958 6234 /*Add new inputs: */ 5959 this-> inputs->AddInput(new TriaInput(ThicknessEnum,thickness,P1Enum));5960 this-> inputs->AddInput(new TriaInput(BaseEnum,bed,P1Enum));5961 this-> inputs->AddInput(new TriaInput(SurfaceEnum,surface,P1Enum));6235 this->AddInput2(ThicknessEnum,thickness,P1Enum); 6236 this->AddInput2(BaseEnum,bed,P1Enum); 6237 this->AddInput2(SurfaceEnum,surface,P1Enum); 5962 6238 5963 6239 break; 5964 6240 case MaterialsRheologyBEnum: 5965 this-> inputs->AddInput(new TriaInput(MaterialsRheologyBbarEnum,values,P1Enum));6241 this->AddInput2(MaterialsRheologyBbarEnum,values,P1Enum); 5966 6242 break; 5967 6243 default: 5968 this-> inputs->AddInput(new TriaInput(name,values,P1Enum));6244 this->AddInput2(name,values,P1Enum); 5969 6245 } 5970 6246 break; … … 5974 6250 /*Get value for the element: */ 5975 6251 value=vector[this->Sid()]; //careful, vector of values here is not parallel distributed, but serial distributed (from a serial Dakota core!) 5976 this-> inputs->AddInput(new TriaInput(name,&value,P0Enum));6252 this->AddInput2(name,&value,P0Enum); 5977 6253 break; 5978 6254 default: -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r24208 r24335 30 30 31 31 public: 32 int iscollapsed; 32 33 33 34 /*Tria constructors, destructors {{{*/ 34 35 Tria(){}; 35 Tria(int tria_id,int tria_sid, IoModel* iomodel,int nummodels);36 Tria(int tria_id,int tria_sid,int tria_lid,IoModel* iomodel,int nummodels); 36 37 ~Tria(); 37 38 /*}}}*/ … … 63 64 void ComputeStressTensor(); 64 65 void ComputeSurfaceNormalVelocity(); 65 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters );66 void Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters,Inputs2* inputs2in); 66 67 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N, int M); 67 68 void ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index); … … 102 103 void InputDepthAverageAtBase(int enum_type,int average_enum_type); 103 104 void InputExtrude(int enum_type,int start){_error_("not implemented"); /*For penta only*/}; 105 void ControlInputExtrude(int enum_type,int start){/*For penta only*/}; 104 106 bool IsFaceOnBoundary(void); 105 107 bool IsIcefront(void); 106 108 bool IsNodeOnShelfFromFlags(IssmDouble* flags); 107 bool IsOnBase();108 bool IsOnSurface();109 109 bool IsZeroLevelset(int levelset_enum); 110 110 IssmDouble Masscon(IssmDouble* levelset); … … 124 124 void ResetLevelsetFromSegmentlist(IssmDouble* segments,int numsegments); 125 125 void RignotMeltParameterization(); 126 void SetElementInput(int enum_in,IssmDouble values); 127 void SetElementInput(Inputs2* inputs2,int enum_in,IssmDouble values); 128 void SetElementInput(Inputs2* inputs2,int numindices,int* indices,IssmDouble* values,int enum_in); 126 129 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index,int offset,int N,int M); 127 130 void SetControlInputsFromVector(IssmDouble* vector,int control_enum,int control_index); … … 140 143 IssmDouble TotalGroundedBmb(bool scaled); 141 144 IssmDouble TotalSmb(bool scaled); 142 void Update( int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement);145 void Update(Inputs2* inputs2,int index, IoModel* iomodel,int analysis_counter,int analysis_type,int finitelement); 143 146 int UpdatePotentialUngrounding(IssmDouble* vertices_potentially_ungrounding,Vector<IssmDouble>* vec_nodes_on_iceshelf,IssmDouble* nodes_on_iceshelf); 144 147 void ValueP1DerivativesOnGauss(IssmDouble* dvalue,IssmDouble* values,IssmDouble* xyz_list,Gauss* gauss); … … 169 172 void AddBasalInput(int input_enum, IssmDouble* values, int interpolation_enum); 170 173 void AddInput(int input_enum, IssmDouble* values, int interpolation_enum); 171 void AddControlInput(int input_enum, IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id); 172 void DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,IoModel* iomodel,int input_enum); 174 void AddBasalInput2(int input_enum, IssmDouble* values, int interpolation_enum); 175 void AddInput2(int input_enum, IssmDouble* values, int interpolation_enum); 176 void AddControlInput(int input_enum,Inputs2* inputs2,IoModel* iomodel,IssmDouble* values,IssmDouble* values_min,IssmDouble* values_max, int interpolation_enum,int id); 177 void DatasetInputCreate(IssmDouble* array,int M,int N,int* individual_enums,int num_inputs,Inputs2* inputs2,IoModel* iomodel,int input_enum); 173 178 IssmDouble GetArea(void); 174 179 IssmDouble GetHorizontalSurfaceArea(void); … … 178 183 void GetAreaCoordinates(IssmDouble *area_coordinates,IssmDouble* xyz_zero,IssmDouble* xyz_list,int numpoints); 179 184 int GetElementType(void); 185 Input2* GetInput2(int enumtype); 186 Input2* GetInput2(int enumtype,IssmDouble time); 187 DatasetInput2* GetDatasetInput2(int inputenum); 180 188 void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype); 181 189 void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype); … … 218 226 void UpdateConstraintsExtrudeFromBase(void); 219 227 void UpdateConstraintsExtrudeFromTop(void); 220 void ViscousHeating(IssmDouble* pphi,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,Input* vz_input){_error_("not implemented yet");};221 228 /*}}}*/ 222 229 -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r24282 r24335 17 17 #include "../shared/Enum/Enum.h" 18 18 #include "../analyses/analyses.h" 19 #include "./Inputs2/DatasetInput2.h" 19 20 20 21 #if _HAVE_CODIPACK_ … … 161 162 /*Save communicator in the parameters dataset: */ 162 163 this->parameters->AddObject(new GenericParam<ISSM_MPI_Comm>(incomm,FemModelCommEnum)); 163 164 164 } 165 165 /*}}}*/ … … 196 196 if(materials)delete materials; 197 197 if(parameters)delete parameters; 198 if(inputs2)delete inputs2; 198 199 if(results)delete results; 199 200 … … 336 337 output->materials=static_cast<Materials*>(this->materials->Copy()); 337 338 output->parameters=static_cast<Parameters*>(this->parameters->Copy()); 339 output->inputs2=static_cast<Inputs2*>(this->inputs2->Copy()); 338 340 output->results=static_cast<Results*>(this->results->Copy()); 339 341 output->vertices=static_cast<Vertices*>(this->vertices->Copy()); … … 354 356 SpcNodesx(output->nodes_list[i],output->constraints_list[i],output->parameters); 355 357 NodesDofx(output->nodes_list[i],output->parameters); 356 ConfigureObjectsx(output->elements,output->loads_list[i],output->nodes_list[i],output->vertices,output->materials,output->parameters );358 ConfigureObjectsx(output->elements,output->loads_list[i],output->nodes_list[i],output->vertices,output->materials,output->parameters,output->inputs2); 357 359 } 358 360 … … 428 430 429 431 /*create datasets for all analyses*/ 430 ModelProcessorx(&this->elements,&this->nodes_list,&this->vertices,&this->materials,&this->constraints_list,&this->loads_list,&this->parameters, iomodel,toolkitsoptionsfid,rootpath,this->solution_type,this->nummodels,this->analysis_type_list);432 ModelProcessorx(&this->elements,&this->nodes_list,&this->vertices,&this->materials,&this->constraints_list,&this->loads_list,&this->parameters,&this->inputs2,iomodel,toolkitsoptionsfid,rootpath,this->solution_type,this->nummodels,this->analysis_type_list); 431 433 432 434 /*do the post-processing of the datasets to get an FemModel that can actually run analyses: */ … … 437 439 438 440 if(VerboseMProcessor()) _printf0_(" configuring element and loads\n"); 439 ConfigureObjectsx(this->elements,this->loads,this->nodes,this->vertices,this->materials,this->parameters );441 ConfigureObjectsx(this->elements,this->loads,this->nodes,this->vertices,this->materials,this->parameters,this->inputs2); 440 442 441 443 if(i==0){ … … 462 464 delete this->materials; 463 465 delete this->parameters; 466 delete this->inputs2; 464 467 if(this->constraints_list && this->nummodels){ 465 468 for(i=0;i<this->nummodels;i++) delete this->constraints_list[i]; … … 481 484 this->materials = new Materials(); 482 485 this->parameters = new Parameters(); 486 this->inputs2 = new Inputs2(); 483 487 this->results = new Results(); 484 488 this->nodes = new Nodes(); … … 496 500 this->materials->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction); 497 501 this->parameters->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction); 502 this->inputs2->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction); 498 503 this->results->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction); 499 504 this->vertices->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction); … … 527 532 SpcNodesx(this->nodes_list[i],this->constraints_list[i],this->parameters); 528 533 NodesDofx(this->nodes_list[i],this->parameters); 529 ConfigureObjectsx(this->elements,this->loads_list[i],this->nodes_list[i],this->vertices,this->materials,this->parameters );534 ConfigureObjectsx(this->elements,this->loads_list[i],this->nodes_list[i],this->vertices,this->materials,this->parameters,this->inputs2); 530 535 } 531 536 … … 942 947 #endif 943 948 _printf0_("\n"); 944 945 949 } 946 950 } … … 968 972 /* Get node coordinates*/ 969 973 element->GetVerticesCoordinates(&xyz_list); 970 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);971 Input * thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);972 Input * vx_input = element->GetInput(VxEnum); _assert_(vx_input);973 Input * vy_input = element->GetInput(VyEnum); _assert_(vy_input);974 Input * surface_mass_balance_input = element->GetInput(SmbMassBalanceEnum); _assert_(surface_mass_balance_input);975 Input * groundedice_melting_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input);976 Input * dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input);974 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 975 Input2* thickness_input = element->GetInput2(ThicknessEnum); _assert_(thickness_input); 976 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 977 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 978 Input2* surface_mass_balance_input = element->GetInput2(SmbMassBalanceEnum); _assert_(surface_mass_balance_input); 979 Input2* groundedice_melting_input = element->GetInput2(BasalforcingsGroundediceMeltingRateEnum); _assert_(groundedice_melting_input); 980 Input2* dhdt_input = element->GetInput2(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 977 981 978 982 /* Start looping on the number of gaussian points: */ … … 1597 1601 1598 1602 }/*}}}*/ 1603 void FemModel::InputMakeDiscontinuous(int enum_in){/*{{{*/ 1604 1605 int numvertices = 6; 1606 IssmDouble* P1DGlist = xNew<IssmDouble>(numvertices); 1607 1608 for(int i=0;i<this->elements->Size();i++){ 1609 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1610 element->GetInputListOnVertices(P1DGlist,enum_in); 1611 element->AddInput2(DummyEnum,P1DGlist,P1DGEnum); 1612 } 1613 xDelete<IssmDouble>(P1DGlist); 1614 1615 this->inputs2->ChangeEnum(DummyEnum,enum_in); 1616 this->inputs2->DeleteInput(DummyEnum); 1617 1618 }/*}}}*/ 1599 1619 void FemModel::GroundinglineMassFluxx(IssmDouble* pM, bool scaled){/*{{{*/ 1600 1620 … … 1821 1841 for(i=0;i<this->elements->Size();i++){ 1822 1842 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1823 element_maxvel = element->inputs->Max(VelEnum); 1843 Input2* vel_input = element->GetInput2(VelEnum); _assert_(vel_input); 1844 element_maxvel = vel_input->GetInputMax(); 1824 1845 if(element_maxvel>maxvel) maxvel=element_maxvel; 1825 1846 } … … 1845 1866 for(i=0;i<this->elements->Size();i++){ 1846 1867 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1847 element_maxvx = element->inputs->Max(VxEnum); 1868 Input2* vx_input = element->GetInput2(VxEnum); _assert_(vx_input); 1869 element_maxvx = vx_input->GetInputMax(); 1848 1870 if(element_maxvx>maxvx) maxvx=element_maxvx; 1849 1871 } … … 1869 1891 for(i=0;i<this->elements->Size();i++){ 1870 1892 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1871 element_maxvy = element->inputs->Max(VyEnum); 1893 Input2* vy_input = element->GetInput2(VyEnum); _assert_(vy_input); 1894 element_maxvy = vy_input->GetInputMax(); 1872 1895 if(element_maxvy>maxvy) maxvy=element_maxvy; 1873 1896 } … … 1893 1916 for(i=0;i<this->elements->Size();i++){ 1894 1917 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(i)); 1895 element_maxvz = element->inputs->Max(VzEnum); 1918 Input2* vz_input = element->GetInput2(VzEnum); _assert_(vz_input); 1919 element_maxvz = vz_input->GetInputMax(); 1896 1920 if(element_maxvz>maxvz) maxvz=element_maxvz; 1897 1921 } … … 2024 2048 2025 2049 /*Retrieve all inputs we will be needing: */ 2026 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);2027 Input * omega_input =element->GetInput(BalancethicknessOmegaEnum);_assert_(omega_input);2050 DatasetInput2* weights_input = element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 2051 Input2* omega_input = element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input); 2028 2052 2029 2053 /* Start looping on the number of gaussian points: */ … … 2081 2105 2082 2106 /*Retrieve all inputs we will be needing: */ 2083 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);2084 Input * omega_input =element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input);2085 Input * omega0_input =element->GetInput(BalancethicknessOmega0Enum); _assert_(omega0_input);2107 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 2108 Input2* omega_input =element->GetInput2(BalancethicknessOmegaEnum); _assert_(omega_input); 2109 Input2* omega0_input =element->GetInput2(BalancethicknessOmega0Enum); _assert_(omega0_input); 2086 2110 2087 2111 /* Start looping on the number of gaussian points: */ … … 2356 2380 default: 2357 2381 2382 /*Some preliminary calculation may be required (use similar syntax for other inputs)*/ 2383 if(output_enum==NewDamageEnum){ 2384 InputDuplicatex(this,DamageDEnum,DamageDOldEnum); 2385 InputDuplicatex(this,DamageDbarEnum,DamageDbarOldEnum); 2386 this->ElementOperationx(&Element::ComputeNewDamage); 2387 } 2388 2358 2389 /*Vector layout*/ 2359 2390 if(!IsInputEnum(output_enum)) _error_("Cannot output \""<<EnumToStringx(output_enum)<<"\" because it is not an input"); … … 2366 2397 Element* element=xDynamicCast<Element*>(this->elements->GetObjectByOffset(j)); 2367 2398 element->ResultInterpolation(&rank_interpolation,&rank_nodesperelement,&rank_arraysize,output_enum); 2368 if 2399 if(rank_arraysize>max_rank_arraysize)max_rank_arraysize=rank_arraysize; 2369 2400 } 2370 rank_arraysize=max_rank_arraysize;2371 2401 2372 2402 /*Broadcast for cpus that do not have any elements*/ … … 2620 2650 2621 2651 /*Retrieve all inputs we will be needing: */ 2622 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);2623 Input * surface_input =element->GetInput(SurfaceEnum); _assert_(surface_input);2624 Input * surfaceobs_input=element->GetInput(InversionSurfaceObsEnum); _assert_(surfaceobs_input);2652 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 2653 Input2* surface_input =element->GetInput2(SurfaceEnum); _assert_(surface_input); 2654 Input2* surfaceobs_input=element->GetInput2(InversionSurfaceObsEnum); _assert_(surfaceobs_input); 2625 2655 2626 2656 /* Start looping on the number of gaussian points: */ … … 2676 2706 2677 2707 /*Retrieve all inputs we will be needing: */ 2678 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);2679 Input * thickness_input =element->GetInput(ThicknessEnum); _assert_(thickness_input);2708 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 2709 Input2* thickness_input =element->GetInput2(ThicknessEnum); _assert_(thickness_input); 2680 2710 2681 2711 /* Start looping on the number of gaussian points: */ … … 2732 2762 2733 2763 /*Retrieve all inputs we will be needing: */ 2734 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);2735 Input * thickness_input =element->GetInput(ThicknessEnum); _assert_(thickness_input);2764 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 2765 Input2* thickness_input =element->GetInput2(ThicknessEnum); _assert_(thickness_input); 2736 2766 2737 2767 /* Start looping on the number of gaussian points: */ … … 3104 3134 } 3105 3135 3106 ConfigureObjectsx(new_elements,this->loads,new_nodes_list[i],new_vertices,new_materials,this->parameters );3136 ConfigureObjectsx(new_elements,this->loads,new_nodes_list[i],new_vertices,new_materials,this->parameters,this->inputs2); 3107 3137 SpcNodesx(new_nodes_list[i],new_constraints_list[i],this->parameters); 3108 3138 NodesDofx(new_nodes_list[i],this->parameters); … … 3174 3204 } 3175 3205 /*insert new bedrock*/ 3176 element->AddInput (BedEnum,&r[0],P1Enum);3206 element->AddInput2(BedEnum,&r[0],P1Enum); 3177 3207 /*Cleanup*/ 3178 3208 xDelete<IssmDouble>(xyz_list); … … 3222 3252 3223 3253 /*Update inputs*/ 3224 element->AddInput (MaskGroundediceLevelsetEnum,&phi[0],P1Enum);3225 element->AddInput (ThicknessEnum,&h[0],P1Enum);3226 element->AddInput (BaseEnum,&b[0],P1Enum);3254 element->AddInput2(MaskGroundediceLevelsetEnum,&phi[0],P1Enum); 3255 element->AddInput2(ThicknessEnum,&h[0],P1Enum); 3256 element->AddInput2(BaseEnum,&b[0],P1Enum); 3227 3257 } 3228 3258 … … 3422 3452 for(int i=0;i<newfemmodel_elements->Size();i++){//just on the new partition 3423 3453 Element* element=xDynamicCast<Element*>(newfemmodel_elements->GetObjectByOffset(i)); 3454 _error_("not supported"); 3424 3455 /*newP0inputs is just on the new partition*/ 3425 3456 for(int j=0;j<numP0inputs;j++){ … … 3430 3461 break; 3431 3462 case IntInputEnum: 3463 element->SetIntInput(this->inputs2,P0input_enums[j],reCast<int>(newP0inputs[i*numP0inputs+j])); 3432 3464 element->AddInput(new IntInput(P0input_enums[j],reCast<int>(newP0inputs[i*numP0inputs+j]))); 3433 3465 break; 3434 3466 case BoolInputEnum: 3467 element->SetBoolInput(this->inputs2,P0input_enums[j],reCast<bool>(newP0inputs[i*numP0inputs+j])); 3435 3468 element->AddInput(new BoolInput(P0input_enums[j],reCast<bool>(newP0inputs[i*numP0inputs+j]))); 3436 3469 break; … … 5095 5128 } 5096 5129 else{ 5130 _error_("not implemented with inputs2"); 5097 5131 for(int j=0;j<elements->Size();j++){ 5098 5132 /*Intermediaries*/ … … 5133 5167 default: _error_("Not implemented yet"); 5134 5168 } 5135 stacking_input->Configure(parameters);5136 5169 xDelete<IssmDouble>(N); 5137 5170 } … … 5160 5193 transient_input->GetInputAverageOverTimeSlice(&time_averaged[iv],gauss,init_time,end_time); 5161 5194 } 5162 element->AddInput(averagedinput_enum[i],&time_averaged[0],element->GetElementType()); 5195 5196 element->AddInput2(averagedinput_enum[i],&time_averaged[0],element->GetElementType()); 5197 xDelete<IssmDouble>(time_averaged); 5163 5198 delete gauss; 5164 5199 xDelete<IssmDouble>(time_averaged); -
issm/trunk-jpl/src/c/classes/FemModel.h
r24240 r24335 11 11 class DataSet; 12 12 class Parameters; 13 class Inputs2; 13 14 class Nodes; 14 15 class Vertices; … … 43 44 Materials *materials; //one set of materials, for each element 44 45 Parameters *parameters; //one set of parameters, independent of the analysis_type 46 Inputs2 *inputs2; //one set of inputs, independent of the analysis_type 45 47 Results *results; //results that cannot be fit into the elements 46 48 Vertices *vertices; //one set of vertices … … 110 112 void IceVolumex(IssmDouble* pV, bool scaled); 111 113 void IceVolumeAboveFloatationx(IssmDouble* pV, bool scaled); 114 void InputMakeDiscontinuous(int enum_in); 112 115 void MassFluxx(IssmDouble* presponse); 113 116 void MaxAbsVxx(IssmDouble* presponse); -
issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp
r24106 r24335 31 31 int Inputs::AddInput(Input* in_input){/*{{{*/ 32 32 33 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 33 34 _assert_(in_input); 34 35 int enum_name = in_input->InstanceEnum(); 36 printf("Adding %s to inputs\n",EnumToStringx(enum_name)); 35 37 #ifdef _ISSM_DEBUG_ 36 38 if(!IsInputEnum(enum_name)) _error_("Enum \""<<EnumToStringx(enum_name)<<"\" is not placed properly in EnumDefinitions.h"); … … 57 59 /*}}}*/ 58 60 void Inputs::ChangeEnum(int oldenumtype,int newenumtype){/*{{{*/ 61 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 59 62 60 63 /*Delete input if it already exists*/ … … 91 94 int Inputs::DeleteInput(int enum_type){/*{{{*/ 92 95 93 Input* input=this->GetInput(enum_type); 94 if(input) this->DeleteObject(input); 96 vector<Object*>::iterator object; 97 Input* input=NULL; 98 bool found = false; 99 100 for ( object=objects.begin() ; object < objects.end(); object++ ){ 101 input=xDynamicCast<Input*>(*object); 102 if (input->InstanceEnum()==enum_type){ 103 found = true; 104 break; 105 } 106 } 107 if(found) this->DeleteObject(input); 95 108 return 1; 96 109 … … 98 111 /*}}}*/ 99 112 void Inputs::DuplicateInput(int original_enum,int new_enum){/*{{{*/ 113 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 100 114 101 115 /*Make a copy of the original input: */ … … 112 126 /*}}}*/ 113 127 Input* Inputs::GetInput(int enum_name){/*{{{*/ 128 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 114 129 115 130 vector<Object*>::iterator object; … … 125 140 /*}}}*/ 126 141 void Inputs::GetInputAverage(IssmDouble* pvalue,int enum_type){/*{{{*/ 142 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 127 143 128 144 /*Find input in current dataset*/ … … 136 152 /*}}}*/ 137 153 void Inputs::GetInputValue(bool* pvalue,int enum_type){/*{{{*/ 154 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 138 155 139 156 /*Find input in current dataset*/ … … 147 164 /*}}}*/ 148 165 void Inputs::GetInputValue(int* pvalue,int enum_type){/*{{{*/ 166 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 149 167 150 168 /*Find input in current dataset*/ … … 157 175 }/*}}}*/ 158 176 void Inputs::GetInputValue(IssmDouble* pvalue,int enum_type){/*{{{*/ 177 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 159 178 160 179 /*Find input in current dataset*/ … … 167 186 }/*}}}*/ 168 187 IssmDouble Inputs::Max(int enumtype){/*{{{*/ 188 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 169 189 170 190 /*Find input in current dataset*/ … … 177 197 }/*}}}*/ 178 198 IssmDouble Inputs::MaxAbs(int enumtype){/*{{{*/ 199 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 179 200 180 201 /*Find input in current dataset*/ … … 187 208 }/*}}}*/ 188 209 IssmDouble Inputs::Min(int enumtype){/*{{{*/ 210 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 189 211 190 212 /*Find input in current dataset*/ … … 197 219 }/*}}}*/ 198 220 IssmDouble Inputs::MinAbs(int enumtype){/*{{{*/ 221 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 199 222 200 223 /*Find input in current dataset*/ … … 207 230 }/*}}}*/ 208 231 Inputs* Inputs::SpawnSegInputs(int index1,int index2){/*{{{*/ 232 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 209 233 210 234 /*Intermediary*/ … … 232 256 /*}}}*/ 233 257 Inputs* Inputs::SpawnTriaInputs(int index1,int index2,int index3){/*{{{*/ 258 printf("-------------- file: Inputs.cpp line: %i\n",__LINE__); 234 259 235 260 /*Intermediary*/ -
issm/trunk-jpl/src/c/classes/IoModel.cpp
r24240 r24335 141 141 this->my_hedges=NULL; 142 142 this->my_vertices=NULL; 143 this->my_vertices_lids=NULL; 143 144 this->epart=NULL; 144 145 … … 206 207 207 208 /*Initialize permanent data: */ 208 this->my_elements = NULL; 209 this->my_faces = NULL; 210 this->my_vfaces = NULL; 211 this->my_edges = NULL; 212 this->my_vedges = NULL; 213 this->my_hedges = NULL; 214 this->my_vertices = NULL; 215 this->epart = NULL; 209 this->my_elements = NULL; 210 this->my_faces = NULL; 211 this->my_vfaces = NULL; 212 this->my_edges = NULL; 213 this->my_vedges = NULL; 214 this->my_hedges = NULL; 215 this->my_vertices = NULL; 216 this->my_vertices_lids = NULL; 217 this->epart = NULL; 216 218 217 219 FindConstant(&this->domaintype,"md.mesh.domain_type"); … … 264 266 xDelete<bool>(this->my_hedges); 265 267 xDelete<bool>(this->my_vertices); 268 xDelete<int>(this->my_vertices_lids); 266 269 xDelete<int>(this->epart); 267 270 … … 1594 1597 } 1595 1598 /*}}}*/ 1596 void IoModel::FetchDataToInput( Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value){/*{{{*/1599 void IoModel::FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value){/*{{{*/ 1597 1600 1598 1601 /*First, look whether it is not already loaded in this->data*/ … … 1604 1607 for(int i=0;i<elements->Size();i++){ 1605 1608 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1606 element->InputCreate(iodata->data, this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.1609 element->InputCreate(iodata->data,inputs2,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements. 1607 1610 } 1608 1611 return; … … 1625 1628 for(int i=0;i<elements->Size();i++){ 1626 1629 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1627 if(!doublearray) element->AddInput(input_enum,&default_value,P0Enum); 1628 else element->InputCreate(doublearray,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1630 if(!doublearray){ 1631 element->SetElementInput(inputs2,input_enum,default_value); 1632 } 1633 else{ 1634 element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1635 } 1629 1636 } 1630 1637 … … 1633 1640 } 1634 1641 /*}}}*/ 1635 void IoModel::FetchDataToInput( Elements* elements,const char* vector_name,int input_enum){/*{{{*/1642 void IoModel::FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum){/*{{{*/ 1636 1643 1637 1644 /*First, look whether it is not already loaded in this->data*/ … … 1642 1649 for(int i=0;i<elements->Size();i++){ 1643 1650 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1644 element->InputCreate(iodata->data, this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements.1651 element->InputCreate(iodata->data,inputs2,this,iodata->M,iodata->N,iodata->layout,input_enum,iodata->code);//we need i to index into elements. 1645 1652 } 1646 1653 return; … … 1668 1675 for(i=0;i<elements->Size();i++){ 1669 1676 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1670 element-> InputUpdateFromConstant(boolean,input_enum);1677 element->SetBoolInput(inputs2,input_enum,boolean); 1671 1678 } 1672 1679 break; … … 1675 1682 for(i=0;i<elements->Size();i++){ 1676 1683 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1677 element-> InputUpdateFromConstant(integer,input_enum);1684 element->SetIntInput(inputs2,input_enum,integer); 1678 1685 } 1679 1686 break; … … 1682 1689 for(i=0;i<elements->Size();i++){ 1683 1690 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1684 element-> InputUpdateFromConstant(scalar,input_enum);1691 element->SetElementInput(inputs2,input_enum,scalar); 1685 1692 } 1686 1693 break; … … 1690 1697 for(i=0;i<elements->Size();i++){ 1691 1698 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1692 element->InputCreate(doublearray, this,M,N,vector_layout,input_enum,code);//we need i to index into elements.1699 element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1693 1700 } 1694 1701 break; … … 1698 1705 for(i=0;i<elements->Size();i++){ 1699 1706 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1700 element->InputCreate(doublearray, this,M,N,vector_layout,input_enum,code);//we need i to index into elements.1707 element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1701 1708 } 1702 1709 break; … … 1707 1714 for(i=0;i<elements->Size();i++){ 1708 1715 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 1709 element->InputCreate(doublearray, this,M,N,vector_layout,input_enum,code);//we need i to index into elements.1716 element->InputCreate(doublearray,inputs2,this,M,N,vector_layout,input_enum,code);//we need i to index into elements. 1710 1717 } 1711 1718 break; … … 2592 2599 } 2593 2600 ISSM_MPI_Bcast(&found,1,ISSM_MPI_INT,0,IssmComm::GetComm()); 2594 if(!found) _error_("could not find data with name \"" << data_name << "\" in binary file");2601 if(!found) _error_("could not find data with name \"" << data_name << "\" in binary file"); 2595 2602 2596 2603 /*Broadcast code and vector type: */ -
issm/trunk-jpl/src/c/classes/IoModel.h
r23570 r24335 13 13 class Parameters; 14 14 class Elements; 15 class Inputs2; 15 16 class Param; 16 17 class Option; … … 70 71 bool *my_hedges; 71 72 bool *my_vertices; 73 int *my_vertices_lids; 72 74 int *epart; 73 75 … … 137 139 void FetchData(Options *options,const char* data_name); 138 140 void FetchData(int num,...); 139 void FetchDataToInput( Elements* elements,const char* vector_name,int input_enum);140 void FetchDataToInput( Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value);141 void FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum); 142 void FetchDataToInput(Inputs2* inputs2,Elements* elements,const char* vector_name,int input_enum,IssmDouble default_value); 141 143 void FetchIndependent(const char* dependent_name); 142 144 void FetchMultipleData(char*** pstringarray,int* pnumstrings,const char* data_name); -
issm/trunk-jpl/src/c/classes/Loads/Channel.cpp
r24132 r24335 387 387 IssmDouble c_t = element->FindParam(HydrologyPressureMeltCoefficientEnum); 388 388 389 Input * h_input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);390 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);391 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);392 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);393 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);394 Input * ks_input = element->GetInput(HydrologySheetConductivityEnum); _assert_(ks_input);395 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);389 Input2* h_input = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input); 390 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 391 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 392 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 393 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 394 Input2* ks_input = element->GetInput2(HydrologySheetConductivityEnum); _assert_(ks_input); 395 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 396 396 397 397 /*Get tangent vector*/ … … 518 518 IssmDouble c_t = element->FindParam(HydrologyPressureMeltCoefficientEnum); 519 519 520 Input * h_input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);521 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);522 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);523 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);524 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);525 Input * ks_input = element->GetInput(HydrologySheetConductivityEnum); _assert_(ks_input);526 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);520 Input2* h_input = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input); 521 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 522 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 523 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 524 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 525 Input2* ks_input = element->GetInput2(HydrologySheetConductivityEnum); _assert_(ks_input); 526 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 527 527 528 528 /*Get tangent vector*/ … … 630 630 IssmDouble dt = element->FindParam(TimesteppingTimeStepEnum); 631 631 632 Input * h_input = element->GetInput(HydrologySheetThicknessEnum);_assert_(h_input);633 Input * H_input = element->GetInput(ThicknessEnum); _assert_(H_input);634 Input * b_input = element->GetInput(BedEnum); _assert_(b_input);635 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);636 Input * n_input = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);637 Input * ks_input = element->GetInput(HydrologySheetConductivityEnum); _assert_(ks_input);638 Input * phi_input = element->GetInput(HydraulicPotentialEnum); _assert_(phi_input);632 Input2* h_input = element->GetInput2(HydrologySheetThicknessEnum);_assert_(h_input); 633 Input2* H_input = element->GetInput2(ThicknessEnum); _assert_(H_input); 634 Input2* b_input = element->GetInput2(BedEnum); _assert_(b_input); 635 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 636 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 637 Input2* ks_input = element->GetInput2(HydrologySheetConductivityEnum); _assert_(ks_input); 638 Input2* phi_input = element->GetInput2(HydraulicPotentialEnum); _assert_(phi_input); 639 639 640 640 /*Get tangent vector*/ -
issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
r23897 r24335 74 74 75 75 /*Recover parameters: */ 76 element->GetInputValue(&q_exp, FrictionQEnum);77 element->GetInputValue(&C_param, FrictionCEnum);76 element->GetInputValue(&q_exp,gauss,FrictionQEnum); 77 element->GetInputValue(&C_param,gauss,FrictionCEnum); 78 78 element->GetInputValue(&As,gauss,FrictionAsEnum); 79 79 element->GetInputValue(&n,gauss,MaterialsRheologyNEnum); … … 142 142 143 143 /*Recover parameters: */ 144 element->GetInputValue(&drag_p, FrictionPEnum);145 element->GetInputValue(&drag_q, FrictionQEnum);144 element->GetInputValue(&drag_p,gauss,FrictionPEnum); 145 element->GetInputValue(&drag_q,gauss,FrictionQEnum); 146 146 element->GetInputValue(&drag_coefficient, gauss,FrictionCoefficientEnum); 147 147 … … 224 224 225 225 /*Recover parameters: */ 226 element->GetInputValue(&drag_p, FrictionPEnum);227 element->GetInputValue(&drag_q, FrictionQEnum);226 element->GetInputValue(&drag_p,gauss,FrictionPEnum); 227 element->GetInputValue(&drag_q,gauss,FrictionQEnum); 228 228 element->GetInputValue(&thickness, gauss,ThicknessEnum); 229 229 element->GetInputValue(&base, gauss,BaseEnum); … … 284 284 285 285 /*Recover parameters: */ 286 element->GetInputValue(&q_exp, FrictionQEnum);287 element->GetInputValue(&C_param, FrictionCEnum);286 element->GetInputValue(&q_exp,gauss,FrictionQEnum); 287 element->GetInputValue(&C_param,gauss,FrictionCEnum); 288 288 element->GetInputValue(&As,gauss,FrictionAsEnum); 289 289 element->GetInputValue(&n,gauss,MaterialsRheologyNEnum); … … 424 424 425 425 /*Recover parameters: */ 426 element->GetInputValue(&drag_p, FrictionPEnum);427 element->GetInputValue(&drag_q, FrictionQEnum);426 element->GetInputValue(&drag_p,gauss,FrictionPEnum); 427 element->GetInputValue(&drag_q,gauss,FrictionQEnum); 428 428 element->GetInputValue(&drag_coefficient, gauss,FrictionCoefficientEnum); 429 if(element->Id()==1) _printf_(drag_coefficient<<"\n"); 429 430 430 431 /*compute r and q coefficients: */ … … 458 459 /*Recover parameters: */ 459 460 element->parameters->FindParam(&F,FrictionFEnum); 460 element->GetInputValue(&drag_p, FrictionPEnum);461 element->GetInputValue(&drag_q, FrictionQEnum);461 element->GetInputValue(&drag_p,gauss,FrictionPEnum); 462 element->GetInputValue(&drag_q,gauss,FrictionQEnum); 462 463 element->GetInputValue(&thickness, gauss,ThicknessEnum); 463 464 element->GetInputValue(&base, gauss,BaseEnum); -
issm/trunk-jpl/src/c/classes/Loads/Neumannflux.cpp
r24089 r24335 361 361 /*Retrieve all inputs and parameters*/ 362 362 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 363 Input * flux_input = tria->inputs->GetInput(HydrologyNeumannfluxEnum); _assert_(flux_input);363 Input2* flux_input = tria->GetInput2(HydrologyNeumannfluxEnum); _assert_(flux_input); 364 364 365 365 /*Check wether it is an inflow or outflow BC (0 is the middle of the segment)*/ … … 405 405 /*Retrieve all inputs and parameters*/ 406 406 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 407 Input * flux_input = tria->inputs->GetInput(HydrologyNeumannfluxEnum); _assert_(flux_input);407 Input2* flux_input = tria->GetInput2(HydrologyNeumannfluxEnum); _assert_(flux_input); 408 408 409 409 /*Check wether it is an inflow or outflow BC (0 is the middle of the segment)*/ -
issm/trunk-jpl/src/c/classes/Loads/Numericalflux.cpp
r24131 r24335 516 516 /*Retrieve all inputs and parameters*/ 517 517 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 518 Input * vxaverage_input=tria->inputs->GetInput(VxEnum);519 Input * vyaverage_input=tria->inputs->GetInput(VyEnum);518 Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 519 Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 520 520 GetNormal(&normal[0],xyz_list); 521 521 … … 591 591 /*Retrieve all inputs and parameters*/ 592 592 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 593 Input * vxaverage_input=tria->inputs->GetInput(VxEnum);594 Input * vyaverage_input=tria->inputs->GetInput(VyEnum);593 Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 594 Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 595 595 GetNormal(&normal[0],xyz_list); 596 596 … … 688 688 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 689 689 IssmDouble dt = parameters->FindParam(TimesteppingTimeStepEnum); 690 Input * vxaverage_input=tria->inputs->GetInput(VxEnum); _assert_(vxaverage_input);691 Input * vyaverage_input=tria->inputs->GetInput(VyEnum); _assert_(vyaverage_input);690 Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 691 Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 692 692 GetNormal(&normal[0],xyz_list); 693 693 … … 764 764 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 765 765 IssmDouble dt = parameters->FindParam(TimesteppingTimeStepEnum); 766 Input * vxaverage_input=tria->inputs->GetInput(VxEnum);767 Input * vyaverage_input=tria->inputs->GetInput(VyEnum);766 Input2* vxaverage_input=tria->GetInput2(VxEnum); _assert_(vxaverage_input); 767 Input2* vyaverage_input=tria->GetInput2(VyEnum); _assert_(vyaverage_input); 768 768 GetNormal(&normal[0],xyz_list); 769 769 … … 866 866 /*Retrieve all inputs and parameters*/ 867 867 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 868 Input * vxaverage_input = tria->inputs->GetInput(VxEnum); _assert_(vxaverage_input);869 Input * vyaverage_input = tria->inputs->GetInput(VyEnum); _assert_(vyaverage_input);870 Input * thickness_input = tria->inputs->GetInput(ThicknessEnum); _assert_(thickness_input);868 Input2* vxaverage_input = tria->GetInput2(VxEnum); _assert_(vxaverage_input); 869 Input2* vyaverage_input = tria->GetInput2(VyEnum); _assert_(vyaverage_input); 870 Input2* thickness_input = tria->GetInput2(ThicknessEnum); _assert_(thickness_input); 871 871 GetNormal(&normal[0],xyz_list); 872 872 … … 947 947 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 948 948 IssmDouble dt = parameters->FindParam(TimesteppingTimeStepEnum); 949 Input * vxaverage_input = tria->inputs->GetInput(VxEnum); _assert_(vxaverage_input);950 Input * vyaverage_input = tria->inputs->GetInput(VyEnum); _assert_(vyaverage_input);951 Input * spcthickness_input = tria->inputs->GetInput(MasstransportSpcthicknessEnum); _assert_(spcthickness_input);949 Input2* vxaverage_input = tria->GetInput2(VxEnum); _assert_(vxaverage_input); 950 Input2* vyaverage_input = tria->GetInput2(VyEnum); _assert_(vyaverage_input); 951 Input2* spcthickness_input = tria->GetInput2(MasstransportSpcthicknessEnum); _assert_(spcthickness_input); 952 952 GetNormal(&normal[0],xyz_list); 953 953 -
issm/trunk-jpl/src/c/classes/Materials/Material.h
r23524 r24335 16 16 class Gauss; 17 17 class Input; 18 class Input2; 18 19 /*}}}*/ 19 20 … … 56 57 virtual void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff)=0; 57 58 59 virtual void ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input)=0; 60 virtual void ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input)=0; 61 virtual void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf)=0; 62 virtual void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input)=0; 63 virtual void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble epseff)=0; 64 virtual void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff)=0; 65 virtual void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff)=0; 66 58 67 }; 59 68 #endif -
issm/trunk-jpl/src/c/classes/Materials/Matestar.cpp
r23524 r24335 160 160 IssmDouble B; 161 161 162 Input * B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input);162 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 163 163 B_input->GetInputValue(&B,gauss); 164 164 return B; … … 170 170 IssmDouble Bbar; 171 171 172 Input * B_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);172 Input2* B_input = element->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 173 173 B_input->GetInputValue(&Bbar,gauss); 174 174 return Bbar; … … 189 189 IssmDouble Ec; 190 190 191 Input * Ec_input = element->GetInput(MaterialsRheologyEcEnum); _assert_(Ec_input);191 Input2* Ec_input = element->GetInput2(MaterialsRheologyEcEnum); _assert_(Ec_input); 192 192 Ec_input->GetInputValue(&Ec,gauss); 193 193 return Ec; … … 199 199 IssmDouble Ecbar; 200 200 201 Input * Ecbar_input = element->GetInput(MaterialsRheologyEcbarEnum); _assert_(Ecbar_input);201 Input2* Ecbar_input = element->GetInput2(MaterialsRheologyEcbarEnum); _assert_(Ecbar_input); 202 202 Ecbar_input->GetInputValue(&Ecbar,gauss); 203 203 return Ecbar; … … 209 209 IssmDouble Es; 210 210 211 Input * Es_input = element->GetInput(MaterialsRheologyEsEnum); _assert_(Es_input);211 Input2* Es_input = element->GetInput2(MaterialsRheologyEsEnum); _assert_(Es_input); 212 212 Es_input->GetInputValue(&Es,gauss); 213 213 return Es; … … 219 219 IssmDouble Esbar; 220 220 221 Input * Esbar_input = element->GetInput(MaterialsRheologyEsbarEnum); _assert_(Esbar_input);221 Input2* Esbar_input = element->GetInput2(MaterialsRheologyEsbarEnum); _assert_(Esbar_input); 222 222 Esbar_input->GetInputValue(&Esbar,gauss); 223 223 return Esbar; … … 617 617 _error_("not implemented yet"); 618 618 }/*}}}*/ 619 620 void Matestar::ViscosityBFS(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff){/*{{{*/ 621 622 /*Intermediaries*/ 623 IssmDouble vx,vy,vz; 624 IssmDouble dvx[3],dvy[3],dvz[3]; 625 bool isdepthaveraged=0.; 626 627 /*Get velocity derivatives in all directions*/ 628 _assert_(dim>1); 629 _assert_(vx_input); 630 vx_input->GetInputValue(&vx,gauss); 631 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 632 _assert_(vy_input); 633 vy_input->GetInputValue(&vy,gauss); 634 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 635 if(dim==3){ 636 _assert_(vz_input); 637 vz_input->GetInputValue(&vz,gauss); 638 vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss); 639 } 640 else{ 641 vz = 0.; 642 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.; 643 } 644 645 /*Compute dmudB*/ 646 *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss); 647 } 648 /*}}}*/ 649 void Matestar::ViscosityBHO(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){/*{{{*/ 650 651 /*Intermediaries*/ 652 IssmDouble vx,vy,vz; 653 IssmDouble dvx[3],dvy[3],dvz[3]; 654 bool isdepthaveraged=0.; 655 656 /*Get velocity derivatives in all directions*/ 657 _assert_(dim==2 || dim==3); 658 _assert_(vx_input); 659 vx_input->GetInputValue(&vx,gauss); 660 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 661 if(dim==3){ 662 _assert_(vy_input); 663 vy_input->GetInputValue(&vy,gauss); 664 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 665 } 666 else{ 667 dvx[2] = 0.; 668 vy = 0.; 669 dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.; 670 } 671 vz = 0.; 672 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 673 674 /*Compute viscosity*/ 675 *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss); 676 }/*}}}*/ 677 void Matestar::ViscosityBSSA(IssmDouble* pdmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){/*{{{*/ 678 /*Intermediaries*/ 679 IssmDouble vx,vy,vz; 680 IssmDouble dvx[3],dvy[3],dvz[3]; 681 bool isdepthaveraged=1.; 682 683 /*Get velocity derivatives in all directions*/ 684 _assert_(dim==1 || dim==2); 685 _assert_(vx_input); 686 vx_input->GetInputValue(&vx,gauss); 687 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 688 if(dim==2){ 689 _assert_(vy_input); 690 vy_input->GetInputValue(&vy,gauss); 691 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 692 } 693 else{ 694 dvx[1] = 0.; 695 dvx[2] = 0.; 696 vy = 0.; 697 dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.; 698 } 699 dvx[2] = 0.; 700 dvy[2] = 0.; 701 vz = 0.; 702 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 703 704 /*Compute viscosity*/ 705 *pdmudB=GetViscosity_BGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss); 706 }/*}}}*/ 707 void Matestar::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/ 708 709 /*Intermediaries*/ 710 IssmDouble vx,vy,vz; 711 IssmDouble dvx[3],dvy[3],dvz[3]; 712 IssmDouble epsilon3d[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ 713 IssmDouble epsilon2d[3]; /* epsilon=[exx,eyy,exy];*/ 714 IssmDouble eps_eff,eps0=1.e-27; 715 bool isdepthaveraged=0.; 716 717 /*Get velocity derivatives in all directions*/ 718 _assert_(dim>1); 719 _assert_(vx_input); 720 vx_input->GetInputValue(&vx,gauss); 721 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 722 _assert_(vy_input); 723 vy_input->GetInputValue(&vy,gauss); 724 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 725 if(dim==3){ 726 _assert_(vz_input); 727 vz_input->GetInputValue(&vz,gauss); 728 vz_input->GetInputDerivativeValue(&dvz[0],xyz_list,gauss); 729 } 730 else{ 731 vz = 0.; 732 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = 0.; 733 } 734 735 if(dim==3){ 736 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */ 737 element->StrainRateFS(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input,vz_input); 738 eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[5]*epsilon3d[5] + epsilon3d[0]*epsilon3d[1]+eps0*eps0); 739 } 740 else{ 741 /* eps_eff^2 = 1/2 ( exx^2 + eyy^2 + 2*exy^2 )*/ 742 element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input); 743 eps_eff = 1./sqrt(2.)*sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + 2.*epsilon2d[2]*epsilon2d[2]); 744 } 745 746 /*Compute viscosity*/ 747 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss); 748 } 749 /*}}}*/ 750 void Matestar::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 751 752 /*Intermediaries*/ 753 IssmDouble vx,vy,vz; 754 IssmDouble dvx[3],dvy[3],dvz[3]; 755 IssmDouble epsilon3d[5]; /* epsilon=[exx,eyy,exy,exz,eyz];*/ 756 IssmDouble epsilon2d[5]; /* epsilon=[exx,exy];*/ 757 IssmDouble eps_eff; 758 bool isdepthaveraged=0.; 759 760 if(dim==3){ 761 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */ 762 element->StrainRateHO(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input); 763 eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[2]*epsilon3d[2] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[0]*epsilon3d[1]); 764 } 765 else{ 766 /* eps_eff^2 = 1/2 (2*exx^2 + 2*exy^2 ) (since eps_zz = - eps_xx)*/ 767 element->StrainRateHO2dvertical(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input); 768 eps_eff = 1./sqrt(2.)*sqrt(2*epsilon2d[0]*epsilon2d[0] + 2*epsilon2d[1]*epsilon2d[1]); 769 } 770 771 /*Get velocity derivatives in all directions*/ 772 _assert_(dim==2 || dim==3); 773 _assert_(vx_input); 774 vx_input->GetInputValue(&vx,gauss); 775 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 776 if(dim==3){ 777 _assert_(vy_input); 778 vy_input->GetInputValue(&vy,gauss); 779 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 780 } 781 else{ 782 dvx[2] = 0.; 783 vy = 0.; 784 dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.; 785 } 786 vz = 0.; 787 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 788 789 /*Compute viscosity*/ 790 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss); 791 }/*}}}*/ 792 void Matestar::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surface_input){/*{{{*/ 793 _error_("not implemented yet"); 794 }/*}}}*/ 795 void Matestar::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 796 797 /*Intermediaries*/ 798 IssmDouble vx,vy,vz; 799 IssmDouble dvx[3],dvy[3],dvz[3]; 800 IssmDouble epsilon2d[3];/* epsilon=[exx,eyy,exy]; */ 801 IssmDouble epsilon1d; /* epsilon=[exx]; */ 802 IssmDouble eps_eff; 803 bool isdepthaveraged=1.; 804 805 /*Get velocity derivatives in all directions*/ 806 _assert_(dim==1 || dim==2); 807 _assert_(vx_input); 808 vx_input->GetInputValue(&vx,gauss); 809 vx_input->GetInputDerivativeValue(&dvx[0],xyz_list,gauss); 810 if(dim==2){ 811 _assert_(vy_input); 812 vy_input->GetInputValue(&vy,gauss); 813 vy_input->GetInputDerivativeValue(&dvy[0],xyz_list,gauss); 814 } 815 else{ 816 dvx[1] = 0.; 817 dvx[2] = 0.; 818 vy = 0.; 819 dvy[0] = 0.; dvy[1] = 0.; dvy[2] = 0.; 820 } 821 dvx[2] = 0.; 822 dvy[2] = 0.; 823 vz = 0.; 824 dvz[0] = 0.; dvz[1] = 0.; dvz[2] = -dvx[0]-dvy[1]; 825 826 if(dim==2){ 827 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exx*eyy*/ 828 element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input); 829 eps_eff = sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + epsilon2d[2]*epsilon2d[2] + epsilon2d[0]*epsilon2d[1]); 830 } 831 else{ 832 /* eps_eff^2 = exx^2*/ 833 element->StrainRateSSA1d(&epsilon1d,xyz_list,gauss,vx_input); 834 eps_eff = fabs(epsilon1d); 835 } 836 837 /*Compute viscosity*/ 838 *pviscosity=GetViscosityGeneral(vx,vy,vz,&dvx[0],&dvy[0],&dvz[0],eps_eff,isdepthaveraged,gauss); 839 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Materials/Matestar.h
r23524 r24335 81 81 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff); 82 82 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff); 83 84 void ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input); 85 void ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 86 void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf); 87 void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 88 void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff); 89 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff); 90 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff); 83 91 /*}}}*/ 84 92 IssmDouble GetViscosityGeneral(IssmDouble vx,IssmDouble vy,IssmDouble vz,IssmDouble* dvx,IssmDouble* dvy,IssmDouble* dvz,IssmDouble eps_eff,bool isdepthaveraged,Gauss* gauss); -
issm/trunk-jpl/src/c/classes/Materials/Matice.cpp
r23644 r24335 221 221 /*Output*/ 222 222 IssmDouble B; 223 224 Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input); 223 Input2* B_input = element->GetInput2(MaterialsRheologyBEnum); _assert_(B_input); 225 224 B_input->GetInputValue(&B,gauss); 226 225 return B; … … 234 233 IssmDouble Bbar; 235 234 236 Input * B_input = element->GetInput(MaterialsRheologyBbarEnum); _assert_(B_input);235 Input2* B_input = element->GetInput2(MaterialsRheologyBbarEnum); _assert_(B_input); 237 236 B_input->GetInputValue(&Bbar,gauss); 238 237 return Bbar; … … 245 244 IssmDouble D; 246 245 if(this->isdamaged){ 247 Input * D_input = element->GetInput(DamageDEnum); _assert_(D_input);246 Input2* D_input = element->GetInput2(DamageDEnum); _assert_(D_input); 248 247 D_input->GetInputValue(&D,gauss); 249 248 } … … 260 259 IssmDouble Dbar; 261 260 if(this->isdamaged){ 262 Input * D_input = element->GetInput(DamageDbarEnum); _assert_(D_input);261 Input2* D_input = element->GetInput2(DamageDbarEnum); _assert_(D_input); 263 262 D_input->GetInputValue(&Dbar,gauss); 264 263 } … … 274 273 /*Output*/ 275 274 IssmDouble E; 276 Input * E_input = element->GetInput(MaterialsRheologyEEnum); _assert_(E_input);275 Input2* E_input = element->GetInput2(MaterialsRheologyEEnum); _assert_(E_input); 277 276 E_input->GetInputValue(&E,gauss); 278 277 return E; … … 284 283 /*Output*/ 285 284 IssmDouble Ebar; 286 Input * E_input = element->GetInput(MaterialsRheologyEbarEnum); _assert_(E_input);285 Input2* E_input = element->GetInput2(MaterialsRheologyEbarEnum); _assert_(E_input); 287 286 E_input->GetInputValue(&Ebar,gauss); 288 287 return Ebar; … … 293 292 /*Output*/ 294 293 IssmDouble n; 295 296 element->inputs->GetInputAverage(&n,MaterialsRheologyNEnum);294 Input2* n_input = element->GetInput2(MaterialsRheologyNEnum); _assert_(n_input); 295 n_input->GetInputAverage(&n); 297 296 return n; 298 297 } … … 825 824 this->GetViscosity2dDerivativeEpsSquare(pmu_prime,epsilon,gauss); 826 825 }/*}}}*/ 826 827 void Matice::ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){/*{{{*/ 828 /*The effective strain rate is defined in Paterson 3d Ed p 91 eq 9, 829 * and Cuffey p 303 eq 8.18: 830 * 831 * 2 eps_eff^2 = eps_xx^2 + eps_yy^2 + eps_zz^2 + 2(eps_xy^2 + eps_xz^2 + eps_yz^2) 832 * 833 * or 834 * 835 * eps_eff = 1/sqrt(2) sqrt( \sum_ij eps_ij^2 ) 836 * 837 * = 1/sqrt(2) ||eps||_F 838 * 839 * where ||.||_F is the Frobenius norm */ 840 841 /*Intermediaries*/ 842 IssmDouble viscosity; 843 IssmDouble epsilon3d[6]; /* epsilon=[exx,eyy,ezz,exy,exz,eyz];*/ 844 IssmDouble epsilon2d[3]; /* epsilon=[exx,eyy,exy]; */ 845 IssmDouble eps_eff; 846 IssmDouble eps0=1.e-27; 847 848 if(dim==3){ 849 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */ 850 element->StrainRateFS(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input,vz_input); 851 eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[5]*epsilon3d[5] + epsilon3d[0]*epsilon3d[1]+eps0*eps0); 852 } 853 else{ 854 /* eps_eff^2 = 1/2 ( exx^2 + eyy^2 + 2*exy^2 )*/ 855 element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input); 856 eps_eff = 1./sqrt(2.)*sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + 2.*epsilon2d[2]*epsilon2d[2]); 857 } 858 859 /*Get viscosity*/ 860 this->GetViscosity(&viscosity,eps_eff,gauss); 861 862 /*Assign output pointer*/ 863 *pviscosity=viscosity; 864 } 865 /*}}}*/ 866 void Matice::ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 867 868 /*Intermediaries*/ 869 IssmDouble viscosity; 870 IssmDouble epsilon3d[5];/* epsilon=[exx,eyy,exy,exz,eyz];*/ 871 IssmDouble epsilon2d[2];/* epsilon=[exx,exy]; */ 872 IssmDouble eps_eff; 873 874 if(dim==3){ 875 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exz^2 + eyz^2 + exx*eyy */ 876 element->StrainRateHO(&epsilon3d[0],xyz_list,gauss,vx_input,vy_input); 877 eps_eff = sqrt(epsilon3d[0]*epsilon3d[0] + epsilon3d[1]*epsilon3d[1] + epsilon3d[2]*epsilon3d[2] + epsilon3d[3]*epsilon3d[3] + epsilon3d[4]*epsilon3d[4] + epsilon3d[0]*epsilon3d[1]); 878 } 879 else{ 880 /* eps_eff^2 = 1/2 (2*exx^2 + 2*exy^2 ) (since eps_zz = - eps_xx)*/ 881 element->StrainRateHO2dvertical(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input); 882 eps_eff = 1./sqrt(2.)*sqrt(2*epsilon2d[0]*epsilon2d[0] + 2*epsilon2d[1]*epsilon2d[1]); 883 } 884 885 /*Get viscosity*/ 886 this->GetViscosity(&viscosity,eps_eff,gauss); 887 _assert_(!xIsNan<IssmDouble>(viscosity)); 888 889 /*Assign output pointer*/ 890 *pviscosity=viscosity; 891 }/*}}}*/ 892 void Matice::ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surface_input){/*{{{*/ 893 /*Compute the L1L2 viscosity 894 * 895 * 1 896 * mu = - A^-1 (sigma'_e)^(1-n) 897 * 2 898 * 899 * sigma'_e^2 = |sigma'_//|^2 + |sigma'_perp|^2 (see Perego 2012 eq. 17,18) 900 * 901 * L1L2 assumptions: 902 * 903 * (1) |eps_b|_// = A (|sigma'_//|^2 + |sigma'_perp|^2)^((n-1)/2) |sigma'_//| 904 * (2) |sigma'_perp|^2 = |rho g (s-z) grad(s)|^2 905 * 906 * Assuming that n = 3, we have a polynom of degree 3 to solve (the only unkown is X=|sigma'_//|) 907 * 908 * A X^3 + A |rho g (s-z) grad(s)|^2 X - |eps_b|_// = 0 */ 909 910 IssmDouble z,s,viscosity,p,q,delta; 911 IssmDouble tau_perp,tau_par,eps_b,A; 912 IssmDouble epsilon[5]; /*exx eyy exy exz eyz*/ 913 IssmDouble slope[3]; 914 915 /*Check that both inputs have been found*/ 916 if (!vx_input || !vy_input || !surface_input) _error_("Input missing"); 917 918 /*Get tau_perp*/ 919 surface_input->GetInputValue(&s,gauss); 920 surface_input->GetInputDerivativeValue(&slope[0],xyz_list,gauss); 921 z=this->element->GetZcoord(xyz_list,gauss); 922 tau_perp = element->FindParam(MaterialsRhoIceEnum) * element->FindParam(ConstantsGEnum) * fabs(s-z)*sqrt(slope[0]*slope[0]+slope[1]*slope[1]); 923 924 /* Get eps_b*/ 925 element->StrainRateHO(&epsilon[0],xyz_list,gauss,vx_input,vy_input); 926 eps_b = sqrt(epsilon[0]*epsilon[0] + epsilon[1]*epsilon[1] + epsilon[0]*epsilon[1] + epsilon[2]*epsilon[2]); 927 if(eps_b==0.){ 928 *pviscosity = 2.5e+17; 929 return; 930 } 931 932 /*Get A*/ 933 _assert_(this->GetN()==3.0); 934 A=this->GetA(gauss); 935 936 /*Solve for tau_perp (http://fr.wikipedia.org/wiki/Méthode_de_Cardan)*/ 937 p = tau_perp *tau_perp; 938 q = - eps_b/A; 939 delta = q *q + p*p*p*4./27.; 940 _assert_(delta>0); 941 tau_par = pow(0.5*(-q+sqrt(delta)),1./3.) - pow(0.5*(q+sqrt(delta)),1./3.); 942 943 /*Viscosity*/ 944 viscosity = 1./(2.*A*(tau_par*tau_par + tau_perp*tau_perp)); 945 _assert_(!xIsNan(viscosity)); 946 _assert_(viscosity > 0.); 947 948 /*Assign output pointer*/ 949 *pviscosity = viscosity; 950 }/*}}}*/ 951 void Matice::ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){/*{{{*/ 952 953 /*Intermediaries*/ 954 IssmDouble viscosity; 955 IssmDouble epsilon2d[3];/* epsilon=[exx,eyy,exy]; */ 956 IssmDouble epsilon1d; /* epsilon=[exx]; */ 957 IssmDouble eps_eff; 958 959 if(dim==2){ 960 /* eps_eff^2 = exx^2 + eyy^2 + exy^2 + exx*eyy*/ 961 element->StrainRateSSA(&epsilon2d[0],xyz_list,gauss,vx_input,vy_input); 962 eps_eff = sqrt(epsilon2d[0]*epsilon2d[0] + epsilon2d[1]*epsilon2d[1] + epsilon2d[2]*epsilon2d[2] + epsilon2d[0]*epsilon2d[1]); 963 } 964 else{ 965 /* eps_eff^2 = exx^2*/ 966 element->StrainRateSSA1d(&epsilon1d,xyz_list,gauss,vx_input); 967 eps_eff = fabs(epsilon1d); 968 } 969 970 /*Get viscosity*/ 971 this->GetViscosityBar(&viscosity,eps_eff,gauss); 972 973 /*Assign output pointer*/ 974 *pviscosity=viscosity; 975 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Materials/Matice.h
r23524 r24335 83 83 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");}; 84 84 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble eps_eff){_error_("not supported");}; 85 86 void ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input); 87 void ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 88 void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf); 89 void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input); 90 void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble eps_eff){_error_("not supported");}; 91 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){_error_("not supported");}; 92 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble eps_eff){_error_("not supported");}; 85 93 /*}}}*/ 86 94 }; -
issm/trunk-jpl/src/c/classes/Materials/Matlitho.h
r23644 r24335 73 73 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input* vx_input,Input* vy_input,IssmDouble epseff){_error_("not supported");}; 74 74 75 76 void ViscosityFS(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input){_error_("not supported");}; 77 void ViscosityHO(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){_error_("not supported");}; 78 void ViscosityL1L2(IssmDouble* pviscosity,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* surf){_error_("not supported");}; 79 void ViscositySSA(IssmDouble* pviscosity,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input){_error_("not supported");}; 80 void ViscosityBFS(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,Input2* vz_input,IssmDouble epseff){_error_("not supported");}; 81 void ViscosityBHO(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff){_error_("not supported");}; 82 void ViscosityBSSA(IssmDouble* pmudB,int dim,IssmDouble* xyz_list,Gauss* gauss,Input2* vx_input,Input2* vy_input,IssmDouble epseff){_error_("not supported");}; 83 75 84 /*}}}*/ 76 85 -
issm/trunk-jpl/src/c/classes/Misfit.cpp
r23066 r24335 235 235 model=OutputDefinitionsResponsex(femmodel,this->model_enum); 236 236 /*Now, the observation is buried inside the elements, go fish it in the first element (cludgy, needs fixing): */ 237 Element* element =(Element*)femmodel->elements->GetObjectByOffset(0); _assert_(element);238 Input * input = element->GetInput(observation_enum); _assert_(input);237 Element* element = (Element*)femmodel->elements->GetObjectByOffset(0); _assert_(element); 238 Input2* input = element->GetInput2(observation_enum); _assert_(input); 239 239 input->GetInputAverage(&observation); 240 240 -
issm/trunk-jpl/src/c/classes/Params/Parameters.cpp
r24240 r24335 233 233 } 234 234 else if(obj_enum==GenericParamEnum){ 235 /*Skip for now (we don't want to Marhsall Comms */235 /*Skip for now (we don't want to Marhsall Comms)*/ 236 236 } 237 237 } -
issm/trunk-jpl/src/c/classes/Vertices.cpp
r23640 r24335 171 171 /*}}}*/ 172 172 173 void Vertices::Finalize( ){/*{{{*/173 void Vertices::Finalize(IoModel* iomodel){/*{{{*/ 174 174 175 175 /*Here we do 3 things: … … 195 195 196 196 /*2. Distribute lids (First: masters, then clones)*/ 197 iomodel->my_vertices_lids=xNew<int>(this->numberofvertices); 198 for(int i=0;i<this->numberofvertices;i++) iomodel->my_vertices_lids[i] = -1; 199 197 200 int lid = 0; 198 201 for(int i=0;i<this->Size();i++){ 199 202 Vertex* vertex=xDynamicCast<Vertex*>(this->GetObjectByOffset(i)); 200 if(!vertex->clone) vertex->lid=lid++; 201 } 202 for(int i=0;i<this->Size();i++){ 203 Vertex* vertex=xDynamicCast<Vertex*>(this->GetObjectByOffset(i)); 204 if(vertex->clone) vertex->lid=lid++; 203 if(!vertex->clone){ 204 vertex->lid=lid; 205 iomodel->my_vertices_lids[vertex->sid] = lid; 206 lid++; 207 } 208 } 209 for(int i=0;i<this->Size();i++){ 210 Vertex* vertex=xDynamicCast<Vertex*>(this->GetObjectByOffset(i)); 211 if(vertex->clone){ 212 vertex->lid=lid; 213 iomodel->my_vertices_lids[vertex->sid] = lid; 214 lid++; 215 } 205 216 } 206 217 -
issm/trunk-jpl/src/c/classes/Vertices.h
r23638 r24335 5 5 #include "../datastructures/datastructures.h" 6 6 #include "../shared/shared.h" 7 class IoModel; 7 8 8 9 /*!\brief Declaration of Vertices class. … … 33 34 34 35 /*numerics:*/ 35 void Finalize( void);36 void Finalize(IoModel* iomodel); 36 37 int NumberOfVertices(void); 37 38 int NumberOfVerticesLocal(void); -
issm/trunk-jpl/src/c/classes/classes.h
r24205 r24335 81 81 #include "./Inputs/TransientInput.h" 82 82 83 /*Inputs2*/ 84 #include "./Inputs2/Inputs2.h" 85 #include "./Inputs2/Input2.h" 86 83 87 /*ExternalResults: */ 84 88 #include "./ExternalResults/Results.h" -
issm/trunk-jpl/src/c/cores/control_core.cpp
r23311 r24335 143 143 /*Update control input*/ 144 144 SetControlInputsFromVectorx(femmodel,X); 145 146 145 147 146 /*solve forward: */ -
issm/trunk-jpl/src/c/cores/hydrology_core.cpp
r24240 r24335 178 178 if(VerboseSolution()) _printf0_(" updating water column\n"); 179 179 HydrologyPismAnalysis* analysis = new HydrologyPismAnalysis(); 180 InputDuplicatex(femmodel,WatercolumnEnum,WaterColumnOldEnum); 180 181 analysis->UpdateWaterColumn(femmodel); 181 182 delete analysis; -
issm/trunk-jpl/src/c/cores/masstransport_core.cpp
r24097 r24335 62 62 femmodel->SetCurrentConfiguration(MasstransportAnalysisEnum); 63 63 InputDuplicatex(femmodel,ThicknessEnum,ThicknessOldEnum); 64 InputDuplicatex(femmodel,BaseEnum,BaseOldEnum); 65 InputDuplicatex(femmodel,SurfaceEnum,SurfaceOldEnum); 66 InputDuplicatex(femmodel,SealevelriseCumDeltathicknessEnum,SealevelriseCumDeltathicknessOldEnum); 64 67 if(stabilization==4){ 65 68 solutionsequence_fct(femmodel); -
issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp
r24259 r24335 192 192 193 193 //reset cumdeltathickness to 0: 194 InputUpdateFromConstantx(femmodel-> elements,0.,SealevelriseCumDeltathicknessEnum);194 InputUpdateFromConstantx(femmodel->inputs2,femmodel->elements,0.,SealevelriseCumDeltathicknessEnum); 195 195 } 196 196 -
issm/trunk-jpl/src/c/cores/thermal_core.cpp
r24240 r24335 14 14 15 15 /*Start profiler*/ 16 16 femmodel->profiler->Start(THERMALCORE); 17 17 18 18 /*intermediary*/ … … 34 34 35 35 if(isenthalpy){ 36 femmodel->InputMakeDiscontinuous(BasalforcingsGroundediceMeltingRateEnum); 36 37 enthalpy_analysis = new EnthalpyAnalysis(); 37 38 enthalpy_analysis->Core(femmodel); -
issm/trunk-jpl/src/c/main/esmfbinders.cpp
r23644 r24335 114 114 115 115 /*Recover surface from the ISSM element: */ 116 Input * surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input);116 Input2* surface_input = element->GetInput2(SurfaceEnum); _assert_(surface_input); 117 117 surface_input->GetInputAverage(&surface); 118 118 -
issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
r23588 r24335 9 9 #include "../../classes/classes.h" 10 10 11 int ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters){ 12 13 /*Intermediary*/ 14 int i; 15 int noerr = 1; 16 int configuration_type; 17 Element *element = NULL; 18 Load *load = NULL; 19 Material *material = NULL; 11 int ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials,Parameters* parameters,Inputs2* inputs2){ 20 12 21 13 /*Get analysis type: */ 14 int configuration_type; 22 15 parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 23 16 24 17 if(VerboseMProcessor()) _printf0_(" Configuring elements...\n"); 25 for(i =0;i<elements->Size();i++){26 element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));27 element->Configure(elements,loads,nodes,vertices,materials,parameters );18 for(int i=0;i<elements->Size();i++){ 19 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 20 element->Configure(elements,loads,nodes,vertices,materials,parameters,inputs2); 28 21 } 29 22 if(VerboseMProcessor()) _printf0_(" Configuring loads...\n"); 30 for(i =0;i<loads->Size();i++){31 load=(Load*)loads->GetObjectByOffset(i);23 for(int i=0;i<loads->Size();i++){ 24 Load* load=(Load*)loads->GetObjectByOffset(i); 32 25 load->Configure(elements,loads,nodes,vertices,materials,parameters); 33 26 } 34 27 if(VerboseMProcessor()) _printf0_(" Configuring materials...\n"); 35 for(i =0;i<materials->Size();i++){36 material=(Material*)materials->GetObjectByOffset(i);28 for(int i=0;i<materials->Size();i++){ 29 Material* material=(Material*)materials->GetObjectByOffset(i); 37 30 material->Configure(elements); 38 31 } 39 return noerr; 32 if(VerboseMProcessor()) _printf0_(" Configuring inputs...\n"); 33 inputs2->Configure(parameters); 34 35 return 1; 40 36 } -
issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.h
r14996 r24335 9 9 10 10 /* local prototypes: */ 11 int ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials, Parameters* parameters );11 int ConfigureObjectsx( Elements* elements, Loads* loads, Nodes* nodes, Vertices* vertices, Materials* materials, Parameters* parameters,Inputs2* inputs2); 12 12 13 13 #endif /* _CONFIGUREOBJECTSX_H */ -
issm/trunk-jpl/src/c/modules/Damagex/Damagex.cpp
r24146 r24335 4 4 5 5 #include "./Damagex.h" 6 #include "../InputDuplicatex/InputDuplicatex.h" 6 7 #include "../../shared/shared.h" 7 8 #include "../../toolkits/toolkits.h" … … 17 18 case 0: 18 19 if(VerboseModule()) _printf0_(" computing damage analytically\n"); 20 InputDuplicatex(femmodel,DamageDEnum,DamageDOldEnum); 21 InputDuplicatex(femmodel,DamageDbarEnum,DamageDbarOldEnum); 19 22 femmodel->ElementOperationx(&Element::ComputeNewDamage); 20 23 break; -
issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
r18521 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void DragCoefficientAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 59 60 60 61 /*Retrieve all inputs we will be needing: */ 61 Input* weights_input=basalelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);62 Input * drag_input =basalelement->GetInput(FrictionCoefficientEnum); _assert_(drag_input);62 DatasetInput2* weights_input=basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 63 Input2* drag_input =basalelement->GetInput2(FrictionCoefficientEnum); _assert_(drag_input); 63 64 64 65 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
r24010 r24335 4 4 5 5 #include "./FloatingiceMeltingRatePicox.h" 6 #include "../InputDuplicatex/InputDuplicatex.h" 6 7 #include "../../shared/shared.h" 7 8 #include "../../toolkits/toolkits.h" … … 17 18 int numvertices = element->GetNumberOfVertices(); 18 19 IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices); 19 element->AddInput (BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);20 element->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 20 21 xDelete<IssmDouble>(values); 21 22 } … … 45 46 IssmDouble* dmax_basin_cpu=xNew<IssmDouble>(num_basins); 46 47 47 femmodel->elements->InputDuplicate(MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum);48 InputDuplicatex(femmodel,MaskGroundediceLevelsetEnum,DistanceToGroundinglineEnum); 48 49 femmodel->DistanceToFieldValue(MaskGroundediceLevelsetEnum,0.,DistanceToGroundinglineEnum); 49 50 50 femmodel->elements->InputDuplicate(MaskIceLevelsetEnum,DistanceToCalvingfrontEnum);51 InputDuplicatex(femmodel,MaskIceLevelsetEnum,DistanceToCalvingfrontEnum); 51 52 femmodel->DistanceToFieldValue(MaskIceLevelsetEnum,0.,DistanceToCalvingfrontEnum); 52 53 … … 60 61 distances=xNew<IssmDouble>(numvertices); 61 62 element->GetInputListOnVertices(&distances[0],DistanceToGroundinglineEnum); 62 element-> inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);63 element->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 63 64 for(int k=0; k<numvertices; k++){ 64 65 if(fabs(distances[k])>maxdist_cpu){maxdist_cpu=fabs(distances[k]);} … … 116 117 Element* basalelement = element->SpawnBasalElement(); 117 118 if(!basalelement->IsIceInElement() || !basalelement->IsFloating()) continue; 118 basalelement-> inputs->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);119 basalelement-> inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);119 basalelement->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum); 120 basalelement->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 120 121 boxareas[basinid*maxbox+boxid]+=basalelement->GetHorizontalSurfaceArea(); 121 122 basalelement->FindParam(&domaintype,DomainTypeEnum); … … 165 166 if(!basalelement->IsIceInElement() || !basalelement->IsFloating()) continue; 166 167 int el_boxid; 167 basalelement-> inputs->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);168 basalelement->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum); 168 169 if(el_boxid!=boxid) continue; 169 170 170 Input * tocs_input=basalelement->GetInput(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(tocs_input);171 Input * socs_input=basalelement->GetInput(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(socs_input);172 173 basalelement-> inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);171 Input2* tocs_input=basalelement->GetInput2(BasalforcingsPicoSubShelfOceanTempEnum); _assert_(tocs_input); 172 Input2* socs_input=basalelement->GetInput2(BasalforcingsPicoSubShelfOceanSalinityEnum); _assert_(socs_input); 173 174 basalelement->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 174 175 Gauss* gauss=basalelement->NewGauss(1); gauss->GaussPoint(0); 175 176 tocs_input->GetInputValue(&toc,gauss); … … 206 207 if(!basalelement->IsIceInElement() || !basalelement->IsFloating()) continue; 207 208 int el_boxid; 208 basalelement-> inputs->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);209 basalelement->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum); 209 210 if(el_boxid!=boxid) continue; 210 211 211 Input * overturnings_input=basalelement->GetInput(BasalforcingsPicoSubShelfOceanOverturningEnum); _assert_(overturnings_input);212 213 basalelement-> inputs->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);212 Input2* overturnings_input=basalelement->GetInput2(BasalforcingsPicoSubShelfOceanOverturningEnum); _assert_(overturnings_input); 213 214 basalelement->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum); 214 215 Gauss* gauss=basalelement->NewGauss(1); gauss->GaussPoint(0); 215 216 overturnings_input->GetInputValue(&overturning,gauss); -
issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
r24145 r24335 6 6 #include "../../shared/shared.h" 7 7 #include "../../toolkits/toolkits.h" 8 #include "./../../classes/Inputs2/DatasetInput2.h" 8 9 9 10 void FloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/ … … 102 103 if(!element->IsIceInElement() || !element->IsFloating() || !element->IsOnBase()){ 103 104 IssmDouble* values = xNewZeroInit<IssmDouble>(numvertices); 104 element->AddInput (BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);105 element->AddInput (BasalforcingsIsmip6TfShelfEnum,values,P1Enum);105 element->AddInput2(BasalforcingsFloatingiceMeltingRateEnum,values,P1DGEnum); 106 element->AddInput2(BasalforcingsIsmip6TfShelfEnum,values,P1DGEnum); 106 107 xDelete<IssmDouble>(values); 107 108 continue; … … 109 110 110 111 /*Get TF on all vertices*/ 111 IssmDouble* tf_test = xNew<IssmDouble>(numvertices);112 IssmDouble* depth_vertices = xNew<IssmDouble>(numvertices);113 Input* tf_input = element->GetInput(BasalforcingsIsmip6TfEnum); _assert_(tf_input);112 IssmDouble* tf_test = xNew<IssmDouble>(numvertices); 113 IssmDouble* depth_vertices = xNew<IssmDouble>(numvertices); 114 DatasetInput2* tf_input = element->GetDatasetInput2(BasalforcingsIsmip6TfEnum); _assert_(tf_input); 114 115 115 116 element->GetInputListOnVertices(&depth_vertices[0],BaseEnum); … … 148 149 } 149 150 150 element->AddInput (BasalforcingsIsmip6TfShelfEnum,tf_test,P1Enum);151 element->AddInput2(BasalforcingsIsmip6TfShelfEnum,tf_test,P1DGEnum); 151 152 xDelete<IssmDouble>(tf_test); 152 153 xDelete<IssmDouble>(depth_vertices); … … 161 162 /*Spawn basal element if on base to compute element area*/ 162 163 Element* basalelement = element->SpawnBasalElement(); 163 Input * tf_input=basalelement->GetInput(BasalforcingsIsmip6TfShelfEnum); _assert_(tf_input);164 basalelement-> inputs->GetInputValue(&basinid,BasalforcingsIsmip6BasinIdEnum);164 Input2* tf_input=basalelement->GetInput2(BasalforcingsIsmip6TfShelfEnum); _assert_(tf_input); 165 basalelement->GetInputValue(&basinid,BasalforcingsIsmip6BasinIdEnum); 165 166 Gauss* gauss=basalelement->NewGauss(1); gauss->GaussPoint(0); 166 167 tf_input->GetInputValue(&tf,gauss); -
issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
r23311 r24335 102 102 103 103 /*Get active vector first*/ 104 Vector<IssmDouble> * activevector=NULL;105 IssmPDouble * vector=NULL;106 int 104 Vector<IssmDouble> *activevector = NULL; 105 IssmPDouble *vector = NULL; 106 int size; 107 107 108 108 /*Retrieve some parameters*/ -
issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
r23066 r24335 87 87 /*We go find the input of the first element, and query its interpolation type: */ 88 88 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(0)); 89 Input * input=element->GetInput(name);89 Input2* input=element->GetInput2(name); 90 90 if (!input) _error_("could not find input: " << name); 91 91 -
issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
r18521 r24335 9 9 10 10 void InputDuplicatex(FemModel* femmodel,int original_enum, int new_enum){ 11 /*Go through elemnets, and ask to reinitialie the input: */ 12 for(int i=0;i<femmodel->elements->Size();i++){ 13 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 14 element->InputDuplicate(original_enum,new_enum); 15 } 11 femmodel->inputs2->DuplicateInput(original_enum,new_enum); 16 12 } -
issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
r23648 r24335 6 6 #include "../../shared/shared.h" 7 7 #include "../../toolkits/toolkits.h" 8 #include "../../classes/Inputs2/Inputs2.h" 8 9 9 10 void InputUpdateFromConstantx(FemModel* femmodel,bool constant, int name){ … … 49 50 } 50 51 } 51 void InputUpdateFromConstantx( Elements* elements,IssmDouble constant, int name){52 void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmDouble constant, int name){ 52 53 53 54 if(VerboseModule()) _printf0_(" Input updates from constant\n"); … … 56 57 for(int i=0;i<elements->Size();i++){ 57 58 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 58 element->InputUpdateFromConstant(constant,name); 59 element->SetElementInput(inputs2,name,constant); 60 //element->InputUpdateFromConstant(constant,name); 59 61 } 60 62 } -
issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.h
r16218 r24335 7 7 8 8 #include "../../classes/classes.h" 9 class Inputs2; 9 10 10 11 /* local prototypes: */ … … 12 13 void InputUpdateFromConstantx(FemModel* femmodel,int constant,int name); 13 14 void InputUpdateFromConstantx(FemModel* femmodel,IssmDouble constant,int name); 14 void InputUpdateFromConstantx( Elements* elements,IssmDouble constant,int name);15 void InputUpdateFromConstantx(Inputs2* inputs2,Elements* elements,IssmDouble constant,int name); 15 16 16 17 #endif /* _UPDATEINPUTSFROMCONSTANTXX_H */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
r23867 r24335 9 9 #include "../ModelProcessorx.h" 10 10 11 void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters, Materials* materials, IoModel* iomodel){11 void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel){ 12 12 /*Intermediary*/ 13 13 bool control_analysis; 14 int M,N; 14 15 int control,cost_function,domaintype; 15 16 int num_controls,num_cost_functions; 16 Element *element = NULL; 17 Material *material = NULL; 18 int *control_enums = NULL; 19 char **controls = NULL; 20 char **cost_functions = NULL; 17 IssmDouble yts,scale; 18 Element *element = NULL; 19 Material *material = NULL; 20 int *control_enums = NULL; 21 char **controls = NULL; 22 char **cost_functions = NULL; 23 IssmDouble *independent = NULL; 24 IssmDouble *independents_min = NULL; 25 IssmDouble *independents_max = NULL; 26 IssmDouble *weights = NULL; 27 28 /*Fetch parameters: */ 29 iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol"); 30 if(!control_analysis) return; 21 31 22 32 /*Fetch parameters: */ … … 24 34 iomodel->FindConstant(&isautodiff,"md.autodiff.isautodiff"); 25 35 if(isautodiff){ 26 UpdateElementsAndMaterialsControlAD(elements,parameters, materials,iomodel);36 UpdateElementsAndMaterialsControlAD(elements,parameters,inputs2,materials,iomodel); 27 37 return; 28 38 } 29 39 30 /*Fetch parameters: */31 iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol");32 if(control_analysis) iomodel->FindConstant(&num_controls,"md.inversion.num_control_parameters");33 34 /*Now, return if no control*/35 if(!control_analysis) return;36 37 40 /*Process controls and convert from string to enums*/ 41 iomodel->FindConstant(&num_controls,"md.inversion.num_control_parameters"); 38 42 iomodel->FindConstant(&controls,&num_controls,"md.inversion.control_parameters"); 39 43 if(num_controls<1) _error_("no controls found"); … … 52 56 } 53 57 54 iomodel->FetchData(3,"md.inversion.cost_functions_coefficients","md.inversion.min_parameters","md.inversion.max_parameters"); 55 56 /*Fetch Observations */ 58 /*Fetch Observations and add to inputs*/ 57 59 iomodel->FindConstant(&domaintype,"md.mesh.domain_type"); 60 iomodel->FindConstant(&yts,"md.constants.yts"); 61 iomodel->FetchData(&weights,&M,&N,"md.inversion.cost_functions_coefficients"); 62 63 /*Transpose weights for simplicity!*/ 64 if(M*N && N>1){ 65 IssmDouble* weights_transp = xNew<IssmDouble>(M*N); 66 for(int i=0;i<M;i++) for(int j=0;j<N;j++) weights_transp[j*M+i] = weights[i*N+j]; 67 xDelete<IssmDouble>(weights); 68 weights = weights_transp; 69 } 70 71 if(M!=iomodel->numberofvertices && N!=num_cost_functions) _error_("not supported"); 58 72 for(int i=0;i<num_cost_functions;i++){ 59 73 cost_function=cost_function_enums[i]; 60 if( cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput( elements,"md.inversion.thickness_obs",InversionThicknessObsEnum);61 else if(cost_function==SurfaceAbsMisfitEnum) iomodel->FetchDataToInput( elements,"md.inversion.surface_obs",InversionSurfaceObsEnum);62 else if(cost_function==RheologyBInitialguessMisfitEnum) iomodel->FetchDataToInput( elements,"md.materials.rheology_B",RheologyBInitialguessEnum);74 if( cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.inversion.thickness_obs",InversionThicknessObsEnum); 75 else if(cost_function==SurfaceAbsMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.inversion.surface_obs",InversionSurfaceObsEnum); 76 else if(cost_function==RheologyBInitialguessMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",RheologyBInitialguessEnum); 63 77 else if(cost_function==SurfaceAbsVelMisfitEnum 64 78 || cost_function==SurfaceRelVelMisfitEnum … … 66 80 || cost_function==SurfaceLogVxVyMisfitEnum 67 81 || cost_function==SurfaceAverageVelMisfitEnum){ 68 iomodel->FetchDataToInput(elements,"md.inversion.vx_obs",InversionVxObsEnum); 69 if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.inversion.vy_obs",InversionVyObsEnum); 82 iomodel->FetchDataToInput(inputs2,elements,"md.inversion.vx_obs",InversionVxObsEnum); 83 if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs2,elements,"md.inversion.vy_obs",InversionVyObsEnum); 84 } 85 for(int j=0;j<elements->Size();j++){ 86 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 87 element->DatasetInputAdd(InversionCostFunctionsCoefficientsEnum,&weights[i*iomodel->numberofvertices],inputs2,iomodel,M,1,1,cost_function,7,cost_function); 70 88 } 71 89 } 72 90 parameters->AddObject(new IntParam(ControlInputSizeMEnum,iomodel->numberofvertices)); 91 xDelete<IssmDouble>(weights); 92 93 /*Get controls*/ 94 iomodel->FetchData(&independents_min,&M,&N,"md.inversion.min_parameters"); 95 if(M!=iomodel->numberofvertices && N!=num_controls) _error_("not supported"); 96 iomodel->FetchData(&independents_max,&M,&N,"md.inversion.max_parameters"); 97 if(M!=iomodel->numberofvertices && N!=num_controls) _error_("not supported"); 98 99 /*Transpose weights for simplicity!*/ 100 if(M*N && N>1){ 101 IssmDouble* independents_min_transp = xNew<IssmDouble>(M*N); 102 for(int i=0;i<M;i++) for(int j=0;j<N;j++) independents_min_transp[j*M+i] = independents_min[i*N+j]; 103 xDelete<IssmDouble>(independents_min); 104 independents_min = independents_min_transp; 105 106 IssmDouble* independents_max_transp = xNew<IssmDouble>(M*N); 107 for(int i=0;i<M;i++) for(int j=0;j<N;j++) independents_max_transp[j*M+i] = independents_max[i*N+j]; 108 xDelete<IssmDouble>(independents_max); 109 independents_max = independents_max_transp; 110 } 73 111 74 112 for(int i=0;i<num_controls;i++){ 75 113 control = control_enums[i]; 114 scale = 1.; 115 76 116 switch(control){ 77 117 /*List of supported controls*/ 78 case BalancethicknessThickeningRateEnum: iomodel->FetchData( 1,"md.balancethickness.thickening_rate"); break;79 case BalancethicknessSpcthicknessEnum: iomodel->FetchData( 1,"md.balancethickness.spcthickness"); break;80 case VxEnum: iomodel->FetchData( 1,"md.initialization.vx"); break;81 case VyEnum: iomodel->FetchData( 1,"md.initialization.vy"); break;82 case ThicknessEnum: iomodel->FetchData( 1,"md.geometry.thickness"); break;83 case FrictionCoefficientEnum: iomodel->FetchData( 1,"md.friction.coefficient"); break;84 case FrictionAsEnum: iomodel->FetchData( 1,"md.friction.As"); break;85 case BalancethicknessApparentMassbalanceEnum: iomodel->FetchData( 1,"md.balancethickness.apparent_massbalance"); break;86 case BalancethicknessOmegaEnum: iomodel->FetchData( 1,"md.balancethickness.omega"); break;87 case MaterialsRheologyBEnum: iomodel->FetchData( 1,"md.materials.rheology_B"); break;118 case BalancethicknessThickeningRateEnum: iomodel->FetchData(&independent,&M,&N,"md.balancethickness.thickening_rate");scale = 1./yts; break; 119 case BalancethicknessSpcthicknessEnum: iomodel->FetchData(&independent,&M,&N,"md.balancethickness.spcthickness"); break; 120 case VxEnum: iomodel->FetchData(&independent,&M,&N,"md.initialization.vx");scale = 1./yts; break; 121 case VyEnum: iomodel->FetchData(&independent,&M,&N,"md.initialization.vy");scale = 1./yts; break; 122 case ThicknessEnum: iomodel->FetchData(&independent,&M,&N,"md.geometry.thickness"); break; 123 case FrictionCoefficientEnum: iomodel->FetchData(&independent,&M,&N,"md.friction.coefficient"); break; 124 case FrictionAsEnum: iomodel->FetchData(&independent,&M,&N,"md.friction.As"); break; 125 case BalancethicknessApparentMassbalanceEnum: iomodel->FetchData(&independent,&M,&N,"md.balancethickness.apparent_massbalance"); break; 126 case BalancethicknessOmegaEnum: iomodel->FetchData(&independent,&M,&N,"md.balancethickness.omega"); break; 127 case MaterialsRheologyBEnum: iomodel->FetchData(&independent,&M,&N,"md.materials.rheology_B"); break; 88 128 /*Special cases*/ 89 case MaterialsRheologyBbarEnum: iomodel->FetchData(1,"md.materials.rheology_B"); break;90 case DamageDbarEnum: iomodel->FetchData(1,"md.damage.D"); break;129 case MaterialsRheologyBbarEnum: iomodel->FetchData(&independent,&M,&N,"md.materials.rheology_B"); break; 130 case DamageDbarEnum: iomodel->FetchData(&independent,&M,&N,"md.damage.D"); break; 91 131 default: 92 132 _error_("Control " << EnumToStringx(control) << " not implemented yet"); 93 133 } 94 } 95 96 /*Update elements: */ 97 int counter=0; 98 for(int i=0;i<iomodel->numberofelements;i++){ 99 if(iomodel->my_elements[i]){ 100 element=(Element*)elements->GetObjectByOffset(counter); 101 element->InputUpdateFromIoModel(i,iomodel); //we need i to index into elements. 102 counter++; 103 } 104 } 134 if(M!=iomodel->numberofvertices && N!=1) _error_("not supported yet"); 135 136 /*Special case if 3d*/ 137 if(iomodel->domaintype==Domain3DEnum){ 138 if(control==MaterialsRheologyBbarEnum) control=MaterialsRheologyBEnum; 139 if(control==DamageDbarEnum) control=DamageDEnum; 140 } 141 142 for(int j=0;j<elements->Size();j++){ 143 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 144 element->ControlInputCreate(independent,&independents_min[i*iomodel->numberofvertices],&independents_max[i*iomodel->numberofvertices],inputs2,iomodel,M,N,scale,control,i+1); 145 } 146 xDelete<IssmDouble>(independent); 147 } 148 xDelete<IssmDouble>(independents_min); 149 xDelete<IssmDouble>(independents_max); 150 105 151 106 152 /*Free data: */ … … 126 172 } 127 173 128 iomodel->DeleteData(3,"md.inversion.cost_functions_coefficients","md.inversion.min_parameters","md.inversion.max_parameters");129 174 xDelete<int>(control_enums); 130 175 xDelete<int>(cost_function_enums); … … 134 179 xDelete<char*>(controls); 135 180 } 136 void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters, Materials* materials, IoModel* iomodel){181 void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel){ 137 182 138 183 #if defined(_HAVE_AD_) … … 206 251 for(int j=0;j<elements->Size();j++){ 207 252 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 208 element->ControlInputCreate(independent,independents_min,independents_max,i omodel,M,N,input_enum,i+1);253 element->ControlInputCreate(independent,independents_min,independents_max,inputs2,iomodel,M,N,1.,input_enum,i+1); 209 254 } 210 255 xDelete<IssmDouble>(independent); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateElementsVerticesAndMaterials.cpp
r24066 r24335 48 48 /*Create elements*/ 49 49 if(control_analysis && !adolc_analysis)iomodel->FetchData(2,"md.inversion.min_parameters","md.inversion.max_parameters"); 50 50 if(iomodel->domaintype==Domain2DverticalEnum || iomodel->domaindim==3) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface"); 51 52 int count = 0; 51 53 switch(iomodel->meshelementtype){ 52 54 case TriaEnum: 53 55 for(int i=0;i<iomodel->numberofelements;i++){ 54 if(iomodel->my_elements[i]) elements->AddObject(new Tria(i+1,i,iomodel,nummodels)); 56 if(iomodel->my_elements[i]){ 57 elements->AddObject(new Tria(i+1,i,count,iomodel,nummodels)); 58 count++; 59 } 55 60 } 56 61 break; 57 62 case TetraEnum: 58 63 for(int i=0;i<iomodel->numberofelements;i++){ 59 if(iomodel->my_elements[i]) elements->AddObject(new Tetra(i+1,i,iomodel,nummodels)); 64 if(iomodel->my_elements[i]){ 65 elements->AddObject(new Tetra(i+1,i,count,iomodel,nummodels)); 66 count++; 67 } 60 68 } 61 69 break; … … 63 71 iomodel->FetchData(2,"md.mesh.upperelements","md.mesh.lowerelements"); 64 72 for(int i=0;i<iomodel->numberofelements;i++){ 65 if(iomodel->my_elements[i]) elements->AddObject(new Penta(i+1,i,iomodel,nummodels)); 73 if(iomodel->my_elements[i]){ 74 elements->AddObject(new Penta(i+1,i,count,iomodel,nummodels)); 75 count++; 76 } 66 77 } 67 78 break; … … 71 82 72 83 /*Free data: */ 73 iomodel->DeleteData(4,"md.mesh.upperelements","md.mesh.lowerelements","md.inversion.min_parameters","md.inversion.max_parameters"); 74 }/*}}}*/ 75 void CreateMaterials(Elements* elements,Materials* materials,IoModel* iomodel,const int nummodels){/*{{{*/ 84 iomodel->DeleteData(6,"md.mesh.upperelements","md.mesh.lowerelements","md.inversion.min_parameters","md.inversion.max_parameters","md.mesh.vertexonbase","md.mesh.vertexonsurface"); 85 86 }/*}}}*/ 87 void CreateMaterials(Elements* elements,Inputs2* inputs2,Materials* materials,IoModel* iomodel,const int nummodels){/*{{{*/ 76 88 77 89 /*Intermediary*/ … … 84 96 iomodel->FindConstant(&materials_type,"md.materials.type"); 85 97 86 /*Did we already create the materia as? : */98 /*Did we already create the materials? : */ 87 99 _assert_(materials->Size()==0); 88 100 … … 90 102 switch(materials_type){ 91 103 case MaticeEnum: 92 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);93 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);104 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 105 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 94 106 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 95 107 switch(iomodel->domaindim){ 96 108 case 2: 97 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);109 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 98 110 break; 99 111 case 3: … … 104 116 break; 105 117 case MatenhancediceEnum: 106 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);107 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);108 iomodel->FetchDataToInput( elements,"md.materials.rheology_E",MaterialsRheologyEEnum);118 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 119 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 120 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum); 109 121 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 110 122 switch(iomodel->domaindim){ 111 123 case 2: 112 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);113 elements->InputDuplicate(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);124 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 125 inputs2->DuplicateInput(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum); 114 126 break; 115 127 case 3: … … 120 132 break; 121 133 case MatdamageiceEnum: 122 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);123 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);124 iomodel->FetchDataToInput( elements,"md.damage.D",DamageDEnum);134 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 135 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 136 iomodel->FetchDataToInput(inputs2,elements,"md.damage.D",DamageDEnum); 125 137 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 126 138 switch(iomodel->domaindim){ 127 139 case 2: 128 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);129 elements->InputDuplicate(DamageDEnum,DamageDbarEnum);140 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 141 inputs2->DuplicateInput(DamageDEnum,DamageDbarEnum); 130 142 break; 131 143 case 3: … … 136 148 break; 137 149 case MatestarEnum: 138 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);139 iomodel->FetchDataToInput( elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);140 iomodel->FetchDataToInput( elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);150 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 151 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum); 152 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum); 141 153 for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel)); 142 154 switch(iomodel->domaindim){ 143 155 case 2: 144 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);145 elements->InputDuplicate(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);146 elements->InputDuplicate(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);156 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 157 inputs2->DuplicateInput(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum); 158 inputs2->DuplicateInput(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum); 147 159 break; 148 160 case 3: … … 170 182 switch(IoCodeToEnumMaterials(nature[i])){ //{{{ 171 183 case MaticeEnum: 172 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);173 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);184 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 185 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 174 186 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 175 187 switch(iomodel->domaindim){ 176 188 case 2: 177 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);189 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 178 190 break; 179 191 case 3: … … 190 202 191 203 case MatenhancediceEnum: 192 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);193 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);194 iomodel->FetchDataToInput( elements,"md.materials.rheology_E",MaterialsRheologyEEnum);204 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 205 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 206 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_E",MaterialsRheologyEEnum); 195 207 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 196 208 switch(iomodel->domaindim){ 197 209 case 2: 198 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);199 elements->InputDuplicate(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum);210 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 211 inputs2->DuplicateInput(MaterialsRheologyEEnum,MaterialsRheologyEbarEnum); 200 212 break; 201 213 case 3: … … 206 218 break; 207 219 case MatdamageiceEnum: 208 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);209 iomodel->FetchDataToInput( elements,"md.materials.rheology_n",MaterialsRheologyNEnum);210 iomodel->FetchDataToInput( elements,"md.damage.D",DamageDEnum);220 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 221 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_n",MaterialsRheologyNEnum); 222 iomodel->FetchDataToInput(inputs2,elements,"md.damage.D",DamageDEnum); 211 223 for (i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matice(i+1,i,iomodel)); 212 224 switch(iomodel->domaindim){ 213 225 case 2: 214 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);215 elements->InputDuplicate(DamageDEnum,DamageDbarEnum);226 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 227 inputs2->DuplicateInput(DamageDEnum,DamageDbarEnum); 216 228 break; 217 229 case 3: … … 222 234 break; 223 235 case MatestarEnum: 224 iomodel->FetchDataToInput( elements,"md.materials.rheology_B",MaterialsRheologyBEnum);225 iomodel->FetchDataToInput( elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum);226 iomodel->FetchDataToInput( elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum);236 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_B",MaterialsRheologyBEnum); 237 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Ec",MaterialsRheologyEcEnum); 238 iomodel->FetchDataToInput(inputs2,elements,"md.materials.rheology_Es",MaterialsRheologyEsEnum); 227 239 for(i=0;i<iomodel->numberofelements;i++) if(iomodel->my_elements[i]) materials->AddObject(new Matestar(i+1,i,iomodel)); 228 240 switch(iomodel->domaindim){ 229 241 case 2: 230 elements->InputDuplicate(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum);231 elements->InputDuplicate(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum);232 elements->InputDuplicate(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum);242 inputs2->DuplicateInput(MaterialsRheologyBEnum,MaterialsRheologyBbarEnum); 243 inputs2->DuplicateInput(MaterialsRheologyEcEnum,MaterialsRheologyEcbarEnum); 244 inputs2->DuplicateInput(MaterialsRheologyEsEnum,MaterialsRheologyEsbarEnum); 233 245 break; 234 246 case 3: … … 405 417 iomodel->FetchData(6,"md.mesh.x","md.mesh.y","md.mesh.z","md.geometry.base","md.geometry.thickness","md.mask.ice_levelset"); 406 418 if (iomodel->domaintype == Domain3DsurfaceEnum) iomodel->FetchData(3,"md.mesh.lat","md.mesh.long","md.mesh.r"); 407 else iomodel->FetchDataToInput(elements,"md.mesh.scale_factor",MeshScaleFactorEnum,1.);408 419 if (isoceancoupling) iomodel->FetchData(2,"md.mesh.lat","md.mesh.long"); 409 420 … … 453 464 454 465 /*Finalize Initialization*/ 455 vertices->Finalize( );456 }/*}}}*/ 466 vertices->Finalize(iomodel); 467 }/*}}}*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
r24205 r24335 8 8 #include "./ModelProcessorx.h" 9 9 10 void CreateOutputDefinitions(Elements* elements, Parameters* parameters,IoModel* iomodel){10 void CreateOutputDefinitions(Elements* elements,Parameters* parameters,Inputs2* inputs2,IoModel* iomodel){ 11 11 12 12 int i,j; … … 120 120 for(int k=0;k<elements->Size();k++){ 121 121 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k)); 122 element->InputCreate(misfit_observation_s[j], 123 element->InputCreate(misfit_weights_s[j], 122 element->InputCreate(misfit_observation_s[j],inputs2,iomodel,misfit_observation_M_s[j],misfit_observation_N_s[j],obs_vector_type,StringToEnumx(misfit_observation_string_s[j]),7); 123 element->InputCreate(misfit_weights_s[j],inputs2,iomodel,misfit_weights_M_s[j],misfit_weights_N_s[j],weight_vector_type,StringToEnumx(misfit_weights_string_s[j]),7); 124 124 } 125 125 … … 130 130 char* string=NULL; 131 131 IssmDouble* matrix = NULL; 132 133 132 string = misfit_definitionstring_s[j]; xDelete<char>(string); 134 133 string = misfit_observation_string_s[j]; xDelete<char>(string); … … 210 209 /*Now, for this particular cfsurfacesquare object, make sure we plug into the elements: the observation, and the weights.*/ 211 210 for(int k=0;k<elements->Size();k++){ 212 213 211 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k)); 214 215 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j], iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),7,SurfaceObservationEnum); 216 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j], iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),7,WeightsSurfaceObservationEnum); 212 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_observation_s[j],inputs2,iomodel,cfsurfacesquare_observation_M_s[j],cfsurfacesquare_observation_N_s[j],obs_vector_type,StringToEnumx(cfsurfacesquare_observation_string_s[j]),7,SurfaceObservationEnum); 213 element->DatasetInputAdd(StringToEnumx(cfsurfacesquare_definitionstring_s[j]),cfsurfacesquare_weights_s[j],inputs2,iomodel,cfsurfacesquare_weights_M_s[j],cfsurfacesquare_weights_N_s[j],weight_vector_type,StringToEnumx(cfsurfacesquare_weights_string_s[j]),7,WeightsSurfaceObservationEnum); 217 214 218 215 } … … 285 282 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k)); 286 283 287 element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j], 284 element->DatasetInputAdd(StringToEnumx(cfdragcoeffabsgrad_definitionstring_s[j]),cfdragcoeffabsgrad_weights_s[j],inputs2,iomodel,cfdragcoeffabsgrad_weights_M_s[j],cfdragcoeffabsgrad_weights_N_s[j],weight_vector_type,StringToEnumx(cfdragcoeffabsgrad_weights_string_s[j]),7,WeightsSurfaceObservationEnum); 288 285 289 286 } … … 368 365 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k)); 369 366 370 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j], 371 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j], 372 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j], 367 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vxobs[j],inputs2,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vxobs_string[j]),7,VxObsEnum); 368 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_vyobs[j],inputs2,iomodel,cfsurfacelogvel_observation_M[j],cfsurfacelogvel_observation_N[j],obs_vector_type,StringToEnumx(cfsurfacelogvel_vyobs_string[j]),7,VyObsEnum); 369 element->DatasetInputAdd(StringToEnumx(cfsurfacelogvel_definitionstring[j]),cfsurfacelogvel_weights[j],inputs2,iomodel,cfsurfacelogvel_weights_M[j],cfsurfacelogvel_weights_N[j],weight_vector_type,StringToEnumx(cfsurfacelogvel_weightstring[j]),7,WeightsSurfaceObservationEnum); 373 370 374 371 } … … 594 591 for(int i=0;i<num_cost_functions;i++){ 595 592 cost_function=cost_function_enums[i]; 596 if( cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput( elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum);597 else if(cost_function==SurfaceAbsMisfitEnum) iomodel->FetchDataToInput( elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum);593 if( cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum); 594 else if(cost_function==SurfaceAbsMisfitEnum) iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum); 598 595 else if(cost_function==SurfaceAbsVelMisfitEnum 599 596 || cost_function==SurfaceRelVelMisfitEnum … … 601 598 || cost_function==SurfaceLogVxVyMisfitEnum 602 599 || cost_function==SurfaceAverageVelMisfitEnum){ 603 iomodel->FetchDataToInput( elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum);604 if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput( elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum);600 iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum); 601 if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(inputs2,elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum); 605 602 } 606 603 } … … 611 608 for(int k=0;k<elements->Size();k++){ 612 609 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(k)); 613 element->DatasetInputCreate(cost_functions_weights[j],cost_functions_weights_M[j],cost_functions_weights_N[j],cost_function_enums,num_cost_functions,i omodel,InversionCostFunctionsCoefficientsEnum);610 element->DatasetInputCreate(cost_functions_weights[j],cost_functions_weights_M[j],cost_functions_weights_N[j],cost_function_enums,num_cost_functions,inputs2,iomodel,InversionCostFunctionsCoefficientsEnum); 614 611 } 615 612 output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_cost_functions,cost_function_enums)); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/UpdateElementsAndMaterialsDakota.cpp
r20696 r24335 9 9 #include "../ModelProcessorx.h" 10 10 11 void UpdateElementsAndMaterialsDakota(Elements* elements, Materials* materials, IoModel* iomodel){11 void UpdateElementsAndMaterialsDakota(Elements* elements,Inputs2* inputs2,Materials* materials, IoModel* iomodel){ 12 12 13 13 /*recover parameters: */ … … 15 15 iomodel->FindConstant(&dakota_analysis,"md.qmu.isdakota"); 16 16 17 if(dakota_analysis) iomodel->FetchDataToInput( elements,"md.geometry.hydrostatic_ratio",GeometryHydrostaticRatioEnum,0.);17 if(dakota_analysis) iomodel->FetchDataToInput(inputs2,elements,"md.geometry.hydrostatic_ratio",GeometryHydrostaticRatioEnum,0.); 18 18 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.cpp
r23582 r24335 13 13 #include "./ModelProcessorx.h" 14 14 15 void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,I oModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_enum_list){15 void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,Inputs2** pinputs2,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_enum,const int nummodels,const int* analysis_enum_list){ 16 16 _assert_(nummodels>0); 17 17 … … 40 40 /*Create elements, vertices and materials, independent of analysis_enum: */ 41 41 CreateElements(elements,iomodel,nummodels); 42 CreateMaterials(elements,materials,iomodel,nummodels);43 42 CreateVertices(elements,vertices,iomodel,solution_enum); 44 43 CreateParameters(parameters,iomodel,rootpath,toolkitfile,solution_enum); 44 45 /*Should move to CreateInputs2*/ 46 Inputs2 *inputs2 = new Inputs2(elements->Size(),vertices->Size()); 47 if (iomodel->domaintype != Domain3DsurfaceEnum) iomodel->FetchDataToInput(inputs2,elements,"md.mesh.scale_factor",MeshScaleFactorEnum,1.); 48 49 /*Can now do Materials since we have created Inputs*/ 50 CreateMaterials(elements,inputs2,materials,iomodel,nummodels); 45 51 46 52 /*Update datasets based on each analysis (and add nodes, constrains and loads)*/ … … 54 60 analysis->UpdateParameters(parameters,iomodel,solution_enum,analysis_enum); 55 61 analysis->CreateNodes(nodes[i],iomodel); 56 analysis->UpdateElements(elements,i omodel,i,analysis_enum);62 analysis->UpdateElements(elements,inputs2,iomodel,i,analysis_enum); 57 63 analysis->CreateConstraints(constraints[i],iomodel); 58 64 analysis->CreateLoads(loads[i],iomodel); … … 67 73 /*Solution specific updates*/ 68 74 if(VerboseMProcessor()) _printf0_(" updating elements and materials for control parameters" << "\n"); 69 UpdateElementsAndMaterialsControl(elements,parameters, materials,iomodel);75 UpdateElementsAndMaterialsControl(elements,parameters,inputs2,materials,iomodel); 70 76 #ifdef _HAVE_DAKOTA_ 71 77 if(VerboseMProcessor()) _printf0_(" updating elements and materials for uncertainty quantification" << "\n"); 72 UpdateElementsAndMaterialsDakota(elements, materials,iomodel);78 UpdateElementsAndMaterialsDakota(elements,inputs2,materials,iomodel); 73 79 #endif 74 if(solution_enum==TransientSolutionEnum) UpdateElementsTransient(elements,parameters,i omodel);80 if(solution_enum==TransientSolutionEnum) UpdateElementsTransient(elements,parameters,inputs2,iomodel); 75 81 76 82 /*Output definitions dataset: */ 77 83 if(VerboseMProcessor()) _printf0_(" creating output definitions" << "\n"); 78 CreateOutputDefinitions(elements,parameters,i omodel);84 CreateOutputDefinitions(elements,parameters,inputs2,iomodel); 79 85 80 86 /* Sort datasets: … … 94 100 *ploads = loads; 95 101 *pparameters = parameters; 102 *pinputs2 = inputs2; 96 103 97 104 if(VerboseMProcessor()) _printf0_(" done with model processor \n"); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r23585 r24335 9 9 #include "../../analyses/analyses.h" 10 10 11 void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,I oModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh);11 void ModelProcessorx(Elements** pelements, Nodes*** pnodes, Vertices** pvertices, Materials** pmaterials, Constraints*** pconstraints, Loads*** ploads, Parameters** pparameters,Inputs2** pinputs2,IoModel* iomodel,FILE* toolkitfile, char* rootpath,const int solution_type,const int nummodels,const int* analysis_type_listh); 12 12 13 13 /*Creation of fem datasets: general drivers*/ 14 14 void CreateElements(Elements* elements,IoModel* iomodel,int nummodels); 15 void CreateMaterials(Elements* elements, Materials* materials,IoModel* iomodel,int nummodels);15 void CreateMaterials(Elements* elements,Inputs2* inputs2,Materials* materials,IoModel* iomodel,int nummodels); 16 16 void CreateVertices(Elements* elements,Vertices* vertices,IoModel* iomodel,int solution_type,bool isamr=false); 17 17 void CreateParameters(Parameters*parameters,IoModel* iomodel,char* rootpath,FILE* toolkitfile,const int solution_type); … … 19 19 void CreateParametersControl(Parameters* parameters,IoModel* iomodel,int solution_type); 20 20 void CreateParametersDakota(Parameters* parameters,IoModel* iomodel,char* rootpath); 21 void CreateOutputDefinitions(Elements* elements, Parameters* parameters,I oModel* iomodel);22 void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters, Materials* materials, IoModel* iomodel);23 void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters, Materials* materials, IoModel* iomodel);24 void UpdateElementsAndMaterialsDakota(Elements* elements, Materials* materials, IoModel* iomodel);25 void UpdateElementsTransient(Elements* elements,Parameters* parameters,I oModel* iomodel);21 void CreateOutputDefinitions(Elements* elements, Parameters* parameters,Inputs2* inputs2,IoModel* iomodel); 22 void UpdateElementsAndMaterialsControl(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel); 23 void UpdateElementsAndMaterialsControlAD(Elements* elements,Parameters* parameters,Inputs2* inputs2,Materials* materials, IoModel* iomodel); 24 void UpdateElementsAndMaterialsDakota(Elements* elements,Inputs2* inputs2,Materials* materials, IoModel* iomodel); 25 void UpdateElementsTransient(Elements* elements,Parameters* parameters,Inputs2* inputs2,IoModel* iomodel); 26 26 void CreateNodes(Nodes*nodes, IoModel* iomodel,int analysis,int finite_element,bool isamr=false,int approximation=NoneApproximationEnum,int* approximations=NULL); 27 27 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Transient/UpdateElementsTransient.cpp
r23399 r24335 9 9 #include "../ModelProcessorx.h" 10 10 11 void UpdateElementsTransient(Elements* elements, Parameters* parameters,I oModel* iomodel){11 void UpdateElementsTransient(Elements* elements, Parameters* parameters,Inputs2* inputs2,IoModel* iomodel){ 12 12 13 13 /*FIXME: this should go into parameterization update*/ … … 17 17 18 18 if(isgroundingline){ 19 iomodel->FetchDataToInput( elements,"md.geometry.bed",BedEnum);19 iomodel->FetchDataToInput(inputs2,elements,"md.geometry.bed",BedEnum); 20 20 } 21 21 } -
issm/trunk-jpl/src/c/modules/RheologyBAbsGradientx/RheologyBAbsGradientx.cpp
r23867 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void RheologyBAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 53 54 54 55 /*Retrieve all inputs we will be needing: */ 55 Input* weights_input=element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);56 Input * rheologyb_input=element->GetInput(MaterialsRheologyBEnum); _assert_(rheologyb_input);56 DatasetInput2* weights_input=element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 57 Input2* rheologyb_input=element->GetInput2(MaterialsRheologyBEnum); _assert_(rheologyb_input); 57 58 58 59 /* Start looping on the number of gaussian points: */ … … 124 125 125 126 /*Retrieve all inputs we will be needing: */ 126 Input* weights_input=element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);127 Input * rheologyb_input=element->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);128 Input * rheologyb0_input=element->GetInput(RheologyBInitialguessEnum); _assert_(rheologyb0_input);127 DatasetInput2* weights_input=element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 128 Input2* rheologyb_input=element->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input); 129 Input2* rheologyb0_input=element->GetInput2(RheologyBInitialguessEnum); _assert_(rheologyb0_input); 129 130 130 131 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
r18521 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void RheologyBbarAbsGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 59 60 60 61 /*Retrieve all inputs we will be needing: */ 61 Input* weights_input=basalelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);62 Input * rheologyb_input=basalelement->GetInput(MaterialsRheologyBbarEnum); _assert_(rheologyb_input);62 DatasetInput2* weights_input=basalelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 63 Input2* rheologyb_input=basalelement->GetInput2(MaterialsRheologyBbarEnum); _assert_(rheologyb_input); 63 64 64 65 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp
r23636 r24335 27 27 case TaylorHoodEnum:case XTaylorHoodEnum:case LATaylorHoodEnum: 28 28 case CrouzeixRaviartEnum:case LACrouzeixRaviartEnum:case OneLayerP4zEnum:{ 29 Input * input=element->GetInput(IceMaskNodeActivationEnum);29 Input2* input=element->GetInput2(IceMaskNodeActivationEnum); 30 30 if(!input) _error_("Input " << EnumToStringx(IceMaskNodeActivationEnum) << " not found in element"); 31 31 -
issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
r22438 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void SurfaceAbsVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 59 60 60 61 /*Retrieve all inputs we will be needing: */ 61 Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);62 Input * vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);63 Input * vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);64 Input * vy_input = NULL;65 Input * vyobs_input = NULL;62 DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 63 Input2* vx_input =topelement->GetInput2(VxEnum); _assert_(vx_input); 64 Input2* vxobs_input =topelement->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 65 Input2* vy_input = NULL; 66 Input2* vyobs_input = NULL; 66 67 if(numcomponents==2){ 67 vy_input =topelement->GetInput (VyEnum); _assert_(vy_input);68 vyobs_input =topelement->GetInput (InversionVyObsEnum); _assert_(vyobs_input);68 vy_input =topelement->GetInput2(VyEnum); _assert_(vy_input); 69 vyobs_input =topelement->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 69 70 } 70 71 -
issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
r18521 r24335 8 8 #include "../../toolkits/toolkits.h" 9 9 #include "../SurfaceAreax/SurfaceAreax.h" 10 #include "../../classes/Inputs2/DatasetInput2.h" 10 11 11 12 void SurfaceAverageVelMisfitx(IssmDouble* pJ,FemModel* femmodel){ … … 67 68 /*Retrieve all inputs we will be needing: */ 68 69 topelement->GetInputValue(&S,SurfaceAreaEnum); 69 Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);70 Input * vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);71 Input * vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);72 Input * vy_input = NULL;73 Input * vyobs_input = NULL;70 DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 71 Input2* vx_input =topelement->GetInput2(VxEnum); _assert_(vx_input); 72 Input2* vxobs_input =topelement->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 73 Input2* vy_input = NULL; 74 Input2* vyobs_input = NULL; 74 75 if(numcomponents==2){ 75 vy_input =topelement->GetInput (VyEnum); _assert_(vy_input);76 vyobs_input =topelement->GetInput (InversionVyObsEnum); _assert_(vyobs_input);76 vy_input =topelement->GetInput2(VyEnum); _assert_(vy_input); 77 vyobs_input =topelement->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 77 78 } 78 79 -
issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
r22438 r24335 4 4 5 5 #include "./SurfaceLogVelMisfitx.h" 6 7 6 #include "../../shared/shared.h" 8 7 #include "../../toolkits/toolkits.h" 8 #include "../../classes/Inputs2/DatasetInput2.h" 9 9 10 10 void SurfaceLogVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 62 62 63 63 /*Retrieve all inputs we will be needing: */ 64 Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);65 Input * vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);66 Input * vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);67 Input * vy_input = NULL;68 Input * vyobs_input = NULL;64 DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 65 Input2* vx_input =topelement->GetInput2(VxEnum); _assert_(vx_input); 66 Input2* vxobs_input =topelement->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 67 Input2* vy_input = NULL; 68 Input2* vyobs_input = NULL; 69 69 if(numcomponents==2){ 70 vy_input =topelement->GetInput (VyEnum); _assert_(vy_input);71 vyobs_input =topelement->GetInput (InversionVyObsEnum); _assert_(vyobs_input);70 vy_input =topelement->GetInput2(VyEnum); _assert_(vy_input); 71 vyobs_input =topelement->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 72 72 } 73 73 -
issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
r18521 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void SurfaceLogVxVyMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 61 62 62 63 /*Retrieve all inputs we will be needing: */ 63 Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);64 Input * vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);65 Input * vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);66 Input * vy_input = NULL;67 Input * vyobs_input = NULL;64 DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 65 Input2* vx_input =topelement->GetInput2(VxEnum); _assert_(vx_input); 66 Input2* vxobs_input =topelement->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 67 Input2* vy_input = NULL; 68 Input2* vyobs_input = NULL; 68 69 if(numcomponents==2){ 69 vy_input =topelement->GetInput (VyEnum); _assert_(vy_input);70 vyobs_input =topelement->GetInput (InversionVyObsEnum); _assert_(vyobs_input);70 vy_input =topelement->GetInput2(VyEnum); _assert_(vy_input); 71 vyobs_input =topelement->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 71 72 } 72 73 -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r23819 r24335 7 7 #include "../../toolkits/toolkits.h" 8 8 #include "../modules.h" 9 #include "../../classes/Inputs2/TransientInput2.h" 9 10 10 11 void SmbForcingx(FemModel* femmodel){/*{{{*/ … … 13 14 // INPUT parameters: ni: working size of arrays 14 15 // OUTPUT: mass-balance (m/yr ice): agd(NA) 15 bool isclimatology =false;16 bool isclimatology; 16 17 femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum); 17 18 18 19 if (isclimatology){ 19 int v; 20 IssmDouble time,dt,delta,starttime,finaltime; 21 int offsetend=-1; 22 IssmDouble time0, timeend, timeclim; 23 20 21 /*Get time parameters*/ 22 IssmDouble time,dt,starttime,finaltime; 24 23 femmodel->parameters->FindParam(&time,TimeEnum); 25 24 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); … … 27 26 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 28 27 29 if (time<=starttime+dt){ 28 if(time<=starttime+dt){ 29 /*FIXME: this is wrong, should be done at the ElementUpdate step of analysis, not here!*/ 30 30 InputDuplicatex(femmodel,SmbMassBalanceEnum,SmbMassBalanceClimateEnum); 31 femmodel->inputs2->DeleteInput(SmbMassBalanceEnum); 32 } 33 34 /*If this is a climatology, we need to repeat the forcing after the final time*/ 35 TransientInput2* smb_input=femmodel->inputs2->GetTransientInput(SmbMassBalanceClimateEnum); _assert_(smb_input); 36 37 /*Get accumulation climatology value*/ 38 int offsetend = smb_input->GetTimeInputOffset(finaltime); 39 IssmDouble time0 = smb_input->GetTimeByOffset(-1); 40 IssmDouble timeend = smb_input->GetTimeByOffset(offsetend); 41 42 _assert_(timeend>time0); 43 IssmDouble timeclim = time; 44 45 if(time>time0 && timeend>time0){ 46 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 47 if(delta==0.){ 48 timeclim=timeend; 49 } 50 else{ 51 timeclim=time0+delta; 52 } 31 53 } 32 54 … … 37 59 int numvertices = element->GetNumberOfVertices(); 38 60 IssmDouble* smb = xNew<IssmDouble>(numvertices); 39 40 /*Recover Smb*/41 //If this is a climatology, we need to repeat the forcing after the final time42 Input* smb_input=element->GetInput(SmbMassBalanceClimateEnum); _assert_(smb_input);43 44 //Get accumulation climatology value45 offsetend=dynamic_cast<TransientInput*>(smb_input)->GetTimeInputOffset(finaltime);46 time0=dynamic_cast<TransientInput*>(smb_input)->GetTimeByOffset(-1);47 timeend=dynamic_cast<TransientInput*>(smb_input)->GetTimeByOffset(offsetend);48 timeclim=time;49 if (time>time0 & timeend>time0){50 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0)));51 if (delta==0){ timeclim=timeend;}52 else{ timeclim=time0+delta;}53 }54 55 61 element->GetInputListOnVerticesAtTime(smb,SmbMassBalanceClimateEnum,timeclim); 56 62 57 63 /*Add input to element and Free memory*/ 58 element->AddInput (SmbMassBalanceEnum,smb,P1Enum);64 element->AddInput2(SmbMassBalanceEnum,smb,P1Enum); 59 65 xDelete<IssmDouble>(smb); 60 66 } … … 115 121 116 122 /*Add input to element and Free memory*/ 117 element->AddInput (SmbMassBalanceEnum,smb,P1Enum);123 element->AddInput2(SmbMassBalanceEnum,smb,P1Enum); 118 124 xDelete<IssmDouble>(Href); 119 125 xDelete<IssmDouble>(Smbref); … … 179 185 180 186 /*Add input to element and Free memory*/ 181 element->AddInput (SmbMassBalanceEnum,smb,P1Enum);187 element->AddInput2(SmbMassBalanceEnum,smb,P1Enum); 182 188 xDelete<IssmDouble>(ela); 183 189 xDelete<IssmDouble>(b_pos); … … 389 395 390 396 /*Add input to element and Free memory*/ 391 element->AddInput (SmbMassBalanceEnum,smblist,P1Enum);397 element->AddInput2(SmbMassBalanceEnum,smblist,P1Enum); 392 398 xDelete<IssmDouble>(surfacelist); 393 399 xDelete<IssmDouble>(smblistref); … … 404 410 // surface runoff (m/yr water equivalent): runoff 405 411 // OUTPUT: mass-balance (m/yr ice): agd(NA) 406 int v; 407 bool isclimatology=false; 408 IssmDouble time,delta,starttime,finaltime; 409 int offsetend=-1; 410 IssmDouble time0, timeend, timeclim; 411 412 bool isclimatology; 412 413 femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum); 413 femmodel->parameters->FindParam(&time,TimeEnum);414 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);415 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);416 414 417 415 /*Loop over all the elements of this partition*/ … … 427 425 428 426 /*Recover Smb Components*/ 429 if (isclimatology){ 427 if(isclimatology){ 428 429 int offsetend; 430 IssmDouble time0,timeend,timeclim; 431 IssmDouble time,starttime,finaltime; 432 433 /*Get time parameters*/ 434 femmodel->parameters->FindParam(&time,TimeEnum); 435 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 436 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 430 437 431 438 //If this is a climatology, we need to repeat the forcing after the final time 432 Input* acc_input=element->GetInput(SmbAccumulationEnum); _assert_(acc_input);433 Input* evap_input=element->GetInput(SmbEvaporationEnum);_assert_(evap_input);434 Input* runoff_input=element->GetInput(SmbRunoffEnum);_assert_(runoff_input);439 TransientInput2* acc_input = element->inputs2->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input); 440 TransientInput2* evap_input = element->inputs2->GetTransientInput(SmbEvaporationEnum); _assert_(evap_input); 441 TransientInput2* runoff_input = element->inputs2->GetTransientInput(SmbRunoffEnum); _assert_(runoff_input); 435 442 436 443 //Get accumulation climatology value 437 offsetend=dynamic_cast<TransientInput*>(acc_input)->GetTimeInputOffset(finaltime); 438 time0=dynamic_cast<TransientInput*>(acc_input)->GetTimeByOffset(-1); 439 timeend=dynamic_cast<TransientInput*>(acc_input)->GetTimeByOffset(offsetend); 440 timeclim=time; 441 if (time>time0 & timeend>time0){ 442 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 443 if (delta==0){ timeclim=timeend;} 444 else{ timeclim=time0+delta;} 445 } 446 444 offsetend = acc_input->GetTimeInputOffset(finaltime); 445 time0 = acc_input->GetTimeByOffset(-1); 446 timeend = acc_input->GetTimeByOffset(offsetend); 447 timeclim = time; 448 if(time>time0 & timeend>time0){ 449 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 450 if(delta==0.) 451 timeclim=timeend; 452 else 453 timeclim=time0+delta; 454 } 447 455 element->GetInputListOnVerticesAtTime(acc,SmbAccumulationEnum,timeclim); 448 456 449 457 //Get evaporation climatology value 450 offsetend=dynamic_cast<TransientInput*>(evap_input)->GetTimeInputOffset(finaltime); 451 time0=dynamic_cast<TransientInput*>(evap_input)->GetTimeByOffset(-1); 452 timeend=dynamic_cast<TransientInput*>(evap_input)->GetTimeByOffset(offsetend); 453 timeclim=time; 454 if (time>time0 & timeend>time0){ 455 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 456 if (delta==0){ timeclim=timeend;} 457 else{ timeclim=time0+delta;} 458 } 459 458 offsetend = evap_input->GetTimeInputOffset(finaltime); 459 time0 = evap_input->GetTimeByOffset(-1); 460 timeend = evap_input->GetTimeByOffset(offsetend); 461 timeclim = time; 462 if(time>time0 & timeend>time0){ 463 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 464 if(delta==0.) 465 timeclim=timeend; 466 else 467 timeclim=time0+delta; 468 } 460 469 element->GetInputListOnVerticesAtTime(evap,SmbEvaporationEnum,timeclim); 461 470 462 471 //Get runoff climatology value 463 offsetend=dynamic_cast<TransientInput*>(runoff_input)->GetTimeInputOffset(finaltime); 464 time0=dynamic_cast<TransientInput*>(runoff_input)->GetTimeByOffset(-1); 465 timeend=dynamic_cast<TransientInput*>(runoff_input)->GetTimeByOffset(offsetend); 466 timeclim=time; 467 if (time>time0 & timeend>time0){ 468 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 469 if (delta==0){ timeclim=timeend;} 470 else{ timeclim=time0+delta;} 471 } 472 472 offsetend = runoff_input->GetTimeInputOffset(finaltime); 473 time0 = runoff_input->GetTimeByOffset(-1); 474 timeend = runoff_input->GetTimeByOffset(offsetend); 475 timeclim = time; 476 if(time>time0 & timeend>time0){ 477 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 478 if(delta==0.) 479 timeclim=timeend; 480 else 481 timeclim=time0+delta; 482 } 473 483 element->GetInputListOnVerticesAtTime(runoff,SmbRunoffEnum,timeclim); 474 484 } … … 480 490 481 491 // loop over all vertices 482 for(v=0;v<numvertices;v++){ 483 smb[v]=acc[v]-evap[v]-runoff[v]; 484 } //end of the loop over the vertices 492 for(int v=0;v<numvertices;v++) smb[v]=acc[v]-evap[v]-runoff[v]; 485 493 486 494 /*Add input to element and Free memory*/ 487 element->AddInput (SmbMassBalanceEnum,smb,P1Enum);495 element->AddInput2(SmbMassBalanceEnum,smb,P1Enum); 488 496 xDelete<IssmDouble>(acc); 489 497 xDelete<IssmDouble>(evap); … … 502 510 // refreeze of surface melt (m/yr water equivalent): refreeze 503 511 // OUTPUT: mass-balance (m/yr ice): agd(NA) 504 int v; 505 bool isclimatology=false; 506 IssmDouble time,delta,starttime,finaltime; 507 int offsetend=-1; 508 IssmDouble time0, timeend, timeclim; 509 512 bool isclimatology; 510 513 femmodel->parameters->FindParam(&isclimatology,SmbIsclimatologyEnum); 511 femmodel->parameters->FindParam(&time,TimeEnum);512 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);513 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);514 514 515 515 /*Loop over all the elements of this partition*/ … … 528 528 if (isclimatology){ 529 529 530 int offsetend; 531 IssmDouble time0,timeend,timeclim; 532 IssmDouble time,starttime,finaltime; 533 femmodel->parameters->FindParam(&time,TimeEnum); 534 femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum); 535 femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum); 536 537 530 538 //If this is a climatology, we need to repeat the forcing after the final time 531 Input* acc_input=element->GetInput(SmbAccumulationEnum); _assert_(acc_input);532 Input* evap_input=element->GetInput(SmbEvaporationEnum);_assert_(evap_input);533 Input* melt_input=element->GetInput(SmbMeltEnum);_assert_(melt_input);534 Input* refreeze_input=element->GetInput(SmbRefreezeEnum);_assert_(refreeze_input);539 TransientInput2* acc_input = element->inputs2->GetTransientInput(SmbAccumulationEnum); _assert_(acc_input); 540 TransientInput2* evap_input = element->inputs2->GetTransientInput(SmbEvaporationEnum); _assert_(evap_input); 541 TransientInput2* melt_input = element->inputs2->GetTransientInput(SmbMeltEnum); _assert_(melt_input); 542 TransientInput2* refreeze_input = element->inputs2->GetTransientInput(SmbRefreezeEnum); _assert_(refreeze_input); 535 543 536 544 //Get accumulation climatology value 537 offsetend=dynamic_cast<TransientInput*>(acc_input)->GetTimeInputOffset(finaltime); 538 time0=dynamic_cast<TransientInput*>(acc_input)->GetTimeByOffset(-1); 539 timeend=dynamic_cast<TransientInput*>(acc_input)->GetTimeByOffset(offsetend); 540 timeclim=time; 541 if (time>time0 & timeend>time0){ 542 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 543 if (delta==0){ timeclim=timeend;} 544 else{ timeclim=time0+delta;} 545 } 546 545 offsetend = acc_input->GetTimeInputOffset(finaltime); 546 time0 = acc_input->GetTimeByOffset(-1); 547 timeend = acc_input->GetTimeByOffset(offsetend); 548 timeclim = time; 549 if(time>time0 & timeend>time0){ 550 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 551 if(delta==0.) 552 timeclim=timeend; 553 else 554 timeclim=time0+delta; 555 } 547 556 element->GetInputListOnVerticesAtTime(acc,SmbAccumulationEnum,timeclim); 548 557 549 558 //Get evaporation climatology value 550 offsetend=dynamic_cast<TransientInput*>(evap_input)->GetTimeInputOffset(finaltime); 551 time0=dynamic_cast<TransientInput*>(evap_input)->GetTimeByOffset(-1); 552 timeend=dynamic_cast<TransientInput*>(evap_input)->GetTimeByOffset(offsetend); 553 timeclim=time; 554 if (time>time0){ 555 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 556 if (delta==0){ timeclim=timeend;} 557 else{ timeclim=time0+delta;} 558 } 559 559 offsetend = evap_input->GetTimeInputOffset(finaltime); 560 time0 = evap_input->GetTimeByOffset(-1); 561 timeend = evap_input->GetTimeByOffset(offsetend); 562 timeclim = time; 563 if(time>time0 & timeend>time0){ 564 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 565 if(delta==0.) 566 timeclim=timeend; 567 else 568 timeclim=time0+delta; 569 } 560 570 element->GetInputListOnVerticesAtTime(evap,SmbEvaporationEnum,timeclim); 561 571 562 572 //Get melt climatology value 563 offsetend=dynamic_cast<TransientInput*>(melt_input)->GetTimeInputOffset(finaltime); 564 time0=dynamic_cast<TransientInput*>(melt_input)->GetTimeByOffset(-1); 565 timeend=dynamic_cast<TransientInput*>(melt_input)->GetTimeByOffset(offsetend); 566 timeclim=time; 567 if (time>time0){ 568 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 569 if (delta==0){ timeclim=timeend;} 570 else{ timeclim=time0+delta;} 571 } 572 573 offsetend = melt_input->GetTimeInputOffset(finaltime); 574 time0 = melt_input->GetTimeByOffset(-1); 575 timeend = melt_input->GetTimeByOffset(offsetend); 576 timeclim = time; 577 if(time>time0 & timeend>time0){ 578 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 579 if(delta==0.) 580 timeclim=timeend; 581 else 582 timeclim=time0+delta; 583 } 573 584 element->GetInputListOnVerticesAtTime(melt,SmbMeltEnum,timeclim); 574 585 575 586 //Get refreeze climatology value 576 offsetend=dynamic_cast<TransientInput*>(refreeze_input)->GetTimeInputOffset(finaltime); 577 time0=dynamic_cast<TransientInput*>(refreeze_input)->GetTimeByOffset(-1); 578 timeend=dynamic_cast<TransientInput*>(refreeze_input)->GetTimeByOffset(offsetend); 579 timeclim=time; 580 if (time>time0){ 581 delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 582 if (delta==0){ timeclim=timeend;} 583 else{ timeclim=time0+delta;} 584 } 585 587 offsetend = refreeze_input->GetTimeInputOffset(finaltime); 588 time0 = refreeze_input->GetTimeByOffset(-1); 589 timeend = refreeze_input->GetTimeByOffset(offsetend); 590 timeclim = time; 591 if(time>time0 & timeend>time0){ 592 IssmDouble delta=(time-time0) - (timeend-time0)*(reCast<int,IssmDouble>((time-time0)/(timeend-time0))); 593 if(delta==0.) 594 timeclim=timeend; 595 else 596 timeclim=time0+delta; 597 } 586 598 element->GetInputListOnVerticesAtTime(refreeze,SmbRefreezeEnum,timeclim); 587 599 } … … 594 606 595 607 // loop over all vertices 596 for(v=0;v<numvertices;v++){ 597 smb[v]=acc[v]-evap[v]-melt[v]+refreeze[v]; 598 } //end of the loop over the vertices 608 for(int v=0;v<numvertices;v++) smb[v]=acc[v]-evap[v]-melt[v]+refreeze[v]; 599 609 600 610 /*Add input to element and Free memory*/ 601 element->AddInput (SmbMassBalanceEnum,smb,P1Enum);611 element->AddInput2(SmbMassBalanceEnum,smb,P1Enum); 602 612 xDelete<IssmDouble>(acc); 603 613 xDelete<IssmDouble>(evap); -
issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
r22438 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void SurfaceRelVelMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 61 62 62 63 /*Retrieve all inputs we will be needing: */ 63 Input* weights_input=topelement->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);64 Input * vx_input =topelement->GetInput(VxEnum); _assert_(vx_input);65 Input * vxobs_input =topelement->GetInput(InversionVxObsEnum); _assert_(vxobs_input);66 Input * vy_input = NULL;67 Input * vyobs_input = NULL;64 DatasetInput2* weights_input=topelement->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 65 Input2* vx_input =topelement->GetInput2(VxEnum); _assert_(vx_input); 66 Input2* vxobs_input =topelement->GetInput2(InversionVxObsEnum); _assert_(vxobs_input); 67 Input2* vy_input = NULL; 68 Input2* vyobs_input = NULL; 68 69 if(numcomponents==2){ 69 vy_input =topelement->GetInput (VyEnum); _assert_(vy_input);70 vyobs_input =topelement->GetInput (InversionVyObsEnum); _assert_(vyobs_input);70 vy_input =topelement->GetInput2(VyEnum); _assert_(vy_input); 71 vyobs_input =topelement->GetInput2(InversionVyObsEnum); _assert_(vyobs_input); 71 72 } 72 73 -
issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
r18521 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void ThicknessAbsMisfitx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 43 44 44 45 /*Retrieve all inputs we will be needing: */ 45 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);46 Input * thickness_input =element->GetInput(ThicknessEnum); _assert_(thickness_input);47 Input * thicknessobs_input=element->GetInput(InversionThicknessObsEnum); _assert_(thicknessobs_input);46 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 47 Input2* thickness_input =element->GetInput2(ThicknessEnum); _assert_(thickness_input); 48 Input2* thicknessobs_input=element->GetInput2(InversionThicknessObsEnum); _assert_(thicknessobs_input); 48 49 49 50 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
r18521 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void ThicknessAcrossGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 45 46 46 47 /*Retrieve all inputs we will be needing: */ 47 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);48 Input * thickness_input =element->GetInput(ThicknessEnum); _assert_(thickness_input);49 Input * vx_input =element->GetInput(VxEnum); _assert_(vx_input);50 Input * vy_input =element->GetInput(VyEnum); _assert_(vy_input);48 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 49 Input2* thickness_input =element->GetInput2(ThicknessEnum); _assert_(thickness_input); 50 Input2* vx_input =element->GetInput2(VxEnum); _assert_(vx_input); 51 Input2* vy_input =element->GetInput2(VyEnum); _assert_(vy_input); 51 52 52 53 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
r18521 r24335 7 7 #include "../../shared/shared.h" 8 8 #include "../../toolkits/toolkits.h" 9 #include "../../classes/Inputs2/DatasetInput2.h" 9 10 10 11 void ThicknessAlongGradientx( IssmDouble* pJ, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials,Parameters* parameters){ … … 45 46 46 47 /*Retrieve all inputs we will be needing: */ 47 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input);48 Input * thickness_input =element->GetInput(ThicknessEnum); _assert_(thickness_input);49 Input * vx_input =element->GetInput(VxEnum); _assert_(vx_input);50 Input * vy_input =element->GetInput(VyEnum); _assert_(vy_input);48 DatasetInput2* weights_input =element->GetDatasetInput2(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 49 Input2* thickness_input =element->GetInput2(ThicknessEnum); _assert_(thickness_input); 50 Input2* vx_input =element->GetInput2(VxEnum); _assert_(vx_input); 51 Input2* vy_input =element->GetInput2(VyEnum); _assert_(vy_input); 51 52 52 53 /* Start looping on the number of gaussian points: */ -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r24259 r24335 282 282 syn keyword cConstant OutputFilePointerEnum 283 283 syn keyword cConstant OutputdefinitionEnum 284 syn keyword cConstant ParamEnum285 syn keyword cConstant ParametersEnum286 284 syn keyword cConstant QmuErrNameEnum 287 285 syn keyword cConstant QmuInNameEnum … … 475 473 syn keyword cConstant BasalStressEnum 476 474 syn keyword cConstant BaseEnum 475 syn keyword cConstant BaseOldEnum 477 476 syn keyword cConstant BaseSlopeXEnum 478 477 syn keyword cConstant BaseSlopeYEnum … … 495 494 syn keyword cConstant CrevasseDepthEnum 496 495 syn keyword cConstant DamageDEnum 496 syn keyword cConstant DamageDOldEnum 497 497 syn keyword cConstant DamageDbarEnum 498 syn keyword cConstant DamageDbarOldEnum 498 499 syn keyword cConstant DamageFEnum 499 500 syn keyword cConstant DegreeOfChannelizationEnum … … 516 517 syn keyword cConstant DrivingStressXEnum 517 518 syn keyword cConstant DrivingStressYEnum 519 syn keyword cConstant DummyEnum 518 520 syn keyword cConstant EffectivePressureEnum 519 521 syn keyword cConstant EffectivePressureSubstepEnum … … 660 662 syn keyword cConstant SealevelUNorthEsaEnum 661 663 syn keyword cConstant SealevelriseCumDeltathicknessEnum 664 syn keyword cConstant SealevelriseCumDeltathicknessOldEnum 662 665 syn keyword cConstant SealevelriseDeltathicknessEnum 663 666 syn keyword cConstant SealevelriseSpcthicknessEnum … … 785 788 syn keyword cConstant SurfaceCrevasseEnum 786 789 syn keyword cConstant SurfaceEnum 790 syn keyword cConstant SurfaceOldEnum 787 791 syn keyword cConstant SurfaceLogVelMisfitEnum 788 792 syn keyword cConstant SurfaceLogVxVyMisfitEnum … … 953 957 syn keyword cConstant BoolExternalResultEnum 954 958 syn keyword cConstant BoolInputEnum 959 syn keyword cConstant BoolInput2Enum 960 syn keyword cConstant IntInput2Enum 955 961 syn keyword cConstant BoolParamEnum 956 962 syn keyword cConstant BoundaryEnum … … 973 979 syn keyword cConstant ContoursEnum 974 980 syn keyword cConstant ControlInputEnum 981 syn keyword cConstant ControlInput2Enum 975 982 syn keyword cConstant ControlInputGradEnum 976 983 syn keyword cConstant ControlInputMaxsEnum … … 985 992 syn keyword cConstant DataSetParamEnum 986 993 syn keyword cConstant DatasetInputEnum 994 syn keyword cConstant DatasetInput2Enum 987 995 syn keyword cConstant DefaultAnalysisEnum 988 996 syn keyword cConstant DefaultCalvingEnum … … 994 1002 syn keyword cConstant Domain3DsurfaceEnum 995 1003 syn keyword cConstant DoubleArrayInputEnum 1004 syn keyword cConstant ArrayInput2Enum 996 1005 syn keyword cConstant DoubleExternalResultEnum 997 1006 syn keyword cConstant DoubleInputEnum … … 1074 1083 syn keyword cConstant IntExternalResultEnum 1075 1084 syn keyword cConstant IntInputEnum 1085 syn keyword cConstant ElementInput2Enum 1086 syn keyword cConstant SegInput2Enum 1087 syn keyword cConstant TriaInput2Enum 1088 syn keyword cConstant PentaInput2Enum 1076 1089 syn keyword cConstant IntMatExternalResultEnum 1077 1090 syn keyword cConstant IntMatParamEnum 1078 1091 syn keyword cConstant IntParamEnum 1079 1092 syn keyword cConstant IntVecParamEnum 1093 syn keyword cConstant Inputs2Enum 1080 1094 syn keyword cConstant InternalEnum 1081 1095 syn keyword cConstant IntersectEnum … … 1157 1171 syn keyword cConstant OpenEnum 1158 1172 syn keyword cConstant OptionEnum 1173 syn keyword cConstant ParamEnum 1174 syn keyword cConstant ParametersEnum 1159 1175 syn keyword cConstant P0ArrayEnum 1160 1176 syn keyword cConstant P0DGEnum … … 1259 1275 syn keyword cConstant TransientArrayParamEnum 1260 1276 syn keyword cConstant TransientInputEnum 1277 syn keyword cConstant TransientInput2Enum 1261 1278 syn keyword cConstant TransientParamEnum 1262 1279 syn keyword cConstant TransientSolutionEnum … … 1298 1315 syn keyword cType AdaptiveMeshRefinement 1299 1316 syn keyword cType AmrBamg 1317 syn keyword cType ArrayInput2 1300 1318 syn keyword cType BoolInput 1319 syn keyword cType BoolInput2 1301 1320 syn keyword cType BoolParam 1302 1321 syn keyword cType Cfdragcoeffabsgrad … … 1304 1323 syn keyword cType Cfsurfacesquare 1305 1324 syn keyword cType Channel 1325 syn keyword cType classes 1306 1326 syn keyword cType Constraint 1307 1327 syn keyword cType Constraints … … 1309 1329 syn keyword cType Contours 1310 1330 syn keyword cType ControlInput 1331 syn keyword cType ControlInput2 1311 1332 syn keyword cType Covertree 1333 syn keyword cType DatasetInput 1334 syn keyword cType DatasetInput2 1312 1335 syn keyword cType DataSetParam 1313 syn keyword cType DatasetInput1314 1336 syn keyword cType Definition 1315 1337 syn keyword cType DependentObject … … 1323 1345 syn keyword cType Element 1324 1346 syn keyword cType ElementHook 1347 syn keyword cType ElementInput2 1325 1348 syn keyword cType ElementMatrix 1349 syn keyword cType Elements 1326 1350 syn keyword cType ElementVector 1327 syn keyword cType Elements1328 1351 syn keyword cType ExponentialVariogram 1329 1352 syn keyword cType ExternalResult … … 1332 1355 syn keyword cType Friction 1333 1356 syn keyword cType Gauss 1357 syn keyword cType GaussianVariogram 1358 syn keyword cType gaussobjects 1334 1359 syn keyword cType GaussPenta 1335 1360 syn keyword cType GaussSeg 1336 1361 syn keyword cType GaussTetra 1337 1362 syn keyword cType GaussTria 1338 syn keyword cType GaussianVariogram1339 1363 syn keyword cType GenericExternalResult 1340 1364 syn keyword cType GenericOption … … 1343 1367 syn keyword cType Hook 1344 1368 syn keyword cType Input 1369 syn keyword cType Input2 1345 1370 syn keyword cType Inputs 1371 syn keyword cType Inputs2 1346 1372 syn keyword cType IntInput 1373 syn keyword cType IntInput2 1347 1374 syn keyword cType IntMatParam 1348 1375 syn keyword cType IntParam … … 1351 1378 syn keyword cType IssmDirectApplicInterface 1352 1379 syn keyword cType IssmParallelDirectApplicInterface 1380 syn keyword cType krigingobjects 1353 1381 syn keyword cType Load 1354 1382 syn keyword cType Loads … … 1361 1389 syn keyword cType Matice 1362 1390 syn keyword cType Matlitho 1391 syn keyword cType matrixobjects 1363 1392 syn keyword cType MatrixParam 1364 1393 syn keyword cType Misfit … … 1373 1402 syn keyword cType Observations 1374 1403 syn keyword cType Option 1404 syn keyword cType Options 1375 1405 syn keyword cType OptionUtilities 1376 syn keyword cType Options1377 1406 syn keyword cType Param 1378 1407 syn keyword cType Parameters … … 1381 1410 syn keyword cType Penta 1382 1411 syn keyword cType PentaInput 1412 syn keyword cType PentaInput2 1383 1413 syn keyword cType PentaRef 1384 1414 syn keyword cType PowerVariogram … … 1388 1418 syn keyword cType Regionaloutput 1389 1419 syn keyword cType Results 1420 syn keyword cType Riftfront 1390 1421 syn keyword cType RiftStruct 1391 syn keyword cType Riftfront1392 1422 syn keyword cType Seg 1393 1423 syn keyword cType SegInput 1424 syn keyword cType SegInput2 1425 syn keyword cType Segment 1394 1426 syn keyword cType SegRef 1395 syn keyword cType Segment1396 1427 syn keyword cType SpcDynamic 1397 1428 syn keyword cType SpcStatic … … 1405 1436 syn keyword cType TransientArrayParam 1406 1437 syn keyword cType TransientInput 1438 syn keyword cType TransientInput2 1407 1439 syn keyword cType TransientParam 1408 1440 syn keyword cType Tria 1409 1441 syn keyword cType TriaInput 1442 syn keyword cType TriaInput2 1410 1443 syn keyword cType TriaRef 1411 1444 syn keyword cType Variogram … … 1413 1446 syn keyword cType Vertex 1414 1447 syn keyword cType Vertices 1415 syn keyword cType classes1416 syn keyword cType gaussobjects1417 syn keyword cType krigingobjects1418 syn keyword cType matrixobjects1419 1448 syn keyword cType AdjointBalancethickness2Analysis 1420 1449 syn keyword cType AdjointBalancethicknessAnalysis … … 1435 1464 syn keyword cType FreeSurfaceBaseAnalysis 1436 1465 syn keyword cType FreeSurfaceTopAnalysis 1466 syn keyword cType GiaIvinsAnalysis 1437 1467 syn keyword cType GLheightadvectionAnalysis 1438 syn keyword cType GiaIvinsAnalysis1439 1468 syn keyword cType HydrologyDCEfficientAnalysis 1440 1469 syn keyword cType HydrologyDCInefficientAnalysis -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r24259 r24335 276 276 OutputFilePointerEnum, 277 277 OutputdefinitionEnum, 278 ParamEnum,279 ParametersEnum,280 278 QmuErrNameEnum, 281 279 QmuInNameEnum, … … 471 469 BasalStressEnum, 472 470 BaseEnum, 471 BaseOldEnum, 473 472 BaseSlopeXEnum, 474 473 BaseSlopeYEnum, … … 491 490 CrevasseDepthEnum, 492 491 DamageDEnum, 492 DamageDOldEnum, 493 493 DamageDbarEnum, 494 DamageDbarOldEnum, 494 495 DamageFEnum, 495 496 DegreeOfChannelizationEnum, … … 512 513 DrivingStressXEnum, 513 514 DrivingStressYEnum, 515 DummyEnum, 514 516 EffectivePressureEnum, 515 517 EffectivePressureSubstepEnum, … … 656 658 SealevelUNorthEsaEnum, 657 659 SealevelriseCumDeltathicknessEnum, 660 SealevelriseCumDeltathicknessOldEnum, 658 661 SealevelriseDeltathicknessEnum, 659 662 SealevelriseSpcthicknessEnum, … … 781 784 SurfaceCrevasseEnum, 782 785 SurfaceEnum, 786 SurfaceOldEnum, 783 787 SurfaceLogVelMisfitEnum, 784 788 SurfaceLogVxVyMisfitEnum, … … 951 955 BoolExternalResultEnum, 952 956 BoolInputEnum, 957 BoolInput2Enum, 958 IntInput2Enum, 953 959 BoolParamEnum, 954 960 BoundaryEnum, … … 971 977 ContoursEnum, 972 978 ControlInputEnum, 979 ControlInput2Enum, 973 980 ControlInputGradEnum, 974 981 ControlInputMaxsEnum, … … 983 990 DataSetParamEnum, 984 991 DatasetInputEnum, 992 DatasetInput2Enum, 985 993 DefaultAnalysisEnum, 986 994 DefaultCalvingEnum, … … 992 1000 Domain3DsurfaceEnum, 993 1001 DoubleArrayInputEnum, 1002 ArrayInput2Enum, 994 1003 DoubleExternalResultEnum, 995 1004 DoubleInputEnum, … … 1072 1081 IntExternalResultEnum, 1073 1082 IntInputEnum, 1083 ElementInput2Enum, 1084 SegInput2Enum, 1085 TriaInput2Enum, 1086 PentaInput2Enum, 1074 1087 IntMatExternalResultEnum, 1075 1088 IntMatParamEnum, 1076 1089 IntParamEnum, 1077 1090 IntVecParamEnum, 1091 Inputs2Enum, 1078 1092 InternalEnum, 1079 1093 IntersectEnum, … … 1155 1169 OpenEnum, 1156 1170 OptionEnum, 1171 ParamEnum, 1172 ParametersEnum, 1157 1173 P0ArrayEnum, 1158 1174 P0DGEnum, … … 1257 1273 TransientArrayParamEnum, 1258 1274 TransientInputEnum, 1275 TransientInput2Enum, 1259 1276 TransientParamEnum, 1260 1277 TransientSolutionEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r24259 r24335 284 284 case OutputFilePointerEnum : return "OutputFilePointer"; 285 285 case OutputdefinitionEnum : return "Outputdefinition"; 286 case ParamEnum : return "Param";287 case ParametersEnum : return "Parameters";288 286 case QmuErrNameEnum : return "QmuErrName"; 289 287 case QmuInNameEnum : return "QmuInName"; … … 477 475 case BasalStressEnum : return "BasalStress"; 478 476 case BaseEnum : return "Base"; 477 case BaseOldEnum : return "BaseOld"; 479 478 case BaseSlopeXEnum : return "BaseSlopeX"; 480 479 case BaseSlopeYEnum : return "BaseSlopeY"; … … 497 496 case CrevasseDepthEnum : return "CrevasseDepth"; 498 497 case DamageDEnum : return "DamageD"; 498 case DamageDOldEnum : return "DamageDOld"; 499 499 case DamageDbarEnum : return "DamageDbar"; 500 case DamageDbarOldEnum : return "DamageDbarOld"; 500 501 case DamageFEnum : return "DamageF"; 501 502 case DegreeOfChannelizationEnum : return "DegreeOfChannelization"; … … 518 519 case DrivingStressXEnum : return "DrivingStressX"; 519 520 case DrivingStressYEnum : return "DrivingStressY"; 521 case DummyEnum : return "Dummy"; 520 522 case EffectivePressureEnum : return "EffectivePressure"; 521 523 case EffectivePressureSubstepEnum : return "EffectivePressureSubstep"; … … 662 664 case SealevelUNorthEsaEnum : return "SealevelUNorthEsa"; 663 665 case SealevelriseCumDeltathicknessEnum : return "SealevelriseCumDeltathickness"; 666 case SealevelriseCumDeltathicknessOldEnum : return "SealevelriseCumDeltathicknessOld"; 664 667 case SealevelriseDeltathicknessEnum : return "SealevelriseDeltathickness"; 665 668 case SealevelriseSpcthicknessEnum : return "SealevelriseSpcthickness"; … … 787 790 case SurfaceCrevasseEnum : return "SurfaceCrevasse"; 788 791 case SurfaceEnum : return "Surface"; 792 case SurfaceOldEnum : return "SurfaceOld"; 789 793 case SurfaceLogVelMisfitEnum : return "SurfaceLogVelMisfit"; 790 794 case SurfaceLogVxVyMisfitEnum : return "SurfaceLogVxVyMisfit"; … … 955 959 case BoolExternalResultEnum : return "BoolExternalResult"; 956 960 case BoolInputEnum : return "BoolInput"; 961 case BoolInput2Enum : return "BoolInput2"; 962 case IntInput2Enum : return "IntInput2"; 957 963 case BoolParamEnum : return "BoolParam"; 958 964 case BoundaryEnum : return "Boundary"; … … 975 981 case ContoursEnum : return "Contours"; 976 982 case ControlInputEnum : return "ControlInput"; 983 case ControlInput2Enum : return "ControlInput2"; 977 984 case ControlInputGradEnum : return "ControlInputGrad"; 978 985 case ControlInputMaxsEnum : return "ControlInputMaxs"; … … 987 994 case DataSetParamEnum : return "DataSetParam"; 988 995 case DatasetInputEnum : return "DatasetInput"; 996 case DatasetInput2Enum : return "DatasetInput2"; 989 997 case DefaultAnalysisEnum : return "DefaultAnalysis"; 990 998 case DefaultCalvingEnum : return "DefaultCalving"; … … 996 1004 case Domain3DsurfaceEnum : return "Domain3Dsurface"; 997 1005 case DoubleArrayInputEnum : return "DoubleArrayInput"; 1006 case ArrayInput2Enum : return "ArrayInput2"; 998 1007 case DoubleExternalResultEnum : return "DoubleExternalResult"; 999 1008 case DoubleInputEnum : return "DoubleInput"; … … 1076 1085 case IntExternalResultEnum : return "IntExternalResult"; 1077 1086 case IntInputEnum : return "IntInput"; 1087 case ElementInput2Enum : return "ElementInput2"; 1088 case SegInput2Enum : return "SegInput2"; 1089 case TriaInput2Enum : return "TriaInput2"; 1090 case PentaInput2Enum : return "PentaInput2"; 1078 1091 case IntMatExternalResultEnum : return "IntMatExternalResult"; 1079 1092 case IntMatParamEnum : return "IntMatParam"; 1080 1093 case IntParamEnum : return "IntParam"; 1081 1094 case IntVecParamEnum : return "IntVecParam"; 1095 case Inputs2Enum : return "Inputs2"; 1082 1096 case InternalEnum : return "Internal"; 1083 1097 case IntersectEnum : return "Intersect"; … … 1159 1173 case OpenEnum : return "Open"; 1160 1174 case OptionEnum : return "Option"; 1175 case ParamEnum : return "Param"; 1176 case ParametersEnum : return "Parameters"; 1161 1177 case P0ArrayEnum : return "P0Array"; 1162 1178 case P0DGEnum : return "P0DG"; … … 1261 1277 case TransientArrayParamEnum : return "TransientArrayParam"; 1262 1278 case TransientInputEnum : return "TransientInput"; 1279 case TransientInput2Enum : return "TransientInput2"; 1263 1280 case TransientParamEnum : return "TransientParam"; 1264 1281 case TransientSolutionEnum : return "TransientSolution"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r24259 r24335 290 290 else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum; 291 291 else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum; 292 else if (strcmp(name,"Param")==0) return ParamEnum;293 else if (strcmp(name,"Parameters")==0) return ParametersEnum;294 292 else if (strcmp(name,"QmuErrName")==0) return QmuErrNameEnum; 295 293 else if (strcmp(name,"QmuInName")==0) return QmuInNameEnum; … … 383 381 else if (strcmp(name,"SmbSealev")==0) return SmbSealevEnum; 384 382 else if (strcmp(name,"SmbStepsPerStep")==0) return SmbStepsPerStepEnum; 383 else if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum; 384 else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum; 385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"SmbSwIdx")==0) return SmbSwIdxEnum; 389 else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum; 390 else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum; 388 if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum; 391 389 else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum; 392 390 else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum; … … 486 484 else if (strcmp(name,"BasalStress")==0) return BasalStressEnum; 487 485 else if (strcmp(name,"Base")==0) return BaseEnum; 486 else if (strcmp(name,"BaseOld")==0) return BaseOldEnum; 488 487 else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum; 489 488 else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum; … … 506 505 else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum; 507 506 else if (strcmp(name,"DamageD")==0) return DamageDEnum; 507 else if (strcmp(name,"DamageDOld")==0) return DamageDOldEnum; 508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 511 if (strcmp(name,"DamageDbar")==0) return DamageDbarEnum; 512 else if (strcmp(name,"DamageDbarOld")==0) return DamageDbarOldEnum; 512 513 else if (strcmp(name,"DamageF")==0) return DamageFEnum; 513 514 else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum; … … 530 531 else if (strcmp(name,"DrivingStressX")==0) return DrivingStressXEnum; 531 532 else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum; 533 else if (strcmp(name,"Dummy")==0) return DummyEnum; 532 534 else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum; 533 535 else if (strcmp(name,"EffectivePressureSubstep")==0) return EffectivePressureSubstepEnum; … … 627 629 else if (strcmp(name,"MaterialsRheologyB")==0) return MaterialsRheologyBEnum; 628 630 else if (strcmp(name,"MaterialsRheologyBbar")==0) return MaterialsRheologyBbarEnum; 629 else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum;630 else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum; 634 if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum; 635 else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum; 636 else if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum; 635 637 else if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum; 636 638 else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum; … … 677 679 else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum; 678 680 else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum; 681 else if (strcmp(name,"SealevelriseCumDeltathicknessOld")==0) return SealevelriseCumDeltathicknessOldEnum; 679 682 else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum; 680 683 else if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum; … … 749 752 else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum; 750 753 else if (strcmp(name,"SmbPrecipitationsReconstructed")==0) return SmbPrecipitationsReconstructedEnum; 751 else if (strcmp(name,"SmbRe")==0) return SmbReEnum;752 else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum;753 else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum; 757 if (strcmp(name,"SmbRe")==0) return SmbReEnum; 758 else if (strcmp(name,"SmbRefreeze")==0) return SmbRefreezeEnum; 759 else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum; 760 else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum; 758 761 else if (strcmp(name,"SmbRunoffSubstep")==0) return SmbRunoffSubstepEnum; 759 762 else if (strcmp(name,"SmbRunoffTransient")==0) return SmbRunoffTransientEnum; … … 805 808 else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum; 806 809 else if (strcmp(name,"Surface")==0) return SurfaceEnum; 810 else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum; 807 811 else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum; 808 812 else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; … … 871 875 else if (strcmp(name,"Outputdefinition32")==0) return Outputdefinition32Enum; 872 876 else if (strcmp(name,"Outputdefinition33")==0) return Outputdefinition33Enum; 873 else if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition34")==0) return Outputdefinition34Enum; 874 881 else if (strcmp(name,"Outputdefinition35")==0) return Outputdefinition35Enum; 875 882 else if (strcmp(name,"Outputdefinition36")==0) return Outputdefinition36Enum; 876 883 else if (strcmp(name,"Outputdefinition37")==0) return Outputdefinition37Enum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum; 884 else if (strcmp(name,"Outputdefinition38")==0) return Outputdefinition38Enum; 881 885 else if (strcmp(name,"Outputdefinition39")==0) return Outputdefinition39Enum; 882 886 else if (strcmp(name,"Outputdefinition3")==0) return Outputdefinition3Enum; … … 976 980 else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum; 977 981 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 982 else if (strcmp(name,"BoolInput2")==0) return BoolInput2Enum; 983 else if (strcmp(name,"IntInput2")==0) return IntInput2Enum; 978 984 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum; 979 985 else if (strcmp(name,"Boundary")==0) return BoundaryEnum; … … 992 998 else if (strcmp(name,"Colinear")==0) return ColinearEnum; 993 999 else if (strcmp(name,"Constraints")==0) return ConstraintsEnum; 994 else if (strcmp(name,"Contact")==0) return ContactEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"Contact")==0) return ContactEnum; 995 1004 else if (strcmp(name,"Contour")==0) return ContourEnum; 996 1005 else if (strcmp(name,"Contours")==0) return ContoursEnum; 997 1006 else if (strcmp(name,"ControlInput")==0) return ControlInputEnum; 1007 else if (strcmp(name,"ControlInput2")==0) return ControlInput2Enum; 998 1008 else if (strcmp(name,"ControlInputGrad")==0) return ControlInputGradEnum; 999 1009 else if (strcmp(name,"ControlInputMaxs")==0) return ControlInputMaxsEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"ControlInputMins")==0) return ControlInputMinsEnum; 1010 else if (strcmp(name,"ControlInputMins")==0) return ControlInputMinsEnum; 1004 1011 else if (strcmp(name,"ControlInputValues")==0) return ControlInputValuesEnum; 1005 1012 else if (strcmp(name,"CrouzeixRaviart")==0) return CrouzeixRaviartEnum; … … 1011 1018 else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum; 1012 1019 else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum; 1020 else if (strcmp(name,"DatasetInput2")==0) return DatasetInput2Enum; 1013 1021 else if (strcmp(name,"DefaultAnalysis")==0) return DefaultAnalysisEnum; 1014 1022 else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum; … … 1020 1028 else if (strcmp(name,"Domain3Dsurface")==0) return Domain3DsurfaceEnum; 1021 1029 else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum; 1030 else if (strcmp(name,"ArrayInput2")==0) return ArrayInput2Enum; 1022 1031 else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum; 1023 1032 else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum; … … 1100 1109 else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; 1101 1110 else if (strcmp(name,"IntInput")==0) return IntInputEnum; 1111 else if (strcmp(name,"ElementInput2")==0) return ElementInput2Enum; 1112 else if (strcmp(name,"SegInput2")==0) return SegInput2Enum; 1113 else if (strcmp(name,"TriaInput2")==0) return TriaInput2Enum; 1114 else if (strcmp(name,"PentaInput2")==0) return PentaInput2Enum; 1102 1115 else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum; 1103 1116 else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum; 1104 1117 else if (strcmp(name,"IntParam")==0) return IntParamEnum; 1105 1118 else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum; 1119 else if (strcmp(name,"Inputs2")==0) return Inputs2Enum; 1106 1120 else if (strcmp(name,"Internal")==0) return InternalEnum; 1107 1121 else if (strcmp(name,"Intersect")==0) return IntersectEnum; 1108 1122 else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum; 1109 else if (strcmp(name,"J")==0) return JEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"J")==0) return JEnum; 1110 1127 else if (strcmp(name,"L1L2Approximation")==0) return L1L2ApproximationEnum; 1111 1128 else if (strcmp(name,"L2ProjectionBaseAnalysis")==0) return L2ProjectionBaseAnalysisEnum; … … 1121 1138 else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum; 1122 1139 else if (strcmp(name,"LoveHi")==0) return LoveHiEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"LoveHr")==0) return LoveHrEnum; 1140 else if (strcmp(name,"LoveHr")==0) return LoveHrEnum; 1127 1141 else if (strcmp(name,"LoveKernelsImag")==0) return LoveKernelsImagEnum; 1128 1142 else if (strcmp(name,"LoveKernelsReal")==0) return LoveKernelsRealEnum; … … 1186 1200 else if (strcmp(name,"Open")==0) return OpenEnum; 1187 1201 else if (strcmp(name,"Option")==0) return OptionEnum; 1202 else if (strcmp(name,"Param")==0) return ParamEnum; 1203 else if (strcmp(name,"Parameters")==0) return ParametersEnum; 1188 1204 else if (strcmp(name,"P0Array")==0) return P0ArrayEnum; 1189 1205 else if (strcmp(name,"P0DG")==0) return P0DGEnum; … … 1228 1244 else if (strcmp(name,"SMBpddSicopolis")==0) return SMBpddSicopolisEnum; 1229 1245 else if (strcmp(name,"SMBsemic")==0) return SMBsemicEnum; 1230 else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum; 1231 1250 else if (strcmp(name,"SSAFSApproximation")==0) return SSAFSApproximationEnum; 1232 1251 else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum; … … 1244 1263 else if (strcmp(name,"SegInput")==0) return SegInputEnum; 1245 1264 else if (strcmp(name,"Segment")==0) return SegmentEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum; 1265 else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum; 1250 1266 else if (strcmp(name,"Separate")==0) return SeparateEnum; 1251 1267 else if (strcmp(name,"Seq")==0) return SeqEnum; … … 1291 1307 else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum; 1292 1308 else if (strcmp(name,"TransientInput")==0) return TransientInputEnum; 1309 else if (strcmp(name,"TransientInput2")==0) return TransientInput2Enum; 1293 1310 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; 1294 1311 else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
Note:
See TracChangeset
for help on using the changeset viewer.