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

Last change on this file since 413 was 388, checked in by smasson, 16 years ago

introduce meridional and barotropic stream functions, see ticket:59

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