1 | ;+ |
---|
2 | ; |
---|
3 | ; @version |
---|
4 | ; $Id$ |
---|
5 | ; |
---|
6 | ;- |
---|
7 | PRO mesh_glosea $ |
---|
8 | , I_INDEX=i_index $ |
---|
9 | , DELTA_I=delta_i $ |
---|
10 | , J_INDEX=j_index $ |
---|
11 | , DELTA_J=delta_j $ |
---|
12 | , K_INDEX=k_index $ |
---|
13 | , DELTA_K=delta_k $ |
---|
14 | , ZONAL=zonal |
---|
15 | ; |
---|
16 | compile_opt idl2, strictarrsubs |
---|
17 | ; |
---|
18 | @common |
---|
19 | @com_eg |
---|
20 | ; |
---|
21 | print, ' Init GLOSEA mesh' |
---|
22 | |
---|
23 | ; |
---|
24 | ; NCO tranfo for glosea netCDF files (GLOSEA_40_10y_01_10_grid_T_glosea.nc ) |
---|
25 | ; ncwa -a unspecified |
---|
26 | ; ncrename -h -d t,time_counter -d longitude,x -d latitude,y |
---|
27 | ; -v longitude,nav_lon -v latitude,nav_lat -v depth,deptht |
---|
28 | ; -v temp,votemper -v salinity,vosaline -v field611,sobarstg |
---|
29 | ; -v field653,somixhgt, -v PLE,sowaflup |
---|
30 | |
---|
31 | ;---------------------------------------------------------- |
---|
32 | ; bornes de la grille |
---|
33 | ;---------------------------------------------------------- |
---|
34 | ; |
---|
35 | jpi = 288 |
---|
36 | jpj = 192 |
---|
37 | jpk = 40 |
---|
38 | |
---|
39 | jpiglo = jpi |
---|
40 | jpjglo = jpj |
---|
41 | jpkglo = jpk |
---|
42 | |
---|
43 | ixminmesh =0 |
---|
44 | ixmaxmesh =jpi-1 |
---|
45 | ; |
---|
46 | iyminmesh =0 |
---|
47 | iymaxmesh =jpj-1 |
---|
48 | ; |
---|
49 | izminmesh =0 |
---|
50 | izmaxmesh =jpk-1 |
---|
51 | |
---|
52 | |
---|
53 | ; init shift and periodicity |
---|
54 | |
---|
55 | key_shift = !VALUES.F_NAN |
---|
56 | |
---|
57 | no_lon_shift = 0 |
---|
58 | |
---|
59 | key_periodique = 1 |
---|
60 | |
---|
61 | ; reduce grid in latitude ? |
---|
62 | |
---|
63 | IF keyword_set(J_INDEX) THEN BEGIN |
---|
64 | |
---|
65 | IF NOT keyword_set(DELTA_J) THEN delta_j = 1 |
---|
66 | delta_j = delta_j - 1 |
---|
67 | |
---|
68 | iyminmesh = j_index |
---|
69 | iymaxmesh = j_index+delta_j |
---|
70 | |
---|
71 | print, ' set GLOSEA grid to j_index in ', j_index, j_index+delta_j |
---|
72 | |
---|
73 | ENDIF |
---|
74 | |
---|
75 | ; reduce grid in longitude ? |
---|
76 | |
---|
77 | IF keyword_set(I_INDEX) THEN BEGIN |
---|
78 | |
---|
79 | no_lon_shift = no_lon_shift + 1 |
---|
80 | |
---|
81 | IF NOT keyword_set(DELTA_I) THEN delta_i = 1 |
---|
82 | delta_i = delta_i - 1 |
---|
83 | |
---|
84 | ixminmesh = i_index |
---|
85 | ixmaxmesh = i_index+delta_i |
---|
86 | |
---|
87 | print, ' set GLOSEA grid to i_index in ', i_index, i_index+delta_i |
---|
88 | |
---|
89 | key_periodique = 0 |
---|
90 | |
---|
91 | key_offset = [0, 0, 0] |
---|
92 | |
---|
93 | diaznl_idx = 0 |
---|
94 | |
---|
95 | key_shift = 0 |
---|
96 | |
---|
97 | ENDIF |
---|
98 | |
---|
99 | ; reduce grid in depth ? |
---|
100 | |
---|
101 | IF keyword_set(K_INDEX) THEN BEGIN |
---|
102 | |
---|
103 | IF NOT keyword_set(DELTA_K) THEN delta_k = 1 |
---|
104 | delta_k = delta_k - 1 |
---|
105 | |
---|
106 | izminmesh = k_index-1 |
---|
107 | izmaxmesh = k_index-1+delta_k |
---|
108 | |
---|
109 | print, ' set GLOSEA grid to k_index in ', k_index-1, k_index-1+delta_k |
---|
110 | |
---|
111 | ENDIF |
---|
112 | ; |
---|
113 | ;------------------------------------------------------ |
---|
114 | ; calcul de la grille |
---|
115 | ;------------------------------------------------------ |
---|
116 | |
---|
117 | ; 1. Define longitudes |
---|
118 | |
---|
119 | inilon = 0. |
---|
120 | |
---|
121 | glamt = 360.0*findgen(jpi)/float(jpi)+inilon |
---|
122 | glamt = glamt#replicate(1, jpj) |
---|
123 | |
---|
124 | inilon = 0.625 |
---|
125 | |
---|
126 | glamu = 360.0*findgen(jpi)/float(jpi)+inilon |
---|
127 | glamu = glamu#replicate(1, jpj) |
---|
128 | |
---|
129 | ; 2. Define latitudes |
---|
130 | |
---|
131 | gphit = [-89.375,-88.125,-86.875,-85.625,-84.375,-83.125,-81.875,-80.625,-79.375,-78.125,-76.875,-75.625,$ |
---|
132 | -74.375,-73.125,-71.875,-70.625,-69.375,-68.125,-66.875,-65.625,-64.375,-63.125,-61.875,-60.625,$ |
---|
133 | -59.375,-58.125,-56.875,-55.625,-54.375,-53.125,-51.875,-50.625,-49.375,-48.125,-46.875,-45.625,$ |
---|
134 | -44.375,-43.125,-41.877,-40.632,-39.391,-38.156,-36.928,-35.709,-34.500,-33.302,-32.117,-30.946,$ |
---|
135 | -29.791,-28.651,-27.529,-26.426,-25.342,-24.279,-23.237,-22.217,-21.221,-20.249,-19.300,-18.377] |
---|
136 | |
---|
137 | gphit = [gphit, $ |
---|
138 | -17.480,-16.608,-15.762,-14.943,-14.150,-13.384,-12.644,-11.931,-11.245,-10.584,-9.950,-9.341,-8.757, $ |
---|
139 | -8.197,-7.661,-7.148,-6.658,-6.189,-5.740,-5.311,-4.901,-4.508,-4.132,-3.771,-3.423,-3.089,-2.766,$ |
---|
140 | -2.453,-2.148,-1.851,-1.559,-1.272,-0.988,-0.706,-0.423,-0.141,0.141,0.423,0.706,0.988,1.272,1.559,$ |
---|
141 | 1.851,2.148,2.453,2.766,3.089,3.423,3.771,4.132,4.508,4.901,5.311,5.740,6.189,6.658,7.148,7.661,8.197,$ |
---|
142 | 8.757,9.341,9.950,10.584,11.245,11.931,12.644,13.384,14.150,14.943,15.762,16.608,17.480,18.377,19.300] |
---|
143 | gphit = [gphit, $ |
---|
144 | 20.249,21.221,22.217,23.237,24.279,25.342,26.426,27.529,28.651,29.791,30.946,32.117,33.302,34.500, $ |
---|
145 | 35.709,36.928,38.156,39.391,40.632,41.877,43.125,44.375,45.625,46.875,48.125,49.375,50.625,51.875, $ |
---|
146 | 53.125,54.375,55.625,56.875,58.125,59.375,60.625,61.875,63.125,64.375,65.625,66.875,68.125,69.375,$ |
---|
147 | 70.625,71.875,73.125,74.375,75.625,76.875,78.125,79.375,80.625,81.875,83.125,84.375,85.625,86.875,$ |
---|
148 | 88.125,89.375] |
---|
149 | gphit = replicate(1, jpi)#gphit |
---|
150 | |
---|
151 | gphiu = [-88.750,-87.500,-86.250,-85.000,-83.750,-82.500,-81.250,-80.000,-78.750,-77.500,-76.250,-75.000,-73.750,-72.500,-71.250,-70.000,-68.750,-67.500,-66.250,-65.000,-63.750,-62.500,-61.250,-60.000,-58.750,-57.500,-56.250,-55.000,-53.750,-52.500,-51.250,-50.000,-48.750,-47.500,-46.250,-45.000,-43.750,-42.501,-41.254,-40.010,-38.772,-37.540,-36.316,-35.102,-33.898,-32.707,-31.528,-30.365,-29.217,-28.086,-26.973,-25.879,-24.805,-23.752,-22.722,-21.713,-20.729] |
---|
152 | |
---|
153 | gphiu = [gphiu, -19.768,-18.833,-17.922,-17.037,-16.178,-15.346,-14.539,-13.760,-13.007,-12.281,-11.581,-10.908,-10.261,-9.639,-9.043,-8.471,-7.923,-7.399,-6.897,-6.418,-5.959,-5.521,-5.102,-4.700,-4.316,-3.948,-3.594,-3.253,-2.925,-2.607,-2.298,-1.998,-1.704,-1.415,-1.130,-0.847,-0.565,-0.282,-0.000,0.282,0.565,0.847,1.130,1.415,1.704,1.998,2.298,2.607,2.925,3.253,3.594,3.948,4.316,4.700,5.102,5.521,5.959,6.418,6.897,7.399,7.923,8.471,9.043,9.639,10.261,10.908,11.581,12.281] |
---|
154 | |
---|
155 | gphiu = [gphiu,13.007,13.760,14.539,15.346,16.178,17.037,17.922,18.833,19.768,20.729,21.713,22.722,23.752,24.805,25.879,26.973,28.086,29.217,30.365,31.528,32.707,33.898,35.102,36.316,37.540,38.772,40.010,41.254,42.501,43.750,45.000,46.250,47.500,48.750,50.000,51.250,52.500,53.750,55.000,56.250,57.500,58.750,60.000,61.250,62.500,63.750,65.000,66.250,67.500,68.750,70.000,71.250,72.500,73.750,75.000,76.250,77.500,78.750,80.000,81.250,82.500,83.750,85.000,86.250,87.500,88.750,90.000] |
---|
156 | gphiu = replicate(1, jpi)#gphiu |
---|
157 | |
---|
158 | ; 3 Define scale factors |
---|
159 | |
---|
160 | zrad=6371229.0 |
---|
161 | |
---|
162 | ; Exact method: integration on a sphere |
---|
163 | |
---|
164 | e1t = abs(2*!pi*zrad*cos(gphit*!pi/180.0)/jpi) |
---|
165 | e1u = abs(2*!pi*zrad*cos(gphiu*!pi/180.0)/jpi) |
---|
166 | |
---|
167 | e2t = [1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.249,1.247,1.243,1.238,1.232,1.224,1.214,1.204,1.192,1.178,1.164,1.148,1.131,1.113,1.094,1.074,1.053,1.031,1.008,0.985,0.960,0.936,0.911,0.885,0.859,0.833,0.806,0.779,0.753,0.726,0.700,0.673,0.647,0.622,0.596,0.572,0.548,0.524,0.501] |
---|
168 | |
---|
169 | e2t = [e2t, 0.480,0.459,0.438,0.419,0.401,0.384,0.368,0.354,0.341,0.329,0.318,0.308,0.301,0.294,0.289,0.285,0.283,0.282,0.282,0.282,0.282,0.282,0.282,0.283,0.285,0.289,0.294,0.301,0.308,0.318,0.329,0.341,0.354,0.368,0.384,0.401,0.419,0.438,0.459,0.480,0.501,0.524,0.548,0.572,0.596,0.622,0.647,0.673,0.700,0.726,0.753,0.779,0.806,0.833,0.859,0.885,0.911,0.936] |
---|
170 | |
---|
171 | e2t = [e2t,0.960,0.985,1.008,1.031,1.053,1.074,1.094,1.113,1.131,1.148,1.164,1.178,1.192,1.204,1.214,1.224,1.232,1.238,1.243,1.247,1.249,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250,1.250] |
---|
172 | e2t = replicate(1, jpi)#e2t |
---|
173 | |
---|
174 | ; 4. Define mask |
---|
175 | ; open mask file |
---|
176 | tmask = lonarr(jpi, jpj, jpk) |
---|
177 | s_file = hom_idl+'grids/mask_glosea' |
---|
178 | restore, s_file |
---|
179 | |
---|
180 | ; 5. vertical grid (m) |
---|
181 | |
---|
182 | gdept = [10.,20.,30.,40.,50.,60.,70.,80.,90.,100.,110.,120.,130.,141.,156.,176.,204.,243.,293.,358.,439.,538.,655.,794.,954.,1137.,1344.,1576.,1832.,2113.,2419.,2745.,3085.,3430.,3775.,4120.,4465.,4810.,5155.,5500.] |
---|
183 | gdepw = [5.,15.,25.,35.,45.,55.,65.,75.,85.,95.,105.,115.,125.,136.,148.,166.,190.,224.,268.,326.,399.,488.,596.,724.,874.,1046.,1241.,1460.,1704.,1972.,2266.,2582.,2915.,3258.,3602.,3948.,4292.,4638.,4982.,5328.] |
---|
184 | |
---|
185 | e3t = [10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,11.,15.,20.,28.,38.,51.,65.,81.,98.,118.,138.,160.,183.,207.,231.,256.,281.,306.,326.,340.,345.,345.,345.,345.,345.,345.,345.] |
---|
186 | e3w = [5.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,11.,13.,17.,24.,33.,44.,58.,73.,90.,108.,128.,149.,172.,195.,219.,244.,269.,293.,316.,333.,343.,345.,345.,345.,345.,345.,345.] |
---|
187 | |
---|
188 | |
---|
189 | |
---|
190 | |
---|
191 | isign=where(glamt gt 380.) |
---|
192 | IF isign[0] NE -1 THEN glamt[isign] = glamt[isign]-360. |
---|
193 | isign=where(glamu gt 380.) |
---|
194 | IF isign[0] NE -1 THEN glamu[isign] = glamu[isign]-360. |
---|
195 | isign=where(glamv gt 380.) |
---|
196 | IF isign[0] NE -1 THEN glamv[isign] = glamv[isign]-360. |
---|
197 | isign=where(glamf gt 380.) |
---|
198 | IF isign[0] NE -1 THEN glamf[isign] = glamf[isign]-360. |
---|
199 | |
---|
200 | ; reduce grid to zonal mean |
---|
201 | |
---|
202 | IF keyword_set(ZONAL) THEN BEGIN |
---|
203 | |
---|
204 | no_lon_shift = no_lon_shift + 1 |
---|
205 | |
---|
206 | jpi = 1 |
---|
207 | ixminmesh = 0 |
---|
208 | ixmaxmesh = 0 |
---|
209 | |
---|
210 | print, ' set GLOSEA grid to zonal mean ' |
---|
211 | |
---|
212 | diaznl_idx = 0 |
---|
213 | |
---|
214 | glamt = glamt[diaznl_idx, *] |
---|
215 | glamu = glamu[diaznl_idx, *] |
---|
216 | glamv = glamv[diaznl_idx, *] |
---|
217 | glamf = glamf[diaznl_idx, *] |
---|
218 | gphit = gphit[diaznl_idx, *] |
---|
219 | gphiu = gphiu[diaznl_idx, *] |
---|
220 | gphiv = gphiv[diaznl_idx, *] |
---|
221 | gphif = gphif[diaznl_idx, *] |
---|
222 | |
---|
223 | e1t = e1t[diaznl_idx, *] |
---|
224 | e2t = e2t[diaznl_idx, *] |
---|
225 | e1u = e1u[diaznl_idx, *] |
---|
226 | e2u = e2u[diaznl_idx, *] |
---|
227 | e1v = e1v[diaznl_idx, *] |
---|
228 | e2v = e2v[diaznl_idx, *] |
---|
229 | |
---|
230 | ; read offset |
---|
231 | |
---|
232 | key_offset = [0, 0, 0] |
---|
233 | |
---|
234 | key_shift = 0 |
---|
235 | |
---|
236 | ENDIF |
---|
237 | |
---|
238 | |
---|
239 | IF no_lon_shift EQ 0 THEN BEGIN |
---|
240 | |
---|
241 | ; read offset |
---|
242 | |
---|
243 | key_offset = [0, 0, 0] |
---|
244 | ; |
---|
245 | ; indice i pour grille j moyenne zonale |
---|
246 | ; |
---|
247 | diaznl_idx = 0 |
---|
248 | |
---|
249 | ENDIF |
---|
250 | |
---|
251 | END |
---|