source: issm/oecreview/Archive/24684-25833/ISSM-24847-24848.diff

Last change on this file was 25834, checked in by Mathieu Morlighem, 4 years ago

CHG: added 24684-25833

File size: 6.0 KB
  • ../trunk-jpl/src/m/contrib/larour/glaciermip.m

     
     1%GLACIERMIP class definition
     2%
     3%   Usage:
     4%      gmip = glaciermip('ncfile',glaciermipncfile,'version',1)
     5%
     6%
     7
     8classdef glaciermip < handle
     9        properties (SetAccess=public) %Model fields
     10                ncfile  = '';
     11                version = NaN;
     12
     13                %version 2:
     14                area =[];
     15                mass =[];
     16                region =[];
     17                time =[];
     18                glaciermodel =[];
     19                climatemodel =[];
     20                scenario =[];
     21
     22                %from version 1:
     23                run=[];
     24                forcingmodel=[];
     25                realization=[];
     26                volume=[];
     27        end
     28        methods
     29                function self = glaciermip(varargin) % {{{
     30
     31                        if nargin==0,
     32                                self=setdefaultparameters(self);
     33                        else
     34                                self=setdefaultparameters(self);
     35
     36                                options=pairoptions(varargin{:});
     37
     38                                self.ncfile=getfieldvalue(options,'ncfile');
     39                                self.version=getfieldvalue(options,'version');
     40
     41
     42                                %read variables:
     43                                if self.version==1,
     44                                        self.region=ncread(self.ncfile,'region');
     45                                        self.time=ncread(self.ncfile,'time');
     46                                        self.run=ncread(self.ncfile,'run');
     47                                        self.glaciermodel=ncread(self.ncfile,'glaciermodel');
     48                                        self.forcingmodel=ncread(self.ncfile,'forcingmodel');
     49                                        self.scenario=ncread(self.ncfile,'scenario');
     50                                        self.realization=ncread(self.ncfile,'realization');
     51                                        self.area=ncread(self.ncfile,'area');
     52                                        self.volume=ncread(self.ncfile,'volume');
     53                                elseif self.version==2,
     54                                        self.area=ncread(self.ncfile,'Area');
     55                                        self.mass=ncread(self.ncfile,'Mass');
     56                                        self.region=ncread(self.ncfile,'Region');
     57                                        self.time=ncread(self.ncfile,'Time');
     58                                        self.glaciermodel=ncread(self.ncfile,'Glacier_Model');
     59                                        self.climatemodel=ncread(self.ncfile,'Climate_Model');
     60                                        self.scenario=ncread(self.ncfile,'Scenario');
     61                                        %mass(region,time,climatemodel,glaciermodel,scenario)
     62                                else
     63                                        error(sprintf('glaciermipfile constructor error message: version %i for MIP not supported!'),self.version);
     64                                end
     65                        end
     66                end
     67                %}}}
     68                function inv = setdefaultparameters(inv) % {{{
     69                end
     70                %}}}
     71                function t=gettime(self,varargin) % {{{
     72                       
     73                        options=pairoptions(varargin{:});
     74                        t=self.time;
     75
     76                end % }}}
     77                function masses=getmass(self,varargin) % {{{
     78                       
     79                        options=pairoptions(varargin{:});
     80
     81                        rg=getfieldvalue(options,'region',1:length(self.region));
     82                        cm=getfieldvalue(options,'climatemodel',1:length(self.climatemodel));
     83                        gm=getfieldvalue(options,'glaciermodel',1:length(self.glaciermodel));
     84                        sc=getfieldvalue(options,'scenario',1:length(self.scenario));
     85                        zerostonan=getfieldvalue(options,'zerostonan',0);
     86
     87                        if self.version==1,
     88                                error(sprintf('getmass not supported yet for Glacier MIP version %i',self.version));
     89                        end
     90
     91                        %serialize:
     92                        masses=[];
     93                        for i=rg,
     94                                for j=cm,
     95                                        for k=gm,
     96                                                for l=sc,
     97                                                        masses=[masses; squeeze(self.mass(i,:,j,k,l))];
     98                                                end
     99                                        end
     100                                end
     101                        end
     102                        if zerostonan,
     103                                masses(find(masses==0))=NaN;
     104                        end
     105
     106                end % }}}
     107                function massrates=getmassrates(self,varargin) % {{{
     108               
     109                        options=pairoptions(varargin{:});
     110
     111                        %get mass first:
     112                        masses=self.getmass(varargin{:});
     113
     114                        %compute mass rates:
     115                        dt=diff(self.time);
     116                        dm=diff(masses,1,2);
     117
     118                        massrates=dm;
     119                        for i=1:size(massrates,1),
     120                                massrates(i,:)= massrates(i,:)./dt';
     121                        end
     122
     123
     124                end % }}}
     125                function disp(self) % {{{
     126                        disp(sprintf('   Glacier MIP (version %i):',self.version));
     127
     128                        if self.version==1,
     129                                fielddisplay(self,'ncfile','netcdf file for GlacierMIP results');
     130                                fielddisplay(self,'time','time scale in yr');
     131                                fielddisplay(self,'region','region');
     132                                fielddisplay(self,'run','run');
     133                                fielddisplay(self,'glaciermodel','glacier model');
     134                                fielddisplay(self,'forcingmodel','forcing model');
     135                                fielddisplay(self,'scenario','scenario');
     136                                fielddisplay(self,'realization','realization');
     137                                fielddisplay(self,'area','area');
     138                                fielddisplay(self,'volume','volume');
     139                        end
     140                        if self.version==2,
     141                                fielddisplay(self,'ncfile','netcdf file for GlacierMIP results');
     142                                fielddisplay(self,'time','time');
     143                                fielddisplay(self,'region','region');
     144                                fielddisplay(self,'glaciermodel','glaciermodel');
     145                                fielddisplay(self,'climatemodel','climatemodel');
     146                                fielddisplay(self,'scenario','scenario');
     147                                fielddisplay(self,'area','area');
     148                                fielddisplay(self,'mass','mass');
     149                        end
     150                end % }}}
     151        end
     152end
  • ../trunk-jpl/src/m/contrib/larour/glacier_inventory.m

     
    9292                        end
    9393                end
    9494                %}}}
     95                function totalarea=area(self,varargin) % {{{
     96                        region=-1;
     97                        totalarea=0;
     98                        if nargin==2,
     99                                region=varargin{1};
     100                        end
     101                        if region==-1,
     102                                %figure out the areas of everybody:
     103                                for i=1:self.nregions(),
     104                                        totalarea=totalarea+sum(self.regions(i).Area);
     105                                end
     106                        else
     107                                totalarea=totalarea+sum(self.regions(region).Area);
     108                        end
     109
     110                end % }}}
    95111                function [mpartition,npartition]=partition(self,varargin) % {{{
    96112                        mpartition=zeros(self.nregions(),1);
    97113                        npartition=zeros(self.nregions(),1);
     
    239255                %}}}
    240256                function mesh_connectivity(self,mesh) % {{{
    241257                       
    242                         %initialize glacier_connectivity:
     258                        %initialize glacier and element connectivity:
    243259                        glacier_connectivity=zeros(self.nglaciers,1);
    244260
    245261                        %assume maximum width for connectivity table and initialize
     
    325341                        %For each element, this will tell us which glaciers belong to this element.
    326342                        for j=1:length(glacier_connectivity),
    327343                                el=glacier_connectivity(j);
    328                                 if el==0,
    329                                         continue;
    330                                 end
    331344                                count=element_connectivity(el,ny);
    332345                                if count>ny,
    333346                                        error('need to enlarge connectivity table');
    334347                                end
    335                                 element_connectivity(el,count+1)=partition_counter+j;
     348                                element_connectivity(el,count+1)=j;
    336349                                element_connectivity(el,ny)=count+1;
    337350                        end
    338351
Note: See TracBrowser for help on using the repository browser.