Ignore:
Timestamp:
02/12/16 18:08:59 (3 years ago)
Author:
mjuckes
Message:

release candidate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/src/framework/dreqPy/scope.py

    r878 r885  
    1212 
    1313if imm == 1: 
    14   from utilities import cmvFilter  
     14  from utilities import cmvFilter, gridOptionSort 
    1515  import makeTables 
    1616  import fgrid 
     
    1919  import dreqPy.volsum as volsum 
    2020  import dreqPy.fgrid as fgrid 
    21   from dreqPy.utilities import cmvFilter  
     21  from dreqPy.utilities import cmvFilter, gridOptionSort  
    2222  import dreqPy.makeTables as makeTables 
    2323 
    2424import collections, string, operator 
    2525import sys, os 
     26 
     27if sys.version_info >= (2,7): 
     28  oldpython = False 
     29else: 
     30  oldpython = True 
     31 
     32gridSorter = gridOptionSort( oldpython ) 
    2633 
    2734def sortTimeSlice( tsl ): 
     
    163170    self.tierMax = tierMax 
    164171    self.gridPolicyDefaultNative = False 
     172    self.gridOceanStructured = True 
     173    self.gridPolicyForce = None 
    165174    self.gridPolicyTopOnly = True 
    166175    self.exptFilter = None 
     
    475484      else: 
    476485 
    477         if rl.grid == '100km': 
     486        if self.gridPolicyForce != None: 
     487          grd = self.gridPolicyForce 
     488        elif rl.grid in ['1deg','2deg','100km']: 
     489          if rl.grid == '100km': 
    478490            grd = '1deg' 
    479         if rl.grid in ['1deg','2deg']: 
     491          else: 
    480492            grd = rl.grid 
    481493        else: 
    482494          ## note that naming of "gridreq" is unfortunate ... "No" means that native grid is required 
    483           if rl.gridreq in ['No', 'no'] or self.gridPolicyDefaultNative: 
     495          if rl.gridreq in ['No', 'no']: 
     496             #or self.gridPolicyDefaultNative: 
    484497            grd = 'native' 
     498          elif rl.gridreq in ['no*1']: 
     499             #or self.gridPolicyDefaultNative: 
     500            grd = 'native:01' 
    485501          else: 
    486502            ## print ( 'INFO.grd.00001: defaulting to grid ..%s, %s, %s' % (rl.label,rl.title, rl.uid) ) 
     
    10231039             g,val = list( l2x[(v,e)].items() )[0] 
    10241040          else: 
    1025             if 'native' in l2x[(v,e)].keys(): 
    1026                g = 'native' 
    1027                val = l2x[(v,e)][g] 
    1028             else: 
    1029                g = sorted( list( l2x[(v,e)].keys() ) )[0] 
    1030                val = l2x[(v,e)][g] 
     1041            kk = gridSorter.sort( l2x[(v,e)].keys() ) 
     1042            gflg = {'si':'','li':''}.get( self.cmvGridId[v], self.cmvGridId[v] ) 
     1043            g = kk[0] 
     1044            ##if g in ['DEF','']: 
     1045              ##if self.gridPolicyDefaultNative:        
     1046                 ##g = 'native' 
     1047            ##elif g == 'native:01': 
     1048              ##if gflg == 'o' and not self.gridOceanStructured: 
     1049                ##g = '1deg' 
     1050              ##else: 
     1051                ##g = 'native' 
     1052            if g not in l2x[(v,e)]: 
     1053              print '%s not found in %s (%s):' % (g,str(l2x[(v,e)].keys()),str(kk)) 
     1054            val = l2x[(v,e)][g] 
     1055                 
     1056            ##if 'native' in l2x[(v,e)].keys(): 
     1057               ##g = 'native' 
     1058               ##val = l2x[(v,e)][g] 
     1059            ##else: 
     1060               ##g = sorted( list( l2x[(v,e)].keys() ) )[0] 
     1061               ##val = l2x[(v,e)][g] 
    10311062          l2[v][(e,g)] = val 
    10321063      else: 
     
    11411172            se[g].add(e) 
    11421173          for g in cc0: 
    1143             g1 = 'native' 
     1174            g1 = g 
    11441175            if self.isLatLon[st.spid] != False: 
    11451176              g1 = g 
    11461177              if g1 == 'DEF' and self.isLatLon[st.spid] == 'o': 
    11471178                  g1 = '1deg' 
     1179              elif g == 'native:01': 
     1180                gflg = {'si':'','li':''}.get( self.cmvGridId[i], self.cmvGridId[i] ) 
     1181                if gflg == 'o' and not self.gridOceanStructured: 
     1182                  g1 = '1deg' 
     1183                else: 
     1184                  g1 = 'native' 
    11481185              else: 
    1149                   g1 = 'native' 
    1150             g1 = g 
     1186                g1 = 'native' 
     1187            elif g == 'native:01': 
     1188                g1 = 'native' 
    11511189 
    11521190            cc[ (st.spid,st.odims,ii.frequency,g1) ].append( (i,cc0[g],cc1[g],se[g]) ) 
     
    12231261            else: 
    12241262              ny = ny/float(nn) 
    1225             assert tt[2] in ['native','1deg','2deg'], 'BAD grid identifier: %s' % str(tt) 
     1263            assert tt[2] in ['native','1deg','2deg','native:01'], 'BAD grid identifier: %s' % str(tt) 
    12261264            c3[tt][f] = (nn,ny,ne, labs,expts) 
    12271265    return (sf,c3) 
    12281266 
    1229   def getStrSz( self, g, stid=None, s=None, o=None, tt=False ): 
     1267  def getStrSz( self, g, stid=None, s=None, o=None, tt=False, cmv=None ): 
    12301268    assert stid == None or (s==None and o==None), 'Specify either stid or s and o' 
    12311269    assert stid != None or (s!=None and o!=None), 'Specify either stid or s and o' 
     
    12491287          else: 
    12501288             g1 = 'native' 
     1289    elif g1 == 'native:01': 
     1290      assert cmv != None, 'Need a valid cmor variable id  .... ' 
     1291      gflg = {'si':'','li':''}.get( self.cmvGridId[cmv], self.cmvGridId[cmv] ) 
     1292      if gflg == 'o' and not self.gridOceanStructured: 
     1293                  g1 = '1deg' 
     1294      else: 
     1295                  g1 = 'native' 
    12511296    if (s,o,g) not in self.strSz: 
    12521297 
     
    12601305        if type( sf ) == type( () ): 
    12611306           sf = sf[0] 
    1262  
    12631307 
    12641308        try: 
     
    13971441      -p <priority>  maximum priority; 
    13981442      --xls : Create Excel file with requested variables; 
    1399       --sf : Print summary of variable count by structure and frequency; 
     1443      --sf : Print summary of variable count by structure and frequency [default]; 
     1444      --legacy : Use legacy approach to volume estimation (depricated); 
    14001445      --xfr : Output variable lists in sheets organised by frequency and realm instead of by MIP table; 
    14011446      --SF : Print summary of variable count by structure and frequency for all MIPs; 
    14021447      --grdpol <native|1deg> :  policy for default grid, if MIPs have not expressed a preference; 
     1448      --grdforce <native|1deg> :  force a specific grid option, independent of individual preferences; 
     1449      --ogrdunstr : provide volume estimates for unstructured ocean grid (interpolation requirements of OMIP data are different in this case); 
    14031450      --allgrd :  When a variable is requested on multiple grids, archive all grids requested (default: only the finest resolution); 
    14041451      --unique :  List only variables which are requested uniquely by this MIP, for at least one experiment; 
     
    14301477                      '--txt':('txt',False), \ 
    14311478                      '--sf':('sf',False), \ 
     1479                      '--legacy':('legacy',False), \ 
    14321480                      '--xfr':('xfr',False), \ 
    14331481                      '--SF':('SF',False), \ 
    14341482                      '--grdpol':('grdpol',True), \ 
     1483                      '--ogrdunstr':('ogrdunstr',False), \ 
     1484                      '--grdforce':('grdforce',True), \ 
     1485                      '--omitCmip':('omitcmip',False), \ 
    14351486                      '--allgrd':('allgrd',False), \ 
    14361487                      '--unique':('unique',False), \ 
     
    14701521      else: 
    14711522        self.adict['m'] = set(self.adict['m'].split(',') ) 
     1523        if 'omitcmip' not in self.adict and 'CMIP' not in self.adict['m']: 
     1524          self.adict['m'].add( 'CMIP' ) 
    14721525 
    14731526    if 'grdpol' in self.adict: 
    14741527      assert self.adict['grdpol'] in ['native','1deg'], 'Grid policy argument --grdpol must be native or 1deg : %s' % self.adict['grdpol'] 
     1528 
     1529    if 'grdforce' in self.adict: 
     1530      assert self.adict['grdforce'] in ['native','1deg'], 'Grid policy argument --grdforce must be native or 1deg : %s' % self.adict['grdforce'] 
    14751531 
    14761532    integerArgs = set( ['p','t','plm'] ) 
     
    15581614    self.sc = dreqQuery( dq=self.dq ) 
    15591615 
     1616    if 'grdforce' in self.adict: 
     1617      self.sc.gridPolicyForce = self.adict['grdforce'] 
    15601618    if 'grdpol' in self.adict: 
    15611619      self.sc.gridPolicyDefaultNative = self.adict['grdpol'] == 'native' 
     
    15661624    if 'unique' in self.adict: 
    15671625      self.sc.uniqueRequest = True 
     1626    self.sc.gridOceanStructured = not self.adict.get( 'ogrdunstr', False ) 
    15681627 
    15691628    if 'mcfg' in self.adict: 
     
    15761635    makeXls = self.adict.get( 'xls', False ) 
    15771636    makeTxt = self.adict.get( 'txt', False ) 
    1578     doSf = 'SF' in self.adict or 'sf' in self.adict 
     1637    ##doSf = 'SF' in self.adict or 'sf' in self.adict 
     1638    doSf = 'legacy' not in self.adict 
     1639    assert not ('legacy' in self.adict and 'sf' in self.adict), "Conflicting command line argument, 'legacy' and 'sf': use only one of these" 
    15791640    if makeXls or makeTxt or doSf: 
    15801641      xlsOdir = self.adict.get( 'xlsdir', 'xls' ) 
Note: See TracChangeset for help on using the changeset viewer.