Changeset 27483


Ignore:
Timestamp:
12/28/22 10:51:15 (2 years ago)
Author:
jdquinn
Message:

CHG: Minor bug fixes; formatting

Location:
issm/trunk-jpl/src/m/classes
Files:
2 edited

Legend:

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

    r27467 r27483  
    1010                num_params        = 0;
    1111                arma_timestep     = 0;
    12                 ar_order          = 0;
     12                ar_order                        = 0;
    1313                arlag_coefs       = NaN;
    14                 ma_order          = 0;
     14                ma_order                        = 0;
    1515                malag_coefs       = NaN;
    1616                polynomialparams  = NaN;
    1717                datebreaks        = NaN;
    18                 basin_id          = NaN;
     18                basin_id                        = NaN;
    1919                lapserates        = NaN;
    2020                elevationbins     = NaN;
    2121                refelevation      = NaN;
    2222                steps_per_step    = 1;
    23                 averaging         = 0;
     23                averaging                       = 0;
    2424                requested_outputs = {};
    2525        end
     
    4747                        if (self.ma_order==0)
    4848                                self.ma_order = 1; %dummy 1 value for moving-average
    49                                 self.arlag_coefs      = zeros(self.num_basins,self.ma_order); %moving-average coefficients all set to 0
     49                                self.malag_coefs      = zeros(self.num_basins,self.ma_order); %moving-average coefficients all set to 0
    5050                                disp('      smb.ma_order (order of moving-average model) not specified: order of moving-average model set to 0');
    5151                        end
     
    7676                                md = checkfield(md,'fieldname','smb.num_params','numel',1,'NaN',1,'Inf',1,'>',0);
    7777                                md = checkfield(md,'fieldname','smb.num_breaks','numel',1,'NaN',1,'Inf',1,'>=',0);
    78                                 md = checkfield(md,'fieldname','smb.basin_id','Inf',1,'>=',0,'<=',md.smb.num_basins,'size',[md.mesh.numberofelements,1]);
     78                                md = checkfield(md,'fieldname','smb.basin_id','Inf',1,'>=',0,'<=',nbas,'size',[md.mesh.numberofelements,1]);
    7979                                if(nbas>1 && nbrk>=1 && nprm>1)
    8080                                        md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm);
     
    8989                                md = checkfield(md,'fieldname','smb.ma_order','numel',1,'NaN',1,'Inf',1,'>=',0);
    9090                                md = checkfield(md,'fieldname','smb.arma_timestep','numel',1,'NaN',1,'Inf',1,'>=',md.timestepping.time_step); %arma time step cannot be finer than ISSM timestep
    91                                 md = checkfield(md,'fieldname','smb.arlag_coefs','NaN',1,'Inf',1,'size',[md.smb.num_basins,md.smb.ar_order]);
    92                                 md = checkfield(md,'fieldname','smb.malag_coefs','NaN',1,'Inf',1,'size',[md.smb.num_basins,md.smb.ma_order]);
     91                                md = checkfield(md,'fieldname','smb.arlag_coefs','NaN',1,'Inf',1,'size',[nbas,md.smb.ar_order]);
     92                                md = checkfield(md,'fieldname','smb.malag_coefs','NaN',1,'Inf',1,'size',[nbas,md.smb.ma_order]);
    9393                               
    9494                                if(nbrk>0)
     
    100100                                end
    101101                                if (any(isnan(md.smb.refelevation)==0) || numel(md.smb.refelevation)>1)
    102                                         md = checkfield(md,'fieldname','smb.refelevation','NaN',1,'Inf',1,'>=',0,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins);
     102                                        md = checkfield(md,'fieldname','smb.refelevation','NaN',1,'Inf',1,'>=',0,'size',[1,nbas],'numel',nbas);
    103103                                end
    104104                                nbas     = size(md.smb.lapserates,1);
     
    109109                                end
    110110                                if (any(isnan(reshape(md.smb.lapserates,[1,nbas*nbins*ntmlapse]))==0) || numel(md.smb.lapserates)>1)
    111                                         md = checkfield(md,'fieldname','smb.lapserates','NaN',1,'Inf',1,'size',[md.smb.num_basins,nbins,ntmlapse],'numel',md.smb.num_basins*nbins*ntmlapse);
    112                                         md = checkfield(md,'fieldname','smb.elevationbins','NaN',1,'Inf',1,'size',[md.smb.num_basins,max(1,nbins-1),ntmlapse],'numel',md.smb.num_basins*max(1,nbins-1)*ntmlapse);
     111                                        md = checkfield(md,'fieldname','smb.lapserates','NaN',1,'Inf',1,'size',[nbas,nbins,ntmlapse],'numel',nbas*nbins*ntmlapse);
     112                                        md = checkfield(md,'fieldname','smb.elevationbins','NaN',1,'Inf',1,'size',[nbas,max(1,nbins-1),ntmlapse],'numel',nbas*max(1,nbins-1)*ntmlapse);
    113113                                        if(issorted(md.smb.elevationbins,2)==0)
    114114                                                error('md.smb.elevationbins should have rows in order of increasing elevation');
     
    117117                                        %elevationbins specified but not lapserates: this will inevitably lead to inconsistencies
    118118                                        nbas     = size(md.smb.elevationbins,1);
    119                nbins    = size(md.smb.elevationbins,2);
     119                                        nbins    = size(md.smb.elevationbins,2);
    120120                                        nbins    = nbins+1;
    121                ntmlapse = size(md.smb.elevationbins,3);
    122                                         md = checkfield(md,'fieldname','smb.lapserates','NaN',1,'Inf',1,'size',[md.smb.num_basins,max(1,nbins-1),ntmlapse],'numel',md.smb.num_basins*nbins*ntmlapse);
    123                                         md = checkfield(md,'fieldname','smb.elevationbins','NaN',1,'Inf',1,'size',[md.smb.num_basins,max(1,nbins-1),ntmlapse],'numel',md.smb.num_basins*max(1,nbins-1)*ntmlapse);
     121                                        ntmlapse = size(md.smb.elevationbins,3);
     122                                        md = checkfield(md,'fieldname','smb.lapserates','NaN',1,'Inf',1,'size',[nbas,max(1,nbins-1),ntmlapse],'numel',nbas*nbins*ntmlapse);
     123                                        md = checkfield(md,'fieldname','smb.elevationbins','NaN',1,'Inf',1,'size',[nbas,max(1,nbins-1),ntmlapse],'numel',nbas*max(1,nbins-1)*ntmlapse);
    124124                                end
    125125                        end
     
    164164                        temprefelevation  = md.smb.refelevation;
    165165                        nbas     = size(md.smb.lapserates,1);
    166          nbins    = size(md.smb.lapserates,2);
    167          ntmlapse = size(md.smb.lapserates,3);
     166                        nbins    = size(md.smb.lapserates,2);
     167                        ntmlapse = size(md.smb.lapserates,3);
    168168                        if(any(isnan(reshape(md.smb.lapserates,[1,nbas*nbins*ntmlapse]))))
    169169                                templapserates = zeros(md.smb.num_basins,2,12);
     
    175175                        end
    176176                        nbas     = size(templapserates,1);
    177          nbins    = size(templapserates,2);
    178          ntmlapse = size(templapserates,3);
     177                        nbins    = size(templapserates,2);
     178                        ntmlapse = size(templapserates,3);
    179179                        if(any(isnan(md.smb.refelevation)))
    180180                                temprefelevation = zeros(1,md.smb.num_basins);
     
    205205                        polyparams2dScaled = zeros(nbas,nper*nprm);
    206206                        if(nprm>1)
    207             % Case 3D %
    208             if(nbas>1 && nper>1)
    209                for(ii=[1:nprm])
    210                   polyparamsScaled(:,:,ii) = polyparamsScaled(:,:,ii)*((1/yts)^(ii));
    211                end
    212                % Fit in 2D array %
    213                for(ii=[1:nprm])
    214                   jj = 1+(ii-1)*nper;
    215                   polyparams2dScaled(:,jj:jj+nper-1) = polyparamsScaled(:,:,ii);
    216                end
    217             % Case 2D and higher-order params at increasing row index %
    218             elseif(nbas==1)
    219                for(ii=[1:nprm])
    220                   polyparamsScaled(ii,:) = polyparamsScaled(ii,:)*((1/yts)^(ii));
    221                end
    222                % Fit in row array %
    223                for(ii=[1:nprm])
    224                   jj = 1+(ii-1)*nper;
    225                   polyparams2dScaled(1,jj:jj+nper-1) = polyparamsScaled(ii,:);
    226                end
    227             % Case 2D and higher-order params at incrasing column index %
    228             elseif(nper==1)
    229                for(ii=[1:nprm])
    230                   polyparamsScaled(:,ii) = polyparamsScaled(:,ii)*((1/yts)^(ii));
    231                end
    232                % 2D array is already in correct format %
    233                polyparams2dScaled = polyparamsScaled;
    234             end
    235          else
     207                                % Case 3D %
     208                                if(nbas>1 && nper>1)
     209                                        for(ii=[1:nprm])
     210                                                polyparamsScaled(:,:,ii) = polyparamsScaled(:,:,ii)*((1/yts)^(ii));
     211                                        end
     212                                        % Fit in 2D array %
     213                                        for(ii=[1:nprm])
     214                                                jj = 1+(ii-1)*nper;
     215                                                polyparams2dScaled(:,jj:jj+nper-1) = polyparamsScaled(:,:,ii);
     216                                        end
     217                                % Case 2D and higher-order params at increasing row index %
     218                                elseif(nbas==1)
     219                                        for(ii=[1:nprm])
     220                                                polyparamsScaled(ii,:) = polyparamsScaled(ii,:)*((1/yts)^(ii));
     221                                        end
     222                                        % Fit in row array %
     223                                        for(ii=[1:nprm])
     224                                                jj = 1+(ii-1)*nper;
     225                                                polyparams2dScaled(1,jj:jj+nper-1) = polyparamsScaled(ii,:);
     226                                        end
     227                                % Case 2D and higher-order params at incrasing column index %
     228                                elseif(nper==1)
     229                                        for(ii=[1:nprm])
     230                                                polyparamsScaled(:,ii) = polyparamsScaled(:,ii)*((1/yts)^(ii));
     231                                        end
     232                                        % 2D array is already in correct format %
     233                                        polyparams2dScaled = polyparamsScaled;
     234                                end
     235                        else
    236236                                polyparamsScaled   = polyparamsScaled*(1/yts);
    237             % 2D array is already in correct format %
    238             polyparams2dScaled = polyparamsScaled;
    239          end
     237                                % 2D array is already in correct format %
     238                                polyparams2dScaled = polyparamsScaled;
     239                        end
    240240                        if(nper==1) %a single period (no break date)
    241             dbreaks = zeros(nbas,1); %dummy
    242          else
    243             dbreaks = md.smb.datebreaks;
    244          end
     241                                dbreaks = zeros(nbas,1); %dummy
     242                        else
     243                                dbreaks = md.smb.datebreaks;
     244                        end
    245245
    246246                        WriteData(fid,prefix,'name','md.smb.model','data',13,'format','Integer');
     
    267267                        pos  = find(ismember(outputs,'default'));
    268268                        if ~isempty(pos),
    269                                 outputs(pos) = [];                         %remove 'default' from outputs
    270                                 outputs      = [outputs defaultoutputs(self,md)]; %add defaults
     269                                outputs(pos) = [];                                                                                      %remove 'default' from outputs
     270                                outputs      = [outputs defaultoutputs(self,md)];       %add defaults
    271271                        end
    272272                        WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray');
  • issm/trunk-jpl/src/m/classes/SMBarma.py

    r27467 r27483  
    33from checkfield import *
    44from fielddisplay import fielddisplay
     5from GetAreas import *
    56from project3d import *
    67from WriteData import *
    7 from GetAreas import *
    88
    99class SMBarma(object):
     
    2121        self.ar_order = 0
    2222        self.arlag_coefs = np.nan
     23        self.ma_order = 0
    2324        self.malag_coefs = np.nan
     25        self.polynomialparams = np.nan
     26        self.datebreaks = np.nan
    2427        self.basin_id = np.nan
    2528        self.lapserates = np.nan
     
    7982            self.arlag_coefs = np.zeros((self.num_basins, self.ar_order)) # Autoregression coefficients all set to 0
    8083            print('      smb.ar_order (order of autoregressive model) not specified: order of autoregressive model set to 0')
     84        if self.ma_order == 0:
     85            self.ma_order = 1 # Dummy 1 value for moving-average
     86            self.malag_coefs = np.zeros((self.num_basins, self.ma_order)) # Moving-average coefficients all set to 0
     87            print('      smb.ma_order (order of moving-average model) not specified: order of moving-average model set to 0')
    8188        if self.arma_timestep == 0:
    8289            self.arma_timestep = md.timestepping.time_step # ARMA model has no prescribed time step
     
    9299
    93100    def checkconsistency(self, md, solution, analyses):  # {{{
     101        """
     102        TODO:
     103        - Ensure that checks on shape of self.lapserates are same as those under MATLAB as matrix addressing is quite different here
     104        """
    94105        if 'MasstransportAnalysis' in analyses:
    95             nbas = md.smb.num_basins;
    96             nprm = md.smb.num_params;
    97             nbrk = md.smb.num_breaks;
     106            nbas = md.smb.num_basins
     107            nprm = md.smb.num_params
     108            nbrk = md.smb.num_breaks
    98109            md = checkfield(md, 'fieldname', 'smb.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0)
    99110            md = checkfield(md, 'fieldname', 'smb.num_params', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0)
    100111            md = checkfield(md, 'fieldname', 'smb.num_breaks', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0)
    101112            md = checkfield(md, 'fieldname', 'smb.basin_id', 'Inf', 1, '>=', 0, '<=', md.smb.num_basins, 'size', [md.mesh.numberofelements])
    102             if len(np.shape(self.polynomialparams)) == 1:
    103                 self.polynomialparams = np.array([[self.polynomialparams]])
    104             if(nbas>1 and nbrk>=1 and nprm>1):
    105                 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk+1,nprm],'numel',nbas*(nbrk+1)*nprm)
    106             elif(nbas==1):
    107                 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nprm,nbrk+1],'numel',nbas*(nbrk+1)*nprm)
    108             elif(nbrk==0):
    109                 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nprm],'numel',nbas*(nbrk+1)*nprm)
    110             elif(nprm==1):
    111                 md = checkfield(md,'fieldname','smb.polynomialparams','NaN',1,'Inf',1,'size',[nbas,nbrk],'numel',nbas*(nbrk+1)*nprm)
     113            # if len(np.shape(self.polynomialparams)) == 1:
     114            #     self.polynomialparams = np.array([[self.polynomialparams]])
     115            if nbas > 1 and nbrk >= 1 and nprm > 1:
     116                md = checkfield(md, 'fieldname', 'smb.polynomialparams', 'NaN', 1, 'Inf', 1, 'size', [nbas, nbrk + 1, nprm], 'numel', nbas * (nbrk + 1) * nprm)
     117            elif nbas == 1:
     118                md = checkfield(md, 'fieldname', 'smb.polynomialparams', 'NaN', 1, 'Inf', 1, 'size', [nprm, nbrk + 1], 'numel', nbas * (nbrk + 1) * nprm)
     119            elif nbrk == 0:
     120                md = checkfield(md, 'fieldname', 'smb.polynomialparams', 'NaN', 1, 'Inf', 1, 'size', [nbas, nprm], 'numel', nbas * (nbrk + 1) * nprm)
     121            elif nprm == 1:
     122                md = checkfield(md, 'fieldname', 'smb.polynomialparams', 'NaN', 1, 'Inf', 1, 'size', [nbas, nbrk], 'numel', nbas * (nbrk + 1) * nprm)
    112123            md = checkfield(md, 'fieldname', 'smb.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0)
     124            md = checkfield(md, 'fieldname', 'smb.ma_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0)
    113125            md = checkfield(md, 'fieldname', 'smb.arma_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep
    114             md = checkfield(md, 'fieldname', 'smb.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ar_order])
    115             md = checkfield(md, 'fieldname', 'smb.malag_coefs', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ma_order])
    116             if(nbrk>0):
     126            md = checkfield(md, 'fieldname', 'smb.arlag_coefs', 'NaN', 1, 'Inf', 1, 'size', [nbas, md.smb.ar_order])
     127            md = checkfield(md, 'fieldname', 'smb.malag_coefs', 'NaN', 1, 'Inf', 1, 'size', [nbas, md.smb.ma_order])
     128            if nbrk > 0:
    117129                md = checkfield(md, 'fieldname', 'smb.datebreaks', 'NaN', 1, 'Inf', 1, 'size', [nbas,nbrk])
    118             elif(np.size(md.smb.datebreaks)==0 or np.all(np.isnan(md.smb.datebreaks))):
     130            elif np.size(md.smb.datebreaks) == 0 or np.all(np.isnan(md.smb.datebreaks)):
    119131                pass
    120132            else:
    121133                raise RuntimeError('md.smb.num_breaks is 0 but md.smb.datebreaks is not empty')
    122134
    123             if(np.any(np.isnan(self.refelevation) is False) or np.size(self.refelevation) > 1):
     135            if np.any(np.isnan(self.refelevation) is False) or np.size(self.refelevation) > 1:
    124136                if len(np.shape(self.refelevation)) == 1:
    125137                    self.refelevation = np.array([self.refelevation])
    126                 md = checkfield(md, 'fieldname', 'smb.refelevation', 'NaN', 1, 'Inf', 1, '>=', 0, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins)
    127 
    128             if(np.any(np.isnan(self.lapserates) is False) or np.size(self.lapserates) > 1):
     138                md = checkfield(md, 'fieldname', 'smb.refelevation', 'NaN', 1, 'Inf', 1, '>=', 0, 'size', [1, nbas], 'numel', nbas)
     139
     140            if (np.any(np.isnan(self.lapserates) is False) or np.size(self.lapserates) > 1):
    129141                nbas = md.smb.num_basins
    130142                if len(np.shape(self.lapserates)) == 1:
     
    140152                    self.elevationbins = np.reshape(self.elevationbins,[nbas,max(1,nbins-1),ntmlapse])
    141153                md = checkfield(md, 'fieldname', 'smb.lapserates', 'NaN', 1, 'Inf', 1, 'size', [nbas,nbins,ntmlapse], 'numel', md.smb.num_basins*nbins*ntmlapse)
    142                 md = checkfield(md, 'fieldname', 'smb.elevationbins', 'NaN', 1, 'Inf', 1, 'size', [nbas,max(1,nbins-1),ntmlapse], 'numel', md.smb.num_basins*max(1,nbins-1)*ntmlapse)
    143                 for rr in range(md.smb.num_basins):
     154                md = checkfield(md, 'fieldname', 'smb.elevationbins', 'NaN', 1, 'Inf', 1, 'size', [nbas,max(1,nbins-1),ntmlapse], 'numel', nbas*max(1,nbins-1)*ntmlapse)
     155                for rr in range(nbas):
    144156                    if(np.all(self.elevationbins[rr,0:-1]<=self.elevationbins[rr,1:])==False):
    145157                        raise TypeError('md.smb.elevationbins should have rows in order of increasing elevation')
    146             elif(np.any(np.isnan(self.elevationbins) is False) or np.size(self.elevationbins) > 1):
    147                 #elevationbins specified but not lapserates: this will inevitably lead to inconsistencies
     158            elif (np.any(np.isnan(self.elevationbins) is False) or np.size(self.elevationbins) > 1):
     159                # Elevationbins specified but not lapserates: this will inevitably lead to inconsistencies
    148160                nbas = md.smb.num_basins
    149161                if len(np.shape(self.elevationbins)) == 1:
     
    155167                elif(len(np.shape(self.lapserates)) == 3):
    156168                    nbins = np.shape(self.lapserates)[1]
    157                 nbins = nbins-1
     169                nbins = nbins - 1
    158170                ntmlapse = np.shape(self.lapserates)[2]
    159                 md = checkfield(md, 'fieldname', 'smb.lapserates', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, nbins*ntmlapse], 'numel', md.smb.num_basins*nbins*ntmlapse)
    160                 md = checkfield(md, 'fieldname', 'smb.elevationbins', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins,max(1,nbins-1)*ntmlapse], 'numel', md.smb.num_basins*max(1,nbins-1)*ntmlapse)
     171                md = checkfield(md, 'fieldname', 'smb.lapserates', 'NaN', 1, 'Inf', 1, 'size', [nbas, nbins * ntmlapse], 'numel', nbas * nbins * ntmlapse)
     172                md = checkfield(md, 'fieldname', 'smb.elevationbins', 'NaN', 1, 'Inf', 1, 'size', [nbas, max(1, nbins - 1) * ntmlapse], 'numel', nbas * max(1, nbins - 1) * ntmlapse)
    161173
    162174        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     
    168180    def marshall(self, prefix, md, fid):  # {{{
    169181        yts = md.constants.yts
    170         nbas = md.smb.num_basins;
    171         nprm = md.smb.num_params;
    172         nper = md.smb.num_breaks+1;
     182        nbas = md.smb.num_basins
     183        nprm = md.smb.num_params
     184        nper = md.smb.num_breaks + 1
    173185        if(np.any(np.isnan(md.smb.lapserates))):
    174             templapserates = np.zeros((md.smb.num_basins,2,12))
     186            templapserates = np.zeros((nbas, 2, 12))
    175187            print('      smb.lapserates not specified: set to 0')
    176             tempelevationbins = np.zeros((md.smb.num_basins,1,12)) #dummy elevation bins
     188            tempelevationbins = np.zeros((nbas, 1, 12)) # Dummy elevation bins
    177189            nbins    = 2
    178190            ntmlapse = 12
    179191        else:
    180             if(len(np.shape(md.smb.lapserates))==1):
     192            if len(np.shape(md.smb.lapserates)) == 1:
    181193                nbins    = 1
    182194                ntmlapse = 1
    183             elif(len(np.shape(md.smb.lapserates))==2):
     195            elif len(np.shape(md.smb.lapserates)) == 2:
    184196                nbins    = np.shape(md.smb.lapserates)[1]
    185197                ntmlapse = 1
    186             elif(len(np.shape(md.smb.lapserates))==3):
     198            elif len(np.shape(md.smb.lapserates)) == 3:
    187199                nbins    = np.shape(md.smb.lapserates)[1]
    188200                ntmlapse = np.shape(md.smb.lapserates)[2]
    189             templapserates    = np.reshape(md.smb.lapserates,[nbas,nbins,ntmlapse])
    190             tempelevationbins = np.reshape(md.smb.elevationbins,[nbas,max(1,nbins-1),ntmlapse])
     201            templapserates    = np.reshape(md.smb.lapserates,[nbas, nbins, ntmlapse])
     202            tempelevationbins = np.reshape(md.smb.elevationbins, [nbas, max(1, nbins - 1), ntmlapse])
    191203        temprefelevation  = np.copy(md.smb.refelevation)
    192         # Scale the parameters #
     204        # Scale the parameters
    193205        polyparamsScaled   = np.copy(md.smb.polynomialparams)
    194         polyparams2dScaled = np.zeros((nbas,nper*nprm))
    195         if(nprm>1):
    196             # Case 3D #
    197             if(nbas>1 and nper>1):
    198                 for ii in range(nprm):
    199                     polyparamsScaled[:,:,ii] = polyparamsScaled[:,:,ii]*(1/yts)**(ii+1)
    200                 # Fit in 2D array #
    201                 for ii in range(nprm):
    202                     polyparams2dScaled[:,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[:,:,ii]
    203             # Case 2D and higher-order params at increasing row index #
    204             elif(nbas==1):
    205                 for ii in range(nprm):
    206                     polyparamsScaled[ii,:] = polyparamsScaled[ii,:]*(1/yts)**(ii+1)
    207                 # Fit in row array #
    208                 for ii in range(nprm):
    209                     polyparams2dScaled[0,ii*nper:(ii+1)*nper] = 1*polyparamsScaled[ii,:]
    210             # Case 2D and higher-order params at incrasing column index #
    211             elif(nper==1):
    212                 for ii in range(nprm):
    213                     polyparamsScaled[:,ii] = polyparamsScaled[:,ii]*(1/yts)**(ii+1)
    214                 # 2D array is already in correct format #
     206        polyparams2dScaled = np.zeros((nbas, nper * nprm))
     207        if nprm > 1:
     208            # Case 3D
     209            if nbas > 1 and nper > 1:
     210                for ii in range(nprm):
     211                    polyparamsScaled[:, :, ii] = polyparamsScaled[:, :, ii] * (1 / yts) ** (ii + 1)
     212                # Fit in 2D array
     213                for ii in range(nprm):
     214                    polyparams2dScaled[:, ii * nper:(ii + 1) * nper] = 1 * polyparamsScaled[:, :, ii]
     215            # Case 2D and higher-order params at increasing row index
     216            elif nbas == 1:
     217                for ii in range(nprm):
     218                    polyparamsScaled[ii, :] = polyparamsScaled[ii, :] * (1 / yts) ** (ii + 1)
     219                # Fit in row array
     220                for ii in range(nprm):
     221                    polyparams2dScaled[0, ii * nper:(ii + 1) * nper] = 1 * polyparamsScaled[ii, :]
     222            # Case 2D and higher-order params at increasing column index
     223            elif nper == 1:
     224                for ii in range(nprm):
     225                    polyparamsScaled[:, ii] = polyparamsScaled[:, ii] * (1 / yts) ** (ii + 1)
     226                # 2D array is already in correct format
    215227                polyparams2dScaled = np.copy(polyparamsScaled)
    216228        else:
    217             polyparamsScaled   = polyparamsScaled*(1/yts)
    218             # 2D array is already in correct format #
     229            polyparamsScaled   = polyparamsScaled * (1 / yts)
     230            # 2D array is already in correct format
    219231            polyparams2dScaled = np.copy(polyparamsScaled)
    220        
    221         if(nper==1):
    222             dbreaks = np.zeros((nbas,1))
     232
     233        if nper == 1:
     234            dbreaks = np.zeros((nbas, 1))
    223235        else:
    224236            dbreaks = np.copy(md.smb.datebreaks)
    225237
    226         if(ntmlapse==1):
    227             templapserates    = np.repeat(templapserates,12,axis=2)
    228             tempelevationbins = np.repeat(tempelevationbins,12,axis=2)
    229         if(np.any(np.isnan(md.smb.refelevation))):
    230             temprefelevation = np.zeros((md.smb.num_basins)).reshape(1,md.smb.num_basins)
     238        if ntmlapse == 1:
     239            templapserates    = np.repeat(templapserates, 12, axis = 2)
     240            tempelevationbins = np.repeat(tempelevationbins, 12, axis = 2)
     241        if np.any(np.isnan(md.smb.refelevation)):
     242            temprefelevation = np.zeros((nbas)).reshape(1, nbas)
    231243            areas = GetAreas(md.mesh.elements, md.mesh.x, md.mesh.y)
    232244            for ii, bid in enumerate(np.unique(md.smb.basin_id)):
     
    239251                print('      smb.refelevation not specified: Reference elevations set to mean surface elevation of basins')
    240252        nbins = np.shape(templapserates)[1]
    241         temp2dlapserates    = np.zeros((nbas,nbins*12))
    242         temp2delevationbins = np.zeros((nbas,max(12,(nbins-1)*12)))
     253        temp2dlapserates    = np.zeros((nbas, nbins * 12))
     254        temp2delevationbins = np.zeros((nbas, max(12, (nbins - 1) * 12)))
    243255        for ii in range(12):
    244             temp2dlapserates[:,ii*nbins:(ii+1)*nbins] = templapserates[:,:,ii]
    245             temp2delevationbins[:,ii*(nbins-1):(ii+1)*(nbins-1)] = tempelevationbins[:,:,ii]
     256            temp2dlapserates[:, ii * nbins:(ii + 1) * nbins] = templapserates[:, :, ii]
     257            temp2delevationbins[:, ii * (nbins - 1):(ii + 1) * (nbins - 1)] = tempelevationbins[:, :, ii]
    246258
    247259        WriteData(fid, prefix, 'name', 'md.smb.model', 'data', 13, 'format', 'Integer')
Note: See TracChangeset for help on using the changeset viewer.