Changeset 14


Ignore:
Timestamp:
12/13/06 15:58:23 (17 years ago)
Author:
pinsard
Message:

externalisation of outputs in condmag_on_orca.pro

Location:
trunk
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/condmag_on_orca.pro

    r10 r14  
    2121; to specify on which grid we do the interpolation T, U, V 
    2222; must belong to T, U or V 
     23; 
     24; @keyword DRAKKAR_EXP {type=string} 
     25; code for Drakkar experiment 
     26; only used when orcares = ORC025 
     27; must be G42 ++ G70 
    2328; 
    2429; @restrictions 
     
    4045; for ORCA2 filename is meshmask_bab.nc 
    4146; ++ au pif entre mesh_hgr, mesh_zgr et mask 
    42 ; for ORCA0252 filename is ORCA025-G42_mesh_hgr.nc  
     47; for ORCA0252 filename is ORCA025-G42_mesh_hgr.nc 
    4348; 
    4449; @post 
     
    5257; 
    5358; @history 
     59; reee522 2006-12-13T13:50:32Z rhodes (IRIX64) 
     60; add optional keyword drakkar_exp 
     61; reee522 2006-12-13T12:09:05Z rhodes (IRIX64) 
     62; externalisation of netcdf writing 
    5463; reee522 2006-11-23T13:34:31Z rhodes (IRIX64) 
    5564; add ORCA025 (beginning) 
     
    6372; ++ not very beautifuly implemented 
    6473; fplod 2006-11-22T10:38:51Z aedon.locean-ipsl.upmc.fr (Darwin) 
    65 ; always use msg = 'iii : ...' or msg = 'eee : ...'  
     74; always use msg = 'iii : ...' or msg = 'eee : ...' 
    6675; information on open io 
    6776; fplod 2006-11-20T10:32:02Z aedon.locean-ipsl.upmc.fr (Darwin) 
     
    8291; 
    8392;- 
    84 PRO condmag_on_orca, orcares, method, gridtype 
     93PRO condmag_on_orca, orcares, method, gridtype, DRAKKAR_EXP = drakkar_exp 
    8594; 
    8695  compile_opt idl2, strictarrsubs 
     
    94103  CASE orcares OF 
    95104     'ORCA2': BEGIN 
    96                  msg = 'iii : valid orcares parameter = ' +  orcares 
     105                 msg = 'iii : valid orcares parameter = ' + orcares 
    97106                 PRINT, msg 
    98107                 filename_oce = 'meshmask_bab.nc' 
     108                 IF keyword_set(DRAKKAR_EXP) THEN BEGIN 
     109                    msg = 'www : unused DRAKKAR_EXP keyword = ' + drakkar_exp 
     110                    PRINT, msg 
     111                 END 
    99112              END 
    100113     'ORCA025': BEGIN 
    101                  msg = 'iii : valid orcares parameter = ' +  orcares 
     114                 msg = 'iii : valid orcares parameter = ' + orcares 
    102115                 PRINT, msg 
    103                  filename_oce = orcares + '-G42_mesh_hgr.nc'  
     116                 IF keyword_set(DRAKKAR_EXP) THEN BEGIN 
     117                    msg = 'iii : DRAKKAR_EXP keyword set' 
     118                    PRINT, msg 
     119                    msg = 'iii : DRAKKAR_EXP = ' + drakkar_exp 
     120                    PRINT, msg 
     121                    CASE drakkar_exp OF 
     122                       'G42' : BEGIN 
     123                                  msg = 'iii : valid DRAKKAR_EXP keyword = ' + drakkar_exp 
     124                                  PRINT, msg 
     125                               END 
     126                       'G70' : BEGIN 
     127                                  msg = 'iii : valid DRAKKAR_EXP keyword = ' + drakkar_exp 
     128                                  PRINT, msg 
     129                               END 
     130                       ELSE : BEGIN 
     131                                  msg = 'eee : invalid DRAKKAR_EXP keyword = ' + drakkar_exp 
     132                                  PRINT, msg 
     133                                  RETURN 
     134                              END 
     135                    ENDCASE 
     136                    filename_oce = orcares + '-' + drakkar_exp + '_mesh_hgr.nc' 
     137                 END 
    104138              END 
    105139      ELSE  : BEGIN 
     
    123157                 END 
    124158     ELSE      : BEGIN 
    125                     msg = 'eee : invalid method parameter = ' + method  
     159                    msg = 'eee : invalid method parameter = ' + method 
    126160                    PRINT, msg 
    127161                    msg = 'eee : method must be bilinear or imoms3' 
     
    147181           END 
    148182     ELSE: BEGIN 
    149               msg = 'eee : invalid gridtype parameter = ' + gridtype  
     183              msg = 'eee : invalid gridtype parameter = ' + gridtype 
    150184              PRINT, msg 
    151185              msg = 'eee : gridtype must be T, U or V' 
     
    168202             msg = 'iii : ${GEOMAG_ID} is ' + geomag_id_env 
    169203             PRINT, msg 
    170            END  
     204           END 
    171205  ENDCASE 
    172206; 
     
    200234; mesh mask 
    201235; check if this file exists 
    202   fullfilename_oce = isafile(iodirin + filename_oce, NEW=0,/MUST_EXIST, RECURSIVE=0) 
     236  fullfilename_oce = isafile(iodirin + filename_oce, NEW=0, /MUST_EXIST, $ 
     237                     RECURSIVE=0) 
    203238  IF fullfilename_oce[0] EQ '' THEN BEGIN 
    204239     msg = 'eee : the file ' + fullfilename_oce + ' was not found.' 
     
    225260             msg = 'iii : ${GEOMAG_OD} is ' + geomag_od_env 
    226261             PRINT, msg 
    227            END  
     262           END 
    228263  ENDCASE 
    229264; 
     
    238273  ENDIF 
    239274; 
    240 ; build output filenames 
    241   filename_cond_sed = 'cond_sed' + '_' + orcares +'.nc' 
    242   fullfilename_cond_sed = iodirout + filename_cond_sed 
    243 ; 
    244 ; in order to avoid unexpected overwritten 
    245   IF (FILE_TEST(fullfilename_cond_sed) EQ 1) THEN BEGIN 
    246      msg = 'eee : the file ' + fullfilename_cond_sed  + ' already exists.' 
    247      PRINT, msg 
    248      RETURN 
    249   ENDIF 
    250 ; 
    251   filename_br = 'Br' + '_' + orcares +'.nc' 
    252   fullfilename_br = iodirout + filename_br 
    253 ; 
    254 ; in order to avoid unexpected overwritten 
    255   IF (FILE_TEST(fullfilename_br) EQ 1) THEN BEGIN 
    256      msg = 'eee : the file ' + fullfilename_br  + ' already exists.' 
    257      PRINT, msg 
    258      RETURN 
    259   ENDIF 
    260 ; 
    261275; d'après ncdump -h /usr/work/sur/fvi/OPA/geomag/condmag.nc 
    262276  condmaglonname = 'lo' 
    263277  condmaglatname = 'la' 
    264   varname_cond_sed = 'cond_sed' 
    265   varname_br = 'Br' 
    266278; 
    267279;---- 
     
    300312  msg = 'iii : ' + fullfilename_condmag[0] + ' opened for read' 
    301313  PRINT, msg 
    302    
     314; 
     315  varname_cond_sed = 'cond_sed' 
     316  varname_br = 'Br' 
     317; 
    303318  varinq_cond_sed = NCDF_VARINQ(netcdf_id_condmag, varname_cond_sed) 
     319  NCDF_VARGET, netcdf_id_condmag, varname_cond_sed, varin_cond_sed 
     320; 
    304321  varinq_br = NCDF_VARINQ(netcdf_id_condmag, varname_br) 
     322  NCDF_VARGET, netcdf_id_condmag, varname_br, varin_br 
     323; 
     324  NCDF_CLOSE, netcdf_id_condmag 
    305325; 
    306326;--------------------------- 
    307 ; Creation of the NetCdf file for cond_sed and Br 
    308 ;--------------------------- 
    309 ; 
    310   netcdf_id_cond_sed = NCDF_CREATE(fullfilename_cond_sed, /clobber) 
    311   NCDF_CONTROL, netcdf_id_cond_sed, /NOFILL 
    312   netcdf_id_br = NCDF_CREATE(fullfilename_br, /clobber) 
    313   NCDF_CONTROL, netcdf_id_br, /NOFILL 
    314 ; 
    315 ; dimension 
    316   dimidx = NCDF_DIMDEF(netcdf_id_cond_sed, 'x' ,  jpio) 
    317   dimidy = NCDF_DIMDEF(netcdf_id_cond_sed, 'y' ,  jpjo) 
    318   dimidt = NCDF_DIMDEF(netcdf_id_cond_sed, 'lo', /UNLIMITED) 
    319   dimidx = NCDF_DIMDEF(netcdf_id_br, 'x' ,  jpio) 
    320   dimidy = NCDF_DIMDEF(netcdf_id_br, 'y' ,  jpjo) 
    321   dimidt = NCDF_DIMDEF(netcdf_id_br, 'lo', /UNLIMITED) 
    322 ; 
    323 ; global attributes 
    324   NCDF_ATTPUT, netcdf_id_cond_sed, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformité 
    325   NCDF_ATTPUT, netcdf_id_cond_sed, 'file_name'  , filename_cond_sed, /GLOBAL 
    326   NCDF_ATTPUT, netcdf_id_cond_sed, 'Title'      , 'Conductance', /GLOBAL 
    327   NCDF_ATTPUT, netcdf_id_br, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformité 
    328   NCDF_ATTPUT, netcdf_id_br, 'file_name'  , filename_Br, /GLOBAL 
    329   NCDF_ATTPUT, netcdf_id_br, 'Title'      , 'Magnetic field', /GLOBAL 
    330 ; 
    331 ; declaration of variables 
    332 ; 4 common variables for the two files to produce 
    333   varid = lonarr(3) 
    334 ; 
    335   varid[0] = NCDF_VARDEF(netcdf_id_cond_sed, 'nav_lon'  , [dimidx, dimidy], /FLOAT) 
    336   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'units'    , 'degrees_east' 
    337   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'valid_min', min(olon, max = omax),/FLOAT 
    338   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'valid_max', omax,/FLOAT 
    339   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'long_name', 'Longitude at t-point' 
    340   varid[0] = NCDF_VARDEF(netcdf_id_br, 'nav_lon'  , [dimidx, dimidy], /FLOAT) 
    341   NCDF_ATTPUT, netcdf_id_br, varid[0], 'units'    , 'degrees_east' 
    342   NCDF_ATTPUT, netcdf_id_br, varid[0], 'valid_min', min(olon, max = omax),/FLOAT 
    343   NCDF_ATTPUT, netcdf_id_br, varid[0], 'valid_max', omax,/FLOAT 
    344   NCDF_ATTPUT, netcdf_id_br, varid[0], 'long_name', 'Longitude at t-point' 
    345 ; 
    346   varid[1] = NCDF_VARDEF(netcdf_id_cond_sed, 'nav_lat'  , [dimidx, dimidy], /FLOAT) 
    347   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'units'    , 'degrees_north' 
    348   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'valid_min', min(olat, max = omax),/FLOAT 
    349   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'valid_max', omax,/FLOAT 
    350   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'long_name', 'Latitude at t-point' 
    351   varid[1] = NCDF_VARDEF(netcdf_id_br, 'nav_lat'  , [dimidx, dimidy], /FLOAT) 
    352   NCDF_ATTPUT, netcdf_id_br, varid[1], 'units'    , 'degrees_north' 
    353   NCDF_ATTPUT, netcdf_id_br, varid[1], 'valid_min', min(olat, max = omax),/FLOAT 
    354   NCDF_ATTPUT, netcdf_id_br, varid[1], 'valid_max', omax,/FLOAT 
    355   NCDF_ATTPUT, netcdf_id_br, varid[1], 'long_name', 'Latitude at t-point' 
    356 ; 
    357   varid[2] = NCDF_VARDEF(netcdf_id_cond_sed, 'time'     , [dimidt], /FLOAT) 
    358   varid[2] = NCDF_VARDEF(netcdf_id_br, 'time'     , [dimidt], /FLOAT) 
    359 ; 
    360 ; each of the two files to produce contains a specific variable 
    361 ; 
    362   varid_cond_sed = lonarr(1) 
    363   varid_cond_sed[0] = NCDF_VARDEF(netcdf_id_cond_sed, varname_cond_sed, [dimidx, dimidy, dimidt], /FLOAT) 
    364 ; 
    365 ; variable 3 
    366   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'long_name', 'Conductance' ; ++ non cf  
    367   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'units', 'siemens' ; ++ récupérer l'unite de cond_sed dans condmag.nc 
    368 ; pour min  et max, il faut avoir lu la variable ... cf. plus bas ++ 
    369 ; donc pour l'instant on les met à valeur manquante 
    370   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', !VALUES.F_NAN ,/FLOAT 
    371   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', !VALUES.F_NAN ,/FLOAT 
    372 ; 
    373   varid_br = lonarr(1) 
    374   varid_br[0] = NCDF_VARDEF(netcdf_id_br, varname_br, [dimidx, dimidy, dimidt], /FLOAT) 
    375 ; 
    376 ; variable 3 
    377   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'long_name', 'magnetic field' ; ++ non cf  
    378   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'units', 'tesla' ; ++ récupérer l'unité de Br dans condmag.nc 
    379 ; pour min  et max, il faut avoir lu la variable ... cf. plus bas ++ 
    380 ; donc pour l'instant on les met à valeur manquante 
    381   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_min', !VALUES.F_NAN ,/FLOAT 
    382   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', !VALUES.F_NAN ,/FLOAT 
    383 ; 
    384 ;--------------------------- 
    385 ; end of header definition, writing of the NetCdf files 
    386 ;--------------------------- 
    387   NCDF_CONTROL, netcdf_id_cond_sed, /ENDEF 
    388   NCDF_CONTROL, netcdf_id_br, /ENDEF 
    389   NCDF_CLOSE, netcdf_id_condmag ; ++ si le close n'est pas ici ça merde mais je ne sais pas pourquoi 
    390 ; 
    391 ; grid 
    392   NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lon', olon 
    393   NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lat', olat 
    394   NCDF_VARPUT, netcdf_id_cond_sed, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 
    395   NCDF_VARPUT, netcdf_id_br, 'nav_lon', olon 
    396   NCDF_VARPUT, netcdf_id_br, 'nav_lat', olat 
    397   NCDF_VARPUT, netcdf_id_br, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 
    398  
    399 ;--------------------------- 
    400 ; réouverture du fichier ... mais pourquoi on le relit !!++ 
    401   netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0],/NOWRITE) 
    402   msg = 'iii : ' + fullfilename_condmag[0] + ' reopened for read' 
    403   PRINT, msg 
    404 ; 
    405   NCDF_VARGET, netcdf_id_condmag, varname_cond_sed, varin_cond_sed ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 
    406   NCDF_VARGET, netcdf_id_condmag, varname_br, varin_br ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 
    407 ; 
    408327; do the interpolation 
    409328      varin_cond_sed = TOTAL(weig*varin_cond_sed[addr], 1) 
     
    412331      varin_br = REFORM(varin_br, jpio, jpjo, /OVER) 
    413332; 
    414       NCDF_CLOSE, netcdf_id_condmag 
    415333      varout_cond_sed = TEMPORARY(varin_cond_sed) 
    416334      varout_br = TEMPORARY(varin_br) 
    417 ; compute min max 
    418       minarr_cond_sed = min(varout_cond_sed, max = maxarr_cond_sed) 
    419       minarr_br = min(varout_br, max = maxarr_br) 
    420335; 
    421336; put back the masked value 
     
    423338;++      IF bad[0] NE -1 THEN varout_br[TEMPORARY(bad)] = 32767 
    424339; 
    425 ; write the data 
    426       NCDF_VARPUT, netcdf_id_cond_sed, varname_cond_sed, varout_cond_sed, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 
    427       NCDF_VARPUT, netcdf_id_br, varname_br, varout_br, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 
    428 ; 
    429 ; update min max attributes 
    430   NCDF_CONTROL, netcdf_id_cond_sed, /REDEF 
    431   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', minarr_cond_sed,/FLOAT 
    432   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', maxarr_cond_sed,/FLOAT 
    433   NCDF_CONTROL, netcdf_id_cond_sed, /ENDEF 
    434   NCDF_CONTROL, netcdf_id_br, /REDEF 
    435   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_min', minarr_br,/FLOAT 
    436   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_max', maxarr_br,/FLOAT 
    437   NCDF_CONTROL, netcdf_id_br, /ENDEF 
    438 ; 
    439 ;--------------------------- 
    440 ; close the netcdf files 
    441   NCDF_CLOSE, netcdf_id_cond_sed 
    442   NCDF_CLOSE, netcdf_id_br 
    443 ; 
    444   msg = 'iii : ' + fullfilename_cond_sed + ' created' 
    445   PRINT, msg 
    446   msg = 'iii : ' + fullfilename_br + ' created' 
    447   PRINT, msg 
     340; 
     341; produce outputs 
     342  condmag_output, orcares, $ 
     343     varinq_cond_sed, 'Conductance', 'Conductance', 'siemens', $ 
     344     jpio, jpjo, olon, olat, $ 
     345     varout_cond_sed 
     346  condmag_output, orcares, $ 
     347     varinq_br, 'Magnetic field', 'magnetic field', 'tesla', $ 
     348     jpio, jpjo, olon, olat, $ 
     349     varout_br 
    448350; 
    449351END 
  • trunk/condmag_output.pro

    r10 r14  
    22; 
    33; @file_comments 
    4 ; interpolate condmag.nc file (sediment and magnetic fields) on ORCA grid 
    5 ; and produce cond_sed_<orcares>.nc and Br_<orcares>.nc 
     4; produce cond_sed_<orcares>.nc or Br_<orcares>.nc 
     5; dependent on orcares and variable parameters 
    66; 
    77; @categories 
    8 ; interpolation, orca grid 
     8; output, netcdf 
    99; 
    1010; @param orcares {in}{required}{type=string} 
     
    1212; must be 'ORCA2' or 'ORCA025' 
    1313; 
    14 ; @param method {in}{required}{type=string} 
    15 ; code for interpolation method 
    16 ; must be 'bilinear' or 'imoms3' 
    17 ; in fact bilinear is used in this geomag project 
    18 ; ++ est-ce que ce sera tjs vrai ? 
    19 ; 
    20 ; @param gridtype {in}{required}{type=string} 
    21 ; to specify on which grid we do the interpolation T, U, V 
    22 ; must belong to T, U or V 
     14; @param variable {in}{required}{type=structure return by NCDF_VARINQ} 
     15; { NAME:"", DATATYPE:"", NDIMS:0L, NATTS:0L, DIM:LONARR(NDIMS) }   
     16; variable of condmag.nc to be written  
     17; variable.NAME must be 'cond_sed' or 'Br' 
     18; 
     19; @param title {in}{required}{type=string} 
     20; title must belong_name  'Conductance' or 'Magnetic_field' ++ 
     21; 
     22; @param long_name {in}{required}{type=string} 
     23; long_name must be 'Conductance' or 'magnetic_field' ++ 
     24; 
     25; @param units {in}{required}{type=string} 
     26; units must be 'siemens' or 'tesla' 
     27; 
     28; @param jpio {in}{required}{type=integer} 
     29; x dimension of the 3d array to be written 
     30; must be greater than 1 
     31; 
     32; @param jpjo  {in}{required}{type=integer} 
     33; y dimension of the 3d array to be written 
     34; must be greater than 1 
     35; 
     36; @param olon {in}{required}{type=1d array of floats} 
     37; x++ longitude values 
     38; must be ++ 
     39; 
     40; @param olat {in}{required}{type=1d array of floats} 
     41; x++ latitude values 
     42; must be ++ 
     43; 
     44; @parameter values {in}{required}{type=nd array of variable.DATATYPE} 
     45; values of the variable to be written 
     46; ++ must be 
    2347; 
    2448; @restrictions 
    2549;  - Requires SAXO tools 
    26 ;  - must have condmag.nc in ${GEOMAG_ID}/ 
    27 ;  - must have meshmask for ORCA2 or ORCA025 in ${GEOMAG_ID}/ 
    28 ;  - must not have cond_sed_*.nc in ${GEOMAG_OD}/ 
    29 ;  - must not have Br_*.nc in ${GEOMAG_OD}/ 
    3050; 
    3151; @todo 
    32 ; provide tools to plot output files 
    3352; produce a NetCDF GDT or CF compliant 
     53; check if jpio and jpjo are not present in some "common" after getgridparam 
     54; in order to remove them from parameters 
    3455; 
    3556; @pre 
    36 ; be sure to have datafile condmag.nc in the directory defined in 
    37 ; ${GEOMAG_ID}/ see geomag_env.sh 
    38 ; be sure to have meshmask of ORCA grid you choose in the directory defined in 
    39 ; ${GEOMAG_ID}/ 
    40 ; for ORCA2 filename is meshmask_bab.nc 
    41 ; ++ au pif entre mesh_hgr, mesh_zgr et mask 
    42 ; for ORCA0252 filename is ORCA025-G42_mesh_hgr.nc  
     57; reading of condmag.nc  
     58; see condmag_on_orca.pro 
    4359; 
    4460; @post 
    4561; cond_sed_<I>orcasres</I>.nc is now present in ${GEOMAG_OD}/ 
     62; or 
    4663; Br_<I>orcasres</I>.nc is now present in ${GEOMAG_OD}/ 
    4764; see geomag_env.sh 
     
    4966; @examples 
    5067; IDL> .run condmag_on_orca 
    51 ; IDL> condmag_on_orca, 'ORCA2', 'bilinear','T' 
     68; IDL> condmag_output, 'ORCA2', 'cond_sed','Conductance','Conductance','siemens',jpio,jpjo,olon,olat, values 
    5269; 
    5370; @history 
    54 ; reee522 2006-11-23T13:34:31Z rhodes (IRIX64) 
    55 ; add ORCA025 (beginning) 
    56 ; reee522 2006-11-23T13:28:07Z rhodes (IRIX64) 
    57 ; information about the opening of meshmask file was missing ... because 
    58 ; the open is hidden in the call of get_gridparam 
    59 ; fplod 2006-11-23T08:57:10Z aedon.locean-ipsl.upmc.fr (Darwin) 
    60 ; rename to condmag_on_orca.pro 
    61 ; fplod 2006-11-22T15:10:31Z aedon.locean-ipsl.upmc.fr (Darwin) 
    62 ; add creation of Br_<I>orcasres</I>.nc 
    63 ; ++ not very beautifuly implemented 
    64 ; fplod 2006-11-22T10:38:51Z aedon.locean-ipsl.upmc.fr (Darwin) 
    65 ; always use msg = 'iii : ...' or msg = 'eee : ...'  
    66 ; information on open io 
    67 ; fplod 2006-11-20T10:32:02Z aedon.locean-ipsl.upmc.fr (Darwin) 
    68 ; cleaning before introduction into svn repository 
    69 ; fplod 2006-03-23T13:05:39Z aedon.lodyc.jussieu.fr (Darwin) 
    70 ; cond_sed_ORCA2 presque ok manque attributes min/max de cond_sed 
    71 ; fplod 2006-03-22T09:35:42Z aedon.lodyc.jussieu.fr (Darwin) 
    72 ; created from 
    73 ; /Users/fplod/incas/seb/DORAEMON/wind/idl/quikscat_to_orca_scalar.pro written 
    74 ; by Sebastien Masson 
    75 ; to reproduce  /usr/work/sur/fvi/OPA/geomag/cond_sed_ORCA2.nc 
    76 ; main differences : no yyyy parameter, no time loop , no mask and no missing 
    77 ; values (++ to be checked ) in data input (condmag.nc), no scale factor, 
    78 ; no OFFSET, no save of weight and addresses 
     71; reee522 2006-12-13T11:44:19Z rhodes (IRIX64) 
     72; add attributes in parameters list 
     73; reee522 2006-11-28T14:07:32Z rhodes (IRIX64) 
     74; written from current release of condmag_on_orca.pro 
    7975; 
    8076; @version 
     
    8278; 
    8379;- 
    84 PRO condmag_on_orca, orcares, method, gridtype 
     80PRO condmag_output, orcares, variable, title, long_name, units, jpio, jpjo, olon,olat,values 
    8581; 
    8682  compile_opt idl2, strictarrsubs 
     
    9692                 msg = 'iii : valid orcares parameter = ' +  orcares 
    9793                 PRINT, msg 
    98                  filename_oce = 'meshmask_bab.nc' 
    9994              END 
    10095     'ORCA025': BEGIN 
    10196                 msg = 'iii : valid orcares parameter = ' +  orcares 
    10297                 PRINT, msg 
    103                  filename_oce = orcares + '-G42_mesh_hgr.nc'  
    10498              END 
    10599      ELSE  : BEGIN 
     
    112106  ENDCASE 
    113107; 
    114 ; check method definition 
    115   CASE method OF 
    116      'bilinear': BEGIN 
    117                     msg = 'iii : valid method parameter = ' + method 
     108; check variable definition 
     109; ++ dimension etc. 
     110  CASE variable.NAME OF 
     111     'cond_sed': BEGIN 
     112                    msg = 'iii : valid variable.NAME parameter = ' + variable.NAME 
    118113                    PRINT, msg 
     114                    CASE title OF 
     115                       'Conductance': BEGIN 
     116                                     msg = 'iii : valid title parameter = ' + title 
     117                                     PRINT, msg 
     118                                  END 
     119                        ELSE      : BEGIN 
     120                                      msg = 'eee : invalid title parameter = ' + title 
     121                                      PRINT, msg 
     122                                      msg = 'eee : title must be Conductance' 
     123                                      PRINT, msg 
     124                                      RETURN 
     125                                   END 
     126                        ENDCASE 
     127                    CASE long_name OF 
     128                       'Conductance': BEGIN 
     129                                     msg = 'iii : valid long_name parameter = ' + long_name 
     130                                     PRINT, msg 
     131                                  END 
     132                        ELSE      : BEGIN 
     133                                      msg = 'eee : invalid long_name parameter = ' + long_name 
     134                                      PRINT, msg 
     135                                      msg = 'eee : long_name must be Conductance' 
     136                                      PRINT, msg 
     137                                      RETURN 
     138                                   END 
     139                        ENDCASE 
     140                    CASE units OF 
     141                       'siemens': BEGIN 
     142                                     msg = 'iii : valid units parameter = ' + units 
     143                                     PRINT, msg 
     144                                  END 
     145                        ELSE      : BEGIN 
     146                                      msg = 'eee : invalid units parameter = ' + units 
     147                                      PRINT, msg 
     148                                      msg = 'eee : units must be siemens' 
     149                                      PRINT, msg 
     150                                      RETURN 
     151                                   END 
     152                        ENDCASE 
    119153                 END 
    120      'imoms3'  : BEGIN 
    121                     msg = 'iii : valid method parameter = ' + method 
     154     'Br'  : BEGIN 
     155                    msg = 'iii : valid variable.NAME parameter = ' + variable.NAME 
    122156                    PRINT, msg 
     157                    CASE title OF 
     158                       'Magnetic field': BEGIN 
     159                                     msg = 'iii : valid title parameter = ' + title 
     160                                     PRINT, msg 
     161                                  END 
     162                        ELSE      : BEGIN 
     163                                      msg = 'eee : invalid title parameter = ' + title 
     164                                      PRINT, msg 
     165                                      msg = 'eee : title must be Magnetic field' 
     166                                      PRINT, msg 
     167                                      RETURN 
     168                                   END 
     169                        ENDCASE 
     170                    CASE long_name OF 
     171                       'magnetic field': BEGIN 
     172                                     msg = 'iii : valid long_name parameter = ' + long_name 
     173                                     PRINT, msg 
     174                                  END 
     175                        ELSE      : BEGIN 
     176                                      msg = 'eee : invalid long_name parameter = ' + long_name 
     177                                      PRINT, msg 
     178                                      msg = 'eee : long_name must be magnetic field' 
     179                                      PRINT, msg 
     180                                      RETURN 
     181                                   END 
     182                        ENDCASE 
     183                    CASE units OF 
     184                       'tesla': BEGIN 
     185                                     msg = 'iii : valid units parameter = ' + units 
     186                                     PRINT, msg 
     187                                  END 
     188                        ELSE      : BEGIN 
     189                                      msg = 'eee : invalid units parameter = ' + units 
     190                                      PRINT, msg 
     191                                      msg = 'eee : units must be tesla' 
     192                                      PRINT, msg 
     193                                      RETURN 
     194                                   END 
     195                        ENDCASE 
    123196                 END 
    124197     ELSE      : BEGIN 
    125                     msg = 'eee : invalid method parameter = ' + method  
     198                    msg = 'eee : invalid variable.NAME parameter = ' + variable.NAME 
    126199                    PRINT, msg 
    127                     msg = 'eee : method must be bilinear or imoms3' 
     200                    msg = 'eee : variable.NAME must be cond_sed or Br' 
    128201                    PRINT, msg 
    129202                    RETURN 
     
    131204  ENDCASE 
    132205; 
    133 ; check gridtype definition 
    134   gridtype = strupcase(gridtype) 
    135   CASE gridtype OF 
    136      'T' : BEGIN 
    137               msg = 'iii : valid gridtype parameter = ' + gridtype 
    138               PRINT, msg 
    139            END 
    140      'U' : BEGIN 
    141               msg = 'iii : valid gridtype parameter = ' + gridtype 
    142               PRINT, msg 
    143            END 
    144      'V' : BEGIN 
    145               msg = 'iii : valid gridtype parameter = ' + gridtype 
    146               PRINT, msg 
    147            END 
    148      ELSE: BEGIN 
    149               msg = 'eee : invalid gridtype parameter = ' + gridtype  
    150               PRINT, msg 
    151               msg = 'eee : gridtype must be T, U or V' 
    152               PRINT, msg 
    153               RETURN 
    154            END 
    155   ENDCASE 
    156 ; 
    157 ; check for input files 
    158 ; 
    159 ; test if ${GEOMAG_ID} defined 
    160   geomag_id_env=GETENV('GEOMAG_ID') 
    161   CASE geomag_id_env OF 
    162      ''  :  BEGIN 
    163               msg = 'eee : ${GEOMAG_ID} is not defined' 
    164               PRINT, msg 
    165               RETURN 
    166             END 
    167      ELSE: BEGIN 
    168              msg = 'iii : ${GEOMAG_ID} is ' + geomag_id_env 
    169              PRINT, msg 
    170            END  
    171   ENDCASE 
    172 ; 
    173   iodirin = isadirectory(geomag_id_env) 
    174 ; 
    175 ; existence and protection of ${GEOMAG_ID} 
    176   IF (FILE_TEST(iodirin, /DIRECTORY,/EXECUTABLE , /READ) EQ 0) THEN BEGIN 
    177      msg = 'eee : the directory' + iodirin  + ' is not accessible.' 
    178      PRINT, msg 
    179      RETURN 
    180   ENDIF 
    181 ; 
    182 ; conductivity and magnetic field 
    183   filename_condmag = 'condmag.nc' 
    184 ; 
    185 ; check if this file exists 
    186   fullfilename_condmag = isafile(iodirin + filename_condmag, NEW=0,/MUST_EXIST) 
    187   IF fullfilename_condmag[0] EQ '' THEN BEGIN 
    188      msg = 'eee : the file ' + fullfilename_condmag + ' was not found.' 
    189      PRINT, msg 
    190      RETURN 
    191   ENDIF 
    192 ; 
    193 ; protection 
    194   IF (FILE_TEST(fullfilename_condmag[0], /READ) EQ 0) THEN BEGIN 
    195      msg = 'eee : the file ' + fullfilename_condmag[0] + ' is not readable.' 
    196      PRINT, msg 
    197      RETURN 
    198   ENDIF 
    199 ; 
    200 ; mesh mask 
    201 ; check if this file exists 
    202   fullfilename_oce = isafile(iodirin + filename_oce, NEW=0,/MUST_EXIST, RECURSIVE=0) 
    203   IF fullfilename_oce[0] EQ '' THEN BEGIN 
    204      msg = 'eee : the file ' + fullfilename_oce + ' was not found.' 
    205      PRINT, msg 
    206      RETURN 
    207   ENDIF 
    208 ; 
    209 ; protection 
    210   IF (FILE_TEST(fullfilename_oce[0], /READ) EQ 0) THEN BEGIN 
    211      msg = 'eee : the file ' + fullfileoce_condmag[0] + ' is not readable.' 
    212      PRINT, msg 
    213      RETURN 
    214   ENDIF 
    215 ; 
     206; check jpio 
     207  IF jpio LT 1 THEN BEGIN 
     208     msg = ' eee : invalid jpio parameter = ' + STRING(jpio) 
     209     PRINT, msg 
     210     msg = ' eee : jpio must be greater or equal to 1' 
     211     PRINT, msg 
     212     RETURN 
     213  ENDIF ELSE BEGIN 
     214     msg = 'iii : valid jpio parameter = ' + STRING(jpio) 
     215     PRINT, msg 
     216  ENDELSE 
     217 
     218; 
     219; check jpjo 
     220  IF jpjo LT 1 THEN BEGIN 
     221     msg = ' eee : invalid jpjo parameter = ' + STRING(jpjo) 
     222     PRINT, msg 
     223     msg = ' eee : jpjo must be greater or equal to 1' 
     224     PRINT, msg 
     225     RETURN 
     226  ENDIF ELSE BEGIN 
     227     msg = 'iii : valid jpjo parameter = ' + STRING(jpjo) 
     228     PRINT, msg 
     229  ENDELSE 
     230; 
     231; check olon ++ what to check 
     232; when decided reproduce with olat ++ 
     233  IF (N_ELEMENTS(olon) NE jpio*jpjo) THEN BEGIN 
     234     msg = ' eee : invalid nb of elements of olon parameter = ' + STRING(N_ELEMENTS(olon)) 
     235     PRINT, msg 
     236     msg = ' eee : nb of elements of olon must be equal to jpio*jpjo = ' + STRING(jpio*jpjo) 
     237     PRINT, msg 
     238     RETURN 
     239  ENDIF ELSE BEGIN 
     240     msg = 'iii : valid nb of elements olon parameter'  
     241     PRINT, msg 
     242  ENDELSE 
     243; 
     244; check values ++ 
     245 
    216246; test if ${GEOMAG_OD} defined 
    217247  geomag_od_env=GETENV('GEOMAG_OD') 
     
    239269; 
    240270; build output filenames 
    241   filename_cond_sed = 'cond_sed' + '_' + orcares +'.nc' 
    242   fullfilename_cond_sed = iodirout + filename_cond_sed 
     271  filename = variable.NAME + '_' + orcares +'.nc' 
     272  fullfilename = iodirout + filename 
    243273; 
    244274; in order to avoid unexpected overwritten 
    245   IF (FILE_TEST(fullfilename_cond_sed) EQ 1) THEN BEGIN 
    246      msg = 'eee : the file ' + fullfilename_cond_sed  + ' already exists.' 
     275  IF (FILE_TEST(fullfilename) EQ 1) THEN BEGIN 
     276     msg = 'eee : the file ' + fullfilename  + ' already exists.' 
    247277     PRINT, msg 
    248278     RETURN 
    249279  ENDIF 
    250280; 
    251   filename_br = 'Br' + '_' + orcares +'.nc' 
    252   fullfilename_br = iodirout + filename_br 
    253 ; 
    254 ; in order to avoid unexpected overwritten 
    255   IF (FILE_TEST(fullfilename_br) EQ 1) THEN BEGIN 
    256      msg = 'eee : the file ' + fullfilename_br  + ' already exists.' 
    257      PRINT, msg 
    258      RETURN 
    259   ENDIF 
    260 ; 
    261281; d'après ncdump -h /usr/work/sur/fvi/OPA/geomag/condmag.nc 
     282; ces lignes n'ont rien a faire la ++ ces information devrait etre en parameter 
    262283  condmaglonname = 'lo' 
    263284  condmaglatname = 'la' 
    264   varname_cond_sed = 'cond_sed' 
    265   varname_br = 'Br' 
    266 ; 
    267 ;---- 
    268 ; conductivity and magnetic field grid parameters 
    269 ;---- 
    270 ; 
    271   get_gridparams, fullfilename_condmag[0], $ 
    272      condmaglonname, condmaglatname, $ 
    273      condmaglon, condmaglat, jpia, jpja, 1,/DOUBLE 
    274 ; 
    275 ;---- 
    276 ; Oceanic grid parameters 
    277 ;---- 
    278 ; 
    279   olonname = 'glam' + STRLOWCASE(gridtype) 
    280   olatname = 'gphi' + STRLOWCASE(gridtype) 
    281   get_gridparams, fullfilename_oce[0], $ 
    282      olonname, olatname, $ 
    283      olon, olat, jpio, jpjo, 2,/DOUBLE 
    284   msg = 'iii : ' + fullfilename_oce[0] + ' opened for read' 
    285   PRINT, msg 
    286 ; 
    287 ;--------------- 
    288 ; Compute weight and address 
    289 ;--------------- 
    290 ; 
    291   CASE method OF 
    292      'bilinear': compute_fromreg_bilinear_weigaddr, $ 
    293                     condmaglon, condmaglat, olon, olat, weig, addr 
    294      'imoms3'  : compute_fromreg_imoms3_weigaddr, $ 
    295                     condmaglon, condmaglat, olon, olat, weig, addr 
    296   ENDCASE 
    297 ; 
    298 ; reading condmag file 
    299   netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0], /NOWRITE) 
    300   msg = 'iii : ' + fullfilename_condmag[0] + ' opened for read' 
    301   PRINT, msg 
    302    
    303   varinq_cond_sed = NCDF_VARINQ(netcdf_id_condmag, varname_cond_sed) 
    304   varinq_br = NCDF_VARINQ(netcdf_id_condmag, varname_br) 
    305 ; 
    306 ;--------------------------- 
    307 ; Creation of the NetCdf file for cond_sed and Br 
    308 ;--------------------------- 
    309 ; 
    310   netcdf_id_cond_sed = NCDF_CREATE(fullfilename_cond_sed, /clobber) 
    311   NCDF_CONTROL, netcdf_id_cond_sed, /NOFILL 
    312   netcdf_id_br = NCDF_CREATE(fullfilename_br, /clobber) 
    313   NCDF_CONTROL, netcdf_id_br, /NOFILL 
     285  varname = variable.NAME 
     286; 
     287;--------------------------- 
     288; Creation of the NetCdf output file 
     289;--------------------------- 
     290; 
     291  netcdf_id = NCDF_CREATE(fullfilename, /clobber) 
     292  NCDF_CONTROL, netcdf_id, /NOFILL 
    314293; 
    315294; dimension 
    316   dimidx = NCDF_DIMDEF(netcdf_id_cond_sed, 'x' ,  jpio) 
    317   dimidy = NCDF_DIMDEF(netcdf_id_cond_sed, 'y' ,  jpjo) 
    318   dimidt = NCDF_DIMDEF(netcdf_id_cond_sed, 'lo', /UNLIMITED) 
    319   dimidx = NCDF_DIMDEF(netcdf_id_br, 'x' ,  jpio) 
    320   dimidy = NCDF_DIMDEF(netcdf_id_br, 'y' ,  jpjo) 
    321   dimidt = NCDF_DIMDEF(netcdf_id_br, 'lo', /UNLIMITED) 
     295  dimidx = NCDF_DIMDEF(netcdf_id, 'x' ,  jpio) 
     296  dimidy = NCDF_DIMDEF(netcdf_id, 'y' ,  jpjo) 
     297  dimidt = NCDF_DIMDEF(netcdf_id, 'lo', /UNLIMITED) 
    322298; 
    323299; global attributes 
    324   NCDF_ATTPUT, netcdf_id_cond_sed, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformité 
    325   NCDF_ATTPUT, netcdf_id_cond_sed, 'file_name'  , filename_cond_sed, /GLOBAL 
    326   NCDF_ATTPUT, netcdf_id_cond_sed, 'Title'      , 'Conductance', /GLOBAL 
    327   NCDF_ATTPUT, netcdf_id_br, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformité 
    328   NCDF_ATTPUT, netcdf_id_br, 'file_name'  , filename_Br, /GLOBAL 
    329   NCDF_ATTPUT, netcdf_id_br, 'Title'      , 'Magnetic field', /GLOBAL 
     300  NCDF_ATTPUT, netcdf_id, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformite 
     301  NCDF_ATTPUT, netcdf_id, 'file_name'  , filename, /GLOBAL 
     302  NCDF_ATTPUT, netcdf_id, 'Title'      , title, /GLOBAL 
    330303; 
    331304; declaration of variables 
    332305; 4 common variables for the two files to produce 
    333   varid = lonarr(3) 
    334 ; 
    335   varid[0] = NCDF_VARDEF(netcdf_id_cond_sed, 'nav_lon'  , [dimidx, dimidy], /FLOAT) 
    336   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'units'    , 'degrees_east' 
    337   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'valid_min', min(olon, max = omax),/FLOAT 
    338   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'valid_max', omax,/FLOAT 
    339   NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'long_name', 'Longitude at t-point' 
    340   varid[0] = NCDF_VARDEF(netcdf_id_br, 'nav_lon'  , [dimidx, dimidy], /FLOAT) 
    341   NCDF_ATTPUT, netcdf_id_br, varid[0], 'units'    , 'degrees_east' 
    342   NCDF_ATTPUT, netcdf_id_br, varid[0], 'valid_min', min(olon, max = omax),/FLOAT 
    343   NCDF_ATTPUT, netcdf_id_br, varid[0], 'valid_max', omax,/FLOAT 
    344   NCDF_ATTPUT, netcdf_id_br, varid[0], 'long_name', 'Longitude at t-point' 
    345 ; 
    346   varid[1] = NCDF_VARDEF(netcdf_id_cond_sed, 'nav_lat'  , [dimidx, dimidy], /FLOAT) 
    347   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'units'    , 'degrees_north' 
    348   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'valid_min', min(olat, max = omax),/FLOAT 
    349   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'valid_max', omax,/FLOAT 
    350   NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'long_name', 'Latitude at t-point' 
    351   varid[1] = NCDF_VARDEF(netcdf_id_br, 'nav_lat'  , [dimidx, dimidy], /FLOAT) 
    352   NCDF_ATTPUT, netcdf_id_br, varid[1], 'units'    , 'degrees_north' 
    353   NCDF_ATTPUT, netcdf_id_br, varid[1], 'valid_min', min(olat, max = omax),/FLOAT 
    354   NCDF_ATTPUT, netcdf_id_br, varid[1], 'valid_max', omax,/FLOAT 
    355   NCDF_ATTPUT, netcdf_id_br, varid[1], 'long_name', 'Latitude at t-point' 
    356 ; 
    357   varid[2] = NCDF_VARDEF(netcdf_id_cond_sed, 'time'     , [dimidt], /FLOAT) 
    358   varid[2] = NCDF_VARDEF(netcdf_id_br, 'time'     , [dimidt], /FLOAT) 
    359 ; 
    360 ; each of the two files to produce contains a specific variable 
    361 ; 
    362   varid_cond_sed = lonarr(1) 
    363   varid_cond_sed[0] = NCDF_VARDEF(netcdf_id_cond_sed, varname_cond_sed, [dimidx, dimidy, dimidt], /FLOAT) 
    364 ; 
    365 ; variable 3 
    366   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'long_name', 'Conductance' ; ++ non cf  
    367   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'units', 'siemens' ; ++ récupérer l'unite de cond_sed dans condmag.nc 
     306  varid = lonarr(4) 
     307; 
     308  varid[0] = NCDF_VARDEF(netcdf_id, 'nav_lon'  , [dimidx, dimidy], /FLOAT) 
     309  NCDF_ATTPUT, netcdf_id, varid[0], 'units'    , 'degrees_east' 
     310  NCDF_ATTPUT, netcdf_id, varid[0], 'valid_min', min(olon, max = omax),/FLOAT 
     311  NCDF_ATTPUT, netcdf_id, varid[0], 'valid_max', omax,/FLOAT 
     312  NCDF_ATTPUT, netcdf_id, varid[0], 'long_name', 'Longitude at t-point' 
     313; 
     314  varid[1] = NCDF_VARDEF(netcdf_id, 'nav_lat'  , [dimidx, dimidy], /FLOAT) 
     315  NCDF_ATTPUT, netcdf_id, varid[1], 'units'    , 'degrees_north' 
     316  NCDF_ATTPUT, netcdf_id, varid[1], 'valid_min', min(olat, max = omax),/FLOAT 
     317  NCDF_ATTPUT, netcdf_id, varid[1], 'valid_max', omax,/FLOAT 
     318  NCDF_ATTPUT, netcdf_id, varid[1], 'long_name', 'Latitude at t-point' 
     319; 
     320  varid[2] = NCDF_VARDEF(netcdf_id, 'time'     , [dimidt], /FLOAT) 
     321; 
     322  varid[3] =  NCDF_VARDEF(netcdf_id, varname, [dimidx, dimidy, dimidt], /FLOAT) 
     323  NCDF_ATTPUT, netcdf_id, varid[3], 'long_name', long_name 
     324  NCDF_ATTPUT, netcdf_id, varid[3], 'units', units 
    368325; pour min  et max, il faut avoir lu la variable ... cf. plus bas ++ 
    369326; donc pour l'instant on les met à valeur manquante 
    370   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', !VALUES.F_NAN ,/FLOAT 
    371   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', !VALUES.F_NAN ,/FLOAT 
    372 ; 
    373   varid_br = lonarr(1) 
    374   varid_br[0] = NCDF_VARDEF(netcdf_id_br, varname_br, [dimidx, dimidy, dimidt], /FLOAT) 
    375 ; 
    376 ; variable 3 
    377   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'long_name', 'magnetic field' ; ++ non cf  
    378   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'units', 'tesla' ; ++ récupérer l'unité de Br dans condmag.nc 
    379 ; pour min  et max, il faut avoir lu la variable ... cf. plus bas ++ 
    380 ; donc pour l'instant on les met à valeur manquante 
    381   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_min', !VALUES.F_NAN ,/FLOAT 
    382   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', !VALUES.F_NAN ,/FLOAT 
     327  NCDF_ATTPUT, netcdf_id, varid[3], 'valid_min', !VALUES.F_NAN ,/FLOAT 
     328  NCDF_ATTPUT, netcdf_id, varid[3], 'valid_max', !VALUES.F_NAN ,/FLOAT 
    383329; 
    384330;--------------------------- 
    385331; end of header definition, writing of the NetCdf files 
    386332;--------------------------- 
    387   NCDF_CONTROL, netcdf_id_cond_sed, /ENDEF 
    388   NCDF_CONTROL, netcdf_id_br, /ENDEF 
    389   NCDF_CLOSE, netcdf_id_condmag ; ++ si le close n'est pas ici ça merde mais je ne sais pas pourquoi 
    390 ; 
    391 ; grid 
    392   NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lon', olon 
    393   NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lat', olat 
    394   NCDF_VARPUT, netcdf_id_cond_sed, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 
    395   NCDF_VARPUT, netcdf_id_br, 'nav_lon', olon 
    396   NCDF_VARPUT, netcdf_id_br, 'nav_lat', olat 
    397   NCDF_VARPUT, netcdf_id_br, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 
     333; 
     334  NCDF_CONTROL, netcdf_id, /ENDEF 
     335; 
     336  NCDF_VARPUT, netcdf_id, 'nav_lon', olon 
     337  NCDF_VARPUT, netcdf_id, 'nav_lat', olat 
     338  NCDF_VARPUT, netcdf_id, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 
    398339 
    399340;--------------------------- 
    400 ; réouverture du fichier ... mais pourquoi on le relit !!++ 
    401   netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0],/NOWRITE) 
    402   msg = 'iii : ' + fullfilename_condmag[0] + ' reopened for read' 
     341; 
     342; compute min max 
     343      minarr = min(values, max = maxarr) 
     344; 
     345; put back the masked value 
     346;++      IF bad[0] NE -1 THEN values[TEMPORARY(bad)] = 32767 
     347; 
     348; write the data 
     349      NCDF_VARPUT, netcdf_id, varname, values, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 
     350; 
     351; update min max attributes 
     352  NCDF_CONTROL, netcdf_id, /REDEF 
     353  NCDF_ATTPUT, netcdf_id, varid[3], 'valid_min', minarr,/FLOAT 
     354  NCDF_ATTPUT, netcdf_id, varid[3], 'valid_max', maxarr,/FLOAT 
     355  NCDF_CONTROL, netcdf_id, /ENDEF 
     356; 
     357;--------------------------- 
     358; close the netcdf files 
     359  NCDF_CLOSE, netcdf_id 
     360; 
     361  msg = 'iii : ' + fullfilename + ' created' 
    403362  PRINT, msg 
    404363; 
    405   NCDF_VARGET, netcdf_id_condmag, varname_cond_sed, varin_cond_sed ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 
    406   NCDF_VARGET, netcdf_id_condmag, varname_br, varin_br ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 
    407 ; 
    408 ; do the interpolation 
    409       varin_cond_sed = TOTAL(weig*varin_cond_sed[addr], 1) 
    410       varin_cond_sed = REFORM(varin_cond_sed, jpio, jpjo, /OVER) 
    411       varin_br = TOTAL(weig*varin_br[addr], 1) 
    412       varin_br = REFORM(varin_br, jpio, jpjo, /OVER) 
    413 ; 
    414       NCDF_CLOSE, netcdf_id_condmag 
    415       varout_cond_sed = TEMPORARY(varin_cond_sed) 
    416       varout_br = TEMPORARY(varin_br) 
    417 ; compute min max 
    418       minarr_cond_sed = min(varout_cond_sed, max = maxarr_cond_sed) 
    419       minarr_br = min(varout_br, max = maxarr_br) 
    420 ; 
    421 ; put back the masked value 
    422 ;++      IF bad[0] NE -1 THEN varout_cond_sed[TEMPORARY(bad)] = 32767 
    423 ;++      IF bad[0] NE -1 THEN varout_br[TEMPORARY(bad)] = 32767 
    424 ; 
    425 ; write the data 
    426       NCDF_VARPUT, netcdf_id_cond_sed, varname_cond_sed, varout_cond_sed, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 
    427       NCDF_VARPUT, netcdf_id_br, varname_br, varout_br, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 
    428 ; 
    429 ; update min max attributes 
    430   NCDF_CONTROL, netcdf_id_cond_sed, /REDEF 
    431   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', minarr_cond_sed,/FLOAT 
    432   NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', maxarr_cond_sed,/FLOAT 
    433   NCDF_CONTROL, netcdf_id_cond_sed, /ENDEF 
    434   NCDF_CONTROL, netcdf_id_br, /REDEF 
    435   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_min', minarr_br,/FLOAT 
    436   NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_max', maxarr_br,/FLOAT 
    437   NCDF_CONTROL, netcdf_id_br, /ENDEF 
    438 ; 
    439 ;--------------------------- 
    440 ; close the netcdf files 
    441   NCDF_CLOSE, netcdf_id_cond_sed 
    442   NCDF_CLOSE, netcdf_id_br 
    443 ; 
    444   msg = 'iii : ' + fullfilename_cond_sed + ' created' 
    445   PRINT, msg 
    446   msg = 'iii : ' + fullfilename_br + ' created' 
    447   PRINT, msg 
    448 ; 
    449364END 
Note: See TracChangeset for help on using the changeset viewer.