Changeset 13016
- Timestamp:
- 2020-06-03T12:48:36+02:00 (3 years ago)
- Location:
- NEMO/branches/2020/dev_12905_xios_ancil
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_12905_xios_ancil/cfgs/SHARED/namelist_ref
r12530 r13016 94 94 ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present 95 95 ! ! in netcdf input files, as the start j-row for reading 96 ln_xios_cfg = .false. ! Read configuration data using XIOS (T) 96 97 / 97 98 !----------------------------------------------------------------------- -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DIA/diahsb.F90
r12489 r13016 258 258 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 259 259 IF( ln_rstart ) THEN !* Read the restart file 260 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 260 261 ! 261 262 IF(lwp) WRITE(numout,*) … … 279 280 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini, ldxios = lrxios ) 280 281 ENDIF 282 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 281 283 ELSE 282 284 IF(lwp) WRITE(numout,*) -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DOM/closea.F90
r12377 r13016 20 20 !!---------------------------------------------------------------------- 21 21 USE in_out_manager ! I/O manager 22 USE iom_def 22 23 ! 23 24 USE diu_bulk , ONLY: ln_diurnal_only ! used for sanity check 24 USE iom , ONLY: iom_open, iom_get, iom_close, jpdom_data ! I/O routines25 USE iom , ONLY: iom_open, iom_get, iom_close, jpdom_data, iom_swap ! I/O routines 25 26 USE lib_fortran , ONLY: glob_sum ! fortran library 26 27 USE lib_mpp , ONLY: mpp_max, ctl_nam, ctl_stop ! MPP library … … 235 236 !!---------------------------------------------------------------------- 236 237 ! 238 IF(lcfg_xios) CALL iom_swap("dom_context") 239 237 240 CALL iom_open ( cd_file, ics ) 238 CALL iom_get ( ics, jpdom_data, TRIM(cd_var), zdta ) 241 CALL iom_get ( ics, jpdom_data, TRIM(cd_var), zdta, ldxios = lcfg_xios ) 242 239 243 CALL iom_close( ics ) 240 244 k_mskout(:,:) = NINT(zdta(:,:)) -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DOM/daymod.F90
r12489 r13016 323 323 324 324 IF( TRIM(cdrw) == 'READ' ) THEN 325 325 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 326 326 IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 327 327 ! Get Calendar informations … … 401 401 ENDIF 402 402 ! 403 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 403 404 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 404 405 ! -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DOM/domain.F90
r12489 r13016 122 122 CALL dom_glo ! global domain versus local domain 123 123 CALL dom_nam ! read namelist ( namrun, namdom ) 124 125 lcfg_xios = ln_xios_cfg .AND. (.NOT. ln_use_jattr) 124 126 ! 125 127 IF( lwxios ) THEN … … 301 303 ENDIF 302 304 ! 303 !304 305 READ ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) 305 306 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namrun in reference namelist' ) … … 340 341 WRITE(numout,*) ' READ restart for a single file using XIOS ln_xios_read =', ln_xios_read 341 342 WRITE(numout,*) ' Write restart using XIOS nn_wxios = ', nn_wxios 343 WRITE(numout,*) ' READ config using XIOS ln_xios_cfg = ', ln_xios_cfg 342 344 ELSE 343 345 WRITE(numout,*) " AGRIF: nn_wxios will be ingored. See setting for parent" -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DOM/domhgr.F90
r10068 r13016 189 189 CALL iom_open( cn_domcfg, inum ) 190 190 ! 191 CALL iom_get( inum, jpdom_data, 'glamt', plamt, lrowattr=ln_use_jattr ) 192 CALL iom_get( inum, jpdom_data, 'glamu', plamu, lrowattr=ln_use_jattr ) 193 CALL iom_get( inum, jpdom_data, 'glamv', plamv, lrowattr=ln_use_jattr ) 194 CALL iom_get( inum, jpdom_data, 'glamf', plamf, lrowattr=ln_use_jattr ) 195 ! 196 CALL iom_get( inum, jpdom_data, 'gphit', pphit, lrowattr=ln_use_jattr ) 197 CALL iom_get( inum, jpdom_data, 'gphiu', pphiu, lrowattr=ln_use_jattr ) 198 CALL iom_get( inum, jpdom_data, 'gphiv', pphiv, lrowattr=ln_use_jattr ) 199 CALL iom_get( inum, jpdom_data, 'gphif', pphif, lrowattr=ln_use_jattr ) 200 ! 201 CALL iom_get( inum, jpdom_data, 'e1t' , pe1t , lrowattr=ln_use_jattr ) 202 CALL iom_get( inum, jpdom_data, 'e1u' , pe1u , lrowattr=ln_use_jattr ) 203 CALL iom_get( inum, jpdom_data, 'e1v' , pe1v , lrowattr=ln_use_jattr ) 204 CALL iom_get( inum, jpdom_data, 'e1f' , pe1f , lrowattr=ln_use_jattr ) 205 ! 206 CALL iom_get( inum, jpdom_data, 'e2t' , pe2t , lrowattr=ln_use_jattr ) 207 CALL iom_get( inum, jpdom_data, 'e2u' , pe2u , lrowattr=ln_use_jattr ) 208 CALL iom_get( inum, jpdom_data, 'e2v' , pe2v , lrowattr=ln_use_jattr ) 209 CALL iom_get( inum, jpdom_data, 'e2f' , pe2f , lrowattr=ln_use_jattr ) 191 IF(lcfg_xios) THEN 192 CALL iom_dom_context(cn_domcfg, inum) 193 CALL iom_swap("dom_context") 194 ENDIF 195 CALL iom_get( inum, jpdom_data, 'glamt', plamt, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 196 CALL iom_get( inum, jpdom_data, 'glamu', plamu, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 197 CALL iom_get( inum, jpdom_data, 'glamv', plamv, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 198 CALL iom_get( inum, jpdom_data, 'glamf', plamf, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 199 ! 200 CALL iom_get( inum, jpdom_data, 'gphit', pphit, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 201 CALL iom_get( inum, jpdom_data, 'gphiu', pphiu, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 202 CALL iom_get( inum, jpdom_data, 'gphiv', pphiv, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 203 CALL iom_get( inum, jpdom_data, 'gphif', pphif, lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 204 ! 205 CALL iom_get( inum, jpdom_data, 'e1t' , pe1t , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 206 CALL iom_get( inum, jpdom_data, 'e1u' , pe1u , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 207 CALL iom_get( inum, jpdom_data, 'e1v' , pe1v , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 208 CALL iom_get( inum, jpdom_data, 'e1f' , pe1f , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 209 ! 210 CALL iom_get( inum, jpdom_data, 'e2t' , pe2t , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 211 CALL iom_get( inum, jpdom_data, 'e2u' , pe2u , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 212 CALL iom_get( inum, jpdom_data, 'e2v' , pe2v , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 213 CALL iom_get( inum, jpdom_data, 'e2f' , pe2f , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 210 214 ! 211 215 IF( iom_varid( inum, 'ff_f', ldstop = .FALSE. ) > 0 .AND. & 212 216 & iom_varid( inum, 'ff_t', ldstop = .FALSE. ) > 0 ) THEN 213 217 IF(lwp) WRITE(numout,*) ' Coriolis factor at f- and t-points read in ', TRIM( cn_domcfg ), ' file' 214 CALL iom_get( inum, jpdom_data, 'ff_f' , pff_f , lrowattr=ln_use_jattr )215 CALL iom_get( inum, jpdom_data, 'ff_t' , pff_t , lrowattr=ln_use_jattr )218 CALL iom_get( inum, jpdom_data, 'ff_f' , pff_f , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 219 CALL iom_get( inum, jpdom_data, 'ff_t' , pff_t , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 216 220 kff = 1 217 221 ELSE … … 221 225 IF( iom_varid( inum, 'e1e2u', ldstop = .FALSE. ) > 0 ) THEN 222 226 IF(lwp) WRITE(numout,*) ' e1e2u & e1e2v read in ', TRIM( cn_domcfg ), ' file' 223 CALL iom_get( inum, jpdom_data, 'e1e2u' , pe1e2u , lrowattr=ln_use_jattr )224 CALL iom_get( inum, jpdom_data, 'e1e2v' , pe1e2v , lrowattr=ln_use_jattr )227 CALL iom_get( inum, jpdom_data, 'e1e2u' , pe1e2u , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 228 CALL iom_get( inum, jpdom_data, 'e1e2v' , pe1e2v , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 225 229 ke1e2u_v = 1 226 230 ELSE -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DOM/domvvl.F90
r12740 r13016 793 793 IF( ln_rstart ) THEN !* Read the restart file 794 794 CALL rst_read_open ! open the restart file if necessary 795 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 795 796 CALL iom_get( numror, jpdom_autoglo, 'sshn' , ssh(:,:,Kmm), ldxios = lrxios ) 796 797 ! … … 870 871 ENDIF 871 872 ! 873 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 872 874 ELSE !* Initialize at "rest" 873 875 ! -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DOM/domzgr.F90
r12377 r13016 219 219 ! 220 220 CALL iom_open( cn_domcfg, inum ) 221 222 IF(lcfg_xios) CALL iom_swap("dom_context") 221 223 ! 222 224 ! !* type of vertical coordinate … … 229 231 ! 230 232 ! !* ocean cavities under iceshelves 231 CALL iom_get( inum, 'ln_isfcav', z_cav )233 CALL iom_get( inum, 'ln_isfcav', z_cav, ldxios = lcfg_xios ) 232 234 IF( z_cav == 0._wp ) THEN ; ld_isfcav = .false. ; ELSE ; ld_isfcav = .true. ; ENDIF 233 235 ! 234 236 ! !* vertical scale factors 235 CALL iom_get( inum, jpdom_unknown, 'e3t_1d' , pe3t_1d ) ! 1D reference coordinate236 CALL iom_get( inum, jpdom_unknown, 'e3w_1d' , pe3w_1d )237 ! 238 CALL iom_get( inum, jpdom_data, 'e3t_0' , pe3t , lrowattr=ln_use_jattr ) ! 3D coordinate239 CALL iom_get( inum, jpdom_data, 'e3u_0' , pe3u , lrowattr=ln_use_jattr )240 CALL iom_get( inum, jpdom_data, 'e3v_0' , pe3v , lrowattr=ln_use_jattr )241 CALL iom_get( inum, jpdom_data, 'e3f_0' , pe3f , lrowattr=ln_use_jattr )242 CALL iom_get( inum, jpdom_data, 'e3w_0' , pe3w , lrowattr=ln_use_jattr )243 CALL iom_get( inum, jpdom_data, 'e3uw_0' , pe3uw , lrowattr=ln_use_jattr )244 CALL iom_get( inum, jpdom_data, 'e3vw_0' , pe3vw , lrowattr=ln_use_jattr )237 CALL iom_get( inum, jpdom_unknown, 'e3t_1d' , pe3t_1d, ldxios = lcfg_xios ) ! 1D reference coordinate 238 CALL iom_get( inum, jpdom_unknown, 'e3w_1d' , pe3w_1d, ldxios = lcfg_xios ) 239 ! 240 CALL iom_get( inum, jpdom_data, 'e3t_0' , pe3t , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) ! 3D coordinate 241 CALL iom_get( inum, jpdom_data, 'e3u_0' , pe3u , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 242 CALL iom_get( inum, jpdom_data, 'e3v_0' , pe3v , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 243 CALL iom_get( inum, jpdom_data, 'e3f_0' , pe3f , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 244 CALL iom_get( inum, jpdom_data, 'e3w_0' , pe3w , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 245 CALL iom_get( inum, jpdom_data, 'e3uw_0' , pe3uw , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 246 CALL iom_get( inum, jpdom_data, 'e3vw_0' , pe3vw , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 245 247 ! 246 248 ! !* depths … … 252 254 CALL ctl_warn( 'zgr_read : old definition of depths and scale factors used ', & 253 255 & ' depths at t- and w-points read in the domain configuration file') 254 CALL iom_get( inum, jpdom_unknown, 'gdept_1d', pdept_1d )255 CALL iom_get( inum, jpdom_unknown, 'gdepw_1d', pdepw_1d )256 CALL iom_get( inum, jpdom_data , 'gdept_0' , pdept , lrowattr=ln_use_jattr )257 CALL iom_get( inum, jpdom_data , 'gdepw_0' , pdepw , lrowattr=ln_use_jattr )256 CALL iom_get( inum, jpdom_unknown, 'gdept_1d', pdept_1d, ldxios = lcfg_xios ) 257 CALL iom_get( inum, jpdom_unknown, 'gdepw_1d', pdepw_1d, ldxios = lcfg_xios ) 258 CALL iom_get( inum, jpdom_data , 'gdept_0' , pdept , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 259 CALL iom_get( inum, jpdom_data , 'gdepw_0' , pdepw , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) 258 260 ! 259 261 ELSE !- depths computed from e3. scale factors … … 269 271 ! 270 272 ! !* ocean top and bottom level 271 CALL iom_get( inum, jpdom_data, 'top_level' , z2d , lrowattr=ln_use_jattr ) ! 1st wet T-points (ISF)273 CALL iom_get( inum, jpdom_data, 'top_level' , z2d , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) ! 1st wet T-points (ISF) 272 274 k_top(:,:) = NINT( z2d(:,:) ) 273 CALL iom_get( inum, jpdom_data, 'bottom_level' , z2d , lrowattr=ln_use_jattr ) ! last wet T-points275 CALL iom_get( inum, jpdom_data, 'bottom_level' , z2d , lrowattr=ln_use_jattr, ldxios = lcfg_xios ) ! last wet T-points 274 276 k_bot(:,:) = NINT( z2d(:,:) ) 275 277 ! 276 278 ! reference depth for negative bathy (wetting and drying only) 277 IF( ll_wd ) CALL iom_get( inum, 'rn_wd_ref_depth' , ssh_ref ) 278 ! 279 IF( ll_wd ) CALL iom_get( inum, 'rn_wd_ref_depth' , ssh_ref, ldxios = lcfg_xios ) 280 ! 281 IF(lcfg_xios) THEN 282 CALL iom_context_finalize( "dom_context") 283 ENDIF 279 284 CALL iom_close( inum ) 280 285 ! -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/DYN/dynspg_ts.F90
r12489 r13016 890 890 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 891 891 ! ! --------------- 892 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 892 893 IF( ln_rstart .AND. ln_bt_fw .AND. (.NOT.l_1st_euler) ) THEN !* Read the restart file 893 894 CALL iom_get( numror, jpdom_autoglo, 'ub2_b' , ub2_b (:,:), ldxios = lrxios ) … … 923 924 ENDIF 924 925 ! 926 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 925 927 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN ! Create restart file 926 928 ! ! ------------------- -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/IOM/in_out_manager.F90
r12377 r13016 45 45 LOGICAL :: ln_xios_read !: use xios to read single file restart 46 46 INTEGER :: nn_wxios !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 47 LOGICAL :: ln_xios_cfg !: use xios to read single file restart in namelist 47 48 INTEGER :: nn_no !: Assimilation cycle 48 49 -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/IOM/iom.F90
r12649 r13016 46 46 USE lib_fortran 47 47 USE diu_bulk, ONLY : ln_diurnal_only, ln_diurnal 48 USE netcdf 49 USE iom_nf90 48 50 49 51 IMPLICIT NONE … … 58 60 PUBLIC iom_chkatt, iom_getatt, iom_putatt, iom_getszuld, iom_rstput, iom_delay_rst, iom_put 59 61 PUBLIC iom_use, iom_context_finalize, iom_update_file_name, iom_miss_val 62 PUBLIC iom_dom_context 60 63 61 64 PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d … … 65 68 PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_get_file_attr, iom_set_grid_attr 66 69 PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_sdate 67 PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 70 PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active, iom_set_vars_active 68 71 # endif 69 72 PUBLIC iom_set_rstw_var_active, iom_set_rstw_core, iom_set_rst_vars … … 306 309 307 310 END SUBROUTINE iom_init_closedef 311 312 SUBROUTINE iom_set_vars_active(cdfname, idnum) 313 !!--------------------------------------------------------------------- 314 !! *** SUBROUTINE iom_set_vars_active *** 315 !! 316 !! ** Purpose : define filename in XIOS context for reading file, 317 !! enable variables present in restart file for reading with XIOS 318 !! id of a file is assumed to be rrestart. 319 !!--------------------------------------------------------------------- 320 321 !sets enabled = .TRUE. for each field in restart file 322 CHARACTER(len=*), INTENT(IN) :: cdfname 323 INTEGER , INTENT(IN) :: idnum 324 #if defined key_iomput 325 INTEGER :: ndims, nvars, natts, unlimitedDimId, dimlen, xtype,mdims 326 TYPE(xios_field) :: field_hdl 327 TYPE(xios_file) :: file_hdl 328 TYPE(xios_filegroup) :: filegroup_hdl 329 INTEGER :: dimids(4), jv,i, idim 330 CHARACTER(LEN=256) :: clinfo ! info character 331 INTEGER, ALLOCATABLE :: indimlens(:) 332 CHARACTER(LEN=nf90_max_name), ALLOCATABLE :: indimnames(:) 333 CHARACTER(LEN=nf90_max_name) :: dimname, varname 334 LOGICAL :: lmeta 335 336 meta(1) = "nav_lat" 337 meta(2) = "nav_lon" 338 meta(3) = "nav_lev" 339 meta(4) = "time_instant" 340 meta(5) = "time_instant_bounds" 341 meta(6) = "time_counter" 342 meta(7) = "time_counter_bounds" 343 meta(8) = "x" 344 meta(9) = "y" 345 meta(10) = "numcat" 346 347 clinfo = ' iom_set_vars_active, file: '//TRIM(cdfname) 348 349 IF(lwp) write(numout, *) TRIM(clinfo) 350 IF(lwp) CALL FLUSH(numout) 351 !set name of the restart file and enable available fields 352 CALL xios_get_handle("file_definition", filegroup_hdl ) 353 CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 354 CALL xios_set_file_attr( "rrestart", name=trim(cdfname), type="one_file", & 355 par_access="collective", enabled=.TRUE., mode="read", & 356 output_freq=xios_timestep) 357 358 CALL iom_nf90_check( nf90_inquire(idnum, ndims, nvars, natts ), clinfo ) 359 ALLOCATE(indimlens(ndims), indimnames(ndims)) 360 CALL iom_nf90_check( nf90_inquire(idnum, unlimitedDimId = unlimitedDimId ), clinfo ) 361 362 DO idim = 1, ndims 363 CALL iom_nf90_check( nf90_inquire_dimension(idnum, idim, dimname, dimlen ), clinfo ) 364 indimlens(idim) = dimlen 365 indimnames(idim) = dimname 366 ENDDO 367 368 DO jv =1, nvars 369 lmeta = .FALSE. 370 CALL iom_nf90_check( nf90_inquire_variable(idnum, jv, varname, xtype, ndims, dimids, natts ), clinfo ) 371 DO i = 1, NMETA 372 IF(TRIM(varname) == TRIM(meta(i))) THEN 373 lmeta = .TRUE. 374 ENDIF 375 ENDDO 376 IF(.NOT.lmeta) THEN 377 CALL xios_add_child(file_hdl, field_hdl, TRIM(varname)) 378 mdims = ndims 379 380 IF(ANY(dimids(1:ndims) == unlimitedDimId)) THEN 381 mdims = mdims - 1 382 ENDIF 383 384 IF(mdims == 3) THEN 385 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 386 domain_ref="grid_N", axis_ref=TRIM(iom_axis(indimlens(dimids(mdims)))), & 387 prec = 8, operation = "instant") 388 ELSEIF(mdims == 2) THEN 389 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 390 domain_ref="grid_N", prec = 8, operation = "instant") 391 ELSEIF(mdims == 1) THEN 392 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 393 axis_ref=TRIM(iom_axis(indimlens(dimids(mdims)))), prec = 8, operation = "instant") 394 ELSEIF(mdims == 0) THEN 395 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 396 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 397 ELSE 398 WRITE(ctmp1,*) 'iom_set_vars_active: variable ', TRIM(varname) ,' incorrect number of dimensions' 399 CALL ctl_stop( 'iom_set_vars_active:', ctmp1 ) 400 ENDIF 401 ENDIF 402 ENDDO 403 DEALLOCATE(indimlens, indimnames) 404 #endif 405 END SUBROUTINE iom_set_vars_active 406 407 FUNCTION iom_axis(idlev) result(axis_ref) 408 !!--------------------------------------------------------------------- 409 !! *** FUNCTION iom_axis *** 410 !! 411 !! ** Purpose : Used for grid definition when XIOS is used to read/write 412 !! restart or configuration data. Returns axis corresponding 413 !! to the number of levels given as an input variable. Axes 414 !! are defined in routine iom_set_rst_context or iom_dom_context 415 !! depending on context 416 !!--------------------------------------------------------------------- 417 INTEGER, INTENT(IN) :: idlev 418 CHARACTER(len=lc) :: axis_ref 419 CHARACTER(len=12) :: str 420 IF(idlev == jpk) THEN 421 axis_ref="nav_lev" 422 #if defined key_si3 423 ELSEIF(idlev == jpl) THEN 424 axis_ref="numcat" 425 #endif 426 ELSE 427 write(str, *) idlev 428 CALL ctl_stop( 'iom_axis', 'Definition for axis with '//TRIM(ADJUSTL(str))//' levels missing') 429 ENDIF 430 END FUNCTION iom_axis 308 431 309 432 SUBROUTINE iom_set_rstw_var_active(field) … … 659 782 ! 660 783 CALL xios_set_current_context(nemo_hdl) 784 661 785 #endif 662 786 ! … … 980 1104 ELSE 981 1105 #if defined key_iomput 982 IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 983 CALL iom_swap( TRIM(crxios_context) ) 1106 IF(lwp) WRITE(numout,*) 'XIOS READ (0D): ', trim(cdvar) 984 1107 CALL xios_recv_field( trim(cdvar), pvar) 985 CALL iom_swap( TRIM(cxios_context) )986 1108 #else 987 1109 WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) … … 1334 1456 #if defined key_iomput 1335 1457 !would be good to be able to check which context is active and swap only if current is not restart 1336 CALL iom_swap( TRIM(crxios_context) )1337 1458 IF( PRESENT(pv_r3d) ) THEN 1338 1459 pv_r3d(:, :, :) = 0. 1339 if(lwp) write(numout,*) 'XIOS R ST READ (3D): ',trim(cdvar)1460 if(lwp) write(numout,*) 'XIOS READ (3D): ',trim(cdvar) 1340 1461 CALL xios_recv_field( trim(cdvar), pv_r3d) 1341 1462 IF(idom /= jpdom_unknown ) then … … 1344 1465 ELSEIF( PRESENT(pv_r2d) ) THEN 1345 1466 pv_r2d(:, :) = 0. 1346 if(lwp) write(numout,*) 'XIOS R ST READ (2D): ', trim(cdvar)1467 if(lwp) write(numout,*) 'XIOS READ (2D): ', trim(cdvar) 1347 1468 CALL xios_recv_field( trim(cdvar), pv_r2d) 1348 1469 IF(idom /= jpdom_unknown ) THEN … … 1351 1472 ELSEIF( PRESENT(pv_r1d) ) THEN 1352 1473 pv_r1d(:) = 0. 1353 if(lwp) write(numout,*) 'XIOS R ST READ (1D): ', trim(cdvar)1474 if(lwp) write(numout,*) 'XIOS READ (1D): ', trim(cdvar) 1354 1475 CALL xios_recv_field( trim(cdvar), pv_r1d) 1355 1476 ENDIF 1356 CALL iom_swap( TRIM(cxios_context) )1357 1477 #else 1358 1478 istop = istop + 1 … … 1394 1514 END SUBROUTINE iom_get_var 1395 1515 1516 SUBROUTINE iom_dom_context(fdname, numr) 1517 !!----------------------------------------------------------------------- 1518 !! *** FUNCTION iom_getszuld *** 1519 !! 1520 !! ** Purpose : initialize context for reading domain information 1521 !!----------------------------------------------------------------------- 1522 INTEGER, PARAMETER :: maxf = 48 1523 CHARACTER(len=*), INTENT(IN) :: fdname 1524 INTEGER, INTENT(IN) :: numr 1525 !local variables 1526 CHARACTER(len=lc) :: cxname 1527 CHARACTER(len=lc) :: cfile 1528 TYPE(xios_domaingroup) :: domaingroup_hdl 1529 TYPE(xios_domain) :: domain_hdl 1530 TYPE(xios_axisgroup) :: axisgroup_hdl 1531 TYPE(xios_axis) :: axis_hdl 1532 TYPE(xios_scalar) :: scalar_hdl 1533 TYPE(xios_scalargroup) :: scalargroup_hdl 1534 TYPE(xios_field) :: field_hdl 1535 TYPE(xios_file) :: file_hdl 1536 TYPE(xios_filegroup) :: filegroup_hdl 1537 TYPE(xios_duration) :: dtime = xios_duration(0, 0, 0, 0, 0, 0) 1538 INTEGER :: i 1539 INTEGER :: ni 1540 INTEGER :: nj 1541 !!----------------------------------------------------------------------- 1542 1543 #if defined key_iomput 1544 cxname = "dom_context" 1545 IF( TRIM(Agrif_CFixed()) .NE. '0' ) THEN 1546 CALL xios_context_initialize(TRIM(Agrif_CFixed())//"_"//TRIM(cxname), mpi_comm_oce) 1547 ELSE 1548 CALL xios_context_initialize(TRIM(cxname), mpi_comm_oce) 1549 ENDIF 1550 CALL iom_swap( cxname ) 1551 !calendar must be defined always 1552 CALL xios_define_calendar( TYPE = "NoLeap" , time_origin = xios_date(1,1,1,00,00,00), & 1553 & start_date = xios_date(1,1,1,0,0,0) ) 1554 CALL xios_get_handle("domain_definition",domaingroup_hdl) 1555 CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N") 1556 ni = nlei-nldi+1 1557 nj = nlej-nldj+1 1558 ! 1559 CALL iom_set_domain_attr("grid_N", ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-2, jbegin=njmpp+nldj-2, ni=ni, nj=nj) 1560 CALL iom_set_domain_attr("grid_N", data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1561 1562 CALL xios_get_handle("axis_definition",axisgroup_hdl) 1563 CALL xios_add_child(axisgroup_hdl, axis_hdl, "nav_lev") 1564 !AGRIF fails to compile when unit= is in call to xios_set_axis_attr 1565 ! CALL xios_set_axis_attr( "nav_lev", long_name="Vertical levels in meters", positive="down") 1566 CALL xios_set_axis_attr ("nav_lev", n_glo=jpk ) 1567 1568 CALL xios_get_handle("scalar_definition", scalargroup_hdl) 1569 CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 1570 1571 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 1572 cfile = TRIM(fdname) 1573 ELSE 1574 cfile = TRIM(Agrif_CFixed())//"_"//TRIM(fdname) 1575 ENDIF 1576 CALL iom_set_vars_active(cfile, iom_file(numr)%nfid) 1577 ! set time step length 1578 dtime%second = rn_Dt 1579 CALL xios_set_timestep( dtime ) 1580 1581 CALL iom_init_closedef 1582 #endif 1583 END SUBROUTINE iom_dom_context 1396 1584 1397 1585 FUNCTION iom_getszuld ( kiomid ) -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/IOM/iom_def.F90
r12649 r13016 9 9 !!---------------------------------------------------------------------- 10 10 USE par_kind 11 USE netcdf 11 12 12 13 IMPLICIT NONE … … 45 46 LOGICAL, PUBLIC :: lxios_sini = .FALSE. ! is restart in a single file 46 47 LOGICAL, PUBLIC :: lxios_set = .FALSE. 48 !XIOS configuration read 49 LOGICAL, PUBLIC :: lcfg_xios !: read configuration using XIOS 47 50 48 51 … … 73 76 LOGICAL :: active =.FALSE. ! for restart write only: true - write field, false do not write field 74 77 END TYPE RST_FIELD 78 !metadata in restart file for restart read with XIOS 79 INTEGER, PUBLIC, PARAMETER :: NMETA = 10 80 CHARACTER(LEN=nf90_max_name), PUBLIC :: meta(NMETA) 75 81 !$AGRIF_END_DO_NOT_TREAT 76 82 ! -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/IOM/iom_nf90.F90
r12649 r13016 31 31 PUBLIC iom_nf90_open , iom_nf90_close, iom_nf90_varid, iom_nf90_get, iom_nf90_rstput 32 32 PUBLIC iom_nf90_chkatt, iom_nf90_getatt, iom_nf90_putatt 33 PUBLIC iom_nf90_check 33 34 34 35 INTERFACE iom_nf90_get -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/IOM/restart.F90
r12489 r13016 243 243 244 244 CALL rst_read_open ! open restart for reading (if not already opened) 245 245 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 246 246 ! Check dynamics and tracer time-step consistency and force Euler restart if changed 247 247 IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN … … 304 304 ENDIF 305 305 ! 306 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 306 307 END SUBROUTINE rst_read 307 308 -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/ISF/isfcpl.F90
r12489 r13016 166 166 !!---------------------------------------------------------------------- 167 167 ! 168 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 168 169 CALL iom_get( numror, jpdom_autoglo, 'ssmask' , zssmask_b, ldxios = lrxios ) ! need to extrapolate T/S 170 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 169 171 170 172 ! compute new ssh if we open a full water column … … 244 246 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zts0 245 247 !!---------------------------------------------------------------------- 246 ! 248 ! 249 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 247 250 CALL iom_get( numror, jpdom_autoglo, 'tmask' , ztmask_b, ldxios = lrxios ) ! need to extrapolate T/S 248 251 !CALL iom_get( numror, jpdom_autoglo, 'wmask' , zwmask_b, ldxios = lrxios ) ! need to extrapolate T/S 249 252 !CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:), ldxios = lrxios ) ! need to interpol vertical profile (vvl) 253 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 250 254 ! 251 255 ! … … 391 395 !!---------------------------------------------------------------------- 392 396 ! 397 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 393 398 CALL iom_get( numror, jpdom_autoglo, 'tmask' , ztmask_b, ldxios = lrxios ) 394 399 CALL iom_get( numror, jpdom_autoglo, 'e3u_n' , ze3u_b , ldxios = lrxios ) 395 400 CALL iom_get( numror, jpdom_autoglo, 'e3v_n' , ze3v_b , ldxios = lrxios ) 401 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 396 402 ! 397 403 ! 1.0: compute horizontal volume flux divergence difference before-after coupling … … 495 501 496 502 ! get restart variable 503 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 497 504 CALL iom_get( numror, jpdom_autoglo, 'tmask' , ztmask_b(:,:,:), ldxios = lrxios ) ! need to extrapolate T/S 498 505 CALL iom_get( numror, jpdom_autoglo, 'e3t_n' , ze3t_b(:,:,:) , ldxios = lrxios ) 499 506 CALL iom_get( numror, jpdom_autoglo, 'tn' , zt_b(:,:,:) , ldxios = lrxios ) 500 507 CALL iom_get( numror, jpdom_autoglo, 'sn' , zs_b(:,:,:) , ldxios = lrxios ) 508 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 501 509 502 510 ! compute run length -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/ISF/isfrst.F90
r11931 r13016 52 52 ! read restart 53 53 IF( iom_varid( numror, cfwf_b, ldstop = .FALSE. ) > 0 ) THEN 54 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 54 55 IF(lwp) WRITE(numout,*) ' nit000-1 isf tracer content forcing fields read in the restart file' 55 56 CALL iom_get( numror, jpdom_autoglo, cfwf_b, pfwf_b(:,:) , ldxios = lrxios ) ! before ice shelf melt 56 57 CALL iom_get( numror, jpdom_autoglo, chc_b , ptsc_b (:,:,jp_tem), ldxios = lrxios ) ! before ice shelf heat flux 57 58 CALL iom_get( numror, jpdom_autoglo, csc_b , ptsc_b (:,:,jp_sal), ldxios = lrxios ) ! before ice shelf heat flux 59 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 58 60 ELSE 59 61 pfwf_b(:,:) = pfwf(:,:) -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/SBC/sbcapr.F90
r12489 r13016 65 65 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 66 66 TYPE(FLD_N) :: sn_apr ! informations about the fields to be read 67 LOGICAL :: lrxios ! read restart using XIOS?68 67 !! 69 68 NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr, rn_pref, ln_apr_obc … … 154 153 IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN 155 154 IF(lwp) WRITE(numout,*) 'sbc_apr: ssh_ibb read in the restart file' 155 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 156 156 CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb, ldxios = lrxios ) ! before inv. barometer ssh 157 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 157 158 ! 158 159 ELSE !* no restart: set from nit000 values -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/SBC/sbcmod.F90
r12489 r13016 517 517 & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 518 518 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields red in the restart file' 519 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 519 520 CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b, ldxios = lrxios ) ! before i-stress (U-point) 520 521 CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b, ldxios = lrxios ) ! before j-stress (V-point) … … 529 530 sfx_b (:,:) = sfx(:,:) 530 531 ENDIF 532 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 531 533 ELSE !* no restart: set from nit000 values 532 534 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields set to nit000' -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/SBC/sbcrnf.F90
r12489 r13016 159 159 & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 160 160 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields red in the restart file', lrxios 161 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 161 162 CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b, ldxios = lrxios ) ! before runoff 162 163 CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem), ldxios = lrxios ) ! before heat content of runoff 163 164 CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal), ldxios = lrxios ) ! before salinity content of runoff 165 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 164 166 ELSE !* no restart: set from nit000 values 165 167 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields set to nit000' -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/SBC/sbcssm.F90
r12377 r13016 207 207 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 208 208 l_ssm_mean = .TRUE. 209 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 209 210 CALL iom_get( numror , 'nn_fsbc', zf_sbc, ldxios = lrxios ) ! sbc frequency of previous run 210 211 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m, ldxios = lrxios ) ! sea surface mean velocity (U-point) … … 234 235 IF(lwp) WRITE(numout,*) ' mean fields read in the ocean restart file' 235 236 ENDIF 237 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 236 238 ENDIF 237 239 ENDIF -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/TRA/traqsr.F90
r12489 r13016 402 402 ! 1st ocean level attenuation coefficient (used in sbcssm) 403 403 IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 404 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 404 405 CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev' , fraqsr_1lev, ldxios = lrxios ) 406 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 405 407 ELSE 406 408 fraqsr_1lev(:,:) = 1._wp ! default : no penetration -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/TRA/trasbc.F90
r12489 r13016 108 108 IF( ln_rstart .AND. & ! Restart: read in restart file 109 109 & iom_varid( numror, 'sbc_hc_b', ldstop = .FALSE. ) > 0 ) THEN 110 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 110 111 IF(lwp) WRITE(numout,*) ' nit000-1 sbc tracer content field read in the restart file' 111 112 zfact = 0.5_wp … … 113 114 CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lrxios ) ! before heat content sbc trend 114 115 CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lrxios ) ! before salt content sbc trend 116 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 115 117 ELSE ! No restart or restart not found: Euler forward time stepping 116 118 zfact = 1._wp -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/ZDF/zdfgls.F90
r12489 r13016 1059 1059 ! ! --------------- 1060 1060 IF( ln_rstart ) THEN !* Read the restart file 1061 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 1061 1062 id1 = iom_varid( numror, 'en' , ldstop = .FALSE. ) 1062 1063 id2 = iom_varid( numror, 'avt_k' , ldstop = .FALSE. ) … … 1076 1077 ! avt_k, avm_k already set to the background value in zdf_phy_init 1077 1078 ENDIF 1079 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 1078 1080 ELSE !* Start from rest 1079 1081 IF(lwp) WRITE(numout,*) -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/ZDF/zdfosm.F90
r12489 r13016 1459 1459 !!----------------------------------------------------------------------------- 1460 1460 IF( TRIM(cdrw) == 'READ'.AND. ln_rstart) THEN 1461 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 1461 1462 id1 = iom_varid( numror, 'wn' , ldstop = .FALSE. ) 1462 1463 IF( id1 > 0 ) THEN ! 'wn' exists; read … … 1477 1478 WRITE(numout,*) ' ===>>>> : previous run without osmosis scheme, hbl computed from stratification' 1478 1479 END IF 1480 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 1479 1481 END IF 1480 1482 -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/ZDF/zdfric.F90
r12489 r13016 210 210 ! !* Read the restart file 211 211 IF( ln_rstart ) THEN 212 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 212 213 id1 = iom_varid( numror, 'avt_k', ldstop = .FALSE. ) 213 214 id2 = iom_varid( numror, 'avm_k', ldstop = .FALSE. ) … … 217 218 CALL iom_get( numror, jpdom_autoglo, 'avm_k', avm_k, ldxios = lrxios ) 218 219 ENDIF 220 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 219 221 ENDIF 220 222 ! !* otherwise Kz already set to the background value in zdf_phy_init -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/ZDF/zdftke.F90
r12702 r13016 665 665 ! ! --------------- 666 666 IF( ln_rstart ) THEN !* Read the restart file 667 IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 667 668 id1 = iom_varid( numror, 'en' , ldstop = .FALSE. ) 668 669 id2 = iom_varid( numror, 'avt_k', ldstop = .FALSE. ) … … 682 683 ! avt_k, avm_k already set to the background value in zdf_phy_init 683 684 ENDIF 685 IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 684 686 ELSE !* Start from rest 685 687 IF(lwp) WRITE(numout,*) -
NEMO/branches/2020/dev_12905_xios_ancil/src/OCE/nemogcm.F90
r12641 r13016 273 273 & nn_isplt , nn_jsplt, nn_jctls, nn_jctle, & 274 274 & ln_timing, ln_diacfl 275 NAMELIST/namcfg/ ln_read_cfg, cn_domcfg, ln_closea, ln_write_cfg, cn_domcfg_out, ln_use_jattr 275 NAMELIST/namcfg/ ln_read_cfg, cn_domcfg, ln_closea, ln_write_cfg, cn_domcfg_out, ln_use_jattr, ln_xios_cfg 276 276 !!---------------------------------------------------------------------- 277 277 !
Note: See TracChangeset
for help on using the changeset viewer.