1 | ;+ |
---|
2 | ; |
---|
3 | ; @keyword I_INDEX |
---|
4 | ; |
---|
5 | ; @keyword DELTA_I |
---|
6 | ; |
---|
7 | ; @keyword J_INDEX |
---|
8 | ; |
---|
9 | ; @keyword DELTA_J |
---|
10 | ; |
---|
11 | ; @keyword K_INDEX |
---|
12 | ; |
---|
13 | ; @keyword DELTA_K |
---|
14 | ; |
---|
15 | ; @keyword ZONAL |
---|
16 | ; |
---|
17 | ; @keyword NO_SHIFT |
---|
18 | ; |
---|
19 | ; @keyword WHOLE_ARRAYS |
---|
20 | ; |
---|
21 | ; @keyword H_CONFIG |
---|
22 | ; |
---|
23 | ; @keyword V_CONFIG |
---|
24 | ; |
---|
25 | ; @uses |
---|
26 | ; <pro>common</pro> |
---|
27 | ; <propost_it>com_eg</propost_it> |
---|
28 | ; |
---|
29 | ; @history |
---|
30 | ; - fplod 20100119T160644Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
31 | ; |
---|
32 | ; * check parameters |
---|
33 | ; |
---|
34 | ; @version |
---|
35 | ; $Id$ |
---|
36 | ; |
---|
37 | ;- |
---|
38 | PRO mesh_orca $ |
---|
39 | , I_INDEX=i_index $ |
---|
40 | , DELTA_I=delta_i $ |
---|
41 | , J_INDEX=j_index $ |
---|
42 | , DELTA_J=delta_j $ |
---|
43 | , K_INDEX=k_index $ |
---|
44 | , DELTA_K=delta_k $ |
---|
45 | , ZONAL=zonal $ |
---|
46 | , NO_SHIFT=no_shift $ |
---|
47 | , WHOLE_ARRAYS=whole_arrays $ |
---|
48 | , H_CONFIG=h_config $ |
---|
49 | , V_CONFIG=V_config |
---|
50 | ; |
---|
51 | compile_opt idl2, strictarrsubs |
---|
52 | ; |
---|
53 | @common |
---|
54 | @com_eg |
---|
55 | ; |
---|
56 | usage='mesh_orca' $ |
---|
57 | + ', I_INDEX=i_index' $ |
---|
58 | + ', DELTA_I=delta_i' $ |
---|
59 | + ', J_INDEX=j_index' $ |
---|
60 | + ', DELTA_J=delta_j' $ |
---|
61 | + ', K_INDEX=k_index' $ |
---|
62 | + ', DELTA_K=delta_k' $ |
---|
63 | + ', ZONAL=zonal' $ |
---|
64 | + ', NO_SHIFT=no_shift' $ |
---|
65 | + ', WHOLE_ARRAYS=whole_arrays' $ |
---|
66 | + ', H_CONFIG=h_config' $ |
---|
67 | + ', V_CONFIG=V_config' |
---|
68 | ; |
---|
69 | nparam = N_PARAMS() |
---|
70 | IF (nparam NE 0) THEN BEGIN |
---|
71 | ras = report(['Incorrect number of arguments.' $ |
---|
72 | + '!C' $ |
---|
73 | + 'Usage : ' + usage]) |
---|
74 | stop |
---|
75 | ENDIF |
---|
76 | |
---|
77 | ; temporary |
---|
78 | |
---|
79 | IF h_config EQ 'ORCA05' THEN BEGIN |
---|
80 | v_config = 'L46' |
---|
81 | ENDIF |
---|
82 | ; IF h_config EQ 'ORCA_R2' THEN BEGIN |
---|
83 | ; v_config = 'L30' |
---|
84 | ; ENDIF |
---|
85 | |
---|
86 | IF NOT keyword_set(H_CONFIG) THEN BEGIN |
---|
87 | h_config = 'ORCA_R2' |
---|
88 | ENDIF |
---|
89 | IF NOT keyword_set(V_CONFIG) THEN BEGIN |
---|
90 | v_config = 'L30' |
---|
91 | ENDIF |
---|
92 | print, ' Init ORCA mesh horizontal config '+h_config |
---|
93 | print, ' vertical config '+v_config |
---|
94 | |
---|
95 | varexpp = varexp |
---|
96 | |
---|
97 | ;---------------------------------------------------------- |
---|
98 | ; bornes de la grille |
---|
99 | ;---------------------------------------------------------- |
---|
100 | |
---|
101 | CASE h_config OF |
---|
102 | 'ORCA05': begin |
---|
103 | IF keyword_set(WHOLE_ARRAYS) THEN BEGIN |
---|
104 | ixminmesh =0 & ixmaxmesh =721 |
---|
105 | iyminmesh =0 & iymaxmesh =510 |
---|
106 | ENDIF ELSE BEGIN |
---|
107 | ixminmesh =2 & ixmaxmesh =720 |
---|
108 | iyminmesh =0 & iymaxmesh =510 |
---|
109 | ENDELSE |
---|
110 | END |
---|
111 | 'ORCA_R2': begin |
---|
112 | IF keyword_set(WHOLE_ARRAYS) THEN BEGIN |
---|
113 | ixminmesh =0 & ixmaxmesh =181 |
---|
114 | iyminmesh =0 & iymaxmesh =148 |
---|
115 | ENDIF ELSE BEGIN |
---|
116 | ixminmesh =2 & ixmaxmesh =181 |
---|
117 | iyminmesh =0 & iymaxmesh =147 |
---|
118 | ENDELSE |
---|
119 | END |
---|
120 | 'ORCA_R4': begin |
---|
121 | IF keyword_set(WHOLE_ARRAYS) THEN BEGIN |
---|
122 | ixminmesh =0 & ixmaxmesh =91 |
---|
123 | iyminmesh =0 & iymaxmesh =75 |
---|
124 | ENDIF ELSE BEGIN |
---|
125 | ixminmesh =2 & ixmaxmesh =91 |
---|
126 | iyminmesh =0 & iymaxmesh =75 |
---|
127 | ENDELSE |
---|
128 | END |
---|
129 | ENDCASE |
---|
130 | |
---|
131 | CASE v_config OF |
---|
132 | 'L300': BEGIN & izminmesh =0 & izmaxmesh =300 & END |
---|
133 | 'L30': BEGIN & izminmesh =0 & izmaxmesh =30 & END |
---|
134 | 'L46': BEGIN & izminmesh =0 & izmaxmesh =45 & END |
---|
135 | ELSE: BEGIN |
---|
136 | print, ' **** vertical config unknown for ORCA: ',v_config |
---|
137 | END |
---|
138 | ENDCASE |
---|
139 | ; |
---|
140 | ; init shift and periodicity |
---|
141 | |
---|
142 | |
---|
143 | ; IF keyword_set(NO_SHIFT) THEN BEGIN |
---|
144 | ; key_shift = 0 |
---|
145 | ; ENDIF |
---|
146 | IF keyword_set(NO_SHIFT) THEN BEGIN |
---|
147 | shift = 0 |
---|
148 | key_shift = 0 |
---|
149 | ENDIF |
---|
150 | no_lon_shift = 0 |
---|
151 | |
---|
152 | ; key_periodique = 1 |
---|
153 | periodic = 1 |
---|
154 | |
---|
155 | ; reduce grid in latitude ? |
---|
156 | |
---|
157 | IF keyword_set(J_INDEX) THEN BEGIN |
---|
158 | |
---|
159 | IF NOT keyword_set(DELTA_J) THEN BEGIN |
---|
160 | delta_j = 1 |
---|
161 | ENDIF |
---|
162 | delta_j = delta_j - 1 |
---|
163 | |
---|
164 | iyminmesh = j_index |
---|
165 | iymaxmesh = j_index+delta_j |
---|
166 | |
---|
167 | print, ' set ORCA grid to j_index in ', j_index, j_index+delta_j |
---|
168 | iymindta = iyminmesh |
---|
169 | ENDIF |
---|
170 | |
---|
171 | ; reduce grid in longitude ? |
---|
172 | |
---|
173 | IF keyword_set(I_INDEX) THEN BEGIN |
---|
174 | |
---|
175 | no_lon_shift = no_lon_shift + 1 |
---|
176 | |
---|
177 | IF NOT keyword_set(DELTA_I) THEN BEGIN |
---|
178 | delta_i = 1 |
---|
179 | ENDIF |
---|
180 | delta_i = delta_i - 1 |
---|
181 | |
---|
182 | ixminmesh = i_index |
---|
183 | ixmaxmesh = i_index+delta_i |
---|
184 | |
---|
185 | print, ' set ORCA grid to i_index in ', i_index, i_index+delta_i |
---|
186 | |
---|
187 | ixmindta = ixminmesh |
---|
188 | key_periodique = 0 |
---|
189 | key_offset = [0, 0, 0] |
---|
190 | diaznl_idx = 0 |
---|
191 | key_shift = 0 |
---|
192 | ENDIF |
---|
193 | |
---|
194 | ; reduce grid in depth ? |
---|
195 | |
---|
196 | IF keyword_set(K_INDEX) THEN BEGIN |
---|
197 | |
---|
198 | IF NOT keyword_set(DELTA_K) THEN BEGIN |
---|
199 | delta_k = 1 |
---|
200 | ENDIF |
---|
201 | delta_k = delta_k - 1 |
---|
202 | |
---|
203 | izminmesh = k_index-1 |
---|
204 | izmaxmesh = k_index-1+delta_k |
---|
205 | |
---|
206 | izmindta = izminmesh |
---|
207 | |
---|
208 | print, ' set ORCA grid to k_index in ', k_index-1, k_index-1+delta_k |
---|
209 | |
---|
210 | ENDIF |
---|
211 | ; |
---|
212 | ;------------------------------------------------------ |
---|
213 | ; lecture de la grille |
---|
214 | ;------------------------------------------------------ |
---|
215 | |
---|
216 | key_yreverse = 0 |
---|
217 | |
---|
218 | CASE h_config OF |
---|
219 | 'ORCA05': BEGIN |
---|
220 | mesmsk = 'micromeshmaskORCA05.nc' |
---|
221 | CASE v_config of |
---|
222 | 'L46': mesmsk = 'meshmaskORCA05_L46.nc' |
---|
223 | 'L30': mesmsk = 'meshmaskORCA05_L30.nc' |
---|
224 | ELSE: BEGIN |
---|
225 | print, ' **** vertical config unknown for ORCA05: ',v_config |
---|
226 | END |
---|
227 | ENDCASE |
---|
228 | cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC = periodic' |
---|
229 | END |
---|
230 | 'ORCA_R2': BEGIN |
---|
231 | CASE v_config of |
---|
232 | 'L30': BEGIN |
---|
233 | CASE orca_mask_version OF |
---|
234 | 'V1': mesmsk = 'meshmask.orca.2d.nc' |
---|
235 | 'V2': mesmsk = 'meshmask_ORCA_R2.nc' |
---|
236 | 'V3': mesmsk = 'meshmask_ORCA_R2_V2.nc' |
---|
237 | ENDCASE |
---|
238 | IF whole_arrays EQ 0 THEN BEGIN |
---|
239 | |
---|
240 | cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC=periodic' |
---|
241 | ENDIF ELSE BEGIN |
---|
242 | cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, SHIFT=shift, PERIODIC=periodic' |
---|
243 | ENDELSE |
---|
244 | END |
---|
245 | 'L46': BEGIN |
---|
246 | mesmsk = 'meshmaskORCA2_L46.nc' |
---|
247 | cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, SHIFT=shift, PERIODIC=periodic' |
---|
248 | END |
---|
249 | 'L300': BEGIN |
---|
250 | mesmsk = 'meshmask.orca.2d.L300.nc' |
---|
251 | cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC=periodic' |
---|
252 | END |
---|
253 | ELSE: BEGIN |
---|
254 | print, ' **** vertical config unknown for ORCA2: ',v_config |
---|
255 | END |
---|
256 | ENDCASE |
---|
257 | END |
---|
258 | 'ORCA_R4': BEGIN |
---|
259 | mesmsk = 'meshmask_orca4.nc' |
---|
260 | cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC=periodic' |
---|
261 | END |
---|
262 | ENDCASE |
---|
263 | |
---|
264 | print, ' mask config '+orca_mask_version |
---|
265 | IF keyword_set(WHOLE_ARRAYS) THEN BEGIN |
---|
266 | print, ' [whole array]' |
---|
267 | ENDIF |
---|
268 | |
---|
269 | sm_file = hom_idl+'grids/'+mesmsk |
---|
270 | res = find(sm_file) |
---|
271 | |
---|
272 | IF res NE 'NOT FOUND' THEN BEGIN |
---|
273 | res_grid = execute(cmd_grid) |
---|
274 | ENDIF ELSE BEGIN |
---|
275 | stop, 'No meshmask file found for ORCA mesh config' |
---|
276 | ENDELSE |
---|
277 | |
---|
278 | ; reduce grid to zonal mean |
---|
279 | |
---|
280 | IF keyword_set(ZONAL) THEN BEGIN |
---|
281 | |
---|
282 | no_lon_shift = no_lon_shift + 1 |
---|
283 | |
---|
284 | jpi = 1 |
---|
285 | ixminmesh = 0 |
---|
286 | ixmaxmesh = 0 |
---|
287 | |
---|
288 | print, ' set ORCA grid to zonal mean ' |
---|
289 | |
---|
290 | diaznl_idx = 0 |
---|
291 | |
---|
292 | glamt = glamt[diaznl_idx, *] |
---|
293 | glamu = glamu[diaznl_idx, *] |
---|
294 | glamv = glamv[diaznl_idx, *] |
---|
295 | glamf = glamf[diaznl_idx, *] |
---|
296 | gphit = gphit[diaznl_idx, *] |
---|
297 | gphiu = gphiu[diaznl_idx, *] |
---|
298 | gphiv = gphiv[diaznl_idx, *] |
---|
299 | gphif = gphif[diaznl_idx, *] |
---|
300 | |
---|
301 | e1t = e1t[diaznl_idx, *] |
---|
302 | e2t = e2t[diaznl_idx, *] |
---|
303 | e1u = e1u[diaznl_idx, *] |
---|
304 | e2u = e2u[diaznl_idx, *] |
---|
305 | e1v = e1v[diaznl_idx, *] |
---|
306 | e2v = e2v[diaznl_idx, *] |
---|
307 | |
---|
308 | ; read offset |
---|
309 | |
---|
310 | key_offset = [0, 0, 0] |
---|
311 | |
---|
312 | key_shift = 0 |
---|
313 | |
---|
314 | ENDIF |
---|
315 | |
---|
316 | |
---|
317 | IF no_lon_shift EQ 0 THEN BEGIN |
---|
318 | CASE h_config OF |
---|
319 | 'ORCA05': BEGIN |
---|
320 | ; read offset |
---|
321 | |
---|
322 | key_offset = [2, 0, 0] |
---|
323 | ; |
---|
324 | ; indice i pour grille j moyenne zonale |
---|
325 | ; |
---|
326 | diaznl_idx = 100-1 |
---|
327 | |
---|
328 | END |
---|
329 | 'ORCA_R2': BEGIN |
---|
330 | ; read offset |
---|
331 | |
---|
332 | key_offset = [2, 0, 0] |
---|
333 | ; |
---|
334 | ; indice i pour grille j moyenne zonale |
---|
335 | ; |
---|
336 | diaznl_idx = 50-1 |
---|
337 | |
---|
338 | END |
---|
339 | 'ORCA_R4': BEGIN |
---|
340 | ; read offset |
---|
341 | |
---|
342 | key_offset = [2, 0, 0] |
---|
343 | ; |
---|
344 | ; indice i pour grille j moyenne zonale |
---|
345 | ; |
---|
346 | diaznl_idx = 25-1 |
---|
347 | |
---|
348 | END |
---|
349 | ENDCASE |
---|
350 | ENDIF |
---|
351 | |
---|
352 | varexp = varexpp |
---|
353 | |
---|
354 | IF keyword_set(NO_SHIFT) THEN BEGIN |
---|
355 | key_offset = [0, 0, 0] |
---|
356 | ENDIF |
---|
357 | |
---|
358 | print, ' key_shift =', key_shift |
---|
359 | IF debug_w THEN BEGIN |
---|
360 | print, ' vargrid, varexp at exit = ',vargrid, varexp |
---|
361 | ENDIF |
---|
362 | |
---|
363 | print, ' End of ORCA mesh config ' |
---|
364 | |
---|
365 | |
---|
366 | END |
---|