Changeset 27465


Ignore:
Timestamp:
12/21/22 05:46:25 (2 years ago)
Author:
vverjans
Message:

NEW allowing monthly varying lapse rates in SMBarma

Location:
issm/trunk-jpl
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r27462 r27465  
    24312431   const int numvertices = this->GetNumberOfVertices();
    24322432   bool isadjustsmb = false;
    2433         int basinid,bb1,bb2;
    2434    IssmDouble ela,refelevation_b;
     2433        int basinid,bb1,bb2,mindex;
     2434        IssmDouble ela,refelevation_b,time,dt,fracyear,yts;
     2435   IssmDouble monthsteps[12]  = {0.,1./12,2./12,3./12,4./12,5./12,6./12,7./12,8./12,9./12,10./12,11./12};
    24352436   IssmDouble* surfacelist  = xNew<IssmDouble>(numvertices);
    24362437   IssmDouble* smblist      = xNew<IssmDouble>(numvertices);
    2437    /* numelevbins values of lapse rates */
     2438   /* numelevbins values of lapse rates at current month */
    24382439        IssmDouble* lapserates_b = xNew<IssmDouble>(numelevbins);
    2439    /* (numelevbins-1) limits between elevation bins (be cautious with indexing) */
     2440   /* (numelevbins-1) limits between elevation bins at current month (be cautious with indexing) */
    24402441        IssmDouble* elevbins_b   = xNew<IssmDouble>(numelevbins-1);
     2442
     2443        /*Find month of current time step*/
     2444        this->parameters->FindParam(&yts,ConstantsYtsEnum);
     2445   this->parameters->FindParam(&time,TimeEnum);
     2446   this->parameters->FindParam(&dt,TimesteppingTimeStepEnum); _assert_(dt<yts);
     2447   fracyear     = time/yts-floor(time/yts);
     2448   for(int i=1;i<12;i++){
     2449                if(fracyear>=monthsteps[i-1]) mindex = i-1;
     2450        }
     2451   if(fracyear>=monthsteps[11]) mindex = 11;
    24412452
    24422453   /*Retrieve SMB values non-adjusted for SMB lapse rate*/
     
    24472458   this->GetInputValue(&basinid,SmbBasinsIdEnum);
    24482459   refelevation_b = refelevation[basinid];
    2449         for(int ii=0;ii<(numelevbins-1);ii++) elevbins_b[ii] = elevbins[basinid*(numelevbins-1)+ii];
     2460        /*Retrieve bins and laps rates for this basin at this month*/
     2461        for(int ii=0;ii<(numelevbins-1);ii++) elevbins_b[ii] = elevbins[basinid*(numelevbins-1)*12+mindex*(numelevbins-1)+ii];
    24502462        for(int ii=0;ii<numelevbins;ii++){
    2451                 lapserates_b[ii] = lapserates[basinid*numelevbins+ii];
     2463                lapserates_b[ii] = lapserates[basinid*numelevbins*12+mindex*numelevbins+ii];
    24522464                if(lapserates_b[ii]!=0) isadjustsmb=true;
    24532465        }
     2466
    24542467        /*Adjust SMB if any lapse rate value is non-zero*/
    24552468        if(isadjustsmb){
  • issm/trunk-jpl/src/m/classes/SMBarma.m

    r27417 r27465  
    102102                                        md = checkfield(md,'fieldname','smb.refelevation','NaN',1,'Inf',1,'>=',0,'size',[1,md.smb.num_basins],'numel',md.smb.num_basins);
    103103                                end
    104                                 [nbas,nbins] = size(md.smb.lapserates);
    105                                 if (any(isnan(reshape(md.smb.lapserates,[1,nbas*nbins]))==0) || numel(md.smb.lapserates)>1)
    106                                         md = checkfield(md,'fieldname','smb.lapserates','NaN',1,'Inf',1,'size',[md.smb.num_basins,nbins],'numel',md.smb.num_basins*nbins);
    107                                         md = checkfield(md,'fieldname','smb.elevationbins','NaN',1,'Inf',1,'size',[md.smb.num_basins,nbins-1],'numel',md.smb.num_basins*(nbins-1));
     104                                nbas     = size(md.smb.lapserates,1);
     105                                nbins    = size(md.smb.lapserates,2);
     106                                ntmlapse = size(md.smb.lapserates,3);
     107                                if(ntmlapse>1 && ntmlapse~=12)
     108                                        error('3rd dimension of md.smb.lapserates must be of size 1 or 12 (for monthly lapse rates)');
     109                                end
     110                                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);
    108113                                        if(issorted(md.smb.elevationbins,2)==0)
    109114                                                error('md.smb.elevationbins should have rows in order of increasing elevation');
    110115                                        end
    111                                 elseif (isnan(md.smb.elevationbins(1,1))==0 || numel(md.smb.elevationbins)>1)
     116                                elseif (isnan(md.smb.elevationbins(1,1,1))==0 || numel(md.smb.elevationbins)>1)
    112117                                        %elevationbins specified but not lapserates: this will inevitably lead to inconsistencies
    113                                         [nbas,nbins] = size(md.smb.elevationbins);
    114                                         nbins        = nbins+1;
    115                                         md = checkfield(md,'fieldname','smb.lapserates','NaN',1,'Inf',1,'size',[md.smb.num_basins,nbins],'numel',md.smb.num_basins*nbins);
    116                                         md = checkfield(md,'fieldname','smb.elevationbins','NaN',1,'Inf',1,'size',[md.smb.num_basins,nbins-1],'numel',md.smb.num_basins*(nbins-1));
     118                                        nbas     = size(md.smb.elevationbins,1);
     119               nbins    = size(md.smb.elevationbins,2);
     120                                        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);
    117124                                end
    118125                        end
     
    135142                        fielddisplay(self,'arlag_coefs','basin-specific vectors of AR lag coefficients [unitless]');
    136143                        fielddisplay(self,'malag_coefs','basin-specific vectors of MA lag coefficients [unitless]');
    137                         fielddisplay(self,'lapserates','basin-specific SMB lapse rates applied in each elevation bin, 1 row per basin, 1 column per bin [m ice eq yr^-1 m^-1] (default: no lapse rate)');
    138                         fielddisplay(self,'elevationbins','basin-specific separations between elevation bins, 1 row per basin, 1 column per limit between bins [m] (default: no basin separation)');
     144                        fielddisplay(self,'lapserates','basin-specific SMB lapse rates applied in each elevation bin, 1 row per basin, 1 column per bin, dimension 3 can be of size 12 to prescribe monthly varying values [m ice eq yr^-1 m^-1] (default: no lapse rate)');
     145                        fielddisplay(self,'elevationbins','basin-specific separations between elevation bins, 1 row per basin, 1 column per limit between bins, dimension 3 can be of size 12 to prescribe monthly varying values [m] (default: no basin separation)');
    139146                        fielddisplay(self,'refelevation','basin-specific reference elevations at which SMB is calculated, and from which SMB is downscaled using lapserates (default: basin mean elevation) [m]');
    140147                        fielddisplay(self, 'steps_per_step', 'number of smb steps per time step');
     
    156163                        tempelevationbins = md.smb.elevationbins;
    157164                        temprefelevation  = md.smb.refelevation;
    158                         [nbas,nbins]      = size(md.smb.lapserates);
    159                         if(any(isnan(reshape(md.smb.lapserates,[1,nbas*nbins]))))
    160                                 templapserates = zeros(md.smb.num_basins,2);
     165                        nbas     = size(md.smb.lapserates,1);
     166         nbins    = size(md.smb.lapserates,2);
     167         ntmlapse = size(md.smb.lapserates,3);
     168                        if(any(isnan(reshape(md.smb.lapserates,[1,nbas*nbins*ntmlapse]))))
     169                                templapserates = zeros(md.smb.num_basins,2,12);
    161170                                disp('      smb.lapserates not specified: set to 0');
    162                            tempelevationbins = zeros(md.smb.num_basins,1); %dummy elevation bins
     171                           tempelevationbins = zeros(md.smb.num_basins,1,12); %dummy elevation bins
     172                        elseif(ntmlapse==1)
     173                                templapserates    = repmat(templapserates,1,1,12); %same values each month
     174                                tempelevationbins = repmat(tempelevationbins,1,1,12); %same values each month
    163175                        end
    164176                        if(any(isnan(md.smb.refelevation)))
     
    173185                                        temprefelevation(ii) = sum(areas(indices).*elemsh)/sum(areas(indices));
    174186                                end
    175                                 if(any(reshape(md.smb.lapserates,[1,nbas*nbins])~=0))
     187                                if(any(reshape(md.smb.lapserates,[1,nbas*nbins*12])~=0))
    176188                                        disp('      smb.refelevation not specified: Reference elevations set to mean surface elevation of basins');
    177189                                end
    178190                        end
    179                         [nbas,nbins] = size(templapserates);
     191                        nbas     = size(templapserates,1);
     192         nbins    = size(templapserates,2);
     193                        temp2dlapserates    = zeros(nbas,nbins*12);
     194                        temp2delevationbins = zeros(nbas,max(1,nbins-1)*12);
     195                        for(ii=[1:12])
     196                                jj = 1+(ii-1)*nbins;
     197                                temp2dlapserates(:,jj:jj+nbins-1)    = templapserates(:,:,ii);
     198                                kk = 1+(ii-1)*(nbins-1);
     199                                temp2delevationbins(:,kk:kk+nbins-2) = tempelevationbins(:,:,ii);
     200                        end
    180201
    181202                        % Scale the parameters %
     
    234255                        WriteData(fid,prefix,'object',self,'class','smb','fieldname','malag_coefs','format','DoubleMat','name','md.smb.malag_coefs','yts',yts);
    235256                        WriteData(fid,prefix,'data',dbreaks,'name','md.smb.datebreaks','format','DoubleMat','scale',yts);
    236                         WriteData(fid,prefix,'data',templapserates,'format','DoubleMat','name','md.smb.lapserates','scale',1./yts,'yts',yts);
    237                         WriteData(fid,prefix,'data',tempelevationbins,'format','DoubleMat','name','md.smb.elevationbins');
     257                        WriteData(fid,prefix,'data',temp2dlapserates,'format','DoubleMat','name','md.smb.lapserates','scale',1./yts,'yts',yts);
     258                        WriteData(fid,prefix,'data',temp2delevationbins,'format','DoubleMat','name','md.smb.elevationbins');
    238259                        WriteData(fid,prefix,'data',temprefelevation,'format','DoubleMat','name','md.smb.refelevation');
    239260                        WriteData(fid,prefix,'data',nbins,'format','Integer','name','md.smb.num_bins');
  • issm/trunk-jpl/src/m/classes/SMBarma.py

    r27458 r27465  
    4949        s += '{}\n'.format(fielddisplay(self, 'arlag_coefs', 'basin-specific vectors of AR lag coefficients [unitless]'))
    5050        s += '{}\n'.format(fielddisplay(self, 'malag_coefs', 'basin-specific vectors of MA lag coefficients [unitless]'))
    51         s += '{}\n'.format(fielddisplay(self, 'lapserates', 'basin-specific SMB lapse rates applied in each elevation bin, 1 row per basin, 1 column per bin [m ice eq yr^-1 m^-1] (default: no lapse rate)'))
    52         s += '{}\n'.format(fielddisplay(self, 'elevationbins', 'basin-specific SMB lapse rates applied in range of SMB<0 [m ice eq yr^-1 m^-1] (default: no lapse rate)'))
     51        s += '{}\n'.format(fielddisplay(self, 'lapserates', 'basin-specific SMB lapse rates applied in each elevation bin, 1 row per basin, 1 column per bin, dimension 3 can be of size 12 to prescribe monthly varying values [m ice eq yr^-1 m^-1] (default: no lapse rate)'))
     52        s += '{}\n'.format(fielddisplay(self, 'elevationbins', 'basin-specific separations between elevation bins, 1 row per basin, 1 column per limit between bins, dimension 3 can be of size 12 to prescribe monthly varying values [m] (default: no basin separation)'))
    5353        s += '{}\n'.format(fielddisplay(self, 'refelevation', 'basin-specific reference elevations at which SMB is calculated, and from which SMB is downscaled using lapserates (default: basin mean elevation) [m]'))
    5454        s += '{}\n'.format(fielddisplay(self, 'steps_per_step', 'number of smb steps per time step'))
     
    127127
    128128            if(np.any(np.isnan(self.lapserates) is False) or np.size(self.lapserates) > 1):
     129                nbas = md.smb.num_basins
    129130                if len(np.shape(self.lapserates)) == 1:
    130                     self.lapserates = np.array([self.lapserates])
    131131                    nbins = 1
    132                 else:
     132                    self.lapserates = np.reshape(self.lapserates,[nbas,nbins,1])
     133                elif(len(np.shape(self.lapserates)) == 2):
    133134                    nbins = np.shape(self.lapserates)[1]
    134                 if len(np.shape(self.elevationbins)) == 1:
    135                     self.elevationbins = np.array([self.elevationbins])
    136                 md = checkfield(md, 'fieldname', 'smb.lapserates', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, nbins], 'numel', md.smb.num_basins*nbins)
    137                 md = checkfield(md, 'fieldname', 'smb.elevationbins', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, nbins-1], 'numel', md.smb.num_basins*(nbins-1))
     135                    self.lapserates = np.reshape(self.lapserates,[nbas,nbins,1])
     136                elif(len(np.shape(self.lapserates)) == 3):
     137                    nbins = np.shape(self.lapserates)[1]
     138                ntmlapse = np.shape(self.lapserates)[2]
     139                if len(np.shape(self.elevationbins)) < 3:
     140                    self.elevationbins = np.reshape(self.elevationbins,[nbas,max(1,nbins-1),ntmlapse])
     141                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)
    138143                for rr in range(md.smb.num_basins):
    139144                    if(np.all(self.elevationbins[rr,0:-1]<=self.elevationbins[rr,1:])==False):
     
    141146            elif(np.any(np.isnan(self.elevationbins) is False) or np.size(self.elevationbins) > 1):
    142147                #elevationbins specified but not lapserates: this will inevitably lead to inconsistencies
     148                nbas = md.smb.num_basins
    143149                if len(np.shape(self.elevationbins)) == 1:
    144                     self.elevationbins = np.array([self.elevationbins])
    145150                    nbins = 1
    146                 else:
    147                     nbins = np.shape(self.elevationbins)[1]+1
    148                 md = checkfield(md, 'fieldname', 'smb.lapserates', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, nbins], 'numel', md.smb.num_basins*nbins)
    149                 md = checkfield(md, 'fieldname', 'smb.elevationbins', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, nbins-1], 'numel', md.smb.num_basins*(nbins-1))
     151                    self.elevationbins = np.reshape(self.elevationbins,[nbas,nbins,1])
     152                elif(len(np.shape(self.lapserates)) == 2):
     153                    nbins = np.shape(self.elevationbins)[1]
     154                    self.elevationbins = np.reshape(self.elevationbins,[nbas,nbins,1])
     155                elif(len(np.shape(self.lapserates)) == 3):
     156                    nbins = np.shape(self.lapserates)[1]
     157                nbins = nbins-1
     158                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)
    150161
    151162        md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1])
     
    160171        nprm = md.smb.num_params;
    161172        nper = md.smb.num_breaks+1;
    162         templapserates    = np.copy(md.smb.lapserates)
    163         tempelevationbins = np.copy(md.smb.elevationbins)
     173        if(len(np.shape(md.smb.lapserates))==1):
     174            nbins    = 1
     175            ntmlapse = 1
     176        elif(len(np.shape(md.smb.lapserates))==2):
     177            nbins    = np.shape(md.smb.lapserates)[1]
     178            ntmlapse = 1
     179        elif(len(np.shape(md.smb.lapserates))==3):
     180            nbins    = np.shape(md.smb.lapserates)[1]
     181            ntmlapse = np.shape(md.smb.lapserates)[2]
     182        templapserates    = np.reshape(md.smb.lapserates,[nbas,nbins,ntmlapse])
     183        tempelevationbins = np.reshape(md.smb.elevationbins,[nbas,max(1,nbins-1),ntmlapse])
    164184        temprefelevation  = np.copy(md.smb.refelevation)
    165185        # Scale the parameters #
     
    198218
    199219        if(np.any(np.isnan(md.smb.lapserates))):
    200             templapserates = np.zeros((md.smb.num_basins,2))
     220            templapserates = np.zeros((md.smb.num_basins,2,12))
    201221            print('      smb.lapserates not specified: set to 0')
    202             tempelevationbins = np.zeros((md.smb.num_basins,1)) #dummy elevation bins
     222            tempelevationbins = np.zeros((md.smb.num_basins,1,12)) #dummy elevation bins
     223        elif(ntmlapse==1):
     224            templapserates    = np.repeat(templapserates,12,axis=2)
     225            tempelevationbins = np.repeat(tempelevationbins,12,axis=2)
    203226        if(np.any(np.isnan(md.smb.refelevation))):
    204227            temprefelevation = np.zeros((md.smb.num_basins)).reshape(1,md.smb.num_basins)
     
    213236                print('      smb.refelevation not specified: Reference elevations set to mean surface elevation of basins')
    214237        nbins = np.shape(templapserates)[1]
     238        temp2dlapserates    = np.zeros((nbas,nbins*12))
     239        temp2delevationbins = np.zeros((nbas,max(12,(nbins-1)*12)))
     240        for ii in range(12):
     241            temp2dlapserates[:,ii*nbins:(ii+1)*nbins] = templapserates[:,:,ii]
     242            temp2delevationbins[:,ii*(nbins-1):(ii+1)*(nbins-1)] = tempelevationbins[:,:,ii]
    215243
    216244        WriteData(fid, prefix, 'name', 'md.smb.model', 'data', 13, 'format', 'Integer')
     
    226254        WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'malag_coefs', 'format', 'DoubleMat', 'name', 'md.smb.malag_coefs', 'yts', yts)
    227255        WriteData(fid, prefix, 'data', dbreaks, 'name', 'md.smb.datebreaks', 'format', 'DoubleMat','scale',yts)
    228         WriteData(fid, prefix, 'data', templapserates, 'name', 'md.smb.lapserates', 'format', 'DoubleMat', 'scale', 1 / yts, 'yts', yts)
    229         WriteData(fid, prefix, 'data', tempelevationbins, 'name', 'md.smb.elevationbins', 'format', 'DoubleMat')
     256        WriteData(fid, prefix, 'data', temp2dlapserates, 'name', 'md.smb.lapserates', 'format', 'DoubleMat', 'scale', 1 / yts, 'yts', yts)
     257        WriteData(fid, prefix, 'data', temp2delevationbins, 'name', 'md.smb.elevationbins', 'format', 'DoubleMat')
    230258        WriteData(fid, prefix, 'data', temprefelevation, 'name', 'md.smb.refelevation', 'format', 'DoubleMat')
    231259        WriteData(fid, prefix, 'data', nbins, 'name', 'md.smb.num_bins', 'format', 'Integer')
  • issm/trunk-jpl/test/NightlyRun/test257.m

    r27318 r27465  
    4141
    4242md.timestepping.start_time = 0;
    43 md.timestepping.time_step  = 1;
    44 md.timestepping.final_time = 7;
     43md.timestepping.time_step  = 1/12;
     44md.timestepping.final_time = 2;
    4545md.smb                     = SMBarma();
    4646md.smb.num_basins          = 3; %number of basins
     
    5555md.smb.arlag_coefs         = [[0.2,0.1,0.05,0.01];[0.4,0.2,-0.2,0.1];[0.4,-0.4,0.1,-0.1]];
    5656md.smb.malag_coefs         = [1.0;0;0.2];
    57 md.smb.lapserates          = [0.01,0.0;0.01,-0.01;0.0,-0.01];
    58 md.smb.elevationbins       = [100;150;100];
     57lm0                        = [1e-4*[1,-0.1,-1];1e-6*[1,-0.1,-1];1e-5*[1,-0.1,-1]];
     58lm1                        = [1e-4*[2,-0.2,-2];1e-6*[2,-0.2,-2];1e-5*[2,-0.2,-2]];
     59lm2                        = [1e-4*[3,-0.3,-3];1e-6*[3,-0.3,-3];1e-5*[3,-0.3,-3]];
     60lm3                        = [1e-4*[4,-0.4,-4];1e-6*[4,-0.4,-4];1e-5*[4,-0.4,-4]];
     61lm4                        = [1e-4*[5,-0.5,-5];1e-6*[5,-0.5,-5];1e-5*[5,-0.5,-5]];
     62lm5                        = [1e-4*[6,-0.6,-6];1e-6*[6,-0.6,-6];1e-5*[6,-0.6,-6]];
     63lm6                        = [1e-4*[7,-0.7,-7];1e-6*[7,-0.7,-7];1e-5*[7,-0.7,-7]];
     64lm7                        = [1e-4*[8,-0.8,-8];1e-6*[8,-0.8,-8];1e-5*[8,-0.8,-8]];
     65lm8                        = [1e-4*[9,-0.9,-9];1e-6*[9,-0.9,-9];1e-5*[9,-0.9,-9]];
     66lm9                        = [1e-4*[10,-1,-10];1e-6*[10,-1.0,-10];1e-5*[10,-1.0,-10]];
     67lm10                       = [1e-4*[11,-1.1,-11];1e-6*[11,-1.1,-11];1e-5*[11,-1.1,-11]];
     68lm11                       = [1e-4*[12,-1.2,-12];1e-6*[12,-1.2,-12];1e-5*[12,-1.2,-12]];
     69md.smb.lapserates          = cat(3,lm0,lm1,lm2,lm3,lm4,lm5,lm6,lm7,lm8,lm9,lm10,lm11);
     70md.smb.elevationbins       = repmat([100,300;200,400;250,450],1,1,12);
    5971
    6072%Stochastic forcing
     
    7991        (md.results.TransientSolution(1).IceVolume),...
    8092        (md.results.TransientSolution(1).SmbMassBalance),...
    81         (md.results.TransientSolution(2).Vx),...
    82         (md.results.TransientSolution(2).Vy),...
    83         (md.results.TransientSolution(2).Vel),...
    84         (md.results.TransientSolution(2).Thickness),...
    85         (md.results.TransientSolution(2).IceVolume),...
    86         (md.results.TransientSolution(2).SmbMassBalance),...
    87         (md.results.TransientSolution(7).Vx),...
    88         (md.results.TransientSolution(7).Vy),...
    89         (md.results.TransientSolution(7).Vel),...
    90         (md.results.TransientSolution(7).Thickness),...
    91         (md.results.TransientSolution(7).IceVolume),...
    92         (md.results.TransientSolution(7).SmbMassBalance),...
     93        (md.results.TransientSolution(12).Vx),...
     94        (md.results.TransientSolution(12).Vy),...
     95        (md.results.TransientSolution(12).Vel),...
     96        (md.results.TransientSolution(12).Thickness),...
     97        (md.results.TransientSolution(12).IceVolume),...
     98        (md.results.TransientSolution(12).SmbMassBalance),...
     99        (md.results.TransientSolution(24).Vx),...
     100        (md.results.TransientSolution(24).Vy),...
     101        (md.results.TransientSolution(24).Vel),...
     102        (md.results.TransientSolution(24).Thickness),...
     103        (md.results.TransientSolution(24).IceVolume),...
     104        (md.results.TransientSolution(24).SmbMassBalance),...
    93105        };
  • issm/trunk-jpl/test/NightlyRun/test257.py

    r27318 r27465  
    4646
    4747md.timestepping.start_time = 0
    48 md.timestepping.time_step = 1
    49 md.timestepping.final_time = 8
     48md.timestepping.time_step = 1/12
     49md.timestepping.final_time = 2
    5050md.smb = SMBarma()
    5151md.smb.num_basins = 3  # number of basins
     
    6060md.smb.arlag_coefs = np.array([[0.2, 0.1, 0.05, 0.01], [0.4, 0.2, -0.2, 0.1], [0.4, -0.4, 0.1, -0.1]])
    6161md.smb.malag_coefs = np.array([[1.0],[0],[0.2]])
    62 md.smb.lapserates        = np.array([[0.01,0.0],[0.01,-0.01],[0.0,-0.01]])
    63 md.smb.elevationbins  = np.array([100,150,100]).reshape(md.smb.num_basins,1)
     62
     63lm0                   = np.array([1e-4*np.array([1,-0.1,-1]),1e-6*np.array([1,-0.1,-1]),1e-5*np.array([1,-0.1,-1])])
     64lm1                   = np.array([1e-4*np.array([2,-0.2,-2]),1e-6*np.array([2,-0.2,-2]),1e-5*np.array([2,-0.2,-2])])
     65lm2                   = np.array([1e-4*np.array([3,-0.3,-3]),1e-6*np.array([3,-0.3,-3]),1e-5*np.array([3,-0.3,-3])])
     66lm3                   = np.array([1e-4*np.array([4,-0.4,-4]),1e-6*np.array([4,-0.4,-4]),1e-5*np.array([4,-0.4,-4])])
     67lm4                   = np.array([1e-4*np.array([5,-0.5,-5]),1e-6*np.array([5,-0.5,-5]),1e-5*np.array([5,-0.5,-5])])
     68lm5                   = np.array([1e-4*np.array([6,-0.6,-6]),1e-6*np.array([6,-0.6,-6]),1e-5*np.array([6,-0.6,-6])])
     69lm6                   = np.array([1e-4*np.array([7,-0.7,-7]),1e-6*np.array([7,-0.7,-7]),1e-5*np.array([7,-0.7,-7])])
     70lm7                   = np.array([1e-4*np.array([8,-0.8,-8]),1e-6*np.array([8,-0.8,-8]),1e-5*np.array([8,-0.8,-8])])
     71lm8                   = np.array([1e-4*np.array([9,-0.9,-9]),1e-6*np.array([9,-0.9,-9]),1e-5*np.array([9,-0.9,-9])])
     72lm9                   = np.array([1e-4*np.array([10,-1.0,-10]),1e-6*np.array([10,-1.0,-10]),1e-5*np.array([10,-1.0,-10])])
     73lm10                  = np.array([1e-4*np.array([11,-1.1,-11]),1e-6*np.array([11,-1.1,-11]),1e-5*np.array([11,-1.1,-11])])
     74lm11                  = np.array([1e-4*np.array([12,-1.2,-12]),1e-6*np.array([12,-1.2,-12]),1e-5*np.array([12,-1.2,-12])])
     75md.smb.lapserates     = np.stack((lm0,lm1,lm2,lm3,lm4,lm5,lm6,lm7,lm8,lm9,lm10,lm11),axis=2)
     76ebins                 = np.array([[100,300],[200,400],[250,450]])
     77md.smb.elevationbins  = np.stack([ebins for ii in range(12)],axis=2)
     78
    6479
    6580# Stochastic forcing
     
    90105    md.results.TransientSolution[0].IceVolume,
    91106    md.results.TransientSolution[0].SmbMassBalance,
    92     md.results.TransientSolution[1].Vx,
    93     md.results.TransientSolution[1].Vy,
    94     md.results.TransientSolution[1].Vel,
    95     md.results.TransientSolution[1].Thickness,
    96     md.results.TransientSolution[1].IceVolume,
    97     md.results.TransientSolution[1].SmbMassBalance,
    98     md.results.TransientSolution[6].Vx,
    99     md.results.TransientSolution[6].Vy,
    100     md.results.TransientSolution[6].Vel,
    101     md.results.TransientSolution[6].Thickness,
    102     md.results.TransientSolution[6].IceVolume,
    103     md.results.TransientSolution[6].SmbMassBalance
     107    md.results.TransientSolution[11].Vx,
     108    md.results.TransientSolution[11].Vy,
     109    md.results.TransientSolution[11].Vel,
     110    md.results.TransientSolution[11].Thickness,
     111    md.results.TransientSolution[11].IceVolume,
     112    md.results.TransientSolution[11].SmbMassBalance,
     113    md.results.TransientSolution[23].Vx,
     114    md.results.TransientSolution[23].Vy,
     115    md.results.TransientSolution[23].Vel,
     116    md.results.TransientSolution[23].Thickness,
     117    md.results.TransientSolution[23].IceVolume,
     118    md.results.TransientSolution[23].SmbMassBalance
    104119]
Note: See TracChangeset for help on using the changeset viewer.