Changeset 22277
- Timestamp:
- 11/28/17 09:35:29 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
r22236 r22277 223 223 /*Retrieve all inputs and parameters*/ 224 224 basalelement->GetVerticesCoordinates(&xyz_list); 225 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 225 //basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 226 basalelement ->FindParam(&dt,HydrologydcHydrodtEnum); 226 227 227 228 Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input); … … 332 333 /*Retrieve all inputs and parameters*/ 333 334 basalelement->GetVerticesCoordinates(&xyz_list); 334 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 335 //basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 336 basalelement ->FindParam(&dt,HydrologydcHydrodtEnum); 335 337 336 338 Input* epl_thick_input = basalelement->GetInput(HydrologydcEplThicknessEnum); _assert_(epl_thick_input); … … 555 557 Input* active_element_input=element->GetInput(HydrologydcMaskEplactiveEltEnum); _assert_(active_element_input); 556 558 active_element_input->GetInputValue(&active_element); 557 element->FindParam(&dt,TimesteppingTimeStepEnum); 559 //element->FindParam(&dt,TimesteppingTimeStepEnum); 560 element ->FindParam(&dt,HydrologydcHydrodtEnum); 558 561 559 562 /*For now, assuming just one way to compute EPL thickness*/ … … 725 728 basalelement->AddInput(HydrologydcEplThicknessEnum,epl_thickness,basalelement->GetElementType()); 726 729 727 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 730 if(domaintype!=Domain2DhorizontalEnum){ 731 basalelement->DeleteMaterials(); 732 delete basalelement; 733 } 728 734 xDelete<IssmDouble>(epl_thickness); 729 735 xDelete<IssmDouble>(old_active); -
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r21964 r22277 19 19 int penalty_lock; 20 20 int hydro_maxiter; 21 int hydroslices; 22 int numoutputs; 21 23 bool isefficientlayer; 22 24 IssmDouble penalty_factor; … … 24 26 IssmDouble leakagefactor; 25 27 IssmDouble sedimentlimit; 28 char** requestedoutputs = NULL; 26 29 27 30 /*retrieve some parameters: */ … … 33 36 iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" ); 34 37 iomodel->FetchData(&transfer_flag, "md.hydrology.transfer_flag" ); 35 iomodel->FetchData(&unconfined_flag, "md.hydrology.unconfined_flag" ); 38 iomodel->FetchData(&unconfined_flag, "md.hydrology.unconfined_flag" ); 39 iomodel->FetchData(&penalty_lock, "md.hydrology.penalty_lock" ); 40 iomodel->FetchData(&hydro_maxiter, "md.hydrology.max_iter" ); 41 iomodel->FetchData(&hydroslices, "md.hydrology.steps_per_step"); 42 iomodel->FetchData(&isefficientlayer, "md.hydrology.isefficientlayer"); 36 43 iomodel->FetchData(&penalty_factor, "md.hydrology.penalty_factor" ); 37 iomodel->FetchData(&isefficientlayer, "md.hydrology.isefficientlayer");38 iomodel->FetchData(&hydro_maxiter, "md.hydrology.max_iter" );39 iomodel->FetchData(&penalty_lock, "md.hydrology.penalty_lock" );40 44 iomodel->FetchData(&rel_tol, "md.hydrology.rel_tol" ); 41 45 … … 46 50 parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock)); 47 51 parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter)); 52 parameters->AddObject(new IntParam(HydrologydcStepsPerStepEnum,hydroslices)); 53 48 54 parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer)); 49 55 parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor)); … … 57 63 parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit)); 58 64 } 65 /*Requested outputs*/ 66 iomodel->FindConstant(&requestedoutputs,&numoutputs,"md.hydrology.requested_outputs"); 67 parameters->AddObject(new IntParam(HydrologyNumRequestedOutputsEnum,numoutputs)); 68 if(numoutputs)parameters->AddObject(new StringArrayParam(HydrologyRequestedOutputsEnum,requestedoutputs,numoutputs)); 69 iomodel->DeleteData(&requestedoutputs,numoutputs,"md.hydrology.requested_outputs"); 59 70 }/*}}}*/ 60 71 … … 96 107 if(isefficientlayer){ 97 108 iomodel->FetchDataToInput(elements,"md.hydrology.mask_eplactive_node",HydrologydcMaskEplactiveNodeEnum); 109 iomodel->FetchDataToInput(elements,"md.initialization.epl_head",EplHeadEnum); 98 110 } 99 111 }/*}}}*/ … … 209 221 /*Retrieve all inputs and parameters*/ 210 222 basalelement ->GetVerticesCoordinates(&xyz_list); 211 basalelement ->FindParam(&dt,TimesteppingTimeStepEnum); 223 //basalelement ->FindParam(&dt,TimesteppingTimeStepEnum); 224 basalelement ->FindParam(&dt,HydrologydcHydrodtEnum); 212 225 basalelement ->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 213 226 Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 214 227 Input* sed_head_input = basalelement->GetInput(SedimentHeadEnum); 215 228 Input* base_input = basalelement->GetInput(BaseEnum); 229 Input* old_wh_input = basalelement->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input); 216 230 217 231 /*Transfer related Inputs*/ … … 232 246 /*Diffusivity*/ 233 247 D_scalar=sediment_transmitivity*gauss->weight*Jdet; 248 //D_scalar=gauss->weight*Jdet; 234 249 if(dt!=0.) D_scalar=D_scalar*dt; 235 250 D[0][0]=D_scalar; … … 245 260 basalelement->NodalFunctions(&basis[0],gauss); 246 261 D_scalar=sediment_storing*gauss->weight*Jdet; 262 //D_scalar=(sediment_storing/sediment_transmitivity)*gauss->weight*Jdet; 247 263 TripleMultiply(basis,numnodes,1,0, 248 264 &D_scalar,1,1,0, … … 257 273 basalelement->NodalFunctions(&basis[0],gauss); 258 274 D_scalar=dt*transfer*gauss->weight*Jdet; 275 //D_scalar=dt*(transfer/sediment_transmitivity)*gauss->weight*Jdet; 259 276 TripleMultiply(basis,numnodes,1,0, 260 277 &D_scalar,1,1,0, … … 270 287 xDelete<IssmDouble>(basis); 271 288 delete gauss; 272 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 289 if(domaintype!=Domain2DhorizontalEnum){ 290 basalelement->DeleteMaterials(); 291 delete basalelement; 292 } 273 293 return Ke; 274 294 }/*}}}*/ … … 296 316 bool active_element,isefficientlayer; 297 317 IssmDouble dt,scalar,sediment_storing; 298 IssmDouble water_head ;318 IssmDouble water_head,sediment_transmitivity; 299 319 IssmDouble water_load,transfer; 300 320 IssmDouble Jdet; … … 313 333 /*Retrieve all inputs and parameters*/ 314 334 basalelement->GetVerticesCoordinates(&xyz_list); 315 basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 335 //basalelement->FindParam(&dt,TimesteppingTimeStepEnum); 336 basalelement ->FindParam(&dt,HydrologydcHydrodtEnum); 316 337 basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 317 338 … … 320 341 Input* base_input = basalelement->GetInput(BaseEnum); 321 342 Input* water_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input); 343 Input* SedTrans_input = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 322 344 323 345 if(dt!= 0.){ … … 335 357 basalelement->JacobianDeterminant(&Jdet,xyz_list,gauss); 336 358 basalelement->NodalFunctions(basis,gauss); 359 sediment_transmitivity = SedimentTransmitivity(basalelement,gauss,sed_head_input,base_input,SedTrans_input); 337 360 338 361 /*Loading term*/ … … 340 363 water_input->GetInputValue(&water_load,gauss); 341 364 scalar = Jdet*gauss->weight*(water_load); 365 //scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity; 342 366 if(dt!=0.) scalar = scalar*dt; 343 367 for(int i=0;i<numnodes;i++){ … … 351 375 water_input->GetInputValue(&water_load,gauss); 352 376 scalar = Jdet*gauss->weight*(water_load); 377 //scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity; 353 378 if(dt!=0.) scalar = scalar*dt; 354 379 for(int i=0;i<numnodes;i++){ … … 372 397 } 373 398 scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer)); 399 //scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer))/sediment_transmitivity; 374 400 for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i]; 375 401 } 376 402 else{ 377 403 scalar = Jdet*gauss->weight*(water_head*sediment_storing); 404 //scalar = Jdet*gauss->weight*(water_head*sediment_storing)/sediment_transmitivity; 378 405 for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i]; 379 406 } … … 384 411 xDelete<IssmDouble>(basis); 385 412 delete gauss; 386 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 413 if(domaintype!=Domain2DhorizontalEnum){ 414 basalelement->DeleteMaterials(); 415 delete basalelement; 416 } 387 417 return pe; 388 418 }/*}}}*/ … … 470 500 IssmDouble* thickness = xNew<IssmDouble>(numnodes); 471 501 IssmDouble* base = xNew<IssmDouble>(numnodes); 502 IssmDouble* transmitivity = xNew<IssmDouble>(numnodes); 472 503 473 504 basalelement->FindParam(&kmax,HydrologySedimentKmaxEnum); … … 479 510 basalelement->GetInputListOnVertices(thickness,ThicknessEnum); 480 511 basalelement->GetInputListOnVertices(base,BaseEnum); 481 512 basalelement->GetInputListOnVertices(transmitivity,HydrologydcSedimentTransmitivityEnum); 482 513 kappa=kmax*pow(10.,penalty_factor); 483 514 … … 486 517 if(values[i]>h_max) { 487 518 residual[i] = kappa*(values[i]-h_max); 519 //residual[i] = kappa*(values[i]-h_max)*transmitivity[i]; 488 520 } 489 521 else{ … … 495 527 } 496 528 xDelete<IssmDouble>(thickness); 529 xDelete<IssmDouble>(transmitivity); 497 530 xDelete<IssmDouble>(base); 498 531 } … … 500 533 /*Add input to the element: */ 501 534 element->AddBasalInput(SedimentHeadEnum,values,P1Enum); 535 element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum); 502 536 element->AddBasalInput(SedimentHeadResidualEnum,residual,P1Enum); 503 element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum);504 537 505 538 /*Free ressources:*/ … … 508 541 xDelete<IssmDouble>(pressure); 509 542 xDelete<int>(doflist); 510 if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;}; 543 if(domaintype!=Domain2DhorizontalEnum){ 544 basalelement->DeleteMaterials(); 545 delete basalelement; 546 } 511 547 }/*}}}*/ 512 548 … … 520 556 IssmDouble expfac; 521 557 IssmDouble sediment_storing; 522 IssmDouble storing ;558 IssmDouble storing,yield; 523 559 IssmDouble base_elev,prestep_head,water_sheet; 524 560 IssmDouble rho_freshwater = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum); … … 538 574 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 539 575 576 /* if (water_sheet<sediment_thickness){ */ 577 /* sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); */ 578 /* } */ 579 /* else{ */ 580 /* sediment_storing=sediment_porosity; */ 581 /* } */ 540 582 storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 541 542 // using logistic function for heavyside approximation 583 //using logistic function for heavyside approximation 543 584 expfac=10.; 544 sediment_storing=sediment_porosity+(storing-sediment_porosity)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness))); 585 yield=sediment_porosity; 586 sediment_storing=yield+(storing-yield)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness))); 545 587 break; 546 588 default: … … 568 610 sed_head_input->GetInputValue(&prestep_head,gauss); 569 611 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 570 571 if (water_sheet<=sediment_thickness){572 sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness;573 }574 else{575 sediment_transmitivity=FullLayer_transmitivity;576 } 612 613 //min definition of the if test 614 sediment_transmitivity=FullLayer_transmitivity*min(water_sheet/sediment_thickness,1.); 615 if (sediment_transmitivity==0){ 616 sediment_transmitivity=1.0e-20; 617 } 618 577 619 break; 578 620 default: … … 632 674 case 1: 633 675 element->FindParam(&leakage,HydrologydcLeakageFactorEnum); 634 transfer= leakage;676 transfer=+leakage; 635 677 break; 636 678 default: … … 656 698 _assert_(epl_head_input); 657 699 epl_head_input->GetInputValue(&epl_head,gauss); 700 if (element->Id()==42){ 701 printf("epl head in sed Pvec transfer is %f\n",epl_head); 702 } 658 703 element->FindParam(&leakage,HydrologydcLeakageFactorEnum); 659 transfer= epl_head*leakage;704 transfer=+epl_head*leakage; 660 705 break; 661 706 default: -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r22266 r22277 1773 1773 name==HydrologydcMaskEplactiveNodeEnum || 1774 1774 name==HydrologyHeadEnum || 1775 1775 name==HydrologyHeadOldEnum || 1776 1776 name==StressbalanceConvergenceNumStepsEnum || 1777 1777 name==MeshVertexonbaseEnum || -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r22276 r22277 4458 4458 } 4459 4459 /*}}}*/ 4460 void FemModel::InitTransientOutputx(int* input_enum,int numoutputs){ /*{{{*/ 4461 4462 for(int i=0;i<numoutputs;i++){ 4463 if(input_enum[i]<0){ 4464 _error_("Can't deal with non enum fields for result Stack"); 4465 } 4466 else{ 4467 for(int j=0;j<elements->Size();j++){ 4468 TransientInput* transient_input = new TransientInput(input_enum[i]); 4469 /*Intermediaries*/ 4470 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 4471 transient_input->Configure(element->parameters); 4472 element->inputs->AddInput(transient_input); 4473 } 4474 } 4475 } 4476 } 4477 /*}}}*/ 4478 void FemModel::StackTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs){ /*{{{*/ 4479 4480 for(int i=0;i<numoutputs;i++){ 4481 if(input_enum[i]<0){ 4482 _error_("Can't deal with non enum fields for result Stack"); 4483 } 4484 else{ 4485 for(int j=0;j<elements->Size();j++){ 4486 /*Intermediaries*/ 4487 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 4488 TransientInput* stacking_input=NULL; 4489 Input* input=element->inputs->GetInput(HydrologydcStackedNEnum); _assert_(input); 4490 Input* input_to_stack=element->GetInput(input_enum[i]); _assert_(input_to_stack); 4491 stacking_input=dynamic_cast<TransientInput*>(input); 4492 4493 int numvertices = element->GetNumberOfVertices(); 4494 IssmDouble* N=xNew<IssmDouble>(numvertices); 4495 element->GetInputListOnVertices(&N[0],input_enum[i]); 4496 switch(element->ObjectEnum()){ 4497 case TriaEnum: 4498 stacking_input->AddTimeInput(new TriaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime); 4499 break; 4500 case PentaEnum: 4501 stacking_input->AddTimeInput(new PentaInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime); 4502 break; 4503 case TetraEnum: 4504 stacking_input->AddTimeInput(new TetraInput(HydrologydcStackedNEnum,&N[0],P1Enum),hydrotime); 4505 break; 4506 default: _error_("Not implemented yet"); 4507 } 4508 xDelete<IssmDouble>(N); 4509 } 4510 } 4511 } 4512 } 4513 /*}}}*/ 4514 void FemModel::AverageTransientOutputx(int* input_enum,IssmDouble init_time,int numoutputs){ /*{{{*/ 4515 IssmDouble* time_averaged=NULL; 4516 for(int i=0;i<numoutputs;i++){ 4517 if(input_enum[i]<0){ 4518 _error_("Can't deal with non enum fields for result Stack"); 4519 } 4520 else{ 4521 for(int j=0;j<elements->Size();j++){ 4522 /*Intermediaries*/ 4523 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(j)); 4524 int numvertices = element->GetNumberOfVertices(); 4525 //xNew<IssmDouble>(numvertices); 4526 4527 Input* input=element->inputs->GetInput(input_enum[i]); _assert_(input); 4528 TransientInput* stacking_input=NULL; 4529 stacking_input=dynamic_cast<TransientInput*>(input); 4530 stacking_input->GetInputAverageOnTimes(&time_averaged, init_time); 4531 4532 element->AddInput(TimeAverageEffectivePressureEnum,time_averaged,P1Enum); 4533 } 4534 } 4535 } 4536 } 4537 /*}}}*/ 4460 4538 #ifdef _HAVE_JAVASCRIPT_ 4461 4539 FemModel::FemModel(IssmDouble* buffer, int buffersize, char* toolkits, char* solution, char* modelname,ISSM_MPI_Comm incomm, bool trace){ /*{{{*/ -
issm/trunk-jpl/src/c/classes/FemModel.h
r22266 r22277 149 149 void UpdateConstraintsExtrudeFromTopx(); 150 150 void UpdateConstraintsL2ProjectionEPLx(IssmDouble* pL2count); 151 void InitTransientOutputx(int* input_enum, int numoutputs); 152 void StackTransientOutputx(int* input_enum, IssmDouble hydrotime, int numoutputs); 153 void AverageTransientOutputx(int* input_enum,IssmDouble hydrotime,int numoutputs); 151 154 void UpdateConstraintsx(void); 152 155 int UpdateVertexPositionsx(void); -
issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp
r21920 r22277 272 272 273 273 int i; 274 IssmDouble *times = NULL;275 IssmDouble *values = NULL;274 IssmDouble* times = NULL; 275 IssmDouble* values = NULL; 276 276 int numsteps; 277 277 bool iscurrenttime_included = false; … … 291 291 292 292 for(i=0;i<numsteps;i++){ 293 294 293 if((iscurrenttime_included==false) && (i==(numsteps-1))){ 295 296 294 /*Retrieve interpolated values for current time step: */ 297 295 Input* input=GetTimeInput(currenttime); … … 311 309 } 312 310 /*}}}*/ 311 void TransientInput::GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time){/*{{{*/ 312 313 IssmDouble time; 314 IssmDouble preceding_time; 315 IssmDouble values[3] = {0.0,0.0,0.0}; 316 317 for(int i=0;i<this->numtimesteps;i++){ 318 time = this->timesteps[i]; 319 if(i==0){ 320 preceding_time = init_time; 321 } 322 else{ 323 preceding_time = this->timesteps[i-1]; 324 } 325 TriaInput* input = (TriaInput*)this->inputs->GetObjectByOffset(i); _assert_(input); 326 int numnodes = input->NumberofNodes(input->interpolation_type); 327 for(int j=0;j<numnodes;j++){ 328 values[j]+=(input->values[j]*(time-preceding_time)); 329 } 330 } 331 for(int j = 0;j<3;j++){ 332 values[j]/=(this->timesteps[this->numtimesteps-1]-init_time); 333 //printf("final value is %e\n",values[j]); 334 } 335 *pvalues=values; 336 } 337 /*}}}*/ 313 338 314 339 /*Intermediary*/ -
issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h
r21974 r22277 64 64 void GetInputValue(IssmDouble* pvalue,Gauss* gauss ,int index){_error_("not implemented yet");}; 65 65 void GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime); 66 void GetInputAverageOnTimes(IssmDouble** pvalues, IssmDouble init_time); 66 67 int GetInputInterpolationType(){_error_("not implemented yet!");}; 67 68 IssmDouble GetTimeByOffset(int offset); -
issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp
r21974 r22277 223 223 } 224 224 /*}}}*/ 225 225 226 void TriaInput::GetInputUpToCurrentTimeAverages(IssmDouble** pvalues, IssmDouble** ptimes, int* pnumtimes, IssmDouble currenttime){/*{{{*/ 226 227 -
issm/trunk-jpl/src/c/cores/hydrology_core.cpp
r22185 r22277 14 14 /*intermediary*/ 15 15 int hydrology_model; 16 int solution_type; 16 17 bool save_results; 17 18 bool modify_loads=true; … … 21 22 femmodel->parameters->FindParam(&save_results,SaveResultsEnum); 22 23 femmodel->parameters->FindParam(&hydrology_model,HydrologyModelEnum); 23 24 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 25 24 26 if(VerboseSolution()) _printf0_(" computing water heads\n"); 25 27 … … 52 54 /*Using the double continuum model*/ 53 55 else if (hydrology_model==HydrologydcEnum){ 54 InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum); 55 femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 56 if (isefficientlayer){ 57 InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum); 58 InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum); 56 /*intermediary: */ 57 int step,hydroslices; 58 int numoutputs; 59 char **requested_outputs = NULL; 60 IssmDouble time,init_time,hydrotime,yts; 61 IssmDouble dt,hydrodt; 62 63 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 64 femmodel->parameters->FindParam(&step,StepEnum); 65 femmodel->parameters->FindParam(&time,TimeEnum); 66 femmodel->parameters->FindParam(&hydroslices,HydrologydcStepsPerStepEnum); 67 femmodel->parameters->FindParam(&yts,ConstantsYtsEnum); 68 init_time = time-dt; //getting the time back to the start of the timestep 69 hydrotime=init_time; 70 hydrodt=dt/hydroslices; //computing hydro dt from dt and a divider 71 femmodel->parameters->AddObject(new DoubleParam(HydrologydcHydrodtEnum,hydrodt)); 72 femmodel->parameters->FindParam(&numoutputs,HydrologyNumRequestedOutputsEnum); 73 if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,HydrologyRequestedOutputsEnum); 74 75 if(dt>0){ 76 if(hydroslices>1){ 77 int trans_input[1]={HydrologydcStackedNEnum}; 78 femmodel->InitTransientOutputx(&trans_input[0],1); 79 } 80 while(hydrotime<time-(yts*DBL_EPSILON)){ //loop on hydro dts 81 hydrotime+=hydrodt; 82 InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum); 83 femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 84 if (isefficientlayer){ 85 InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum); 86 InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum); 87 } 88 /*Proceed now to heads computations*/ 89 solutionsequence_hydro_nonlinear(femmodel); 90 if (hydroslices>1){ 91 int output[1]={EffectivePressureEnum}; 92 femmodel->StackTransientOutputx(&output[0],hydrotime,1); 93 } 94 } 95 if(hydroslices>1){ 96 int output[1]={HydrologydcStackedNEnum}; 97 femmodel->AverageTransientOutputx(&output[0],init_time,1); 98 } 59 99 } 60 61 /*Proceed now to heads computations*/ 62 solutionsequence_hydro_nonlinear(femmodel); 63 100 else{ 101 InputDuplicatex(femmodel,SedimentHeadEnum,SedimentHeadOldEnum); 102 femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 103 if (isefficientlayer){ 104 InputDuplicatex(femmodel,EplHeadEnum,EplHeadOldEnum); 105 InputDuplicatex(femmodel,HydrologydcEplThicknessEnum,HydrologydcEplThicknessOldEnum); 106 } 107 /*Proceed now to heads computations*/ 108 solutionsequence_hydro_nonlinear(femmodel); 109 } 64 110 if(save_results){ 65 111 if(VerboseSolution()) _printf0_(" saving results \n"); 66 if(isefficientlayer){67 int outputs[9] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum,EffectivePressureEnum};68 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],9);69 }70 else{71 int outputs[3] = {SedimentHeadEnum,SedimentHeadResidualEnum,EffectivePressureEnum};72 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);73 }74 /*unload results*/75 if(VerboseSolution()) _printf0_(" saving temporary results\n");76 OutputResultsx(femmodel);112 femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs); 113 /*unload results removed 23/11 needs checking*/ 114 /* if(VerboseSolution()) _printf0_(" saving temporary results\n"); */ 115 /* OutputResultsx(femmodel); */ 116 } 117 /*Free ressources:*/ 118 if(numoutputs){ 119 for(int i=0;i<numoutputs;i++){ 120 xDelete<char>(requested_outputs[i]); 121 } 122 xDelete<char*>(requested_outputs); 77 123 } 78 124 } 125 79 126 80 127 else if (hydrology_model==HydrologysommersEnum){ -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22276 r22277 131 131 HydrologyshreveStabilizationEnum, 132 132 HydrologydcEnum, 133 HydrologyNumRequestedOutputsEnum, 134 HydrologyRequestedOutputsEnum, 135 HydrologydcHydrodtEnum, 136 HydrologydcStepsPerStepEnum, 133 137 SedimentHeadEnum, 134 138 SedimentHeadOldEnum, 135 139 SedimentHeadResidualEnum, 136 140 EffectivePressureEnum, 141 TimeAverageEffectivePressureEnum, 137 142 EplHeadEnum, 138 143 EplHeadOldEnum, … … 140 145 EplHeadSlopeYEnum, 141 146 EplZigZagCounterEnum, 147 MeanEffectivePressureEnum, 148 HydrologydcStackedNEnum, 142 149 HydrologydcMaxIterEnum, 143 150 HydrologydcRelTolEnum, … … 182 189 HydrologyReynoldsEnum, 183 190 HydrologyNeumannfluxEnum, 184 191 HydrologyRelaxationEnum, 185 192 HydrologyBasalFluxEnum, 186 193 HydrologyStorageEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22276 r22277 137 137 case HydrologyshreveStabilizationEnum : return "HydrologyshreveStabilization"; 138 138 case HydrologydcEnum : return "Hydrologydc"; 139 case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs"; 140 case HydrologyRequestedOutputsEnum : return "HydrologyRequestedOutputs"; 141 case HydrologydcHydrodtEnum : return "HydrologydcHydrodt"; 142 case HydrologydcStepsPerStepEnum : return "HydrologydcStepsPerStep"; 139 143 case SedimentHeadEnum : return "SedimentHead"; 140 144 case SedimentHeadOldEnum : return "SedimentHeadOld"; 141 145 case SedimentHeadResidualEnum : return "SedimentHeadResidual"; 142 146 case EffectivePressureEnum : return "EffectivePressure"; 147 case TimeAverageEffectivePressureEnum : return "TimeAverageEffectivePressure"; 143 148 case EplHeadEnum : return "EplHead"; 144 149 case EplHeadOldEnum : return "EplHeadOld"; … … 146 151 case EplHeadSlopeYEnum : return "EplHeadSlopeY"; 147 152 case EplZigZagCounterEnum : return "EplZigZagCounter"; 153 case MeanEffectivePressureEnum : return "MeanEffectivePressure"; 154 case HydrologydcStackedNEnum : return "HydrologydcStackedN"; 148 155 case HydrologydcMaxIterEnum : return "HydrologydcMaxIter"; 149 156 case HydrologydcRelTolEnum : return "HydrologydcRelTol"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22276 r22277 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum; 142 if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum; 143 else if (strcmp(name,"HydrologyRequestedOutputs")==0) return HydrologyRequestedOutputsEnum; 144 else if (strcmp(name,"HydrologydcHydrodt")==0) return HydrologydcHydrodtEnum; 145 else if (strcmp(name,"HydrologydcStepsPerStep")==0) return HydrologydcStepsPerStepEnum; 146 else if (strcmp(name,"SedimentHead")==0) return SedimentHeadEnum; 143 147 else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum; 144 148 else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum; 145 149 else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum; 150 else if (strcmp(name,"TimeAverageEffectivePressure")==0) return TimeAverageEffectivePressureEnum; 146 151 else if (strcmp(name,"EplHead")==0) return EplHeadEnum; 147 152 else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum; … … 149 154 else if (strcmp(name,"EplHeadSlopeY")==0) return EplHeadSlopeYEnum; 150 155 else if (strcmp(name,"EplZigZagCounter")==0) return EplZigZagCounterEnum; 156 else if (strcmp(name,"MeanEffectivePressure")==0) return MeanEffectivePressureEnum; 157 else if (strcmp(name,"HydrologydcStackedN")==0) return HydrologydcStackedNEnum; 151 158 else if (strcmp(name,"HydrologydcMaxIter")==0) return HydrologydcMaxIterEnum; 152 159 else if (strcmp(name,"HydrologydcRelTol")==0) return HydrologydcRelTolEnum; … … 253 260 else if (strcmp(name,"DamageHealing")==0) return DamageHealingEnum; 254 261 else if (strcmp(name,"DamageStressThreshold")==0) return DamageStressThresholdEnum; 255 else if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"DamageKappa")==0) return DamageKappaEnum; 256 266 else if (strcmp(name,"DamageStabilization")==0) return DamageStabilizationEnum; 257 267 else if (strcmp(name,"DamageMaxiter")==0) return DamageMaxiterEnum; … … 260 270 else if (strcmp(name,"DamageEvolutionNumRequestedOutputs")==0) return DamageEvolutionNumRequestedOutputsEnum; 261 271 else if (strcmp(name,"DamageEvolutionRequestedOutputs")==0) return DamageEvolutionRequestedOutputsEnum; 262 else stage=3; 263 } 264 if(stage==3){ 265 if (strcmp(name,"Damage")==0) return DamageEnum; 272 else if (strcmp(name,"Damage")==0) return DamageEnum; 266 273 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 267 274 else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum; … … 376 383 else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum; 377 384 else if (strcmp(name,"TimesteppingTimeStep")==0) return TimesteppingTimeStepEnum; 378 else if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"TimesteppingInterpForcings")==0) return TimesteppingInterpForcingsEnum; 379 389 else if (strcmp(name,"TransientIssmb")==0) return TransientIssmbEnum; 380 390 else if (strcmp(name,"TransientIscoupler")==0) return TransientIscouplerEnum; … … 383 393 else if (strcmp(name,"TransientIsmasstransport")==0) return TransientIsmasstransportEnum; 384 394 else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum; 395 else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum; 389 396 else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum; 390 397 else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum; … … 499 506 else if (strcmp(name,"SmbAccumulation")==0) return SmbAccumulationEnum; 500 507 else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum; 501 else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum; 502 512 else if (strcmp(name,"SMBmeltcomponents")==0) return SMBmeltcomponentsEnum; 503 513 else if (strcmp(name,"SmbMelt")==0) return SmbMeltEnum; … … 506 516 else if (strcmp(name,"SMBgradientsela")==0) return SMBgradientselaEnum; 507 517 else if (strcmp(name,"SmbEla")==0) return SmbElaEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum; 518 else if (strcmp(name,"SmbBMax")==0) return SmbBMaxEnum; 512 519 else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum; 513 520 else if (strcmp(name,"Adjointp")==0) return AdjointpEnum; … … 622 629 else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; 623 630 else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; 624 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 625 635 else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum; 626 636 else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum; … … 629 639 else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum; 630 640 else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 641 else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 635 642 else if (strcmp(name,"Outputdefinition7")==0) return Outputdefinition7Enum; 636 643 else if (strcmp(name,"Outputdefinition8")==0) return Outputdefinition8Enum; … … 745 752 else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum; 746 753 else if (strcmp(name,"SubelementMigration2")==0) return SubelementMigration2Enum; 747 else if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"SubelementMigration3")==0) return SubelementMigration3Enum; 748 758 else if (strcmp(name,"Contact")==0) return ContactEnum; 749 759 else if (strcmp(name,"GroundingOnly")==0) return GroundingOnlyEnum; … … 752 762 else if (strcmp(name,"Colinear")==0) return ColinearEnum; 753 763 else if (strcmp(name,"ControlSteady")==0) return ControlSteadyEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"Fset")==0) return FsetEnum; 764 else if (strcmp(name,"Fset")==0) return FsetEnum; 758 765 else if (strcmp(name,"Gradient1")==0) return Gradient1Enum; 759 766 else if (strcmp(name,"Gradient2")==0) return Gradient2Enum; … … 868 875 else if (strcmp(name,"AmrRestart")==0) return AmrRestartEnum; 869 876 else if (strcmp(name,"AmrNeopz")==0) return AmrNeopzEnum; 870 else if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"AmrLevelMax")==0) return AmrLevelMaxEnum; 871 881 else if (strcmp(name,"AmrLag")==0) return AmrLagEnum; 872 882 else if (strcmp(name,"AmrBamg")==0) return AmrBamgEnum; … … 875 885 else if (strcmp(name,"AmrField")==0) return AmrFieldEnum; 876 886 else if (strcmp(name,"AmrErr")==0) return AmrErrEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum; 887 else if (strcmp(name,"AmrKeepMetric")==0) return AmrKeepMetricEnum; 881 888 else if (strcmp(name,"AmrGradation")==0) return AmrGradationEnum; 882 889 else if (strcmp(name,"AmrGroundingLineResolution")==0) return AmrGroundingLineResolutionEnum; … … 991 998 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 992 999 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; 993 else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum; 994 1004 else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum; 995 1005 else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum; … … 998 1008 else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum; 999 1009 else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum; 1010 else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum; 1004 1011 else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum; 1005 1012 else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
Note:
See TracChangeset
for help on using the changeset viewer.