Changeset 19048


Ignore:
Timestamp:
01/29/15 08:44:39 (10 years ago)
Author:
Mathieu Morlighem
Message:

NEW: extrude is now a method of each class so that model.m does not need to know what class is being used

Location:
issm/trunk-jpl/src/m
Files:
50 edited

Legend:

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

    r19040 r19048  
    1111        end
    1212        methods
    13         function createxml(self,fid) % {{{
    14             fprintf(fid, '\n\n');
    15             fprintf(fid, '%s\n', '<!-- basalforcings -->');
    16                          fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="melting_rate" type="',            class(self.melting_rate),'" default="',              num2str(self.melting_rate),'">',              '     <section name="basalforcings" />','     <help> basal melting rate (positive if melting) [m/yr] </help>','</parameter>');
    17              fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',        '<parameter key ="geothermalflux" type="',          class(self.geothermalflux),'" default="',            num2str(self.geothermalflux),'">',            '     <section name="basalforcings" />','     <help> geothermal heat flux [W/m^2] </help>','</parameter>');
    18              
    19         end % }}}
     13                function createxml(self,fid) % {{{
     14                        fprintf(fid, '\n\n');
     15                        fprintf(fid, '%s\n', '<!-- basalforcings -->');
     16                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="melting_rate" type="',            class(self.melting_rate),'" default="',              num2str(self.melting_rate),'">',              '     <section name="basalforcings" />','     <help> basal melting rate (positive if melting) [m/yr] </help>','</parameter>');
     17                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',        '<parameter key ="geothermalflux" type="',          class(self.geothermalflux),'" default="',            num2str(self.geothermalflux),'">',            '     <section name="basalforcings" />','     <help> geothermal heat flux [W/m^2] </help>','</parameter>');
     18
     19                end % }}}
     20                function self = extrude(self,md) % {{{
     21                        self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1);
     22                        self.floatingice_melting_rate=project3d(md,'vector',self.floatingice_melting_rate,'type','node','layer',1);
     23                        self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
     24                end % }}}
    2025                function self = basalforcings(varargin) % {{{
    2126                        switch nargin
  • issm/trunk-jpl/src/m/classes/basalforcings.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from checkfield import checkfield
     
    3031                return string
    3132                #}}}
     33        def extrude(self,md): # {{{
     34                self.groundedice_melting_rate=project3d(md,'vector',self.groundedice_melting_rate,'type','node','layer',1)
     35                self.floatingice_melting_rate=project3d(md,'vector',self.floatingice_melting_rate,'type','node','layer',1)
     36                self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','node','layer',1)    #bedrock only gets geothermal flux
     37                return self
     38        #}}}
    3239        def initialize(self,md): # {{{
    3340
  • issm/trunk-jpl/src/m/classes/calving.m

    r19040 r19048  
    2929                        end
    3030                end % }}}
     31                function self = extrude(self,md) % {{{
     32                        self.calvingrate=project3d(md,'vector',self.calvingrate,'type','node');
     33                        self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
     34                end % }}}
    3135                function self = setdefaultparameters(self) % {{{
    3236
  • issm/trunk-jpl/src/m/classes/calving.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from StringToEnum import StringToEnum
     
    3132                return string
    3233                #}}}
     34        def extrude(self,md): # {{{
     35                self.calvingrate=project3d(md,'vector',self.calvingrate,'type','node')
     36                self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
     37                return self
     38        #}}}
    3339        def setdefaultparameters(self): # {{{
    3440
  • issm/trunk-jpl/src/m/classes/calvinglevermann.m

    r19040 r19048  
    2828                                        error('constructor not supported');
    2929                        end
     30                end % }}}
     31                function self = extrude(self,md) % {{{
     32                        self.coeff=project3d(md,'vector',self.coeff,'type','node');
     33                        self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
    3034                end % }}}
    3135                function self = setdefaultparameters(self) % {{{
  • issm/trunk-jpl/src/m/classes/calvinglevermann.py

    r19027 r19048  
    3030                return string
    3131                #}}}
     32        def extrude(self,md): # {{{
     33                self.coeff=project3d(md,'vector',self.coeff,'type','node')
     34                self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
     35                return self
     36        #}}}
    3237        def setdefaultparameters(self): # {{{
    3338
  • issm/trunk-jpl/src/m/classes/calvingpi.m

    r19040 r19048  
    2828                                        error('constructor not supported');
    2929                        end
     30                end % }}}
     31                function self = extrude(self,md) % {{{
     32                        self.coeff=project3d(md,'vector',self.coeff,'type','node');
     33                        self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node');
    3034                end % }}}
    3135                function self = setdefaultparameters(self) % {{{
  • issm/trunk-jpl/src/m/classes/damage.m

    r19040 r19048  
    8585
    8686                end % }}}
    87        
    8887                function self = damage(varargin) % {{{
    8988                        switch nargin
     
    103102                                        error('constructor not supported');
    104103                        end
     104                end % }}}
     105                function self = extrude(self,md) % {{{
     106                        self.D=project3d(md,'vector',self.D,'type','node');
     107                        self.spcdamage=project3d(md,'vector',self.spcdamage,'type','node');
    105108                end % }}}
    106109                function self = setdefaultparameters(self) % {{{
  • issm/trunk-jpl/src/m/classes/damage.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from StringToEnum import StringToEnum
     
    7475                return s
    7576        # }}}
     77        def extrude(self,md): # {{{
     78                self.D=project3d(md,'vector',self.D,'type','node')
     79                self.spcdamage=project3d(md,'vector',self.spcdamage,'type','node')
     80                return self
     81        #}}}
    7682        def setdefaultparameters(self):    # {{{
    7783
  • issm/trunk-jpl/src/m/classes/flowequation.m

    r19040 r19048  
    107107                        fprintf(fid,'%s\n%s\n','</frame>');
    108108                end % }}}
     109                function self = extrude(self,md) % {{{
     110                        self.element_equation=project3d(md,'vector',self.element_equation,'type','element');
     111                        self.vertex_equation=project3d(md,'vector',self.vertex_equation,'type','node');
     112                        self.borderSSA=project3d(md,'vector',self.borderSSA,'type','node');
     113                        self.borderHO=project3d(md,'vector',self.borderHO,'type','node');
     114                        self.borderFS=project3d(md,'vector',self.borderFS,'type','node');
     115                end % }}}
    109116                function self = flowequation(varargin) % {{{
    110117                        switch nargin
  • issm/trunk-jpl/src/m/classes/flowequation.py

    r18309 r19048  
    11import numpy
    22import copy
     3from project3d import project3d
    34from fielddisplay import fielddisplay
    45from EnumDefinitions import *
     
    5859                return string
    5960                #}}}
     61        def extrude(self,md): # {{{
     62                self.element_equation=project3d(md,'vector',self.element_equation,'type','element')
     63                self.vertex_equation=project3d(md,'vector',self.vertex_equation,'type','node')
     64                self.borderSSA=project3d(md,'vector',self.borderSSA,'type','node')
     65                self.borderHO=project3d(md,'vector',self.borderHO,'type','node')
     66                self.borderFS=project3d(md,'vector',self.borderFS,'type','node')
     67                return self
     68        #}}}
    6069        def setdefaultparameters(self): # {{{
    6170
  • issm/trunk-jpl/src/m/classes/friction.m

    r19040 r19048  
    1111        end
    1212        methods
    13         function createxml(self,fid) % {{{
    14             fprintf(fid, '\n\n');
    15             fprintf(fid, '%s\n', '<!-- Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p -->');
    16             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p">','<section name="friction" />');   
    17             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="coefficient" type="',          class(self.coefficient),'" default="',          convert2str(self.coefficient),'">',              '     <section name="friction" />','     <help> friction coefficient [SI] </help>','</parameter>');
    18             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="p" type="',               class(self.p),'" default="',                 convert2str(self.p),'">',   '     <section name="friction" />','     <help> p exponent </help>','</parameter>');
    19             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',        '<parameter key ="q" type="',               class(self.q),'" default="',                 convert2str(self.q),'">',            '     <section name="friction" />','     <help> q exponent </help>','</parameter>');
    20             fprintf(fid,'%s\n%s\n','</frame>');
    21         end % }}}
     13                function createxml(self,fid) % {{{
     14                        fprintf(fid, '\n\n');
     15                        fprintf(fid, '%s\n', '<!-- Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p -->');
     16                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p">','<section name="friction" />');   
     17                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="coefficient" type="',      class(self.coefficient),'" default="',          convert2str(self.coefficient),'">',              '     <section name="friction" />','     <help> friction coefficient [SI] </help>','</parameter>');
     18                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="p" type="',               class(self.p),'" default="',                 convert2str(self.p),'">',   '     <section name="friction" />','     <help> p exponent </help>','</parameter>');
     19                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',        '<parameter key ="q" type="',               class(self.q),'" default="',                 convert2str(self.q),'">',            '     <section name="friction" />','     <help> q exponent </help>','</parameter>');
     20                        fprintf(fid,'%s\n%s\n','</frame>');
     21                end % }}}
     22                function self = extrude(self,md) % {{{
     23                        self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1);
     24                        self.p=project3d(md,'vector',self.p,'type','element');
     25                        self.q=project3d(md,'vector',self.q,'type','element');
     26                end % }}}
    2227                function self = friction(varargin) % {{{
    2328                        switch nargin
  • issm/trunk-jpl/src/m/classes/friction.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from checkfield import checkfield
     
    2930                return string
    3031                #}}}
     32        def extrude(self,md): # {{{
     33                self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1)
     34                self.p=project3d(md,'vector',self.p,'type','element')
     35                self.q=project3d(md,'vector',self.q,'type','element')
     36                return self
     37        #}}}
    3138        def setdefaultparameters(self): # {{{
    3239                return self
  • issm/trunk-jpl/src/m/classes/frictionhydro.m

    r19040 r19048  
    3131                        md = checkfield(md,'fieldname','friction.As','NaN',1,'size',[md.mesh.numberofelements 1]);
    3232                end % }}}
     33                function self = extrude(self,md) % {{{
     34                        self.q=project3d(md,'vector',self.q,'type','element');
     35                        self.C=project3d(md,'vector',self.C,'type','element');
     36                        self.As=project3d(md,'vector',self.As,'type','element');
     37                        self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1);
     38                end % }}}
    3339                function disp(self) % {{{
    3440                        disp(sprintf('Effective Pressure based friction law described in Gagliardini 2007'));
  • issm/trunk-jpl/src/m/classes/frictionwaterlayer.m

    r19042 r19048  
    3636
    3737                end % }}}
     38                function self = extrude(self,md) % {{{
     39                        self.coefficient=project3d(md,'vector',self.coefficient,'type','node','layer',1);
     40                        self.p=project3d(md,'vector',self.p,'type','element');
     41                        self.q=project3d(md,'vector',self.q,'type','element');
     42                        self.water_layer=project3d(md,'vector',self.water_layer,'type','node','layer',1);
     43                end % }}}
    3844                function disp(self) % {{{
    3945                        disp(sprintf('Basal shear stress parameters: tau_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b * 1/f(T)\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*(bed+water_layer), r=q/p and s=1/p)'));
  • issm/trunk-jpl/src/m/classes/frictionweertman.m

    r19040 r19048  
    1010        end
    1111        methods
    12         function createxml(self,fid) % {{{
    13             fprintf(fid, '\n\n');
    14             fprintf(fid, '%s\n', '<!-- Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p -->');
    15             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p">','<section name="frictionweertman" />');   
    16             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="coefficient" type="',          class(self.coefficient),'" default="',          convert2str(self.coefficient),'">',              '     <section name="frictionweertman" />','     <help> frictionweertman coefficient [SI] </help>','</parameter>');
    17             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="p" type="',               class(self.p),'" default="',                 convert2str(self.p),'">',   '     <section name="frictionweertman" />','     <help> p exponent </help>','</parameter>');
    18             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',        '<parameter key ="q" type="',               class(self.q),'" default="',                 convert2str(self.q),'">',            '     <section name="frictionweertman" />','     <help> q exponent </help>','</parameter>');
    19             fprintf(fid,'%s\n%s\n','</frame>');
    20         end % }}}
     12                function createxml(self,fid) % {{{
     13                        fprintf(fid, '\n\n');
     14                        fprintf(fid, '%s\n', '<!-- Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p -->');
     15                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p">','<section name="frictionweertman" />');   
     16                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="coefficient" type="',      class(self.coefficient),'" default="',          convert2str(self.coefficient),'">',              '     <section name="frictionweertman" />','     <help> frictionweertman coefficient [SI] </help>','</parameter>');
     17                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="p" type="',               class(self.p),'" default="',                 convert2str(self.p),'">',   '     <section name="frictionweertman" />','     <help> p exponent </help>','</parameter>');
     18                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',        '<parameter key ="q" type="',               class(self.q),'" default="',                 convert2str(self.q),'">',            '     <section name="frictionweertman" />','     <help> q exponent </help>','</parameter>');
     19                        fprintf(fid,'%s\n%s\n','</frame>');
     20                end % }}}
    2121                function self = frictionweertman(varargin) % {{{
    2222                        switch nargin
     
    2626                                        error('constructor not supported');
    2727                        end
     28                end % }}}
     29                function self = extrude(self,md) % {{{
     30                        md.friction.C=project3d(md,'vector',md.friction.C,'type','node','layer',1);
     31                        md.friction.m=project3d(md,'vector',md.friction.m,'type','element');
    2832                end % }}}
    2933                function self = setdefaultparameters(self) % {{{
  • issm/trunk-jpl/src/m/classes/frictionweertman.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from checkfield import checkfield
  • issm/trunk-jpl/src/m/classes/geometry.m

    r19040 r19048  
    3333        end
    3434        methods
    35         %function createxml(self,fid)
    36         function createxml(self, fid)% {{{
    37             fprintf(fid, '\n\n');
    38             fprintf(fid, '%s\n', '<!-- geometry -->');
    39             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Geometry parameters">','<section name="geometry" />');
     35                function createxml(self, fid)% {{{
     36                        fprintf(fid, '\n\n');
     37                        fprintf(fid, '%s\n', '<!-- geometry -->');
     38                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Geometry parameters">','<section name="geometry" />');
    4039                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="surface" type="','path','" optional="','false','">','     <section name="geometry" />','     <help> surface elevation [m] </help>','</parameter>');
    41             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thickness" type="','path','" optional="','false','">','     <section name="geometry" />','     <help> ice thickness [m] </help>','</parameter>');
    42             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bed" type="','path','" optional="','false','">','     <section name="geometry" />','     <help> bed elevation [m] </help>','</parameter>');
    43             %fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bathymetry" type="',class(self.bathymetry),'" default="',convert2str(self.bathymetry),'">','     <section name="geometry" />','     <help> bathymetry elevation [m] </help>','</parameter>');
    44             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="hydrostatic_ratio" type="',class(self.hydrostatic_ratio),'" default="',convert2str(self.hydrostatic_ratio),'">','     <section name="geometry" />','     <help> coefficient for ice shelves; thickness correction: hydrostatic_ratio H_obs+ (1-hydrostatic_ratio) H_hydro </help>','</parameter>');
    45             fprintf(fid,'%s\n%s\n','</frame>');
    46         end % }}}
     40                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thickness" type="','path','" optional="','false','">','     <section name="geometry" />','     <help> ice thickness [m] </help>','</parameter>');
     41                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bed" type="','path','" optional="','false','">','     <section name="geometry" />','     <help> bed elevation [m] </help>','</parameter>');
     42                        %fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bathymetry" type="',class(self.bathymetry),'" default="',convert2str(self.bathymetry),'">','     <section name="geometry" />','     <help> bathymetry elevation [m] </help>','</parameter>');
     43                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="hydrostatic_ratio" type="',class(self.hydrostatic_ratio),'" default="',convert2str(self.hydrostatic_ratio),'">','     <section name="geometry" />','     <help> coefficient for ice shelves; thickness correction: hydrostatic_ratio H_obs+ (1-hydrostatic_ratio) H_hydro </help>','</parameter>');
     44                        fprintf(fid,'%s\n%s\n','</frame>');
     45                end % }}}
     46                function self = extrude(self,md) % {{{
     47                        self.surface=project3d(md,'vector',self.surface,'type','node');
     48                        self.thickness=project3d(md,'vector',self.thickness,'type','node');
     49                        self.hydrostatic_ratio=project3d(md,'vector',self.hydrostatic_ratio,'type','node');
     50                        self.base=project3d(md,'vector',self.base,'type','node');
     51                        self.bed=project3d(md,'vector',self.bed,'type','node');
     52                end % }}}
    4753                function self = geometry(varargin) % {{{
    4854                        switch nargin
  • issm/trunk-jpl/src/m/classes/geometry.py

    r19027 r19048  
     1from project3d import project3d
    12from fielddisplay import fielddisplay
    23from EnumDefinitions import *
     
    3233                return string
    3334                #}}}
     35        def extrude(self,md): # {{{
     36                self.surface=project3d(md,'vector',self.surface,'type','node')
     37                self.thickness=project3d(md,'vector',self.thickness,'type','node')
     38                self.hydrostatic_ratio=project3d(md,'vector',self.hydrostatic_ratio,'type','node')
     39                self.base=project3d(md,'vector',self.base,'type','node')
     40                self.bed=project3d(md,'vector',self.bed,'type','node')
     41                return self
     42        #}}}
    3443        def setdefaultparameters(self): # {{{
    3544                return self
  • issm/trunk-jpl/src/m/classes/gia.m

    r19040 r19048  
    1111        end
    1212        methods
    13          function createxml(self,fid) % {{{
    14             fprintf(fid, '<!-- gia -->\n');           
    15                    
    16             % gia solution parameters
    17             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="gia parameters">','<section name="gia" />');                   
    18             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mantle_viscosity" type="',class(self.mantle_viscosity),'" default="',convert2str(self.mantle_viscosity),'">','     <section name="gia" />','     <help> mantle viscosity[Pa s] </help>','  </parameter>');
    19             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="lithosphere_thickness" type="',class(self.lithosphere_thickness),'" default="',convert2str(self.lithosphere_thickness),'">','     <section name="gia" />','     <help> lithosphere thickness (km) </help>','  </parameter>');
    20             %cross_section_shape drop-down (1 o r 2)
    21             fprintf(fid,'%s\n%s\n%s\n%s\n','  <parameter key ="cross_section_shape" type="alternative" optional="false">','     <section name="gia" />','     <help> 1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore </help>');
    22             fprintf(fid,'%s\n','       <option value="1" type="string" default="true"> </option>');
    23             fprintf(fid,'%s\n%s\n','       <option value="2" type="string" default="false"> </option>','</parameter>');
    24            
    25             fprintf(fid,'%s\n%s\n','</frame>');   
    26        
    27         end % }}}
     13                function createxml(self,fid) % {{{
     14                        fprintf(fid, '<!-- gia -->\n');           
     15
     16                        % gia solution parameters
     17                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="gia parameters">','<section name="gia" />');                   
     18                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mantle_viscosity" type="',class(self.mantle_viscosity),'" default="',convert2str(self.mantle_viscosity),'">','     <section name="gia" />','     <help> mantle viscosity[Pa s] </help>','  </parameter>');
     19                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="lithosphere_thickness" type="',class(self.lithosphere_thickness),'" default="',convert2str(self.lithosphere_thickness),'">','     <section name="gia" />','     <help> lithosphere thickness (km) </help>','  </parameter>');
     20                        %cross_section_shape drop-down (1 o r 2)
     21                        fprintf(fid,'%s\n%s\n%s\n%s\n','  <parameter key ="cross_section_shape" type="alternative" optional="false">','     <section name="gia" />','     <help> 1: square-edged (default). 2: elliptical.  See iedge in GiaDeflectionCore </help>');
     22                        fprintf(fid,'%s\n','       <option value="1" type="string" default="true"> </option>');
     23                        fprintf(fid,'%s\n%s\n','       <option value="2" type="string" default="false"> </option>','</parameter>');
     24
     25                        fprintf(fid,'%s\n%s\n','</frame>');   
     26
     27                end % }}}
     28                function self = extrude(self,md) % {{{
     29                        self.mantle_viscosity=project3d(md,'vector',self.mantle_viscosity,'type','node');
     30                        self.lithosphere_thickness=project3d(md,'vector',self.lithosphere_thickness,'type','node');
     31                end % }}}
    2832                function self = gia(varargin) % {{{
    2933                        switch nargin
  • issm/trunk-jpl/src/m/classes/gia.py

    r17497 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from checkfield import checkfield
     
    3031                return string
    3132                #}}}
     33        def extrude(self,md): # {{{
     34                self.mantle_viscosity=project3d(md,'vector',self.mantle_viscosity,'type','node')
     35                self.lithosphere_thickness=project3d(md,'vector',self.lithosphere_thickness,'type','node')
     36                return self
     37        #}}}
    3238        def setdefaultparameters(self): # {{{
    3339
  • issm/trunk-jpl/src/m/classes/hydrologydc.m

    r19040 r19048  
    3737  end
    3838        methods
     39                function self = extrude(self,md) % {{{
     40                        self.spcsediment_head=project3d(md,'vector',self.spcsediment_head,'type','node','layer',1);
     41                        self.mask_eplactive_node=project3d(md,'vector',self.mask_eplactive_node,'type','node','layer',1);
     42                        self.sediment_transmitivity=project3d(md,'vector',self.sediment_transmitivity,'type','node','layer',1);
     43                        self.basal_moulin_input=project3d(md,'vector',self.basal_moulin_input,'type','node','layer',1);
     44                        if(self.isefficientlayer==1);
     45                                self.spcepl_head=project3d(md,'vector',self.spcepl_head,'type','node','layer',1);
     46                        end
     47                end % }}}
    3948                % {{{ function self = hydrologydc(varargin)
    4049                function self = hydrologydc(varargin)
     
    4453                                otherwise
    4554                                        error('constructor not supported');
    46             end
     55                        end
    4756                end
    4857                % }}}
     
    5766                function self = setdefaultparameters(self)
    5867
    59                 %Parameters from de Fleurian 2014
     68                        %Parameters from de Fleurian 2014
    6069                        self.water_compressibility    = 5.04e-10;
    6170                        self.isefficientlayer         = 1;
     
    8695                % {{{ function md = checkconsistency(self,md,solution,analyses)
    8796                function md = checkconsistency(self,md,solution,analyses)
    88                 %Early return
     97                        %Early return
    8998                        if ~ismember(HydrologyDCInefficientAnalysisEnum(),analyses) & ~ismember(HydrologyDCEfficientAnalysisEnum(),analyses),
    9099                                return;
     
    101110                        if self.sedimentlimit_flag==1,
    102111                                md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1);
    103             end
     112                        end
    104113                        if self.transfer_flag==1,
    105114                                md = checkfield(md,'fieldname','hydrology.leakage_factor','>',0,'numel',1);
    106             end
     115                        end
    107116                        md = checkfield(md,'fieldname','hydrology.basal_moulin_input','NaN',1,'timeseries',1);
    108117
     
    127136                                        md = checkmessage(md,'Colapsing thickness for EPL larger than initial thickness');
    128137                                end
    129             end
     138                        end
    130139                end
    131140                % }}}
     
    147156                        if self.sedimentlimit_flag==1,
    148157                                fielddisplay(self,'sedimentlimit','user defined upper limit for the inefficient layer [m]');
    149             end
     158                        end
    150159                        fielddisplay(self,'transfer_flag',['what kind of transfer method is applied between the layers']);
    151160                        disp(sprintf('%55s  0: no transfer',' '));
     
    153162                        if self.transfer_flag==1,
    154163                                fielddisplay(self,'leakage_factor','user defined leakage factor [m]');
    155             end
     164                        end
    156165                        fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]');
    157166                        disp(sprintf('   - for the sediment layer'));
     
    174183                                fielddisplay(self,'epl_conductivity','epl conductivity [m^2/s]');
    175184                                fielddisplay(self,'eplflip_lock','lock the epl activation to avoid fli-floping (default is 0, no stabilization)');
    176             end
     185                        end
    177186
    178187                end
     
    191200                        if self.sedimentlimit_flag==1,
    192201                                WriteData(fid,'object',self,'fieldname','sedimentlimit','format','Double');
    193             end
     202                        end
    194203                        if self.transfer_flag==1,
    195204                                WriteData(fid,'object',self,'fieldname','leakage_factor','format','Double');
    196             end
     205                        end
    197206                        WriteData(fid,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)
    198207
     
    214223                                WriteData(fid,'object',self,'fieldname','epl_conductivity','format','Double');
    215224                                WriteData(fid,'object',self,'fieldname','eplflip_lock','format','Integer');
    216             end
    217                 end
    218 % }}}
    219   end
     225                        end
     226                end
     227                % }}}
     228        end
    220229end
  • issm/trunk-jpl/src/m/classes/hydrologydc.py

    r19027 r19048  
    11import numpy
     2from project3d import project3d
    23from fielddisplay import fielddisplay
    34from EnumDefinitions import *
     
    4748                self.setdefaultparameters()
    4849        #}}}
    49 
    5050        def __repr__(self): # {{{
    5151                string='   hydrology Dual Porous Continuum Equivalent parameters:'
     
    9595                return string
    9696#}}}
     97        def extrude(self,md): # {{{
     98                self.spcsediment_head=project3d(md,'vector',self.spcsediment_head,'type','node','layer',1)
     99                self.spcepl_head=project3d(md,'vector',self.spcepl_head,'type','node','layer',1)
     100                self.mask_eplactive_node=project3d(md,'vector',self.mask_eplactive_node,'type','node','layer',1)
     101                self.sediment_transmitivity=project3d(md,'vector',self.sediment_transmitivity,'type','node','layer',1)
     102                self.basal_moulin_input=project3d(md,'vector',self.basal_moulin_input,'type','node','layer',1)
     103                if self.isefficientlayer==1 :
     104                        self.spcepl_head=project3d(md,'vector',self.spcepl_head,'type','node','layer',1)
     105                return self
     106        #}}}
    97107        def setdefaultparameters(self): #{{{
    98108
     
    125135                return self
    126136        # }}}
    127 
    128137        def initialize(self,md): # {{{
    129138                if numpy.all(numpy.isnan(self.basal_moulin_input)):
  • issm/trunk-jpl/src/m/classes/hydrologyshreve.m

    r19042 r19048  
    1010        end
    1111        methods
    12         function createxml(self,fid) % {{{
    13             fprintf(fid, '\n\n');
    14             fprintf(fid, '%s\n', '<!-- Hydrology -->');
    15            
    16             % Convergence criteria           
    17             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Hydrologyshreve solution parameters">','<section name="hydrologyshreve" />');                   
    18            
     12                function createxml(self,fid) % {{{
     13                        fprintf(fid, '\n\n');
     14                        fprintf(fid, '%s\n', '<!-- Hydrology -->');
     15
     16                        % Convergence criteria           
     17                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Hydrologyshreve solution parameters">','<section name="hydrologyshreve" />');                   
     18
    1919                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="spcwatercolumn" type="',      class(self.spcwatercolumn),'" default="',        convert2str(self.spcwatercolumn),'">',      '     <section name="hydrologyshreve" />','     <help> water thickness constraints (NaN means no constraint) [m] </help>','</parameter>');
    20             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="stabilization" type="',         class(self.stabilization),'" default="',           convert2str(self.stabilization),'">',       '     <section name="hydrologyshreve" />','     <help> artificial diffusivity (default is 1). can be more than 1 to increase diffusivity. </help>','</parameter>');
    21             fprintf(fid,'%s\n%s\n','</frame>');
    22         end % }}}
     20                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',    '<parameter key ="stabilization" type="',         class(self.stabilization),'" default="',           convert2str(self.stabilization),'">',   '     <section name="hydrologyshreve" />','     <help> artificial diffusivity (default is 1). can be more than 1 to increase diffusivity. </help>','</parameter>');
     21                        fprintf(fid,'%s\n%s\n','</frame>');
     22                end % }}}
     23                function self = extrude(self,md) % {{{
     24                end % }}}
    2325                function self = hydrologyshreve(varargin) % {{{
    2426                        switch nargin
  • issm/trunk-jpl/src/m/classes/hydrologyshreve.py

    r19027 r19048  
    2727                return string
    2828                #}}}
     29        def extrude(self,md): # {{{
     30                return self
     31        #}}}
    2932        def setdefaultparameters(self): # {{{
    3033               
  • issm/trunk-jpl/src/m/classes/initialization.m

    r19040 r19048  
    3535                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="watercolumn" type="',class(self.watercolumn),'" default="',self.watercolumn,'">','     <section name="initialization" />','     <help> thickness of subglacial water [m] </help>','</parameter>');
    3636                        fprintf(fid,'%s\n%s\n','</frame>');
     37                end % }}}
     38                function self = extrude(self,md) % {{{
     39                        self.vx=project3d(md,'vector',self.vx,'type','node');
     40                        self.vy=project3d(md,'vector',self.vy,'type','node');
     41                        self.vz=project3d(md,'vector',self.vz,'type','node');
     42                        self.vel=project3d(md,'vector',self.vel,'type','node');
     43                        self.temperature=project3d(md,'vector',self.temperature,'type','node');
     44                        self.waterfraction=project3d(md,'vector',self.waterfraction,'type','node');
     45                        self.watercolumn=project3d(md,'vector',self.watercolumn,'type','node','layer',1);
     46                        self.sediment_head=project3d(md,'vector',self.sediment_head,'type','node','layer',1);
     47                        self.epl_head=project3d(md,'vector',self.epl_head,'type','node','layer',1);
     48                        self.epl_thickness=project3d(md,'vector',self.epl_thickness,'type','node','layer',1);
     49
     50                        %Lithostatic pressure by default
     51                        self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
    3752                end % }}}
    3853                function self = initialization(varargin) % {{{
  • issm/trunk-jpl/src/m/classes/initialization.py

    r18732 r19048  
    11import numpy
     2from project3d import project3d
    23from fielddisplay import fielddisplay
    34from EnumDefinitions import *
     
    4849                return string
    4950                #}}}
     51        def extrude(self,md): # {{{
     52                self.vx=project3d(md,'vector',self.vx,'type','node')
     53                self.vy=project3d(md,'vector',self.vy,'type','node')
     54                self.vz=project3d(md,'vector',self.vz,'type','node')
     55                self.vel=project3d(md,'vector',self.vel,'type','node')
     56                self.temperature=project3d(md,'vector',self.temperature,'type','node')
     57                self.waterfraction=project3d(md,'vector',self.waterfraction,'type','node')
     58                self.watercolumn=project3d(md,'vector',self.watercolumn,'type','node')
     59                self.sediment_head=project3d(md,'vector',self.sediment_head,'type','node','layer',1)
     60                self.epl_head=project3d(md,'vector',self.epl_head,'type','node','layer',1)
     61                self.epl_thickness=project3d(md,'vector',self.epl_thickness,'type','node','layer',1)
     62
     63                #Lithostatic pressure by default
     64                self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,1))
     65                return self
     66        #}}}
    5067        def setdefaultparameters(self): # {{{
    5168                return self
  • issm/trunk-jpl/src/m/classes/inversion.m

    r19040 r19048  
    8484                                        error('constructor not supported');
    8585                        end
     86                end % }}}
     87                function self = extrude(self,md) % {{{
     88                        self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
     89                        self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
     90                        self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
     91                        self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
     92                        if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
     93                        if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
     94                        if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
    8695                end % }}}
    8796                function self = setdefaultparameters(self) % {{{
  • issm/trunk-jpl/src/m/classes/inversion.py

    r18994 r19048  
    11import numpy
     2from project3d import project3d
    23from fielddisplay import fielddisplay
    34from EnumDefinitions import *
     
    7273                return string
    7374                #}}}
     75        def extrude(self,md): # {{{
     76                self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node')
     77                self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node')
     78                self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node')
     79                self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node')
     80                if not numpy.any(numpy.isnan(self.cost_functions_coefficients)):
     81                        self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node')
     82                if not numpy.any(numpy.isnan(self.min_parameters)):
     83                        self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node')
     84                if not numpy.any(numpy.isnan(self.max_parameters)):
     85                        self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node')
     86                return self
     87        #}}}
    7488        def setdefaultparameters(self): # {{{
    7589               
  • issm/trunk-jpl/src/m/classes/inversionvalidation.m

    r19042 r19048  
    2222        end
    2323        methods
     24                function self = extrude(self,md) % {{{
     25                        self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
     26                        self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
     27                        self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
     28                        self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
     29                        if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
     30                        if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
     31                        if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
     32                end % }}}
    2433                function self = inversionvalidation(varargin) % {{{
    2534                        switch nargin
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.m

    r19040 r19048  
    2727        end
    2828        methods
     29                function self = extrude(self,md) % {{{
     30                        self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
     31                        self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
     32                        self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
     33                        self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
     34                        if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
     35                        if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
     36                        if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
     37                end % }}}
    2938                function self = m1qn3inversion(varargin) % {{{
    3039                        switch nargin
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.py

    r19041 r19048  
    11import numpy
     2from project3d import project3d
    23from fielddisplay import fielddisplay
    34from EnumDefinitions import *
     
    9495                return string
    9596                #}}}
     97        def extrude(self,md): # {{{
     98                self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node')
     99                self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node')
     100                self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node')
     101                self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node')
     102                if not numpy.any(numpy.isnan(self.cost_functions_coefficients)):
     103                        self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node')
     104                if not numpy.any(numpy.isnan(self.min_parameters)):
     105                        self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node')
     106                if not numpy.any(numpy.isnan(self.max_parameters)):
     107                        self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node')
     108                return self
     109        #}}}
    96110        def setdefaultparameters(self): # {{{
    97111               
  • issm/trunk-jpl/src/m/classes/mask.m

    r19040 r19048  
    2222        end
    2323        methods
    24         function createxml(self,fid) % {{{
    25             fprintf(fid, '\n\n');
    26             fprintf(fid, '%s\n', '<!-- mask -->');
     24                function createxml(self,fid) % {{{
     25                        fprintf(fid, '\n\n');
     26                        fprintf(fid, '%s\n', '<!-- mask -->');
    2727                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="groundedice_levelset" type="',class(self.groundedice_levelset),'" default="',self.groundedice_levelset,'">','     <section name="mask" />','     <help> is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if &amp;lt; 0 </help>','</parameter>');
    28             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="ice_levelset" type="',class(self.ice_levelset),'" default="',self.ice_levelset,'">','     <section name="mask" />','     <help> presence of ice if > 0, icefront position if = 0, no ice if &amp;lt; 0 </help>','</parameter>');
     28                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="ice_levelset" type="',class(self.ice_levelset),'" default="',self.ice_levelset,'">','     <section name="mask" />','     <help> presence of ice if > 0, icefront position if = 0, no ice if &amp;lt; 0 </help>','</parameter>');
     29                end % }}}
     30                function self = extrude(self,md) % {{{
     31                        self.groundedice_levelset=project3d(md,'vector',self.groundedice_levelset,'type','node');
     32                        self.ice_levelset=project3d(md,'vector',self.ice_levelset,'type','node');
    2933                end % }}}
    3034                function self = mask(varargin) % {{{
  • issm/trunk-jpl/src/m/classes/mask.py

    r18652 r19048  
    11import numpy
    22from fielddisplay import fielddisplay
     3from project3d import project3d
    34from EnumDefinitions import *
    45from checkfield import checkfield
     
    2829                return string
    2930                #}}}
     31        def extrude(self,md): # {{{
     32                self.ice_levelset=project3d(md,'vector',self.ice_levelset,'type','node')
     33                self.groundedice_levelset=project3d(md,'vector',self.groundedice_levelset,'type','node')
     34                return self
     35        #}}}
    3036        def setdefaultparameters(self): # {{{
    3137                return self
  • issm/trunk-jpl/src/m/classes/masstransport.m

    r19040 r19048  
    5858                                        error('constructor not supported');
    5959                        end
     60                end % }}}
     61                function self = extrude(self,md) % {{{
     62                        self.spcthickness=project3d(md,'vector',self.spcthickness,'type','node');
    6063                end % }}}
    6164                function list = defaultoutputs(self,md) % {{{
  • issm/trunk-jpl/src/m/classes/masstransport.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from StringToEnum import StringToEnum
     
    3839                return string
    3940                #}}}
     41        def extrude(self,md): # {{{
     42                self.spcthickness=project3d(md,'vector',self.spcthickness,'type','node')
     43                return self
     44        #}}}
    4045        def defaultoutputs(self,md): # {{{
    4146
  • issm/trunk-jpl/src/m/classes/matdamageice.m

    r19040 r19048  
    6363
    6464
     65                end % }}}
     66                function self = extrude(self,md) % {{{
     67                        self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node');
     68                        self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element');
    6569                end % }}}
    6670                function self = matdamageice(varargin) % {{{
  • issm/trunk-jpl/src/m/classes/matdamageice.py

    r17948 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import MaterialsEnum, MatdamageiceEnum, MaterialsRheologyLawEnum, MaterialsRhoSeawaterEnum
    34from StringToEnum import StringToEnum
     
    6364                return string
    6465                #}}}
     66        def extrude(self,md): # {{{
     67                self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node')
     68                self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element')
     69                return self
     70        #}}}
    6571        def setdefaultparameters(self): # {{{
    6672                #ice density (kg/m^3)
  • issm/trunk-jpl/src/m/classes/matice.m

    r19040 r19048  
    7070
    7171
     72                end % }}}
     73                function self = extrude(self,md) % {{{
     74                        self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node');
     75                        self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element');
    7276                end % }}}
    7377                function self = matice(varargin) % {{{
  • issm/trunk-jpl/src/m/classes/matice.py

    r19027 r19048  
    11from fielddisplay import fielddisplay
     2from project3d import project3d
    23from EnumDefinitions import *
    34from StringToEnum import StringToEnum
     
    6364                return string
    6465                #}}}
     66        def extrude(self,md): # {{{
     67                self.rheology_B=project3d(md,'vector',self.rheology_B,'type','node')
     68                self.rheology_n=project3d(md,'vector',self.rheology_n,'type','element')
     69                return self
     70        #}}}
    6571        def setdefaultparameters(self): # {{{
    6672                #ice density (kg/m^3)
  • issm/trunk-jpl/src/m/classes/model.m

    r19040 r19048  
    750750                        %Ok, now deal with the other fields from the 2d mesh:
    751751
     752                        %bedinfo and surface info
     753                        md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
     754                        md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
     755                        md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
     756
    752757                        %lat long
    753758                        md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node');
    754759                        md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node');
    755760
    756                         %drag coefficient is limited to nodes that are on the bedrock.
    757                         if isa(md.friction,'friction'),
    758                                 md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1);
    759                                 md.friction.p=project3d(md,'vector',md.friction.p,'type','element');
    760                                 md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
    761                         elseif isa(md.friction,'frictionhydro'),
    762                                 md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
    763                                 md.friction.C=project3d(md,'vector',md.friction.C,'type','element');
    764                                 md.friction.As=project3d(md,'vector',md.friction.As,'type','element');
    765                                 md.friction.effective_pressure=project3d(md,'vector',md.friction.effective_pressure,'type','node','layer',1);
    766                         elseif isa(md.friction,'frictionwaterlayer'),
    767                                 md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1);
    768                                 md.friction.p=project3d(md,'vector',md.friction.p,'type','element');
    769                                 md.friction.q=project3d(md,'vector',md.friction.q,'type','element');
    770                                 md.friction.water_layer=project3d(md,'vector',md.friction.water_layer,'type','node','layer',1);
    771                         elseif isa(md.friction,'frictionweertman'),
    772                                 md.friction.C=project3d(md,'vector',md.friction.C,'type','node','layer',1);
    773                                 md.friction.m=project3d(md,'vector',md.friction.m,'type','element');
    774             end
    775          
    776                         %observations
    777                         md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node');
    778                         md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node');
    779                         md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node');
    780                         md.inversion.thickness_obs=project3d(md,'vector',md.inversion.thickness_obs,'type','node');
     761                        md.geometry=extrude(md.geometry,md);
     762                        md.friction  = extrude(md.friction,md);
     763                        md.inversion = extrude(md.inversion,md);
    781764                        md.surfaceforcings = extrude(md.surfaceforcings,md);
    782                         md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node');
    783 
    784                         %results
    785                         if ~isnan(md.initialization.vx),md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node');end;
    786                         if ~isnan(md.initialization.vy),md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node');end;
    787                         if ~isnan(md.initialization.vz),md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node');end;
    788                         if ~isnan(md.initialization.vel),md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node');end;
    789                         if ~isnan(md.initialization.temperature),md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node');end;
    790                         if ~isnan(md.initialization.waterfraction),md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node');end;
    791       if ~isnan(md.initialization.watercolumn),md.initialization.watercolumn=project3d(md,'vector',md.initialization.watercolumn,'type','node','layer',1);end;
    792       if ~isnan(md.initialization.sediment_head),md.initialization.sediment_head=project3d(md,'vector',md.initialization.sediment_head,'type','node','layer',1);end;
    793       if ~isnan(md.initialization.epl_head),md.initialization.epl_head=project3d(md,'vector',md.initialization.epl_head,'type','node','layer',1);end;
    794       if ~isnan(md.initialization.epl_thickness),md.initialization.epl_thickness=project3d(md,'vector',md.initialization.epl_thickness,'type','node','layer',1);end;
    795 
    796                         %bedinfo and surface info
    797                         md.mesh.vertexonbase=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',1);
    798                         md.mesh.vertexonsurface=project3d(md,'vector',ones(md.mesh.numberofvertices2d,1),'type','node','layer',md.mesh.numberoflayers);
    799 
    800                         %elementstype
    801                         if ~isnan(md.flowequation.element_equation)
    802                                 oldelements_type=md.flowequation.element_equation;
    803                                 md.flowequation.element_equation=zeros(number_el3d,1);
    804                                 md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element');
    805                         end
    806 
    807                         %verticestype
    808                         if ~isnan(md.flowequation.vertex_equation)
    809                                 oldvertices_type=md.flowequation.vertex_equation;
    810                                 md.flowequation.vertex_equation=zeros(number_nodes3d,1);
    811                                 md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node');
    812                         end
    813                         md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node');
    814                         md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node');
    815                         md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node');
    816 
    817                         %boundary conditions
    818                         md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node');
    819                         md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node');
    820                         md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node');
    821                         md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
    822                         if (length(md.initialization.temperature)==md.mesh.numberofvertices),
    823                                 md.thermal.spctemperature=NaN*ones(md.mesh.numberofvertices,1);
    824                                 if isprop(md.mesh,'vertexonsurface'),
    825                                         pos=find(md.mesh.vertexonsurface);
    826                                         md.thermal.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
    827                                 end
    828                         end
    829                         md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node');
    830                         md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node');
    831                         md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node');
    832                         md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node');
    833                         md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node');
    834 
    835                         % Calving variables
    836                         if isa(md.calving,'calving'),md.calving.calvingrate=project3d(md,'vector',md.calving.calvingrate,'type','node');end;
    837                         if ~isnan(md.calving.meltingrate),md.calving.meltingrate=project3d(md,'vector',md.calving.meltingrate,'type','node');end;
    838                         if isa(md.calving,'calvinglevermann'),md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node');end;
    839                         if isa(md.calving,'calvingpi'),md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node');end;
    840 
    841                         % Hydrologydc variables
    842                         if isa(md.hydrology,'hydrologydc');
    843                                 md.hydrology.spcsediment_head=project3d(md,'vector',md.hydrology.spcsediment_head,'type','node','layer',1);
    844                                 md.hydrology.mask_eplactive_node=project3d(md,'vector',md.hydrology.mask_eplactive_node,'type','node','layer',1);
    845                                 md.hydrology.sediment_transmitivity=project3d(md,'vector',md.hydrology.sediment_transmitivity,'type','node','layer',1);
    846                                 md.hydrology.basal_moulin_input=project3d(md,'vector',md.hydrology.basal_moulin_input,'type','node','layer',1);
    847                                 if(md.hydrology.isefficientlayer==1);
    848                                         md.hydrology.spcepl_head=project3d(md,'vector',md.hydrology.spcepl_head,'type','node','layer',1);
    849                     end
    850             end
     765                        md.initialization = extrude(md.initialization,md);
     766
     767                        md.flowequation.extrude(md);
     768                        md.stressbalance=extrude(md.stressbalance,md);
     769                        md.thermal.extrude(md);
     770                        md.masstransport.extrude(md);
     771                        md.calving=extrude(md.calving,md);
     772                        md.hydrology = extrude(md.hydrology,md);
    851773
    852774                        %connectivity
     
    861783                        end
    862784
    863                         %materials
    864                         md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node');
    865                         md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element');
    866                                
    867                         %damage
    868                         md.damage.D=project3d(md,'vector',md.damage.D,'type','node');
    869 
    870                         %parameters
    871                         md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node');
    872                         md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node');
    873                         md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node');
    874                         md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node');
    875                         md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node');
    876                         md.geometry.base=project3d(md,'vector',md.geometry.base,'type','node');
    877                         md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node');
    878                         md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node');
    879                         md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node');
    880                         md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node');
    881                         if ~isnan(md.inversion.cost_functions_coefficients),md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node');end;
    882                         if ~isnan(md.inversion.min_parameters),md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node');end;
    883                         if ~isnan(md.inversion.max_parameters),md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node');end;
    884                         if ~isnan(md.qmu.partition),md.qmu.partition=project3d(md,'vector',md.qmu.partition','type','node');end
    885 
    886                         %Put lithostatic pressure if there is an existing pressure
    887                         if ~isnan(md.initialization.pressure),
    888                                 md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z);
    889             end
    890 
    891                         %special for thermal modeling:
    892                         md.basalforcings.groundedice_melting_rate=project3d(md,'vector',md.basalforcings.groundedice_melting_rate,'type','node','layer',1);
    893                         md.basalforcings.floatingice_melting_rate=project3d(md,'vector',md.basalforcings.floatingice_melting_rate,'type','node','layer',1);
    894                         if ~isnan(md.basalforcings.geothermalflux)
    895                                 md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux
    896                         end
     785                        md.materials=extrude(md.materials,md);
     786                        md.damage=extrude(md.damage,md);
     787                        md.mask=extrude(md.mask,md);
     788                        md.qmu=extrude(md.qmu,md);
     789                        md.basalforcings=extrude(md.basalforcings,md);
    897790
    898791                        %increase connectivity if less than 25:
  • issm/trunk-jpl/src/m/classes/model.py

    r18982 r19048  
    595595                #Ok, now deal with the other fields from the 2d mesh:
    596596
     597                #bedinfo and surface info
     598                md.mesh.vertexonbase=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',1)
     599                md.mesh.vertexonsurface=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',md.mesh.numberoflayers)
     600                md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node')
     601
    597602                #lat long
    598603                md.mesh.lat=project3d(md,'vector',md.mesh.lat,'type','node')
    599604                md.mesh.long=project3d(md,'vector',md.mesh.long,'type','node')
    600605
    601                 #drag coefficient is limited to nodes that are on the bedrock.
    602                 md.friction.coefficient=project3d(md,'vector',md.friction.coefficient,'type','node','layer',1)
    603 
    604                 #p and q (same deal, except for element that are on the bedrock: )
    605                 md.friction.p=project3d(md,'vector',md.friction.p,'type','element')
    606                 md.friction.q=project3d(md,'vector',md.friction.q,'type','element')
    607 
    608                 #observations
    609                 md.inversion.vx_obs=project3d(md,'vector',md.inversion.vx_obs,'type','node')
    610                 md.inversion.vy_obs=project3d(md,'vector',md.inversion.vy_obs,'type','node')
    611                 md.inversion.vel_obs=project3d(md,'vector',md.inversion.vel_obs,'type','node')
    612                 md.inversion.thickness_obs=project3d(md,'vector',md.inversion.thickness_obs,'type','node')
     606                md.geometry.extrude(md)
     607                md.friction.extrude(md)
     608                md.inversion.extrude(md)
    613609                md.surfaceforcings.extrude(md)
    614                 md.balancethickness.thickening_rate=project3d(md,'vector',md.balancethickness.thickening_rate,'type','node')
    615 
    616                 #results
    617                 if not numpy.any(numpy.isnan(md.initialization.vx)):
    618                         md.initialization.vx=project3d(md,'vector',md.initialization.vx,'type','node')
    619                 if not numpy.any(numpy.isnan(md.initialization.vy)):
    620                         md.initialization.vy=project3d(md,'vector',md.initialization.vy,'type','node')
    621                 if not numpy.any(numpy.isnan(md.initialization.vz)):
    622                         md.initialization.vz=project3d(md,'vector',md.initialization.vz,'type','node')
    623                 if not numpy.any(numpy.isnan(md.initialization.vel)):
    624                         md.initialization.vel=project3d(md,'vector',md.initialization.vel,'type','node')
    625                 if not numpy.any(numpy.isnan(md.initialization.temperature)):
    626                         md.initialization.temperature=project3d(md,'vector',md.initialization.temperature,'type','node')
    627                 if not numpy.any(numpy.isnan(md.initialization.waterfraction)):
    628                         md.initialization.waterfraction=project3d(md,'vector',md.initialization.waterfraction,'type','node')
    629                 if not numpy.any(numpy.isnan(md.initialization.watercolumn)):
    630                         md.initialization.watercolumn=project3d(md,'vector',md.initialization.watercolumn,'type','node')
    631                 if not numpy.any(numpy.isnan(md.initialization.sediment_head)):
    632                         md.initialization.sediment_head=project3d(md,'vector',md.initialization.sediment_head,'type','node','layer',1)
    633                 if not numpy.any(numpy.isnan(md.initialization.epl_head)):
    634                         md.initialization.epl_head=project3d(md,'vector',md.initialization.epl_head,'type','node','layer',1)
    635                 if not numpy.any(numpy.isnan(md.initialization.epl_thickness)):
    636                         md.initialization.epl_thickness=project3d(md,'vector',md.initialization.epl_thickness,'type','node','layer',1)
    637 
    638                 #bedinfo and surface info
    639                 md.mesh.vertexonbase=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',1)
    640                 md.mesh.vertexonsurface=project3d(md,'vector',numpy.ones(md.mesh.numberofvertices2d,bool),'type','node','layer',md.mesh.numberoflayers)
    641 
    642                 #elementstype
    643                 if not numpy.any(numpy.isnan(md.flowequation.element_equation)):
    644                         oldelements_type=md.flowequation.element_equation
    645                         md.flowequation.element_equation=numpy.zeros(number_el3d,int)
    646                         md.flowequation.element_equation=project3d(md,'vector',oldelements_type,'type','element')
    647 
    648                 #verticestype
    649                 if not numpy.any(numpy.isnan(md.flowequation.vertex_equation)):
    650                         oldvertices_type=md.flowequation.vertex_equation
    651                         md.flowequation.vertex_equation=numpy.zeros(number_nodes3d,int)
    652                         md.flowequation.vertex_equation=project3d(md,'vector',oldvertices_type,'type','node')
    653 
    654                 md.flowequation.borderSSA=project3d(md,'vector',md.flowequation.borderSSA,'type','node')
    655                 md.flowequation.borderHO=project3d(md,'vector',md.flowequation.borderHO,'type','node')
    656                 md.flowequation.borderFS=project3d(md,'vector',md.flowequation.borderFS,'type','node')
    657 
    658                 #boundary conditions
    659                 md.stressbalance.spcvx=project3d(md,'vector',md.stressbalance.spcvx,'type','node')
    660                 md.stressbalance.spcvy=project3d(md,'vector',md.stressbalance.spcvy,'type','node')
    661                 md.stressbalance.spcvz=project3d(md,'vector',md.stressbalance.spcvz,'type','node')
    662                 md.thermal.spctemperature=project3d(md,'vector',md.thermal.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',numpy.nan)
    663                 if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
    664                         md.thermal.spctemperature=numpy.nan*numpy.ones((md.mesh.numberofvertices,1))
    665                         if hasattr(md.mesh,'vertexonsurface'):
    666                                 pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
    667                                 md.thermal.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
    668                 md.masstransport.spcthickness=project3d(md,'vector',md.masstransport.spcthickness,'type','node')
    669                 md.balancethickness.spcthickness=project3d(md,'vector',md.balancethickness.spcthickness,'type','node')
    670                 md.damage.spcdamage=project3d(md,'vector',md.damage.spcdamage,'type','node')
    671                 md.stressbalance.referential=project3d(md,'vector',md.stressbalance.referential,'type','node')
    672                 md.stressbalance.loadingforce=project3d(md,'vector',md.stressbalance.loadingforce,'type','node')
     610                md.initialization.extrude(md)
     611                md.flowequation.extrude(md)
     612
     613                md.stressbalance.extrude(md)
     614                md.thermal.extrude(md)
     615                md.masstransport.extrude(md)
    673616
    674617                # Calving variables
    675                 if isinstance(md.calving,calving):
    676                         md.calving.calvingrate=project3d(md,'vector',md.calving.calvingrate,'type','node')
    677                 if isinstance(md.calving,calvinglevermann):
    678                         md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node')
    679                 #if isinstance(md.calving,calvingpi):
    680                 #       md.calving.coeff=project3d(md,'vector',md.calving.coeff,'type','node')
    681                 if not numpy.any(numpy.isnan(md.calving.meltingrate)):
    682                         md.calving.meltingrate=project3d(md,'vector',md.calving.meltingrate,'type','node')
    683 
    684                 # Hydrologydc variables
    685                 if hasattr(md.hydrology,'hydrologydc'):
    686                         md.hydrology.spcsediment_head=project3d(md,'vector',md.hydrology.spcsediment_head,'type','node','layer',1)
    687                         md.hydrology.spcepl_head=project3d(md,'vector',md.hydrology.spcepl_head,'type','node','layer',1)
    688                         md.hydrology.mask_eplactive_node=project3d(md,'vector',md.hydrology.mask_eplactive_node,'type','node','layer',1)
    689                         md.hydrology.sediment_transmitivity=project3d(md,'vector',md.hydrology.sediment_transmitivity,'type','node','layer',1)
    690                         md.hydrology.basal_moulin_input=project3d(md,'vector',md.hydrology.basal_moulin_input,'type','node','layer',1)
    691                         if md.hydrology.isefficientlayer==1 :
    692                                 md.hydrology.spcepl_head=project3d(md,'vector',md.hydrology.spcepl_head,'type','node','layer',1)
     618                md.hydrology.extrude(md)
     619                md.calving.extrude(md)
    693620
    694621                #connectivity
     
    701628                                md.mesh.elementconnectivity[numpy.nonzero(md.mesh.elementconnectivity<0)]=0
    702629
    703                 #materials
    704                 md.materials.rheology_B=project3d(md,'vector',md.materials.rheology_B,'type','node')
    705                 md.materials.rheology_n=project3d(md,'vector',md.materials.rheology_n,'type','element')
    706 
    707                 #damage
    708                 md.damage.D=project3d(md,'vector',md.damage.D,'type','node')
    709 
    710                 #parameters
    711                 md.geometry.surface=project3d(md,'vector',md.geometry.surface,'type','node')
    712                 md.geometry.thickness=project3d(md,'vector',md.geometry.thickness,'type','node')
    713                 md.gia.mantle_viscosity=project3d(md,'vector',md.gia.mantle_viscosity,'type','node')
    714                 md.gia.lithosphere_thickness=project3d(md,'vector',md.gia.lithosphere_thickness,'type','node')
    715                 md.geometry.hydrostatic_ratio=project3d(md,'vector',md.geometry.hydrostatic_ratio,'type','node')
    716                 md.geometry.base=project3d(md,'vector',md.geometry.base,'type','node')
    717                 md.geometry.bed=project3d(md,'vector',md.geometry.bed,'type','node')
    718                 md.mesh.vertexonboundary=project3d(md,'vector',md.mesh.vertexonboundary,'type','node')
    719                 md.mask.ice_levelset=project3d(md,'vector',md.mask.ice_levelset,'type','node')
    720                 md.mask.groundedice_levelset=project3d(md,'vector',md.mask.groundedice_levelset,'type','node')
    721                 if not numpy.any(numpy.isnan(md.inversion.cost_functions_coefficients)):
    722                         md.inversion.cost_functions_coefficients=project3d(md,'vector',md.inversion.cost_functions_coefficients,'type','node')
    723                 if not numpy.any(numpy.isnan(md.inversion.min_parameters)):
    724                         md.inversion.min_parameters=project3d(md,'vector',md.inversion.min_parameters,'type','node')
    725                 if not numpy.any(numpy.isnan(md.inversion.max_parameters)):
    726                         md.inversion.max_parameters=project3d(md,'vector',md.inversion.max_parameters,'type','node')
    727                 if not numpy.any(numpy.isnan(md.qmu.partition)):
    728                         md.qmu.partition=project3d(md,'vector',numpy.transpose(md.qmu.partition),'type','node')
    729 
    730                 #Put lithostatic pressure if there is an existing pressure
    731                 if not numpy.any(numpy.isnan(md.initialization.pressure)):
    732                         md.initialization.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,1))
    733 
    734                 #special for thermal modeling:
    735                 md.basalforcings.groundedice_melting_rate=project3d(md,'vector',md.basalforcings.groundedice_melting_rate,'type','node','layer',1)
    736                 md.basalforcings.floatingice_melting_rate=project3d(md,'vector',md.basalforcings.floatingice_melting_rate,'type','node','layer',1)
    737                 if not numpy.any(numpy.isnan(md.basalforcings.geothermalflux)):
    738                         md.basalforcings.geothermalflux=project3d(md,'vector',md.basalforcings.geothermalflux,'type','node','layer',1)    #bedrock only gets geothermal flux
     630                md.materials.extrude(md)
     631                md.damage.extrude(md)
     632                md.gia.extrude(md)
     633                md.mask.extrude(md)
     634                md.qmu.extrude(md)
     635                md.basalforcings.extrude(md)
    739636
    740637                #increase connectivity if less than 25:
  • issm/trunk-jpl/src/m/classes/qmu.m

    r19040 r19048  
    2424        end
    2525        methods
    26         function createxml(self,fid) % {{{
    27             fprintf(fid, '<!-- qmu -->\n');           
    28                    
    29             % qmu solution parameters
    30             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="qmu parameters">','<section name="qmu" />');                   
    31                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isdakota" type="',class(self.isdakota),'" default="',convert2str(self.isdakota),'">','     <section name="qmu" />','     <help> is qmu analysis activated? </help>','  </parameter>');
    32                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="variables" type="',class(self.variables),'" default="',convert2str(self.variables),'">','     <section name="qmu" />','     <help> (arrays of each variable class) </help>','  </parameter>');
    33                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="responses" type="',class(self.responses),'" default="',convert2str(self.responses),'">','     <section name="qmu" />','     <help> (arrays of each response class) </help>','  </parameter>');
    34                
    35                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="numberofresponses" type="',class(self.numberofresponses),'" default="',convert2str(self.numberofresponses),'">','     <section name="qmu" />','     <help> number of responses </help>','  </parameter>');
    36                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="params" type="',class(self.params),'" default="',convert2str(self.params),'">','     <section name="qmu" />','     <help> (array of method-independent parameters)  </help>','  </parameter>');
    37                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="results" type="',class(self.results),'" default="',convert2str(self.results),'">','     <section name="qmu" />','     <help> (information from dakota files) </help>','  </parameter>');
    38                
    39                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="partition" type="',class(self.partition),'" default="',convert2str(self.partition),'">','     <section name="qmu" />','     <help> user provided mesh partitioning, defaults to metis if not specified </help>','  </parameter>');
    40                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="numberofpartitions" type="',class(self.numberofpartitions),'" default="',convert2str(self.numberofpartitions),'">','     <section name="qmu" />','     <help> number of partitions for semi-discrete qmu  </help>','  </parameter>');
    41                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="variabledescriptors" type="',class(self.variabledescriptors),'" default="',convert2str(self.variabledescriptors),'">','     <section name="qmu" />','     <help>  </help>','  </parameter>');
    42            
    43                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="responsedescriptors" type="',class(self.responsedescriptors),'" default="',convert2str(self.responsedescriptors),'">','     <section name="qmu" />','     <help> use an enthalpy formulation to include temperate ice (default is 0) </help>','  </parameter>');
    44                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="method" type="',class(self.method),'" default="',convert2str(self.method),'">','     <section name="qmu" />','     <help> array of dakota_method class </help>','  </parameter>');
    45                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mass_flux_profile_directory" type="',class(self.mass_flux_profile_directory),'" default="',convert2str(self.mass_flux_profile_directory),'">','     <section name="qmu" />','     <help> directory for mass flux profiles </help>','  </parameter>');
    46                
    47                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mass_flux_profiles" type="',class(self.mass_flux_profiles),'" default="',convert2str(self.mass_flux_profiles),'">','     <section name="qmu" />','     <help>  </help>','  </parameter>');
    48                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mass_flux_segments" type="',class(self.mass_flux_segments),'" default="',convert2str(self.mass_flux_segments),'">','     <section name="qmu" />','     <help>  </help>','  </parameter>');
    49                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="adjacency" type="',class(self.adjacency),'" default="',convert2str(self.adjacency),'">','     <section name="qmu" />','     <help> additional outputs requested </help>','  </parameter>');
    50                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="vertex_weight" type="',class(self.vertex_weight),'" default="',convert2str(self.vertex_weight),'">','     <section name="qmu" />','     <help> weight applied to each mesh vertex </help>','  </parameter>');
    51            
    52             fprintf(fid,'%s\n%s\n','</frame>');   
    53        
    54         end % }}}       
     26                function createxml(self,fid) % {{{
     27                        fprintf(fid, '<!-- qmu -->\n');           
     28
     29                        % qmu solution parameters
     30                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="qmu parameters">','<section name="qmu" />');                   
     31                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isdakota" type="',class(self.isdakota),'" default="',convert2str(self.isdakota),'">','     <section name="qmu" />','     <help> is qmu analysis activated? </help>','  </parameter>');
     32                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="variables" type="',class(self.variables),'" default="',convert2str(self.variables),'">','     <section name="qmu" />','     <help> (arrays of each variable class) </help>','  </parameter>');
     33                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="responses" type="',class(self.responses),'" default="',convert2str(self.responses),'">','     <section name="qmu" />','     <help> (arrays of each response class) </help>','  </parameter>');
     34
     35                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="numberofresponses" type="',class(self.numberofresponses),'" default="',convert2str(self.numberofresponses),'">','     <section name="qmu" />','     <help> number of responses </help>','  </parameter>');
     36                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="params" type="',class(self.params),'" default="',convert2str(self.params),'">','     <section name="qmu" />','     <help> (array of method-independent parameters)  </help>','  </parameter>');
     37                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="results" type="',class(self.results),'" default="',convert2str(self.results),'">','     <section name="qmu" />','     <help> (information from dakota files) </help>','  </parameter>');
     38
     39                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="partition" type="',class(self.partition),'" default="',convert2str(self.partition),'">','     <section name="qmu" />','     <help> user provided mesh partitioning, defaults to metis if not specified </help>','  </parameter>');
     40                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="numberofpartitions" type="',class(self.numberofpartitions),'" default="',convert2str(self.numberofpartitions),'">','     <section name="qmu" />','     <help> number of partitions for semi-discrete qmu  </help>','  </parameter>');
     41                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="variabledescriptors" type="',class(self.variabledescriptors),'" default="',convert2str(self.variabledescriptors),'">','     <section name="qmu" />','     <help>  </help>','  </parameter>');
     42
     43                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="responsedescriptors" type="',class(self.responsedescriptors),'" default="',convert2str(self.responsedescriptors),'">','     <section name="qmu" />','     <help> use an enthalpy formulation to include temperate ice (default is 0) </help>','  </parameter>');
     44                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="method" type="',class(self.method),'" default="',convert2str(self.method),'">','     <section name="qmu" />','     <help> array of dakota_method class </help>','  </parameter>');
     45                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mass_flux_profile_directory" type="',class(self.mass_flux_profile_directory),'" default="',convert2str(self.mass_flux_profile_directory),'">','     <section name="qmu" />','     <help> directory for mass flux profiles </help>','  </parameter>');
     46
     47                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mass_flux_profiles" type="',class(self.mass_flux_profiles),'" default="',convert2str(self.mass_flux_profiles),'">','     <section name="qmu" />','     <help>  </help>','  </parameter>');
     48                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="mass_flux_segments" type="',class(self.mass_flux_segments),'" default="',convert2str(self.mass_flux_segments),'">','     <section name="qmu" />','     <help>  </help>','  </parameter>');
     49                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="adjacency" type="',class(self.adjacency),'" default="',convert2str(self.adjacency),'">','     <section name="qmu" />','     <help> additional outputs requested </help>','  </parameter>');
     50                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="vertex_weight" type="',class(self.vertex_weight),'" default="',convert2str(self.vertex_weight),'">','     <section name="qmu" />','     <help> weight applied to each mesh vertex </help>','  </parameter>');
     51
     52                        fprintf(fid,'%s\n%s\n','</frame>');   
     53
     54                end % }}}       
     55                function self = extrude(self,md) % {{{
     56                        self.partition=project3d(md,'vector',self.partition','type','node');
     57                end % }}}
    5558                function self = qmu(varargin) % {{{
    5659                        switch nargin
  • issm/trunk-jpl/src/m/classes/qmu.py

    r17480 r19048  
    11import numpy
     2from project3d import project3d
    23from collections import OrderedDict
    34from fielddisplay import fielddisplay
     
    3738
    3839                #}}}
     40        def __repr__(self):    # {{{
     41                s ='   qmu parameters:\n'
     42
     43                s+="%s\n" % fielddisplay(self,'isdakota','is qmu analysis activated?')
     44                for i,variable in enumerate(self.variables.iteritems()):
     45                        s+="         variables%s:  (arrays of each variable class)\n" % \
     46                                        string_dim(self.variables,i)
     47                        fnames=vars(variable)
     48                        maxlen=0
     49                        for fname in fnames:
     50                                maxlen=max(maxlen,len(fname))
     51
     52                        for fname in fnames:
     53                                s+="'            %-*s:    [%ix%i]    '%s'\n" % \
     54                                                (maxlen+1,fname,size(getattr(variable,fname)),type(getattr(variable,fname)))
     55
     56                for i,response in enumerate(self.responses.iteritems()):
     57                        s+="         responses%s:  (arrays of each response class)\n" % \
     58                                        string_dim(self.responses,i)
     59                        fnames=vars(response)
     60                        maxlen=0
     61                        for fname in fnames:
     62                                maxlen=max(maxlen,len(fname))
     63
     64                        for fname in fnames:
     65                                s+="            %-*s:    [%ix%i]    '%s'\n" % \
     66                                                (maxlen+1,fname,size(getattr(response,fname)),type(getattr(response,fname)))
     67
     68                s+="%s\n" % fielddisplay(self,'numberofresponses','number of responses')
     69
     70                for i,method in enumerate(self.method.iteritems()):
     71                        if isinstance(method,'dakota_method'):
     72                                s+="            method%s :    '%s'\n" % \
     73                                                (string_dim(method,i),method.method)
     74
     75                for i,param in enumerate(self.params.iteritems()):
     76                        s+="         params%s:  (array of method-independent parameters)\n" % \
     77                                        string_dim(self.params,i)
     78                        fnames=vars(param)
     79                        maxlen=0
     80                        for fname in fnames:
     81                                maxlen=max(maxlen,len(fname))
     82
     83                        for fname in fnames:
     84                                s+="            %-*s: %s\n" % \
     85                                                (maxlen+1,fname,any2str(getattr(param,fname)))
     86
     87                for i,result in enumerate(self.results.iteritems()):
     88                        s+="         results%s:  (information from dakota files)\n" % \
     89                                        string_dim(self.results,i)
     90                        fnames=vars(result)
     91                        maxlen=0
     92                        for fname in fnames:
     93                                maxlen=max(maxlen,len(fname))
     94
     95                        for fname in fnames:
     96                                s+="            %-*s:    [%ix%i]    '%s'\n" % \
     97                                                (maxlen+1,fname,size(getattr(result,fname)),type(getattr(result,fname)))
     98
     99                s+="%s\n" % fielddisplay(self,'partition','user provided mesh partitioning, defaults to metis if not specified')
     100                s+="%s\n" % fielddisplay(self,'numberofpartitions','number of partitions for semi-discrete qmu')
     101                s+="%s\n" % fielddisplay(self,'variabledescriptors','')
     102                s+="%s\n" % fielddisplay(self,'responsedescriptors','')
     103                s+="%s\n" % fielddisplay(self,'method','array of dakota_method class')
     104                s+="%s\n" % fielddisplay(self,'mass_flux_profile_directory','directory for mass flux profiles')
     105                s+="%s\n" % fielddisplay(self,'mass_flux_profiles','list of mass_flux profiles')
     106                s+="%s\n" % fielddisplay(self,'mass_flux_segments','')
     107                s+="%s\n" % fielddisplay(self,'adjacency','')
     108                s+="%s\n" % fielddisplay(self,'vertex_weight','weight applied to each mesh vertex')
     109
     110                return s
     111        # }}}
     112        def extrude(self,md): # {{{
     113                self.partition=project3d(md,'vector',numpy.transpose(self.partition),'type','node')
     114                return self
     115        #}}}
    39116        def setdefaultparameters(self): # {{{
    40117                return self
     
    62139                return md
    63140        # }}}
    64         def __repr__(self):    # {{{
    65                 s ='   qmu parameters:\n'
    66 
    67                 s+="%s\n" % fielddisplay(self,'isdakota','is qmu analysis activated?')
    68                 for i,variable in enumerate(self.variables.iteritems()):
    69                         s+="         variables%s:  (arrays of each variable class)\n" % \
    70                                 string_dim(self.variables,i)
    71                         fnames=vars(variable)
    72                         maxlen=0
    73                         for fname in fnames:
    74                                 maxlen=max(maxlen,len(fname))
    75 
    76                         for fname in fnames:
    77                                 s+="'            %-*s:    [%ix%i]    '%s'\n" % \
    78                                         (maxlen+1,fname,size(getattr(variable,fname)),type(getattr(variable,fname)))
    79 
    80                 for i,response in enumerate(self.responses.iteritems()):
    81                         s+="         responses%s:  (arrays of each response class)\n" % \
    82                                 string_dim(self.responses,i)
    83                         fnames=vars(response)
    84                         maxlen=0
    85                         for fname in fnames:
    86                                 maxlen=max(maxlen,len(fname))
    87 
    88                         for fname in fnames:
    89                                 s+="            %-*s:    [%ix%i]    '%s'\n" % \
    90                                         (maxlen+1,fname,size(getattr(response,fname)),type(getattr(response,fname)))
    91 
    92                 s+="%s\n" % fielddisplay(self,'numberofresponses','number of responses')
    93 
    94                 for i,method in enumerate(self.method.iteritems()):
    95                         if isinstance(method,'dakota_method'):
    96                                 s+="            method%s :    '%s'\n" % \
    97                                         (string_dim(method,i),method.method)
    98 
    99                 for i,param in enumerate(self.params.iteritems()):
    100                         s+="         params%s:  (array of method-independent parameters)\n" % \
    101                                 string_dim(self.params,i)
    102                         fnames=vars(param)
    103                         maxlen=0
    104                         for fname in fnames:
    105                                 maxlen=max(maxlen,len(fname))
    106 
    107                         for fname in fnames:
    108                                 s+="            %-*s: %s\n" % \
    109                                         (maxlen+1,fname,any2str(getattr(param,fname)))
    110 
    111                 for i,result in enumerate(self.results.iteritems()):
    112                         s+="         results%s:  (information from dakota files)\n" % \
    113                                 string_dim(self.results,i)
    114                         fnames=vars(result)
    115                         maxlen=0
    116                         for fname in fnames:
    117                                 maxlen=max(maxlen,len(fname))
    118 
    119                         for fname in fnames:
    120                                 s+="            %-*s:    [%ix%i]    '%s'\n" % \
    121                                         (maxlen+1,fname,size(getattr(result,fname)),type(getattr(result,fname)))
    122 
    123                 s+="%s\n" % fielddisplay(self,'partition','user provided mesh partitioning, defaults to metis if not specified')
    124                 s+="%s\n" % fielddisplay(self,'numberofpartitions','number of partitions for semi-discrete qmu')
    125                 s+="%s\n" % fielddisplay(self,'variabledescriptors','')
    126                 s+="%s\n" % fielddisplay(self,'responsedescriptors','')
    127                 s+="%s\n" % fielddisplay(self,'method','array of dakota_method class')
    128                 s+="%s\n" % fielddisplay(self,'mass_flux_profile_directory','directory for mass flux profiles')
    129                 s+="%s\n" % fielddisplay(self,'mass_flux_profiles','list of mass_flux profiles')
    130                 s+="%s\n" % fielddisplay(self,'mass_flux_segments','')
    131                 s+="%s\n" % fielddisplay(self,'adjacency','')
    132                 s+="%s\n" % fielddisplay(self,'vertex_weight','weight applied to each mesh vertex')
    133 
    134                 return s
    135         # }}}
    136141        def marshall(self,md,fid):    # {{{
    137142                WriteData(fid,'object',self,'fieldname','isdakota','format','Boolean')
  • issm/trunk-jpl/src/m/classes/stressbalance.m

    r19040 r19048  
    7070                        fprintf(fid,'%s\n%s\n','</frame>');
    7171                end % }}}
     72                function self = extrude(self,md) % {{{
     73                        self.spcvx=project3d(md,'vector',self.spcvx,'type','node');
     74                        self.spcvy=project3d(md,'vector',self.spcvy,'type','node');
     75                        self.spcvz=project3d(md,'vector',self.spcvz,'type','node');
     76                        self.referential=project3d(md,'vector',self.referential,'type','node');
     77                        self.loadingforce=project3d(md,'vector',self.loadingforce,'type','node');
     78
     79                end % }}}
    7280                function self = stressbalance(varargin) % {{{
    7381                        switch nargin
  • issm/trunk-jpl/src/m/classes/stressbalance.py

    r19027 r19048  
    22import sys
    33import copy
     4from project3d import project3d
    45from fielddisplay import fielddisplay
    56from EnumDefinitions import *
     
    7576                return string
    7677                #}}}
     78        def extrude(self,md): # {{{
     79                self.spcvx=project3d(md,'vector',self.spcvx,'type','node')
     80                self.spcvy=project3d(md,'vector',self.spcvy,'type','node')
     81                self.spcvz=project3d(md,'vector',self.spcvz,'type','node')
     82                self.referential=project3d(md,'vector',self.referential,'type','node')
     83                self.loadingforce=project3d(md,'vector',self.loadingforce,'type','node')
     84
     85                return self
     86        #}}}
    7787        def setdefaultparameters(self): # {{{
    7888                #maximum of non-linear iterations.
  • issm/trunk-jpl/src/m/classes/taoinversion.m

    r19040 r19048  
    2929        end
    3030        methods
     31                function self = extrude(self,md) % {{{
     32                        self.vx_obs=project3d(md,'vector',self.vx_obs,'type','node');
     33                        self.vy_obs=project3d(md,'vector',self.vy_obs,'type','node');
     34                        self.vel_obs=project3d(md,'vector',self.vel_obs,'type','node');
     35                        self.thickness_obs=project3d(md,'vector',self.thickness_obs,'type','node');
     36                        if numel(self.cost_functions_coefficients)>1,self.cost_functions_coefficients=project3d(md,'vector',self.cost_functions_coefficients,'type','node');end;
     37                        if numel(self.min_parameters)>1,self.min_parameters=project3d(md,'vector',self.min_parameters,'type','node');end;
     38                        if numel(self.max_parameters)>1,self.max_parameters=project3d(md,'vector',self.max_parameters,'type','node');end;
     39                end % }}}
    3140                function self = taoinversion(varargin) % {{{
    3241                        switch nargin
  • issm/trunk-jpl/src/m/classes/thermal.m

    r19040 r19048  
    1818        end
    1919        methods
    20         function createxml(self,fid) % {{{
    21             fprintf(fid, '<!-- thermal -->\n');           
    22                    
    23             % thermal solution parameters
    24             fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Thermal solution parameters">','<section name="thermal" />');                   
    25             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="spctemperature" type="',class(self.spctemperature),'" default="',convert2str(self.spctemperature),'">','     <section name="thermal" />','     <help> temperature constraints (NaN means no constraint) [K] </help>','  </parameter>');
    26                
    27             % penalty_threshold drop-down (0, 1, or 2)
    28             fprintf(fid,'%s\n%s\n%s\n%s\n','  <parameter key ="penalty_threshold" type="alternative"  optional="false">','     <section name="thermal" />','     <help> 0: no, 1: artificial_diffusivity, 2: SUPG </help>');
    29             fprintf(fid,'%s\n','       <option value="0" type="string" default="true"> </option>');
    30             fprintf(fid,'%s\n','       <option value="1" type="string" default="false"> </option>');
    31             fprintf(fid,'%s\n%s\n','       <option value="2" type="string" default="false"> </option>','</parameter>');
     20                function createxml(self,fid) % {{{
     21                        fprintf(fid, '<!-- thermal -->\n');           
    3222
    33             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="stabilization" type="',class(self.stabilization),'" default="',convert2str(self.stabilization),'">','     <section name="thermal" />','     <help> maximum number of non linear iterations </help>','  </parameter>');
    34                                 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="reltol" type="',class(self.reltol),'" default="',convert2str(self.reltol),'">','     <section name="steadystate" />','     <help> relative tolerance criterion [K] </help>','  </parameter>');
    35             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="maxiter" type="',class(self.maxiter),'" default="',convert2str(self.maxiter),'">','     <section name="thermal" />','     <help> stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>','  </parameter>');
    36             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="penalty_lock" type="',class(self.penalty_lock),'" default="',convert2str(self.penalty_lock),'">','     <section name="thermal" />','     <help> threshold to declare convergence of thermal solution (default is 0)  </help>','  </parameter>');
    37             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="penalty_factor" type="',class(self.penalty_factor),'" default="',convert2str(self.penalty_factor),'">','     <section name="thermal" />','     <help> scaling exponent (default is 3) </help>','  </parameter>');
    38             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isenthalpy" type="',class(self.isenthalpy),'" default="',convert2str(self.isenthalpy),'">','     <section name="thermal" />','     <help> use an enthalpy formulation to include temperate ice (default is 0) </help>','  </parameter>');
    39             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isdynamicbasalspc" type="',class(self.isdynamicbasalspc),'" default="',convert2str(self.isdynamicbasalspc),'">','     <section name="thermal" />','     <help> enable dynamic setting of basal forcing. recommended for enthalpy formulation (default is 0)  </help>','  </parameter>');
    40             fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="requested_outputs" type="',class(self.requested_outputs),'" default="',convert2str(self.requested_outputs),'">','     <section name="thermal" />','     <help> additional outputs requested </help>','  </parameter>');
    41             fprintf(fid,'%s\n%s\n','</frame>');   
    42        
    43         end % }}}
     23                        % thermal solution parameters
     24                        fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Thermal solution parameters">','<section name="thermal" />');                   
     25                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="spctemperature" type="',class(self.spctemperature),'" default="',convert2str(self.spctemperature),'">','     <section name="thermal" />','     <help> temperature constraints (NaN means no constraint) [K] </help>','  </parameter>');
     26
     27                        % penalty_threshold drop-down (0, 1, or 2)
     28                        fprintf(fid,'%s\n%s\n%s\n%s\n','  <parameter key ="penalty_threshold" type="alternative"  optional="false">','     <section name="thermal" />','     <help> 0: no, 1: artificial_diffusivity, 2: SUPG </help>');
     29                        fprintf(fid,'%s\n','       <option value="0" type="string" default="true"> </option>');
     30                        fprintf(fid,'%s\n','       <option value="1" type="string" default="false"> </option>');
     31                        fprintf(fid,'%s\n%s\n','       <option value="2" type="string" default="false"> </option>','</parameter>');
     32
     33                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="stabilization" type="',class(self.stabilization),'" default="',convert2str(self.stabilization),'">','     <section name="thermal" />','     <help> maximum number of non linear iterations </help>','  </parameter>');
     34                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="reltol" type="',class(self.reltol),'" default="',convert2str(self.reltol),'">','     <section name="steadystate" />','     <help> relative tolerance criterion [K] </help>','  </parameter>');
     35                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="maxiter" type="',class(self.maxiter),'" default="',convert2str(self.maxiter),'">','     <section name="thermal" />','     <help> stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>','  </parameter>');
     36                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="penalty_lock" type="',class(self.penalty_lock),'" default="',convert2str(self.penalty_lock),'">','     <section name="thermal" />','     <help> threshold to declare convergence of thermal solution (default is 0)  </help>','  </parameter>');
     37                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="penalty_factor" type="',class(self.penalty_factor),'" default="',convert2str(self.penalty_factor),'">','     <section name="thermal" />','     <help> scaling exponent (default is 3) </help>','  </parameter>');
     38                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isenthalpy" type="',class(self.isenthalpy),'" default="',convert2str(self.isenthalpy),'">','     <section name="thermal" />','     <help> use an enthalpy formulation to include temperate ice (default is 0) </help>','  </parameter>');
     39                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="isdynamicbasalspc" type="',class(self.isdynamicbasalspc),'" default="',convert2str(self.isdynamicbasalspc),'">','     <section name="thermal" />','     <help> enable dynamic setting of basal forcing. recommended for enthalpy formulation (default is 0)  </help>','  </parameter>');
     40                        fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','  <parameter key ="requested_outputs" type="',class(self.requested_outputs),'" default="',convert2str(self.requested_outputs),'">','     <section name="thermal" />','     <help> additional outputs requested </help>','  </parameter>');
     41                        fprintf(fid,'%s\n%s\n','</frame>');   
     42
     43                end % }}}
     44                function self = extrude(self,md) % {{{
     45                        self.spctemperature=project3d(md,'vector',self.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',NaN);
     46                        if (length(md.initialization.temperature)==md.mesh.numberofvertices),
     47                                self.spctemperature=NaN(md.mesh.numberofvertices,1);
     48                                pos=find(md.mesh.vertexonsurface);
     49                                self.spctemperature(pos)=md.initialization.temperature(pos); %impose observed temperature on surface
     50                        end
     51                end % }}}
    4452                function self = thermal(varargin) % {{{
    4553                        switch nargin
  • issm/trunk-jpl/src/m/classes/thermal.py

    r19027 r19048  
    11import numpy
     2from project3d import project3d
    23from fielddisplay import fielddisplay
    34from EnumDefinitions import *
     
    4344                return string
    4445                #}}}
     46        def extrude(self,md): # {{{
     47                self.spctemperature=project3d(md,'vector',self.spctemperature,'type','node','layer',md.mesh.numberoflayers,'padding',numpy.nan)
     48                if isinstance(md.initialization.temperature,numpy.ndarray) and numpy.size(md.initialization.temperature,axis=0)==md.mesh.numberofvertices:
     49                        self.spctemperature=numpy.nan*numpy.ones((md.mesh.numberofvertices,1))
     50                        pos=numpy.nonzero(md.mesh.vertexonsurface)[0]
     51                        self.spctemperature[pos]=md.initialization.temperature[pos]    #impose observed temperature on surface
     52                return self
     53        #}}}
    4554        def defaultoutputs(self,md): # {{{
    4655
  • issm/trunk-jpl/src/m/dev/issmversion.m

    r18375 r19048  
    1717disp(['Compiled on ' IssmConfig('HOST_VENDOR') ' ' IssmConfig('HOST_OS') ' ' IssmConfig('HOST_ARCH') ' by ' IssmConfig('USER_NAME')]);
    1818disp([' ']);
    19 disp(['Copyright (c) 2009-2014 California Institute of Technology']);
     19disp(['Copyright (c) 2009-2015 California Institute of Technology']);
    2020disp([' ']);
    2121disp(['    to get started type: issmdoc']);
Note: See TracChangeset for help on using the changeset viewer.