source: trunk/procs/meshes/mesh_um.pro @ 45

Last change on this file since 45 was 2, checked in by post_it, 17 years ago

Initial import from ~/POST_IT/

File size: 4.4 KB
Line 
1PRO mesh_um, isize, jsize, type, NO_SHIFT = no_shift, WHOLE_ARRAYS = whole_arrays, REVERSE_Y = reverse_y
2@common
3@com_eg
4;
5; init grid, sf, masks for regular grid (includes equator)
6;
7
8   jpi = isize
9   jpj = jsize
10   jpk = 1 ; value set in nc_read
11
12   jpiglo = jpi
13   jpjglo = jpj
14   jpkglo = jpk
15
16   ixminmesh  =0
17   ixmaxmesh  =jpi-1
18;
19   iyminmesh  =0
20   iymaxmesh  =jpj-1
21;
22   izminmesh  =0
23   izmaxmesh  =jpk-1
24
25   CASE isize OF
26      96: resolution = 'N96' ;;
27      288: resolution = 'N144' ;;
28      ELSE: print,  'UM resolution not defined'
29   ENDCASE 
30
31   IF resolution EQ 'N96' THEN BEGIN
32
33; 1.  Define longitudes
34
35      CASE type of
36         'T': BEGIN
37            glamt = 360.0*findgen(jpi)/float(jpi)
38            glamt = glamt#replicate(1, jpj)
39         END
40         'U': BEGIN
41            glamt = 360.0*findgen(jpi)/float(jpi)
42            delta = 0.5*(glamt(1)-glamt(0))
43            glamt = glamt + delta
44            glamt = glamt#replicate(1, jpj)
45         END
46      ENDCASE
47
48
49; 2.  Define latitudes
50
51      deltay = 2.5 ;;
52      CASE type of
53         'T': BEGIN
54            gphit = 90.0*findgen((jpj-1)/2)/float((jpj-1)/2)+deltay
55            gphitn = -gphit
56            gphit = [reverse(gphit), 0.0,  gphitn]
57            gphit = replicate(1, jpi)#gphit
58         END
59         'U': BEGIN
60            gphit = 90.0*findgen((jpj)/2)/float((jpj)/2)+deltay*.5
61            gphitn = -gphit
62            gphit = [reverse(gphit), gphitn]
63            gphit = replicate(1, jpi)#gphit
64         END
65      ENDCASE
66
67
68; 3 Define scale factors
69
70      zrad=6371229.0
71
72   ; Exact method: integration on a sphere
73
74      e1t = abs(2*!pi*zrad*cos(gphit*!pi/180.0)/jpi)
75     
76      ytop = (shift(gphit, 0, -1)+gphit)*0.5*!pi/180.0
77      ybot = (shift(gphit, 0, +1)+gphit)*0.5*!pi/180.0
78     
79      ytop(*, jpj-1) = !pi/2
80      ybot(*,     0) = -!pi/2
81     
82      e2t = zrad*(-ytop+ybot)
83
84; 4. Define mask
85
86; open mask file
87      tmask = lonarr(jpi, jpj)
88      IF NOT keyword_set(NOMASK) THEN BEGIN
89         nummsk = 12
90         s_file = hom_idl+'grids/mask_um_'+ $
91          strtrim(string(jpi), 2)+'x'+strtrim(string(jpj), 2)
92         openr, nummsk, s_file, /get_lun, /f77
93         readu, nummsk, tmask
94         tmask = reverse(1-tmask, 2)
95         close, nummsk
96         free_lun, nummsk
97      ENDIF ELSE tmask[*, *]= 1
98
99      IF keyword_set(REVERSE_Y) THEN BEGIN
100         glamt = reverse(glamt, 2)
101         gphit = reverse(gphit, 2)
102         tmask = reverse(tmask, 2)
103         e1t = reverse(e1t, 2)
104         e2t = reverse(e2t, 2)
105      ENDIF
106
107; 5. vertical grid (hPa)
108     
109      gdept = [1000]
110      gdepw = gdept
111     
112      e3t = 1
113
114; shift info
115
116      key_shift = 0
117     
118      key_offset = [0, 0, 0]
119   ENDIF   
120     
121   IF resolution EQ 'N144' THEN BEGIN
122
123     ;      read netcdf
124      CASE type OF
125         'T': BEGIN
126            s_file = hom_idl+'grids/grids_um_N144_nofrac.nc'
127            glamt = nc_get(s_file, 'umat.lon')
128            gphit = nc_get(s_file, 'umat.lat')
129            s_file = hom_idl+'grids/areas_um_N144_nofrac.nc'
130            e1t = nc_get(s_file, 'umat.srf')
131            e2t = e1t
132            e2t(*) = 1.
133            s_file = hom_idl+'grids/masks_um_N144_nofrac.nc'
134            tmask = nc_get(s_file, 'umat.msk')
135         END
136         'U': BEGIN
137            s_file = hom_idl+'grids/grids_um_N144_nofrac.nc'
138            glamt = nc_get(s_file, 'umau.lon')
139            gphit = nc_get(s_file, 'umau.lat')
140            s_file = hom_idl+'grids/areas_um_N144_nofrac.nc'
141            e1t = nc_get(s_file, 'umau.srf')
142            e2t = e1t
143            e2t(*) = 1.
144            s_file = hom_idl+'grids/masks_um_N144_nofrac.nc'
145            tmask = nc_get(s_file, 'umau.msk')
146         END
147      ENDCASE
148      IF NOT keyword_set(REVERSE_Y) THEN BEGIN
149         glamt = reverse(glamt, 2)
150         gphit = reverse(gphit, 2)
151         e1t = reverse(e1t, 2)
152         tmask = reverse(tmask, 2)
153      ENDIF
154
155; 5. vertical grid (hPa)
156     
157      gdept = [1000]
158      gdepw = gdept
159     
160      e3t = 1
161     
162      key_shift = 0
163     
164      key_offset = [0, 0, 0]
165     
166   ENDIF
167 
168; Shift re-init U,V,F
169
170   IF keyword_set(NO_SHIFT) THEN key_shift = 0
171
172   glamu = glamt
173   gphiu = gphit
174   e1u = e1t
175   e2u = e2t
176   umask = tmask
177   glamv = glamt
178   gphiv = gphit
179   e1v = e1t
180   e2v = e2t
181   vmask = tmask
182
183   glamf = glamt
184   gphif = gphit
185   e1f = e1t
186   e2f = e2t
187   fmask = tmask
188   
189   e3w = e3t
190   
191   key_periodique=1
192;
193; indice i pour grille j moyenne zonale
194;
195   diaznl_idx = 1
196
197  return
198END
199
Note: See TracBrowser for help on using the repository browser.