Changeset 48 for trunk/condmag_output.pro
- Timestamp:
- 03/16/14 20:38:39 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/condmag_output.pro
r36 r48 79 79 ;- 80 80 PRO condmag_output, orcares, variable, title, long_name, units, jpio, jpjo, olon, olat, values 81 ;82 compile_opt idl2, strictarrsubs83 ;84 ;----85 ; check input parameters86 ;----87 ;88 ; check orcares definition89 ;90 CASE orcares OF91 'ORCA2': BEGIN81 ; 82 compile_opt idl2, strictarrsubs 83 ; 84 ;---- 85 ; check input parameters 86 ;---- 87 ; 88 ; check orcares definition 89 ; 90 CASE orcares OF 91 'ORCA2': BEGIN 92 92 msg = 'iii : valid orcares parameter = ' + orcares 93 93 ras = report(msg) 94 95 'ORCA025': BEGIN94 END 95 'ORCA025': BEGIN 96 96 msg = 'iii : valid orcares parameter = ' + orcares 97 97 ras = report(msg) 98 99 ELSE: BEGIN98 END 99 ELSE : BEGIN 100 100 msg = 'eee : invalid orcares parameter = ' + orcares 101 101 ras = report(msg) … … 103 103 ras = report(msg) 104 104 RETURN 105 106 ENDCASE107 ;108 ; check variable definition109 ; ++ dimension etc.110 CASE variable.NAME OF111 'cond_sed': BEGIN112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 105 END 106 ENDCASE 107 ; 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 113 ras = report(msg) 114 CASE title OF 115 'Conductance': BEGIN 116 msg = 'iii : valid title parameter = ' + title 117 ras = report(msg) 118 END 119 ELSE : BEGIN 120 msg = 'eee : invalid title parameter = ' + title 121 ras = report(msg) 122 msg = 'eee : title must be Conductance' 123 ras = report(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 ras = report(msg) 131 END 132 ELSE : BEGIN 133 msg = 'eee : invalid long_name parameter = ' + long_name 134 ras = report(msg) 135 msg = 'eee : long_name must be Conductance' 136 ras = report(msg) 137 RETURN 138 END 139 ENDCASE 140 CASE units OF 141 'siemens': BEGIN 142 142 msg = 'iii : valid units parameter = ' + units 143 143 ras = report(msg) 144 145 144 END 145 ELSE : BEGIN 146 146 msg = 'eee : invalid units parameter = ' + units 147 147 ras = report(msg) … … 149 149 ras = report(msg) 150 150 RETURN 151 END 152 ENDCASE 153 END 154 'Br' : BEGIN 155 msg = 'iii : valid variable.NAME parameter = ' + variable.NAME 151 END 152 ENDCASE 153 END 154 'Br' : BEGIN 155 msg = 'iii : valid variable.NAME parameter = ' + variable.NAME 156 ras = report(msg) 157 CASE title OF 158 'Magnetic field': BEGIN 159 msg = 'iii : valid title parameter = ' + title 160 ras = report(msg) 161 END 162 ELSE : BEGIN 163 msg = 'eee : invalid title parameter = ' + title 156 164 ras = report(msg) 157 CASE title OF 158 'Magnetic field': BEGIN 159 msg = 'iii : valid title parameter = ' + title 160 ras = report(msg) 161 END 162 ELSE : BEGIN 163 msg = 'eee : invalid title parameter = ' + title 164 ras = report(msg) 165 msg = 'eee : title must be Magnetic field' 166 ras = report(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 ras = report(msg) 174 END 175 ELSE : BEGIN 176 msg = 'eee : invalid long_name parameter = ' + long_name 177 ras = report(msg) 178 msg = 'eee : long_name must be magnetic field' 179 ras = report(msg) 180 RETURN 181 END 182 ENDCASE 183 CASE units OF 184 'tesla': BEGIN 185 msg = 'iii : valid units parameter = ' + units 186 ras = report(msg) 187 END 188 ELSE : BEGIN 189 msg = 'eee : invalid units parameter = ' + units 190 ras = report(msg) 191 msg = 'eee : units must be tesla' 192 ras = report(msg) 193 RETURN 194 END 195 ENDCASE 196 END 197 ELSE : BEGIN 198 msg = 'eee : invalid variable.NAME parameter = ' + variable.NAME 199 ras = report(msg) 200 msg = 'eee : variable.NAME must be cond_sed or Br' 165 msg = 'eee : title must be Magnetic field' 201 166 ras = report(msg) 202 167 RETURN 203 168 END 204 ENDCASE 205 ; 206 ; check jpio 207 IF (jpio LT 1) THEN BEGIN 208 msg = ' eee : invalid jpio parameter = ' + STRING(jpio) 209 ras = report(msg) 210 msg = ' eee : jpio must be greater or equal to 1' 211 ras = report(msg) 212 RETURN 213 ENDIF ELSE BEGIN 214 msg = 'iii : valid jpio parameter = ' + STRING(jpio) 215 ras = report(msg) 216 ENDELSE 217 ; 218 ; check jpjo 219 IF (jpjo LT 1) THEN BEGIN 220 msg = ' eee : invalid jpjo parameter = ' + STRING(jpjo) 221 ras = report(msg) 222 msg = ' eee : jpjo must be greater or equal to 1' 223 ras = report(msg) 224 RETURN 225 ENDIF ELSE BEGIN 226 msg = 'iii : valid jpjo parameter = ' + STRING(jpjo) 227 ras = report(msg) 228 ENDELSE 229 ; 230 ; check olon ++ what to check 231 ; when decided reproduce with olat ++ 232 IF (N_ELEMENTS(olon) NE jpio*jpjo) THEN BEGIN 233 msg = ' eee : invalid nb of elements of olon parameter = ' + STRING(N_ELEMENTS(olon)) 234 ras = report(msg) 235 msg = ' eee : nb of elements of olon must be equal to jpio*jpjo = ' + STRING(jpio*jpjo) 236 ras = report(msg) 237 RETURN 238 ENDIF ELSE BEGIN 239 msg = 'iii : valid nb of elements olon parameter' 240 ras = report(msg) 241 ENDELSE 242 ; 243 ; check values ++ 244 ; test if ${GEOMAG_OD} defined 245 geomag_od_env=GETENV('GEOMAG_OD') 246 CASE geomag_od_env OF 247 '' : BEGIN 248 msg = 'eee : ${GEOMAG_OD} is not defined' 249 ras = report(msg) 250 RETURN 251 END 252 ELSE: BEGIN 169 ENDCASE 170 CASE long_name OF 171 'magnetic field': BEGIN 172 msg = 'iii : valid long_name parameter = ' + long_name 173 ras = report(msg) 174 END 175 ELSE : BEGIN 176 msg = 'eee : invalid long_name parameter = ' + long_name 177 ras = report(msg) 178 msg = 'eee : long_name must be magnetic field' 179 ras = report(msg) 180 RETURN 181 END 182 ENDCASE 183 CASE units OF 184 'tesla': BEGIN 185 msg = 'iii : valid units parameter = ' + units 186 ras = report(msg) 187 END 188 ELSE : BEGIN 189 msg = 'eee : invalid units parameter = ' + units 190 ras = report(msg) 191 msg = 'eee : units must be tesla' 192 ras = report(msg) 193 RETURN 194 END 195 ENDCASE 196 END 197 ELSE : BEGIN 198 msg = 'eee : invalid variable.NAME parameter = ' + variable.NAME 199 ras = report(msg) 200 msg = 'eee : variable.NAME must be cond_sed or Br' 201 ras = report(msg) 202 RETURN 203 END 204 ENDCASE 205 ; 206 ; check jpio 207 IF (jpio LT 1) THEN BEGIN 208 msg = ' eee : invalid jpio parameter = ' + STRING(jpio) 209 ras = report(msg) 210 msg = ' eee : jpio must be greater or equal to 1' 211 ras = report(msg) 212 RETURN 213 ENDIF ELSE BEGIN 214 msg = 'iii : valid jpio parameter = ' + STRING(jpio) 215 ras = report(msg) 216 ENDELSE 217 ; 218 ; check jpjo 219 IF (jpjo LT 1) THEN BEGIN 220 msg = ' eee : invalid jpjo parameter = ' + STRING(jpjo) 221 ras = report(msg) 222 msg = ' eee : jpjo must be greater or equal to 1' 223 ras = report(msg) 224 RETURN 225 ENDIF ELSE BEGIN 226 msg = 'iii : valid jpjo parameter = ' + STRING(jpjo) 227 ras = report(msg) 228 ENDELSE 229 ; 230 ; check olon ++ what to check 231 ; when decided reproduce with olat ++ 232 IF (N_ELEMENTS(olon) NE jpio*jpjo) THEN BEGIN 233 msg = ' eee : invalid nb of elements of olon parameter = ' + STRING(N_ELEMENTS(olon)) 234 ras = report(msg) 235 msg = ' eee : nb of elements of olon must be equal to jpio*jpjo = ' + STRING(jpio*jpjo) 236 ras = report(msg) 237 RETURN 238 ENDIF ELSE BEGIN 239 msg = 'iii : valid nb of elements olon parameter' 240 ras = report(msg) 241 ENDELSE 242 ; 243 ; check values ++ 244 ; test if ${GEOMAG_OD} defined 245 geomag_od_env=GETENV('GEOMAG_OD') 246 CASE geomag_od_env OF 247 '' : BEGIN 248 msg = 'eee : ${GEOMAG_OD} is not defined' 249 ras = report(msg) 250 RETURN 251 END 252 ELSE : BEGIN 253 253 msg = 'iii : ${GEOMAG_OD} is ' + geomag_od_env 254 254 ras = report(msg) 255 END 256 ENDCASE 257 ; 258 ; check if output data will be possible 259 iodirout = isadirectory(geomag_od_env) 260 ; 261 ; existence and protection 262 IF (FILE_TEST(iodirout, /DIRECTORY,/WRITE) EQ 0) THEN BEGIN 263 msg = 'eee : the directory' + iodirout + ' was not found.' 264 ras = report(msg) 265 RETURN 266 ENDIF 267 ; 268 ; build output filenames 269 filename = variable.NAME + '_' + orcares +'.nc' 270 fullfilename = iodirout + filename 271 ; 272 ; in order to avoid unexpected overwritten 273 IF (FILE_TEST(fullfilename) EQ 1) THEN BEGIN 274 msg = 'eee : the file ' + fullfilename + ' already exists.' 275 ras = report(msg) 276 RETURN 277 ENDIF 278 ; 279 ; d'après ncdump -h /usr/work/sur/fvi/OPA/geomag/condmag.nc 280 ; ces lignes n'ont rien a faire la ++ ces information devrait etre en parameter 281 condmaglonname = 'lo' 282 condmaglatname = 'la' 283 varname = variable.NAME 284 ; 285 ;--------------------------- 286 ; Creation of the NetCdf output file 287 ;--------------------------- 288 ; 289 netcdf_id = NCDF_CREATE(fullfilename, /clobber) 290 NCDF_CONTROL, netcdf_id, /NOFILL 291 ; 292 ; dimension 293 dimidx = NCDF_DIMDEF(netcdf_id, 'x' , jpio) 294 dimidy = NCDF_DIMDEF(netcdf_id, 'y' , jpjo) 295 dimidt = NCDF_DIMDEF(netcdf_id, 'lo', /UNLIMITED) 296 ; 297 ; global attributes 298 NCDF_ATTPUT, netcdf_id, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformite 299 NCDF_ATTPUT, netcdf_id, 'file_name' , filename, /GLOBAL 300 NCDF_ATTPUT, netcdf_id, 'Title' , title, /GLOBAL 301 ; 302 ; declaration of variables 303 ; 4 common variables for the two files to produce 304 varid = lonarr(4) 305 ; 306 varid[0] = NCDF_VARDEF(netcdf_id, 'nav_lon' , [dimidx, dimidy], /FLOAT) 307 NCDF_ATTPUT, netcdf_id, varid[0], 'units' , 'degrees_east' 308 NCDF_ATTPUT, netcdf_id, varid[0], 'valid_min', min(olon, max = omax), /FLOAT 309 NCDF_ATTPUT, netcdf_id, varid[0], 'valid_max', omax, /FLOAT 310 NCDF_ATTPUT, netcdf_id, varid[0], 'long_name', 'Longitude at t-point' 311 ; 312 varid[1] = NCDF_VARDEF(netcdf_id, 'nav_lat' , [dimidx, dimidy], /FLOAT) 313 NCDF_ATTPUT, netcdf_id, varid[1], 'units' , 'degrees_north' 314 NCDF_ATTPUT, netcdf_id, varid[1], 'valid_min', min(olat, max = omax), /FLOAT 315 NCDF_ATTPUT, netcdf_id, varid[1], 'valid_max', omax, /FLOAT 316 NCDF_ATTPUT, netcdf_id, varid[1], 'long_name', 'Latitude at t-point' 317 ; 318 varid[2] = NCDF_VARDEF(netcdf_id, 'time' , [dimidt], /FLOAT) 319 ; 320 varid[3] = NCDF_VARDEF(netcdf_id, varname, [dimidx, dimidy, dimidt], /FLOAT) 321 NCDF_ATTPUT, netcdf_id, varid[3], 'long_name', long_name 322 NCDF_ATTPUT, netcdf_id, varid[3], 'units', units 323 ; pour min et max, il faut avoir lu la variable ... cf. plus bas ++ 324 ; donc pour l'instant on les met à valeur manquante 325 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_min', !VALUES.F_NAN, /FLOAT 326 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_max', !VALUES.F_NAN, /FLOAT 327 ; 328 ;--------------------------- 329 ; end of header definition, writing of the NetCdf files 330 ;--------------------------- 331 ; 332 NCDF_CONTROL, netcdf_id, /ENDEF 333 ; 334 NCDF_VARPUT, netcdf_id, 'nav_lon', olon 335 NCDF_VARPUT, netcdf_id, 'nav_lat', olat 336 NCDF_VARPUT, netcdf_id, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 337 ; 338 ; compute min max 339 minarr = min(values, max = maxarr) 340 ; 341 ; put back the masked value 342 ;++ IF bad[0] NE -1 THEN values[TEMPORARY(bad)] = 32767 343 ; 344 ; write the data 345 NCDF_VARPUT, netcdf_id, varname, values, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 346 ; 347 ; update min max attributes 348 NCDF_CONTROL, netcdf_id, /REDEF 349 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_min', minarr, /FLOAT 350 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_max', maxarr, /FLOAT 351 NCDF_CONTROL, netcdf_id, /ENDEF 352 ; 353 ; close the netcdf files 354 NCDF_CLOSE, netcdf_id 355 ; 356 msg = 'iii : ' + fullfilename + ' created' 357 ras = report(msg) 358 ; 255 END 256 ENDCASE 257 ; 258 ; check if output data will be possible 259 iodirout = isadirectory(geomag_od_env) 260 ; 261 ; existence and protection 262 IF (FILE_TEST(iodirout, /DIRECTORY,/WRITE) EQ 0) THEN BEGIN 263 msg = 'eee : the directory' + iodirout + ' was not found.' 264 ras = report(msg) 265 RETURN 266 ENDIF 267 ; 268 ; build output filenames 269 filename = variable.NAME + '_' + orcares +'.nc' 270 fullfilename = iodirout + filename 271 ; 272 ; in order to avoid unexpected overwritten 273 IF (FILE_TEST(fullfilename) EQ 1) THEN BEGIN 274 msg = 'eee : the file ' + fullfilename + ' already exists.' 275 ras = report(msg) 276 RETURN 277 ENDIF 278 ; 279 ; d'aprÚs ncdump -h /usr/work/sur/fvi/OPA/geomag/condmag.nc 280 ; ces lignes n'ont rien a faire la ++ ces information devrait etre en parameter 281 condmaglonname = 'lo' 282 condmaglatname = 'la' 283 varname = variable.NAME 284 ; 285 ;--------------------------- 286 ; Creation of the NetCdf output file 287 ;--------------------------- 288 ; 289 netcdf_id = NCDF_CREATE(fullfilename, /clobber) 290 NCDF_CONTROL, netcdf_id, /NOFILL 291 ; 292 ; dimension 293 dimidx = NCDF_DIMDEF(netcdf_id, 'x' , jpio) 294 dimidy = NCDF_DIMDEF(netcdf_id, 'y' , jpjo) 295 dimidt = NCDF_DIMDEF(netcdf_id, 'lo', /UNLIMITED) 296 ; 297 ; global attributes 298 NCDF_ATTPUT, netcdf_id, 'Conventions', 'GDT 1.2', /GLOBAL ; ++ conformite 299 NCDF_ATTPUT, netcdf_id, 'file_name' , filename, /GLOBAL 300 NCDF_ATTPUT, netcdf_id, 'Title' , title, /GLOBAL 301 ; 302 ; declaration of variables 303 ; 4 common variables for the two files to produce 304 varid = lonarr(4) 305 ; 306 varid[0] = NCDF_VARDEF(netcdf_id, 'nav_lon' , [dimidx, dimidy], /FLOAT) 307 NCDF_ATTPUT, netcdf_id, varid[0], 'units' , 'degrees_east' 308 NCDF_ATTPUT, netcdf_id, varid[0], 'valid_min', min(olon, max = omax), /FLOAT 309 NCDF_ATTPUT, netcdf_id, varid[0], 'valid_max', omax, /FLOAT 310 NCDF_ATTPUT, netcdf_id, varid[0], 'long_name', 'Longitude at t-point' 311 ; 312 varid[1] = NCDF_VARDEF(netcdf_id, 'nav_lat' , [dimidx, dimidy], /FLOAT) 313 NCDF_ATTPUT, netcdf_id, varid[1], 'units' , 'degrees_north' 314 NCDF_ATTPUT, netcdf_id, varid[1], 'valid_min', min(olat, max = omax), /FLOAT 315 NCDF_ATTPUT, netcdf_id, varid[1], 'valid_max', omax, /FLOAT 316 NCDF_ATTPUT, netcdf_id, varid[1], 'long_name', 'Latitude at t-point' 317 ; 318 varid[2] = NCDF_VARDEF(netcdf_id, 'time' , [dimidt], /FLOAT) 319 ; 320 varid[3] = NCDF_VARDEF(netcdf_id, varname, [dimidx, dimidy, dimidt], /FLOAT) 321 NCDF_ATTPUT, netcdf_id, varid[3], 'long_name', long_name 322 NCDF_ATTPUT, netcdf_id, varid[3], 'units', units 323 ; pour min et max, il faut avoir lu la variable ... cf. plus bas ++ 324 ; donc pour l'instant on les met à valeur manquante 325 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_min', !VALUES.F_NAN, /FLOAT 326 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_max', !VALUES.F_NAN, /FLOAT 327 ; 328 ;--------------------------- 329 ; end of header definition, writing of the NetCdf files 330 ;--------------------------- 331 ; 332 NCDF_CONTROL, netcdf_id, /ENDEF 333 ; 334 NCDF_VARPUT, netcdf_id, 'nav_lon', olon 335 NCDF_VARPUT, netcdf_id, 'nav_lat', olat 336 NCDF_VARPUT, netcdf_id, varid[2], FLOAT(0.5) ; ++ c'est quoi cette valeur 337 ; 338 ; compute min max 339 minarr = min(values, max = maxarr) 340 ; 341 ; put back the masked value 342 ;++ IF bad[0] NE -1 THEN values[TEMPORARY(bad)] = 32767 343 ; 344 ; write the data 345 NCDF_VARPUT, netcdf_id, varname, values, COUNT = [jpio, jpjo, 1], OFFSET = [0, 0, 0] 346 ; 347 ; update min max attributes 348 NCDF_CONTROL, netcdf_id, /REDEF 349 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_min', minarr, /FLOAT 350 NCDF_ATTPUT, netcdf_id, varid[3], 'valid_max', maxarr, /FLOAT 351 NCDF_CONTROL, netcdf_id, /ENDEF 352 ; 353 ; close the netcdf files 354 NCDF_CLOSE, netcdf_id 355 ; 356 msg = 'iii : ' + fullfilename + ' created' 357 ras = report(msg) 359 358 END
Note: See TracChangeset
for help on using the changeset viewer.