source: trunk/SRC/Utilities/fitintobox.pro @ 157

Last change on this file since 157 was 157, checked in by navarro, 18 years ago

header improvements + xxx doc

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 12.4 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5;
6; @file_comments
7; Check that the input array has size and dimensions
8; compatible with the domain that was defined with the previous call
9; of domdef.
10;
11; @categories
12; Compatibility
13;
14; @param sz {in}{required}
15;
16; @param nx {in}{required}
17;
18; @param ny {in}{required}
19;
20; @param nz {in}{required}
21;
22; @param jpi {in}{required}
23;
24; @param jpj {in}{required}
25;
26; @param jpk {in}{required}
27;
28; @param jpt {in}{required}
29;
30; @returns -1
31;
32; @history Sebastien Masson (smasson\@lodyc.jussieu.fr)
33;          10 juin 2000.
34;          June 2005: S. Masson rewrite all.
35;
36; @version $Id$
37;
38; @hidden
39;
40;-
41;------------------------------------------------------------
42;------------------------------------------------------------
43;------------------------------------------------------------
44FUNCTION err_mess, sz, jpi, nx, jpj, ny, jpk, nz, jpt
45;
46  compile_opt idl2, strictarrsubs
47;
48  IF n_elements(sz EQ 1) THEN $
49    RETURN, report(['Error: ' $
50                  , 'the vector size (' + tostr(sz) + ') is incompatible' $
51                  , 'with the the domain dimensions ' $
52                  , '[jpi/nx, jpj/ny, jpk/nz, jpt] = [' $
53                  + strtrim(jpi, 1) + '/' + strtrim(nx, 1) $
54                  + ', ' + strtrim(jpj, 1) + '/' + strtrim(ny, 1) $
55                  + ', ' + strtrim(jpk, 1) + '/' + strtrim(nz, 1) $
56                  + ', ' + strtrim(jpt, 1) + ']'], /simple)
57  RETURN, report(['Error: ' $
58                  , 'the array dimensions ' + tostr(sz) + ' are incompatible' $
59                  , 'with the the domain dimensions ' $               
60                  , '[jpi/nx, jpj/ny, jpk/nz, jpt] = [' $
61                  + strtrim(jpi, 1) + '/' + strtrim(nx, 1) $
62                  + ', ' + strtrim(jpj, 1) + '/' + strtrim(ny, 1) $
63                  + ', ' + strtrim(jpk, 1) + '/' + strtrim(nz, 1) $
64                  + ', ' + strtrim(jpt, 1) + ']'], /simple)
65END
66;
67;+
68;
69; @categories
70; Compatibility
71;
72; @param field {in}{required} an array or a structure that can be read by the function               
73;     litchamp.pro
74;
75; @param nx {in}{optional}{default=define by grille.pro}
76;
77; @param ny {in}{optional}{default=define by grille.pro}
78;
79; @param nz {in}{optional}{default=define by grille.pro}
80;
81; @param firstx {in}{optional}{default=define by grille.pro}
82;
83; @param firsty {in}{optional}{default=define by grille.pro}
84;
85; @param firstz {in}{optional}{default=define by grille.pro}
86;
87; @param lastx {in}{optional}{default=define by grille.pro}
88;
89; @param lasty {in}{optional}{default=define by grille.pro}
90;
91; @param lastz {in}{optional}{default=define by grille.pro}
92;
93; @keyword WDEPTH
94; To specify that we are at W level
95;
96; @returns
97; an array with dimensions matching the domain
98; or -1 if there is an error...
99;
100; @uses cm_4mesh
101; @uses cm_4cal
102;
103; @examples
104; IDL> help, fitintobox(findgen(jpi,jpj))
105; <Expression>    FLOAT     = Array[41, 3]
106; IDL> help, fitintobox(findgen(jpi,jpj,78))
107; Error:
108; the array dimensions [180,148,78] are incompatible
109; with the the domain dimensions
110; [jpi/nx, jpj/ny, jpk/nz, jpt] = [180/41, 148/3, 31/31, 1]
111; <Expression>    INT       =       -1
112;
113; @history Sebastien Masson (smasson\@lodyc.jussieu.fr)
114;          10 juin 2000.
115;          June 2005: S. Masson rewrite all.
116;
117; @version $Id$
118;-
119;------------------------------------------------------------
120FUNCTION fitintobox, field, nx, ny, nz, firstx, firsty $
121                     , firstz, lastx, lasty, lastz, WDEPTH = wdepth
122;------------------------------------------------------------
123; include commons
124;
125  compile_opt idl2, strictarrsubs
126;
127@cm_4mesh
128@cm_4cal
129  IF NOT keyword_set(key_forgetold) THEN BEGIN
130@updatenew
131  ENDIF
132;---------------------
133  arr = litchamp(field)
134  IF n_params() EQ 1 THEN grille, -1, -1, -1, -1, nx, ny, nz $
135    , firstx, firsty, firstz, lastx, lasty, lastz, WDEPTH = wdepth
136;--------------------------------------------------------------
137;--------------------------------------------------------------
138; case according the number of dimensions of the array
139;--------------------------------------------------------------
140;--------------------------------------------------------------
141  sz = size(arr)
142  case sz[0] of
143;--------------------------------------------------------------
144    0:BEGIN                     ; scalar
145;--------------------------------------------------------------
146      return, report('Error: scalar value = ' + strtrim(arr, 1), /simple)
147    END
148;--------------------------------------------------------------
149    1:BEGIN                     ; 1D arrays
150;--------------------------------------------------------------
151      CASE 1 OF
152; x arrays
153        sz[1] EQ jpi                                                   :arr = (temporary(arr))[firstx:lastx                               ]
154        sz[1] EQ  nx                                                   :                                                     
155; y arrays
156        sz[1] EQ jpj                                                   :arr = (temporary(arr))[              firsty:lasty                 ]
157        sz[1] EQ  ny                                                   :                                                     
158; z arrays
159        sz[1] EQ jpk                                                   :arr = (temporary(arr))[                            firstz:lastz   ]
160        sz[1] EQ  nz                                                   :                                                     
161; t arrays
162        sz[1] EQ jpt                                                   :
163        ELSE:return, err_mess(sz[1], jpi, nx, jpj, ny, jpk, nz, jpt)
164      ENDCASE
165    END
166;--------------------------------------------------------------
167    2:BEGIN                     ; 2D arrays
168;--------------------------------------------------------------
169      CASE 1 OF
170; xy arrays
171        sz[1] EQ jpi AND sz[2] EQ jpj                                  :arr = (temporary(arr))[firstx:lastx, firsty:lasty                 ]
172        sz[1] EQ jpi AND sz[2] EQ  ny                                  :arr = (temporary(arr))[firstx:lastx,            *                 ]
173        sz[1] EQ  nx AND sz[2] EQ jpj                                  :arr = (temporary(arr))[           *, firsty:lasty                 ]
174        sz[1] EQ  nx AND sz[2] EQ  ny                                  :arr = (temporary(arr))[           *,            *                 ]
175; x(y)z arrays
176        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ jpk                 :arr = (temporary(arr))[firstx:lastx, firstz:lastz   ]
177        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ  nz                 :arr = (temporary(arr))[firstx:lastx,            *   ]
178        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ jpk                 :arr = (temporary(arr))[           *, firstz:lastz   ]
179        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ  nz                 :
180; (x)yz arrays
181        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ jpk                 :arr = (temporary(arr))[              firsty:lasty, firstz:lastz   ]
182        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ  nz                 :arr = (temporary(arr))[              firsty:lasty,            *   ]
183        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ jpk                 :arr = (temporary(arr))[                         *, firstz:lastz   ]
184        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ  nz                 :
185; xt arrays
186        sz[1] EQ jpi                                   AND sz[2] EQ jpt:arr = (temporary(arr))[firstx:lastx                            , *]
187        sz[1] EQ  nx                                   AND sz[2] EQ jpt:
188; yt arrays
189                         sz[1] EQ jpj                  AND sz[2] EQ jpt:arr = (temporary(arr))[              firsty:lasty              , *]
190                         sz[1] EQ  ny                  AND sz[2] EQ jpt:
191; zt arrays
192                                          sz[1] EQ jpk AND sz[2] EQ jpt:arr = (temporary(arr))[                            firstz:lastz, *]
193                                          sz[1] EQ  nz AND sz[2] EQ jpt:
194        ELSE:return, err_mess(sz[1:2], jpi, nx, jpj, ny, jpk, nz, jpt)
195      ENDCASE
196    END
197;--------------------------------------------------------------
198    3:BEGIN                     ; 3D arrays
199;--------------------------------------------------------------
200      CASE 1 OF
201; xyz arrays
202        sz[1] EQ jpi AND sz[2] EQ jpj AND sz[3] EQ jpk                 :arr = (temporary(arr))[firstx:lastx, firsty:lasty, firstz:lastz   ]
203        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ jpk                 :arr = (temporary(arr))[firstx:lastx,            *, firstz:lastz   ]
204        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ jpk                 :arr = (temporary(arr))[           *, firsty:lasty, firstz:lastz   ]
205        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ jpk                 :arr = (temporary(arr))[           *,            *, firstz:lastz   ]
206        sz[1] EQ jpi AND sz[2] EQ jpj AND sz[3] EQ  nz                 :arr = (temporary(arr))[firstx:lastx, firsty:lasty,            *   ]
207        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ  nz                 :arr = (temporary(arr))[firstx:lastx,            *,            *   ]
208        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ  nz                 :arr = (temporary(arr))[           *, firsty:lasty,            *   ]
209        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ  nz                 :
210; xyt arrays
211        sz[1] EQ jpi AND sz[2] EQ jpj                  AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx, firsty:lasty,               *]
212        sz[1] EQ jpi AND sz[2] EQ  ny                  AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx,            *,               *]
213        sz[1] EQ  nx AND sz[2] EQ jpj                  AND sz[3] EQ jpt:arr = (temporary(arr))[           *, firsty:lasty,               *]
214        sz[1] EQ  nx AND sz[2] EQ  ny                  AND sz[3] EQ jpt:
215; (x)yzt arrays
216        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ jpk AND sz[3] EQ jpt:arr = (temporary(arr))[              firsty:lasty, firstz:lastz, *]
217        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ  nz AND sz[3] EQ jpt:arr = (temporary(arr))[              firsty:lasty,            *, *]
218        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ jpk AND sz[3] EQ jpt:arr = (temporary(arr))[                         *, firstz:lastz, *]
219        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ  nz AND sz[3] EQ jpt:
220; x(y)zt arrays
221        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ jpk AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx,               firstz:lastz, *]
222        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ  nz AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx,                          *, *]
223        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ jpk AND sz[3] EQ jpt:arr = (temporary(arr))[           *,               firstz:lastz, *]
224        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ  nz AND sz[3] EQ jpt:
225        ELSE:return, err_mess(sz[1:3], jpi, nx, jpj, ny, jpk, nz, jpt)
226      ENDCASE
227    END
228;--------------------------------------------------------------
229    4:BEGIN                     ; 4D arrays
230;--------------------------------------------------------------
231      CASE 1 OF
232; xyzt arrays
233        sz[1] EQ jpi AND sz[2] EQ jpj AND sz[3] EQ jpk AND sz[4] EQ jpt:arr = (temporary(arr))[firstx:lastx, firsty:lasty, firstz:lastz, *]
234        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ jpk AND sz[4] EQ jpt:arr = (temporary(arr))[firstx:lastx,            *, firstz:lastz, *]
235        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ jpk AND sz[4] EQ jpt:arr = (temporary(arr))[           *, firsty:lasty, firstz:lastz, *]
236        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ jpk AND sz[4] EQ jpt:arr = (temporary(arr))[           *,            *, firstz:lastz, *]
237        sz[1] EQ jpi AND sz[2] EQ jpj AND sz[3] EQ  nz AND sz[4] EQ jpt:arr = (temporary(arr))[firstx:lastx, firsty:lasty,            *, *]
238        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ  nz AND sz[4] EQ jpt:arr = (temporary(arr))[firstx:lastx,            *,            *, *]
239        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ  nz AND sz[4] EQ jpt:arr = (temporary(arr))[           *, firsty:lasty,            *, *]
240        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ  nz AND sz[4] EQ jpt:
241        ELSE:return, err_mess(sz[1:4], jpi, nx, jpj, ny, jpk, nz, jpt)
242      ENDCASE
243    END
244    ELSE:return, report('Error: fitintobox is managing arrays with a maximum of 4 dimensions', /simple)
245  ENDCASE
246
247  return, arr
248end
Note: See TracBrowser for help on using the repository browser.