1 | import string |
---|
2 | |
---|
3 | validCmip5Experiments = ['1pctCO2', 'abrupt4xCO2', 'amip', 'amip4K', 'amip4xCO2', 'amipFuture', 'aqua4K', 'aqua4xCO2', 'aquaControl', 'decadal1959', 'decadal1960', 'decadal1961', 'decadal1962', 'decadal1963', 'decadal1964', 'decadal1965', 'decadal1966', 'decadal1967', 'decadal1968', 'decadal1969', 'decadal1970', 'decadal1971', 'decadal1972', 'decadal1973', 'decadal1974', 'decadal1975', 'decadal1976', 'decadal1977', 'decadal1978', 'decadal1979', 'decadal1980', 'decadal1981', 'decadal1982', 'decadal1983', 'decadal1984', 'decadal1985', 'decadal1986', 'decadal1987', 'decadal1988', 'decadal1989', 'decadal1990', 'decadal1991', 'decadal1992', 'decadal1993', 'decadal1994', 'decadal1995', 'decadal1996', 'decadal1997', 'decadal1998', 'decadal1999', 'decadal2000', 'decadal2001', 'decadal2002', 'decadal2003', 'decadal2004', 'decadal2005', 'decadal2006', 'decadal2007', 'decadal2008', 'decadal2009', 'decadal2010', 'decadal2011', 'decadal2012', 'esmControl', 'esmFdbk1', 'esmFdbk2', 'esmFixClim1', 'esmFixClim2', 'esmHistorical', 'esmrcp85', 'historical', 'historicalExt', 'historicalGHG', 'historicalMisc', 'historicalNat', 'lgm', 'midHolocene', 'noVolc1960', 'noVolc1965', 'noVolc1970', 'noVolc1975', 'noVolc1980', 'noVolc1985', 'noVolc1990', 'noVolc1995', 'noVolc2000', 'noVolc2005', 'past1000', 'piControl', 'rcp26', 'rcp45', 'rcp60', 'rcp85', 'sst2020', 'sst2030', 'sst2090', 'sst2090rcp45', 'sstClim', 'sstClim4xCO2', 'sstClimAerosol', 'sstClimSulfate', 'volcIn2010'] |
---|
4 | |
---|
5 | validExperiment = validCmip5Experiments + ['evaluation'] |
---|
6 | |
---|
7 | |
---|
8 | validCordexFrequecies = ['fx','sem','mon','day','6hr','3hr'] |
---|
9 | |
---|
10 | validCordexDomainsL = [ 'SAM-44', 'CAM-44', 'NAM-44', 'EUR-44', 'AFR-44', 'WAS-44', 'EAS-44', 'CAS-44', 'AUS-44', 'ANT-44', 'ARC-44', 'MED-44'] |
---|
11 | validCordexDomainsLi = map( lambda x: x + 'i', validCordexDomainsL ) |
---|
12 | validCordexDomainsH = ['EUR-11'] |
---|
13 | validCordexDomains = validCordexDomainsL + validCordexDomainsLi + validCordexDomainsH |
---|
14 | |
---|
15 | plevRequired = ['clh', 'clm', 'cll', 'ua850', 'va850', 'ta850', 'hus850', 'ua500', 'va500', 'ta500', 'zg500', 'ua200', 'va200', 'ta200', 'zg200'] |
---|
16 | plevBndsRequired = ['clh', 'clm', 'cll'] |
---|
17 | heightRequired = ['tas','tasmax','tasmin','huss','sfcWind','sfcWindmax','wsgsmax','uas','vas'] |
---|
18 | |
---|
19 | |
---|
20 | ii = open( 'GCMModelName.txt' ).readlines() |
---|
21 | validGcmNames = [] |
---|
22 | for l in ii: |
---|
23 | if l[0] != '#' and len( string.strip(l) ) > 0: |
---|
24 | validGcmNames.append( string.split(l)[0] ) |
---|
25 | |
---|
26 | ii = open( 'RCMModelName.txt' ).readlines() |
---|
27 | validRcmNames = [] |
---|
28 | validInstNames = [] |
---|
29 | for l in ii: |
---|
30 | if l[0] != '#' and len( string.strip(l) ) > 0: |
---|
31 | bits = string.split(l) |
---|
32 | validRcmNames.append( bits[0] ) |
---|
33 | validInstNames.append( bits[1] ) |
---|
34 | |
---|
35 | plevValues = {'clh':22000, 'clm':56000, 'cll':84000} |
---|
36 | for i in [200,500,850]: |
---|
37 | for v in ['zg','ua', 'va', 'ta', 'hus']: |
---|
38 | k = '%s%s' % (v,i) |
---|
39 | plevValues[k] = i*100 |
---|
40 | |
---|
41 | heightRequired = ['tas', 'tasmax', 'tasmin', 'huss', 'sfcWind', 'sfcWindmax', 'wsgsmax', 'uas', 'vas'] |
---|
42 | heightValues = {} |
---|
43 | for v in heightRequired: |
---|
44 | if v in ['tas', 'tasmax', 'tasmin', 'huss']: |
---|
45 | heightValues[v] = 2 |
---|
46 | else: |
---|
47 | heightValues[v] = 10 |
---|
48 | |
---|
49 | ii = open( 'cordex_domains.csv' ).readlines() |
---|
50 | keys = ['name','tag','res','grid_np_lon','grid_np_lat','nlon','nlat','w','e','s','n'] |
---|
51 | rotatedPoleGrids = {} |
---|
52 | for l in ii[2:16]: |
---|
53 | bits = string.split(string.strip(l),',') |
---|
54 | ee = {} |
---|
55 | i = 0 |
---|
56 | for k in keys: |
---|
57 | if k in ['nlon','nlat']: |
---|
58 | ee[k] = int(bits[i]) |
---|
59 | elif k in ['grid_np_lon','grid_np_lat','w','e','s','n']: |
---|
60 | if bits[i] != 'N/A': |
---|
61 | ee[k] = float(bits[i]) |
---|
62 | else: |
---|
63 | ee[k] = bits[i] |
---|
64 | else: |
---|
65 | ee[k] = bits[i] |
---|
66 | i += 1 |
---|
67 | rotatedPoleGrids[bits[1]] = ee |
---|
68 | |
---|
69 | ##Area,Name, deg,Nlon,Nlat,West8,East8,South8,North8, |
---|
70 | keys = ['name','tag','res','nlon','nlat','w','e','s','n'] |
---|
71 | interpolatedGrids = {} |
---|
72 | for l in ii[18:33]: |
---|
73 | bits = string.split(string.strip(l),',') |
---|
74 | ee = {} |
---|
75 | i = 0 |
---|
76 | for k in keys: |
---|
77 | if k in ['nlon','nlat']: |
---|
78 | ee[k] = int(bits[i]) |
---|
79 | elif k in ['w','e','s','n']: |
---|
80 | ee[k] = float(bits[i]) |
---|
81 | else: |
---|
82 | ee[k] = bits[i] |
---|
83 | i += 1 |
---|
84 | interpolatedGrids[bits[1]] = ee |
---|
85 | |
---|
86 | |
---|