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

Last change on this file since 153 was 136, checked in by pinsard, 18 years ago

some improvements and corrections in some .pro file according to
aspell and idldoc log file

  • 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 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
92; To specify that we are at W level
93;
94; @returns
95; an array with dimensions matching the domain
96; or -1 if there is an error...
97;
98; @uses cm_4mesh
99; @uses cm_4cal
100;
101; @examples
102; IDL> help, fitintobox(findgen(jpi,jpj))
103; <Expression>    FLOAT     = Array[41, 3]
104; IDL> help, fitintobox(findgen(jpi,jpj,78))
105; Error:
106; the array dimensions [180,148,78] are incompatible
107; with the the domain dimensions
108; [jpi/nx, jpj/ny, jpk/nz, jpt] = [180/41, 148/3, 31/31, 1]
109; <Expression>    INT       =       -1
110;
111; @history Sebastien Masson (smasson@lodyc.jussieu.fr)
112;          10 juin 2000.
113;          June 2005: S. Masson rewrite all.
114;
115; @version $Id$
116;-
117;------------------------------------------------------------
118FUNCTION fitintobox, field, nx, ny, nz, firstx, firsty $
119                     , firstz, lastx, lasty, lastz, WDEPTH = wdepth
120;------------------------------------------------------------
121; include commons
122;
123  compile_opt idl2, strictarrsubs
124;
125@cm_4mesh
126@cm_4cal
127  IF NOT keyword_set(key_forgetold) THEN BEGIN
128@updatenew
129  ENDIF
130;---------------------
131  arr = litchamp(field)
132  IF n_params() EQ 1 THEN grille, -1, -1, -1, -1, nx, ny, nz $
133    , firstx, firsty, firstz, lastx, lasty, lastz, WDEPTH = wdepth
134;--------------------------------------------------------------
135;--------------------------------------------------------------
136; case according the number of dimensions of the array
137;--------------------------------------------------------------
138;--------------------------------------------------------------
139  sz = size(arr)
140  case sz[0] of
141;--------------------------------------------------------------
142    0:BEGIN                     ; scalar
143;--------------------------------------------------------------
144      return, report('Error: scalar value = ' + strtrim(arr, 1), /simple)
145    END
146;--------------------------------------------------------------
147    1:BEGIN                     ; 1D arrays
148;--------------------------------------------------------------
149      CASE 1 OF
150; x arrays
151        sz[1] EQ jpi                                                   :arr = (temporary(arr))[firstx:lastx                               ]
152        sz[1] EQ  nx                                                   :                                                     
153; y arrays
154        sz[1] EQ jpj                                                   :arr = (temporary(arr))[              firsty:lasty                 ]
155        sz[1] EQ  ny                                                   :                                                     
156; z arrays
157        sz[1] EQ jpk                                                   :arr = (temporary(arr))[                            firstz:lastz   ]
158        sz[1] EQ  nz                                                   :                                                     
159; t arrays
160        sz[1] EQ jpt                                                   :
161        ELSE:return, err_mess(sz[1], jpi, nx, jpj, ny, jpk, nz, jpt)
162      ENDCASE
163    END
164;--------------------------------------------------------------
165    2:BEGIN                     ; 2D arrays
166;--------------------------------------------------------------
167      CASE 1 OF
168; xy arrays
169        sz[1] EQ jpi AND sz[2] EQ jpj                                  :arr = (temporary(arr))[firstx:lastx, firsty:lasty                 ]
170        sz[1] EQ jpi AND sz[2] EQ  ny                                  :arr = (temporary(arr))[firstx:lastx,            *                 ]
171        sz[1] EQ  nx AND sz[2] EQ jpj                                  :arr = (temporary(arr))[           *, firsty:lasty                 ]
172        sz[1] EQ  nx AND sz[2] EQ  ny                                  :arr = (temporary(arr))[           *,            *                 ]
173; x(y)z arrays
174        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ jpk                 :arr = (temporary(arr))[firstx:lastx, firstz:lastz   ]
175        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ  nz                 :arr = (temporary(arr))[firstx:lastx,            *   ]
176        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ jpk                 :arr = (temporary(arr))[           *, firstz:lastz   ]
177        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ  nz                 :
178; (x)yz arrays
179        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ jpk                 :arr = (temporary(arr))[              firsty:lasty, firstz:lastz   ]
180        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ  nz                 :arr = (temporary(arr))[              firsty:lasty,            *   ]
181        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ jpk                 :arr = (temporary(arr))[                         *, firstz:lastz   ]
182        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ  nz                 :
183; xt arrays
184        sz[1] EQ jpi                                   AND sz[2] EQ jpt:arr = (temporary(arr))[firstx:lastx                            , *]
185        sz[1] EQ  nx                                   AND sz[2] EQ jpt:
186; yt arrays
187                         sz[1] EQ jpj                  AND sz[2] EQ jpt:arr = (temporary(arr))[              firsty:lasty              , *]
188                         sz[1] EQ  ny                  AND sz[2] EQ jpt:
189; zt arrays
190                                          sz[1] EQ jpk AND sz[2] EQ jpt:arr = (temporary(arr))[                            firstz:lastz, *]
191                                          sz[1] EQ  nz AND sz[2] EQ jpt:
192        ELSE:return, err_mess(sz[1:2], jpi, nx, jpj, ny, jpk, nz, jpt)
193      ENDCASE
194    END
195;--------------------------------------------------------------
196    3:BEGIN                     ; 3D arrays
197;--------------------------------------------------------------
198      CASE 1 OF
199; xyz arrays
200        sz[1] EQ jpi AND sz[2] EQ jpj AND sz[3] EQ jpk                 :arr = (temporary(arr))[firstx:lastx, firsty:lasty, firstz:lastz   ]
201        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ jpk                 :arr = (temporary(arr))[firstx:lastx,            *, firstz:lastz   ]
202        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ jpk                 :arr = (temporary(arr))[           *, firsty:lasty, firstz:lastz   ]
203        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ jpk                 :arr = (temporary(arr))[           *,            *, firstz:lastz   ]
204        sz[1] EQ jpi AND sz[2] EQ jpj AND sz[3] EQ  nz                 :arr = (temporary(arr))[firstx:lastx, firsty:lasty,            *   ]
205        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ  nz                 :arr = (temporary(arr))[firstx:lastx,            *,            *   ]
206        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ  nz                 :arr = (temporary(arr))[           *, firsty:lasty,            *   ]
207        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ  nz                 :
208; xyt arrays
209        sz[1] EQ jpi AND sz[2] EQ jpj                  AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx, firsty:lasty,               *]
210        sz[1] EQ jpi AND sz[2] EQ  ny                  AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx,            *,               *]
211        sz[1] EQ  nx AND sz[2] EQ jpj                  AND sz[3] EQ jpt:arr = (temporary(arr))[           *, firsty:lasty,               *]
212        sz[1] EQ  nx AND sz[2] EQ  ny                  AND sz[3] EQ jpt:
213; (x)yzt arrays
214        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, *]
215        nx EQ 1      AND sz[1] EQ jpj AND sz[2] EQ  nz AND sz[3] EQ jpt:arr = (temporary(arr))[              firsty:lasty,            *, *]
216        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ jpk AND sz[3] EQ jpt:arr = (temporary(arr))[                         *, firstz:lastz, *]
217        nx EQ 1      AND sz[1] EQ  ny AND sz[2] EQ  nz AND sz[3] EQ jpt:
218; x(y)zt arrays
219        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, *]
220        sz[1] EQ jpi AND ny EQ 1      AND sz[2] EQ  nz AND sz[3] EQ jpt:arr = (temporary(arr))[firstx:lastx,                          *, *]
221        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ jpk AND sz[3] EQ jpt:arr = (temporary(arr))[           *,               firstz:lastz, *]
222        sz[1] EQ  nx AND ny EQ 1      AND sz[2] EQ  nz AND sz[3] EQ jpt:
223        ELSE:return, err_mess(sz[1:3], jpi, nx, jpj, ny, jpk, nz, jpt)
224      ENDCASE
225    END
226;--------------------------------------------------------------
227    4:BEGIN                     ; 4D arrays
228;--------------------------------------------------------------
229      CASE 1 OF
230; xyzt arrays
231        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, *]
232        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, *]
233        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, *]
234        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ jpk AND sz[4] EQ jpt:arr = (temporary(arr))[           *,            *, firstz:lastz, *]
235        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,            *, *]
236        sz[1] EQ jpi AND sz[2] EQ  ny AND sz[3] EQ  nz AND sz[4] EQ jpt:arr = (temporary(arr))[firstx:lastx,            *,            *, *]
237        sz[1] EQ  nx AND sz[2] EQ jpj AND sz[3] EQ  nz AND sz[4] EQ jpt:arr = (temporary(arr))[           *, firsty:lasty,            *, *]
238        sz[1] EQ  nx AND sz[2] EQ  ny AND sz[3] EQ  nz AND sz[4] EQ jpt:
239        ELSE:return, err_mess(sz[1:4], jpi, nx, jpj, ny, jpk, nz, jpt)
240      ENDCASE
241    END
242    ELSE:return, report('Error: fitintobox is managing arrays with a maximum of 4 dimensions', /simple)
243  ENDCASE
244
245  return, arr
246end
Note: See TracBrowser for help on using the repository browser.