Changeset 18757


Ignore:
Timestamp:
11/07/14 15:38:27 (10 years ago)
Author:
srebuffi
Message:

CHG: added calving class

Location:
issm/trunk-jpl/src/m/classes
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/masstransport.m

    r18738 r18757  
    77        properties (SetAccess=public)
    88                 spcthickness           = NaN;
    9                  iscalvingrate          = 0;
    10                  calvingrate            = NaN;
    11                  levermann_calving_coeff= 0;
    129                 isfreesurface          = 0;
    1310                 min_thickness          = 0;
     
    4542        end
    4643        methods
    47          function createxml(obj,fid) % {{{
    48             fprintf(fid, '<!-- masstransport -->\n');           
    49                    
    50             % Masstransport solution parameters
    51             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Masstransport solution parameters">','<section name="masstransport" />');                   
    52             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="spcthickness" type="',class(obj.spcthickness),'" default="',convert2str(obj.spcthickness),'">','     <section name="masstransport" />','     <help> thickness constraints (NaN means no constraint) [m] </help>','  </parameter>');
    53                                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="iscalvingrate" type="',class(obj.iscalvingrate),'" default="',convert2str(obj.iscalvingrate),'">','     <section name="masstransport" />','     <help> do we use calving (loss of ice) </help>','  </parameter>');
    54             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="calvingrate" type="',class(obj.calvingrate),'" default="',convert2str(obj.calvingrate),'">','     <section name="masstransport" />','     <help> calving rate at given location [m/a] </help>','  </parameter>');
    55                                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="levermann_calving_coeff" type="',class(obj.levermann_calving_coeff),'" default="',convert2str(obj.levermann_calving_coeff),'">','     <section name="masstransport" />','     <help> Proportionality coefficient in Levermann model  </help>','  </parameter>');
    56             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isfreesurface" type="',class(obj.isfreesurface),'" default="',convert2str(obj.isfreesurface),'">','     <section name="masstransport" />','     <help> do we use free surfaces (FS only) are mass conservation </help>','  </parameter>');
    57             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="min_thickness" type="',class(obj.min_thickness),'" default="',convert2str(obj.min_thickness),'">','     <section name="masstransport" />','     <help> minimum ice thickness allowed [m] </help>','  </parameter>');
    58            
    59             % hydrostatic_adjustment drop-down (incremental or absolute )
    60             fprintf(fid,'%s\n%s\n%s\n%s\n','  <parameter key ="hydrostatic_adjustment" type="alternative" optional ="false">','     <section name="masstransport" />','     <help> adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute''  </help>');
    61             fprintf(fid,'%s\n','       <option value="Incremental" type="string" default="true"> </option>');
    62             fprintf(fid,'%s\n%s\n','       <option value="Absolute" type="string" default="false"> </option>','</parameter>');
    63            
    64             %stabilization drop-down (0, 1, 2, or 3)
    65             fprintf(fid,'%s\n%s\n%s\n%s\n','  <parameter key ="stabilization" type="alternative" optional="false">','     <section name="masstransport" />','     <help> 0: no, 1:  artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin </help>');
    66             fprintf(fid,'%s\n','       <option value="0" type="string" default="true"> </option>');
    67             fprintf(fid,'%s\n','       <option value="1" type="string" default="false"> </option>');
    68             fprintf(fid,'%s\n','       <option value="2" type="string" default="false"> </option>');
    69             fprintf(fid,'%s\n%s\n','       <option value="3" type="string" default="false"> </option>','</parameter>');
    70 
    71             fprintf(fid,'%s\n%s\n','</frame>');   
    72            
    73             %Penalty options
    74             fprintf(fid,'%s\n%s\n%s\n','<frame key="2" label="Penalty options">','<section name="masstransport" />');
    75             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="vertex_pairing" type="',class(obj.vertex_pairing),'" default="',convert2str(obj.vertex_pairing),'">','     <section name="masstransport" />','     <help> offset used by penalties: penalty = Kmax*10^offset </help>','  </parameter>');
    76             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="penalty_factor" type="',class(obj.penalty_factor),'" default="',convert2str(obj.penalty_factor),'">','     <section name="masstransport" />','     <help> pairs of vertices that are penalized </help>','  </parameter>');
    77             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="requested_outputs" type="',class(obj.requested_outputs),'" default="',convert2str(obj.requested_outputs),'">','     <section name="masstransport" />','     <help> additional outputs requested </help>','  </parameter>');
    78             fprintf(fid,'%s\n%s\n','</frame>');
    79        
    80         end % }}}
    8144                function obj = masstransport(varargin) % {{{
    8245                        switch nargin
     
    10467                function obj = setdefaultparameters(obj) % {{{
    10568
    106                         %Proportionality coefficient in Levermann model
    107                         obj.levermann_calving_coeff=8e21;
    108                        
    10969                        %Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin
    11070                        obj.stabilization=1;
     
    12888
    12989                        md = checkfield(md,'fieldname','masstransport.spcthickness','forcing',1);
    130                         if(ismember(LevelsetAnalysisEnum(), analyses) & md.transient.islevelset)
    131                                 md = checkfield(md,'fieldname','masstransport.iscalvingrate','values',[0 1]);
    132                                 md = checkfield(md,'fieldname','masstransport.calvingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0);
    133                                 md = checkfield(md,'fieldname','masstransport.levermann_calving_coeff','>',0);
    134                         end
    135 
    13690                        md = checkfield(md,'fieldname','masstransport.isfreesurface','values',[0 1]);
    13791                        md = checkfield(md,'fieldname','masstransport.hydrostatic_adjustment','values',{'Absolute' 'Incremental'});
     
    14498                        disp(sprintf('   Masstransport solution parameters:'));
    14599                        fielddisplay(obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');
    146                         fielddisplay(obj,'iscalvingrate','do we use calving (loss of ice)');
    147                         fielddisplay(obj,'calvingrate','calving rate at given location [m/a]');
    148                         fielddisplay(obj,'levermann_calving_coeff','proportionality coefficient in Levermann model');
    149100                        fielddisplay(obj,'isfreesurface','do we use free surfaces (FS only) are mass conservation');
    150101                        fielddisplay(obj,'min_thickness','minimum ice thickness allowed [m]');
     
    163114
    164115                        WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1);
    165                         WriteData(fid,'object',obj,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);
    166                         WriteData(fid,'object',obj,'fieldname','iscalvingrate','format','Boolean');
    167116                        WriteData(fid,'object',obj,'fieldname','isfreesurface','format','Boolean');
    168                         WriteData(fid,'object',obj,'fieldname','levermann_calving_coeff','format','Double');
    169117                        WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double');
    170118                        WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum());
  • issm/trunk-jpl/src/m/classes/model.m

    r18738 r18757  
    3737                steadystate      = 0;
    3838                transient        = 0;
     39                calving          = 0;
    3940                gia              = 0;
    4041
     
    796797                        end
    797798                        md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
    798                         md.masstransport.calvingrate=project3d(md,'vector',md.masstransport.calvingrate,'type','node');
    799799                        md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
    800800                        md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node');
    801801                        md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node');
    802802                        md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node');
     803
     804                        % Calving variables
     805                        if isa(md.calving,'calving'),md.calving.calvingrate=project3d(md,'vector',md.calving.calvingrate,'type','node');end;
     806                        if isa(md.calving,'calvinglevermann'),md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node');end;
    803807
    804808                        % Hydrologydc variables
     
    11601164                        md.steadystate      = steadystate();
    11611165                        md.transient        = transient();
     1166                        md.calving          = calving();
    11621167                        md.gia              = gia();
    11631168                        md.seaice           = seaice();
     
    13201325                        disp(sprintf('%19s: %-22s -- %s','verbose'         ,['[1x1 ' class(obj.verbose) ']'],'verbosity level in solve'));
    13211326                        disp(sprintf('%19s: %-22s -- %s','settings'        ,['[1x1 ' class(obj.settings) ']'],'settings properties'));
    1322                         disp(sprintf('%19s: %-22s -- %s','toolkits'          ,['[1x1 ' class(obj.toolkits) ']'],'PETSc options for each solution'));
     1327                        disp(sprintf('%19s: %-22s -- %s','toolkits'        ,['[1x1 ' class(obj.toolkits) ']'],'PETSc options for each solution'));
    13231328                        disp(sprintf('%19s: %-22s -- %s','cluster'         ,['[1x1 ' class(obj.cluster) ']'],'cluster parameters (number of cpus...)'));
    13241329                        disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(obj.balancethickness) ']'],'parameters for balancethickness solution'));
    1325                         disp(sprintf('%19s: %-22s -- %s','stressbalance'      ,['[1x1 ' class(obj.stressbalance) ']'],'parameters for stressbalance solution'));
     1330                        disp(sprintf('%19s: %-22s -- %s','stressbalance'   ,['[1x1 ' class(obj.stressbalance) ']'],'parameters for stressbalance solution'));
    13261331                        disp(sprintf('%19s: %-22s -- %s','groundingline'   ,['[1x1 ' class(obj.groundingline) ']'],'parameters for groundingline solution'));
    13271332                        disp(sprintf('%19s: %-22s -- %s','hydrology'       ,['[1x1 ' class(obj.hydrology) ']'],'parameters for hydrology solution'));
    1328                         disp(sprintf('%19s: %-22s -- %s','masstransport'      ,['[1x1 ' class(obj.masstransport) ']'],'parameters for masstransport solution'));
     1333                        disp(sprintf('%19s: %-22s -- %s','masstransport'   ,['[1x1 ' class(obj.masstransport) ']'],'parameters for masstransport solution'));
    13291334                        disp(sprintf('%19s: %-22s -- %s','thermal'         ,['[1x1 ' class(obj.thermal) ']'],'parameters for thermal solution'));
    13301335                        disp(sprintf('%19s: %-22s -- %s','steadystate'     ,['[1x1 ' class(obj.steadystate) ']'],'parameters for steadystate solution'));
    13311336                        disp(sprintf('%19s: %-22s -- %s','transient'       ,['[1x1 ' class(obj.transient) ']'],'parameters for transient solution'));
    1332                         disp(sprintf('%19s: %-22s -- %s','gia'       ,['[1x1 ' class(obj.gia) ']'],'parameters for gia solution'));
     1337                        disp(sprintf('%19s: %-22s -- %s','calving'         ,['[1x1 ' class(obj.calving) ']'],'parameters for calving'));
     1338                        disp(sprintf('%19s: %-22s -- %s','gia'             ,['[1x1 ' class(obj.gia) ']'],'parameters for gia solution'));
    13331339                        disp(sprintf('%19s: %-22s -- %s','autodiff'        ,['[1x1 ' class(obj.autodiff) ']'],'automatic differentiation parameters'));
    13341340                        disp(sprintf('%19s: %-22s -- %s','flaim'           ,['[1x1 ' class(obj.flaim) ']'],'flaim parameters'));
  • issm/trunk-jpl/src/m/classes/model.py

    r18605 r18757  
    1515from basalforcings import basalforcings
    1616from matice import matice
     17from calving import calving
    1718from damage import damage
    1819from friction import friction
     
    8889                self.steadystate      = steadystate()
    8990                self.transient        = transient()
     91                self.calving          = calving()
    9092                self.gia              = gia()
    9193
     
    129131                        'steadystate',\
    130132                        'transient',\
     133                        'calving',\
    131134                        'gia',\
    132135                        'autodiff',\
     
    168171                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("steadystate","[%s,%s]" % ("1x1",obj.steadystate.__class__.__name__),"parameters for steadystate solution"))
    169172                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("transient","[%s,%s]" % ("1x1",obj.transient.__class__.__name__),"parameters for transient solution"))
     173                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("calving","[%s,%s]" % ("1x1",obj.calving.__class__.__name__),"parameters for calving"))
    170174                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("autodiff","[%s,%s]" % ("1x1",obj.autodiff.__class__.__name__),"automatic differentiation parameters"))
    171175                string="%s\n%s" % (string,"%19s: %-22s -- %s" % ("flaim","[%s,%s]" % ("1x1",obj.flaim.__class__.__name__),"flaim parameters"))
     
    658662                md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node')
    659663                md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node')
    660                 md.masstransport.calvingrate=project3d(md,'vector',md.masstransport.calvingrate,'type','node')
     664
     665                # Calving variables
     666                if hasattr(md.calving,'calving'):
     667                        md.calving.calvingrate=project3d(md,'vector',md.calving.calvingrate,'type','node')
     668                if hasattr(md.calving,'calvinglevermann'):
     669                        md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node')
    661670
    662671                # Hydrologydc variables
  • issm/trunk-jpl/src/m/classes/transient.m

    r17931 r18757  
    1313                isdamageevolution = 0;
    1414                islevelset        = 0;
     15                iscalving         = 0;
    1516                ishydrology       = 0;
    1617                requested_outputs = {};
     
    2930                fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isdamageevolution" type="',class(obj.isdamageevolution),'" default="',convert2str(obj.isdamageevolution),'">','     <section name="transient" />','     <help> indicates whether damage evolution is used in the transient </help>','  </parameter>');
    3031                fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="islevelset" type="',class(obj.islevelset),'" default="',convert2str(obj.islevelset),'">','     <section name="transient" />','     <help> LEVEL SET DESCRIPTION...  </help>','  </parameter>');
     32                fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="iscalving" type="',class(obj.iscalving),'" default="',convert2str(obj.iscalving),'">','     <section name="transient" />','     <help> indicates whether calving is used in the transient </help>','  </parameter>');
    3133                fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="requested_outputs" type="',class(obj.requested_outputs),'" default="',convert2str(obj.requested_outputs),'">','     <section name="transient" />','     <help> list of additional outputs requested </help>','  </parameter>');
    3234            fprintf(fid,'%s\n%s\n','</frame>');   
     
    5153                        obj.isdamageevolution = 0;
    5254                        obj.islevelset      = 0;
     55                        obj.iscalving       =0;
    5356                        obj.ishydrology     = 0;
    5457
     
    6669                        obj.isdamageevolution = 0;
    6770                        obj.islevelset      = 0;
     71                        obj.iscalving       = 0;
    6872                        obj.ishydrology     = 0;
    6973
     
    9094                        md = checkfield(md,'fieldname','transient.isdamageevolution','numel',[1],'values',[0 1]);
    9195                        md = checkfield(md,'fieldname','transient.islevelset','numel',[1],'values',[0 1]);
     96                        md = checkfield(md,'fieldname','transient.iscalving','numel',[1],'values',[0 1]);
    9297                        md = checkfield(md,'fieldname','transient.ishydrology','numel',[1],'values',[0 1]);
    9398                        md = checkfield(md,'fieldname','transient.requested_outputs','stringrow',1);
     
    104109                        fielddisplay(obj,'isdamageevolution','indicates whether damage evolution is used in the transient');
    105110                        fielddisplay(obj,'islevelset','LEVEL SET DESCRIPTION...');
     111                        fielddisplay(obj,'iscalving','indicates whether calving is used in the transient');
    106112                        fielddisplay(obj,'ishydrology','indicates whether an hydrology model is used');
    107113                        fielddisplay(obj,'requested_outputs','list of additional outputs requested');
     
    117123                        WriteData(fid,'object',obj,'fieldname','ishydrology','format','Boolean');
    118124                        WriteData(fid,'object',obj,'fieldname','islevelset','format','Boolean');
     125                        WriteData(fid,'object',obj,'fieldname','iscalving','format','Boolean');
    119126
    120127                        %process requested outputs
Note: See TracChangeset for help on using the changeset viewer.