Changeset 18667


Ignore:
Timestamp:
10/23/14 07:11:42 (10 years ago)
Author:
jbondzio
Message:

CHG: For computation of basal melting rate, use enthalpypicard for steady state, if not converged yet. Update Enthalpy and water column only in case of transient runs.

File:
1 edited

Legend:

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

    r18665 r18667  
    933933
    934934        /* Intermediaries */
     935        bool                    converged;
    935936        const int   dim=3;
    936937        int         i,is,state;
    937938        int                     vertexdown,vertexup,numvertices,numsegments;
    938         const int       enthalpy_enum=EnthalpyEnum;
     939        int                     enthalpy_enum;
    939940        IssmDouble  vec_heatflux[dim],normal_base[dim],d1enthalpy[dim],d1pressure[dim];
    940941        IssmDouble  basalfriction,alpha2,geothermalflux,heatflux;
     
    949950        element->GetVerticesCoordinates(&xyz_list);
    950951        element->GetVerticesCoordinatesBase(&xyz_list_base);
     952        element->GetInputValue(&converged,ConvergedEnum);
     953        element->FindParam(&dt,TimesteppingTimeStepEnum);
     954        element->FindParam(&yts, ConstantsYtsEnum);
     955
     956        if(dt==0. && !converged) enthalpy_enum=EnthalpyPicardEnum;
     957        else enthalpy_enum=EnthalpyEnum;
     958
    951959        IssmDouble latentheat = element->GetMaterialParameter(MaterialsLatentheatEnum);
    952960        IssmDouble rho_ice    = element->GetMaterialParameter(MaterialsRhoIceEnum);
    953961        IssmDouble rho_water  = element->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
    954962        IssmDouble beta          = element->GetMaterialParameter(MaterialsBetaEnum);
    955         IssmDouble kappa                 = EnthalpyDiffusionParameterVolume(element,EnthalpyEnum);     _assert_(kappa>=0.);
     963        IssmDouble kappa                 = EnthalpyDiffusionParameterVolume(element,enthalpy_enum);     _assert_(kappa>=0.);
    956964        IssmDouble kappa_mix;
    957965
     
    10021010                        case 3:
    10031011                                // temperate, thin melting base: set spc
    1004                                 // enthalpies[vertexdown]=element->PureIceEnthalpy(pressures[vertexdown]);
     1012                                enthalpies[vertexdown]=element->PureIceEnthalpy(pressures[vertexdown]);
    10051013                                enthalpy_input->GetInputDerivativeValue(&d1enthalpy[0],xyz_list,gauss);
    10061014                                for(i=0;i<3;i++) vec_heatflux[i]=-kappa*d1enthalpy[i];
     
    10331041
    10341042        /******** UPDATE MELTINGRATES AND WATERCOLUMN **************//*{{{*/
    1035         element->FindParam(&dt,TimesteppingTimeStepEnum);
    1036         element->FindParam(&yts, ConstantsYtsEnum);
    10371043        for(is=0;is<numsegments;is++){
    10381044                vertexdown = pairindices[is*2+0];
     
    10621068
    10631069        /*feed updated variables back into model*/
    1064         element->AddInput(EnthalpyEnum,enthalpies,P1Enum); //TODO: distinguis for steadystate and transient run
    1065         element->AddInput(WatercolumnEnum,watercolumns,P1Enum);
     1070        if(dt!=0.){
     1071                element->AddInput(enthalpy_enum,enthalpies,P1Enum); //TODO: distinguis for steadystate and transient run
     1072                element->AddInput(WatercolumnEnum,watercolumns,P1Enum);
     1073        }
    10661074        element->AddInput(BasalforcingsGroundediceMeltingRateEnum,basalmeltingrates,P1Enum);
    10671075
Note: See TracChangeset for help on using the changeset viewer.