- Timestamp:
- 11/23/06 10:01:24 (17 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/condmag_on_orca.pro
r5 r6 3 3 ; @file_comments 4 4 ; interpolate condmag.nc file (sediment and magnetic fields) on ORCA grid 5 ; and produce one file cond_sed_<orcares>.nc5 ; and produce cond_sed_<orcares>.nc and Br_<orcares>.nc 6 6 ; 7 7 ; @categories … … 27 27 ; - must have meshmask in ${GEOMAG_ID}/ 28 28 ; - must not have cond_sed_*.nc in ${GEOMAG_OD}/ 29 ; - must not have Br_*.nc in ${GEOMAG_OD}/ 29 30 ; 30 31 ; @todo … … 42 43 ; @post 43 44 ; cond_sed_<I>orcasres</I>.nc is now present in ${GEOMAG_OD}/ 45 ; Br_<I>orcasres</I>.nc is now present in ${GEOMAG_OD}/ 44 46 ; see geomag_env.sh 45 47 ; 46 48 ; @examples 47 ; IDL> .run condmag_ cond_sed_on_orca48 ; IDL> condmag_ cond_sed_on_orca, 'ORCA2', 'bilinear','T'49 ; IDL> .run condmag_on_orca 50 ; IDL> condmag_on_orca, 'ORCA2', 'bilinear','T' 49 51 ; 50 52 ; @history 53 ; fplod 2006-11-23T08:57:10Z aedon.locean-ipsl.upmc.fr (Darwin) 54 ; rename to condmag_on_orca.pro 55 ; fplod 2006-11-22T15:10:31Z aedon.locean-ipsl.upmc.fr (Darwin) 56 ; add creation of Br_<I>orcasres</I>.nc 57 ; ++ not very beautifuly implemented 58 ; fplod 2006-11-22T10:38:51Z aedon.locean-ipsl.upmc.fr (Darwin) 59 ; always use msg = 'iii : ...' or msg = 'eee : ...' 60 ; information on open io 51 61 ; fplod 2006-11-20T10:32:02Z aedon.locean-ipsl.upmc.fr (Darwin) 52 62 ; cleaning before introduction into svn repository … … 66 76 ; 67 77 ;- 68 PRO condmag_ cond_sed_on_orca, orcares, method, gridtype78 PRO condmag_on_orca, orcares, method, gridtype 69 79 ; 70 80 compile_opt idl2, strictarrsubs … … 78 88 CASE orcares OF 79 89 'ORCA2': BEGIN 90 msg = 'iii : valid orcares parameter = ' + orcares 91 PRINT, msg 80 92 filename_oce = 'meshmask_bab.nc' 81 PRINT, 'valid orcares parameter'82 93 END 83 94 ELSE : BEGIN 84 msg = 'orcares must be ORCA2' 95 msg = 'eee : invalid orcares parameter = ' + orcares 96 PRINT, msg 97 msg = 'eee : orcares must be ORCA2' 85 98 PRINT, msg 86 99 RETURN … … 91 104 CASE method OF 92 105 'bilinear': BEGIN 93 PRINT, 'valid method parameter' 106 msg = 'iii : valid method parameter = ' + method 107 PRINT, msg 94 108 END 95 109 'imoms3' : BEGIN 96 PRINT, 'valid method parameter' 110 msg = 'iii : valid method parameter = ' + method 111 PRINT, msg 97 112 END 98 113 ELSE : BEGIN 99 msg = 'method must be bilinear or imoms3' 114 msg = 'eee : invalid method parameter = ' + method 115 PRINT, msg 116 msg = 'eee : method must be bilinear or imoms3' 100 117 PRINT, msg 101 118 RETURN … … 107 124 CASE gridtype OF 108 125 'T' : BEGIN 109 PRINT, 'valid gridtype parameter' 126 msg = 'iii : valid gridtype parameter = ' + gridtype 127 PRINT, msg 110 128 END 111 129 'U' : BEGIN 112 PRINT, 'valid gridtype parameter' 130 msg = 'iii : valid gridtype parameter = ' + gridtype 131 PRINT, msg 113 132 END 114 133 'V' : BEGIN 115 PRINT, 'valid gridtype parameter' 134 msg = 'iii : valid gridtype parameter = ' + gridtype 135 PRINT, msg 116 136 END 117 137 ELSE: BEGIN 118 msg = 'gridtype must be T, U or V' 138 msg = 'eee : invalid gridtype parameter = ' + gridtype 139 PRINT, msg 140 msg = 'eee : gridtype must be T, U or V' 119 141 PRINT, msg 120 142 RETURN … … 128 150 CASE geomag_id_env OF 129 151 '' : BEGIN 130 msg = ' ${GEOMAG_ID} is not defined'152 msg = 'eee : ${GEOMAG_ID} is not defined' 131 153 PRINT, msg 132 154 RETURN 133 155 END 134 156 ELSE: BEGIN 135 msg = ' ${GEOMAG_ID} is ' + geomag_id_env157 msg = 'iii : ${GEOMAG_ID} is ' + geomag_id_env 136 158 PRINT, msg 137 159 END … … 142 164 ; existence and protection of ${GEOMAG_ID} 143 165 IF (FILE_TEST(iodirin, /DIRECTORY,/EXECUTABLE , /READ) EQ 0) THEN BEGIN 144 msg = ' the directory' + iodirin + ' is not accessible.'166 msg = 'eee : the directory' + iodirin + ' is not accessible.' 145 167 PRINT, msg 146 168 RETURN … … 151 173 ; 152 174 ; check if this file exists 153 fullfilename_condmag = isafile(iodirin + filename_condmag )175 fullfilename_condmag = isafile(iodirin + filename_condmag, NEW=0,/MUST_EXIST) 154 176 IF fullfilename_condmag[0] EQ '' THEN BEGIN 155 msg = ' the file ' + fullfilename_condmag + ' was not found.'177 msg = 'eee : the file ' + fullfilename_condmag + ' was not found.' 156 178 PRINT, msg 157 179 RETURN … … 160 182 ; protection 161 183 IF (FILE_TEST(fullfilename_condmag[0], /READ) EQ 0) THEN BEGIN 162 msg = ' the file ' + fullfilename_condmag[0] + ' is not readable.'184 msg = 'eee : the file ' + fullfilename_condmag[0] + ' is not readable.' 163 185 PRINT, msg 164 186 RETURN … … 167 189 ; mesh mask 168 190 ; check if this file exists 169 fullfilename_oce = isafile(iodirin + filename_oce )191 fullfilename_oce = isafile(iodirin + filename_oce, NEW=0,/MUST_EXIST, RECURSIVE=0) 170 192 IF fullfilename_oce[0] EQ '' THEN BEGIN 171 msg = ' the file ' + fullfilename_oce + ' was not found.'193 msg = 'eee : the file ' + fullfilename_oce + ' was not found.' 172 194 PRINT, msg 173 195 RETURN … … 176 198 ; protection 177 199 IF (FILE_TEST(fullfilename_oce[0], /READ) EQ 0) THEN BEGIN 178 msg = ' the file ' + fullfileoce_condmag[0] + ' is not readable.'200 msg = 'eee : the file ' + fullfileoce_condmag[0] + ' is not readable.' 179 201 PRINT, msg 180 202 RETURN … … 185 207 CASE geomag_od_env OF 186 208 '' : BEGIN 187 msg = ' ${GEOMAG_OD} is not defined'209 msg = 'eee : ${GEOMAG_OD} is not defined' 188 210 PRINT, msg 189 211 RETURN 190 212 END 191 213 ELSE: BEGIN 192 msg = ' ${GEOMAG_OD} is ' + geomag_od_env214 msg = 'iii : ${GEOMAG_OD} is ' + geomag_od_env 193 215 PRINT, msg 194 216 END … … 200 222 ; existence and protection 201 223 IF (FILE_TEST(iodirout, /DIRECTORY,/WRITE) EQ 0) THEN BEGIN 202 msg = ' the directory' + iodirout + ' was not found.'203 PRINT, msg 204 RETURN 205 ENDIF 206 ; 207 ; build output filename 224 msg = 'eee : the directory' + iodirout + ' was not found.' 225 PRINT, msg 226 RETURN 227 ENDIF 228 ; 229 ; build output filenames 208 230 filename_cond_sed = 'cond_sed' + '_' + orcares +'.nc' 209 231 fullfilename_cond_sed = iodirout + filename_cond_sed … … 211 233 ; in order to avoid unexpected overwritten 212 234 IF (FILE_TEST(fullfilename_cond_sed) EQ 1) THEN BEGIN 213 msg = 'the file ' + fullfilename_cond_sed + ' already exists.' 235 msg = 'eee : the file ' + fullfilename_cond_sed + ' already exists.' 236 PRINT, msg 237 RETURN 238 ENDIF 239 ; 240 filename_br = 'Br' + '_' + orcares +'.nc' 241 fullfilename_br = iodirout + filename_br 242 ; 243 ; in order to avoid unexpected overwritten 244 IF (FILE_TEST(fullfilename_br) EQ 1) THEN BEGIN 245 msg = 'eee : the file ' + fullfilename_br + ' already exists.' 214 246 PRINT, msg 215 247 RETURN … … 220 252 condmaglatname = 'la' 221 253 varname_cond_sed = 'cond_sed' 254 varname_br = 'Br' 222 255 ; 223 256 ;---- … … 251 284 ; 252 285 ; reading condmag file 253 netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0]) 286 netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0], /NOWRITE) 287 msg = 'iii : ' + fullfilename_condmag[0] + ' opened for read' 288 PRINT, msg 289 254 290 varinq_cond_sed = NCDF_VARINQ(netcdf_id_condmag, varname_cond_sed) 255 ; 256 ;--------------------------- 257 ; Creation of the NetCdf file for cond_sed 291 varinq_br = NCDF_VARINQ(netcdf_id_condmag, varname_br) 292 ; 293 ;--------------------------- 294 ; Creation of the NetCdf file for cond_sed and Br 258 295 ;--------------------------- 259 296 ; 260 297 netcdf_id_cond_sed = NCDF_CREATE(fullfilename_cond_sed, /clobber) 261 298 NCDF_CONTROL, netcdf_id_cond_sed, /NOFILL 299 netcdf_id_br = NCDF_CREATE(fullfilename_br, /clobber) 300 NCDF_CONTROL, netcdf_id_br, /NOFILL 301 ; 262 302 ; dimension 263 303 dimidx = NCDF_DIMDEF(netcdf_id_cond_sed, 'x' , jpio) 264 304 dimidy = NCDF_DIMDEF(netcdf_id_cond_sed, 'y' , jpjo) 265 305 dimidt = NCDF_DIMDEF(netcdf_id_cond_sed, 'lo', /UNLIMITED) 306 dimidx = NCDF_DIMDEF(netcdf_id_br, 'x' , jpio) 307 dimidy = NCDF_DIMDEF(netcdf_id_br, 'y' , jpjo) 308 dimidt = NCDF_DIMDEF(netcdf_id_br, 'lo', /UNLIMITED) 266 309 ; 267 310 ; global attributes 268 NCDF_ATTPUT, netcdf_id_cond_sed, 'Conventions', 'GDT 1.2', /GLOBAL 311 NCDF_ATTPUT, netcdf_id_cond_sed, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformité 269 312 NCDF_ATTPUT, netcdf_id_cond_sed, 'file_name' , filename_cond_sed, /GLOBAL 270 NCDF_ATTPUT, netcdf_id_cond_sed, 'Title' , 'Monthly Levitus Sea Salinity corrected', /GLOBAL 313 NCDF_ATTPUT, netcdf_id_cond_sed, 'Title' , 'Conductance', /GLOBAL 314 NCDF_ATTPUT, netcdf_id_br, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformité 315 NCDF_ATTPUT, netcdf_id_br, 'file_name' , filename_Br, /GLOBAL 316 NCDF_ATTPUT, netcdf_id_br, 'Title' , 'Magnetic field', /GLOBAL 271 317 ; 272 318 ; declaration of variables … … 279 325 NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'valid_max', omax,/FLOAT 280 326 NCDF_ATTPUT, netcdf_id_cond_sed, varid[0], 'long_name', 'Longitude at t-point' 327 varid[0] = NCDF_VARDEF(netcdf_id_br, 'nav_lon' , [dimidx, dimidy], /FLOAT) 328 NCDF_ATTPUT, netcdf_id_br, varid[0], 'units' , 'degrees_east' 329 NCDF_ATTPUT, netcdf_id_br, varid[0], 'valid_min', min(olon, max = omax),/FLOAT 330 NCDF_ATTPUT, netcdf_id_br, varid[0], 'valid_max', omax,/FLOAT 331 NCDF_ATTPUT, netcdf_id_br, varid[0], 'long_name', 'Longitude at t-point' 281 332 ; 282 333 varid[1] = NCDF_VARDEF(netcdf_id_cond_sed, 'nav_lat' , [dimidx, dimidy], /FLOAT) … … 285 336 NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'valid_max', omax,/FLOAT 286 337 NCDF_ATTPUT, netcdf_id_cond_sed, varid[1], 'long_name', 'Latitude at t-point' 338 varid[1] = NCDF_VARDEF(netcdf_id_br, 'nav_lat' , [dimidx, dimidy], /FLOAT) 339 NCDF_ATTPUT, netcdf_id_br, varid[1], 'units' , 'degrees_north' 340 NCDF_ATTPUT, netcdf_id_br, varid[1], 'valid_min', min(olat, max = omax),/FLOAT 341 NCDF_ATTPUT, netcdf_id_br, varid[1], 'valid_max', omax,/FLOAT 342 NCDF_ATTPUT, netcdf_id_br, varid[1], 'long_name', 'Latitude at t-point' 287 343 ; 288 344 varid[2] = NCDF_VARDEF(netcdf_id_cond_sed, 'time' , [dimidt], /FLOAT) 289 ; 290 ; each of the the two files to produce contains a specific variable 345 varid[2] = NCDF_VARDEF(netcdf_id_br, 'time' , [dimidt], /FLOAT) 346 ; 347 ; each of the two files to produce contains a specific variable 348 ; 291 349 varid_cond_sed = lonarr(1) 292 350 varid_cond_sed[0] = NCDF_VARDEF(netcdf_id_cond_sed, varname_cond_sed, [dimidx, dimidy, dimidt], /FLOAT) 293 351 ; 294 352 ; variable 3 295 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'long_name', ' Salinity' ; ++ faux et non cf296 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'units', 'siemens' 353 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'long_name', 'Conductance' ; ++ non cf 354 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'units', 'siemens' ; ++ récupérer l'unite de cond_sed dans condmag.nc 297 355 ; pour min et max, il faut avoir lu la variable ... cf. plus bas ++ 298 356 ; donc pour l'instant on les met à valeur manquante 299 357 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', !VALUES.F_NAN ,/FLOAT 300 358 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', !VALUES.F_NAN ,/FLOAT 301 ;--------------------------- 302 ; end of header definition, writing of the NetCdf file 359 ; 360 varid_br = lonarr(1) 361 varid_br[0] = NCDF_VARDEF(netcdf_id_br, varname_br, [dimidx, dimidy, dimidt], /FLOAT) 362 ; 363 ; variable 3 364 NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'long_name', 'magnetic field' ; ++ non cf 365 NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'units', 'tesla' ; ++ récupérer l'unité de Br dans condmag.nc 366 ; pour min et max, il faut avoir lu la variable ... cf. plus bas ++ 367 ; donc pour l'instant on les met à valeur manquante 368 NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_min', !VALUES.F_NAN ,/FLOAT 369 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', !VALUES.F_NAN ,/FLOAT 370 ; 371 ;--------------------------- 372 ; end of header definition, writing of the NetCdf files 303 373 ;--------------------------- 304 374 NCDF_CONTROL, netcdf_id_cond_sed, /ENDEF 305 NCDF_CLOSE, netcdf_id_condmag ; ++ si le close n'est pa ici ça merde mais je ne sais pas pourquoi 375 NCDF_CONTROL, netcdf_id_br, /ENDEF 376 NCDF_CLOSE, netcdf_id_condmag ; ++ si le close n'est pas ici ça merde mais je ne sais pas pourquoi 377 ; 306 378 ; grid 307 ;--------------------------- 308 NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lon', TEMPORARY(olon) 309 NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lat', TEMPORARY(olat) 379 NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lon', olon 380 NCDF_VARPUT, netcdf_id_cond_sed, 'nav_lat', olat 310 381 NCDF_VARPUT, netcdf_id_cond_sed, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 311 ;--------------------------- 312 ; data 382 NCDF_VARPUT, netcdf_id_br, 'nav_lon', olon 383 NCDF_VARPUT, netcdf_id_br, 'nav_lat', olat 384 NCDF_VARPUT, netcdf_id_br, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 385 313 386 ;--------------------------- 314 387 ; réouverture du fichier ... mais pourquoi on le relit !!++ 315 netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0]) 316 ; 317 NCDF_VARGET, netcdf_id_condmag, varname_cond_sed, varin_cond_sed ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 388 netcdf_id_condmag = NCDF_OPEN(fullfilename_condmag[0],/NOWRITE) 389 msg = 'iii : ' + fullfilename_condmag[0] + ' reopened for read' 390 PRINT, msg 391 ; 392 NCDF_VARGET, netcdf_id_condmag, varname_cond_sed, varin_cond_sed ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 393 NCDF_VARGET, netcdf_id_condmag, varname_br, varin_br ; , COUNT = [jpia, jpja, 1], OFFSET = [0, 0, 0] 318 394 ; 319 395 ; do the interpolation 320 396 varin_cond_sed = TOTAL(weig*varin_cond_sed[addr], 1) 321 397 varin_cond_sed = REFORM(varin_cond_sed, jpio, jpjo, /OVER) 398 varin_br = TOTAL(weig*varin_br[addr], 1) 399 varin_br = REFORM(varin_br, jpio, jpjo, /OVER) 322 400 ; 323 401 NCDF_CLOSE, netcdf_id_condmag 324 402 varout_cond_sed = TEMPORARY(varin_cond_sed) 403 varout_br = TEMPORARY(varin_br) 325 404 ; compute min max 326 minarr = min(varout_cond_sed, max = maxarr) 405 minarr_cond_sed = min(varout_cond_sed, max = maxarr_cond_sed) 406 minarr_br = min(varout_br, max = maxarr_br) 327 407 ; 328 408 ; put back the masked value 329 409 ;++ IF bad[0] NE -1 THEN varout_cond_sed[TEMPORARY(bad)] = 32767 410 ;++ IF bad[0] NE -1 THEN varout_br[TEMPORARY(bad)] = 32767 330 411 ; 331 412 ; write the data 332 413 NCDF_VARPUT, netcdf_id_cond_sed, varname_cond_sed, varout_cond_sed, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 414 NCDF_VARPUT, netcdf_id_br, varname_br, varout_br, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 333 415 ; 334 416 ; update min max attributes 335 417 NCDF_CONTROL, netcdf_id_cond_sed, /REDEF 336 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', minarr ,/FLOAT337 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', maxarr ,/FLOAT418 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_min', minarr_cond_sed,/FLOAT 419 NCDF_ATTPUT, netcdf_id_cond_sed, varid_cond_sed[0], 'valid_max', maxarr_cond_sed,/FLOAT 338 420 NCDF_CONTROL, netcdf_id_cond_sed, /ENDEF 339 ; 340 ;--------------------------- 341 ; close the netcdf file 421 NCDF_CONTROL, netcdf_id_br, /REDEF 422 NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_min', minarr_br,/FLOAT 423 NCDF_ATTPUT, netcdf_id_br, varid_br[0], 'valid_max', maxarr_br,/FLOAT 424 NCDF_CONTROL, netcdf_id_br, /ENDEF 425 ; 426 ;--------------------------- 427 ; close the netcdf files 342 428 NCDF_CLOSE, netcdf_id_cond_sed 343 msg =' done' 429 NCDF_CLOSE, netcdf_id_br 430 ; 431 msg = 'iii : ' + fullfilename_cond_sed + ' created' 344 432 PRINT, msg 433 msg = 'iii : ' + fullfilename_br + ' created' 434 PRINT, msg 345 435 ; 346 436 END
Note: See TracChangeset
for help on using the changeset viewer.