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

Last change on this file since 371 was 371, checked in by pinsard, 16 years ago

improvements of headers (alignments of IDL prompt in examples)

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