1 | ;+ |
---|
2 | ; |
---|
3 | ; @param DELTAX |
---|
4 | ; |
---|
5 | ; @param DELTAY |
---|
6 | ; |
---|
7 | ; @keyword INILON |
---|
8 | ; |
---|
9 | ; @keyword EQUATOR |
---|
10 | ; |
---|
11 | ; @keyword NOMASK |
---|
12 | ; |
---|
13 | ; @keyword MASK_FILE |
---|
14 | ; |
---|
15 | ; @keyword I_INDEX |
---|
16 | ; |
---|
17 | ; @keyword DELTA_I |
---|
18 | ; |
---|
19 | ; @keyword J_INDEX |
---|
20 | ; |
---|
21 | ; @keyword DELTA_J |
---|
22 | ; |
---|
23 | ; @keyword NO_SHIFT |
---|
24 | ; |
---|
25 | ; @keyword WHOLE_ARRAYS |
---|
26 | ; |
---|
27 | ; @keyword REVERSE_Y |
---|
28 | ; |
---|
29 | ; @keyword GLAMBOUNDARY |
---|
30 | ; |
---|
31 | ; @uses |
---|
32 | ; <pro>common</pro> |
---|
33 | ; <propost_it>com_eg</propost_it> |
---|
34 | ; |
---|
35 | ; @history |
---|
36 | ; - fplod 20100119T160644Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
37 | ; |
---|
38 | ; * check parameters |
---|
39 | ; |
---|
40 | ; @version |
---|
41 | ; $Id$ |
---|
42 | ; |
---|
43 | ;- |
---|
44 | PRO mesh_regular, deltax, deltay $ |
---|
45 | , INILON=inilon $ |
---|
46 | , EQUATOR=equator $ |
---|
47 | , NOMASK=nomask $ |
---|
48 | , MASK_FILE=mask_file $ |
---|
49 | , I_INDEX=i_index $ |
---|
50 | , DELTA_I=delta_i $ |
---|
51 | , J_INDEX=j_index $ |
---|
52 | , DELTA_J=delta_j $ |
---|
53 | , NO_SHIFT=no_shift $ |
---|
54 | , WHOLE_ARRAYS=whole_arrays $ |
---|
55 | , REVERSE_Y=reverse_y $ |
---|
56 | , GLAMBOUNDARY=glamboundary |
---|
57 | ; |
---|
58 | compile_opt idl2, strictarrsubs |
---|
59 | ; |
---|
60 | @common |
---|
61 | @com_eg |
---|
62 | ; |
---|
63 | usage='mesh_regular, deltax, deltay' $ |
---|
64 | + ', INILON=inilon' $ |
---|
65 | + ', EQUATOR=equator' $ |
---|
66 | + ', NOMASK=nomask' $ |
---|
67 | + ', MASK_FILE=mask_file' $ |
---|
68 | + ', I_INDEX=i_index' $ |
---|
69 | + ', DELTA_I=delta_i' $ |
---|
70 | + ', J_INDEX=j_index' $ |
---|
71 | + ', DELTA_J=delta_j' $ |
---|
72 | + ', NO_SHIFT=no_shift' $ |
---|
73 | + ', WHOLE_ARRAYS=whole_arrays' $ |
---|
74 | + ', REVERSE_Y=reverse_y' $ |
---|
75 | + ', GLAMBOUNDARY=glamboundary' |
---|
76 | ; |
---|
77 | nparam = N_PARAMS() |
---|
78 | IF (nparam LT 2) THEN BEGIN |
---|
79 | ras = report(['Incorrect number of arguments.' $ |
---|
80 | + '!C' $ |
---|
81 | + 'Usage : ' + usage]) |
---|
82 | stop |
---|
83 | ENDIF |
---|
84 | |
---|
85 | ; init grid, sf, masks for regular grid (includes equator) |
---|
86 | ; |
---|
87 | print,' Regular grid inits.',deltax, deltay |
---|
88 | |
---|
89 | jpi = floor(360./deltax) |
---|
90 | jpj = floor(180./deltay) |
---|
91 | IF keyword_set(EQUATOR) THEN BEGIN |
---|
92 | jpj = jpj + 1 |
---|
93 | ENDIF |
---|
94 | jpk = 1 |
---|
95 | |
---|
96 | ; initialisation of character variables used in the execution of computegrid |
---|
97 | shift_txt = '' |
---|
98 | periodic_txt = '' |
---|
99 | idx_txt = '' |
---|
100 | |
---|
101 | ; 1. Define longitudes |
---|
102 | |
---|
103 | IF NOT keyword_set(inilon) THEN BEGIN |
---|
104 | inilon = 0. |
---|
105 | ENDIF |
---|
106 | |
---|
107 | glamt = 360.0*findgen(jpi)/float(jpi)+inilon |
---|
108 | glamt = glamt#replicate(1, jpj) |
---|
109 | |
---|
110 | ; 2. Define latitudes |
---|
111 | |
---|
112 | IF keyword_set(EQUATOR) THEN BEGIN |
---|
113 | |
---|
114 | gphit = 90.0*findgen((jpj-1)/2)/float((jpj-1)/2)+deltay |
---|
115 | gphitn = reverse(-gphit) |
---|
116 | gphit = [gphitn, 0.0, gphit] |
---|
117 | |
---|
118 | END ELSE BEGIN |
---|
119 | |
---|
120 | gphit = 90.0*findgen(jpj/2)/float(jpj/2)+deltay/2. |
---|
121 | gphitn = reverse(gphit) |
---|
122 | gphit = [gphitn, -gphit] |
---|
123 | |
---|
124 | ENDELSE |
---|
125 | |
---|
126 | ; 3. define mask |
---|
127 | |
---|
128 | tmask = lonarr(jpi, jpj) |
---|
129 | IF NOT keyword_set(NOMASK) THEN BEGIN |
---|
130 | s_file = hom_idl+'grids/mask_'+mask_file+'.dat' |
---|
131 | print, ' Read mask from ',s_file |
---|
132 | restore, s_file |
---|
133 | ; nummsk = 12 |
---|
134 | ; s_file = hom_idl+'grids/mask_regular_'+ $ |
---|
135 | ; strtrim(string(jpi), 2)+'x'+strtrim(string(jpj), 2) |
---|
136 | ; openr, nummsk, s_file, /get_lun, /f77 |
---|
137 | ; readu, nummsk, tmask |
---|
138 | ; tmask = reverse(1-tmask, 2) |
---|
139 | ; close, nummsk |
---|
140 | ; free_lun, nummsk |
---|
141 | |
---|
142 | ENDIF ELSE BEGIN |
---|
143 | tmask[*, *]= 1 |
---|
144 | print, ' Warning, No mask read' |
---|
145 | ENDELSE |
---|
146 | |
---|
147 | ; 4. Reduce grid in longitude |
---|
148 | |
---|
149 | IF keyword_set(i_index) THEN BEGIN |
---|
150 | idx_txt = ',XMINMESH='+string(i_index)+',XMAXMESH='+string(i_index+delta_i-1) |
---|
151 | idx_txt = idx_txt+',XMINDTA='+string(i_index)+',XMAXDTA='+string(i_index+delta_i-1) |
---|
152 | ENDIF |
---|
153 | IF keyword_set(j_index) THEN BEGIN |
---|
154 | idx_txt = idx_txt+',YMINMESH='+string(j_index)+',YMAXMESH='+string(j_index+delta_j-1) |
---|
155 | idx_txt = idx_txt+',YMINDTA='+string(j_index)+',YMAXDTA='+string(j_index+delta_j-1) |
---|
156 | ENDIF |
---|
157 | |
---|
158 | IF keyword_set(REVERSE_Y) THEN BEGIN |
---|
159 | gphit = reverse(gphit) |
---|
160 | ENDIF |
---|
161 | gphit = replicate(1, jpi)#gphit |
---|
162 | |
---|
163 | masked_data = 0 |
---|
164 | mesh_type = 'atm' |
---|
165 | ; |
---|
166 | ; definition of key_shift |
---|
167 | ; |
---|
168 | IF keyword_set(NO_SHIFT) THEN BEGIN |
---|
169 | shift_txt = ', SHIFT = 0 ' |
---|
170 | ENDIF |
---|
171 | IF keyword_set(WHOLE_ARRAYS) THEN BEGIN |
---|
172 | shift_txt = ', SHIFT = 0 ' |
---|
173 | periodic_txt = ', PERIODIC = 0' |
---|
174 | ENDIF |
---|
175 | |
---|
176 | ; Use the computegrid routine |
---|
177 | cmd_grid = 'computegrid, XAXIS = glamt, YAXIS = gphit, MASK = tmask, GLAMBOUNDARY = glamboundary, /FULLCGRID'+shift_txt+periodic_txt+idx_txt |
---|
178 | IF debug_w THEN BEGIN |
---|
179 | print, cmd_grid |
---|
180 | ENDIF |
---|
181 | res = execute( cmd_grid ) |
---|
182 | |
---|
183 | print, ' key_shift =', key_shift |
---|
184 | |
---|
185 | |
---|
186 | key_offset = [0, 0, 0] |
---|
187 | ; |
---|
188 | ; indice i pour grille j moyenne zonale |
---|
189 | ; |
---|
190 | diaznl_idx = 1 |
---|
191 | |
---|
192 | END |
---|