Ignore:
Timestamp:
12/08/20 08:45:53 (4 years ago)
Author:
Mathieu Morlighem
Message:

merged trunk-jpl and trunk for revision 25834

Location:
issm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk

  • issm/trunk/src

  • issm/trunk/src/m/classes/hydrologydc.m

    r24313 r25836  
     1
    12%Hydrologydc class definition
    23%
     
    1213                rel_tol                  = 0;
    1314                max_iter                 = 0;
    14     steps_per_step           = 0;
     15                steps_per_step           = 0;
     16                averaging                = 0;
    1517                sedimentlimit_flag       = 0;
    1618                sedimentlimit            = 0;
     
    1921                leakage_factor           = 0;
    2022                basal_moulin_input       = NaN;
    21     requested_outputs        = {};
     23                requested_outputs        = {};
    2224
    2325                spcsediment_head         = NaN;
    24     mask_thawed_node         = NaN;
     26                mask_thawed_node         = NaN;
    2527                sediment_transmitivity   = NaN;
    2628                sediment_compressibility = 0;
     
    3941                epl_conductivity         = 0;
    4042                eplflip_lock             = 0;
    41   end
     43        end
    4244        methods
    43     % {{{ function self = extrude(self,md)
    44                 function self = extrude(self,md)
     45                function self = extrude(self,md)    % {{{
    4546                        self.spcsediment_head=project3d(md,'vector',self.spcsediment_head,'type','node','layer',1);
    4647                        self.sediment_transmitivity=project3d(md,'vector',self.sediment_transmitivity,'type','node','layer',1);
    4748                        self.basal_moulin_input=project3d(md,'vector',self.basal_moulin_input,'type','node','layer',1);
    48       self.mask_thawed_node=project3d(md,'vector',self.mask_thawed_node,'type','node','layer',1);
     49                        self.mask_thawed_node=project3d(md,'vector',self.mask_thawed_node,'type','node','layer',1);
    4950                        if(self.isefficientlayer==1);
    5051                                self.spcepl_head=project3d(md,'vector',self.spcepl_head,'type','node','layer',1);
    51         self.mask_eplactive_node=project3d(md,'vector',self.mask_eplactive_node,'type','node','layer',1);
    52                         end
    53                 end
    54     % }}}
    55                 % {{{ function self = hydrologydc(varargin)
    56                 function self = hydrologydc(varargin)
     52                                self.mask_eplactive_node=project3d(md,'vector',self.mask_eplactive_node,'type','node','layer',1);
     53                        end
     54                end    % }}}
     55                function self = hydrologydc(varargin) % {{{
    5756                        switch nargin
    5857                                case 0
     
    6160                                        error('constructor not supported');
    6261                        end
    63                 end
    64                 % }}}
    65     function list = defaultoutputs(self,md) % {{{
    66         list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'};
    67         if self.isefficientlayer,
    68             list=[list,{'EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
    69         end
    70         if self.steps_per_step>1,
    71             list = [list,'EffectivePressureSubstep','SedimentHeadSubstep'];
    72             if self.isefficientlayer,
    73                 list = [list,'EplHeadSubstep','HydrologydcEplThicknessSubstep'];
    74             end
    75         end
    76     end % }}}
    77 
     62                end% }}}
     63                function list = defaultoutputs(self,md) % {{{
     64                        list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'};
     65                        if self.isefficientlayer,
     66                                list=[list,{'EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}];
     67                        end
     68                        if self.steps_per_step>1,
     69                                list = [list,'EffectivePressureSubstep','SedimentHeadSubstep'];
     70                                if self.isefficientlayer,
     71                                        list = [list,'EplHeadSubstep','HydrologydcEplThicknessSubstep'];
     72                                end
     73                        end
     74                end % }}}
    7875                function self = initialize(self,md) % {{{
    7976                        self.epl_colapse_thickness = self.sediment_transmitivity/self.epl_conductivity;
     
    8481
    8582                end % }}}
    86                 % {{{ function self = setdefaultparameters(self)
    87 
    88                 function self = setdefaultparameters(self)
    89 
     83                function self = setdefaultparameters(self)% {{{
    9084                        %Parameters from de Fleurian 2014
    9185                        self.water_compressibility    = 5.04e-10;
     
    9690                        self.max_iter                 = 100;
    9791                        self.steps_per_step           = 1;
     92                        self.averaging                = 0;
    9893                        self.sedimentlimit_flag       = 0;
    9994                        self.sedimentlimit            = 0;
     
    10196                        self.unconfined_flag          = 0;
    10297                        self.leakage_factor           = 1.0e-10;
    103       self.requested_outputs        = {'default'};
     98                        self.requested_outputs        = {'default'};
    10499
    105100
     
    117112                        self.epl_max_thickness        = 5.0;
    118113                        self.eplflip_lock             = 0;
    119                 end
    120 
    121                 % }}}
    122                 % {{{ function md = checkconsistency(self,md,solution,analyses)
    123 
    124                 function md = checkconsistency(self,md,solution,analyses)
    125                         %Early return
     114                end  % }}}
     115                function md = checkconsistency(self,md,solution,analyses)% {{{
     116                %Early return
    126117                        if ~ismember('HydrologyDCInefficientAnalysis',analyses) & ~ismember('HydrologyDCEfficientAnalysis',analyses),
    127118                                return;
     
    135126                        md = checkfield(md,'fieldname','hydrology.max_iter','>',0,'numel',1);
    136127                        md = checkfield(md,'fieldname','hydrology.steps_per_step','>',0,'numel',1);
     128                        md = checkfield(md,'fieldname','hydrology.averaging','numel',[1],'values',[0 1 2]);
    137129                        md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0 1 2 3]);
    138130                        md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0 1]);
    139131                        md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0 1]);
    140       md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
     132                        md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
    141133                        if self.sedimentlimit_flag==1,
    142134                                md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1);
     
    152144                        md = checkfield(md,'fieldname','hydrology.sediment_thickness','>',0,'numel',1);
    153145                        md = checkfield(md,'fieldname','hydrology.sediment_transmitivity','>=',0,'size',[md.mesh.numberofvertices 1]);
    154       md = checkfield(md,'fieldname','hydrology.mask_thawed_node','size',[md.mesh.numberofvertices 1],'values',[0 1]);
     146                        md = checkfield(md,'fieldname','hydrology.mask_thawed_node','size',[md.mesh.numberofvertices 1],'values',[0 1]);
    155147
    156148                        if self.isefficientlayer==1,
     
    169161                                end
    170162                        end
    171                 end
    172 
    173                 % }}}
    174                 % {{{ function disp(self)
    175 
    176                 function disp(self)
     163                end% }}}
     164                function disp(self)% {{{
    177165                        disp(sprintf('   hydrology Dual Porous Continuum Equivalent parameters:'));
    178166                        disp(sprintf('   - general parameters'));
     
    184172                        fielddisplay(self,'max_iter','maximum number of nonlinear iteration');
    185173                        fielddisplay(self,'steps_per_step','number of hydrology steps per timestep');
     174                        fielddisplay(self, 'averaging', 'averaging methods from short to long steps');
     175                        disp(sprintf('%55s  0: Arithmetic (default)'));
     176                        disp(sprintf('%55s  0: Geometric'));
     177                        disp(sprintf('%55s  0: Harmonic'));
    186178                        fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer');
    187179                        disp(sprintf('%55s  0: no limit',' '));
     
    224216                                fielddisplay(self,'eplflip_lock','lock the epl activation to avoid fli-floping (default is 0, no stabilization)');
    225217                        end
    226 
    227                 end
    228 
    229                 % }}}
    230                 % {{{ function marshall(self,prefix,md,fid)
    231 
    232                 function marshall(self,prefix,md,fid)
     218                end % }}}
     219                function marshall(self,prefix,md,fid)% {{{
    233220                        WriteData(fid,prefix,'name','md.hydrology.model','data',1,'format','Integer');
    234221                        WriteData(fid,prefix,'object',self,'fieldname','water_compressibility','format','Double');
     
    239226                        WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer');
    240227                        WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer');
     228                        WriteData(fid,prefix,'object',self,'fieldname','averaging','format','Integer');
    241229                        WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer');
    242230                        WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer');
     
    255243                        WriteData(fid,prefix,'object',self,'fieldname','sediment_thickness','format','Double');
    256244                        WriteData(fid,prefix,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1');
    257       WriteData(fid,prefix,'object',self,'fieldname','mask_thawed_node','format','DoubleMat','mattype',1);
    258 
     245                        WriteData(fid,prefix,'object',self,'fieldname','mask_thawed_node','format','DoubleMat','mattype',1);
    259246                        if self.isefficientlayer==1,
    260247                                WriteData(fid,prefix,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
     
    269256                                WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer');
    270257                        end
    271       outputs = self.requested_outputs;
    272       pos  = find(ismember(outputs,'default'));
    273       if ~isempty(pos),
    274         outputs(pos) = [];  %remove 'default' from outputs
    275         outputs      = [outputs defaultoutputs(self,md)]; %add defaults
    276       end
    277       WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
    278                 end
    279 
    280                 % }}}
     258                        outputs = self.requested_outputs;
     259                        pos  = find(ismember(outputs,'default'));
     260                        if ~isempty(pos),
     261                                outputs(pos) = [];  %remove 'default' from outputs
     262                                outputs      = [outputs defaultoutputs(self,md)]; %add defaults
     263                        end
     264                        WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray');
     265                end% }}}
    281266        end
    282267end
Note: See TracChangeset for help on using the changeset viewer.