source: trunk/ToBeReviewed/GRILLE/whichgrid.pro @ 25

Last change on this file since 25 was 13, checked in by pinsard, 18 years ago

upgrade of GRILLE/Utilities according to cerbere.lodyc.jussieu.fr: /usr/home/smasson/SAXO_RD/ : files

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 15.5 KB
Line 
1;*********************************************************************
2PRO readmesh, filename, filetype, _extra = ex
3;
4   case filetype of
5      'OPA C-Grid.Binary IEEE: Meshmask':BEGIN
6         meshread, filename, /pasblabla, _extra = ex
7      END
8      'OPA C-Grid.Net Cdf: Meshmask':BEGIN
9         ncdf_meshread, filename, _extra = ex
10      END
11      'Regular 2D.Binary IEEE: mask':
12      'Regular 2D.Net Cdf: mask':
13      'Regular 3D.Binary IEEE: mask+vertical axis':
14      'Regular 3D.Net Cdf: mask+vertical axis':
15      'Gaussian 2D.T30 truncature.Binary IEEE: mask':
16      'Gaussian 2D.T30 truncature.Net Cdf: mask':
17      'Gaussian 2D.T42 truncature.Binary IEEE: mask':
18      'Gaussian 2D.T42 truncature.Net Cdf: mask':
19      'Gaussian 3D.T30 truncature.Binary IEEE: mask':
20      'Gaussian 3D.T30 truncature.Net Cdf: mask':
21      'Gaussian 3D.T42 truncature.Binary IEEE: mask':
22      'Gaussian 3D.T42 truncature.Net Cdf: mask':
23      ELSE :
24   ENDCASE
25;
26   return
27end
28;*********************************************************************
29FUNCTION getgridparameter, top
30;---------------------------------------------------------
31@cm_4mesh
32  IF NOT keyword_set(key_forgetold) THEN BEGIN
33@updatenew
34  ENDIF
35;---------------------------------------------------------
36   widget_control, widget_info(top, find_by_uname = 'xmesh'), get_value = answer
37   jpiglo = long(answer[0])
38   jpi = long(answer[1])
39   ixminmesh = long(answer[2])
40   ixmaxmesh = long(answer[3])
41   widget_control, widget_info(top, find_by_uname = 'ymesh'), get_value = answer
42   jpjglo = long(answer[0])
43   jpj = long(answer[1])
44   iyminmesh = long(answer[2])
45   iymaxmesh = long(answer[3])
46   widget_control, widget_info(top, find_by_uname = 'zmesh'), get_value = answer
47   jpkglo = long(answer[0])
48   jpk = long(answer[1])
49   izminmesh = long(answer[2])
50   izmaxmesh = long(answer[3])
51   widget_control, widget_info(top, find_by_uname = 'key_shift') $
52    , get_value = answer
53   key_shift = long(answer[0])
54   widget_control, widget_info(top, find_by_uname = 'key_periodic') $
55    , get_value = answer
56   key_periodic = long(answer[0])
57   widget_control, widget_info(top, find_by_uname = 'triangulation') $
58    , get_value = answer
59   triangulation = answer[0] EQ 'y'
60   widget_control, widget_info(top, find_by_uname = 'Glam Boundary') $
61    , get_value = answer
62   rien = execute('boundary = float('+answer[0]+')')
63   res = {jpiglo:jpiglo, jpjglo:jpjglo, jpkglo:jpkglo, jpi:jpi, jpj:jpj, jpk:jpk $
64          , ixminmesh:ixminmesh, ixmaxmesh:ixmaxmesh $
65          , iyminmesh:iyminmesh, iymaxmesh:iymaxmesh $
66          , izminmesh:izminmesh, izmaxmesh:izmaxmesh $
67          , key_shift:key_shift, key_periodic:key_periodic $
68          , triangulation:triangulation, boundary:boundary}
69
70   @updateold
71
72   return, res
73end
74;*********************************************************************
75pro showgridparameter, basetop, EDITABLE = editable, _EXTRA = ex
76;---------------------------------------------------------
77@cm_4mesh
78  IF NOT keyword_set(key_forgetold) THEN BEGIN
79@updatenew
80  ENDIF
81;---------------------------------------------------------
82   widget_control, basetop, update = 0
83   base=widget_base(basetop, /COLUMN, /align_center, _EXTRA = ex)
84   nothing = cw_fourparameter(base, jpiglo, jpi, ixminmesh, ixmaxmesh, 'x', 'mesh', EDITABLE = editable, CLEAR = editable, uname = 'xmesh')
85   nothing = cw_fourparameter(base, jpjglo, jpj, iyminmesh, iymaxmesh, 'y', 'mesh', EDITABLE = editable, CLEAR = editable, uname = 'ymesh')
86   nothing = cw_fourparameter(base, jpkglo, jpk, izminmesh, izmaxmesh, 'z', 'mesh', EDITABLE = editable, CLEAR = editable, uname = 'zmesh')
87   nothing = widget_label(base, value = 'autres parametres ...')
88   basea=widget_base(base, /row, /align_center)
89   nothing = widget_label(basea, value = 'key_shift')
90   if NOT keyword_set(key_shift) then key_shift = 0
91   nothing = widget_text(basea, value = strtrim(key_shift*(1-keyword_set(editable)),1), uname = 'key_shift', xsize = 4, EDITABLE = editable)
92   nothing = widget_label(basea, value = 'key_periodic')
93   if NOT keyword_set(key_periodic) then key_periodic = 0
94   nothing = widget_text(basea, value = strtrim(key_periodic*(1-keyword_set(editable)),1), uname = 'key_periodic', xsize = 4, EDITABLE = editable)
95   baseb=widget_base(base, /row, /align_center)
96   nothing = widget_label(baseb, value = 'use a triangulation (y/n) ?')
97   nothing = widget_text(baseb, value = 'y', uname = 'triangulation', xsize = 4, EDITABLE = editable)
98   if NOT keyword_set(editable) then begin
99      ming = min(glamt, max = maxg)
100      value = tostr([floor(ming), ceil(maxg)])
101   ENDIF ELSE value = tostr([0, 0])
102   nothing = widget_label(baseb, value = 'Glam Boundary')
103   nothing = widget_text(baseb, value = value, uname = 'Glam Boundary', xsize = 10, EDITABLE = editable)
104   nothing = widget_button(base, value = 'Ok, Get the Mesh parameters!', uvalue = {name:'ok finish'})
105   widget_control, basetop, update = 1
106;
107   return
108END
109;*********************************************************************
110FUNCTION give_file_type_choice, type = type
111   if keyword_set(type) then begin
112      case type of
113         'nc':desc = [ '1\File or Grid type: ' , $
114            '0\OPA C-Grid.Net Cdf: Meshmask' , $
115            '0\Regular 2D.Net Cdf: mask' , $
116            '0\Regular 3D.Net Cdf: mask+vertical axis' , $
117            '1\Gaussian 2D' , $
118            '0\T30 truncature.Net Cdf: mask' , $
119            '2\T42 truncature.Net Cdf: mask' , $
120            '1\Gaussian 3D' , $
121            '0\T30 truncature.Net Cdf: mask+vertical axis' , $
122            '2\T42 truncature.Net Cdf: mask+vertical axis' , $
123            '2\No file' ]
124      endcase
125   ENDIF ELSE BEGIN
126         desc = [ '1\File or Grid type: ' , $
127            '0\OPA C-Grid.Binary IEEE: Meshmask' , $
128            '0\Regular 2D.Binary IEEE: mask' , $
129            '0\Regular 3D.Binary IEEE: mask+vertical axis' , $
130            '1\Gaussian 2D' , $
131            '0\T30 truncature.Binary IEEE: mask' , $
132            '2\T42 truncature.Binary IEEE: mask' , $
133            '1\Gaussian 3D' , $
134            '0\T30 truncature.Binary IEEE: mask+vertical axis' , $
135            '2\T42 truncature.Binary IEEE: mask+vertical axis' , $
136            '2\No file' ]
137;    desc = [ '1\File or Grid type: ' , $
138;             '1\OPA C-Grid' , $
139;             '0\Binary IEEE: Meshmask' , $
140;             '2\Net Cdf: Meshmask' , $
141;             '1\Regular 2D' , $
142;             '0\Binary IEEE: mask' , $
143;             '2\Net Cdf: mask' , $
144;             '1\Regular 3D' , $
145;             '0\Binary IEEE: mask+vertical axis' , $
146;             '2\Net Cdf: mask+vertical axis' , $
147;             '1\Gaussian 2D' , $
148;             '1\T30 truncature' , $
149;             '0\Binary IEEE: mask' , $
150;             '2\Net Cdf: mask' , $
151;             '1\T42 truncature' , $
152;             '0\Binary IEEE: mask' , $
153;             '2\Net Cdf: mask' , $
154;             '2\' , $
155;             '1\Gaussian 3D' , $
156;             '1\T30 truncature' , $
157;             '0\Binary IEEE: mask+vertical axis' , $
158;             '2\Net Cdf: mask+vertical axis' , $
159;             '1\T42 truncature' , $
160;             '0\Binary IEEE: mask+vertical axis' , $
161;             '2\Net Cdf: mask+vertical axis' , $
162;             '2\' , $
163;             '2\No file' ]
164ENDELSE
165   return, desc
166end
167;*********************************************************************
168PRO whichgrid_event, event
169;---------------------------------------------------------
170@cm_4mesh
171  IF NOT keyword_set(key_forgetold) THEN BEGIN
172@updatenew
173  ENDIF
174;---------------------------------------------------------
175   widget_control, event.id,  get_uvalue = eventuvalue
176   IF chkstru(eventuvalue,'name') EQ 0 THEN return
177   case eventuvalue.name OF
178      'Cancel':BEGIN
179         widget_control, event.handler, get_uvalue = messenger
180         *messenger = -1
181         widget_control,event.handler,/destroy
182      END
183      'filename':BEGIN
184; on detruit, si il existe deja, ce que l''on va ajouter au widget
185         typebaseid = widget_info(event.handler, find_by_uname = 'typebase')
186         if typebaseid NE 0 then widget_control,typebaseid,/destroy
187         showgridparameterid = widget_info(event.handler, find_by_uname = 'showgridparameter')
188         if showgridparameterid NE 0 then widget_control,showgridparameterid,/destroy
189;
190         widget_control, event.id, get_value = filename
191         filename = filename[0]
192         filename = isafile(filename = filename)
193         if size(filename, /type) NE 7 then return
194         if rstrpos(filename, '.pro') EQ strlen(filename)-4 then begin
195            createpro, '@'+strmid(filename, 0, strlen(filename)-4) $
196          , filename = myuniquetmpdir +'for_createpro.pro'
197            showgridparameter, event.handler, group_leader = event.handler,/frame, uname = 'showgridparameter'
198         ENDIF ELSE BEGIN
199            basetype=widget_base(event.handler, /row, /align_center, group_leader = event.handler, uname = 'typebase')
200            type = ''
201            if rstrpos(filename, '.nc') EQ strlen(filename)-3 then type = 'nc'
202            nothing = cw_pdmenu(basetype, give_file_type_choice(type = type), /return_full_name, uname = 'file type choice', uvalue = {name:'file type choice'})
203            nothing = widget_text(basetype, value = '', uname = 'file type', uvalue = {name:'file type'})
204         ENDELSE
205      END
206      'browse filename':BEGIN
207; on detruit, si il existe deja, ce que l''on va ajouter au widget
208         typebaseid = widget_info(event.handler, find_by_uname = 'typebase')
209         if typebaseid NE 0 then widget_control,typebaseid,/destroy
210         showgridparameterid = widget_info(event.handler, find_by_uname = 'showgridparameter')
211         if showgridparameterid NE 0 then widget_control,showgridparameterid,/destroy
212;
213         filename = isafile()
214         if size(filename, /type) NE 7 then return
215         widget_control, widget_info(event.handler, find_by_uname = 'Filename'), set_value = filename
216         if rstrpos(filename, '.pro') EQ strlen(filename)-4 then begin
217            createpro, '@'+strmid(filename, 0, strlen(filename)-4) $
218          , filename = myuniquetmpdir +'for_createpro.pro'
219            showgridparameter, event.handler, group_leader = event.handler,/frame, uname = 'showgridparameter'
220         ENDIF ELSE BEGIN
221            basetype=widget_base(event.handler, /row, /align_center, group_leader = event.handler, uname = 'typebase')
222            type = ''
223            if rstrpos(filename, '.nc') EQ strlen(filename)-3 then type = 'nc'
224            nothing = cw_pdmenu(basetype, give_file_type_choice(type = type), /return_full_name, uname = 'file type choice', uvalue = {name:'file type choice'})
225            nothing = widget_text(basetype, value = '', uname = 'file type', uvalue = {name:'file type'})
226         ENDELSE
227      END
228      'file type choice':BEGIN
229         widget_control, widget_info(event.handler,find_by_uname='Filename'), get_value = filename
230         filename = filename[0]
231         filetype = event.value
232         filetype = strmid(filetype, strpos(filetype, '.')+1)
233         widget_control, widget_info(event.handler, find_by_uname = 'file type'), set_value = filetype
234         case filetype of
235            'OPA C-Grid.Binary IEEE: Meshmask':BEGIN
236               meshread, filename, /pasblabla, /getdimensions
237               showgridparameter, event.handler, /editable, group_leader = event.handler,/frame, uname = 'showgridparameter'
238            END
239            'OPA C-Grid.Net Cdf: Meshmask':BEGIN
240               ncdf_meshread, filename, /getdimensions
241               showgridparameter, event.handler, /editable, group_leader = event.handler,/frame, uname = 'showgridparameter'
242            END
243            'Regular 2D.Binary IEEE: mask':
244            'Regular 2D.Net Cdf: mask':
245            'Regular 3D.Binary IEEE: mask+vertical axis':
246            'Regular 3D.Net Cdf: mask+vertical axis':
247            'Gaussian 2D.T30 truncature.Binary IEEE: mask':
248            'Gaussian 2D.T30 truncature.Net Cdf: mask':
249            'Gaussian 2D.T42 truncature.Binary IEEE: mask':
250            'Gaussian 2D.T42 truncature.Net Cdf: mask':
251            'Gaussian 3D.T30 truncature.Binary IEEE: mask':
252            'Gaussian 3D.T30 truncature.Net Cdf: mask':
253            'Gaussian 3D.T42 truncature.Binary IEEE: mask':
254            'Gaussian 3D.T42 truncature.Net Cdf: mask':
255            ELSE :
256         endcase
257
258      END
259      'file type':BEGIN
260         help, event, /struct
261      END
262      'ok finish':BEGIN
263         widget_control, widget_info(event.handler,find_by_uname='Filename'),get_value=filename
264         filename = filename[0]
265         typeid = widget_info(event.handler,find_by_uname='file type')
266         if typeid NE 0 then begin
267            widget_control, typeid, get_value=filetype
268            filetype = filetype[0]
269         ENDIF ELSE filetype = 'batch file'
270         widget_control, event.handler, get_uvalue = messenger
271         *messenger = create_struct('filename', filename, 'filetype', filetype, getgridparameter(event.handler))
272;
273         readmesh, filename, filetype[0], glamboundary = (*messenger).boundary
274;
275         widget_control,event.handler,/destroy
276      END     
277      ELSE:
278   endcase
279   return
280END
281;*********************************************************************
282FUNCTION whichgrid, name, PARENT = parent, _EXTRA = ex
283;---------------------------------------------------------
284@cm_4mesh
285  IF NOT keyword_set(key_forgetold) THEN BEGIN
286@updatenew
287  ENDIF
288;---------------------------------------------------------
289;
290   if n_elements(name) NE 0 then begin
291      filename = isafile(filename = name, IODIRECTORY = iodir, _extra = ex)
292      if size(filename, /type) NE 7 then return, -1
293   ENDIF ELSE filaname = 'no file'
294;
295; pour recuperer les reponses possees lors de l''utilisation de ce
296; widget on cree un pointeur que l''on place dans la uvalue. Comme ca
297; une fois que le widget est detruit dans la procedure ...event.pro,
298; la variable surlaquelle pointait le pointeur (contenue ds la uvalue
299; du widget) n''est pas detruite est on peut recuperer le resultat!
300;
301   messenger = ptr_new(/allocate_heap)
302;
303   if keyword_set(parent) then BEGIN
304   base=widget_base(parent, /COLUMN, title = 'whichgrid', /align_center, uvalue = messenger, _EXTRA = ex)
305   ENDIF ELSE BEGIN
306      base=widget_base(/COLUMN, title = 'whichgrid', /align_center, uvalue = messenger, _EXTRA = ex)
307      nothing = widget_button(base, value = 'Cancel', uvalue = {name:'Cancel'})
308   ENDELSE
309;
310   basemane=widget_base(base, /row, /align_center)
311   nothing = widget_label(basemane, value = 'Mesh Filename or IDL batch file')
312   nothing = widget_text(basemane, value = filename, uname = 'Filename', uvalue = {name:'filename'}, /editable)
313   nothing = widget_button(basemane, value = 'Browse', uvalue = {name:'browse filename'})
314;
315   if filename NE 'no file' then begin
316      if rstrpos(filename, '.pro') EQ strlen(filename)-4 then begin
317         createpro, '@'+strmid(filename, 0, strlen(filename)-4) $
318          , filename = myuniquetmpdir +'for_createpro.pro'
319         showgridparameter, base, group_leader = base,/frame, uname = 'showgridparameter'
320      ENDIF ELSE BEGIN
321         basetype=widget_base(base, /row, /align_center, group_leader = base, uname = 'typebase')
322         type = ''
323         if rstrpos(filename, '.nc') EQ strlen(filename)-3 then type = 'nc'
324         nothing = cw_pdmenu(basetype, give_file_type_choice(type = type), /return_full_name, uname = 'file type choice', uvalue = {name:'file type choice'})
325         nothing = widget_text(basetype, value = '', uname = 'file type', uvalue = {name:'file type'})
326      ENDELSE
327
328   endif
329;
330   widget_control,base,/realize
331   xmanager,'whichgrid', base,event_handler = 'whichgrid_event', no_block = 0
332   res = *messenger
333   ptr_free, messenger
334
335
336   return, res
337end
Note: See TracBrowser for help on using the repository browser.