source: trunk/procs/meshes/mesh_orca.pro @ 205

Last change on this file since 205 was 205, checked in by pinsard, 14 years ago

homegenize THEN BEGIN ... ENDIF

  • Property svn:keywords set to Id
File size: 8.3 KB
Line 
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;-
38PRO 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
366END
Note: See TracBrowser for help on using the repository browser.