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

Last change on this file since 230 was 224, checked in by pinsard, 17 years ago

improvements/corrections of some *.pro headers

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