Changeset 17434
- Timestamp:
- 03/14/14 12:23:22 (11 years ago)
- Location:
- issm/trunk-jpl/src/c/analyses
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
r17275 r17434 25 25 void EnthalpyAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 26 26 27 bool dakota_analysis ;27 bool dakota_analysis, islevelset; 28 28 bool isenthalpy; 29 29 … … 49 49 50 50 iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum); 51 iomodel->Constant(&islevelset,TransientIslevelsetEnum); 51 52 52 53 iomodel->FetchDataToInput(elements,ThicknessEnum); … … 83 84 elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum); 84 85 } 86 if(islevelset){ 87 iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum); 88 iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes 89 } 85 90 86 91 /*Free data: */ … … 196 201 ElementMatrix* EnthalpyAnalysis::CreateKMatrix(Element* element){/*{{{*/ 197 202 203 /* Check if ice in element */ 204 if(!element->IsIceInElement()) return NULL; 205 198 206 /*compute all stiffness matrices for this element*/ 199 207 ElementMatrix* Ke1=CreateKMatrixVolume(element); … … 207 215 }/*}}}*/ 208 216 ElementMatrix* EnthalpyAnalysis::CreateKMatrixVolume(Element* element){/*{{{*/ 217 218 /* Check if ice in element */ 219 if(!element->IsIceInElement()) return NULL; 209 220 210 221 /*Intermediaries */ … … 339 350 ElementMatrix* EnthalpyAnalysis::CreateKMatrixShelf(Element* element){/*{{{*/ 340 351 352 /* Check if ice in element */ 353 if(!element->IsIceInElement()) return NULL; 354 341 355 /*Initialize Element matrix and return if necessary*/ 342 356 if(!element->IsOnBed() || !element->IsFloating()) return NULL; … … 388 402 ElementVector* EnthalpyAnalysis::CreatePVector(Element* element){/*{{{*/ 389 403 404 /* Check if ice in element */ 405 if(!element->IsIceInElement()) return NULL; 406 390 407 /*compute all load vectors for this element*/ 391 408 ElementVector* pe1=CreatePVectorVolume(element); … … 401 418 }/*}}}*/ 402 419 ElementVector* EnthalpyAnalysis::CreatePVectorVolume(Element* element){/*{{{*/ 420 421 /* Check if ice in element */ 422 if(!element->IsIceInElement()) return NULL; 403 423 404 424 /*Intermediaries*/ … … 515 535 ElementVector* EnthalpyAnalysis::CreatePVectorSheet(Element* element){/*{{{*/ 516 536 537 /* Check if ice in element */ 538 if(!element->IsIceInElement()) return NULL; 539 517 540 /* implementation of the basal condition decision chart of Aschwanden 2012, Fig.5 */ 518 541 if(!element->IsOnBed() || element->IsFloating()) return NULL; … … 601 624 }/*}}}*/ 602 625 ElementVector* EnthalpyAnalysis::CreatePVectorShelf(Element* element){/*{{{*/ 626 627 /* Check if ice in element */ 628 if(!element->IsIceInElement()) return NULL; 603 629 604 630 /*Get basal element*/ … … 819 845 }/*}}}*/ 820 846 void EnthalpyAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/ 821 /*Default, do nothing*/ 847 848 bool islevelset; 849 femmodel->parameters->FindParam(&islevelset,TransientIslevelsetEnum); 850 if(islevelset){ 851 _printf0_(" Updating active and non-active nodes for ThermalAnalysis \n"); 852 SetActiveNodesLSMx(femmodel); 853 } 822 854 return; 823 855 }/*}}}*/ … … 829 861 int solution_type, i; 830 862 bool computebasalmeltingrates=true; 831 bool isdrainage= true;863 bool isdrainage=false; 832 864 bool updatebasalconstraints=true; 833 865 … … 862 894 /*Calculate the basal melt rates of the enthalpy model after Aschwanden 2012*/ 863 895 /* melting rate is positive when melting, negative when refreezing*/ 896 897 /* Check if ice in element */ 898 if(!element->IsIceInElement()) return; 899 900 /* Only compute melt rates at the base of grounded ice*/ 901 if(!element->IsOnBed() || element->IsFloating()) return; 864 902 865 903 /* Intermediaries */ … … 877 915 IssmDouble *xyz_list_base = NULL; 878 916 int *pairindices = NULL; 879 880 /* Only compute melt rates at the base of grounded ice*/881 if(!element->IsOnBed() || element->IsFloating()) return;882 917 883 918 /*Fetch parameters and inputs */ … … 1006 1041 void EnthalpyAnalysis::DrainWaterfractionIcecolumn(Element* element){/*{{{*/ 1007 1042 1043 /* Check if ice in element */ 1044 if(!element->IsIceInElement()) return; 1045 1008 1046 /* Only drain waterfraction of ice column from element at base*/ 1009 1047 if(!element->IsOnBed()) return; //FIXME: allow freeze on for floating elements … … 1043 1081 }/*}}}*/ 1044 1082 void EnthalpyAnalysis::DrainWaterfraction(Element* element, IssmDouble* pdrainrate_element){/*{{{*/ 1083 1084 /* Check if ice in element */ 1085 if(!element->IsIceInElement()) return; 1045 1086 1046 1087 /*Intermediaries*/ … … 1102 1143 void EnthalpyAnalysis::UpdateBasalConstraints(Element* element){/*{{{*/ 1103 1144 1145 /* Check if ice in element */ 1146 if(!element->IsIceInElement()) return; 1147 1148 /* Only update Constraints at the base of grounded ice*/ 1149 if(!(element->IsOnBed()) || element->IsFloating()) return; 1150 1104 1151 /*Intermediary*/ 1105 1152 bool isdynamicbasalspc,setspc; … … 1110 1157 int *indices = NULL, *indicesup = NULL; 1111 1158 Node* node = NULL; 1112 1113 /* Only update Constraints at the base of grounded ice*/1114 if(!(element->IsOnBed()) || element->IsFloating()) return;1115 1159 1116 1160 /*Check wether dynamic basal boundary conditions are activated */ -
issm/trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
r17275 r17434 43 43 } 44 44 45 bool dakota_analysis ;45 bool dakota_analysis, islevelset; 46 46 iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum); 47 iomodel->Constant(&islevelset,TransientIslevelsetEnum); 47 48 48 49 iomodel->FetchDataToInput(elements,ThicknessEnum); … … 75 76 elements->InputDuplicate(VxMeshEnum,QmuVzMeshEnum); 76 77 } 78 if(islevelset){ 79 iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum); 80 iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes 81 } 77 82 }/*}}}*/ 78 83 void ThermalAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ … … 124 129 ElementMatrix* ThermalAnalysis::CreateKMatrix(Element* element){/*{{{*/ 125 130 131 /* Check if ice in element */ 132 if(!element->IsIceInElement()) return NULL; 133 126 134 /*compute all stiffness matrices for this element*/ 127 135 ElementMatrix* Ke1=CreateKMatrixVolume(element); … … 135 143 }/*}}}*/ 136 144 ElementMatrix* ThermalAnalysis::CreateKMatrixVolume(Element* element){/*{{{*/ 145 146 /* Check if ice in element */ 147 if(!element->IsIceInElement()) return NULL; 137 148 138 149 /*Intermediaries */ … … 266 277 ElementMatrix* ThermalAnalysis::CreateKMatrixShelf(Element* element){/*{{{*/ 267 278 279 /* Check if ice in element */ 280 if(!element->IsIceInElement()) return NULL; 281 268 282 /*Initialize Element matrix and return if necessary*/ 269 283 if(!element->IsOnBed() || !element->IsFloating()) return NULL; … … 316 330 }/*}}}*/ 317 331 ElementVector* ThermalAnalysis::CreatePVector(Element* element){/*{{{*/ 332 333 /* Check if ice in element */ 334 if(!element->IsIceInElement()) return NULL; 318 335 319 336 /*compute all load vectors for this element*/ … … 330 347 }/*}}}*/ 331 348 ElementVector* ThermalAnalysis::CreatePVectorVolume(Element* element){/*{{{*/ 349 350 /* Check if ice in element */ 351 if(!element->IsIceInElement()) return NULL; 332 352 333 353 /*Intermediaries*/ … … 410 430 ElementVector* ThermalAnalysis::CreatePVectorSheet(Element* element){/*{{{*/ 411 431 432 /* Check if ice in element */ 433 if(!element->IsIceInElement()) return NULL; 434 412 435 /* Geothermal flux on ice sheet base and basal friction */ 413 436 if(!element->IsOnBed() || element->IsFloating()) return NULL; … … 468 491 }/*}}}*/ 469 492 ElementVector* ThermalAnalysis::CreatePVectorShelf(Element* element){/*{{{*/ 493 494 /* Check if ice in element */ 495 if(!element->IsIceInElement()) return NULL; 470 496 471 497 IssmDouble t_pmp,dt,Jdet,scalar_ocean,pressure; … … 683 709 }/*}}}*/ 684 710 void ThermalAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/ 685 /*Default, do nothing*/ 711 712 bool islevelset; 713 femmodel->parameters->FindParam(&islevelset,TransientIslevelsetEnum); 714 if(islevelset){ 715 _printf0_(" Updating active and non-active nodes for ThermalAnalysis \n"); 716 SetActiveNodesLSMx(femmodel); 717 } 686 718 return; 687 719 }/*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.