Changeset 19744 for issm/trunk-jpl/src


Ignore:
Timestamp:
11/17/15 16:10:39 (9 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added discrete moulins to hydrology model

Location:
issm/trunk-jpl/src
Files:
4 added
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/Makefile.am

    r19720 r19744  
    6969                                        ./classes/Loads/Penpair.cpp\
    7070                                        ./classes/Loads/Pengrid.cpp\
     71                                        ./classes/Loads/Moulin.cpp\
    7172                                        ./classes/Loads/Numericalflux.cpp\
    7273                                        ./classes/matrix/ElementMatrix.cpp\
  • issm/trunk-jpl/src/c/analyses/HydrologySommersAnalysis.cpp

    r19740 r19744  
    2222}/*}}}*/
    2323void HydrologySommersAnalysis::CreateLoads(Loads* loads, IoModel* iomodel){/*{{{*/
    24         /*No loads*/
     24
     25        /*Fetch parameters: */
     26        int  hydrology_model;
     27        iomodel->Constant(&hydrology_model,HydrologyModelEnum);
     28
     29        /*Now, do we really want Sommers?*/
     30        if(hydrology_model!=HydrologysommersEnum) return;
     31
     32        //create penalties for nodes: no node can have water above the max
     33        CreateSingleNodeToElementConnectivity(iomodel);
     34        for(int i=0;i<iomodel->numberofvertices;i++){
     35                if (iomodel->domaintype!=Domain3DEnum){
     36                        /*keep only this partition's nodes:*/
     37                        if(iomodel->my_vertices[i]){
     38                                loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologySommersAnalysisEnum));
     39                        }
     40                }
     41                else if(reCast<int>(iomodel->Data(MeshVertexonbaseEnum)[i])){
     42                        if(iomodel->my_vertices[i]){
     43                                loads->AddObject(new Moulin(iomodel->loadcounter+i+1,i,iomodel,HydrologySommersAnalysisEnum));
     44                        }       
     45                }
     46        }
     47        iomodel->DeleteData(1,MeshVertexonbaseEnum);
     48
    2549}/*}}}*/
    2650void HydrologySommersAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
     
    7296        iomodel->FetchDataToInput(elements,HydrologyGapHeightEnum);
    7397        iomodel->FetchDataToInput(elements,HydrologyEnglacialInputEnum);
     98        iomodel->FetchDataToInput(elements,HydrologyMoulinInputEnum);
    7499        iomodel->FetchDataToInput(elements,HydrologyBumpSpacingEnum);
    75100        iomodel->FetchDataToInput(elements,HydrologyBumpHeightEnum);
  • issm/trunk-jpl/src/c/classes/classes.h

    r19632 r19744  
    3737#include "./Loads/Penpair.h"
    3838#include "./Loads/Pengrid.h"
     39#include "./Loads/Moulin.h"
    3940
    4041/*Elements: */
  • issm/trunk-jpl/src/c/cores/hydrology_core.cpp

    r19740 r19744  
    6060               
    6161                /*Proceed now to heads computations*/
    62                 if(VerboseSolution()) _printf0_("   computing water head\n");
    6362                solutionsequence_hydro_nonlinear(femmodel);
    6463
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r19725 r19744  
    162162        HydrologyBumpHeightEnum,
    163163        HydrologyEnglacialInputEnum,
     164        HydrologyMoulinInputEnum,
    164165        HydrologyReynoldsEnum,
    165166        HydrologySpcheadEnum,
     
    579580        NumericalfluxTypeEnum,
    580581        ParamEnum,
     582        MoulinEnum,
    581583        PengridEnum,
    582584        PenpairEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r19725 r19744  
    168168                case HydrologyBumpHeightEnum : return "HydrologyBumpHeight";
    169169                case HydrologyEnglacialInputEnum : return "HydrologyEnglacialInput";
     170                case HydrologyMoulinInputEnum : return "HydrologyMoulinInput";
    170171                case HydrologyReynoldsEnum : return "HydrologyReynolds";
    171172                case HydrologySpcheadEnum : return "HydrologySpchead";
     
    571572                case NumericalfluxTypeEnum : return "NumericalfluxType";
    572573                case ParamEnum : return "Param";
     574                case MoulinEnum : return "Moulin";
    573575                case PengridEnum : return "Pengrid";
    574576                case PenpairEnum : return "Penpair";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r19725 r19744  
    171171              else if (strcmp(name,"HydrologyBumpHeight")==0) return HydrologyBumpHeightEnum;
    172172              else if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum;
     173              else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum;
    173174              else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
    174175              else if (strcmp(name,"HydrologySpchead")==0) return HydrologySpcheadEnum;
     
    259260              else if (strcmp(name,"MaterialsRhoIce")==0) return MaterialsRhoIceEnum;
    260261              else if (strcmp(name,"MaterialsRhoSeawater")==0) return MaterialsRhoSeawaterEnum;
    261               else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
     265              if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
     266              else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
    266267              else if (strcmp(name,"MaterialsThermalExchangeVelocity")==0) return MaterialsThermalExchangeVelocityEnum;
    267268              else if (strcmp(name,"MaterialsThermalconductivity")==0) return MaterialsThermalconductivityEnum;
     
    382383              else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;
    383384              else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum;
    384               else if (strcmp(name,"SmbP")==0) return SmbPEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"SmbSwf")==0) return SmbSwfEnum;
     388              if (strcmp(name,"SmbP")==0) return SmbPEnum;
     389              else if (strcmp(name,"SmbSwf")==0) return SmbSwfEnum;
    389390              else if (strcmp(name,"SmbEAir")==0) return SmbEAirEnum;
    390391              else if (strcmp(name,"SmbPAir")==0) return SmbPAirEnum;
     
    505506              else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum;
    506507              else if (strcmp(name,"SurfaceNormalVelocity")==0) return SurfaceNormalVelocityEnum;
    507               else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
     511              if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
     512              else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
    512513              else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
    513514              else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
     
    583584              else if (strcmp(name,"NumericalfluxType")==0) return NumericalfluxTypeEnum;
    584585              else if (strcmp(name,"Param")==0) return ParamEnum;
     586              else if (strcmp(name,"Moulin")==0) return MoulinEnum;
    585587              else if (strcmp(name,"Pengrid")==0) return PengridEnum;
    586588              else if (strcmp(name,"Penpair")==0) return PenpairEnum;
     
    627629              else if (strcmp(name,"Free")==0) return FreeEnum;
    628630              else if (strcmp(name,"Open")==0) return OpenEnum;
    629               else if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
    630               else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
     634              if (strcmp(name,"Adjointp")==0) return AdjointpEnum;
     635              else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
     636              else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
    635637              else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
    636638              else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum;
     
    750752              else if (strcmp(name,"LACrouzeixRaviart")==0) return LACrouzeixRaviartEnum;
    751753              else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum;
    752               else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
    753               else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
     757              if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
     758              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
     759              else if (strcmp(name,"DoubleMatExternalResult")==0) return DoubleMatExternalResultEnum;
    758760              else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum;
    759761              else if (strcmp(name,"J")==0) return JEnum;
     
    873875              else if (strcmp(name,"MisfitObservation")==0) return MisfitObservationEnum;
    874876              else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum;
    875               else if (strcmp(name,"MisfitLocal")==0) return MisfitLocalEnum;
    876               else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
     880              if (strcmp(name,"MisfitLocal")==0) return MisfitLocalEnum;
     881              else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;
     882              else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum;
    881883              else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum;
    882884              else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum;
  • issm/trunk-jpl/src/m/classes/hydrologysommers.m

    r19720 r19744  
    1111                bump_height     = NaN;
    1212                englacial_input = NaN;
     13                moulin_input    = NaN;
    1314                reynolds        = NaN;
    1415                spchead         = NaN;
     
    4041                        md = checkfield(md,'fieldname','hydrology.bump_spacing','>',0,'size',[md.mesh.numberofelements 1],'NaN',1);
    4142                        md = checkfield(md,'fieldname','hydrology.bump_height','>=',0,'size',[md.mesh.numberofelements 1],'NaN',1);
    42                         md = checkfield(md,'fieldname','hydrology.englacial_input','>=',0,'size',[md.mesh.numberofvertices 1],'NaN',1);
     43                        md = checkfield(md,'fieldname','hydrology.englacial_input','>=',0,'NaN',1,'timeseries',1);
     44                        md = checkfield(md,'fieldname','hydrology.moulin_input','>=',0,'NaN',1,'timeseries',1);
    4345                        md = checkfield(md,'fieldname','hydrology.reynolds','>',0,'size',[md.mesh.numberofelements 1],'NaN',1);
    4446                        md = checkfield(md,'fieldname','hydrology.spchead','size',[md.mesh.numberofvertices 1]);
     
    5153                        fielddisplay(self,'bump_height','characteristic bedrock bump height (m)');
    5254                        fielddisplay(self,'englacial_input','liquid water input from englacial to subglacial system (m/yr)');
     55                        fielddisplay(self,'moulin_input','liquid water input from moulins (at the vertices) to subglacial system (m^3/s)');
    5356                        fielddisplay(self,'reynolds','Reynolds'' number');
    5457                        fielddisplay(self,'spchead','water head constraints (NaN means no constraint) (m)');
     
    6366                        WriteData(fid,'object',self,'class','hydrology','fieldname','bump_spacing','format','DoubleMat','mattype',2);
    6467                        WriteData(fid,'object',self,'class','hydrology','fieldname','bump_height','format','DoubleMat','mattype',2);
    65                         WriteData(fid,'object',self,'class','hydrology','fieldname','englacial_input','format','DoubleMat','mattype',1,'scale',1./yts);
     68                        WriteData(fid,'object',self,'class','hydrology','fieldname','englacial_input','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);
     69                        WriteData(fid,'object',self,'class','hydrology','fieldname','moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
    6670                        WriteData(fid,'object',self,'class','hydrology','fieldname','reynolds','format','DoubleMat','mattype',2);
    6771                        WriteData(fid,'object',self,'class','hydrology','fieldname','spchead','format','DoubleMat','mattype',1);
  • issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.m

    r19090 r19744  
    8080
    8181        case TransientSolutionEnum(),
    82                 analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();L2ProjectionBaseAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum()];
     82                analyses=[StressbalanceAnalysisEnum();StressbalanceVerticalAnalysisEnum();StressbalanceSIAAnalysisEnum();L2ProjectionBaseAnalysisEnum();ThermalAnalysisEnum();MeltingAnalysisEnum();EnthalpyAnalysisEnum();MasstransportAnalysisEnum();HydrologySommersAnalysisEnum];
    8383
    8484        case FlaimSolutionEnum(),
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r19725 r19744  
    160160def HydrologyBumpHeightEnum(): return StringToEnum("HydrologyBumpHeight")[0]
    161161def HydrologyEnglacialInputEnum(): return StringToEnum("HydrologyEnglacialInput")[0]
     162def HydrologyMoulinInputEnum(): return StringToEnum("HydrologyMoulinInput")[0]
    162163def HydrologyReynoldsEnum(): return StringToEnum("HydrologyReynolds")[0]
    163164def HydrologySpcheadEnum(): return StringToEnum("HydrologySpchead")[0]
     
    563564def NumericalfluxTypeEnum(): return StringToEnum("NumericalfluxType")[0]
    564565def ParamEnum(): return StringToEnum("Param")[0]
     566def MoulinEnum(): return StringToEnum("Moulin")[0]
    565567def PengridEnum(): return StringToEnum("Pengrid")[0]
    566568def PenpairEnum(): return StringToEnum("Penpair")[0]
  • issm/trunk-jpl/src/m/plot/plot_transient_movie.m

    r18256 r19744  
    6262
    6363                        clf;
    64                         titlestring=[field ' at time ' num2str(results(i).time/md.constants.yts) ' year'];
     64                        titlestring=[field ' at time ' num2str(results(i).time) ' year'];
    6565                        plot_unit(x,y,z,elements,data,is2d,isplanet,datatype,options)
    6666                        apply_options_movie(md,options,titlestring);
Note: See TracChangeset for help on using the changeset viewer.