- Timestamp:
- 07/10/20 10:50:37 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp ¶
r25247 r25252 238 238 Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum); 239 239 Input2* base_input = basalelement->GetInput2(BaseEnum); 240 Input2* old_wh_input = basalelement->GetInput2(SedimentHeadOldEnum); _assert_(old_wh_input); 240 241 241 242 /*Transfer related Inputs*/ … … 243 244 basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum); 244 245 } 246 245 247 /* Start looping on the number of gaussian points: */ 246 248 Gauss* gauss=basalelement->NewGauss(2); 247 249 248 250 for(int ig=gauss -> begin();ig<gauss->end();ig++){ 249 gauss ->GaussPoint(ig);250 basalelement ->JacobianDeterminant(&Jdet,xyz_list,gauss);251 gauss -> GaussPoint(ig); 252 basalelement -> JacobianDeterminant(&Jdet,xyz_list,gauss); 251 253 basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 252 254 basalelement->NodalFunctions(basis,gauss); … … 257 259 /*Diffusivity*/ 258 260 D_scalar=sediment_transmitivity*gauss->weight*Jdet; 261 //D_scalar=gauss->weight*Jdet; 259 262 if(dt!=0.) D_scalar=D_scalar*dt; 260 263 for(int i=0;i<numnodes;i++){ … … 263 266 } 264 267 } 268 265 269 /*Transient*/ 266 270 if(dt!=0.){ 267 271 D_scalar=sediment_storing*gauss->weight*Jdet; 272 //D_scalar=(sediment_storing/sediment_transmitivity)*gauss->weight*Jdet; 268 273 for(int i=0;i<numnodes;i++) for(int j=0;j<numnodes;j++) Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 274 269 275 /*Transfer EPL part*/ 270 276 if(isefficientlayer){ … … 272 278 transfer=GetHydrologyKMatrixTransfer(basalelement); 273 279 D_scalar=dt*transfer*gauss->weight*Jdet; 280 //D_scalar=dt*(transfer/sediment_transmitivity)*gauss->weight*Jdet; 274 281 for(int i=0;i<numnodes;i++) for(int j=0;j<numnodes;j++) Ke->values[i*numnodes+j] += D_scalar*basis[j]*basis[i]; 275 282 } … … 291 298 292 299 /*Intermediaries*/ 293 bool thawed_element;294 int domaintype;300 bool thawed_element; 301 int domaintype; 295 302 Element* basalelement; 296 303 … … 321 328 /*Intermediaries */ 322 329 bool active_element,isefficientlayer; 323 int smb_model,smbsubstepping; 324 int hydrologysubstepping,smb_averaging; 330 int smb_model; 331 int smbsubstepping; 332 int hydrologysubstepping; 333 int smb_averaging; 325 334 IssmDouble dt,scalar,sediment_storing; 326 335 IssmDouble water_head,sediment_transmitivity; 327 336 IssmDouble water_load,runoff_value,transfer; 328 IssmDouble Jdet ,time;337 IssmDouble Jdet; 329 338 330 339 IssmDouble *xyz_list = NULL; … … 346 355 basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 347 356 basalelement->FindParam(&smb_model,SmbEnum); 357 basalelement->FindParam(&smb_averaging,SmbAveragingEnum); 348 358 349 359 Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum); … … 353 363 Input2* SedTrans_input = basalelement->GetInput2(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input); 354 364 365 IssmDouble time; 366 basalelement->FindParam(&time,TimeEnum); 367 355 368 if(dt!= 0.){ 356 369 old_wh_input = basalelement->GetInput2(SedimentHeadOldEnum); _assert_(old_wh_input); 357 370 } 358 371 if(smb_model==SMBgradientscomponentsEnum){ 359 basalelement->FindParam(&time,TimeEnum);360 372 basalelement->FindParam(&smbsubstepping,SmbStepsPerStepEnum); 361 373 basalelement->FindParam(&hydrologysubstepping,HydrologyStepsPerStepEnum); … … 371 383 else{ 372 384 //finer stepping in smb, we average the runoff from transient input 373 basalelement->FindParam(&smb_averaging,SmbAveragingEnum);374 385 dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum,time-dt,time,smb_averaging); _assert_(dummy_input); 375 386 } … … 384 395 /* Start looping on the number of gaussian points: */ 385 396 Gauss* gauss=basalelement->NewGauss(2); 397 398 IssmDouble yts; 399 basalelement->FindParam(&yts,ConstantsYtsEnum); 386 400 387 401 for(int ig=gauss->begin();ig<gauss->end();ig++){ … … 397 411 else runoff_value = 0.; 398 412 scalar = Jdet*gauss->weight*(water_load+runoff_value); 413 //scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity; 399 414 if(dt!=0.) scalar = scalar*dt; 400 415 for(int i=0;i<numnodes;i++){ … … 409 424 else runoff_value = 0.; 410 425 scalar = Jdet*gauss->weight*(water_load+runoff_value); 426 //scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity; 411 427 if(dt!=0.) scalar = scalar*dt; 412 428 for(int i=0;i<numnodes;i++){ … … 429 445 } 430 446 scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer)); 447 //scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer))/sediment_transmitivity; 431 448 for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i]; 432 449 } 433 450 else{ 434 451 scalar = Jdet*gauss->weight*(water_head*sediment_storing); 452 //scalar = Jdet*gauss->weight*(water_head*sediment_storing)/sediment_transmitivity; 435 453 for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i]; 436 454 } … … 553 571 IssmDouble storing,yield; 554 572 IssmDouble base_elev,prestep_head,water_sheet; 555 IssmDouble porewater_mass = element->FindParam(HydrologydcSedimentPoreWaterMassEnum); 556 IssmDouble layer_compressibility = element->FindParam(HydrologydcSedimentLayerCompressibilityEnum); 573 IssmDouble rho_freshwater = element->FindParam(MaterialsRhoFreshwaterEnum); 574 IssmDouble g = element->FindParam(ConstantsGEnum); 575 IssmDouble sediment_porosity = element->FindParam(HydrologydcSedimentPorosityEnum); 557 576 IssmDouble sediment_thickness = element->FindParam(HydrologydcSedimentThicknessEnum); 577 IssmDouble sediment_compressibility = element->FindParam(HydrologydcSedimentCompressibilityEnum); 578 IssmDouble water_compressibility = element->FindParam(HydrologydcWaterCompressibilityEnum); 558 579 element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum); 559 580 switch(unconf_scheme){ 560 581 case 0: 561 sediment_storing= porewater_mass*sediment_thickness*layer_compressibility;582 sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 562 583 break; 563 584 case 1: 564 yield = element->FindParam(HydrologydcSedimentPorosityEnum);565 585 base_input->GetInputValue(&base_elev,gauss); 566 586 sed_head_input->GetInputValue(&prestep_head,gauss); 567 568 587 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 569 storing=porewater_mass*sediment_thickness*layer_compressibility; 588 589 /* if (water_sheet<sediment_thickness){ */ 590 /* sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); */ 591 /* } */ 592 /* else{ */ 593 /* sediment_storing=sediment_porosity; */ 594 /* } */ 595 storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 570 596 //using logistic function for heavyside approximation 571 597 expfac=10.; 598 yield=sediment_porosity; 572 599 sediment_storing=yield+(storing-yield)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness))); 573 600 break; … … 579 606 IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input,Input2* SedTrans_input){/*{{{*/ 580 607 int unconf_scheme; 608 IssmDouble ratio,expfac; 581 609 IssmDouble sediment_transmitivity; 582 610 IssmDouble FullLayer_transmitivity; 611 IssmDouble meltingrate; 612 IssmDouble groundedice; 583 613 IssmDouble base_elev,prestep_head,water_sheet; 584 614 IssmDouble sediment_thickness = element->FindParam(HydrologydcSedimentThicknessEnum);
Note:
See TracChangeset
for help on using the changeset viewer.