1 | #!/usr/bin/env python |
---|
2 | # -*- coding: utf-8 -*- |
---|
3 | import string |
---|
4 | import numpy as np |
---|
5 | import matplotlib.pyplot as plt |
---|
6 | from pylab import * |
---|
7 | from mpl_toolkits.basemap import Basemap |
---|
8 | from mpl_toolkits.basemap import shiftgrid, cm |
---|
9 | from netCDF4 import Dataset |
---|
10 | import arctic_map # function to regrid coast limits |
---|
11 | import cartesian_grid_test # function to convert grid from polar to cartesian |
---|
12 | import scipy.special |
---|
13 | import ffgrid2 |
---|
14 | import map_ffgrid |
---|
15 | from matplotlib import colors |
---|
16 | from matplotlib.font_manager import FontProperties |
---|
17 | import map_cartesian_grid |
---|
18 | |
---|
19 | |
---|
20 | ############################### |
---|
21 | # time period characteristics # |
---|
22 | ############################### |
---|
23 | MONTH = np.array(['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']) |
---|
24 | month = np.array(['JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER']) |
---|
25 | month_day = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]) |
---|
26 | M = len(month) |
---|
27 | |
---|
28 | |
---|
29 | ######################## |
---|
30 | # grid characteristics # |
---|
31 | ######################## |
---|
32 | x0 = -3000. # min limit of grid |
---|
33 | x1 = 2500. # max limit of grid |
---|
34 | dx = 40. |
---|
35 | xvec = np.arange(x0, x1+dx, dx) |
---|
36 | nx = len(xvec) |
---|
37 | y0 = -3000. # min limit of grid |
---|
38 | y1 = 3000. # max limit of grid |
---|
39 | dy = 40. |
---|
40 | yvec = np.arange(y0, y1+dy, dy) |
---|
41 | ny = len(yvec) |
---|
42 | |
---|
43 | |
---|
44 | |
---|
45 | |
---|
46 | ################################### |
---|
47 | |
---|
48 | frequ = np.array(['23', '89']) |
---|
49 | |
---|
50 | |
---|
51 | |
---|
52 | |
---|
53 | emis_spec_anom = np.zeros([len(frequ), M, 31, ny, nx], float) |
---|
54 | emis_lamb_anom = np.zeros([len(frequ), M, 31, ny, nx], float) |
---|
55 | emis_diff_anom = np.zeros([len(frequ), M, 31, ny, nx], float) |
---|
56 | emis_ratio_anom = np.zeros([len(frequ), M, 31, ny, nx], float) |
---|
57 | for ifr in range (1, len(frequ)): |
---|
58 | print 'frequency ' + frequ[ifr] |
---|
59 | for imo in range (0, M): |
---|
60 | print 'month ' + month[imo] |
---|
61 | print 'read daily emis spec lamb and diff' |
---|
62 | fichier_glob = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_monthly_data_lamb_spec_near_nadir_AMSUA' + str(frequ[ifr]) + '_' + month[imo] + '2009.nc', 'r', format = 'NETCDF3_CLASSIC') |
---|
63 | emis_spec = fichier_glob.variables['e_spec'][:] |
---|
64 | emis_lamb = fichier_glob.variables['e_lamb'][:] |
---|
65 | emis_diff = fichier_glob.variables['e_spec_lamb'][:] |
---|
66 | fichier_glob.close() |
---|
67 | print 'calculate daily emis_ratio' |
---|
68 | emis_ratio = np.zeros([ny, nx, month_day[imo]], float) |
---|
69 | for ijr in range (0, month_day[imo]): |
---|
70 | for ilat in range (0, ny): |
---|
71 | for ilon in range (0, nx): |
---|
72 | emis_ratio[ilat, ilon, ijr] = ((emis_lamb[ilat, ilon, ijr] - emis_spec[ilat, ilon, ijr]) / emis_spec[ilat, ilon, ijr]) * 100. |
---|
73 | print 'calculate daily anomaly' |
---|
74 | a = np.zeros([month_day[imo], ny * nx], float) |
---|
75 | b = np.zeros([month_day[imo], ny * nx], float) |
---|
76 | c = np.zeros([month_day[imo], ny * nx], float) |
---|
77 | d = np.zeros([month_day[imo], ny * nx], float) |
---|
78 | for ijr in range (0, month_day[imo]): |
---|
79 | print 'date ' + str(ijr + 1) + ' ' + month[imo] + ' 2009' |
---|
80 | a[ijr, :] = reshape(emis_spec[:, :, ijr], size(emis_spec[:, :, ijr])) |
---|
81 | b[ijr, :] = reshape(emis_lamb[:, :, ijr], size(emis_lamb[:, :, ijr])) |
---|
82 | c[ijr, :] = reshape(emis_diff[:, :, ijr], size(emis_diff[:, :, ijr])) |
---|
83 | d[ijr, :] = reshape(emis_ratio[:, :, ijr], size(emis_ratio[:, :, ijr])) |
---|
84 | for ilat in range (0, ny): |
---|
85 | for ilon in range (0, nx): |
---|
86 | emis_spec_anom[ifr, imo, ijr, ilat, ilon] = emis_spec[ilat, ilon, ijr] - mean(a[ijr, :][nonzero(isnan(a[ijr, :]) == False)]) |
---|
87 | emis_lamb_anom[ifr, imo, ijr, ilat, ilon] = emis_lamb[ilat, ilon, ijr] - mean(b[ijr, :][nonzero(isnan(b[ijr, :]) == False)]) |
---|
88 | emis_diff_anom[ifr, imo, ijr, ilat, ilon] = emis_diff[ilat, ilon, ijr] - mean(c[ijr, :][nonzero(isnan(c[ijr, :]) == False)]) |
---|
89 | emis_ratio_anom[ifr, imo, ijr, ilat, ilon] = emis_ratio[ilat, ilon, ijr] - mean(d[ijr, :][nonzero(isnan(d[ijr, :]) == False)]) |
---|
90 | ######################## |
---|
91 | # stack in netcdf file # |
---|
92 | ######################## |
---|
93 | print 'stack data in file - month ' + str(month[imo]) |
---|
94 | rootgrp = Dataset('/net/argos/data/parvati/lahlod/ARCTIC/monthly_GLACE/gridded_data/cartesian_grid/res_40/cartesian_grid_daily_data_lamb_spec_ratio_anomaly_near_nadir_AMSUA' + str(frequ[ifr]) + '_' + month[imo] + '2009.nc', 'w', format='NETCDF3_CLASSIC') |
---|
95 | rootgrp.createDimension('longitude', nx) |
---|
96 | rootgrp.createDimension('latitude', ny) |
---|
97 | rootgrp.createDimension('days', month_day[imo]) |
---|
98 | nc_lon = rootgrp.createVariable('longitude', 'f', ('longitude',)) |
---|
99 | nc_lat = rootgrp.createVariable('latitude', 'f', ('latitude',)) |
---|
100 | nc_days = rootgrp.createVariable('days', 'f', ('days',)) |
---|
101 | nc_anom_spec = rootgrp.createVariable('spec_anomaly', 'f', ('days', 'latitude', 'longitude')) |
---|
102 | nc_anom_lamb = rootgrp.createVariable('lamb_anomay', 'f', ('days', 'latitude', 'longitude')) |
---|
103 | nc_anom_diff = rootgrp.createVariable('diff_anomaly', 'f', ('days', 'latitude', 'longitude')) |
---|
104 | nc_anom_ratio = rootgrp.createVariable('ratio_anomaly', 'f', ('days', 'latitude', 'longitude')) |
---|
105 | nc_lon[:] = xvec |
---|
106 | nc_lat[:] = yvec |
---|
107 | nc_days[:] = np.arange(0, month_day[imo], 1) |
---|
108 | nc_anom_spec[:] = emis_spec_anom[ifr, imo, 0 : month_day[imo], :, :] |
---|
109 | nc_anom_lamb[:] = emis_lamb_anom[ifr, imo,0 : month_day[imo], :, :] |
---|
110 | nc_anom_diff[:] = emis_diff_anom[ifr, imo,0 : month_day[imo], :, :] |
---|
111 | nc_anom_ratio[:] = emis_ratio_anom[ifr, imo,0 : month_day[imo], :, :] |
---|
112 | rootgrp.close() |
---|