Changeset 86
- Timestamp:
- 04/07/08 15:50:01 (16 years ago)
- Location:
- trunk
- Files:
-
- 22 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/config/domain_boxes.def
r78 r86 167 167 160_140sW 200/220/-10/10/20/28 1 168 168 west_pac 120/180/-2/2 1 169 west_pac_atm 120/180/-2/2/0/100000 1 169 170 west2_pac 140/180/-30/30 1 170 171 westw_pac 120/165/-2/2 1 -
trunk/config/fld_glo_mmx.def
r78 r86 175 175 # vo fields 176 176 # 177 votemper -2 30 24.5 28 -2 30 1 177 temp @votemper 178 votemper -2 30 15 28 -2 30 1 178 179 vosaline 30 40 31 34 33 34 2 179 180 vodenpot 20 30 20 30 20 30 4 -
trunk/procs/com_eg.pro
r41 r86 4 4 ; attributs horizontal+vertical means 5 5 ; 6 COMMON zm_att, box_h, depth_z, zoom_z, diaznl_idx, box_plot, legbox, hpa_max, hpa_min, max_spec, spec_win, vert_type, vert_mean, vert_switch, glamboundary_box, msf_mean, name_level6 COMMON zm_att, box_h, depth_z, zoom_z, diaznl_idx, box_plot, legbox, pres_max, pres_min, max_spec, spec_win, vert_type, vert_mean, vert_switch, glamboundary_box, msf_mean, name_level 7 7 ; 8 8 ; attributs hoevmoeller -
trunk/procs/data_read.pro
r60 r86 66 66 ENDIF 67 67 ENDIF 68 varexp = cmd.exp68 ; varexp = cmd.exp 69 69 70 70 ; define data base … … 91 91 ENDIF 92 92 93 ; define data domain 94 95 IF hotyp NE '-' THEN BEGIN ; time serie 96 ; get hovmoeller box + stride 97 box_plot = def_box(cmd.plt, dimplot, legbox, time_stride) 98 IF debug_w THEN print, ' box_plot for domdef in data_read = ', box_plot 99 CASE n_elements(box_plot) OF 100 4: domdef, box_plot[0:3], /MEMEINDICES 101 6: domdef, box_plot[0:5], /MEMEINDICES 102 ENDCASE 103 ; time grid for hovmoeller 104 time1 = 1+delta_t1 105 IF cmd.out EQ 'cdf' THEN nb_cycles = 1 93 ; define horizontal domain and vertical domain if needed (used in 94 ; read_ncdf and update_data) 95 96 box_plot = def_box(cmd.plt, dimplot, legbox, time_stride) 97 CASE n_elements(box_plot) OF 98 4 : IF vert_switch GE 1 THEN box_plot = [box_plot, vert_mean] 99 6 : IF vert_switch GE 1 THEN box_plot = [box_plot[0:3], vert_mean] ELSE box_plot = box_plot[0:3] 100 ENDCASE 101 ; Exceptions : need to read all the vertical data (and not a subset) 102 ; for the pltz case. Other cases ? 103 IF plttyp EQ 'pltz' THEN box_plot = box_plot[0:3] 104 105 ; define timetsteps time1 and time2 106 107 IF hotyp NE '-' THEN BEGIN 108 time1 = delta_t1+1 106 109 timearr = compute_time(cmd.timave, cmd.date1, cmd.spec) 107 jpt = timearr.count 108 time2 = jpt+delta_t1 110 time2 = timearr.count+delta_t1 109 111 time = timearr.scale 110 niveau = 1 111 ; print, ' Data_read, hotyp/jpt = ', hotyp, jpt 112 ; print, ' Data_read, box = ', box_plot[0:3] 113 ENDIF ELSE BEGIN ; single date 114 jpt = 1 115 CASE strmid(cmd.timave, strlen(cmd.timave)-1, 1) OF 116 'y': time1 = delta_t1+1 117 'm': BEGIN 118 CASE strmid(cmd.timave, strlen(cmd.timave)-2, 1) OF 119 'm': time1 = delta_t1+long(strmid(cmd.date1, 0, 2)) ; mean month 120 ELSE: time1 = delta_t1+1 121 ENDCASE 122 END 123 'd': time1 = delta_t1+1 124 ELSE: time1 = delta_t1+1 125 ENDCASE 112 ENDIF ELSE BEGIN 113 IF strpos(cmd.timave, 'mm') NE -1 THEN time1 = delta_t1+long(strmid(cmd.date1, 0, 2)) $ 114 ELSE time1 = delta_t1+1 126 115 time2 = time1 127 116 time = time1 128 print, ' Setting domdef in data_read, plt typ =', plttyp 129 CASE plttyp OF 130 'plt': BEGIN 131 box_plot = def_box(cmd.plt, 2, legbox, time_stride) 132 IF strmid(cmd.var, 0,2) EQ 'vo' THEN BEGIN ; get right zindex for vertical 133 CASE vert_type OF 134 'level':domdef,[ box_plot[0:3],vert_mean],/zindex, /MEMEINDICES 135 'z':domdef,[ box_plot[0:3],vert_mean], /MEMEINDICES 136 ELSE: domdef, box_plot[0:3], /MEMEINDICES 137 ENDCASE 138 ENDIF ELSE BEGIN 139 domdef, box_plot[0:3], /MEMEINDICES 140 ENDELSE 141 END 142 'pltz': BEGIN 143 box_plot = def_box(cmd.plt, 2, legbox, time_stride) 144 domdef, box_plot[0:3], /MEMEINDICES 145 END 146 'plt1d': BEGIN 147 box_plot = def_box(cmd.plt, 2, legbox, time_stride) 148 domdef, box_plot[0:3], /MEMEINDICES 149 ; force all_data read 150 all_data = 1 151 END 152 ELSE: domdef, /MEMEINDICES 153 ENDCASE 154 ENDELSE 155 156 ; print, jpt, time1, time2, hotyp 117 ENDELSE 157 118 158 119 ; save time in common fld_att … … 166 127 '@@': BEGIN 167 128 IF debug_w THEN print, 'keyword_set(all_data) : ', keyword_set(all_data) 168 fldr = macro_read(file_name, cmd.var, ncdf_db, TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex)129 fldr = macro_read(file_name, cmd.var, ncdf_db, BOXZOOM = box_plot, TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex) 169 130 IF stddev_diff EQ 1 THEN fldr.origin = 'diff' 170 131 END … … 174 135 idx = strpos(cmd.var, '=f(') 175 136 var1 = strmid(cmd.var, 0, idx) 176 fldr1 = nc_read(file_name, var1, ncdf_db, $137 fldr1 = nc_read(file_name, var1, ncdf_db, BOXZOOM = box_plot, $ 177 138 TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex) 178 139 file_name1 = file_name … … 185 146 IF strpos(cmd.var, '=f(next)') EQ -1 THEN BEGIN ; type 1 y=f(x) on 1 line 186 147 var2 = strmid(cmd.var, idx+3, strlen(cmd.var)-idx-4) 187 fldr2 = nc_read(file_name, var2, ncdf_db, $148 fldr2 = nc_read(file_name, var2, ncdf_db, BOXZOOM = box_plot, $ 188 149 TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex) 189 150 datyp2 = datyp … … 294 255 295 256 ENDIF ELSE BEGIN ; general case 296 fldr = nc_read(file_name, cmd.var, ncdf_db, $ 297 TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex) 298 257 fldr = nc_read(file_name, cmd.var, ncdf_db, BOXZOOM = box_plot, $ 258 TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex) 259 ;fldr = nc_read(file_name, cmd.var, ncdf_db, $ 260 ; TIME_1 = time1, TIME_2 = time2, ALL_DATA = all_data, _extra = ex) 299 261 ; perform mean if hovmoeller diagram is required 300 262 ; It is absolutely necessary for the division case with … … 316 278 ENDCASE 317 279 318 ; if tkeavt, take log 319 320 ; CASE cmd.var OF 321 ; 'votkeavt': BEGIN 322 ; idx = where(fldr.data LE valmask/10) 323 ; idxm = where(fldr.data EQ valmask) 324 ; fldr.data(idx) = alog10(fldr.data(idx)) 325 ; ; on T grid 326 ; vargrid = 'T' 327 ; fldr.data = (fldr.data+shift(fldr.data, 0, 0, 1))*.5 328 ; fldr.data(idxm) = valmask 329 ; END 330 ; ELSE: 331 ; ENDCASE 280 ; Redefinition of time because it is updated in read_ncdf 281 ; Useful for pltt routine 282 283 IF hotyp NE '-' THEN BEGIN 284 time = timearr.scale 285 ENDIF ELSE BEGIN 286 time = time1 287 ENDELSE 332 288 333 289 334 290 ; density projection 291 335 292 IF splot EQ 1 THEN BEGIN 336 293 IF cmd.timave EQ '1y' AND 1 THEN BEGIN … … 354 311 print, ' Date1 = ', cmd.date1 355 312 sfild = fldr 356 bin_sigma, cmd, sfild 313 bin_sigma, cmd, sfild, BOXZOOM = box_plot, ALL_DATA = all_data ;;;;;;;;;;;;;; prob 357 314 cumulative = cumulative + sfild.data 358 315 ENDFOR … … 369 326 print, 'data_read: Performing monthly bining. Indices: first, last, current = 0,', timedim-1, i 370 327 sfild2 = {name: sfild.name, data: sfild.data(*, *, *, i), legend: sfild.legend, units: sfild.units, origin: sfild.origin, dim: sfild.dim-1} 371 bin_sigma, cmd, sfild2 328 bin_sigma, cmd, sfild2, BOXZOOM = box_plot, ALL_DATA = all_data 372 329 fldrd(*, *, *, i)= sfild2.data 373 330 ENDFOR … … 375 332 ENDIF ELSE BEGIN 376 333 sfild = fldr 377 bin_sigma, cmd, sfild 334 bin_sigma, cmd, sfild, BOXZOOM = box_plot, ALL_DATA = all_data 335 ;;bin_sigma, cmd, sfild, ALL_DATA = all_data 378 336 fldr = sfild 379 337 ENDELSE … … 413 371 414 372 ; perform difference 415 416 373 diff = fldr.data-field2.data 417 374 IF (where(fldr.data EQ valmask))[0] NE -1 THEN $ … … 430 387 431 388 ; read field2 432 433 389 field2 = data_read(cmd, hotyp, plttyp, dimplot, iover, ALL_DATA = all_data, _extra = ex) 434 390 IF n_elements(field2.data) EQ 1 THEN return, field2 … … 471 427 472 428 ; decode field2 473 474 429 argvar = strsplit(cmdl, '/', /EXTRACT) 475 430 … … 482 437 483 438 ; read field2 484 485 439 field2 = data_read(cmd2, hotyp, plttyp, dimplot, iover, ALL_DATA = all_data, _extra = ex) 486 440 IF n_elements(field2.data) EQ 1 THEN return, field2 487 441 488 442 ; perform difference 489 490 443 diff = fldr.data-field2.data 491 444 IF (where(fldr.data EQ valmask))[0] NE -1 THEN $ … … 508 461 ENDELSE 509 462 463 ; Pb with varexp which is always updated in read_ncdf 464 ; For Seb, varexp is the name of the file. For Eric, varexp is the name of the experiment 465 varexp = cmd.exp 466 510 467 IF debug_w THEN print, ' varexp before exit in data_read = ', varexp 511 468 IF debug_w THEN print, ' ...EXIT data_read' -
trunk/procs/macro_read.pro
r48 r86 2 2 ; Read Macro field Data 3 3 ;--------------------------- 4 FUNCTION macro_read, file_name, var_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex4 FUNCTION macro_read, file_name, var_name, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex 5 5 @common 6 6 @com_eg … … 34 34 ELSE: 35 35 ENDCASE 36 strcall = 'field_lec = '+macro_def[2]+'(file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex)'36 strcall = 'field_lec = '+macro_def[2]+'(file_name, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex)' 37 37 res = execute(strcall) 38 38 fieldo = {name: '', data: field_lec.data, legend: '', units: '', origin: '', dim: 0, direc:''} -
trunk/procs/macros/make_depth.pro
r68 r86 1 1 ;------------------------------------------------------------ 2 2 ;------------------------------------------------------------ 3 FUNCTION make_depth, file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ZMTYP = zmtyp 3 FUNCTION make_depth, file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ZMTYP = zmtyp, _EXTRA = ex 4 4 ; 5 5 @common -
trunk/procs/macros/make_eos.pro
r2 r86 49 49 ;------------------------------------------------------------ 50 50 ;------------------------------------------------------------ 51 FUNCTION make_eos, file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ZMTYP = zmtyp51 FUNCTION make_eos, file_name, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, ZMTYP = zmtyp 52 52 ; 53 53 @common … … 57 57 ; Read T and S 58 58 ; 59 tn = nc_read(file_name,'votemper', ncdf_db, TIME_1 = time_1, TIME_2 = time_2, no_mean = 1)60 sn = nc_read(file_name,'vosaline', ncdf_db, TIME_1 = time_1, TIME_2 = time_2, no_mean = 1)59 tn = nc_read(file_name,'votemper', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, no_mean = 1) 60 sn = nc_read(file_name,'vosaline', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, no_mean = 1) 61 61 62 62 ; declarations -
trunk/procs/macros/make_msf.pro
r2 r86 2 2 ; make MSF 3 3 ; 4 FUNCTION make_msf, file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ZMTYP = zmtyp4 FUNCTION make_msf, file_name, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, ZMTYP = zmtyp 5 5 6 6 @common … … 14 14 ; 15 15 file_nam = strmid(file_name, 0, strlen(file_name)-4) 16 v = nc_read(file_nam+'V.nc','vomecrty', ncdf_db, TIME_1 = time_1, TIME_2 = time_2)16 v = nc_read(file_nam+'V.nc','vomecrty', ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex) 17 17 18 18 idx = where(v.data EQ valmask) -
trunk/procs/macros/make_stddev.pro
r17 r86 2 2 ; make std dev from 2D macro_base_fld monthly time serie (defined in macro_read) 3 3 ; 4 FUNCTION make_stddev, file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, ZMTYP = zmtyp4 FUNCTION make_stddev, file_name, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, ZMTYP = zmtyp 5 5 6 6 @common … … 12 12 IF debug_w THEN print, 'keyword_set(ALL_DATA) : ', keyword_set(ALL_DATA) 13 13 14 mfld = nc_read(file_name, macro_base_fld, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data) 15 14 mfld = nc_read(file_name, macro_base_fld, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data) 16 15 mfld.data = trends(mfld.data, '412', 'xyt') 17 16 -
trunk/procs/mask_z.pro
r2 r86 169 169 CASE strmid(cmd.plt, 1, 1) OF 170 170 't': boite_pltz = box_h 171 ELSE : boite_pltz = [box_h, hpa_min, hpa_max ]171 ELSE : boite_pltz = [box_h, pres_min, pres_max ] 172 172 ENDCASE 173 173 ENDIF … … 191 191 CASE strmid(cmd.plt, 1, 1) OF 192 192 't': boite_pltz = zbox 193 ELSE : IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, hpa_min, hpa_max]193 ELSE : IF n_elements(boite_pltz) EQ 4 THEN boite_pltz = [zbox, pres_min, pres_max] 194 194 ENDCASE 195 195 ENDIF -
trunk/procs/meshes/mesh_from_file.pro
r69 r86 15 15 print,' Model inits for ', model, ' from file: ', s_file 16 16 17 sm_file = hom_idl+'grids/grids_'+model+'.nc'18 res = find(sm_file)17 ; sm_file = hom_idl+'grids/grids_'+model+'.nc' 18 ; res = find(sm_file) 19 19 varexpp = varexp 20 IF res NE 'NOT FOUND' THEN BEGIN21 22 initncdf, s_file, GLAMBOUNDARY = glamboundary_box23 24 print, ' Found mask from ',sm_file25 26 tmask = byte(read_ncdf('sftlf', 0, 0, /timestep, file = sm_file, /nostruct))27 28 idx = where(tmask EQ valmask)29 30 IF idx(0) NE -1 THEN tmask(idx) = 0.31 idx = where(tmask LE 50.)32 tmask(idx) = 0.33 tmask = tmask < 134 tmask = 1-tmask35 triangles=triangule()36 37 ENDIF ELSE BEGIN20 ; IF res NE 'NOT FOUND' THEN BEGIN 21 ; 22 ; initncdf, s_file, GLAMBOUNDARY = glamboundary_box 23 ; 24 ; print, ' Found mask from ',sm_file 25 ; 26 ; tmask = byte(read_ncdf('sftlf', 0, 0, /timestep, file = sm_file, /nostruct)) 27 ; 28 ; idx = where(tmask EQ valmask) 29 ; 30 ; IF idx(0) NE -1 THEN tmask(idx) = 0. 31 ; idx = where(tmask LE 50.) 32 ; tmask(idx) = 0. 33 ; tmask = tmask < 1 34 ; tmask = 1-tmask 35 ; triangles=triangule() 36 ; 37 ; ENDIF ELSE BEGIN 38 38 CASE var_name OF 39 39 '@@voenergy': var_local = 'so' … … 63 63 ; build grid 64 64 CASE mesh_type of 65 'atm': initncdf, s_file, GLAMBOUNDARY = glamboundary_box, ZAXISNAME = name_level 65 'atm': BEGIN 66 ;;initncdf, s_file, USEASMASK = var_local, missing_value = valmask, GLAMBOUNDARY = glamboundary_box, ZAXISNAME = name_level 67 initncdf, s_file, GLAMBOUNDARY = glamboundary_box, ZAXISNAME = name_level 68 END 66 69 ELSE: initncdf, s_file, USEASMASK = var_local, missing_value = valmask, GLAMBOUNDARY = glamboundary_box, ZAXISNAME = 'depth' 67 70 ENDCASE … … 71 74 IF debug_w THEN print, ' gdept :', size(gdept) 72 75 73 ENDELSE76 ; ENDELSE 74 77 75 78 varexp = varexpp -
trunk/procs/meshes/mesh_orca.pro
r26 r86 54 54 55 55 56 IF keyword_set(NO_SHIFT) THEN key_shift = 057 56 ; IF keyword_set(NO_SHIFT) THEN key_shift = 0 57 IF keyword_set(NO_SHIFT) THEN shift = 0 ;; key_shift = 0 58 58 no_lon_shift = 0 59 59 60 key_periodique = 1 60 ; key_periodique = 1 61 periodic = 1 61 62 62 63 ; reduce grid in latitude ? … … 120 121 'ORCA05': BEGIN 121 122 mesmsk = 'micromeshmaskORCA05.nc' 122 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 123 ;;cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 124 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC = periodic' 123 125 END 124 126 'ORCA_R2': BEGIN … … 130 132 'V3': mesmsk = 'meshmask_ORCA_R2_V2.nc' 131 133 ENDCASE 132 IF whole_arrays EQ 0 THEN BEGIN 133 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, onearth = onearth' 134 IF whole_arrays EQ 0 THEN BEGIN 135 136 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC=periodic' 137 ;;cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = 138 ;;glamboundary_box, onearth = onearth' 134 139 ENDIF ELSE BEGIN 135 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 140 ;;cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box 141 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, SHIFT=shift, PERIODIC=periodic' 136 142 ENDELSE 137 143 END 138 144 'L300': BEGIN 139 145 mesmsk = 'meshmask.orca.2d.L300.nc' 140 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 146 ;;cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 147 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC=periodic' 141 148 END 142 149 ENDCASE … … 144 151 'ORCA_R4': BEGIN 145 152 mesmsk = 'meshmask_orca4.nc' 146 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 153 ;;cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box' 154 cmd_grid = 'ncdf_meshread, sm_file, GLAMBOUNDARY = glamboundary_box, PERIODIC=periodic' 147 155 END 148 156 ENDCASE … … 153 161 sm_file = hom_idl+'grids/'+mesmsk 154 162 res = find(sm_file) 155 163 156 164 IF res NE 'NOT FOUND' THEN BEGIN 157 165 res_grid = execute(cmd_grid) 158 166 ENDIF ELSE BEGIN 159 167 stop, 'No meshmask file found for ORCA mesh config' 160 168 ENDELSE 161 169 … … 243 251 print, ' End of ORCA mesh config ' 244 252 253 245 254 END -
trunk/procs/msf_simple.pro
r2 r86 45 45 ; integration zonale du flux ! 46 46 ; 47 fm = total(z, 1 )47 fm = total(z, 1, /NAN) 48 48 ; 49 49 ; calcul de la msf en integrant depuis le fond -
trunk/procs/nc_read.pro
r41 r86 1 1 ;--------------------------- 2 ; Reading ORCA netcdf files 3 ; EG 24/2/99 2 ; Reading any netcdf file 4 3 ;--------------------------- 5 FUNCTION nc_read, file_name, var_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, NO_MEAN = no_mean4 FUNCTION nc_read, file_name, var_name, ncdf_db, BOXZOOM = boxzoom, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, NO_MEAN = no_mean 6 5 7 6 ; arguments = file_name, varname … … 11 10 @common 12 11 @com_eg 13 14 ;; print, 'key_yreverse : ', key_yreverse 15 12 16 13 ; inits 17 IF debug_w THEN print, ' '18 IF debug_w THEN print, ' ENTER nc_read'14 IF debug_w THEN print, ' ' 15 IF debug_w THEN print, ' ENTER nc_read...' 19 16 20 17 IF NOT keyword_set(TIME_1) THEN time_1 = 1 21 18 IF NOT keyword_set(TIME_2) THEN time_2 = time_1 22 ;23 ; decide which subdomain of data to read24 ;25 26 IF debug_w THEN print, ' keyword_set(ALL_DATA) : ', keyword_set(ALL_DATA)27 28 IF keyword_set(ALL_DATA) THEN BEGIN29 print, ' Reading whole domain'30 firstx = 031 firsty = 032 firstz = 033 nx = jpi34 ny = jpj35 nz = jpk36 lastx = jpi-137 lasty = jpj-138 lastz = jpk-139 ;Rajout MK40 ;Trouver une meilleure place41 ixminmesh = 042 iyminmesh = 043 ixmaxmesh = jpi-144 iymaxmesh = jpj-145 ;Fin rajout46 ENDIF ELSE BEGIN47 grille,mask,glam,gphi,gdep,nx,ny,nz,firstx,firsty,firstz,lastx,lasty,lastz48 mask = 149 ENDELSE50 51 IF debug_w THEN print, ' nx,ny,nz,firstx,firsty,firstz,lastx,lasty,lastz'52 IF debug_w THEN print, ' ', nx,ny,nz,firstx,firsty,firstz,lastx,lasty,lastz53 54 IF debug_w THEN print, ' key_offset =', key_offset55 IF debug_w THEN print, ' jpi, jpj, jpk =', jpi, jpj, jpk56 19 57 20 58 ; define reading boundaries 59 60 x_count = nx 61 y_count = ny 62 z_count = nz 63 64 IF debug_w THEN print, ' nx,ny,nz =', nx,ny,nz 65 66 ; force izmaxmesh to lastz 67 jpk = lastz+1 68 69 ; dealing with longitude periodicity 70 IF x_count NE jpi THEN BEGIN 71 key_shift_read = 0 72 ENDIF ELSE key_shift_read = key_shift 73 IF debug_w THEN print, ' key_shift_read=', key_shift_read 74 75 x_offset = key_offset[0]+ firstx+(key_shift_read-key_shift) 76 y_offset = key_offset[1]+ firsty 77 z_offset = key_offset[2]+ firstz 78 IF debug_w THEN print, ' offset =', x_offset, y_offset, z_offset 79 80 ; pour trouver un fichier, tu as 81 ; findfile (tres pratique) et dialog_pickfile (interactif) 82 83 ; pour verifier si il y a une variable je fais 84 85 ; inq=ncdf_inquire(cdfid) 86 ; for varid=0,inq.nvars-1 do BEGIN 87 ; varinq=ncdf_varinq(cdfid,varid) 88 ; if varinq.name eq nom then goto, variabletrouvee 89 ; endfor 90 ; return, -1 91 ; variabletrouvee: 21 ; decide which subdomain of data to read 22 IF debug_w THEN print, ' keyword_set(ALL_DATA) : ', keyword_set(ALL_DATA) 23 IF keyword_set(ALL_DATA) THEN BEGIN 24 tout = 1 25 ENDIF ELSE tout = 0 26 CASE vert_type OF 27 'z' : zindex = 0 28 'level' : zindex = 1 29 ELSE: zindex = 0 30 ENDCASE 92 31 93 32 ; local directory 94 95 IF strpos(ncdf_db, ':') GE 1 THEN directory = (str_sep(ncdf_db, ':'))[1] $ 33 IF strpos(ncdf_db, ':') GE 1 THEN directory = (strsplit(ncdf_db, ':', /EXTRACT))[1] $ 96 34 ELSE directory = ncdf_db 97 35 98 ; existence of file 36 ; Find the variable's attribute 37 ncdf_getatt, directory+file_name, var_name, add_offset = add_offset, scale_factor = scale_factor, $ 38 missing_value = missing_value, units = units, calendar = calendar, long_name = long_name 99 39 100 list = findfile(directory+file_name, count = nb_file) 101 102 IF nb_file EQ 0 THEN BEGIN 103 print, '' 104 print, ' ***** file ', file_name, ' not found in ', $ 105 directory 106 print, '' 107 field = {data: -1.0} 108 return, field 109 ENDIF 40 ; By default units for the Z axis are meters 41 IF n_elements(gdept) GT 1 THEN BEGIN 42 IF name_level NE '-' THEN $ 43 ncdf_getatt, directory+file_name, name_level, units = units_depth ELSE units_depth = 'm' 44 ENDIF ELSE units_depth = '' 110 45 111 ; ouverture fichier netCDF + contenu 112 cdfid=ncdf_open(directory+file_name) 113 inq=ncdf_inquire(cdfid) 114 ; que contient la variable 115 varid = ncdf_varid(cdfid, var_name) 46 ; Check consistency between time_2 computed from param in cmdline and the max number 47 ; of time steps found in the file. 48 jpt_max = find_jptmax(file_name, IODIRECTORY = directory) 49 IF time_2-time_1+1 GT jpt_max AND jpt_max NE -1 THEN time_2 = time_1+jpt_max-1 116 50 117 name_suff = '' 51 ; Read the data with a call to read_ncdf 52 IF debug_w THEN print, ' ' 53 IF debug_w THEN print, ' Reading raw data from ', file_name 118 54 119 IF varid EQ -1 THEN BEGIN 120 print, '' 121 print, ' ***** field ', var_name, ' not found in file ', $ 122 file_name 123 print, '' 124 field = {data: -1.0} 125 return, field 126 ENDIF 127 varinq=ncdf_varinq(cdfid, var_name) 128 129 ; test sur la dimension 130 err_mess = '' 131 field_dim = n_elements(varinq.dim) 132 133 ; get unlimited record variable 134 IF inq.recdim NE -1 THEN BEGIN 135 ncdf_diminq, cdfid, inq.recdim, name_time, nb_time 136 ;;ncdf_varget, cdfid, inq.recdim, time_array 137 ;;nb_time = (size(time_array))(1) 138 ENDIF ELSE BEGIN 139 ; Look for a potential record dimension 140 IF debug_w THEN print, ' Warning : no unlimited record in netCDF file' 141 ; Look for the names of all dimensions and all variables 142 list_dims = ncdf_listdims(cdfid) 143 list_vars = ncdf_listvars(cdfid) 144 ; Propose all the names and make the user choose the right one 145 ; for the record dimension 146 print, 'In the file ', file_name, ', the dimensions are named :' 147 print, list_dims 148 print, 'In the file ', file_name, ', the variables are named :' 149 print, list_vars 150 name_time = xquestion('Among the preceding names, which one could refer to the record dimension ?', /chkwid) 151 IF name_time NE '-' THEN BEGIN 152 dimidt = ncdf_dimid(cdfid, name_time) 153 ncdf_diminq, cdfid, dimidt, name_time, nb_time 154 print, 'You chose ', name_time, ' as a record dimension and its size is ', nb_time 155 inq.recdim = dimidt 156 ENDIF ELSE BEGIN 157 print, 'No record dimension considered in the file' 158 nb_time = 0 159 ENDELSE 160 161 IF varinq.dim[varinq.ndims-1] NE dimidt THEN STOP, $ 162 'Post_it cannot handle variables whose record dimension is not the last one' 163 164 ; ncdf_diminq,cdfid,(n_elements(varinq.dim)-1), name_time, nb_time 165 ; dimidl = ncdf_dimid(cdfid, name_time) 166 ; ncdf_diminq,cdfid,dimidl, name_time, nb_time 167 ; varidl = ncdf_varid(cdfid, name_time) 168 ; ncdf_varget, cdfid, varidl, time_array 169 170 ENDELSE 171 172 IF jpt GT nb_time THEN BEGIN 173 jpt = nb_time 174 print, 'Warning : the specified jpt does not correspond to the real time dimension in the file !' 175 print, 'New jpt =', jpt 176 ENDIF 177 ; defs for @read_ncdf_varget 178 179 ; key_stride = time_stride 180 key_stride = 1 181 if n_elements(key_stride) LE 2 then key_stride = [1, 1, 1] 182 key_stride = 1l > long(key_stride) 183 jpitotal = long(ixmaxmesh-ixminmesh+1) 184 key_shift = long(testvar(var = key_shift)) 185 186 key = long(key_shift MOD jpitotal) 187 if key LT 0 then key = key+jpitotal 188 ixmin = ixminmesh-ixmindta 189 iymin = iyminmesh-iymindta 190 firsttps = time_1-1 191 lasttps = time_2-1 192 193 name = varid 55 lec_data = read_ncdf(var_name, time_1-1, time_2-1, BOXZOOM = boxzoom, FILENAME = directory+file_name, $ 56 /TIMESTEP, /ADDSCL_BEFORE, TOUT = tout, /NOSTRUCT, /CONT_NOFILL, GRID = vargrid, $ 57 ZINVAR = zinvar, ZINDEX = zindex) 58 field_dim = (size(lec_data))[0] 59 IF field_dim LE 0 THEN stop, ' Something wrong happened in read_ncdf ' 194 60 195 61 IF debug_w THEN print, ' ' 196 IF debug_w THEN print, ' key=', key 197 IF debug_w THEN print, ' jpitotal=', jpitotal 62 IF debug_w THEN print, ' boxzoom=', boxzoom 63 IF debug_w THEN print, ' firstxt,firstyt,firstzt=', firstxt, firstyt, firstzt 64 IF debug_w THEN print, ' lastxt,lastyt,lastzt=', firstxt, firstyt, firstzt 65 IF debug_w THEN print, ' zinvar=', zinvar 198 66 IF debug_w THEN print, ' ixmindta,iymindta,izmindta =', ixmindta,iymindta,izmindta 199 67 IF debug_w THEN print, ' ixminmesh,iyminmesh=', ixminmesh,iyminmesh 200 68 IF debug_w THEN print, ' ixmaxmesh,iymaxmesh=', ixmaxmesh,iymaxmesh 201 69 IF debug_w THEN print, ' izminmesh,izmaxmesh=', izminmesh,izmaxmesh 202 IF debug_w THEN print, ' ixmin,iymin=', ixmin,iymin 203 IF debug_w THEN print, ' firsttps,lasttps=', firsttps, lasttps 204 IF debug_w THEN print, ' key_shift in nc_read=', key_shift 205 IF debug_w THEN print, ' key_yreverse, firsty, lasty',key_yreverse, firsty, lasty 70 IF debug_w THEN print, ' jpt=', jpt 71 IF debug_w THEN print, ' key_shift=', key_shift 72 IF debug_w THEN print, ' key_yreverse=',key_yreverse 206 73 IF debug_w THEN print, ' ' 74 75 ; Average data along vertical if needed and update some features 76 ; needed for plt (data_direc, name_suff) 77 name_suff = '' 78 data_direc = '' 79 update_data, TAB = lec_data, VNAME = var_name, BOXZOOM = boxzoom, ZUNITS = units_depth, $ 80 ZINVAR = zinvar, SUFFIX = name_suff, D_DIREC = data_direc, $ 81 TIME_1 = time_1, TIME_2 = time_2, NO_MEAN = no_mean 82 field_dim = (size(lec_data))[0] 207 83 208 CASE n_elements(varinq.dim) OF 209 210 ;; fichier 2d : surface 211 2: BEGIN 212 print, ' Reading ', var_name, ' (2D data) from ', file_name 213 @read_ncdf_varget 214 lec_data = res 215 data_direc = 'xy' 216 niveau = 1 217 END 218 219 ;; fichier 3d : 2 cas = 1/ 2d espace + temps 2/ 3d espace 220 3: BEGIN 221 ;; si varinq.dim contient la dim infinie (no 3) -> temps 222 dim_3 = '3d' 223 IF nb_time GE 1 THEN dim_3 = '2d' 224 IF dim_3 EQ '2d' THEN BEGIN 225 226 IF time_2 EQ time_1 THEN BEGIN 227 print, ' Reading ', var_name, ' (2D data - index ', strcompress(string(time_1)),') from ', file_name 228 @read_ncdf_varget 229 lec_data = res 230 data_direc = 'xy' 231 ENDIF ELSE BEGIN 232 print, ' Reading ', var_name, ' (2D data time serie)', strcompress(string(time_1)),'-', strtrim(string(time_2), 2), ' [every ',strtrim(string(time_stride), 2), '] from ', file_name 233 IF debug_w THEN print, ' x_offset et y_offset et time_1 :', x_offset, y_offset, time_1 234 @read_ncdf_varget 235 lec_data = res 236 data_direc = 'xyt' 237 ENDELSE 238 239 ENDIF ELSE BEGIN 240 print, ' Reading ', var_name, ' (3D data)', ' from ', file_name 241 @read_ncdf_varget 242 lec_data = res 243 data_direc = 'xyz' 244 ENDELSE 245 END 246 ;; fichier 4d : volume + temps 247 4: BEGIN 248 IF time_2 EQ time_1 THEN BEGIN 249 print, ' Reading ', var_name, ' (3D data - index ', strcompress(string(time_1)),') from ', file_name 250 ; read vertical levels 251 IF debug_w THEN print, ' mesh_type= ',mesh_type 252 IF mesh_type EQ 'atm' THEN BEGIN 253 ncdf_diminq,cdfid,2, name_level, nb_level 254 IF debug_w THEN print, 'name_level, nb_level = ', name_level, nb_level 255 256 dimidl = ncdf_dimid(cdfid, name_level) 257 ncdf_diminq,cdfid,dimidl, name_level, nb_level 258 259 varidl = ncdf_varid(cdfid, name_level) 260 ; make sure name_level is in hPa 261 ncdf_attget, cdfid, varidl, 'units', val_unit 262 IF string(val_unit) NE 'hPa' AND string(val_unit) NE 'millibar' AND string(val_unit) NE 'mbar' THEN BEGIN 263 print, ' vertical levels coordinate not obvious = ', name_level 264 print, ' ... using <levels> ...' 265 varidl = ncdf_varid(cdfid, 'levels') 266 ENDIF 267 268 ncdf_varget, cdfid, varidl, gdept 269 gdept = gdept 270 gdepw = gdept 271 e3t = shift(gdept, 1)-gdept 272 e3t[0] = e3t[1] 273 e3w = e3t 274 jpk = nb_level 275 tmask = reform((reform(tmask(*, *), jpi*jpj)#replicate(1, jpk)), jpi, jpj, jpk) 276 ENDIF 277 IF debug_w THEN print, ' going into @read_ncdf_varget ' 278 @read_ncdf_varget 279 lec_data = res 280 ; lec_data = reform(lec_data,x_count, y_count, z_count) 281 data_direc = 'xyz' 282 IF debug_w THEN help, lec_data 283 284 ; vertical average ? 285 IF vert_switch ge 1 AND NOT keyword_set(no_mean) THEN BEGIN 286 old_boite = [lon1, lon2, lat1, lat2, prof1, prof2] 287 print, ' Average in vertical domain ', vert_type, vert_mean 288 IF mesh_type EQ 'atm' THEN BEGIN 289 CASE atmos_msk OF 290 0: print, ' [atmos grid : take all points] ' ; take all points 291 1: BEGIN 292 ; take ocean points only 293 idx = where(tmask EQ 0) 294 lec_data(idx) = 1.e20 295 print, ' [atmos grid : take ocean points only] ' 296 END 297 2: BEGIN 298 ; take land points only 299 idx = where(tmask GT 0) 300 lec_data(idx) = 1.e20 301 print, ' [atmos grid : take land points only] ' 302 END 303 ENDCASE 304 CASE vert_type OF 305 'z': BEGIN ; depth range 306 IF debug_w THEN print, ' performing average' 307 zmean = grossemoyenne(lec_data, 'z', boite = vert_mean) 308 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 309 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0)))), 2)+' hPa' 310 ENDIF ELSE BEGIN 311 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 312 ENDELSE 313 END 314 ELSE: BEGIN ; levels range 315 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 316 zmean = lec_data(*, *, vert_mean[0]) 317 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0)))), 2)+' hPa' 318 ENDIF ELSE BEGIN 319 zmean = moyenne(lec_data, 'z', boite = vert_mean, /zindex, NAN =1.e20) 320 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 321 ENDELSE 322 END 323 ENDCASE 324 ; tmask = reform(tmask(*, *, 0), jpi, jpj) 325 ENDIF ELSE BEGIN 326 ; ocean = always mask 327 ; idx = where(tmask EQ 0) 328 ; lec_data(idx) = 1.e20 329 CASE vert_type OF 330 'z': BEGIN 331 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 332 zmean = lec_data ; right depth already selected 333 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0))+.1)), 2)+' m' 334 ENDIF ELSE BEGIN 335 zmean = moyenne(lec_data, 'z', boite = vert_mean) 336 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 337 ENDELSE 338 END 339 ELSE: BEGIN ; case level (zindex) 340 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 341 zmean = lec_data ; right depth already selected 342 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0))+.1)), 2)+' m' 343 ENDIF ELSE BEGIN 344 zmean = moyenne(lec_data, 'z', boite = vert_mean, /zindex) 345 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 346 ENDELSE 347 END 348 ENDCASE 349 ENDELSE 350 lec_data = zmean 351 domdef, old_boite 352 field_dim = field_dim - 1 353 data_direc = 'xy' 354 nzt = 1 355 firstz = 0 356 lastz = 0 357 ENDIF 358 359 ENDIF ELSE BEGIN 360 print, ' Reading ', var_name, ' (3D data time serie)', strcompress(string(time_1)),'-', strtrim(string(time_2), 2), ' from ', file_name 361 ; read vertical levels 362 IF mesh_type EQ 'atm' THEN BEGIN 363 ncdf_diminq,cdfid,2, name_level, nb_level 364 365 ; get name of vertical level from metadata 366 file_grid_config = hom_def+'grid_config.def' 367 spawn, 'grep -i "\ '+meshlec_type+' " '+file_grid_config, line 368 line = strcompress(strtrim(line[0], 2)) 369 length = strlen(line) 370 371 IF length EQ 0 THEN BEGIN 372 print, ' *** nc_read : define name_level from grid ', meshlec_type, $ 373 ' in file ', file_grid_config 374 name_level = '' 375 return, -1 376 ENDIF ELSE BEGIN 377 argvar = str_sep(line, ' ') 378 name_level = argvar[1] 379 ENDELSE 380 dimidl = ncdf_dimid(cdfid, name_level) 381 ncdf_diminq,cdfid,dimidl, name_level, nb_level 382 383 varidl = ncdf_varid(cdfid, name_level) 384 ; make sure name_level is in hPa 385 ncdf_attget, cdfid, varidl, 'units', val_unit 386 IF string(val_unit) NE 'hPa' AND string(val_unit) NE 'millibar' AND string(val_unit) NE 'mbar' THEN BEGIN 387 print, ' vertical levels coordinate not obvious' 388 print, ' ... using <levels> ...' 389 varidl = ncdf_varid(cdfid, 'levels') 390 ENDIF 391 ncdf_varget, cdfid, varidl, gdept 392 gdepw = gdept 393 e3t = shift(gdept, 1)-gdept 394 e3t[0] = e3t[1] 395 e3w = e3t 396 jpk = nb_level 397 tmask = reform((reform(tmask(*, *), jpi*jpj)#replicate(1, jpk)), jpi, jpj, jpk) 398 ENDIF 399 @read_ncdf_varget 400 lec_data = res 401 data_direc = 'xyzt' 402 403 ; vertical average ? 404 IF vert_switch ge 1 AND NOT keyword_set(no_mean) THEN BEGIN 405 old_boite = [lon1, lon2, lat1, lat2, prof1, prof2] 406 print, ' Average in vertical domain ', vert_type, vert_mean 407 IF mesh_type EQ 'atm' THEN BEGIN 408 CASE atmos_msk OF 409 0: print, ' [take all points] ' ; take all points 410 1: BEGIN 411 ; take ocean points only 412 idx = where(tmask EQ 0) 413 lec_data(idx) = 1.e20 414 print, ' [take ocean points only] ' 415 END 416 2: BEGIN 417 ; take land points only 418 idx = where(tmask GT 0) 419 lec_data(idx) = 1.e20 420 print, ' [take land points only] ' 421 END 422 ENDCASE 423 CASE vert_type OF 424 'z': BEGIN ; levels 425 426 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 427 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0)))), 2)+' hPa' 428 ENDIF ELSE BEGIN 429 zmean = grossemoyenne(lec_data, 'z', boite = vert_mean) 430 name_suff = ' averaged in '+vert_type+'['+strtrim(string(vert_mean(0)), 2)+','+strtrim(string(vert_mean(1)), 2)+']' 431 ENDELSE 432 END 433 ELSE: BEGIN ; levels 434 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 435 zmean = lec_data(*, *, vert_mean[0]) 436 name_suff = ' at '+vert_type+' '+strtrim(string(long(vert_mean(0))), 2)+' ['+strtrim(string(gdept(vert_mean(0))), 2)+' hPa]' 437 ENDIF ELSE BEGIN 438 zmean = moyenne(lec_data, 'z', boite = vert_mean, /zindex) 439 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 440 ENDELSE 441 END 442 ENDCASE 443 ; tmask = reform(tmask(*, *, 0), jpi, jpj) 444 ENDIF ELSE BEGIN 445 ; ocean = always mask 446 ; idx = where(tmask EQ 0) 447 ; lec_data(idx) = 1.e20 448 CASE vert_type OF 449 'z': BEGIN 450 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 451 zmean = lec_data 452 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0))+.1)), 2)+' m' 453 ENDIF ELSE BEGIN 454 zmean = grossemoyenne(lec_data, 'z', boite = vert_mean) 455 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 456 ENDELSE 457 END 458 ELSE: BEGIN 459 IF vert_mean[0] EQ vert_mean[1] THEN BEGIN 460 zmean = lec_data 461 name_suff = ' at '+strtrim(string(long(gdept(vert_mean(0))+.1)), 2)+' m' 462 ENDIF ELSE BEGIN 463 zmean = moyenne(lec_data, 'z', boite = vert_mean, /zindex, NAN =1.e20) 464 name_suff = ' averaged in '+vert_type+'['+strtrim(string(long(vert_mean(0))), 2)+','+strtrim(string(long(vert_mean(1))), 2)+']' 465 ENDELSE 466 END 467 ENDCASE 468 ENDELSE 469 lec_data = zmean 470 domdef, old_boite 471 field_dim = field_dim - 1 472 data_direc = 'xyt' 473 nzt = 1 474 firstz = 0 475 lastz = 0 476 ENDIF 477 ENDELSE 478 END 479 ;; erreur si dim > 4 480 ELSE: BEGIN 481 err_mess = ' *** nc_read : ERROR dimension > 4' 482 lec_data = -1.0 483 END 484 ENDCASE 485 486 ; scaling ? 487 FOR i = 0, varinq.natts-1 DO BEGIN 488 att_txt = ncdf_attname(cdfid, varid, i) 489 IF att_txt EQ 'scale_factor' THEN BEGIN 490 ncdf_attget, cdfid, varid, att_txt, valscale 491 lec_data = lec_data*valscale 492 ENDIF 493 ENDFOR 494 495 ; Attribut du champ 496 84 ; Field attributes 497 85 field = {name: '', data: lec_data, legend: '', units: '', origin: '', dim: 0, direc: data_direc} 498 86 field.name = var_name 499 87 field.origin = directory+file_name 500 ; 501 ; get long name 502 ; result = '???' 503 FOR i = 0, varinq.natts-1 DO BEGIN 504 att_txt = ncdf_attname(cdfid, varid, i) 505 IF att_txt EQ 'long_name' OR att_txt EQ 'title' THEN ncdf_attget, cdfid, varid, att_txt, result 506 ENDFOR 507 field.legend = strtrim(string(result),1)+name_suff 88 field.legend = long_name+name_suff 89 field.units = units 90 field.dim = field_dim 508 91 509 ; get unit 510 ; if it exists 511 isunits = ncdf_attinq(cdfid, varid, 'units') 512 IF isunits.datatype NE 'UNKNOWN' THEN BEGIN 513 ncdf_attget, cdfid, varid, 'units', result 514 field.units = strtrim(string(result),1) 515 ENDIF ELSE BEGIN 516 print, 'No units for the variable ', field.name 517 print, ' Or units were forgotten in the file !' 518 ENDELSE 519 field.dim = field_dim 92 ; get valmask (might need valmask = float(string(valmask)) 520 93 521 522 ; get valmask (might need valmask = float(string(valmask)) 523 524 valmask = 1.e20 525 FOR i = 0, varinq.natts-1 DO BEGIN 526 att_txt = ncdf_attname(cdfid, varid, i) 527 IF att_txt EQ 'missing_value' OR att_txt EQ 'mask value' OR att_txt EQ '_FillValue' THEN ncdf_attget, cdfid, varid, att_txt, valmask 528 ENDFOR 529 530 ; set valmask to 1.e20 531 94 ; valmask = 1.e20 95 IF size(missing_value, /TYPE) EQ 4 OR size(missing_value, /TYPE) EQ 5 THEN BEGIN 96 valmask = missing_value 532 97 ; ensure valmask is positive 533 534 IF valmask LT 0 THEN BEGIN535 print, ' *** Warning valmask is negative - changing sign: ', valmask536 idx_t = where (field.data EQ valmask)537 IF idx_t(0) NE -1 THEN field.data(idx_t)= -valmask538 valmask = -valmask539 idx_t=0 ; free memory98 IF valmask LT 0 THEN BEGIN 99 print, ' *** Warning valmask is negative - changing sign: ', valmask 100 idx_t = where (field.data EQ valmask) 101 IF idx_t(0) NE -1 THEN field.data(idx_t) = -valmask 102 valmask = -valmask 103 idx_t=0 ; free memory 104 ENDIF 540 105 ENDIF 541 106 … … 558 123 print, ' = ',field.legend, ' [min/max = ',minf , maxf,' ', field.units,' - masked values = ',valmask, chardim, ']' 559 124 560 561 ncdf_close, cdfid562 563 ;key_offset = key_offset_orig564 ;jpi = jpi_orig565 ;jpj = jpj_orig566 ;jpk = jpk_orig567 568 IF keyword_set(key_yreverse) THEN print, ' key_yreverse active : ', key_yreverse569 570 125 IF debug_w THEN print, ' ...EXIT nc_read' 571 126 IF debug_w THEN print, ' ' 572 127 573 128 return, field 574 129 575 576 130 END -
trunk/procs/plt_map.pro
r70 r86 598 598 ENDELSE 599 599 END 600 'atm': BEGIN & type_yz = ',type_yz='' hPa''' & zoom_txt = ', zoom='+string(hpa_max) & END600 'atm': BEGIN & type_yz = ',type_yz=''Pa''' & zoom_txt = ', zoom='+string(pres_max) & END 601 601 ELSE:type_yz = '' 602 602 ENDCASE -
trunk/procs/trends.pro
r73 r86 360 360 print, ' -> writing 1D data to ', asciidir+filename 361 361 print, ' ' 362 printf, nuldat, fld*scale, format = '(f8. 3)'362 printf, nuldat, fld*scale, format = '(f8.4)' 363 363 free_lun, nuldat 364 364 close, nuldat … … 375 375 ENDELSE 376 376 ENDIF 377 378 return, fld379 377 380 378 IF debug_w THEN print, ' Vargrid : ', vargrid 381 379 IF debug_w THEN print, ' Leaving trends.pro' 382 380 381 return, fld 382 383 383 END 384 384 -
trunk/procs/yfx.pro
r71 r86 35 35 IF debug_w THEN print, ' cmd1_back = ', cmd1_back 36 36 IF debug_w THEN print, ' cmd2_back = ', cmd2_back 37 IF debug_w THEN print, ' grid1_full = ', grid1_full38 IF debug_w THEN print, ' grid2_full = ', grid2_full37 IF debug_w AND sw_diffg THEN print, ' grid1_full = ', grid1_full 38 IF debug_w AND sw_diffg THEN print, ' grid2_full = ', grid2_full 39 39 IF sw_diffg EQ 1 THEN BEGIN 40 40 jptb = jpt -
trunk/tools/density_binning/density_bin_IDL_gm/bin_sigma.pro
r2 r86 1 PRO bin_sigma, cmd, pfildi 1 PRO bin_sigma, cmd, pfildi, BOXZOOM = boxzoom, ALL_DATA = all_data 2 2 3 3 @common … … 28 28 ;;------------------------------------- 29 29 ; 30 grille,mask,glam,gphi,gdep,nx,ny,nz,premierx,premiery,premierz,dernierx,derniery,dernierz 31 30 32 31 ; a- read density and bowl [if sig_bowl=1] 33 32 … … 35 34 file_nam = strmid(file_name, 0, strlen(file_name)-4)+'T.nc' 36 35 vargrid = 'T' 37 sig = make_eos(file_nam, '', time_1 = time1_r, time_2 = time2_r )36 sig = make_eos(file_nam, '', time_1 = time1_r, time_2 = time2_r, BOXZOOM = boxzoom, ALL_DATA = all_data) 38 37 IF sig_bowl EQ 1 THEN BEGIN 39 38 sobwlmax = make_sobwlmax(file_nam, '', time_1 = time1_r, time_2 = time2_r) … … 41 40 sobwlmax = {data:0} 42 41 ENDELSE 42 43 mask = tmask[firstxt:lastxt, firstyt:lastyt, firstzt:lastzt] 43 44 44 45 ; b- define density grid -
trunk/usr/.hist_post_it
r78 r86 4 4 ------------- 5 5 6 field = data_read(cmd,' -','pltz', 2, 1, ZMTYP = 'yz_merid_180W')6 field = data_read(cmd,'t','pltt', 1, 1, ZMTYP = 't_nino_3') 7 7 8 boite_pltz = 178.000 182.000 -30.0000 30.0000 0.00000 9 400.000 10 pltz,{a:fld, d:'March 1949', n:'Meridional_Velocity (m/s) merid_180W', u:'m/s', g:'V'}, -999999., 0.500000,int = 0.01000000,/yz, boite=boite_pltz, zoom= 400,petit = [ 1, 1, 1],/rempli, LANDSCAPE = 1, NOCOLORBAR = 0, NOERASE = 0,xthick=2,ythick=2,zthick=2,sepdate=' ',label=3,c_annotation=c_anot_str, format = '(f6.2)',discret=coul_gmt[idx_cb1],div=n_elements(idx_cb0)-1,cb_label=levels_gmt[idx_cb0],ndayspm=calendar_type,cont_thick=2,type_yz='m',marge=[0,0,2,2], xcharsize= 1.00000, ycharsize= 1.00000,cell_fill=2 8 boite_pltspec= 0.00000 0.00000 0.169815 51.6981 9 plttg,power,period, 4.19495e-06, 25.1951,boite=boite_pltspec,reverse_y=1,nocontour=1,petit = [ 1, 1, 1],/rempli, LANDSCAPE = 1, NOCOLORBAR = 1, NOERASE = 0,xthick=2,ythick=2,zthick=2,sepdate=' ',label=3,c_annotation=c_anot_str, format = '(f5.0)',discret=coul_gmt[idx_cb1],div=n_elements(idx_cb0)-1,cb_label=levels_gmt[idx_cb0],ndayspm=calendar_type,cont_thick=2,type_yz='Pa',marge=[0,0,2,2], xcharsize= 1.00000, ycharsize= 1.00000,cell_fill=2 -
trunk/usr/init.pro
r78 r86 15 15 ; path definition 16 16 ; 17 !path = expand_path('+' + '/.autofs/home/mklod/SVN/ POST_IT') $ ; procs local home17 !path = expand_path('+' + '/.autofs/home/mklod/SVN/TRUNK') $ ; procs local home 18 18 + ':' + expand_path('+' + '/.autofs/home/mklod/SAXO_new_svn') $ ; saxo home 19 19 + ':' + expand_path('+' + !dir) … … 29 29 ; define default directories 30 30 ; 31 homedir = isadirectory('/.autofs/home/mklod/SVN/ POST_IT/', title = 'Select the default HOME directory')32 iodir = isadirectory('/.autofs/home/mklod/SVN/ POST_IT/', title = 'Select the default IO directory')33 psdir = isadirectory('/.autofs/home/mklod/SVN/ POST_IT/out/post_out/', title = 'Select the default postscripts directory')34 imagedir = isadirectory('/.autofs/home/mklod/SVN/ POST_IT/out/post_out/', title = 'Select the default images directory')35 animdir = isadirectory('/.autofs/home/mklod/SVN/ POST_IT/out/post_out/', title = 'Select the default animations directory')31 homedir = isadirectory('/.autofs/home/mklod/SVN/TRUNK/', title = 'Select the default HOME directory') 32 iodir = isadirectory('/.autofs/home/mklod/SVN/TRUNK/', title = 'Select the default IO directory') 33 psdir = isadirectory('/.autofs/home/mklod/SVN/TRUNK/out/post_out/', title = 'Select the default postscripts directory') 34 imagedir = isadirectory('/.autofs/home/mklod/SVN/TRUNK/out/post_out/', title = 'Select the default images directory') 35 animdir = isadirectory('/.autofs/home/mklod/SVN/TRUNK/out/post_out/', title = 'Select the default animations directory') 36 36 ; 37 37 ; define printer parameters -
trunk/usr/plt_def.pro
r78 r86 28 28 ; vertical domain 29 29 30 depth_z = 400 31 zoom_z = 400 32 33 hpa_min = 1034 hpa_max = 50030 depth_z = 400 ; m 31 zoom_z = 400 ; m 32 33 pres_min = 1000 ; Pa 34 pres_max = 100000 ; Pa 35 35 36 36 msf_mean = 0 37 37 38 ; vertical average for 3D fields 38 39 39 vert_type = ' z' ; 'z' for depth/altitude or 'level' or '0' for nothing40 vert_mean = [0, 10] ; [depth1,depth2] or [level1,level2] in C notation 0-jpk-141 ;vert_mean = [80000, 100000]40 vert_type = '0' ; 'z' for depth/altitude or 'level' or '0' for nothing 41 vert_mean = [0, 200] ; [depth1,depth2] or [level1,level2] in C notation 0-jpk-1 42 ; vert_mean = [90000, 100000] 42 43 43 44 ; density domain (sigma) + delta sigma 44 45 45 46 sig_min = 20. 46 sig_max = 2 7.47 sig_max = 28. 47 48 sig_del = 0.2 48 49 … … 231 232 data_domain = 'zonal' 232 233 data_domain = 'pacific' 233 ;data_domain = 'global'234 data_domain = 'global' 234 235 235 236 ; grids list (IPCC atmos regular) … … 237 238 238 239 ; machine type ('x' or 'WIN') 239 240 dev_type='x' 240 241 241 242 ; debug mode 242 243 debug_w = 1 243 244 244 245 END -
trunk/usr/post_it.pro
r78 r86 20 20 ;;'ERA40 = local:/home2/mkdlod/database/CORREL/', $ 21 21 'CDH4 = local:/home2/mkdlod/database/CDH4/', $ 22 '2L24 DEV= local:/home2/mkdlod/database/', $22 '2L24 = local:/home2/mkdlod/database/', $ 23 23 'NCEPDEV = local:/home2/mkdlod/database/', $ 24 24 'ERA40TDEV = local:/home2/mkdlod/database/', $ … … 31 31 ;'ncdf_db = local:/.autofs/home/mklod/IDL_WORK/', $ 32 32 ;;'ncdf_db = local:/home/ericg/backups/lemnos/home/database/', $ 33 ;'ncdf_db = local:/home2/mkdlod/database/TESTS/', $34 'ncdf_db = local:/home2/mkdlod/database/TiKE/', $33 'ncdf_db = local:/home2/mkdlod/database/TESTS/', $ 34 ;'ncdf_db = local:/home2/mkdlod/database/TiKE/', $ 35 35 ;'ncdf_db = local:/home2/mkdlod/database/', $ 36 36 ; Input databases … … 66 66 other_file = 'correl' 67 67 other_file = 'post_it2' 68 ;other_file = 'post_it_tests'68 other_file = 'post_it_tests' 69 69 ;other_file = '-' 70 70
Note: See TracChangeset
for help on using the changeset viewer.