Changeset 22236


Ignore:
Timestamp:
11/05/17 08:11:00 (7 years ago)
Author:
bdef
Message:

BUG:Change in the initialization of epl head

File:
1 edited

Legend:

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

    r21500 r22236  
    240240                /*Diffusivity*/
    241241                D_scalar=epl_transmitivity*gauss->weight*Jdet;
     242                //D_scalar=gauss->weight*Jdet;
    242243                if(dt!=0.) D_scalar=D_scalar*dt;
    243244                D[0][0]=D_scalar;
     
    253254                        basalelement->NodalFunctions(&basis[0],gauss);
    254255                        D_scalar=epl_storing*gauss->weight*Jdet;
     256                        //D_scalar=(epl_storing/epl_transmitivity)*gauss->weight*Jdet;
    255257                        TripleMultiply(basis,numnodes,1,0,
    256258                                                &D_scalar,1,1,0,
     
    262264                        transfer=GetHydrologyKMatrixTransfer(basalelement);
    263265                        D_scalar=dt*transfer*gauss->weight*Jdet;
     266                        //D_scalar=dt*(transfer/epl_transmitivity)*gauss->weight*Jdet;
    264267                        TripleMultiply(basis,numnodes,1,0,
    265268                                                                                 &D_scalar,1,1,0,
     
    312315        IssmDouble dt,scalar,water_head;
    313316        IssmDouble water_load,transfer;
    314         IssmDouble epl_storing;
     317        IssmDouble epl_storing,epl_transmitivity;
    315318        IssmDouble Jdet;
    316319        IssmDouble residual,connectivity;
     
    348351                basalelement ->NodalFunctions(basis,gauss);
    349352                epl_storing     = EplStoring(basalelement,gauss,epl_thick_input,epl_head_input,base_input);
     353                epl_transmitivity = EplTransmitivity(basalelement,gauss,epl_thick_input,epl_head_input,base_input);
     354
    350355                /*Loading term*/
    351356                water_input->GetInputValue(&water_load,gauss);
    352357                scalar = Jdet*gauss->weight*(water_load);
     358                //scalar = Jdet*gauss->weight*(water_load)/epl_transmitivity;
    353359                if(dt!=0.) scalar = scalar*dt;
    354360                for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
     
    360366                        transfer=GetHydrologyPVectorTransfer(basalelement,gauss,sed_head_input);
    361367                        scalar = Jdet*gauss->weight*((water_head*epl_storing)+(dt*transfer));
     368                        //scalar = Jdet*gauss->weight*((water_head*epl_storing)+(dt*transfer))/epl_transmitivity;
    362369                        for(int i=0;i<numnodes;i++)pe->values[i]+=scalar*basis[i];
    363370                }
     
    369376        for(int iv=0;iv<numvertices;iv++){
    370377                gauss->GaussVertex(iv);
     378                epl_transmitivity = EplTransmitivity(basalelement,gauss,epl_thick_input,epl_head_input,base_input);
    371379                connectivity = IssmDouble(basalelement->VertexConnectivity(iv));
    372380                residual_input->GetInputValue(&residual,gauss);
    373381                pe->values[iv]+=residual/connectivity;
     382                //pe->values[iv]+=residual/(epl_transmitivity*connectivity);
    374383        }
    375384        /*Clean up and return*/
     
    415424        /*Fetch dof list and allocate solution vector*/
    416425        IssmDouble* eplHeads    = xNew<IssmDouble>(numnodes);
     426        IssmDouble* basevalue    = xNew<IssmDouble>(numnodes);
     427        IssmDouble* initvalue    = xNew<IssmDouble>(numnodes);
    417428        basalelement->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
    418429
     
    422433        /*Use the dof list to index into the solution vector: */
    423434        /*If the EPL is not active we revert to the bedrock elevation*/
     435
    424436        if(active_element){
    425437                for(int i=0;i<numnodes;i++){
     
    430442        }
    431443        else{
    432                 basalelement->GetInputListOnVertices(&eplHeads[0],BaseEnum);
     444                //tradeof between keeping initial condition and not getting to far from head at deactivation
     445                basalelement->GetInputListOnVertices(&basevalue[0],BaseEnum);
     446                basalelement->GetInputListOnVertices(&initvalue[0],EplHeadEnum);
    433447                for(int i=0;i<numnodes;i++){
     448                        eplHeads[i]=max(basevalue[i],initvalue[i]);
    434449                        if(xIsNan<IssmDouble>(eplHeads[i])) _error_("NaN found in solution vector");
    435450                        if(xIsInf<IssmDouble>(eplHeads[i])) _error_("Inf found in solution vector");
     
    440455        /*Free ressources:*/
    441456        xDelete<IssmDouble>(eplHeads);
     457        xDelete<IssmDouble>(basevalue);
     458        xDelete<IssmDouble>(initvalue);
    442459        xDelete<int>(doflist);
    443460        if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
     
    464481        case 1:
    465482                element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
    466                 transfer=leakage;
     483                transfer=+leakage;
    467484                break;
    468485        default:
     
    489506                sed_head_input->GetInputValue(&sediment_head,gauss);
    490507                element->FindParam(&leakage,HydrologydcLeakageFactorEnum);
    491                 transfer=sediment_head*leakage;
     508                transfer=+sediment_head*leakage;
    492509                break;
    493510        default:
     
    558575                element->GetInputListOnVertices(&ice_thickness[0],ThicknessEnum);
    559576                element->GetInputListOnVertices(&bed[0],BaseEnum);
    560                
     577
    561578                if(!active_element){
    562579                        /*Keeping thickness to initial value if EPL is not active*/
     
    731748        base_input->GetInputValue(&base_elev,gauss);
    732749        water_sheet=max(0.0,(prestep_head-base_elev));
    733 
    734750        storing=rho_freshwater*g*epl_porosity*epl_thickness*(water_compressibility+(epl_compressibility/epl_porosity));
    735751
     
    760776
    761777        water_sheet=max(0.0,(prestep_head-base_elev));
    762        
    763778        epl_transmitivity=epl_conductivity*epl_thickness;
    764779        //epl_transmitivity=max(1.0e-6,(epl_conductivity*min(water_sheet,epl_thickness)));
Note: See TracChangeset for help on using the changeset viewer.