source:
issm/oecreview/Archive/24684-25833/ISSM-24847-24848.diff
Last change on this file was 25834, checked in by , 4 years ago | |
---|---|
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 8 classdef 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 152 end -
../trunk-jpl/src/m/contrib/larour/glacier_inventory.m
92 92 end 93 93 end 94 94 %}}} 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 % }}} 95 111 function [mpartition,npartition]=partition(self,varargin) % {{{ 96 112 mpartition=zeros(self.nregions(),1); 97 113 npartition=zeros(self.nregions(),1); … … 239 255 %}}} 240 256 function mesh_connectivity(self,mesh) % {{{ 241 257 242 %initialize glacier _connectivity:258 %initialize glacier and element connectivity: 243 259 glacier_connectivity=zeros(self.nglaciers,1); 244 260 245 261 %assume maximum width for connectivity table and initialize … … 325 341 %For each element, this will tell us which glaciers belong to this element. 326 342 for j=1:length(glacier_connectivity), 327 343 el=glacier_connectivity(j); 328 if el==0,329 continue;330 end331 344 count=element_connectivity(el,ny); 332 345 if count>ny, 333 346 error('need to enlarge connectivity table'); 334 347 end 335 element_connectivity(el,count+1)= partition_counter+j;348 element_connectivity(el,count+1)=j; 336 349 element_connectivity(el,ny)=count+1; 337 350 end 338 351
Note:
See TracBrowser
for help on using the repository browser.