Changeset 17742


Ignore:
Timestamp:
04/15/14 17:28:59 (11 years ago)
Author:
bdef
Message:

NEW: adding effective pressure computation within the Hydro

Location:
issm/trunk-jpl/src
Files:
1 added
8 edited

Legend:

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

    r17734 r17742  
    303303        Input* sed_trans_input   = basalelement->GetInput(HydrologydcSedimentTransmitivityEnum);
    304304        Input* thickness_input   = basalelement->GetInput(ThicknessEnum);
    305         Input* base_input         = basalelement->GetInput(BaseEnum);
     305        Input* base_input        = basalelement->GetInput(BaseEnum);
    306306        Input* water_input       = basalelement->GetInput(BasalforcingsMeltingRateEnum);    _assert_(water_input);
    307307        if(dt!= 0.){old_wh_input = basalelement->GetInput(SedimentHeadOldEnum);             _assert_(old_wh_input);}
     
    411411        basalelement->GetDofList(&doflist,NoneApproximationEnum,GsetEnum);
    412412        IssmDouble* values   = xNew<IssmDouble>(numnodes);
     413        IssmDouble* pressure = xNew<IssmDouble>(numnodes);
    413414        IssmDouble* residual = xNew<IssmDouble>(numnodes);
    414415
     
    419420        }
    420421
    421         /*If converged keep the residual in mind*/
    422         element->GetInputValue(&converged,ConvergedEnum);
     422        /*If converged keep the residual in mind, also compute effective pressure*/
     423        basalelement->GetInputValue(&converged,ConvergedEnum);
    423424
    424425        /*Get inputs*/
    425426        if(converged){
    426427                IssmDouble penalty_factor,kmax,kappa,h_max;
    427                 element->FindParam(&kmax,HydrologySedimentKmaxEnum);
    428                 element->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
     428                IssmDouble rho_freshwater,rho_ice;
     429                IssmDouble g;
     430                IssmDouble* thickness = xNew<IssmDouble>(numnodes);
     431                IssmDouble* base      = xNew<IssmDouble>(numnodes);
     432
     433                basalelement->FindParam(&kmax,HydrologySedimentKmaxEnum);
     434                basalelement->FindParam(&penalty_factor,HydrologydcPenaltyFactorEnum);
     435                basalelement->GetMaterialParameter(MaterialsRhoFreshwaterEnum);
     436                basalelement->GetMaterialParameter(MaterialsRhoIceEnum);
     437                basalelement->GetMaterialParameter(ConstantsGEnum);
     438               
     439                basalelement->GetInputListOnVertices(thickness,ThicknessEnum);
     440                basalelement->GetInputListOnVertices(base,BaseEnum);
    429441
    430442                kappa=kmax*pow(10.,penalty_factor);
    431443
    432444                for(int i=0;i<numnodes;i++){
     445
    433446                        GetHydrologyDCInefficientHmax(&h_max,basalelement,basalelement->GetNode(i));
    434                         if(values[i]>h_max) residual[i] = kappa*(values[i]-h_max);
    435                         else                residual[i] = 0.;
    436                 }
     447                        if(values[i]>h_max) {
     448                                residual[i] = kappa*(values[i]-h_max);
     449                                pressure[i]=(rho_ice*g*thickness[i])-(rho_freshwater*g*(values[i]-base[i]));
     450                        }
     451                        else{
     452                                residual[i] = 0.;
     453                                pressure[i]=(rho_ice*g*thickness[i])-(rho_freshwater*g*(h_max-base[i]));
     454                        }
     455                }
     456                xDelete<IssmDouble>(thickness);
     457                xDelete<IssmDouble>(base);
    437458        }
    438459
     
    440461        element->AddBasalInput(SedimentHeadEnum,values,P1Enum);
    441462        element->AddBasalInput(SedimentHeadResidualEnum,residual,P1Enum);
     463        element->AddBasalInput(EffectivePressureEnum,pressure,P1Enum);
    442464
    443465        /*Free ressources:*/
    444466        xDelete<IssmDouble>(values);
    445467        xDelete<IssmDouble>(residual);
     468        xDelete<IssmDouble>(pressure);
    446469        xDelete<int>(doflist);
    447470        if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
  • issm/trunk-jpl/src/c/cores/hydrology_core.cpp

    r17734 r17742  
    6464                        if(VerboseSolution()) _printf0_("   saving results \n");
    6565                        if(isefficientlayer){
    66                                 int outputs[8] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum};
    67                                 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],8);
     66                                int outputs[9] = {SedimentHeadEnum,SedimentHeadResidualEnum,EplHeadEnum,HydrologydcMaskEplactiveNodeEnum,HydrologydcMaskEplactiveEltEnum,EplHeadSlopeXEnum,EplHeadSlopeYEnum,HydrologydcEplThicknessEnum,EffectivePressureEnum};
     67                                femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],9);
    6868                        }
    6969                        else{
    70                                 int outputs[2] = {SedimentHeadEnum,SedimentHeadResidualEnum};
    71                                 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],2);
     70                                int outputs[3] = {SedimentHeadEnum,SedimentHeadResidualEnum,EffectivePressureEnum};
     71                                femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],3);
    7272                        }
    7373                        /*unload results*/
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17735 r17742  
    9898        SedimentHeadOldEnum,
    9999        SedimentHeadResidualEnum,
     100        EffectivePressureEnum,
    100101        EplHeadEnum,
    101102        EplHeadOldEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17735 r17742  
    106106                case SedimentHeadOldEnum : return "SedimentHeadOld";
    107107                case SedimentHeadResidualEnum : return "SedimentHeadResidual";
     108                case EffectivePressureEnum : return "EffectivePressure";
    108109                case EplHeadEnum : return "EplHead";
    109110                case EplHeadOldEnum : return "EplHeadOld";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17735 r17742  
    106106              else if (strcmp(name,"SedimentHeadOld")==0) return SedimentHeadOldEnum;
    107107              else if (strcmp(name,"SedimentHeadResidual")==0) return SedimentHeadResidualEnum;
     108              else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
    108109              else if (strcmp(name,"EplHead")==0) return EplHeadEnum;
    109110              else if (strcmp(name,"EplHeadOld")==0) return EplHeadOldEnum;
     
    136137              else if (strcmp(name,"HydrologydcPenaltyLock")==0) return HydrologydcPenaltyLockEnum;
    137138              else if (strcmp(name,"HydrologydcBasalMoulinInput")==0) return HydrologydcBasalMoulinInputEnum;
    138               else if (strcmp(name,"HydrologyLayer")==0) return HydrologyLayerEnum;
    139139         else stage=2;
    140140   }
    141141   if(stage==2){
    142               if (strcmp(name,"HydrologySediment")==0) return HydrologySedimentEnum;
     142              if (strcmp(name,"HydrologyLayer")==0) return HydrologyLayerEnum;
     143              else if (strcmp(name,"HydrologySediment")==0) return HydrologySedimentEnum;
    143144              else if (strcmp(name,"HydrologyEfficient")==0) return HydrologyEfficientEnum;
    144145              else if (strcmp(name,"HydrologySedimentKmax")==0) return HydrologySedimentKmaxEnum;
     
    259260              else if (strcmp(name,"DebugProfiling")==0) return DebugProfilingEnum;
    260261              else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum;
    261               else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum;
     265              if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum;
     266              else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum;
    266267              else if (strcmp(name,"MaxIterationConvergenceFlag")==0) return MaxIterationConvergenceFlagEnum;
    267268              else if (strcmp(name,"SteadystateMaxiter")==0) return SteadystateMaxiterEnum;
     
    382383              else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
    383384              else if (strcmp(name,"FSvelocity")==0) return FSvelocityEnum;
    384               else if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
     388              if (strcmp(name,"FSpressure")==0) return FSpressureEnum;
     389              else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
    389390              else if (strcmp(name,"Loads")==0) return LoadsEnum;
    390391              else if (strcmp(name,"Materials")==0) return MaterialsEnum;
     
    505506              else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
    506507              else if (strcmp(name,"Vx")==0) return VxEnum;
    507               else if (strcmp(name,"VxPicard")==0) return VxPicardEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
     511              if (strcmp(name,"VxPicard")==0) return VxPicardEnum;
     512              else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
    512513              else if (strcmp(name,"Vy")==0) return VyEnum;
    513514              else if (strcmp(name,"VyPicard")==0) return VyPicardEnum;
     
    628629              else if (strcmp(name,"MaskGroundediceLevelset")==0) return MaskGroundediceLevelsetEnum;
    629630              else if (strcmp(name,"QmuMaskGroundediceLevelset")==0) return QmuMaskGroundediceLevelsetEnum;
    630               else if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
     634              if (strcmp(name,"GaussSeg")==0) return GaussSegEnum;
     635              else if (strcmp(name,"GaussTria")==0) return GaussTriaEnum;
    635636              else if (strcmp(name,"GaussTetra")==0) return GaussTetraEnum;
    636637              else if (strcmp(name,"GaussPenta")==0) return GaussPentaEnum;
  • issm/trunk-jpl/src/m/classes/transient.m

    r17734 r17742  
    5454
    5555                        %default output
    56                         obj.requested_outputs={'default'};
     56                        obj.requested_outputs={'none'};
    5757                end % }}}
    5858                function obj = setdefaultparameters(obj) % {{{
  • issm/trunk-jpl/src/m/classes/transient.py

    r17734 r17742  
    4747                        return []
    4848
     49        #}}}
     50        def setallnullparameters(self): # {{{
     51               
     52                #Nothing done
     53                self.ismasstransport = False
     54                self.isstressbalance = False
     55                self.isthermal       = False
     56                self.isgroundingline = False
     57                self.isgia           = False
     58                self.isdamageevolution = False
     59                self.islevelset      = False
     60                self.ishydrology     = False
     61
     62                #default output
     63                self.requested_outputs=['none']
     64                return self
    4965        #}}}
    5066        def setdefaultparameters(self): # {{{
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17735 r17742  
    9898def SedimentHeadOldEnum(): return StringToEnum("SedimentHeadOld")[0]
    9999def SedimentHeadResidualEnum(): return StringToEnum("SedimentHeadResidual")[0]
     100def EffectivePressureEnum(): return StringToEnum("EffectivePressure")[0]
    100101def EplHeadEnum(): return StringToEnum("EplHead")[0]
    101102def EplHeadOldEnum(): return StringToEnum("EplHeadOld")[0]
Note: See TracChangeset for help on using the changeset viewer.