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

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