Changeset 17353
- Timestamp:
- 02/26/14 11:04:28 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r17351 r17353 56 56 iomodel->FetchDataToInput(elements,HydrologydcEplInitialThicknessEnum); 57 57 iomodel->FetchDataToInput(elements,HydrologydcSedimentTransmitivityEnum); 58 59 iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveNodeEnum);60 58 61 59 elements->InputDuplicate(HydrologydcEplInitialThicknessEnum,HydrologydcEplThicknessEnum); … … 186 184 /*Transfer EPL part*/ 187 185 transfer=GetHydrologyKMatrixTransfer(basalelement,gauss); 188 basalelement->NodalFunctions(&basis[0],gauss);189 186 D_scalar=transfer*gauss->weight*Jdet*dt; 190 187 TripleMultiply(basis,numnodes,1,0, … … 296 293 return pe; 297 294 }/*}}}*/ 295 298 296 void HydrologyDCEfficientAnalysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ 299 297 element->GetSolutionFromInputsOneDof(solution,EplHeadEnum); 300 298 }/*}}}*/ 299 301 300 void HydrologyDCEfficientAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 302 301 … … 322 321 /*Fetch dof list and allocate solution vector*/ 323 322 basalelement->GetDofList(&doflist,NoneApproximationEnum,GsetEnum); 324 325 323 IssmDouble* eplHeads = xNew<IssmDouble>(numnodes); 326 324 … … 329 327 eplHeads[i]=solution[doflist[i]]; 330 328 if(xIsNan<IssmDouble>(eplHeads[i])) _error_("NaN found in solution vector"); 331 332 329 } 333 330 /*Add input to the element: */ … … 336 333 /*Free ressources:*/ 337 334 xDelete<IssmDouble>(eplHeads); 338 // xDelete<IssmDouble>(eplOldHeads);339 335 xDelete<int>(doflist); 340 336 if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; … … 355 351 return rho_freshwater*g*epl_porosity*(water_compressibility+(epl_compressibility/epl_porosity)); 356 352 }/*}}}*/ 353 357 354 IssmDouble HydrologyDCEfficientAnalysis::SedimentStoring(Element* element){/*{{{*/ 358 355 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); … … 364 361 return rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 365 362 }/*}}}*/ 363 366 364 IssmDouble HydrologyDCEfficientAnalysis::GetHydrologyDCInefficientHmax(Element* element, Gauss* gauss){/*{{{*/ 367 365 int hmax_flag; … … 369 367 IssmDouble rho_ice,rho_water; 370 368 IssmDouble thickness,bed; 369 371 370 /*Get the flag to the limitation method*/ 372 371 element->FindParam(&hmax_flag,HydrologydcSedimentlimitFlagEnum); -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r17349 r17353 81 81 82 82 iomodel->FetchDataToInput(elements,ThicknessEnum); 83 iomodel->FetchDataToInput(elements,SurfaceEnum);84 83 iomodel->FetchDataToInput(elements,BedEnum); 85 84 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum); 86 85 iomodel->FetchDataToInput(elements,MeshElementonbedEnum); 87 iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);88 86 iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum); 89 87 iomodel->FetchDataToInput(elements,SedimentHeadEnum); … … 235 233 if(active_element){ 236 234 transfer=GetHydrologyKMatrixTransfer(basalelement,gauss); 237 238 235 basalelement->NodalFunctions(&basis[0],gauss); 239 236 D_scalar=transfer*gauss->weight*Jdet*dt; -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r17338 r17353 494 494 name==HydrologydcEplThicknessEnum || 495 495 name==HydrologydcMaskEplactiveNodeEnum || 496 name==MeshVertexonbedEnum || 497 name==WaterTransferEnum 496 name==MeshVertexonbedEnum 498 497 499 498 ) { -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r17349 r17353 283 283 virtual void UpdateConstraintsExtrudeFromTop(void)=0; 284 284 285 // virtual void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,int index)=0;286 285 virtual void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode)=0; 287 virtual void GetHydrologyTransfer(Vector<IssmDouble>* transfer)=0;288 286 virtual void HydrologyEPLGetMask(Vector<IssmDouble>* mask)=0; 289 287 virtual void HydrologyEPLGetActive(Vector<IssmDouble>* active)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r17345 r17353 4179 4179 } 4180 4180 /*}}}*/ 4181 /*FUNCTION Penta::GetHydrologyTransfer{{{*/4182 void Penta::GetHydrologyTransfer(Vector<IssmDouble>* transfer){4183 4184 if (!IsOnBed()) return;4185 4186 Tria* tria=(Tria*)SpawnTria(0); //lower face is 0, upper face is 1.4187 tria->GetHydrologyTransfer(transfer);4188 delete tria->material; delete tria;4189 }4190 /*}}}*/4191 4181 /*FUNCTION Penta::GetSolutionFromInputsOneDof {{{*/ 4192 4182 void Penta::GetSolutionFromInputsOneDof(Vector<IssmDouble>* solution, int enum_type){ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r17349 r17353 243 243 ElementMatrix* CreateEPLDomainMassMatrix(void); 244 244 void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode); 245 // void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,int index){_error_("not implemented yet");};246 void GetHydrologyTransfer(Vector<IssmDouble>* transfer);247 245 void HydrologyEPLGetActive(Vector<IssmDouble>* active_vec); 248 246 void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r17349 r17353 151 151 152 152 void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode){_error_("not implemented yet");}; 153 // void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,int index){_error_("not implemented yet");};154 void GetHydrologyTransfer(Vector<IssmDouble>* transfer){_error_("not implemented yet");};155 153 void HydrologyEPLGetActive(Vector<IssmDouble>* active_vec){_error_("not implemented yet");}; 156 154 void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r17350 r17353 4499 4499 } 4500 4500 /*}}}*/ 4501 /*FUNCTION Tria::GetHydrologyTransfer{{{*/4502 /*This thing should be useless and deleted soon*/4503 4504 void Tria::GetHydrologyTransfer(Vector<IssmDouble>* transfer){4505 4506 /* const int numdof = NDOF1 *NUMVERTICES; */4507 /* int *doflist = NULL; */4508 /* int analysis_type; */4509 /* bool isefficientlayer; */4510 /* bool active_element; */4511 /* int transfermethod; */4512 /* IssmDouble leakage,h_max,dt,test; */4513 /* IssmDouble wh_trans,sed_thick,relaxed; */4514 /* IssmDouble epl_specificstoring,sedstoring; */4515 /* IssmDouble activeEpl[numdof],epl_thickness[numdof],old_epl_thickness[numdof]; */4516 /* IssmDouble epl_head[numdof],sed_head[numdof]; */4517 /* IssmDouble epl_head_old[numdof],sed_head_old[numdof]; */4518 /* IssmDouble preceding_transfer[numdof],sed_trans[numdof]; */4519 4520 /* Input* active_element_input=NULL; */4521 4522 4523 /* parameters->FindParam(&analysis_type,AnalysisTypeEnum); */4524 4525 /* GetDofList(&doflist,NoneApproximationEnum,GsetEnum); */4526 4527 /* /\*Get the flag to know if the efficient layer is present*\/ */4528 /* this->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); */4529 4530 /* if(isefficientlayer){ */4531 /* /\*Also get the flag to the transfer method*\/ */4532 /* this->parameters->FindParam(&transfermethod,HydrologydcTransferFlagEnum); */4533 /* this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); */4534 /* /\*Switch between the different transfer methods cases*\/ */4535 /* switch(transfermethod){ */4536 /* case 0: */4537 /* /\*Just keepping the transfer to zero, should be OK with the initial value of transfer*\/ */4538 /* break; */4539 /* case 1: */4540 4541 /* active_element_input=inputs->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); */4542 /* active_element_input->GetInputValue(&active_element); */4543 4544 /* GetInputListOnVertices(&sed_head[0],SedimentHeadEnum); */4545 /* GetInputListOnVertices(&sed_head_old[0],SedimentHeadOldEnum); */4546 /* GetInputListOnVertices(&sed_trans[0],HydrologydcSedimentTransmitivityEnum); */4547 /* GetInputListOnVertices(&epl_head[0],EplHeadEnum); */4548 /* GetInputListOnVertices(&epl_head_old[0],EplHeadOldEnum); */4549 /* GetInputListOnVertices(&epl_thickness[0],HydrologydcEplThicknessEnum); */4550 4551 /* this->parameters->FindParam(&leakage,HydrologydcLeakageFactorEnum); */4552 4553 /* sed_thick = matpar->GetSedimentThickness(); */4554 4555 /* if(!active_element){ */4556 4557 4558 /* /\*No transfer if the EPL is not active*\/ */4559 /* } */4560 /* else{ */4561 /* GetInputListOnVertices(&preceding_transfer[0],WaterTransferEnum); */4562 /* sedstoring=matpar->GetSedimentStoring(); */4563 /* epl_specificstoring=matpar->GetEplSpecificStoring(); */4564 4565 /* for(int i=0;i<numdof;i++){ */4566 /* this->GetHydrologyDCInefficientHmax(&h_max,this->nodes[i]); */4567 /* /\*EPL head higher than sediment head, transfer from the epl to the sediment*\/ */4568 /* if(epl_head[i]>sed_head[i]){ */4569 /* if(sed_head[i]>=h_max){ */4570 /* wh_trans=0.0; */4571 /* } */4572 /* else{ */4573 /* wh_trans=epl_specificstoring*epl_thickness[i]*sed_trans[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick); */4574 /* } */4575 /* } */4576 /* /\* EPL head lower than sediment head, transfer from the sediment to the epl *\/ */4577 /* else if(epl_head[i]<=sed_head[i]){ */4578 /* wh_trans=sedstoring*sed_trans[i]*(epl_head[i]-sed_head[i])/(leakage*sed_thick); */4579 /* } */4580 4581 /* /\*Assign output pointer*\/ */4582 /* transfer->SetValue(doflist[i],wh_trans,INS_VAL); */4583 /* } */4584 /* } */4585 /* break; */4586 /* default: */4587 /* _error_("no case higher than 1 for the Transfer method"); */4588 /* } */4589 /* } */4590 /* /\*Free ressources:*\/ */4591 /* xDelete<int>(doflist); */4592 }4593 /*}}}*/4594 4501 /*FUNCTION Tria::HydrologyEPLGetActive {{{*/ 4595 4502 void Tria::HydrologyEPLGetActive(Vector<IssmDouble>* active_vec){ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r17349 r17353 254 254 ElementMatrix* CreateEPLDomainMassMatrix(void); 255 255 void CreateHydrologyWaterVelocityInput(void); 256 // void GetHydrologyDCInefficientHmax(IssmDouble* ph_max,int index);257 256 void GetHydrologyDCInefficientHmax(IssmDouble* ph_max, Node* innode); 258 void GetHydrologyTransfer(Vector<IssmDouble>* transfer);259 257 void HydrologyEPLGetActive(Vector<IssmDouble>* active_vec); 260 258 void HydrologyEPLGetMask(Vector<IssmDouble>* vec_mask); -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r17294 r17353 1407 1407 } 1408 1408 /*}}}*/ 1409 void FemModel::HydrologyTransferx(void){ /*{{{*/1410 1411 Vector<IssmDouble>* transferg=NULL;1412 1413 /*Vector allocation*/1414 transferg=new Vector<IssmDouble>(nodes->NumberOfNodes());1415 1416 for (int i=0;i<elements->Size();i++){1417 1418 Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));1419 element->GetHydrologyTransfer(transferg);1420 }1421 /*Assemble*/1422 transferg->Assemble();1423 1424 /*Update Inputs*/1425 InputUpdateFromVectorx(this,transferg,WaterTransferEnum,NodesEnum);1426 delete transferg;1427 }1428 /*}}}*/1429 1409 void FemModel::HydrologyEPLThicknessx(void){ /*{{{*/ 1430 1410 -
issm/trunk-jpl/src/c/classes/FemModel.h
r17236 r17353 95 95 void UpdateConstraintsExtrudeFromBasex(); 96 96 void UpdateConstraintsExtrudeFromTopx(); 97 void HydrologyTransferx(void);98 97 void HydrologyEPLupdateDomainx(void); 99 98 void HydrologyEPLThicknessx(void); -
issm/trunk-jpl/src/c/cores/hydrology_core.cpp
r17012 r17353 93 93 if(VerboseSolution()) _printf0_(" saving results \n"); 94 94 if(isefficientlayer){ 95 int outputs[ 9] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum,WaterTransferEnum};96 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0], 9);95 int outputs[8] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum}; 96 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],8); 97 97 } 98 98 else{ -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r17334 r17353 130 130 HydrologyEfficientEnum, 131 131 HydrologySedimentKmaxEnum, 132 WaterTransferEnum,133 132 IndependentObjectEnum, 134 133 InversionControlParametersEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17334 r17353 138 138 case HydrologyEfficientEnum : return "HydrologyEfficient"; 139 139 case HydrologySedimentKmaxEnum : return "HydrologySedimentKmax"; 140 case WaterTransferEnum : return "WaterTransfer";141 140 case IndependentObjectEnum : return "IndependentObject"; 142 141 case InversionControlParametersEnum : return "InversionControlParameters"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17334 r17353 141 141 if(stage==2){ 142 142 if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum; 143 else if (strcmp(name,"WaterTransfer")==0) return WaterTransferEnum;144 143 else if (strcmp(name,"IndependentObject")==0) return IndependentObjectEnum; 145 144 else if (strcmp(name,"InversionControlParameters")==0) return InversionControlParametersEnum; … … 260 259 else if (strcmp(name,"SteadystateRequestedOutputs")==0) return SteadystateRequestedOutputsEnum; 261 260 else if (strcmp(name,"Surface")==0) return SurfaceEnum; 261 else if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; 262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"ThermalIsenthalpy")==0) return ThermalIsenthalpyEnum; 266 else if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; 265 if (strcmp(name,"ThermalIsdynamicbasalspc")==0) return ThermalIsdynamicbasalspcEnum; 267 266 else if (strcmp(name,"ThermalMaxiter")==0) return ThermalMaxiterEnum; 268 267 else if (strcmp(name,"ThermalPenaltyFactor")==0) return ThermalPenaltyFactorEnum; … … 383 382 else if (strcmp(name,"Results")==0) return ResultsEnum; 384 383 else if (strcmp(name,"GenericParam")==0) return GenericParamEnum; 384 else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum; 385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum; 389 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 388 if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 390 389 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum; 391 390 else if (strcmp(name,"Contour")==0) return ContourEnum; … … 506 505 else if (strcmp(name,"VzMesh")==0) return VzMeshEnum; 507 506 else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum; 507 else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum; 508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum; 512 else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; 511 if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum; 513 512 else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum; 514 513 else if (strcmp(name,"ThicknessAcrossGradient")==0) return ThicknessAcrossGradientEnum; … … 629 628 else if (strcmp(name,"Sset")==0) return SsetEnum; 630 629 else if (strcmp(name,"Verbose")==0) return VerboseEnum; 630 else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum; 631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum; 635 else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum; 634 if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum; 636 635 else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum; 637 636 else if (strcmp(name,"XY")==0) return XYEnum; -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
r17351 r17353 71 71 delete analysis; 72 72 } 73 /*For the initialization we compute the transfer without the mask if the EPL is not present*/74 femmodel->HydrologyTransferx();75 76 73 /*The real computation starts here, outermost loop is on the two layer system*/ 77 74 for(;;){
Note:
See TracChangeset
for help on using the changeset viewer.