Changeset 27484


Ignore:
Timestamp:
12/29/22 14:51:50 (2 years ago)
Author:
jdquinn
Message:

CHG: Minor bug fixes; improved efficiency; formatting

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

Legend:

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

    r27483 r27484  
    88
    99class SMBarma(object):
    10     """SMBARMA class definition
     10    """SMBarma class definition
    1111
    1212    Usage:
  • issm/trunk-jpl/src/m/classes/stochasticforcing.m

    r27462 r27484  
    111111                                        end
    112112                                        if(strcmp(class(md.friction),'friction') || strcmp(class(md.friction),'frictionschoof') || strcmp(class(md.friction),'frictioncoulomb'))
    113                   if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2)
    114                      error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field));
    115                   end
     113                                                if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2)
     114                                                        error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field));
     115                                                end
    116116                                        end
    117117                                        if(strcmp(class(md.friction),'friction'))
    118                   if(any(md.friction.q==0))
    119                      error('stochasticforcing field %s requires non-zero q exponent',char(field));
    120                   end
    121                                         end
    122             end
     118                                                if(any(md.friction.q==0))
     119                                                        error('stochasticforcing field %s requires non-zero q exponent',char(field));
     120                                                end
     121                                        end
     122                                end
    123123                                %Checking for specific dimensions
    124124                                if ~(strcmp(field,'SMBarma') || strcmp(field,'FrontalForcingsRignotarma') || strcmp(field,'BasalforcingsDeepwaterMeltingRatearma') || strcmp(field,'FrontalForcingsSubglacialDischargearma') || ((strcmp(field,'FrictionWaterPressure') && ispwHydroarma)))
     
    173173
    174174                        %%% Check consistency between ARMA models %%%
    175                         if(indSMBarma~=-1 && indTFarma~=-1) %both ARMA models are used: check ARMA time step consistency
    176                                 if(md.smb.arma_timestep~=md.frontalforcings.arma_timestep)
    177                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma))),1,[]);
    178                                         if any(crossentries~=0)
    179                                                 error('SMBarma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance');
    180                                         end
    181                                 end
    182                         end
    183                         if(indSMBarma~=-1 && indBDWarma~=-1) %both ARMA models are used: check ARMA time step consistency
    184                                 if(md.smb.arma_timestep~=md.basalforcings.arma_timestep)
    185                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]);
    186                                         if any(crossentries~=0)
    187                                                 error('SMBarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance');
    188                                         end
    189                                 end
    190                         end
    191                         if(indTFarma~=-1 && indBDWarma~=-1) %both ARMA models are used: check ARMA time step consistency
    192                                 if(md.frontalforcings.arma_timestep~=md.basalforcings.arma_timestep)
    193                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]);
    194                                         if any(crossentries~=0)
    195                                                 error('FrontalForcingsRignotarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance');
    196                                         end
    197                                 end
    198                         end
    199                         if(indSMBarma~=-1 && indSdarma~=-1) %both ARMA models are used: check ARMA time step consistency
    200                                 if(md.smb.arma_timestep~=md.frontalforcings.sd_arma_timestep)
    201                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma))),1,[]);
    202                                         if any(crossentries~=0)
    203                                                 error('SMBarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance');
    204                                         end
    205                                 end
    206                         end
    207                         if(indSMBarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
    208                                 if(md.smb.arma_timestep~=md.hydrology.arma_timestep)
    209                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
    210                                         if any(crossentries~=0)
    211                                                 error('SMBarma and hydrologyarmapw have different arma_timestep and non-zero covariance');
    212                                         end
    213                                 end
    214                         end
    215                         if(indSdarma~=-1 && indBDWarma~=-1) %both ARMA models are used: check ARMA time step consistency
    216                                 if(md.frontalforcings.sd_arma_timestep~=md.basalforcings.arma_timestep)
    217                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]);
    218                                         if any(crossentries~=0)
    219                                                 error('FrontalForcingsSubglacialDischargearma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance');
    220                                         end
    221                                 end
    222                         end
    223                         if(indSdarma~=-1 && indTFarma~=-1) %both ARMA models are used: check ARMA time step consistency
    224                                 if(md.frontalforcings.sd_arma_timestep~=md.frontalforcings.arma_timestep)
    225                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma))),1,[]);
    226                                         if any(crossentries~=0)
    227                                                 error('FrontalForcingsRignotarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance');
    228                                         end
    229                                 end
    230                         end
    231                         if(indTFarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
    232                                 if(md.frontalforcings.arma_timestep~=md.hydrology.arma_timestep)
    233                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
    234                                         if any(crossentries~=0)
    235                                                 error('FrontalForcingsRignotarma and hydrologyarmapw have different arma_timestep and non-zero covariance');
    236                                         end
    237                                 end
    238                         end
    239                         if(indSdarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
    240                                 if(md.frontalforcings.sd_arma_timestep~=md.hydrology.arma_timestep)
    241                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
    242                                         if any(crossentries~=0)
    243                                                 error('FrontalForcingsSubglacialDischargearma and hydrologyarmapw have different arma_timestep and non-zero covariance');
    244                                         end
    245                                 end
    246                         end
    247                         if(indBDWarma~=-1 && indPwarma~=-1) %both ARMA models are used: check ARMA time step consistency
    248                                 if(md.basalforcings.arma_timestep~=md.hydrology.arma_timestep)
    249                                         crossentries = reshape(self.covariance(1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
    250                                         if any(crossentries~=0)
    251                                                 error('BasalforcingsDeepwaterMeltingRatearma and hydrologyarmapw have different arma_timestep and non-zero covariance');
     175                        if(indBDWarma~=-1)
     176                                if(indPwarma~=-1)
     177                                        if(md.basalforcings.arma_timestep~=md.hydrology.arma_timestep)
     178                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
     179                                                if any(crossentries~=0)
     180                                                        error('BasalforcingsDeepwaterMeltingRatearma and hydrologyarmapw have different arma_timestep and non-zero covariance');
     181                                                end
     182                                        end
     183                                elseif(indSdarma~=-1)
     184                                        if(md.frontalforcings.sd_arma_timestep~=md.basalforcings.arma_timestep)
     185                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]);
     186                                                if any(crossentries~=0)
     187                                                        error('FrontalForcingsSubglacialDischargearma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance');
     188                                                end
     189                                        end
     190                                elseif(indSMBarma~=-1)
     191                                        if(md.smb.arma_timestep~=md.basalforcings.arma_timestep)
     192                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]);
     193                                                if any(crossentries~=0)
     194                                                        error('SMBarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance');
     195                                                end
     196                                        end
     197                                elseif(indTFarma~=-1)
     198                                        if(md.frontalforcings.arma_timestep~=md.basalforcings.arma_timestep)
     199                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma)),1+sum(dimensions(1:indBDWarma-1)):sum(dimensions(1:indBDWarma))),1,[]);
     200                                                if any(crossentries~=0)
     201                                                        error('FrontalForcingsRignotarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance');
     202                                                end
     203                                        end
     204                                end
     205                        elseif(indPwarma~=-1)
     206                                if(indSdarma~=-1)
     207                                        if(md.frontalforcings.sd_arma_timestep~=md.hydrology.arma_timestep)
     208                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
     209                                                if any(crossentries~=0)
     210                                                        error('FrontalForcingsSubglacialDischargearma and hydrologyarmapw have different arma_timestep and non-zero covariance');
     211                                                end
     212                                        end
     213                                elseif(indSMBarma~=-1)
     214                                        if(md.smb.arma_timestep~=md.hydrology.arma_timestep)
     215                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
     216                                                if any(crossentries~=0)
     217                                                        error('SMBarma and hydrologyarmapw have different arma_timestep and non-zero covariance');
     218                                                end
     219                                        end
     220                                elseif(indTFarma~=-1)
     221                                        if(md.frontalforcings.arma_timestep~=md.hydrology.arma_timestep)
     222                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma)),1+sum(dimensions(1:indPwarma-1)):sum(dimensions(1:indPwarma))),1,[]);
     223                                                if any(crossentries~=0)
     224                                                        error('FrontalForcingsRignotarma and hydrologyarmapw have different arma_timestep and non-zero covariance');
     225                                                end
     226                                        end
     227                                end
     228                        elseif(indSdarma~=-1)
     229                                if(indSMBarma~=-1)
     230                                        if(md.smb.arma_timestep~=md.frontalforcings.sd_arma_timestep)
     231                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma))),1,[]);
     232                                                if any(crossentries~=0)
     233                                                        error('SMBarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance');
     234                                                end
     235                                        end
     236                                elseif(indTFarma~=-1)
     237                                        if(md.frontalforcings.sd_arma_timestep~=md.frontalforcings.arma_timestep)
     238                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSdarma-1)):sum(dimensions(1:indSdarma)),1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma))),1,[]);
     239                                                if any(crossentries~=0)
     240                                                        error('FrontalForcingsRignotarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance');
     241                                                end
     242                                        end
     243                                end
     244                        elseif(indSMBarma~=-1)
     245                                if(indTFarma~=-1)
     246                                        if(md.smb.arma_timestep~=md.frontalforcings.arma_timestep)
     247                                                crossentries = reshape(self.covariance(1+sum(dimensions(1:indSMBarma-1)):sum(dimensions(1:indSMBarma)),1+sum(dimensions(1:indTFarma-1)):sum(dimensions(1:indTFarma))),1,[]);
     248                                                if any(crossentries~=0)
     249                                                        error('SMBarma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance');
     250                                                end
    252251                                        end
    253252                                end
     
    321320                                        end
    322321                                        if(strcmp(field,'FrictionWaterPressure') && ispwHydroarma)
    323                   dimensions(ind) = md.hydrology.num_basins;
    324                end
     322                                                dimensions(ind) = md.hydrology.num_basins;
     323                                   end
    325324                                        ind = ind+1;
    326325                                end
  • issm/trunk-jpl/src/m/classes/stochasticforcing.py

    r27462 r27484  
    77
    88class stochasticforcing(object):
    9     """STOCHASTICFORCING class definition
     9    """stochasticforcing class definition
    1010
    1111    Usage:
     
    6565
    6666        num_fields = len(self.fields)
    67         if(self.stochastictimestep==0):
     67        if self.stochastictimestep == 0:
    6868            md.stochasticforcing.stochastictimestep = md.timestepping.time_step #by default: stochastictimestep set to ISSM time step
    6969            print('      stochasticforcing.stocahstictimestep not specified: set to md.timestepping.time_step')
     
    7979        structstoch = self.structstochforcing()
    8080        # Check if hydrologyarmapw is used
    81         if((type(md.hydrology).__name__ == 'hydrologyarmapw') and md.transient.hydrology==1):
     81        if type(md.hydrology).__name__ == 'hydrologyarmapw' and md.transient.ishydrology:
    8282            ispwHydroarma = 1
    8383        else:
     
    8787            if 'SMBarma' in field:
    8888                mdname = structstoch[field]
    89                 if (type(md.smb).__name__ != mdname):
     89                if type(md.smb).__name__ != mdname:
    9090                    raise TypeError('md.smb does not agree with stochasticforcing field {}'.format(field))
    9191            if 'SMBforcing' in field:
    9292                mdname = structstoch[field]
    93                 if (type(md.smb).__name__ != mdname):
     93                if type(md.smb).__name__ != mdname:
    9494                    raise TypeError('md.smb does not agree with stochasticforcing field {}'.format(field))
    9595            if 'FrontalForcings' in field:
    9696                mdname = structstoch[field]
    97                 if (type(md.frontalforcings).__name__ != mdname):
     97                if type(md.frontalforcings).__name__ != mdname:
    9898                    raise TypeError('md.frontalforcings does not agree with stochasticforcing field {}'.format(field))
    9999            if 'Calving' in field:
    100100                mdname = structstoch[field]
    101                 if (type(md.calving).__name__ != mdname):
     101                if type(md.calving).__name__ != mdname:
    102102                    raise TypeError('md.calving does not agree with stochasticforcing field {}'.format(field))
    103103            if 'BasalforcingsFloatingice' in field:
    104104                mdname = structstoch[field]
    105                 if (type(md.basalforcings).__name__ != mdname):
     105                if type(md.basalforcings).__name__ != mdname:
    106106                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))
    107107            if 'BasalforcingsSpatialDeepwaterMeltingRate' in field:
    108108                mdname = structstoch[field]
    109                 if (type(md.basalforcings).__name__ != mdname):
     109                if type(md.basalforcings).__name__ != mdname:
    110110                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))
    111111            if 'BasalforcingsDeepwaterMeltingRatearma' in field:
    112112                mdname = structstoch[field]
    113                 if (type(md.basalforcings).__name__ != mdname):
     113                if type(md.basalforcings).__name__ != mdname:
    114114                    raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))
    115115            if 'WaterPressure' in field:
     
    118118                found   = 0
    119119                for ii in range(len(mdnames)):
    120                     if (type(md.friction).__name__ == mdnames[ii]):
     120                    if type(md.friction).__name__ == mdnames[ii]:
    121121                        found = 1
    122                 if(found==0):
     122                if not found:
    123123                    raise TypeError('md.friction does not agree with stochasticforcing field {}'.format(field))
    124124                #if (type(md.friction).__name__ != mdname):
    125125                #    raise TypeError('md.friction does not agree with stochasticforcing field {}'.format(field))
    126                 if (type(md.friction).__name__=='friction' or type(md.friction).__name__=='frictionschoof' or type(md.friction).__name__=='frictioncoulomb'):
     126                if type(md.friction).__name__ == 'friction' or type(md.friction).__name__ == 'frictionschoof' or type(md.friction).__name__=='frictioncoulomb':
    127127                    if md.friction.coupling not in[0, 1, 2]:
    128128                        raise TypeError('stochasticforcing field {} is only implemented for cases md.friction.coupling 0 or 1 or 2'.format(field))
    129                 if (type(md.friction).__name__=='friction'):
     129                if type(md.friction).__name__ == 'friction':
    130130                    if (np.any(md.friction.q == 0)):
    131131                        raise TypeError('stochasticforcing field {} requires non-zero q exponent'.format(field))
    132132
    133133            # Checking for specific dimensions
    134             if ((field not in['SMBarma', 'FrontalForcingsRignotarma','BasalforcingsDeepwaterMeltingRatearma']) and ((field=='FrictionWaterPressure' and ispwHydroarma==True)==False)):
     134            if field not in ['SMBarma', 'FrontalForcingsRignotarma','BasalforcingsDeepwaterMeltingRatearma']  and not (field == 'FrictionWaterPressure' and ispwHydroarma == True):
    135135                checkdefaults = True  # field with non-specific dimensionality
    136136
    137137        # Retrieve sum of all the field dimensionalities
    138         dimensions = self.defaultdimension*np.ones((num_fields))
     138        dimensions = self.defaultdimension * np.ones((num_fields))
    139139        indSMBarma   = -1  # About to check for index of SMBarma
    140140        indTFarma    = -1  # About to check for index of FrontalForcingsRignotarma
     
    142142        indBDWarma   = -1  # About to check for index of BasalforcingsDeepwaterMeltingRatearma
    143143        indPwarma    = -1  # About to check for index of hydrologyarmapw
    144         if ('SMBarma' in self.fields):
     144        if 'SMBarma' in self.fields:
    145145            indSMBarma = self.fields.index('SMBarma')  # Index of SMBarma, now check for consistency with other timesteps
    146146            dimensions[indSMBarma] = md.smb.num_basins
    147147            if(md.smb.arma_timestep<self.stochastictimestep):
    148148                raise TypeError('SMBarma cannot have a timestep shorter than stochastictimestep')
    149         if ('FrontalForcingsRignotarma' in self.fields):
     149        if 'FrontalForcingsRignotarma' in self.fields:
    150150            indTFarma = self.fields.index('FrontalForcingsRignotarma')  # Index of TFarma, now check for consistency with other timesteps
    151151            dimensions[indTFarma] = md.frontalforcings.num_basins
    152             if(md.frontalforcings.arma_timestep<self.stochastictimestep):
     152            if md.frontalforcings.arma_timestep < self.stochastictimestep:
    153153                raise TypeError('FrontalForcingsRignotarma cannot have a timestep shorter than stochastictimestep')
    154         if ('FrontalForcingsSubglacialDischargearma' in self.fields):
     154        if 'FrontalForcingsSubglacialDischargearma' in self.fields:
    155155            indSdarma = self.fields.index('FrontalForcingsSubglacialDischargearma')  # Index of Sdarma, now check for consistency with other timesteps
    156156            dimensions[indSdarma] = md.frontalforcings.num_basins
    157             if(md.frontalforcings.sd_arma_timestep<self.stochastictimestep):
     157            if md.frontalforcings.sd_arma_timestep < self.stochastictimestep:
    158158                raise TypeError('FrontalForcingsSubglacialDischargearma cannot have a timestep shorter than stochastictimestep')
    159         if ('BasalforcingsDeepwaterMeltingRatearma' in self.fields):
     159        if 'BasalforcingsDeepwaterMeltingRatearma' in self.fields:
    160160            indBDWarma = self.fields.index('BasalforcingsDeepwaterMeltingRatearma')  # Index of BDWarma, now check for consistency with other timesteps
    161161            dimensions[indTFarma] = md.basalforcings.num_basins
    162             if(md.basalforcings.arma_timestep<self.stochastictimestep):
     162            if md.basalforcings.arma_timestep < self.stochastictimestep:
    163163                raise TypeError('BasalforcingsDeepwaterMeltingRatearma cannot have a timestep shorter than stochastictimestep')
    164         if (('FrictionWaterPressure' in self.fields) and ispwHydroarma):
     164        if 'FrictionWaterPressure' in self.fields and ispwHydroarma:
    165165            indPwarma = self.fields.index('FrictionWaterPressure')  # Index of Pwarma, now check for consistency with other timesteps
    166166            dimensions[indPwarma] = md.hydrology.num_basins
    167             if(md.hydrology.arma_timestep<self.stochastictimestep):
     167            if md.hydrology.arma_timestep < self.stochastictimestep:
    168168                raise TypeError('hydrologyarmapw cannot have a timestep shorter than stochastictimestep')
    169169        size_tot = np.sum(dimensions)
    170170
    171         if (indSMBarma != -1 and indTFarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    172             covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int)]
    173             if((md.smb.arma_timestep != md.frontalforcings.arma_timestep) and np.any(covsum != 0)):
    174                 raise IOError('SMBarma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance')
    175         if (indSMBarma != -1 and indBDWarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    176             covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)]
    177             if((md.smb.arma_timestep != md.basalforcings.arma_timestep) and np.any(covsum != 0)):
    178                 raise IOError('SMBarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance')
    179         if (indTFarma != -1 and indBDWarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    180             covsum = self.covariance[np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)]
    181             if((md.frontalforcings.arma_timestep != md.basalforcings.arma_timestep) and np.any(covsum != 0)):
    182                 raise IOError('FrontalForcingsRignotarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance')
    183         if (indSMBarma != -1 and indSdarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    184             covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int)]
    185             if((md.smb.arma_timestep != md.frontalforcings.sd_arma_timestep) and np.any(covsum != 0)):
    186                 raise IOError('SMBarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance')
    187         if (indSdarma != -1 and indBDWarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    188             covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)]
    189             if((md.frontalforcings.sd_arma_timestep != md.basalforcings.arma_timestep) and np.any(covsum != 0)):
    190                 raise IOError('FrontalForcingsSubglacialDischargearma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance')
    191         if (indSdarma != -1 and indTFarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    192             covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int)]
    193             if((md.frontalforcings.sd_arma_timestep != md.frontalforcings.arma_timestep) and np.any(covsum != 0)):
    194                 raise IOError('FrontalForcingsSubglacialDischargearma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance')
    195         if (indSMBarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    196             covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
    197             if((md.smb.arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
    198                 raise IOError('SMBarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
    199         if (indTFarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    200             covsum = self.covariance[np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
    201             if((md.frontalforcings.arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
    202                 raise IOError('FrontalForcingsRignotarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
    203         if (indSdarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    204             covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
    205             if((md.frontalforcings.sd_arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
    206                 raise IOError('FrontalForingsSubglacialDischargearma and hydrologyarmapw have different arma_timestep and non-zero covariance')
    207         if (indBDWarma != -1 and indPwarma != -1):  # Both ARMA models are used: check ARMA time step consistency
    208             covsum = self.covariance[np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
    209             if((md.smb.arma_timestep != md.hydrology.arma_timestep) and np.any(covsum != 0)):
    210                 raise IOError('BasalforcingsDeepwaterMeltingRatarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
    211  
     171        if indBDWarma != -1:
     172            if indPwarma != -1:
     173                covsum = self.covariance[np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
     174                if md.smb.arma_timestep != md.hydrology.arma_timestep and np.any(covsum != 0):
     175                    raise IOError('BasalforcingsDeepwaterMeltingRatarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
     176            elif indSdarma != -1:
     177                covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)]
     178                if md.frontalforcings.sd_arma_timestep != md.basalforcings.arma_timestep and np.any(covsum != 0):
     179                    raise IOError('FrontalForcingsSubglacialDischargearma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance')
     180            elif indSMBarma != -1:
     181                covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)]
     182                if md.smb.arma_timestep != md.basalforcings.arma_timestep and np.any(covsum != 0):
     183                    raise IOError('SMBarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance')
     184            elif indTFarma != -1:
     185                covsum = self.covariance[np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int), np.sum(dimensions[0:indBDWarma]).astype(int):np.sum(dimensions[0:indBDWarma + 1]).astype(int)]
     186                if md.frontalforcings.arma_timestep != md.basalforcings.arma_timestep and np.any(covsum != 0):
     187                    raise IOError('FrontalForcingsRignotarma and BasalforcingsDeepwaterMeltingRatearma have different arma_timestep and non-zero covariance')
     188        elif indPwarma != -1:
     189            if indSdarma != -1:
     190                covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
     191                if md.frontalforcings.sd_arma_timestep != md.hydrology.arma_timestep and np.any(covsum != 0):
     192                    raise IOError('FrontalForingsSubglacialDischargearma and hydrologyarmapw have different arma_timestep and non-zero covariance')
     193            elif indSMBarma != -1:
     194                covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
     195                if md.smb.arma_timestep != md.hydrology.arma_timestep and np.any(covsum != 0):
     196                    raise IOError('SMBarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
     197            elif indTFarma != -1:
     198                covsum = self.covariance[np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int), np.sum(dimensions[0:indPwarma]).astype(int):np.sum(dimensions[0:indPwarma + 1]).astype(int)]
     199                if md.frontalforcings.arma_timestep != md.hydrology.arma_timestep and np.any(covsum != 0):
     200                    raise IOError('FrontalForcingsRignotarma and hydrologyarmapw have different arma_timestep and non-zero covariance')
     201        elif indSdarma != -1:
     202            if indSMBarma != -1:
     203                covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int)]
     204                if md.smb.arma_timestep != md.frontalforcings.sd_arma_timestep and np.any(covsum != 0):
     205                    raise IOError('SMBarma and FrontalForcingsSubglacialDischargearma have different arma_timestep and non-zero covariance')
     206            elif indTFarma != -1:
     207                covsum = self.covariance[np.sum(dimensions[0:indSdarma]).astype(int):np.sum(dimensions[0:indSdarma + 1]).astype(int), np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int)]
     208                if md.frontalforcings.sd_arma_timestep != md.frontalforcings.arma_timestep and np.any(covsum != 0):
     209                    raise IOError('FrontalForcingsSubglacialDischargearma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance')
     210        elif indSMBarma != -1:
     211            if indTFarma != -1:
     212                covsum = self.covariance[np.sum(dimensions[0:indSMBarma]).astype(int):np.sum(dimensions[0:indSMBarma + 1]).astype(int), np.sum(dimensions[0:indTFarma]).astype(int):np.sum(dimensions[0:indTFarma + 1]).astype(int)]
     213                if md.smb.arma_timestep != md.frontalforcings.arma_timestep and np.any(covsum != 0):
     214                    raise IOError('SMBarma and FrontalForcingsRignotarma have different arma_timestep and non-zero covariance')
    212215
    213216        md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1])
     
    216219        md = checkfield(md, 'fieldname', 'stochasticforcing.stochastictimestep', 'NaN', 1,'Inf', 1, '>=', md.timestepping.time_step)
    217220        md = checkfield(md, 'fieldname', 'stochasticforcing.randomflag', 'numel', [1], 'values', [0, 1])
    218         if (checkdefaults):
     221        if checkdefaults:
    219222            md = checkfield(md, 'fieldname', 'stochasticforcing.defaultdimension', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0)
    220223            md = checkfield(md, 'fieldname', 'stochasticforcing.default_id', 'Inf', 1, 'NaN', 1, '>=', 0, '<=', self.defaultdimension, 'size', [md.mesh.numberofelements])
     
    235238        else:
    236239            num_fields = len(self.fields)
    237             if(self.stochastictimestep==0):
     240            if self.stochastictimestep == 0:
    238241                md.stochasticforcing.stochastictimestep = md.timestepping.time_step #by default: stochastictimestep set to ISSM time step
    239242            # Check if hydroarmapw is used
    240             if((type(md.hydrology).__name__ == 'hydrologyarmapw') and md.transient.hydrology==1):
     243            if type(md.hydrology).__name__ == 'hydrologyarmapw' and md.transient.ishydrology:
    241244                ispwHydroarma = 1
    242245            else:
     
    247250            for ind, field in enumerate(self.fields):
    248251                # Checking for specific dimensions
    249                 if (field == 'SMBarma'):
     252                if field == 'SMBarma':
    250253                    dimensions[ind] = md.smb.num_basins
    251                 if (field == 'FrontalForcingsRignotarma'):
     254                elif field == 'FrontalForcingsRignotarma':
    252255                    dimensions[ind] = md.frontalforcings.num_basins
    253                 if (field == 'FrontalForcingsSubglacialDischargearma'):
     256                elif field == 'FrontalForcingsSubglacialDischargearma':
    254257                    dimensions[ind] = md.frontalforcings.num_basins
    255                 if (field == 'BasalforcingsDeepwaterMeltingRatearma'):
     258                elif field == 'BasalforcingsDeepwaterMeltingRatearma':
    256259                    dimensions[ind] = md.basalforcings.num_basins
    257                 if (field == 'FrictionWaterPressure' and ispwHydroarma):
     260                elif field == 'FrictionWaterPressure' and ispwHydroarma:
    258261                    dimensions[ind] = md.hydrology.num_basins
    259262
    260263            # Scaling covariance matrix (scale column-by-column and row-by-row)
    261             scaledfields = ['BasalforcingsDeepwaterMeltingRatearma','BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBarma', 'SMBforcing']  # list of fields that need scaling * 1/yts
     264            scaledfields = ['BasalforcingsDeepwaterMeltingRatearma','BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBarma', 'SMBforcing']  # list of fields that need scaling * 1 / yts
    262265            tempcovariance = np.copy(self.covariance)
    263266            for i in range(num_fields):
Note: See TracChangeset for help on using the changeset viewer.