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

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

change *.pro file properties (del eof-style, del executable, set keywords Id

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