Ignore:
Timestamp:
07/10/20 10:50:37 (5 years ago)
Author:
jdquinn
Message:

BUG: Reverting recent changes until Basile can review

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp

    r25247 r25252  
    238238        Input2* sed_head_input = basalelement->GetInput2(SedimentHeadSubstepEnum);
    239239        Input2* base_input     = basalelement->GetInput2(BaseEnum);
     240        Input2* old_wh_input   = basalelement->GetInput2(SedimentHeadOldEnum);                  _assert_(old_wh_input);
    240241
    241242        /*Transfer related Inputs*/
     
    243244                basalelement->GetInput2Value(&active_element,HydrologydcMaskEplactiveEltEnum);
    244245        }
     246
    245247        /* Start  looping on the number of gaussian points: */
    246248        Gauss* gauss=basalelement->NewGauss(2);
    247249
    248250        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);
    251253                basalelement->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);
    252254                basalelement->NodalFunctions(basis,gauss);
     
    257259                /*Diffusivity*/
    258260                D_scalar=sediment_transmitivity*gauss->weight*Jdet;
     261                //D_scalar=gauss->weight*Jdet;
    259262                if(dt!=0.) D_scalar=D_scalar*dt;
    260263                for(int i=0;i<numnodes;i++){
     
    263266                        }
    264267                }
     268
    265269                /*Transient*/
    266270                if(dt!=0.){
    267271                        D_scalar=sediment_storing*gauss->weight*Jdet;
     272                        //D_scalar=(sediment_storing/sediment_transmitivity)*gauss->weight*Jdet;
    268273                        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
    269275                        /*Transfer EPL part*/
    270276                        if(isefficientlayer){
     
    272278                                        transfer=GetHydrologyKMatrixTransfer(basalelement);
    273279                                        D_scalar=dt*transfer*gauss->weight*Jdet;
     280                                        //D_scalar=dt*(transfer/sediment_transmitivity)*gauss->weight*Jdet;
    274281                                        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];
    275282                                }
     
    291298
    292299        /*Intermediaries*/
    293         bool            thawed_element;
    294         int             domaintype;
     300        bool             thawed_element;
     301        int                      domaintype;
    295302        Element* basalelement;
    296303
     
    321328        /*Intermediaries */
    322329        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;
    325334        IssmDouble dt,scalar,sediment_storing;
    326335        IssmDouble water_head,sediment_transmitivity;
    327336        IssmDouble water_load,runoff_value,transfer;
    328         IssmDouble Jdet,time;
     337        IssmDouble Jdet;
    329338
    330339        IssmDouble *xyz_list             = NULL;
     
    346355        basalelement->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum);
    347356        basalelement->FindParam(&smb_model,SmbEnum);
     357        basalelement->FindParam(&smb_averaging,SmbAveragingEnum);
    348358
    349359        Input2* sed_head_input   = basalelement->GetInput2(SedimentHeadSubstepEnum);
     
    353363        Input2* SedTrans_input   = basalelement->GetInput2(HydrologydcSedimentTransmitivityEnum); _assert_(SedTrans_input);
    354364
     365        IssmDouble time;
     366        basalelement->FindParam(&time,TimeEnum);
     367
    355368        if(dt!= 0.){
    356369                old_wh_input = basalelement->GetInput2(SedimentHeadOldEnum); _assert_(old_wh_input);
    357370        }
    358371        if(smb_model==SMBgradientscomponentsEnum){
    359                 basalelement->FindParam(&time,TimeEnum);
    360372                basalelement->FindParam(&smbsubstepping,SmbStepsPerStepEnum);
    361373                basalelement->FindParam(&hydrologysubstepping,HydrologyStepsPerStepEnum);
     
    371383                else{
    372384                        //finer stepping in smb, we average the runoff from transient input
    373                         basalelement->FindParam(&smb_averaging,SmbAveragingEnum);
    374385                        dummy_input = basalelement->GetInput2(SmbRunoffTransientEnum,time-dt,time,smb_averaging); _assert_(dummy_input);
    375386                }
     
    384395        /* Start  looping on the number of gaussian points: */
    385396        Gauss* gauss=basalelement->NewGauss(2);
     397
     398        IssmDouble yts;
     399        basalelement->FindParam(&yts,ConstantsYtsEnum);
    386400
    387401        for(int ig=gauss->begin();ig<gauss->end();ig++){
     
    397411                        else                     runoff_value = 0.;
    398412                        scalar = Jdet*gauss->weight*(water_load+runoff_value);
     413                        //scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity;
    399414                        if(dt!=0.) scalar = scalar*dt;
    400415                        for(int i=0;i<numnodes;i++){
     
    409424                                else runoff_value = 0.;
    410425                                scalar = Jdet*gauss->weight*(water_load+runoff_value);
     426                                //scalar = Jdet*gauss->weight*(water_load)/sediment_transmitivity;
    411427                                if(dt!=0.) scalar = scalar*dt;
    412428                                for(int i=0;i<numnodes;i++){
     
    429445                                }
    430446                                scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer));
     447                                //scalar = Jdet*gauss->weight*((water_head*sediment_storing)+(dt*transfer))/sediment_transmitivity;
    431448                                for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
    432449                        }
    433450                        else{
    434451                                scalar = Jdet*gauss->weight*(water_head*sediment_storing);
     452                                //scalar = Jdet*gauss->weight*(water_head*sediment_storing)/sediment_transmitivity;
    435453                                for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
    436454                        }
     
    553571        IssmDouble storing,yield;
    554572        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);
    557576        IssmDouble sediment_thickness       = element->FindParam(HydrologydcSedimentThicknessEnum);
     577        IssmDouble sediment_compressibility = element->FindParam(HydrologydcSedimentCompressibilityEnum);
     578        IssmDouble water_compressibility    = element->FindParam(HydrologydcWaterCompressibilityEnum);
    558579        element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum);
    559580        switch(unconf_scheme){
    560581        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));
    562583                break;
    563584        case 1:
    564                 yield = element->FindParam(HydrologydcSedimentPorosityEnum);
    565585                base_input->GetInputValue(&base_elev,gauss);
    566586                sed_head_input->GetInputValue(&prestep_head,gauss);
    567 
    568587                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));
    570596                //using logistic function for heavyside approximation
    571597                expfac=10.;
     598                yield=sediment_porosity;
    572599                sediment_storing=yield+(storing-yield)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness)));
    573600                break;
     
    579606IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input2* sed_head_input, Input2* base_input,Input2* SedTrans_input){/*{{{*/
    580607        int unconf_scheme;
     608        IssmDouble ratio,expfac;
    581609        IssmDouble sediment_transmitivity;
    582610        IssmDouble FullLayer_transmitivity;
     611        IssmDouble meltingrate;
     612        IssmDouble groundedice;
    583613        IssmDouble base_elev,prestep_head,water_sheet;
    584614        IssmDouble sediment_thickness       = element->FindParam(HydrologydcSedimentThicknessEnum);
Note: See TracChangeset for help on using the changeset viewer.