Changeset 8910
- Timestamp:
- 2017-12-06T11:12:23+01:00 (5 years ago)
- Location:
- branches/2017/dev_METO_2017/NEMOGCM
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_METO_2017/NEMOGCM/CONFIG/SHARED/namelist_ref
r8908 r8910 53 53 ln_clobber = .true. ! clobber (overwrite) an existing file 54 54 nn_chunksz = 0 ! chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 55 ln_xios_read = .FALSE. ! use XIOS to read restart file (only for a single file restart) 56 nn_wxios = 0 ! use XIOS to write restart file 0 - no, 1 - single file output, 2 - multiple file output 55 57 / 56 58 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r7753 r8910 255 255 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 256 256 IF(lwp) WRITE(numout,*) '~~~~~~~' 257 CALL iom_get( numror, 'frc_v', frc_v ) 258 CALL iom_get( numror, 'frc_t', frc_t ) 259 CALL iom_get( numror, 'frc_s', frc_s ) 257 CALL iom_get( numror, 'frc_v', frc_v, ldxios = lrxios ) 258 CALL iom_get( numror, 'frc_t', frc_t, ldxios = lrxios ) 259 CALL iom_get( numror, 'frc_s', frc_s, ldxios = lrxios ) 260 CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini, ldxios = lrxios ) ! ice sheet coupling 261 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini(:,:), ldxios = lrxios ) 262 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini(:,:,:), ldxios = lrxios ) 263 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini(:,:,:), ldxios = lrxios ) 264 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini(:,:,:), ldxios = lrxios ) 260 265 IF( ln_linssh ) THEN 261 CALL iom_get( numror, 'frc_wn_t', frc_wn_t ) 262 CALL iom_get( numror, 'frc_wn_s', frc_wn_s ) 263 ENDIF 264 CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini ) ! ice sheet coupling 265 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini(:,:) ) 266 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini(:,:,:) ) 267 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini(:,:,:) ) 268 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini(:,:,:) ) 269 IF( ln_linssh ) THEN 270 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:) ) 271 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:) ) 266 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:), ldxios = lrxios ) 267 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:), ldxios = lrxios ) 268 CALL iom_get( numror, 'frc_wn_t', frc_wn_t, ldxios = lrxios ) 269 CALL iom_get( numror, 'frc_wn_s', frc_wn_s, ldxios = lrxios ) 272 270 ENDIF 273 271 ELSE … … 308 306 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 309 307 IF(lwp) WRITE(numout,*) '~~~~~~~' 310 311 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v ) 312 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t ) 313 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s ) 308 IF( lwxios ) CALL iom_swap( cwxios_context ) 309 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v, ldxios = lwxios) 310 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t, ldxios = lwxios) 311 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s, ldxios = lwxios) 312 CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini, ldxios = lwxios ) ! ice sheet coupling 313 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini(:,:), ldxios = lwxios ) 314 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini(:,:,:), ldxios = lwxios ) 315 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini(:,:,:), ldxios = lwxios ) 316 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini(:,:,:), ldxios = lwxios ) 314 317 IF( ln_linssh ) THEN 315 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t ) 316 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s ) 317 ENDIF 318 CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini ) ! ice sheet coupling 319 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini(:,:) ) 320 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini(:,:,:) ) 321 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini(:,:,:) ) 322 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini(:,:,:) ) 323 IF( ln_linssh ) THEN 324 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:) ) 325 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:) ) 318 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini(:,:), ldxios = lwxios ) 319 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini(:,:), ldxios = lwxios ) 320 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t, ldxios = lwxios) 321 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s, ldxios = lwxios ) 326 322 ENDIF 327 323 ! 324 IF( lwxios ) CALL iom_swap( cxios_context ) 328 325 ENDIF 329 326 ! … … 367 364 IF( .NOT. ln_diahsb ) RETURN 368 365 366 IF(lwxios) THEN 367 ! define variables in restart file when writing with XIOS 368 CALL iom_set_rstw_var_active('frc_v') 369 CALL iom_set_rstw_var_active('frc_t') 370 CALL iom_set_rstw_var_active('frc_s') 371 CALL iom_set_rstw_var_active('surf_ini') 372 CALL iom_set_rstw_var_active('ssh_ini') 373 CALL iom_set_rstw_var_active('e3t_ini') 374 CALL iom_set_rstw_var_active('hc_loc_ini') 375 CALL iom_set_rstw_var_active('sc_loc_ini') 376 IF( ln_linssh ) THEN 377 CALL iom_set_rstw_var_active('ssh_hc_loc_ini') 378 CALL iom_set_rstw_var_active('ssh_sc_loc_ini') 379 CALL iom_set_rstw_var_active('frc_wn_t') 380 CALL iom_set_rstw_var_active('frc_wn_s') 381 ENDIF 382 ENDIF 369 383 ! ------------------- ! 370 384 ! 1 - Allocate memory ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90
r8868 r8910 143 143 CALL day( nit000 ) 144 144 ! 145 IF( lwxios ) THEN 146 ! define variables in restart file when writing with XIOS 147 CALL iom_set_rstw_var_active('kt') 148 CALL iom_set_rstw_var_active('ndastp') 149 CALL iom_set_rstw_var_active('adatrj') 150 CALL iom_set_rstw_var_active('ntime') 151 ENDIF 152 145 153 END SUBROUTINE day_init 146 154 … … 318 326 IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 319 327 ! Get Calendar informations 320 CALL iom_get( numror, 'kt', zkt ) ! last time-step of previous run328 CALL iom_get( numror, 'kt', zkt, ldxios = lrxios ) ! last time-step of previous run 321 329 IF(lwp) THEN 322 330 WRITE(numout,*) ' *** Info read in restart : ' … … 337 345 IF ( nrstdt == 2 ) THEN 338 346 ! read the parameters corresponding to nit000 - 1 (last time step of previous run) 339 CALL iom_get( numror, 'ndastp', zndastp )347 CALL iom_get( numror, 'ndastp', zndastp, ldxios = lrxios ) 340 348 ndastp = NINT( zndastp ) 341 CALL iom_get( numror, 'adatrj', adatrj )342 CALL iom_get( numror, 'ntime' , ktime)349 CALL iom_get( numror, 'adatrj', adatrj , ldxios = lrxios ) 350 CALL iom_get( numror, 'ntime' , ktime , ldxios = lrxios ) 343 351 nn_time0=INT(ktime) 344 352 ! calculate start time in hours and minutes … … 399 407 ENDIF 400 408 ! calendar control 401 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) ) ! time-step 402 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) ) ! date 403 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj ) ! number of elapsed days since 404 ! ! the begining of the run [s] 405 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp) ) ! time 409 IF( lwxios ) CALL iom_swap( cwxios_context ) 410 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) , ldxios = lwxios ) ! time-step 411 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) , ldxios = lwxios ) ! date 412 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj , ldxios = lwxios ) ! number of elapsed days since 413 ! ! the begining of the run [s] 414 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp), ldxios = lwxios ) ! time 415 IF( lwxios ) CALL iom_swap( cxios_context ) 406 416 ENDIF 407 417 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90
r7822 r8910 61 61 CONTAINS 62 62 63 SUBROUTINE dom_init 63 SUBROUTINE dom_init(cdstr) 64 64 !!---------------------------------------------------------------------- 65 65 !! *** ROUTINE dom_init *** … … 79 79 INTEGER :: iconf = 0 ! local integers 80 80 CHARACTER (len=64) :: cform = "(A12, 3(A13, I7))" 81 CHARACTER (len=*), INTENT(IN) :: cdstr ! model: NEMO or SAS. Determines core restart variables 81 82 INTEGER , DIMENSION(jpi,jpj) :: ik_top , ik_bot ! top and bottom ocean level 82 83 REAL(wp), DIMENSION(jpi,jpj) :: z1_hu_0, z1_hv_0 … … 128 129 CALL dom_glo ! global domain versus local domain 129 130 CALL dom_nam ! read namelist ( namrun, namdom ) 131 ! 132 IF( lwxios ) THEN 133 !define names for restart write and set core output (restart.F90) 134 CALL iom_set_rst_vars(rst_wfields) 135 CALL iom_set_rstw_core(cdstr) 136 ENDIF 137 !reset namelist for SAS 138 IF(cdstr == 'SAS') THEN 139 IF(lrxios) THEN 140 IF(lwp) write(numout,*) 'Disable reading restart file using XIOS for SAS' 141 lrxios = .FALSE. 142 ENDIF 143 ENDIF 144 ! 130 145 CALL dom_clo( cn_cfg, nn_cfg ) ! Closed seas and lake 131 146 CALL dom_hgr ! Horizontal mesh … … 285 300 & nn_it000, nn_itend , nn_date0 , nn_time0 , nn_leapy , nn_istate , & 286 301 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, nn_euler , & 287 & ln_cfmeta, ln_iscpl 302 & ln_cfmeta, ln_iscpl, ln_xios_read, nn_wxios 288 303 NAMELIST/namdom/ ln_linssh, nn_closea, nn_msh, rn_isfhmin, rn_rdt, rn_atfp, ln_crs 289 304 #if defined key_netcdf4 … … 293 308 !!---------------------------------------------------------------------- 294 309 ! 310 ln_xios_read = .false. ! set in case ln_xios_read is not in namelist 311 nn_wxios = 0 295 312 REWIND( numnam_ref ) ! Namelist namrun in reference namelist : Parameters of the run 296 313 READ ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) … … 333 350 WRITE(numout,*) ' NetCDF chunksize (bytes) nn_chunksz = ', nn_chunksz 334 351 WRITE(numout,*) ' IS coupling at the restart step ln_iscpl = ', ln_iscpl 352 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 353 WRITE(numout,*) ' READ restart for a single file using XIOS ln_xios_read =', ln_xios_read 354 WRITE(numout,*) ' Write restart using XIOS nn_wxios = ', nn_wxios 355 ELSE 356 WRITE(numout,*) " AGRIF: nn_wxios will be ingored. See setting for parent" 357 WRITE(numout,*) " AGRIF: ln_xios_read will be ingored. See setting for parent" 358 ENDIF 335 359 ENDIF 336 360 … … 413 437 rdt = rn_rdt 414 438 439 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 440 lrxios = ln_xios_read.AND.ln_rstart 441 !set output file type for XIOS based on NEMO namelist 442 IF (nn_wxios > 0) lwxios = .TRUE. 443 nxioso = nn_wxios 444 ENDIF 445 415 446 #if defined key_netcdf4 416 447 ! ! NetCDF 4 case ("key_netcdf4" defined) -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r7753 r8910 242 242 ENDIF 243 243 ! 244 IF(lwxios) THEN 245 ! define variables in restart file when writing with XIOS 246 CALL iom_set_rstw_var_active('e3t_b') 247 CALL iom_set_rstw_var_active('e3t_n') 248 ! ! ----------------------- ! 249 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! z_tilde and layer cases ! 250 ! ! ----------------------- ! 251 CALL iom_set_rstw_var_active('tilde_e3t_b') 252 CALL iom_set_rstw_var_active('tilde_e3t_n') 253 END IF 254 ! ! -------------! 255 IF( ln_vvl_ztilde ) THEN ! z_tilde case ! 256 ! ! ------------ ! 257 CALL iom_set_rstw_var_active('hdiv_lf') 258 ENDIF 259 ! 260 ENDIF 261 244 262 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_init') 245 263 ! … … 799 817 IF( ln_rstart ) THEN !* Read the restart file 800 818 CALL rst_read_open ! open the restart file if necessary 801 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn )819 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn, ldxios = lrxios ) 802 820 ! 803 821 id1 = iom_varid( numror, 'e3t_b', ldstop = .FALSE. ) … … 810 828 ! ! --------- ! 811 829 IF( MIN( id1, id2 ) > 0 ) THEN ! all required arrays exist 812 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) )813 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) )830 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lrxios ) 831 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:), ldxios = lrxios ) 814 832 ! needed to restart if land processor not computed 815 833 IF(lwp) write(numout,*) 'dom_vvl_rst : e3t_b and e3t_n found in restart files' … … 825 843 IF(lwp) write(numout,*) 'e3t_n set equal to e3t_b.' 826 844 IF(lwp) write(numout,*) 'neuler is forced to 0' 827 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:) )845 CALL iom_get( numror, jpdom_autoglo, 'e3t_b', e3t_b(:,:,:), ldxios = lrxios ) 828 846 e3t_n(:,:,:) = e3t_b(:,:,:) 829 847 neuler = 0 … … 832 850 IF(lwp) write(numout,*) 'e3t_b set equal to e3t_n.' 833 851 IF(lwp) write(numout,*) 'neuler is forced to 0' 834 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:) )852 CALL iom_get( numror, jpdom_autoglo, 'e3t_n', e3t_n(:,:,:), ldxios = lrxios ) 835 853 e3t_b(:,:,:) = e3t_n(:,:,:) 836 854 neuler = 0 … … 857 875 ! ! ----------------------- ! 858 876 IF( MIN( id3, id4 ) > 0 ) THEN ! all required arrays exist 859 CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_b', tilde_e3t_b(:,:,:) )860 CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_n', tilde_e3t_n(:,:,:) )877 CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lrxios ) 878 CALL iom_get( numror, jpdom_autoglo, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lrxios ) 861 879 ELSE ! one at least array is missing 862 880 tilde_e3t_b(:,:,:) = 0.0_wp … … 867 885 ! ! ------------ ! 868 886 IF( id5 > 0 ) THEN ! required array exists 869 CALL iom_get( numror, jpdom_autoglo, 'hdiv_lf', hdiv_lf(:,:,:) )887 CALL iom_get( numror, jpdom_autoglo, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lrxios ) 870 888 ELSE ! array is missing 871 889 hdiv_lf(:,:,:) = 0.0_wp … … 928 946 ! ! =================== 929 947 IF(lwp) WRITE(numout,*) '---- dom_vvl_rst ----' 948 IF( lwxios ) CALL iom_swap( cwxios_context ) 930 949 ! ! --------- ! 931 950 ! ! all cases ! 932 951 ! ! --------- ! 933 CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t_b(:,:,:) )934 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) )952 CALL iom_rstput( kt, nitrst, numrow, 'e3t_b', e3t_b(:,:,:), ldxios = lwxios ) 953 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios ) 935 954 ! ! ----------------------- ! 936 955 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! z_tilde and layer cases ! 937 956 ! ! ----------------------- ! 938 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:) 939 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:) 957 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:), ldxios = lwxios) 958 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:), ldxios = lwxios) 940 959 END IF 941 960 ! ! -------------! 942 961 IF( ln_vvl_ztilde ) THEN ! z_tilde case ! 943 962 ! ! ------------ ! 944 CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:) ) 945 ENDIF 946 ! 963 CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:), ldxios = lwxios) 964 ENDIF 965 ! 966 IF( lwxios ) CALL iom_swap( cxios_context ) 947 967 ENDIF 948 968 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DOM/iscplrst.F90
r8868 r8910 64 64 65 65 !! get restart variable 66 CALL iom_get( numror, jpdom_autoglo, 'tmask' , ztmask_b ) ! need to extrapolate T/S67 CALL iom_get( numror, jpdom_autoglo, 'umask' , zumask_b ) ! need to correct barotropic velocity68 CALL iom_get( numror, jpdom_autoglo, 'vmask' , zvmask_b ) ! need to correct barotropic velocity69 CALL iom_get( numror, jpdom_autoglo, 'smask' , zsmask_b ) ! need to correct barotropic velocity70 CALL iom_get( numror, jpdom_autoglo, 'e3t_n' , ze3t_b(:,:,:) ) ! need to compute temperature correction71 CALL iom_get( numror, jpdom_autoglo, 'e3u_n' , ze3u_b(:,:,:) ) ! need to correct barotropic velocity72 CALL iom_get( numror, jpdom_autoglo, 'e3v_n' , ze3v_b(:,:,:) ) ! need to correct barotropic velocity73 CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:) ) ! need to interpol vertical profile (vvl)66 CALL iom_get( numror, jpdom_autoglo, 'tmask' , ztmask_b, ldxios = lrxios ) ! need to extrapolate T/S 67 CALL iom_get( numror, jpdom_autoglo, 'umask' , zumask_b, ldxios = lrxios ) ! need to correct barotropic velocity 68 CALL iom_get( numror, jpdom_autoglo, 'vmask' , zvmask_b, ldxios = lrxios ) ! need to correct barotropic velocity 69 CALL iom_get( numror, jpdom_autoglo, 'smask' , zsmask_b, ldxios = lrxios ) ! need to correct barotropic velocity 70 CALL iom_get( numror, jpdom_autoglo, 'e3t_n' , ze3t_b(:,:,:), ldxios = lrxios ) ! need to compute temperature correction 71 CALL iom_get( numror, jpdom_autoglo, 'e3u_n' , ze3u_b(:,:,:), ldxios = lrxios ) ! need to correct barotropic velocity 72 CALL iom_get( numror, jpdom_autoglo, 'e3v_n' , ze3v_b(:,:,:), ldxios = lrxios ) ! need to correct barotropic velocity 73 CALL iom_get( numror, jpdom_autoglo, 'gdepw_n', zdepw_b(:,:,:), ldxios = lrxios ) ! need to interpol vertical profile (vvl) 74 74 75 75 !! read namelist -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r7831 r8910 56 56 USE asminc ! Assimilation increment 57 57 #endif 58 59 58 60 59 IMPLICIT NONE … … 1198 1197 ! 1199 1198 IF( TRIM(cdrw) == 'READ' ) THEN 1200 CALL iom_get( numror, jpdom_autoglo, 'ub2_b' , ub2_b (:,:) )1201 CALL iom_get( numror, jpdom_autoglo, 'vb2_b' , vb2_b (:,:) )1199 CALL iom_get( numror, jpdom_autoglo, 'ub2_b' , ub2_b (:,:), ldxios = lrxios ) 1200 CALL iom_get( numror, jpdom_autoglo, 'vb2_b' , vb2_b (:,:), ldxios = lrxios ) 1202 1201 IF( .NOT.ln_bt_av ) THEN 1203 CALL iom_get( numror, jpdom_autoglo, 'sshbb_e' , sshbb_e(:,:) )1204 CALL iom_get( numror, jpdom_autoglo, 'ubb_e' , ubb_e(:,:) )1205 CALL iom_get( numror, jpdom_autoglo, 'vbb_e' , vbb_e(:,:) )1206 CALL iom_get( numror, jpdom_autoglo, 'sshb_e' , sshb_e(:,:) )1207 CALL iom_get( numror, jpdom_autoglo, 'ub_e' , ub_e(:,:) )1208 CALL iom_get( numror, jpdom_autoglo, 'vb_e' , vb_e(:,:) )1202 CALL iom_get( numror, jpdom_autoglo, 'sshbb_e' , sshbb_e(:,:), ldxios = lrxios ) 1203 CALL iom_get( numror, jpdom_autoglo, 'ubb_e' , ubb_e(:,:), ldxios = lrxios ) 1204 CALL iom_get( numror, jpdom_autoglo, 'vbb_e' , vbb_e(:,:), ldxios = lrxios ) 1205 CALL iom_get( numror, jpdom_autoglo, 'sshb_e' , sshb_e(:,:), ldxios = lrxios ) 1206 CALL iom_get( numror, jpdom_autoglo, 'ub_e' , ub_e(:,:), ldxios = lrxios ) 1207 CALL iom_get( numror, jpdom_autoglo, 'vb_e' , vb_e(:,:), ldxios = lrxios ) 1209 1208 ENDIF 1210 1209 #if defined key_agrif 1211 1210 ! Read time integrated fluxes 1212 1211 IF ( .NOT.Agrif_Root() ) THEN 1213 CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b' , ub2_i_b(:,:) )1214 CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b' , vb2_i_b(:,:) )1212 CALL iom_get( numror, jpdom_autoglo, 'ub2_i_b' , ub2_i_b(:,:), ldxios = lrxios ) 1213 CALL iom_get( numror, jpdom_autoglo, 'vb2_i_b' , vb2_i_b(:,:), ldxios = lrxios ) 1215 1214 ENDIF 1216 1215 #endif 1217 1216 ! 1218 1217 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 1219 CALL iom_rstput( kt, nitrst, numrow, 'ub2_b' , ub2_b (:,:) ) 1220 CALL iom_rstput( kt, nitrst, numrow, 'vb2_b' , vb2_b (:,:) ) 1218 IF( lwxios ) CALL iom_swap( cwxios_context ) 1219 CALL iom_rstput( kt, nitrst, numrow, 'ub2_b' , ub2_b (:,:), ldxios = lwxios ) 1220 CALL iom_rstput( kt, nitrst, numrow, 'vb2_b' , vb2_b (:,:), ldxios = lwxios ) 1221 1221 ! 1222 1222 IF (.NOT.ln_bt_av) THEN 1223 CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e' , sshbb_e(:,:) )1224 CALL iom_rstput( kt, nitrst, numrow, 'ubb_e' , ubb_e(:,:) )1225 CALL iom_rstput( kt, nitrst, numrow, 'vbb_e' , vbb_e(:,:) )1226 CALL iom_rstput( kt, nitrst, numrow, 'sshb_e' , sshb_e(:,:) )1227 CALL iom_rstput( kt, nitrst, numrow, 'ub_e' , ub_e(:,:) )1228 CALL iom_rstput( kt, nitrst, numrow, 'vb_e' , vb_e(:,:) )1223 CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e' , sshbb_e(:,:), ldxios = lwxios ) 1224 CALL iom_rstput( kt, nitrst, numrow, 'ubb_e' , ubb_e(:,:), ldxios = lwxios ) 1225 CALL iom_rstput( kt, nitrst, numrow, 'vbb_e' , vbb_e(:,:), ldxios = lwxios ) 1226 CALL iom_rstput( kt, nitrst, numrow, 'sshb_e' , sshb_e(:,:), ldxios = lwxios ) 1227 CALL iom_rstput( kt, nitrst, numrow, 'ub_e' , ub_e(:,:), ldxios = lwxios ) 1228 CALL iom_rstput( kt, nitrst, numrow, 'vb_e' , vb_e(:,:), ldxios = lwxios ) 1229 1229 ENDIF 1230 1230 #if defined key_agrif 1231 1231 ! Save time integrated fluxes 1232 1232 IF ( .NOT.Agrif_Root() ) THEN 1233 CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b' , ub2_i_b(:,:) )1234 CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b' , vb2_i_b(:,:) )1233 CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b' , ub2_i_b(:,:), ldxios = lwxios ) 1234 CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b' , vb2_i_b(:,:), ldxios = lwxios ) 1235 1235 ENDIF 1236 1236 #endif 1237 IF( lwxios ) CALL iom_swap( cxios_context ) 1237 1238 ENDIF 1238 1239 ! … … 1322 1323 CALL wrk_dealloc( jpi,jpj, zcu ) 1323 1324 ! 1325 IF( lwxios ) THEN 1326 ! define variables in restart file when writing with XIOS 1327 CALL iom_set_rstw_var_active('ub2_b') 1328 CALL iom_set_rstw_var_active('vb2_b') 1329 ! 1330 IF (.NOT.ln_bt_av) THEN 1331 CALL iom_set_rstw_var_active('sshbb_e') 1332 CALL iom_set_rstw_var_active('ubb_e') 1333 CALL iom_set_rstw_var_active('vbb_e') 1334 CALL iom_set_rstw_var_active('sshb_e') 1335 CALL iom_set_rstw_var_active('ub_e') 1336 CALL iom_set_rstw_var_active('vb_e') 1337 ENDIF 1338 #if defined key_agrif 1339 ! Save time integrated fluxes 1340 IF ( .NOT.Agrif_Root() ) THEN 1341 CALL iom_set_rstw_var_active('ub2_i_b') 1342 CALL iom_set_rstw_var_active('vb2_i_b') 1343 ENDIF 1344 #endif 1345 ENDIF 1346 1324 1347 END SUBROUTINE dyn_spg_ts_init 1325 1348 -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r7646 r8910 44 44 LOGICAL :: ln_clobber !: clobber (overwrite) an existing file 45 45 INTEGER :: nn_chunksz !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 46 LOGICAL :: ln_xios_read !: use xios to read single file restart 47 INTEGER :: nn_wxios !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 46 48 47 49 #if defined key_netcdf4 … … 150 152 LOGICAL :: lsp_area = .TRUE. !: to make a control print over a specific area 151 153 CHARACTER(lc) :: cxios_context !: context name used in xios 154 CHARACTER(lc) :: crxios_context !: context name used in xios to read restart 155 CHARACTER(lc) :: cwxios_context !: context name used in xios to write restart file 152 156 153 157 !!---------------------------------------------------------------------- -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r8868 r8910 44 44 USE ioipsl, ONLY : ju2ymds ! for calendar 45 45 USE crs ! Grid coarsening 46 USE lib_fortran 47 USE diurnal_bulk, ONLY : ln_diurnal_only, ln_diurnal 46 48 47 49 IMPLICIT NONE … … 63 65 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 64 66 PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 67 PRIVATE iom_set_rst_context, iom_set_rstw_active, iom_set_rstr_active 68 PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 65 69 # endif 66 70 … … 89 93 CONTAINS 90 94 91 SUBROUTINE iom_init( cdname )95 SUBROUTINE iom_init( cdname, fname ) 92 96 !!---------------------------------------------------------------------- 93 97 !! *** ROUTINE *** … … 97 101 !!---------------------------------------------------------------------- 98 102 CHARACTER(len=*), INTENT(in) :: cdname 103 CHARACTER(len=*), OPTIONAL, INTENT(in) :: fname 99 104 #if defined key_iomput 100 105 101 106 TYPE(xios_duration) :: dtime = xios_duration(0, 0, 0, 0, 0, 0) 102 107 TYPE(xios_date) :: start_date 103 CHARACTER(len= 10) :: clname108 CHARACTER(len=lc) :: clname 104 109 INTEGER :: ji, jkmin 110 LOGICAL :: llrst_context ! is context related to restart 105 111 ! 106 112 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zt_bnds, zw_bnds … … 113 119 CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 114 120 CALL iom_swap( cdname ) 115 121 llrst_context = (TRIM(cdname) == TRIM(crxios_context) .OR. TRIM(cdname) == TRIM(cwxios_context)) 116 122 117 123 ! Calendar type is now defined in xml file … … 126 132 127 133 ! horizontal grid definition 128 CALL set_scalar134 IF(.NOT.llrst_context) CALL set_scalar 129 135 130 136 IF( TRIM(cdname) == TRIM(cxios_context) ) THEN 131 CALL set_grid( "T", glamt, gphit )132 CALL set_grid( "U", glamu, gphiu )133 CALL set_grid( "V", glamv, gphiv )134 CALL set_grid( "W", glamt, gphit )137 CALL set_grid( "T", glamt, gphit, .FALSE. ) 138 CALL set_grid( "U", glamu, gphiu, .FALSE. ) 139 CALL set_grid( "V", glamv, gphiv, .FALSE. ) 140 CALL set_grid( "W", glamt, gphit, .FALSE. ) 135 141 CALL set_grid_znl( gphit ) 136 142 ! … … 150 156 CALL dom_grid_crs ! Save the parent grid information & Switch to coarse grid domain 151 157 ! 152 CALL set_grid( "T", glamt_crs, gphit_crs )153 CALL set_grid( "U", glamu_crs, gphiu_crs )154 CALL set_grid( "V", glamv_crs, gphiv_crs )155 CALL set_grid( "W", glamt_crs, gphit_crs )158 CALL set_grid( "T", glamt_crs, gphit_crs, .FALSE. ) 159 CALL set_grid( "U", glamu_crs, gphiu_crs, .FALSE. ) 160 CALL set_grid( "V", glamv_crs, gphiv_crs, .FALSE. ) 161 CALL set_grid( "W", glamt_crs, gphit_crs, .FALSE. ) 156 162 CALL set_grid_znl( gphit_crs ) 157 163 ! 158 164 CALL dom_grid_glo ! Return to parent grid domain 159 165 ! 160 IF( ln_cfmeta ) THEN ! Add additional grid metadata166 IF( ln_cfmeta .AND. .NOT. llrst_context) THEN ! Add additional grid metadata 161 167 CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 162 168 CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) … … 171 177 172 178 ! vertical grid definition 173 CALL iom_set_axis_attr( "deptht", gdept_1d ) 174 CALL iom_set_axis_attr( "depthu", gdept_1d ) 175 CALL iom_set_axis_attr( "depthv", gdept_1d ) 176 CALL iom_set_axis_attr( "depthw", gdepw_1d ) 177 178 ! Add vertical grid bounds 179 jkmin = MIN(2,jpk) ! in case jpk=1 (i.e. sas2D) 180 zt_bnds(2,: ) = gdept_1d(:) 181 zt_bnds(1,jkmin:jpk) = gdept_1d(1:jpkm1) 182 zt_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1) 183 zw_bnds(1,: ) = gdepw_1d(:) 184 zw_bnds(2,1:jpkm1 ) = gdepw_1d(jkmin:jpk) 185 zw_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk) 186 CALL iom_set_axis_attr( "deptht", bounds=zt_bnds ) 187 CALL iom_set_axis_attr( "depthu", bounds=zt_bnds ) 188 CALL iom_set_axis_attr( "depthv", bounds=zt_bnds ) 189 CALL iom_set_axis_attr( "depthw", bounds=zw_bnds ) 179 IF(.NOT.llrst_context) THEN 180 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 181 CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 182 CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 183 CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 184 185 ! Add vertical grid bounds 186 jkmin = MIN(2,jpk) ! in case jpk=1 (i.e. sas2D) 187 zt_bnds(2,: ) = gdept_1d(:) 188 zt_bnds(1,jkmin:jpk) = gdept_1d(1:jpkm1) 189 zt_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1) 190 zw_bnds(1,: ) = gdepw_1d(:) 191 zw_bnds(2,1:jpkm1 ) = gdepw_1d(jkmin:jpk) 192 zw_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk) 193 CALL iom_set_axis_attr( "deptht", bounds=zt_bnds ) 194 CALL iom_set_axis_attr( "depthu", bounds=zt_bnds ) 195 CALL iom_set_axis_attr( "depthv", bounds=zt_bnds ) 196 CALL iom_set_axis_attr( "depthw", bounds=zw_bnds ) 190 197 191 198 192 199 # if defined key_floats 193 CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) )200 CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,nfloat) /) ) 194 201 # endif 195 202 #if defined key_lim3 || defined key_lim2 196 CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) )203 CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 197 204 #endif 198 CALL iom_set_axis_attr( "icbcla", class_num )199 CALL iom_set_axis_attr( "iax_20C", (/ REAL(20,wp) /) )200 CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) )201 205 CALL iom_set_axis_attr( "icbcla", class_num ) 206 CALL iom_set_axis_attr( "iax_20C", (/ REAL(20,wp) /) ) 207 CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) ) 208 ENDIF 202 209 ! automatic definitions of some of the xml attributs 203 CALL set_xmlatt 210 IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 211 !set names of the fields in restart file IF using XIOS to read data 212 CALL iom_set_rst_context() 213 CALL iom_set_rst_vars(rst_rfields) 214 !set which fields are to be read from restart file 215 CALL iom_set_rstr_active() 216 ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 217 !set names of the fields in restart file IF using XIOS to write data 218 CALL iom_set_rst_context() 219 CALL iom_set_rst_vars(rst_wfields) 220 !set which fields are to be read from restart file 221 CALL iom_set_rstw_active(fname) 222 ELSE 223 CALL set_xmlatt 224 ENDIF 204 225 205 226 ! end file definition … … 213 234 214 235 #endif 215 236 216 237 END SUBROUTINE iom_init 217 238 239 SUBROUTINE iom_set_rstw_var_active(field) 240 !!--------------------------------------------------------------------- 241 !! *** SUBROUTINE iom_set_rstw_var_active *** 242 !! 243 !! ** Purpose : enable variable in restart file when writing with XIOS 244 !!--------------------------------------------------------------------- 245 CHARACTER(len = *), INTENT(IN) :: field 246 INTEGER :: i 247 LOGICAL :: llis_set 248 249 llis_set = .FALSE. 250 251 DO i = 1, max_rst_fields 252 IF(TRIM(rst_wfields(i)%vname) == field) THEN 253 rst_wfields(i)%active = .TRUE. 254 llis_set = .TRUE. 255 EXIT 256 ENDIF 257 ENDDO 258 !Warn if variable is not in defined in rst_wfields 259 IF(.NOT.llis_set) THEN 260 IF(lwp) THEN 261 write(numout,cform_err) 262 write(numout,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined' 263 ENDIF 264 nstop = nstop + 1 265 ENDIF 266 267 END SUBROUTINE iom_set_rstw_var_active 268 269 SUBROUTINE iom_set_rstr_active() 270 !!--------------------------------------------------------------------- 271 !! *** SUBROUTINE iom_set_rstr_active *** 272 !! 273 !! ** Purpose : define file name in XIOS context for reading restart file, 274 !! enable variables present in restart file for reading with XIOS 275 !!--------------------------------------------------------------------- 276 277 !sets enabled = .TRUE. for each field in restart file 278 CHARACTER(len=256) :: rst_file 279 TYPE(xios_field) :: field_hdl 280 TYPE(xios_file) :: file_hdl 281 TYPE(xios_filegroup) :: filegroup_hdl 282 INTEGER :: i 283 CHARACTER(lc) :: clpath 284 285 clpath = TRIM(cn_ocerst_indir) 286 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 287 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 288 rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 289 ELSE 290 rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 291 ENDIF 292 !set name of the restart file and enable available fields 293 if(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS) to: ',rst_file 294 CALL xios_get_handle("file_definition", filegroup_hdl ) 295 CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 296 CALL xios_set_file_attr( "rrestart", name=trim(rst_file), type="one_file", & 297 par_access="collective", enabled=.TRUE., mode="read", & 298 output_freq=xios_timestep) 299 !define variables for restart context 300 DO i = 1, max_rst_fields 301 IF( TRIM(rst_rfields(i)%vname) /= "NO_NAME") THEN 302 IF( iom_varid( numror, TRIM(rst_rfields(i)%vname), ldstop = .FALSE. ) > 0 ) THEN 303 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 304 SELECT CASE (TRIM(rst_rfields(i)%grid)) 305 CASE ("grid_N_3D") 306 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 307 domain_ref="grid_N", axis_ref="deptht", operation = "instant") 308 CASE ("grid_N") 309 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 310 domain_ref="grid_N", operation = "instant") 311 CASE ("grid_vector") 312 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 313 axis_ref="deptht", operation = "instant") 314 CASE ("grid_scalar") 315 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 316 scalar_ref = "grid_scalar", operation = "instant") 317 END SELECT 318 IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_rfields(i)%vname), ' enabled in ', TRIM(rst_file) 319 ENDIF 320 ENDIF 321 END DO 322 END SUBROUTINE iom_set_rstr_active 323 324 SUBROUTINE iom_set_rstw_core(cdmdl) 325 !!--------------------------------------------------------------------- 326 !! *** SUBROUTINE iom_set_rstw_core *** 327 !! 328 !! ** Purpose : set variables which are always in restart file 329 !!--------------------------------------------------------------------- 330 CHARACTER (len=*), INTENT (IN) :: cdmdl ! model OPA or SAS 331 332 IF(cdmdl == "OPA") THEN 333 !from restart.F90 334 CALL iom_set_rstw_var_active("rdt") 335 IF ( .NOT. ln_diurnal_only ) THEN 336 CALL iom_set_rstw_var_active('ub' ) 337 CALL iom_set_rstw_var_active('vb' ) 338 CALL iom_set_rstw_var_active('tb' ) 339 CALL iom_set_rstw_var_active('sb' ) 340 CALL iom_set_rstw_var_active('sshb') 341 ! 342 CALL iom_set_rstw_var_active('un' ) 343 CALL iom_set_rstw_var_active('vn' ) 344 CALL iom_set_rstw_var_active('tn' ) 345 CALL iom_set_rstw_var_active('sn' ) 346 CALL iom_set_rstw_var_active('sshn') 347 CALL iom_set_rstw_var_active('rhop') 348 ! extra variable needed for the ice sheet coupling 349 IF ( ln_iscpl ) THEN 350 CALL iom_set_rstw_var_active('tmask') 351 CALL iom_set_rstw_var_active('umask') 352 CALL iom_set_rstw_var_active('vmask') 353 CALL iom_set_rstw_var_active('smask') 354 CALL iom_set_rstw_var_active('e3t_n') 355 CALL iom_set_rstw_var_active('e3u_n') 356 CALL iom_set_rstw_var_active('e3v_n') 357 CALL iom_set_rstw_var_active('gdepw_n') 358 END IF 359 ENDIF 360 IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 361 !from trasbc.F90 362 CALL iom_set_rstw_var_active('sbc_hc_b') 363 CALL iom_set_rstw_var_active('sbc_sc_b') 364 ENDIF 365 END SUBROUTINE iom_set_rstw_core 366 367 SUBROUTINE iom_set_rst_vars(fields) 368 !!--------------------------------------------------------------------- 369 !! *** SUBROUTINE iom_set_rstr_active *** 370 !! 371 !! ** Purpose : Fill array fields with the information about all 372 !! possible variables and corresponding grids definition 373 !! for reading/writing restart with XIOS 374 !!--------------------------------------------------------------------- 375 TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 376 377 INTEGER :: i 378 i = 0 379 i = i + 1; fields(i)%vname="rdt"; fields(i)%grid="grid_scalar" 380 i = i + 1; fields(i)%vname="un"; fields(i)%grid="grid_N_3D" 381 i = i + 1; fields(i)%vname="ub"; fields(i)%grid="grid_N_3D" 382 i = i + 1; fields(i)%vname="vn"; fields(i)%grid="grid_N_3D" 383 i = i + 1; fields(i)%vname="vb"; fields(i)%grid="grid_N_3D" 384 i = i + 1; fields(i)%vname="tn"; fields(i)%grid="grid_N_3D" 385 i = i + 1; fields(i)%vname="tb"; fields(i)%grid="grid_N_3D" 386 i = i + 1; fields(i)%vname="sn"; fields(i)%grid="grid_N_3D" 387 i = i + 1; fields(i)%vname="sb"; fields(i)%grid="grid_N_3D" 388 i = i + 1; fields(i)%vname="sshn"; fields(i)%grid="grid_N" 389 i = i + 1; fields(i)%vname="sshb"; fields(i)%grid="grid_N" 390 i = i + 1; fields(i)%vname="rhop"; fields(i)%grid="grid_N_3D" 391 i = i + 1; fields(i)%vname="kt"; fields(i)%grid="grid_scalar" 392 i = i + 1; fields(i)%vname="ndastp"; fields(i)%grid="grid_scalar" 393 i = i + 1; fields(i)%vname="adatrj"; fields(i)%grid="grid_scalar" 394 i = i + 1; fields(i)%vname="utau_b"; fields(i)%grid="grid_N" 395 i = i + 1; fields(i)%vname="vtau_b"; fields(i)%grid="grid_N" 396 i = i + 1; fields(i)%vname="qns_b"; fields(i)%grid="grid_N" 397 i = i + 1; fields(i)%vname="emp_b"; fields(i)%grid="grid_N" 398 i = i + 1; fields(i)%vname="sfx_b"; fields(i)%grid="grid_N" 399 i = i + 1; fields(i)%vname="en" ; fields(i)%grid="grid_N_3D" 400 i = i + 1; fields(i)%vname="avt"; fields(i)%grid="grid_N_3D" 401 i = i + 1; fields(i)%vname="avm"; fields(i)%grid="grid_N_3D" 402 i = i + 1; fields(i)%vname="avmu"; fields(i)%grid="grid_N_3D" 403 i = i + 1; fields(i)%vname="avmv"; fields(i)%grid="grid_N_3D" 404 i = i + 1; fields(i)%vname="dissl"; fields(i)%grid="grid_N_3D" 405 i = i + 1; fields(i)%vname="sbc_hc_b"; fields(i)%grid="grid_N" 406 i = i + 1; fields(i)%vname="sbc_sc_b"; fields(i)%grid="grid_N" 407 i = i + 1; fields(i)%vname="qsr_hc_b"; fields(i)%grid="grid_N_3D" 408 i = i + 1; fields(i)%vname="fraqsr_1lev"; fields(i)%grid="grid_N" 409 i = i + 1; fields(i)%vname="frc_v"; fields(i)%grid="grid_scalar" 410 i = i + 1; fields(i)%vname="frc_t"; fields(i)%grid="grid_scalar" 411 i = i + 1; fields(i)%vname="frc_s"; fields(i)%grid="grid_scalar" 412 i = i + 1; fields(i)%vname="frc_wn_t"; fields(i)%grid="grid_scalar" 413 i = i + 1; fields(i)%vname="frc_wn_s"; fields(i)%grid="grid_scalar" 414 i = i + 1; fields(i)%vname="ssh_ini"; fields(i)%grid="grid_N" 415 i = i + 1; fields(i)%vname="e3t_ini"; fields(i)%grid="grid_N_3D" 416 i = i + 1; fields(i)%vname="hc_loc_ini"; fields(i)%grid="grid_N_3D" 417 i = i + 1; fields(i)%vname="sc_loc_ini"; fields(i)%grid="grid_N_3D" 418 i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 419 i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 420 i = i + 1; fields(i)%vname="tilde_e3t_b"; fields(i)%grid="grid_N" 421 i = i + 1; fields(i)%vname="tilde_e3t_n"; fields(i)%grid="grid_N" 422 i = i + 1; fields(i)%vname="hdiv_lf"; fields(i)%grid="grid_N" 423 i = i + 1; fields(i)%vname="ub2_b"; fields(i)%grid="grid_N" 424 i = i + 1; fields(i)%vname="vb2_b"; fields(i)%grid="grid_N" 425 i = i + 1; fields(i)%vname="sshbb_e"; fields(i)%grid="grid_N" 426 i = i + 1; fields(i)%vname="ubb_e"; fields(i)%grid="grid_N" 427 i = i + 1; fields(i)%vname="vbb_e"; fields(i)%grid="grid_N" 428 i = i + 1; fields(i)%vname="sshb_e"; fields(i)%grid="grid_N" 429 i = i + 1; fields(i)%vname="ub_e"; fields(i)%grid="grid_N" 430 i = i + 1; fields(i)%vname="vb_e"; fields(i)%grid="grid_N" 431 i = i + 1; fields(i)%vname="fwf_isf_b"; fields(i)%grid="grid_N" 432 i = i + 1; fields(i)%vname="isf_sc_b"; fields(i)%grid="grid_N" 433 i = i + 1; fields(i)%vname="isf_hc_b"; fields(i)%grid="grid_N" 434 i = i + 1; fields(i)%vname="ssh_ibb"; fields(i)%grid="grid_N" 435 i = i + 1; fields(i)%vname="rnf_b"; fields(i)%grid="grid_N" 436 i = i + 1; fields(i)%vname="rnf_hc_b"; fields(i)%grid="grid_N" 437 i = i + 1; fields(i)%vname="rnf_sc_b"; fields(i)%grid="grid_N" 438 i = i + 1; fields(i)%vname="nn_fsbc"; fields(i)%grid="grid_scalar" 439 i = i + 1; fields(i)%vname="ssu_m"; fields(i)%grid="grid_N" 440 i = i + 1; fields(i)%vname="ssv_m"; fields(i)%grid="grid_N" 441 i = i + 1; fields(i)%vname="sst_m"; fields(i)%grid="grid_N" 442 i = i + 1; fields(i)%vname="sss_m"; fields(i)%grid="grid_N" 443 i = i + 1; fields(i)%vname="ssh_m"; fields(i)%grid="grid_N" 444 i = i + 1; fields(i)%vname="e3t_m"; fields(i)%grid="grid_N" 445 i = i + 1; fields(i)%vname="frq_m"; fields(i)%grid="grid_N" 446 i = i + 1; fields(i)%vname="avmb"; fields(i)%grid="grid_vector" 447 i = i + 1; fields(i)%vname="avtb"; fields(i)%grid="grid_vector" 448 i = i + 1; fields(i)%vname="ub2_i_b"; fields(i)%grid="grid_N" 449 i = i + 1; fields(i)%vname="vb2_i_b"; fields(i)%grid="grid_N" 450 i = i + 1; fields(i)%vname="ntime"; fields(i)%grid="grid_scalar" 451 i = i + 1; fields(i)%vname="Dsst"; fields(i)%grid="grid_scalar" 452 i = i + 1; fields(i)%vname="tmask"; fields(i)%grid="grid_N_3D" 453 i = i + 1; fields(i)%vname="umask"; fields(i)%grid="grid_N_3D" 454 i = i + 1; fields(i)%vname="vmask"; fields(i)%grid="grid_N_3D" 455 i = i + 1; fields(i)%vname="smask"; fields(i)%grid="grid_N_3D" 456 i = i + 1; fields(i)%vname="gdepw_n"; fields(i)%grid="grid_N_3D" 457 i = i + 1; fields(i)%vname="e3t_n"; fields(i)%grid="grid_N_3D" 458 i = i + 1; fields(i)%vname="e3u_n"; fields(i)%grid="grid_N_3D" 459 i = i + 1; fields(i)%vname="e3v_n"; fields(i)%grid="grid_N_3D" 460 i = i + 1; fields(i)%vname="surf_ini"; fields(i)%grid="grid_N" 461 i = i + 1; fields(i)%vname="e3t_b"; fields(i)%grid="grid_N_3D" 462 i = i + 1; fields(i)%vname="mxln"; fields(i)%grid="grid_N_3D" 463 464 IF( i-1 > max_rst_fields) THEN 465 IF(lwp) write(numout,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 466 nstop = nstop + 1 467 ENDIF 468 469 END SUBROUTINE iom_set_rst_vars 470 471 472 SUBROUTINE iom_set_rstw_active(cdrst_file) 473 !!--------------------------------------------------------------------- 474 !! *** SUBROUTINE iom_set_rstr_active *** 475 !! 476 !! ** Purpose : define file name in XIOS context for writing restart 477 !! enable variables present in restart file for writing 478 !!--------------------------------------------------------------------- 479 !sets enabled = .TRUE. for each field in restart file 480 CHARACTER(len=*) :: cdrst_file 481 #if defined key_iomput 482 TYPE(xios_field) :: field_hdl 483 TYPE(xios_file) :: file_hdl 484 TYPE(xios_filegroup) :: filegroup_hdl 485 INTEGER :: i 486 CHARACTER(lc) :: clpath 487 488 !set name of the restart file and enable available fields 489 IF(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS write) to: ',cdrst_file 490 CALL xios_get_handle("file_definition", filegroup_hdl ) 491 CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 492 IF(nxioso.eq.1) THEN 493 CALL xios_set_file_attr( "wrestart", type="one_file", enabled=.TRUE.,& 494 mode="write", output_freq=xios_timestep) 495 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in one_file mode' 496 ELSE 497 CALL xios_set_file_attr( "wrestart", type="multiple_file", enabled=.TRUE.,& 498 mode="write", output_freq=xios_timestep) 499 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in multiple_file mode' 500 ENDIF 501 CALL xios_set_file_attr( "wrestart", name=trim(cdrst_file)) 502 !defin files for restart context 503 DO i = 1, max_rst_fields 504 IF( rst_wfields(i)%active ) THEN 505 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 506 SELECT CASE (TRIM(rst_wfields(i)%grid)) 507 CASE ("grid_N_3D") 508 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 509 domain_ref="grid_N", axis_ref="deptht", prec = 8, operation = "instant") 510 CASE ("grid_N") 511 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 512 domain_ref="grid_N", prec = 8, operation = "instant") 513 CASE ("grid_vector") 514 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 515 axis_ref="deptht", prec = 8, operation = "instant") 516 CASE ("grid_scalar") 517 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 518 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 519 END SELECT 520 ENDIF 521 END DO 522 #endif 523 END SUBROUTINE iom_set_rstw_active 524 525 SUBROUTINE iom_set_rst_context( ) 526 !!--------------------------------------------------------------------- 527 !! *** SUBROUTINE iom_set_rstr_active *** 528 !! 529 !! ** Purpose : Define domain, axis and grid for restart (read/write) 530 !! context 531 !! 532 !!--------------------------------------------------------------------- 533 #if defined key_iomput 534 TYPE(xios_domaingroup) :: domaingroup_hdl 535 TYPE(xios_domain) :: domain_hdl 536 TYPE(xios_axisgroup) :: axisgroup_hdl 537 TYPE(xios_axis) :: axis_hdl 538 TYPE(xios_scalar) :: scalar_hdl 539 TYPE(xios_scalargroup) :: scalargroup_hdl 540 541 CALL xios_get_handle("domain_definition",domaingroup_hdl) 542 CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N") 543 CALL set_grid("N", glamt, gphit, .TRUE.) 544 545 CALL xios_get_handle("axis_definition",axisgroup_hdl) 546 CALL xios_add_child(axisgroup_hdl, axis_hdl, "deptht") 547 !AGRIF fails to compile when unit= is in call to xios_set_axis_attr 548 ! CALL xios_set_axis_attr( "deptht", long_name="Vertical levels", unit="m", positive="down") 549 CALL xios_set_axis_attr( "deptht", long_name="Vertical levels in meters", positive="down") 550 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 551 552 CALL xios_get_handle("scalar_definition", scalargroup_hdl) 553 CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 554 #endif 555 END SUBROUTINE iom_set_rst_context 218 556 219 557 SUBROUTINE iom_swap( cdname ) … … 226 564 #if defined key_iomput 227 565 TYPE(xios_context) :: nemo_hdl 228 229 566 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 230 567 CALL xios_get_handle(TRIM(cdname),nemo_hdl) … … 347 684 icnt = icnt + 1 348 685 END DO 686 ELSE 687 lxios_sini = .TRUE. 349 688 ENDIF 350 689 IF( llwrt ) THEN … … 530 869 !! INTERFACE iom_get 531 870 !!---------------------------------------------------------------------- 532 SUBROUTINE iom_g0d( kiomid, cdvar, pvar, ktime )871 SUBROUTINE iom_g0d( kiomid, cdvar, pvar, ktime, ldxios ) 533 872 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 534 873 CHARACTER(len=*), INTENT(in ) :: cdvar ! Name of the variable 535 874 REAL(wp) , INTENT( out) :: pvar ! read field 536 875 INTEGER , INTENT(in ), OPTIONAL :: ktime ! record number 876 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! use xios to read restart 537 877 ! 538 878 INTEGER :: idvar ! variable id … … 542 882 CHARACTER(LEN=100) :: clname ! file name 543 883 CHARACTER(LEN=1) :: cldmspc ! 544 ! 545 itime = 1 546 IF( PRESENT(ktime) ) itime = ktime 547 ! 548 clname = iom_file(kiomid)%name 549 clinfo = ' iom_g0d, file: '//trim(clname)//', var: '//trim(cdvar) 550 ! 551 IF( kiomid > 0 ) THEN 552 idvar = iom_varid( kiomid, cdvar ) 553 IF( iom_file(kiomid)%nfid > 0 .AND. idvar > 0 ) THEN 554 idmspc = iom_file ( kiomid )%ndims( idvar ) 555 IF( iom_file(kiomid)%luld(idvar) ) idmspc = idmspc - 1 556 WRITE(cldmspc , fmt='(i1)') idmspc 557 IF( idmspc > 0 ) CALL ctl_stop( TRIM(clinfo), 'When reading to a 0D array, we do not accept data', & 558 & 'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 559 & 'Use ncwa -a to suppress the unnecessary dimensions' ) 560 SELECT CASE (iom_file(kiomid)%iolib) 561 CASE (jpnf90 ) ; CALL iom_nf90_get( kiomid, idvar, pvar, itime ) 562 CASE DEFAULT 563 CALL ctl_stop( 'iom_g0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 564 END SELECT 565 ENDIF 884 LOGICAL :: llxios 885 ! 886 llxios = .FALSE. 887 IF( PRESENT(ldxios) ) llxios = ldxios 888 889 IF(.NOT.llxios) THEN ! read data using default library 890 itime = 1 891 IF( PRESENT(ktime) ) itime = ktime 892 ! 893 clname = iom_file(kiomid)%name 894 clinfo = ' iom_g0d, file: '//trim(clname)//', var: '//trim(cdvar) 895 ! 896 IF( kiomid > 0 ) THEN 897 idvar = iom_varid( kiomid, cdvar ) 898 IF( iom_file(kiomid)%nfid > 0 .AND. idvar > 0 ) THEN 899 idmspc = iom_file ( kiomid )%ndims( idvar ) 900 IF( iom_file(kiomid)%luld(idvar) ) idmspc = idmspc - 1 901 WRITE(cldmspc , fmt='(i1)') idmspc 902 IF( idmspc > 0 ) CALL ctl_stop( TRIM(clinfo), 'When reading to a 0D array, we do not accept data', & 903 & 'with 1 or more spatial dimensions: '//cldmspc//' were found.' , & 904 & 'Use ncwa -a to suppress the unnecessary dimensions' ) 905 SELECT CASE (iom_file(kiomid)%iolib) 906 CASE (jpnf90 ) ; CALL iom_nf90_get( kiomid, idvar, pvar, itime ) 907 CASE DEFAULT 908 CALL ctl_stop( 'iom_g0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 909 END SELECT 910 ENDIF 911 ENDIF 912 ELSE 913 IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 914 CALL iom_swap( TRIM(crxios_context) ) 915 CALL xios_recv_field( trim(cdvar), pvar) 916 CALL iom_swap( TRIM(cxios_context) ) 566 917 ENDIF 567 918 END SUBROUTINE iom_g0d 568 919 569 SUBROUTINE iom_g1d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount )920 SUBROUTINE iom_g1d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, ldxios ) 570 921 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 571 922 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 575 926 INTEGER , INTENT(in ), DIMENSION(1), OPTIONAL :: kstart ! start axis position of the reading 576 927 INTEGER , INTENT(in ), DIMENSION(1), OPTIONAL :: kcount ! number of points in each axis 928 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS 577 929 ! 578 930 IF( kiomid > 0 ) THEN 579 931 IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom , cdvar , pv_r1d=pvar, & 580 & ktime=ktime, kstart=kstart, kcount=kcount ) 932 & ktime=ktime, kstart=kstart, kcount=kcount, & 933 & ldxios=ldxios ) 581 934 ENDIF 582 935 END SUBROUTINE iom_g1d 583 936 584 SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr 937 SUBROUTINE iom_g2d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios) 585 938 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 586 939 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 594 947 ! called open_ocean_jstart to set the start 595 948 ! value for the 2nd dimension (netcdf only) 949 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS 596 950 ! 597 951 IF( kiomid > 0 ) THEN 598 952 IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom , cdvar , pv_r2d=pvar, & 599 953 & ktime=ktime, kstart=kstart, kcount=kcount, & 600 & lrowattr=lrowattr 954 & lrowattr=lrowattr, ldxios=ldxios) 601 955 ENDIF 602 956 END SUBROUTINE iom_g2d 603 957 604 SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr )958 SUBROUTINE iom_g3d( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount, lrowattr, ldxios ) 605 959 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 606 960 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 614 968 ! called open_ocean_jstart to set the start 615 969 ! value for the 2nd dimension (netcdf only) 970 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS 616 971 ! 617 972 IF( kiomid > 0 ) THEN 618 973 IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom , cdvar , pv_r3d=pvar, & 619 974 & ktime=ktime, kstart=kstart, kcount=kcount, & 620 & lrowattr=lrowattr )975 & lrowattr=lrowattr, ldxios=ldxios ) 621 976 ENDIF 622 977 END SUBROUTINE iom_g3d … … 626 981 & pv_r1d, pv_r2d, pv_r3d, & 627 982 & ktime , kstart, kcount, & 628 & lrowattr 983 & lrowattr, ldxios ) 629 984 !!----------------------------------------------------------------------- 630 985 !! *** ROUTINE iom_get_123d *** … … 647 1002 ! called open_ocean_jstart to set the start 648 1003 ! value for the 2nd dimension (netcdf only) 649 ! 1004 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! use XIOS to read restart 1005 ! 1006 LOGICAL :: llxios ! local definition for XIOS read 650 1007 LOGICAL :: llnoov ! local definition to read overlap 651 1008 LOGICAL :: luse_jattr ! local definition to read open_ocean_jstart file attribute … … 674 1031 !--------------------------------------------------------------------- 675 1032 ! 676 clname = iom_file(kiomid)%name ! esier to read 677 clinfo = ' iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 678 ! local definition of the domain ? 1033 REAL(wp) :: gma, gmi 1034 llxios = .FALSE. 1035 if(PRESENT(ldxios)) llxios = ldxios 1036 idvar = iom_varid( kiomid, cdvar ) 679 1037 idom = kdom 680 ! do we read the overlap 681 ! ugly patch SM+JMM+RB to overwrite global definition in some cases 682 llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 683 ! check kcount and kstart optionals parameters... 684 IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 685 IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 686 IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND. idom /= jpdom_autoglo_xy ) & 1038 1039 IF(.NOT.llxios) THEN 1040 clname = iom_file(kiomid)%name ! esier to read 1041 clinfo = ' iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) 1042 ! local definition of the domain ? 1043 ! do we read the overlap 1044 ! ugly patch SM+JMM+RB to overwrite global definition in some cases 1045 llnoov = (jpni * jpnj ) == jpnij .AND. .NOT. lk_agrif 1046 ! check kcount and kstart optionals parameters... 1047 IF( PRESENT(kcount) .AND. (.NOT. PRESENT(kstart)) ) CALL ctl_stop(trim(clinfo), 'kcount present needs kstart present') 1048 IF( PRESENT(kstart) .AND. (.NOT. PRESENT(kcount)) ) CALL ctl_stop(trim(clinfo), 'kstart present needs kcount present') 1049 IF( PRESENT(kstart) .AND. idom /= jpdom_unknown .AND. idom /= jpdom_autoglo_xy ) & 687 1050 & CALL ctl_stop(trim(clinfo), 'kstart present needs kdom = jpdom_unknown or kdom = jpdom_autoglo_xy') 688 1051 … … 701 1064 ENDIF 702 1065 703 ! Search for the variable in the data base (eventually actualize data) 704 istop = nstop 705 idvar = iom_varid( kiomid, cdvar ) 706 ! 707 IF( idvar > 0 ) THEN 708 ! to write iom_file(kiomid)%dimsz in a shorter way ! 709 idimsz(:) = iom_file(kiomid)%dimsz(:, idvar) 710 inbdim = iom_file(kiomid)%ndims(idvar) ! number of dimensions in the file 711 idmspc = inbdim ! number of spatial dimensions in the file 712 IF( iom_file(kiomid)%luld(idvar) ) idmspc = inbdim - 1 713 IF( idmspc > 3 ) CALL ctl_stop(trim(clinfo), 'the file has more than 3 spatial dimensions this case is not coded...') 714 ! 715 ! update idom definition... 716 ! Identify the domain in case of jpdom_auto(glo/dta) definition 717 IF( idom == jpdom_autoglo_xy ) THEN 718 ll_depth_spec = .TRUE. 719 idom = jpdom_autoglo 720 ELSE 721 ll_depth_spec = .FALSE. 722 ENDIF 723 IF( idom == jpdom_autoglo .OR. idom == jpdom_autodta ) THEN 724 IF( idom == jpdom_autoglo ) THEN ; idom = jpdom_global 725 ELSE ; idom = jpdom_data 726 ENDIF 727 ind1 = INDEX( clname, '_', back = .TRUE. ) + 1 728 ind2 = INDEX( clname, '.', back = .TRUE. ) - 1 729 IF( ind2 > ind1 ) THEN ; IF( VERIFY( clname(ind1:ind2), '0123456789' ) == 0 ) idom = jpdom_local ; ENDIF 730 ENDIF 731 ! Identify the domain in case of jpdom_local definition 732 IF( idom == jpdom_local ) THEN 733 IF( idimsz(1) == jpi .AND. idimsz(2) == jpj ) THEN ; idom = jpdom_local_full 734 ELSEIF( idimsz(1) == nlci .AND. idimsz(2) == nlcj ) THEN ; idom = jpdom_local_noextra 735 ELSEIF( idimsz(1) == (nlei - nldi + 1) .AND. idimsz(2) == (nlej - nldj + 1) ) THEN ; idom = jpdom_local_noovlap 736 ELSE ; CALL ctl_stop( trim(clinfo), 'impossible to identify the local domain' ) 737 ENDIF 738 ENDIF 739 ! 740 ! check the consistency between input array and data rank in the file 741 ! 742 ! initializations 743 itime = 1 744 IF( PRESENT(ktime) ) itime = ktime 745 746 irankpv = 1 * COUNT( (/PRESENT(pv_r1d)/) ) + 2 * COUNT( (/PRESENT(pv_r2d)/) ) + 3 * COUNT( (/PRESENT(pv_r3d)/) ) 747 WRITE(clrankpv, fmt='(i1)') irankpv 748 WRITE(cldmspc , fmt='(i1)') idmspc 749 ! 750 IF( idmspc < irankpv ) THEN 751 CALL ctl_stop( TRIM(clinfo), 'The file has only '//cldmspc//' spatial dimension', & 1066 ! Search for the variable in the data base (eventually actualize data) 1067 istop = nstop 1068 ! 1069 IF( idvar > 0 ) THEN 1070 ! to write iom_file(kiomid)%dimsz in a shorter way ! 1071 idimsz(:) = iom_file(kiomid)%dimsz(:, idvar) 1072 inbdim = iom_file(kiomid)%ndims(idvar) ! number of dimensions in the file 1073 idmspc = inbdim ! number of spatial dimensions in the file 1074 IF( iom_file(kiomid)%luld(idvar) ) idmspc = inbdim - 1 1075 IF( idmspc > 3 ) CALL ctl_stop(trim(clinfo), 'the file has more than 3 spatial dimensions this case is not coded...') 1076 ! 1077 ! update idom definition... 1078 ! Identify the domain in case of jpdom_auto(glo/dta) definition 1079 IF( idom == jpdom_autoglo_xy ) THEN 1080 ll_depth_spec = .TRUE. 1081 idom = jpdom_autoglo 1082 ELSE 1083 ll_depth_spec = .FALSE. 1084 ENDIF 1085 IF( idom == jpdom_autoglo .OR. idom == jpdom_autodta ) THEN 1086 IF( idom == jpdom_autoglo ) THEN ; idom = jpdom_global 1087 ELSE ; idom = jpdom_data 1088 ENDIF 1089 ind1 = INDEX( clname, '_', back = .TRUE. ) + 1 1090 ind2 = INDEX( clname, '.', back = .TRUE. ) - 1 1091 IF( ind2 > ind1 ) THEN ; IF( VERIFY( clname(ind1:ind2), '0123456789' ) == 0 ) idom = jpdom_local ; ENDIF 1092 ENDIF 1093 ! Identify the domain in case of jpdom_local definition 1094 IF( idom == jpdom_local ) THEN 1095 IF( idimsz(1) == jpi .AND. idimsz(2) == jpj ) THEN ; idom = jpdom_local_full 1096 ELSEIF( idimsz(1) == nlci .AND. idimsz(2) == nlcj ) THEN ; idom = jpdom_local_noextra 1097 ELSEIF( idimsz(1) == (nlei - nldi + 1) .AND. idimsz(2) == (nlej - nldj + 1) ) THEN ; idom = jpdom_local_noovlap 1098 ELSE ; CALL ctl_stop( trim(clinfo), 'impossible to identify the local domain' ) 1099 ENDIF 1100 ENDIF 1101 ! 1102 ! check the consistency between input array and data rank in the file 1103 ! 1104 ! initializations 1105 itime = 1 1106 IF( PRESENT(ktime) ) itime = ktime 1107 1108 irankpv = 1 * COUNT( (/PRESENT(pv_r1d)/) ) + 2 * COUNT( (/PRESENT(pv_r2d)/) ) + 3 * COUNT( (/PRESENT(pv_r3d)/) ) 1109 WRITE(clrankpv, fmt='(i1)') irankpv 1110 WRITE(cldmspc , fmt='(i1)') idmspc 1111 ! 1112 IF( idmspc < irankpv ) THEN 1113 CALL ctl_stop( TRIM(clinfo), 'The file has only '//cldmspc//' spatial dimension', & 752 1114 & 'it is impossible to read a '//clrankpv//'D array from this file...' ) 753 ELSEIF( idmspc == irankpv ) THEN754 IF( PRESENT(pv_r1d) .AND. idom /= jpdom_unknown ) &1115 ELSEIF( idmspc == irankpv ) THEN 1116 IF( PRESENT(pv_r1d) .AND. idom /= jpdom_unknown ) & 755 1117 & CALL ctl_stop( TRIM(clinfo), 'case not coded...You must use jpdom_unknown' ) 756 ELSEIF( idmspc > irankpv ) THEN757 IF( PRESENT(pv_r2d) .AND. itime == 1 .AND. idimsz(3) == 1 .AND. idmspc == 3 ) THEN758 CALL ctl_warn( trim(clinfo), '2D array but 3 spatial dimensions for the data...' , &1118 ELSEIF( idmspc > irankpv ) THEN 1119 IF( PRESENT(pv_r2d) .AND. itime == 1 .AND. idimsz(3) == 1 .AND. idmspc == 3 ) THEN 1120 CALL ctl_warn( trim(clinfo), '2D array but 3 spatial dimensions for the data...' , & 759 1121 & 'As the size of the z dimension is 1 and as we try to read the first record, ', & 760 1122 & 'we accept this case, even if there is a possible mix-up between z and time dimension' ) 761 idmspc = idmspc - 1762 ELSE763 CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,' , &1123 idmspc = idmspc - 1 1124 ELSE 1125 CALL ctl_stop( TRIM(clinfo), 'To keep iom lisibility, when reading a '//clrankpv//'D array,' , & 764 1126 & 'we do not accept data with '//cldmspc//' spatial dimensions', & 765 1127 & 'Use ncwa -a to suppress the unnecessary dimensions' ) 766 ENDIF767 ENDIF768 769 !770 ! definition of istart and icnt771 !772 icnt (:) = 1773 istart(:) = 1774 istart(idmspc+1) = itime1128 ENDIF 1129 ENDIF 1130 1131 ! 1132 ! definition of istart and icnt 1133 ! 1134 icnt (:) = 1 1135 istart(:) = 1 1136 istart(idmspc+1) = itime 775 1137 776 1138 IF( PRESENT(kstart) .AND. .NOT. ll_depth_spec ) THEN … … 793 1155 ! JMM + SM: ugly patch before getting the new version of lib_mpp) 794 1156 ! IF( idom /= jpdom_local_noovlap ) istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /) 795 IF( llnoov .AND. idom /= jpdom_local_noovlap ) istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /)1157 IF( llnoov .AND. idom /= jpdom_local_noovlap ) istart(1:2) = istart(1:2) + (/ nldi - 1, nldj - 1 /) 796 1158 ! we do not read the overlap and the extra-halos -> from nldi to nlei and from nldj to nlej 797 1159 ! JMM + SM: ugly patch before getting the new version of lib_mpp) … … 810 1172 ENDIF 811 1173 812 ! check that istart and icnt can be used with this file813 !-814 DO jl = 1, jpmax_dims815 itmp = istart(jl)+icnt(jl)-1816 IF( itmp > idimsz(jl) .AND. idimsz(jl) /= 0 ) THEN817 WRITE( ctmp1, FMT="('(istart(', i1, ') + icnt(', i1, ') - 1) = ', i5)" ) jl, jl, itmp818 WRITE( ctmp2, FMT="(' is larger than idimsz(', i1,') = ', i5)" ) jl, idimsz(jl)819 CALL ctl_stop( trim(clinfo), 'start and count too big regarding to the size of the data, ', ctmp1, ctmp2 )820 ENDIF821 END DO822 823 ! check that icnt matches the input array824 !-825 IF( idom == jpdom_unknown ) THEN826 IF( irankpv == 1 ) ishape(1:1) = SHAPE(pv_r1d)827 IF( irankpv == 2 ) ishape(1:2) = SHAPE(pv_r2d)828 IF( irankpv == 3 ) ishape(1:3) = SHAPE(pv_r3d)829 ctmp1 = 'd'830 ELSE831 IF( irankpv == 2 ) THEN1174 ! check that istart and icnt can be used with this file 1175 !- 1176 DO jl = 1, jpmax_dims 1177 itmp = istart(jl)+icnt(jl)-1 1178 IF( itmp > idimsz(jl) .AND. idimsz(jl) /= 0 ) THEN 1179 WRITE( ctmp1, FMT="('(istart(', i1, ') + icnt(', i1, ') - 1) = ', i5)" ) jl, jl, itmp 1180 WRITE( ctmp2, FMT="(' is larger than idimsz(', i1,') = ', i5)" ) jl, idimsz(jl) 1181 CALL ctl_stop( trim(clinfo), 'start and count too big regarding to the size of the data, ', ctmp1, ctmp2 ) 1182 ENDIF 1183 END DO 1184 1185 ! check that icnt matches the input array 1186 !- 1187 IF( idom == jpdom_unknown ) THEN 1188 IF( irankpv == 1 ) ishape(1:1) = SHAPE(pv_r1d) 1189 IF( irankpv == 2 ) ishape(1:2) = SHAPE(pv_r2d) 1190 IF( irankpv == 3 ) ishape(1:3) = SHAPE(pv_r3d) 1191 ctmp1 = 'd' 1192 ELSE 1193 IF( irankpv == 2 ) THEN 832 1194 ! JMM + SM: ugly patch before getting the new version of lib_mpp) 833 1195 ! ishape(1:2) = SHAPE(pv_r2d(nldi:nlei,nldj:nlej )) ; ctmp1 = 'd(nldi:nlei,nldj:nlej)' 834 IF( llnoov ) THEN ; ishape(1:2)=SHAPE(pv_r2d(nldi:nlei,nldj:nlej )) ; ctmp1='d(nldi:nlei,nldj:nlej)'835 ELSE ; ishape(1:2)=SHAPE(pv_r2d(1 :nlci,1 :nlcj )) ; ctmp1='d(1:nlci,1:nlcj)'836 ENDIF837 ENDIF838 IF( irankpv == 3 ) THEN1196 IF( llnoov ) THEN ; ishape(1:2)=SHAPE(pv_r2d(nldi:nlei,nldj:nlej )) ; ctmp1='d(nldi:nlei,nldj:nlej)' 1197 ELSE ; ishape(1:2)=SHAPE(pv_r2d(1 :nlci,1 :nlcj )) ; ctmp1='d(1:nlci,1:nlcj)' 1198 ENDIF 1199 ENDIF 1200 IF( irankpv == 3 ) THEN 839 1201 ! JMM + SM: ugly patch before getting the new version of lib_mpp) 840 1202 ! ishape(1:3) = SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:)) ; ctmp1 = 'd(nldi:nlei,nldj:nlej,:)' 841 IF( llnoov ) THEN ; ishape(1:3)=SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:)) ; ctmp1='d(nldi:nlei,nldj:nlej,:)'842 ELSE ; ishape(1:3)=SHAPE(pv_r3d(1 :nlci,1 :nlcj,:)) ; ctmp1='d(1:nlci,1:nlcj,:)'843 ENDIF844 ENDIF845 ENDIF1203 IF( llnoov ) THEN ; ishape(1:3)=SHAPE(pv_r3d(nldi:nlei,nldj:nlej,:)) ; ctmp1='d(nldi:nlei,nldj:nlej,:)' 1204 ELSE ; ishape(1:3)=SHAPE(pv_r3d(1 :nlci,1 :nlcj,:)) ; ctmp1='d(1:nlci,1:nlcj,:)' 1205 ENDIF 1206 ENDIF 1207 ENDIF 846 1208 847 DO jl = 1, irankpv848 WRITE( ctmp2, FMT="(', ', i1,'): ', i5,' /= icnt(', i1,'):', i5)" ) jl, ishape(jl), jl, icnt(jl)849 IF( ishape(jl) /= icnt(jl) ) CALL ctl_stop( TRIM(clinfo), 'size(pv_r'//clrankpv//TRIM(ctmp1)//TRIM(ctmp2) )850 END DO851 852 ENDIF853 854 ! read the data855 !-856 IF( idvar > 0 .AND. istop == nstop ) THEN ! no additional errors until this point...857 !858 ! find the right index of the array to be read1209 DO jl = 1, irankpv 1210 WRITE( ctmp2, FMT="(', ', i1,'): ', i5,' /= icnt(', i1,'):', i5)" ) jl, ishape(jl), jl, icnt(jl) 1211 IF( ishape(jl) /= icnt(jl) ) CALL ctl_stop( TRIM(clinfo), 'size(pv_r'//clrankpv//TRIM(ctmp1)//TRIM(ctmp2) ) 1212 END DO 1213 1214 ENDIF 1215 1216 ! read the data 1217 !- 1218 IF( idvar > 0 .AND. istop == nstop ) THEN ! no additional errors until this point... 1219 ! 1220 ! find the right index of the array to be read 859 1221 ! JMM + SM: ugly patch before getting the new version of lib_mpp) 860 1222 ! IF( idom /= jpdom_unknown ) THEN ; ix1 = nldi ; ix2 = nlei ; iy1 = nldj ; iy2 = nlej 861 1223 ! ELSE ; ix1 = 1 ; ix2 = icnt(1) ; iy1 = 1 ; iy2 = icnt(2) 862 1224 ! ENDIF 863 IF( llnoov ) THEN864 IF( idom /= jpdom_unknown ) THEN ; ix1 = nldi ; ix2 = nlei ; iy1 = nldj ; iy2 = nlej865 ELSE ; ix1 = 1 ; ix2 = icnt(1) ; iy1 = 1 ; iy2 = icnt(2)866 ENDIF867 ELSE868 IF( idom /= jpdom_unknown ) THEN ; ix1 = 1 ; ix2 = nlci ; iy1 = 1 ; iy2 = nlcj869 ELSE ; ix1 = 1 ; ix2 = icnt(1) ; iy1 = 1 ; iy2 = icnt(2)870 ENDIF871 ENDIF1225 IF( llnoov ) THEN 1226 IF( idom /= jpdom_unknown ) THEN ; ix1 = nldi ; ix2 = nlei ; iy1 = nldj ; iy2 = nlej 1227 ELSE ; ix1 = 1 ; ix2 = icnt(1) ; iy1 = 1 ; iy2 = icnt(2) 1228 ENDIF 1229 ELSE 1230 IF( idom /= jpdom_unknown ) THEN ; ix1 = 1 ; ix2 = nlci ; iy1 = 1 ; iy2 = nlcj 1231 ELSE ; ix1 = 1 ; ix2 = icnt(1) ; iy1 = 1 ; iy2 = icnt(2) 1232 ENDIF 1233 ENDIF 872 1234 873 1235 SELECT CASE (iom_file(kiomid)%iolib) … … 878 1240 END SELECT 879 1241 880 IF( istop == nstop ) THEN ! no additional errors until this point...881 IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name)1242 IF( istop == nstop ) THEN ! no additional errors until this point... 1243 IF(lwp) WRITE(numout,"(10x,' read ',a,' (rec: ',i6,') in ',a,' ok')") TRIM(cdvar), itime, TRIM(iom_file(kiomid)%name) 882 1244 883 !--- overlap areas and extra hallows (mpp) 884 IF( PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 885 CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 886 ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 887 ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 888 IF( icnt(3) == jpk ) THEN 889 CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 890 ELSE ! put some arbitrary value (a call to lbc_lnk will be done later...) 891 DO jj = nlcj+1, jpj ; pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :) ; END DO 892 DO ji = nlci+1, jpi ; pv_r3d(ji , : , :) = pv_r3d(nlei , : , :) ; END DO 893 ENDIF 894 ENDIF 895 896 ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 897 IF( lk_c1d .AND. PRESENT(pv_r2d) ) CALL lbc_lnk( pv_r2d,'Z',1. ) 898 IF( lk_c1d .AND. PRESENT(pv_r3d) ) CALL lbc_lnk( pv_r3d,'Z',1. ) 899 900 !--- Apply scale_factor and offset 901 zscf = iom_file(kiomid)%scf(idvar) ! scale factor 902 zofs = iom_file(kiomid)%ofs(idvar) ! offset 903 IF( PRESENT(pv_r1d) ) THEN 904 IF( zscf /= 1. ) pv_r1d(:) = pv_r1d(:) * zscf 905 IF( zofs /= 0. ) pv_r1d(:) = pv_r1d(:) + zofs 906 ELSEIF( PRESENT(pv_r2d) ) THEN 907 IF( zscf /= 1.) pv_r2d(:,:) = pv_r2d(:,:) * zscf 908 IF( zofs /= 0.) pv_r2d(:,:) = pv_r2d(:,:) + zofs 909 ELSEIF( PRESENT(pv_r3d) ) THEN 910 IF( zscf /= 1.) pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 911 IF( zofs /= 0.) pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 912 ENDIF 913 ! 914 ENDIF 915 ! 916 ENDIF 917 ! 1245 !--- overlap areas and extra hallows (mpp) 1246 IF( PRESENT(pv_r2d) .AND. idom /= jpdom_unknown ) THEN 1247 CALL lbc_lnk( pv_r2d,'Z',-999.,'no0' ) 1248 ELSEIF( PRESENT(pv_r3d) .AND. idom /= jpdom_unknown ) THEN 1249 ! this if could be simplified with the new lbc_lnk that works with any size of the 3rd dimension 1250 IF( icnt(3) == jpk ) THEN 1251 CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 1252 ELSE ! put some arbitrary value (a call to lbc_lnk will be done later...) 1253 DO jj = nlcj+1, jpj ; pv_r3d(1:nlci, jj, :) = pv_r3d(1:nlci, nlej, :) ; END DO 1254 DO ji = nlci+1, jpi ; pv_r3d(ji , : , :) = pv_r3d(nlei , : , :) ; END DO 1255 ENDIF 1256 ENDIF 1257 ! 1258 ELSE 1259 ! return if istop == nstop is false 1260 RETURN 1261 ENDIF 1262 ELSE 1263 ! return if statment idvar > 0 .AND. istop == nstop is false 1264 RETURN 1265 ENDIF 1266 ! 1267 ELSE ! read using XIOS. Only if KEY_IOMPUT is defined 1268 #if defined key_iomput 1269 !would be good to be able to check which context is active and swap only if current is not restart 1270 CALL iom_swap( TRIM(crxios_context) ) 1271 IF( PRESENT(pv_r3d) ) THEN 1272 if(lwp) write(numout,*) 'XIOS RST READ (3D): ',trim(cdvar) 1273 CALL xios_recv_field( trim(cdvar), pv_r3d) 1274 IF(idom /= jpdom_unknown ) then 1275 CALL lbc_lnk( pv_r3d,'Z',-999.,'no0' ) 1276 ENDIF 1277 ELSEIF( PRESENT(pv_r2d) ) THEN 1278 if(lwp) write(numout,*) 'XIOS RST READ (2D): ', trim(cdvar) 1279 CALL xios_recv_field( trim(cdvar), pv_r2d) 1280 IF(idom /= jpdom_unknown ) THEN 1281 CALL lbc_lnk(pv_r2d,'Z',-999.,'no0') 1282 ENDIF 1283 ELSEIF( PRESENT(pv_r1d) ) THEN 1284 if(lwp) write(numout,*) 'XIOS RST READ (1D): ', trim(cdvar) 1285 CALL xios_recv_field( trim(cdvar), pv_r1d) 1286 ENDIF 1287 CALL iom_swap( TRIM(cxios_context) ) 1288 #else 1289 istop = istop + 1 1290 clinfo = 'Can not use XIOS in iom_get_123d, file: '//trim(clname)//', var:'//trim(cdvar) 1291 #endif 1292 ENDIF 1293 !some final adjustments 1294 ! C1D case : always call lbc_lnk to replicate the central value over the whole 3X3 domain 1295 IF( lk_c1d .AND. PRESENT(pv_r2d) ) CALL lbc_lnk( pv_r2d,'Z',1. ) 1296 IF( lk_c1d .AND. PRESENT(pv_r3d) ) CALL lbc_lnk( pv_r3d,'Z',1. ) 1297 1298 !--- Apply scale_factor and offset 1299 zscf = iom_file(kiomid)%scf(idvar) ! scale factor 1300 zofs = iom_file(kiomid)%ofs(idvar) ! offset 1301 IF( PRESENT(pv_r1d) ) THEN 1302 IF( zscf /= 1. ) pv_r1d(:) = pv_r1d(:) * zscf 1303 IF( zofs /= 0. ) pv_r1d(:) = pv_r1d(:) + zofs 1304 ELSEIF( PRESENT(pv_r2d) ) THEN 1305 IF( zscf /= 1.) pv_r2d(:,:) = pv_r2d(:,:) * zscf 1306 IF( zofs /= 0.) pv_r2d(:,:) = pv_r2d(:,:) + zofs 1307 ELSEIF( PRESENT(pv_r3d) ) THEN 1308 IF( zscf /= 1.) pv_r3d(:,:,:) = pv_r3d(:,:,:) * zscf 1309 IF( zofs /= 0.) pv_r3d(:,:,:) = pv_r3d(:,:,:) + zofs 1310 ENDIF 918 1311 END SUBROUTINE iom_get_123d 919 1312 … … 1115 1508 !! INTERFACE iom_rstput 1116 1509 !!---------------------------------------------------------------------- 1117 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype )1510 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1118 1511 INTEGER , INTENT(in) :: kt ! ocean time-step 1119 1512 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1122 1515 REAL(wp) , INTENT(in) :: pvar ! written field 1123 1516 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1517 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1518 LOGICAL :: llx ! local xios write flag 1124 1519 INTEGER :: ivid ! variable id 1125 IF( kiomid > 0 ) THEN 1126 IF( iom_file(kiomid)%nfid > 0 ) THEN 1127 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1128 SELECT CASE (iom_file(kiomid)%iolib) 1129 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1130 CASE DEFAULT 1131 CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1132 END SELECT 1520 1521 llx = .FALSE. 1522 IF(PRESENT(ldxios)) llx = ldxios 1523 IF( llx ) THEN 1524 #ifdef key_iomput 1525 IF( kt == kwrite ) THEN 1526 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1527 CALL xios_send_field(trim(cdvar), pvar) 1528 ENDIF 1529 #endif 1530 ELSE 1531 IF( kiomid > 0 ) THEN 1532 IF( iom_file(kiomid)%nfid > 0 ) THEN 1533 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1534 SELECT CASE (iom_file(kiomid)%iolib) 1535 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1536 CASE DEFAULT 1537 CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1538 END SELECT 1539 ENDIF 1133 1540 ENDIF 1134 1541 ENDIF 1135 1542 END SUBROUTINE iom_rp0d 1136 1543 1137 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype )1544 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1138 1545 INTEGER , INTENT(in) :: kt ! ocean time-step 1139 1546 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1142 1549 REAL(wp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1143 1550 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1551 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1552 LOGICAL :: llx ! local xios write flag 1144 1553 INTEGER :: ivid ! variable id 1145 IF( kiomid > 0 ) THEN 1146 IF( iom_file(kiomid)%nfid > 0 ) THEN 1147 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1148 SELECT CASE (iom_file(kiomid)%iolib) 1149 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1150 CASE DEFAULT 1151 CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1152 END SELECT 1554 1555 llx = .FALSE. 1556 IF(PRESENT(ldxios)) llx = ldxios 1557 IF( llx ) THEN 1558 #ifdef key_iomput 1559 IF( kt == kwrite ) THEN 1560 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1561 CALL xios_send_field(trim(cdvar), pvar) 1562 ENDIF 1563 #endif 1564 ELSE 1565 IF( kiomid > 0 ) THEN 1566 IF( iom_file(kiomid)%nfid > 0 ) THEN 1567 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1568 SELECT CASE (iom_file(kiomid)%iolib) 1569 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1570 CASE DEFAULT 1571 CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1572 END SELECT 1573 ENDIF 1153 1574 ENDIF 1154 1575 ENDIF 1155 1576 END SUBROUTINE iom_rp1d 1156 1577 1157 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype )1578 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1158 1579 INTEGER , INTENT(in) :: kt ! ocean time-step 1159 1580 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1162 1583 REAL(wp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1163 1584 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1585 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1586 LOGICAL :: llx 1164 1587 INTEGER :: ivid ! variable id 1165 IF( kiomid > 0 ) THEN 1166 IF( iom_file(kiomid)%nfid > 0 ) THEN 1167 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1168 SELECT CASE (iom_file(kiomid)%iolib) 1169 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1170 CASE DEFAULT 1171 CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1172 END SELECT 1588 1589 llx = .FALSE. 1590 IF(PRESENT(ldxios)) llx = ldxios 1591 IF( llx ) THEN 1592 #ifdef key_iomput 1593 IF( kt == kwrite ) THEN 1594 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1595 CALL xios_send_field(trim(cdvar), pvar) 1596 ENDIF 1597 #endif 1598 ELSE 1599 IF( kiomid > 0 ) THEN 1600 IF( iom_file(kiomid)%nfid > 0 ) THEN 1601 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1602 SELECT CASE (iom_file(kiomid)%iolib) 1603 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1604 CASE DEFAULT 1605 CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1606 END SELECT 1607 ENDIF 1173 1608 ENDIF 1174 1609 ENDIF 1175 1610 END SUBROUTINE iom_rp2d 1176 1611 1177 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype )1612 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1178 1613 INTEGER , INTENT(in) :: kt ! ocean time-step 1179 1614 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1182 1617 REAL(wp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1183 1618 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1619 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1620 LOGICAL :: llx ! local xios write flag 1184 1621 INTEGER :: ivid ! variable id 1185 IF( kiomid > 0 ) THEN 1186 IF( iom_file(kiomid)%nfid > 0 ) THEN 1187 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1188 SELECT CASE (iom_file(kiomid)%iolib) 1189 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1190 CASE DEFAULT 1191 CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1192 END SELECT 1622 1623 llx = .FALSE. 1624 IF(PRESENT(ldxios)) llx = ldxios 1625 IF( llx ) THEN 1626 #ifdef key_iomput 1627 IF( kt == kwrite ) THEN 1628 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1629 CALL xios_send_field(trim(cdvar), pvar) 1630 ENDIF 1631 #endif 1632 ELSE 1633 IF( kiomid > 0 ) THEN 1634 IF( iom_file(kiomid)%nfid > 0 ) THEN 1635 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1636 SELECT CASE (iom_file(kiomid)%iolib) 1637 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1638 CASE DEFAULT 1639 CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1640 END SELECT 1641 ENDIF 1193 1642 ENDIF 1194 1643 ENDIF … … 1262 1711 & lonvalue_1D=lonvalue, latvalue_1D=latvalue, mask_1D=mask, nvertex=nvertex, bounds_lon_1D=bounds_lon, & 1263 1712 & bounds_lat_1D=bounds_lat, area=area, type='curvilinear') 1264 ENDIF1713 ENDIF 1265 1714 IF ( xios_is_valid_domaingroup(cdid) ) THEN 1266 1715 CALL xios_set_domaingroup_attr( cdid, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj, & … … 1368 1817 SUBROUTINE iom_context_finalize( cdname ) 1369 1818 CHARACTER(LEN=*), INTENT(in) :: cdname 1370 ! 1371 IF( xios_is_valid_context(cdname) ) THEN 1819 CHARACTER(LEN=120) :: clname 1820 ! 1821 clname = cdname 1822 IF( TRIM(Agrif_CFixed()) .NE. '0' ) clname = TRIM(Agrif_CFixed())//"_"//clname 1823 1824 IF( xios_is_valid_context(clname) ) THEN 1372 1825 CALL iom_swap( cdname ) ! swap to cdname context 1373 1826 CALL xios_context_finalize() ! finalize the context … … 1378 1831 1379 1832 1380 SUBROUTINE set_grid( cdgrd, plon, plat )1833 SUBROUTINE set_grid( cdgrd, plon, plat, ldxios ) 1381 1834 !!---------------------------------------------------------------------- 1382 1835 !! *** ROUTINE set_grid *** … … 1391 1844 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask 1392 1845 INTEGER :: ni,nj 1846 LOGICAL, INTENT(IN) :: ldxios 1393 1847 1394 1848 ni=nlei-nldi+1 ; nj=nlej-nldj+1 … … 1396 1850 CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-2, jbegin=njmpp+nldj-2, ni=ni, nj=nj) 1397 1851 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1398 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), &1852 if(.NOT.ldxios) CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), & 1399 1853 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1400 1854 1401 IF ( ln_mskland ) THEN1855 IF ( ln_mskland.AND.(.NOT.ldxios) ) THEN 1402 1856 ! mask land points, keep values on coast line -> specific mask for U, V and W points 1403 1857 SELECT CASE ( cdgrd ) … … 1439 1893 ! Offset of coordinate representing bottom-left corner 1440 1894 SELECT CASE ( TRIM(cdgrd) ) 1441 CASE ('T', 'W' )1895 CASE ('T', 'W', 'N') 1442 1896 icnr = -1 ; jcnr = -1 1443 1897 CASE ('U') -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90
r7646 r8910 44 44 INTEGER, PARAMETER, PUBLIC :: jpmax_digits = 5 !: maximum number of digits for the cpu number in the file name 45 45 46 46 47 !$AGRIF_DO_NOT_TREAT 47 48 INTEGER, PUBLIC :: iom_open_init = 0 !: used to initialize iom_file(:)%nfid to 0 49 !XIOS write restart 50 LOGICAL, PUBLIC :: lwxios !: write single file restart using XIOS 51 INTEGER, PUBLIC :: nxioso !: type of restart file when writing using XIOS 1 - single, 2 - multiple 52 !XIOS read restart 53 LOGICAL, PUBLIC :: lrxios !: read single file restart using XIOS 54 LOGICAL, PUBLIC :: lxios_sini = .FALSE. ! is restart in a single file 55 LOGICAL, PUBLIC :: lxios_set = .FALSE. 56 57 48 58 49 59 TYPE, PUBLIC :: file_descriptor … … 66 76 END TYPE file_descriptor 67 77 TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC :: iom_file !: array containing the info for all opened files 78 INTEGER, PARAMETER, PUBLIC :: max_rst_fields = 95 !: maximum number of restart variables defined in iom_set_rst_vars 79 TYPE, PUBLIC :: RST_FIELD 80 CHARACTER(len=30) :: vname = "NO_NAME" ! names of variables in restart file 81 CHARACTER(len=30) :: grid = "NO_GRID" 82 LOGICAL :: active =.FALSE. ! for restart write only: true - write field, false do not write field 83 END TYPE RST_FIELD 68 84 !$AGRIF_END_DO_NOT_TREAT 85 86 TYPE(RST_FIELD), PUBLIC :: rst_wfields(max_rst_fields), rst_rfields(max_rst_fields) 69 87 70 88 !!===================================================================== -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90
r7646 r8910 126 126 CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'x', kdompar(1,1) , idmy ), clinfo) 127 127 CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'y', kdompar(2,1) , idmy ), clinfo) 128 CALL iom_nf90_check(NF90_DEF_DIM( if90id, ' z', jpk , idmy ), clinfo)129 CALL iom_nf90_check(NF90_DEF_DIM( if90id, 't ', NF90_UNLIMITED, idmy ), clinfo)128 CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'nav_lev', jpk , idmy ), clinfo) 129 CALL iom_nf90_check(NF90_DEF_DIM( if90id, 'time_counter', NF90_UNLIMITED, idmy ), clinfo) 130 130 ! global attributes 131 131 CALL iom_nf90_check(NF90_PUT_ATT( if90id, NF90_GLOBAL, 'DOMAIN_number_total' , jpnij ), clinfo) -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r6140 r8910 28 28 USE iom ! I/O module 29 29 USE diurnal_bulk 30 30 31 31 IMPLICIT NONE 32 32 PRIVATE … … 61 61 CHARACTER(LEN=50) :: clname ! ocean output restart file name 62 62 CHARACTER(lc) :: clpath ! full path to ocean output restart file 63 CHARACTER(LEN=52) :: clpname ! ocean output restart file name including prefix for AGRIF 63 64 !!---------------------------------------------------------------------- 64 65 ! … … 94 95 IF(lwp) THEN 95 96 WRITE(numout,*) 96 SELECT CASE ( jprstlib ) 97 CASE DEFAULT ; WRITE(numout,*) & 98 ' open ocean restart NetCDF file: ',TRIM(clpath)//clname 99 END SELECT 100 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 101 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 102 ELSE ; WRITE(numout,*) ' kt = ' , kt 97 IF(.NOT.lwxios) THEN 98 SELECT CASE ( jprstlib ) 99 CASE DEFAULT ; WRITE(numout,*) & 100 ' open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 101 END SELECT 102 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 103 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 104 ELSE ; WRITE(numout,*) ' kt = ' , kt 105 ENDIF 103 106 ENDIF 104 107 ENDIF 105 108 ! 106 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 109 IF(.NOT.lwxios) THEN 110 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 111 ELSE 112 cwxios_context = "rstw_"//TRIM(ADJUSTL(clkt)) 113 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 114 clpname = clname 115 ELSE 116 clpname = TRIM(Agrif_CFixed())//"_"//clname 117 ENDIF 118 CALL iom_init( cwxios_context, TRIM(clpath)//TRIM(clpname)) 119 CALL xios_update_calendar(nitrst) 120 CALL iom_swap( cxios_context ) 121 ENDIF 107 122 lrst_oce = .TRUE. 108 123 ENDIF … … 123 138 INTEGER, INTENT(in) :: kt ! ocean time-step 124 139 !!---------------------------------------------------------------------- 125 126 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt ) ! dynamics and tracertime step140 IF(lwxios) CALL iom_swap( cwxios_context ) 141 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt , ldxios = lwxios) ! dynamics time step 127 142 128 143 IF ( .NOT. ln_diurnal_only ) THEN 129 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub ) ! before fields130 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb )131 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem) )132 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal) )133 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb )144 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub, ldxios = lwxios ) ! before fields 145 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb, ldxios = lwxios ) 146 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem), ldxios = lwxios ) 147 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal), ldxios = lwxios ) 148 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb, ldxios = lwxios ) 134 149 ! 135 CALL iom_rstput( kt, nitrst, numrow, 'un' , un ) ! now fields 136 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn ) 137 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem) ) 138 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal) ) 139 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn ) 140 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop ) 141 150 CALL iom_rstput( kt, nitrst, numrow, 'un' , un, ldxios = lwxios ) ! now fields 151 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn, ldxios = lwxios ) 152 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem), ldxios = lwxios ) 153 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal), ldxios = lwxios ) 154 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn, ldxios = lwxios ) 155 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop, ldxios = lwxios ) 142 156 ! extra variable needed for the ice sheet coupling 143 157 IF ( ln_iscpl ) THEN 144 CALL iom_rstput( kt, nitrst, numrow, 'tmask' , tmask 145 CALL iom_rstput( kt, nitrst, numrow, 'umask' , umask 146 CALL iom_rstput( kt, nitrst, numrow, 'vmask' , vmask 147 CALL iom_rstput( kt, nitrst, numrow, 'smask' , ssmask 148 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:) ) ! need to compute temperature correction149 CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:) ) ! need to compute bt conservation150 CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:) ) ! need to compute bt conservation151 CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:) ) ! need to compute extrapolation if vvl158 CALL iom_rstput( kt, nitrst, numrow, 'tmask' , tmask, ldxios = lwxios ) ! need to extrapolate T/S 159 CALL iom_rstput( kt, nitrst, numrow, 'umask' , umask, ldxios = lwxios ) ! need to correct barotropic velocity 160 CALL iom_rstput( kt, nitrst, numrow, 'vmask' , vmask, ldxios = lwxios ) ! need to correct barotropic velocity 161 CALL iom_rstput( kt, nitrst, numrow, 'smask' , ssmask, ldxios = lwxios) ! need to correct barotropic velocity 162 CALL iom_rstput( kt, nitrst, numrow, 'e3t_n', e3t_n(:,:,:), ldxios = lwxios ) ! need to compute temperature correction 163 CALL iom_rstput( kt, nitrst, numrow, 'e3u_n', e3u_n(:,:,:), ldxios = lwxios ) ! need to compute bt conservation 164 CALL iom_rstput( kt, nitrst, numrow, 'e3v_n', e3v_n(:,:,:), ldxios = lwxios ) ! need to compute bt conservation 165 CALL iom_rstput( kt, nitrst, numrow, 'gdepw_n', gdepw_n(:,:,:), ldxios = lwxios ) ! need to compute extrapolation if vvl 152 166 END IF 153 167 ENDIF 154 168 155 IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst 156 169 IF (ln_diurnal) CALL iom_rstput( kt, nitrst, numrow, 'Dsst', x_dsst, ldxios = lwxios ) 170 IF(lwxios) CALL iom_swap( cxios_context ) 157 171 IF( kt == nitrst ) THEN 158 CALL iom_close( numrow ) ! close the restart file (only at last time step) 172 IF(.NOT.lwxios) THEN 173 CALL iom_close( numrow ) ! close the restart file (only at last time step) 174 ELSE 175 CALL iom_context_finalize( cwxios_context ) 176 ENDIF 159 177 !!gm IF( .NOT. lk_trdmld ) lrst_oce = .FALSE. 160 178 !!gm not sure what to do here ===>>> ask to Sebastian … … 164 182 nitrst = nstocklist( nrst_lst ) 165 183 ENDIF 166 lrst_oce = .FALSE.167 184 ENDIF 168 185 ! … … 193 210 WRITE(numout,*) '~~~~~~~~' 194 211 ENDIF 195 212 lxios_sini = .FALSE. 196 213 clpath = TRIM(cn_ocerst_indir) 197 214 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 198 215 CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 199 ENDIF 216 ! are we using XIOS to read the data? Part above will have to modified once XIOS 217 ! can handle checking if variable is in the restart file (there will be no need to open 218 ! restart) 219 IF(.NOT.lxios_set) lrxios = lrxios.AND.lxios_sini 220 IF( lrxios) THEN 221 crxios_context = 'nemo_rst' 222 IF( .NOT.lxios_set ) THEN 223 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS' 224 CALL iom_init( crxios_context ) 225 lxios_set = .TRUE. 226 ENDIF 227 ENDIF 228 IF( TRIM(Agrif_CFixed()) /= '0' .AND. lrxios) THEN 229 CALL iom_init( crxios_context ) 230 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for AGRIF' 231 lxios_set = .TRUE. 232 ENDIF 233 ENDIF 234 200 235 END SUBROUTINE rst_read_open 201 236 … … 211 246 REAL(wp) :: zrdt 212 247 INTEGER :: jk 248 REAL(wp), DIMENSION(jpi, jpj, jpk) :: w3d 213 249 !!---------------------------------------------------------------------- 214 250 … … 217 253 ! Check dynamics and tracer time-step consistency and force Euler restart if changed 218 254 IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN 219 CALL iom_get( numror, 'rdt', zrdt )255 CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 220 256 IF( zrdt /= rdt ) neuler = 0 221 257 ENDIF 222 258 223 259 ! Diurnal DSST 224 IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst 260 IF( ln_diurnal ) CALL iom_get( numror, jpdom_autoglo, 'Dsst' , x_dsst, ldxios = lrxios ) 225 261 IF ( ln_diurnal_only ) THEN 226 262 IF(lwp) WRITE( numout, * ) & 227 263 & "rst_read:- ln_diurnal_only set, setting rhop=rau0" 228 264 rhop = rau0 229 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,1,jp_tem) ) 265 CALL iom_get( numror, jpdom_autoglo, 'tn' , w3d, ldxios = lrxios ) 266 tsn(:,:,1,jp_tem) = w3d(:,:,1) 230 267 RETURN 231 268 ENDIF 232 269 233 270 IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 234 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub ) ! before fields235 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb )236 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem) )237 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal) )238 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb )271 CALL iom_get( numror, jpdom_autoglo, 'ub' , ub, ldxios = lrxios ) ! before fields 272 CALL iom_get( numror, jpdom_autoglo, 'vb' , vb, ldxios = lrxios ) 273 CALL iom_get( numror, jpdom_autoglo, 'tb' , tsb(:,:,:,jp_tem), ldxios = lrxios ) 274 CALL iom_get( numror, jpdom_autoglo, 'sb' , tsb(:,:,:,jp_sal), ldxios = lrxios ) 275 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb, ldxios = lrxios ) 239 276 ELSE 240 277 neuler = 0 241 278 ENDIF 242 279 ! 243 CALL iom_get( numror, jpdom_autoglo, 'un' , un 244 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn 245 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem) )246 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal) )247 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn 280 CALL iom_get( numror, jpdom_autoglo, 'un' , un, ldxios = lrxios ) ! now fields 281 CALL iom_get( numror, jpdom_autoglo, 'vn' , vn, ldxios = lrxios ) 282 CALL iom_get( numror, jpdom_autoglo, 'tn' , tsn(:,:,:,jp_tem), ldxios = lrxios ) 283 CALL iom_get( numror, jpdom_autoglo, 'sn' , tsn(:,:,:,jp_sal), ldxios = lrxios ) 284 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn, ldxios = lrxios ) 248 285 IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 249 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop 286 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop, ldxios = lrxios ) ! now potential density 250 287 ELSE 251 288 CALL eos( tsn, rhd, rhop, gdept_n(:,:,:) ) -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90
r8868 r8910 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? 67 68 !! 68 69 NAMELIST/namsbc_apr/ cn_dir, sn_apr, ln_ref_apr, rn_pref, ln_apr_obc … … 109 110 CALL ctl_warn( 'sbc_apr: use inverse barometer ssh at open boundary ONLY requires ln_apr_dyn=T' ) 110 111 ! 112 IF( lwxios ) THEN 113 CALL iom_set_rstw_var_active('ssh_ibb') 114 ENDIF 111 115 END SUBROUTINE sbc_apr_init 112 116 … … 152 156 IF( ln_rstart .AND. iom_varid( numror, 'ssh_ibb', ldstop = .FALSE. ) > 0 ) THEN 153 157 IF(lwp) WRITE(numout,*) 'sbc_apr: ssh_ibb read in the restart file' 154 CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb ) ! before inv. barometer ssh158 CALL iom_get( numror, jpdom_autoglo, 'ssh_ibb', ssh_ibb, ldxios = lrxios ) ! before inv. barometer ssh 155 159 ! 156 160 ELSE !* no restart: set from nit000 values … … 165 169 IF(lwp) WRITE(numout,*) 'sbc_apr : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp 166 170 IF(lwp) WRITE(numout,*) '~~~~' 167 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib ) 171 IF( lwxios ) CALL iom_swap( cwxios_context ) 172 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib, ldxios = lwxios ) 173 IF( lwxios ) CALL iom_swap( cxios_context ) 168 174 ENDIF 169 175 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r8868 r8910 218 218 & iom_varid( numror, 'fwf_isf_b', ldstop = .FALSE. ) > 0 ) THEN 219 219 IF(lwp) WRITE(numout,*) ' nit000-1 isf tracer content forcing fields read in the restart file' 220 CALL iom_get( numror, jpdom_autoglo, 'fwf_isf_b', fwfisf_b(:,:) ) ! before salt content isf_tsc trend221 CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b', risf_tsc_b(:,:,jp_sal) ) ! before salt content isf_tsc trend222 CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b', risf_tsc_b(:,:,jp_tem) ) ! before salt content isf_tsc trend220 CALL iom_get( numror, jpdom_autoglo, 'fwf_isf_b', fwfisf_b(:,:), ldxios = lrxios ) ! before salt content isf_tsc trend 221 CALL iom_get( numror, jpdom_autoglo, 'isf_sc_b', risf_tsc_b(:,:,jp_sal), ldxios = lrxios ) ! before salt content isf_tsc trend 222 CALL iom_get( numror, jpdom_autoglo, 'isf_hc_b', risf_tsc_b(:,:,jp_tem), ldxios = lrxios ) ! before salt content isf_tsc trend 223 223 ELSE 224 224 fwfisf_b(:,:) = fwfisf(:,:) … … 232 232 & 'at it= ', kt,' date= ', ndastp 233 233 IF(lwp) WRITE(numout,*) '~~~~' 234 CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:) ) 235 CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem) ) 236 CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal) ) 234 IF( lwxios ) CALL iom_swap( cwxios_context ) 235 CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:), ldxios = lwxios ) 236 CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem), ldxios = lwxios ) 237 CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal), ldxios = lwxios ) 238 IF( lwxios ) CALL iom_swap( cxios_context ) 237 239 ENDIF 238 240 ! … … 393 395 END DO 394 396 397 IF( lwxios ) THEN 398 CALL iom_set_rstw_var_active('fwf_isf_b') 399 CALL iom_set_rstw_var_active('isf_hc_b') 400 CALL iom_set_rstw_var_active('isf_sc_b') 401 ENDIF 402 403 395 404 END SUBROUTINE sbc_isf_init 396 405 -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r8908 r8910 56 56 USE lib_mpp ! MPP library 57 57 USE timing ! Timing 58 59 58 USE diurnal_bulk, ONLY: ln_diurnal_only ! diurnal SST diagnostic 60 59 … … 356 355 IF( ln_wave ) CALL sbc_wave_init ! surface wave initialisation 357 356 ! 357 IF( lwxios ) THEN 358 CALL iom_set_rstw_var_active('utau_b') 359 CALL iom_set_rstw_var_active('vtau_b') 360 CALL iom_set_rstw_var_active('qns_b') 361 ! The 3D heat content due to qsr forcing is treated in traqsr 362 ! CALL iom_set_rstw_var_active('qsr_b') 363 CALL iom_set_rstw_var_active('emp_b') 364 CALL iom_set_rstw_var_active('sfx_b') 365 ENDIF 366 358 367 END SUBROUTINE sbc_init 359 368 … … 462 471 & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 463 472 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields red in the restart file' 464 CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b ) ! before i-stress (U-point)465 CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b ) ! before j-stress (V-point)466 CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b ) ! before non solar heat flux (T-point)473 CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b, ldxios = lrxios ) ! before i-stress (U-point) 474 CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b, ldxios = lrxios ) ! before j-stress (V-point) 475 CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b, ldxios = lrxios ) ! before non solar heat flux (T-point) 467 476 ! The 3D heat content due to qsr forcing is treated in traqsr 468 ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b ) ! before solar heat flux (T-point)469 CALL iom_get( numror, jpdom_autoglo, 'emp_b', emp_b ) ! before freshwater flux (T-point)477 ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b, ldxios = lrxios ) ! before solar heat flux (T-point) 478 CALL iom_get( numror, jpdom_autoglo, 'emp_b', emp_b, ldxios = lrxios ) ! before freshwater flux (T-point) 470 479 ! To ensure restart capability with 3.3x/3.4 restart files !! to be removed in v3.6 471 480 IF( iom_varid( numror, 'sfx_b', ldstop = .FALSE. ) > 0 ) THEN 472 CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b ) ! before salt flux (T-point)481 CALL iom_get( numror, jpdom_autoglo, 'sfx_b', sfx_b, ldxios = lrxios ) ! before salt flux (T-point) 473 482 ELSE 474 483 sfx_b (:,:) = sfx(:,:) … … 490 499 & 'at it= ', kt,' date= ', ndastp 491 500 IF(lwp) WRITE(numout,*) '~~~~' 492 CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau ) 493 CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau ) 494 CALL iom_rstput( kt, nitrst, numrow, 'qns_b' , qns ) 501 IF( lwxios ) CALL iom_swap( cwxios_context ) 502 CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau, ldxios = lwxios ) 503 CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau, ldxios = lwxios ) 504 CALL iom_rstput( kt, nitrst, numrow, 'qns_b' , qns, ldxios = lwxios ) 495 505 ! The 3D heat content due to qsr forcing is treated in traqsr 496 506 ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b' , qsr ) 497 CALL iom_rstput( kt, nitrst, numrow, 'emp_b' , emp ) 498 CALL iom_rstput( kt, nitrst, numrow, 'sfx_b' , sfx ) 507 CALL iom_rstput( kt, nitrst, numrow, 'emp_b' , emp, ldxios = lwxios ) 508 CALL iom_rstput( kt, nitrst, numrow, 'sfx_b' , sfx, ldxios = lwxios ) 509 IF( lwxios ) CALL iom_swap( cxios_context ) 499 510 ENDIF 500 511 ! ! ---------------------------------------- ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r7968 r8910 147 147 IF( ln_rstart .AND. & !* Restart: read in restart file 148 148 & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 149 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields red in the restart file' 150 CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b ) ! before runoff151 CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem) ) ! before heat content of runoff152 CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal) ) ! before salinity content of runoff149 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields red in the restart file', lrxios 150 CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b, ldxios = lrxios ) ! before runoff 151 CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem), ldxios = lrxios ) ! before heat content of runoff 152 CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal), ldxios = lrxios ) ! before salinity content of runoff 153 153 ELSE !* no restart: set from nit000 values 154 154 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields set to nit000' … … 164 164 & 'at it= ', kt,' date= ', ndastp 165 165 IF(lwp) WRITE(numout,*) '~~~~' 166 CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf ) 167 CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem) ) 168 CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal) ) 166 IF( lwxios ) CALL iom_swap( cwxios_context ) 167 CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf, ldxios = lwxios ) 168 CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem), ldxios = lwxios ) 169 CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal), ldxios = lwxios ) 170 IF( lwxios ) CALL iom_swap( cxios_context ) 169 171 ENDIF 170 172 ! … … 472 474 ENDIF 473 475 ! 476 IF( lwxios ) THEN 477 CALL iom_set_rstw_var_active('rnf_b') 478 CALL iom_set_rstw_var_active('rnf_hc_b') 479 CALL iom_set_rstw_var_active('rnf_sc_b') 480 ENDIF 481 474 482 END SUBROUTINE sbc_rnf_init 475 483 -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r7753 r8910 155 155 IF(lwp) WRITE(numout,*) '~~~~~~~' 156 156 zf_sbc = REAL( nn_fsbc, wp ) 157 CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc ) ! sbc frequency 158 CALL iom_rstput( kt, nitrst, numrow, 'ssu_m' , ssu_m ) ! sea surface mean fields 159 CALL iom_rstput( kt, nitrst, numrow, 'ssv_m' , ssv_m ) 160 CALL iom_rstput( kt, nitrst, numrow, 'sst_m' , sst_m ) 161 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m ) 162 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 163 CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 164 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m ) 165 ! 157 IF( lwxios ) CALL iom_swap( cwxios_context ) 158 CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc, ldxios = lwxios ) ! sbc frequency 159 CALL iom_rstput( kt, nitrst, numrow, 'ssu_m' , ssu_m, ldxios = lwxios ) ! sea surface mean fields 160 CALL iom_rstput( kt, nitrst, numrow, 'ssv_m' , ssv_m, ldxios = lwxios ) 161 CALL iom_rstput( kt, nitrst, numrow, 'sst_m' , sst_m, ldxios = lwxios ) 162 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m, ldxios = lwxios ) 163 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m, ldxios = lwxios ) 164 CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m, ldxios = lwxios ) 165 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m, ldxios = lwxios ) 166 ! 167 IF( lwxios ) CALL iom_swap( cxios_context ) 166 168 ENDIF 167 169 ! … … 206 208 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 207 209 l_ssm_mean = .TRUE. 208 CALL iom_get( numror , 'nn_fsbc', zf_sbc ) ! sbc frequency of previous run209 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m ) ! sea surface mean velocity (U-point)210 CALL iom_get( numror, jpdom_autoglo, 'ssv_m' , ssv_m ) ! " " velocity (V-point)211 CALL iom_get( numror, jpdom_autoglo, 'sst_m' , sst_m ) ! " " temperature (T-point)212 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m ) ! " " salinity (T-point)213 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m ) ! " " height (T-point)214 CALL iom_get( numror, jpdom_autoglo, 'e3t_m' , e3t_m ) ! 1st level thickness (T-point)210 CALL iom_get( numror , 'nn_fsbc', zf_sbc, ldxios = lrxios ) ! sbc frequency of previous run 211 CALL iom_get( numror, jpdom_autoglo, 'ssu_m' , ssu_m, ldxios = lrxios ) ! sea surface mean velocity (U-point) 212 CALL iom_get( numror, jpdom_autoglo, 'ssv_m' , ssv_m, ldxios = lrxios ) ! " " velocity (V-point) 213 CALL iom_get( numror, jpdom_autoglo, 'sst_m' , sst_m, ldxios = lrxios ) ! " " temperature (T-point) 214 CALL iom_get( numror, jpdom_autoglo, 'sss_m' , sss_m, ldxios = lrxios ) ! " " salinity (T-point) 215 CALL iom_get( numror, jpdom_autoglo, 'ssh_m' , ssh_m, ldxios = lrxios ) ! " " height (T-point) 216 CALL iom_get( numror, jpdom_autoglo, 'e3t_m' , e3t_m, ldxios = lrxios ) ! 1st level thickness (T-point) 215 217 ! fraction of solar net radiation absorbed in 1st T level 216 218 IF( iom_varid( numror, 'frq_m', ldstop = .FALSE. ) > 0 ) THEN 217 CALL iom_get( numror, jpdom_autoglo, 'frq_m' , frq_m )219 CALL iom_get( numror, jpdom_autoglo, 'frq_m' , frq_m, ldxios = lrxios ) 218 220 ELSE 219 221 frq_m(:,:) = 1._wp ! default definition … … 251 253 ENDIF 252 254 ! 255 IF( lwxios.AND.nn_fsbc > 1 ) THEN 256 CALL iom_set_rstw_var_active('nn_fsbc') 257 CALL iom_set_rstw_var_active('ssu_m') 258 CALL iom_set_rstw_var_active('ssv_m') 259 CALL iom_set_rstw_var_active('sst_m') 260 CALL iom_set_rstw_var_active('sss_m') 261 CALL iom_set_rstw_var_active('ssh_m') 262 CALL iom_set_rstw_var_active('e3t_m') 263 CALL iom_set_rstw_var_active('frq_m') 264 ENDIF 265 253 266 END SUBROUTINE sbc_ssm_init 254 267 -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r7753 r8910 139 139 IF(lwp) WRITE(numout,*) ' nit000-1 qsr tracer content forcing field read in the restart file' 140 140 z1_2 = 0.5_wp 141 CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b ) ! before heat content trend due to Qsr flux141 CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b, ldxios = lrxios ) ! before heat content trend due to Qsr flux 142 142 ELSE ! No restart or restart not found: Euler forward time stepping 143 143 z1_2 = 1._wp … … 294 294 ! 295 295 IF( lrst_oce ) THEN ! write in the ocean restart file 296 CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b' , qsr_hc ) 297 CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev ) 296 IF( lwxios ) CALL iom_swap( cwxios_context ) 297 CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b' , qsr_hc, ldxios = lwxios ) 298 CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev, ldxios = lwxios ) 299 IF( lwxios ) CALL iom_swap( cxios_context ) 298 300 ENDIF 299 301 ! … … 430 432 ! 1st ocean level attenuation coefficient (used in sbcssm) 431 433 IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 432 CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev' , fraqsr_1lev )434 CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev' , fraqsr_1lev, ldxios = lrxios ) 433 435 ELSE 434 436 fraqsr_1lev(:,:) = 1._wp ! default : no penetration 435 437 ENDIF 436 438 ! 439 IF( lwxios ) THEN 440 CALL iom_set_rstw_var_active('qsr_hc_b') 441 CALL iom_set_rstw_var_active('fraqsr_1lev') 442 ENDIF 437 443 IF( nn_timing == 1 ) CALL timing_stop('tra_qsr_init') 438 444 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r8868 r8910 111 111 zfact = 0.5_wp 112 112 sbc_tsc(:,:,:) = 0._wp 113 CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem) ) ! before heat content sbc trend114 CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal) ) ! before salt content sbc trend113 CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lrxios ) ! before heat content sbc trend 114 CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lrxios ) ! before salt content sbc trend 115 115 ELSE ! No restart or restart not found: Euler forward time stepping 116 116 zfact = 1._wp … … 149 149 ! 150 150 IF( lrst_oce ) THEN !== write sbc_tsc in the ocean restart file ==! 151 CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem) ) 152 CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal) ) 151 IF( lwxios ) CALL iom_swap( cwxios_context ) 152 CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem), ldxios = lwxios ) 153 CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal), ldxios = lwxios ) 154 IF( lwxios ) CALL iom_swap( cxios_context ) 153 155 ENDIF 154 156 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90
r7646 r8910 1140 1140 CALL gls_rst( nit000, 'READ' ) !* read or initialize all required files 1141 1141 ! 1142 IF( lwxios ) THEN 1143 CALL iom_set_rstw_var_active('en') 1144 CALL iom_set_rstw_var_active('avt') 1145 CALL iom_set_rstw_var_active('avm') 1146 CALL iom_set_rstw_var_active('avmu') 1147 CALL iom_set_rstw_var_active('avmv') 1148 CALL iom_set_rstw_var_active('mxln') 1149 ENDIF 1150 1142 1151 IF( nn_timing == 1 ) CALL timing_stop('zdf_gls_init') 1143 1152 ! … … 1175 1184 ! 1176 1185 IF( MIN( id1, id2, id3, id4, id5, id6 ) > 0 ) THEN ! all required arrays exist 1177 CALL iom_get( numror, jpdom_autoglo, 'en' , en )1178 CALL iom_get( numror, jpdom_autoglo, 'avt' , avt )1179 CALL iom_get( numror, jpdom_autoglo, 'avm' , avm )1180 CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu )1181 CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv )1182 CALL iom_get( numror, jpdom_autoglo, 'mxln' , mxln )1186 CALL iom_get( numror, jpdom_autoglo, 'en' , en, ldxios = lrxios ) 1187 CALL iom_get( numror, jpdom_autoglo, 'avt' , avt, ldxios = lrxios ) 1188 CALL iom_get( numror, jpdom_autoglo, 'avm' , avm, ldxios = lrxios ) 1189 CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu, ldxios = lrxios ) 1190 CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv, ldxios = lrxios ) 1191 CALL iom_get( numror, jpdom_autoglo, 'mxln' , mxln, ldxios = lrxios ) 1183 1192 ELSE 1184 1193 IF(lwp) WRITE(numout,*) ' ===>>>> : previous run without gls scheme, en and mxln computed by iterative loop' … … 1200 1209 ! ! ------------------- 1201 1210 IF(lwp) WRITE(numout,*) '---- gls-rst ----' 1202 CALL iom_rstput( kt, nitrst, numrow, 'en' , en ) 1203 CALL iom_rstput( kt, nitrst, numrow, 'avt' , avt_k ) 1204 CALL iom_rstput( kt, nitrst, numrow, 'avm' , avm_k ) 1205 CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k ) 1206 CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k ) 1207 CALL iom_rstput( kt, nitrst, numrow, 'mxln' , mxln ) 1211 IF( lwxios ) CALL iom_swap( cwxios_context ) 1212 CALL iom_rstput( kt, nitrst, numrow, 'en' , en, ldxios = lwxios ) 1213 CALL iom_rstput( kt, nitrst, numrow, 'avt' , avt_k, ldxios = lwxios ) 1214 CALL iom_rstput( kt, nitrst, numrow, 'avm' , avm_k, ldxios = lwxios ) 1215 CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k, ldxios = lwxios ) 1216 CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k, ldxios = lwxios ) 1217 CALL iom_rstput( kt, nitrst, numrow, 'mxln' , mxln, ldxios = lwxios ) 1218 IF( lwxios ) CALL iom_swap( cxios_context ) 1208 1219 ! 1209 1220 ENDIF -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r7646 r8910 159 159 ! file in traadv_cen2 end read here. 160 160 IF( iom_varid( numror, 'avmb', ldstop = .FALSE. ) > 0 ) THEN 161 CALL iom_get( numror, jpdom_unknown, 'avmb', avmb )162 CALL iom_get( numror, jpdom_unknown, 'avtb', avtb )161 CALL iom_get( numror, jpdom_unknown, 'avmb', avmb, ldxios = lrxios ) 162 CALL iom_get( numror, jpdom_unknown, 'avtb', avtb, ldxios = lrxios ) 163 163 ENDIF 164 164 ENDIF -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r7813 r8910 814 814 CALL tke_rst( nit000, 'READ' ) !* read or initialize all required files 815 815 ! 816 IF( lwxios ) THEN 817 CALL iom_set_rstw_var_active('en') 818 CALL iom_set_rstw_var_active('avt') 819 CALL iom_set_rstw_var_active('avm') 820 CALL iom_set_rstw_var_active('avmu') 821 CALL iom_set_rstw_var_active('avmv') 822 CALL iom_set_rstw_var_active('dissl') 823 ENDIF 824 816 825 END SUBROUTINE zdf_tke_init 817 826 … … 845 854 ! 846 855 IF( id1 > 0 ) THEN ! 'en' exists 847 CALL iom_get( numror, jpdom_autoglo, 'en', en )856 CALL iom_get( numror, jpdom_autoglo, 'en', en, ldxios = lrxios ) 848 857 IF( MIN( id2, id3, id4, id5, id6 ) > 0 ) THEN ! all required arrays exist 849 CALL iom_get( numror, jpdom_autoglo, 'avt' , avt )850 CALL iom_get( numror, jpdom_autoglo, 'avm' , avm )851 CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu )852 CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv )853 CALL iom_get( numror, jpdom_autoglo, 'dissl', dissl )858 CALL iom_get( numror, jpdom_autoglo, 'avt' , avt, ldxios = lrxios ) 859 CALL iom_get( numror, jpdom_autoglo, 'avm' , avm, ldxios = lrxios ) 860 CALL iom_get( numror, jpdom_autoglo, 'avmu' , avmu, ldxios = lrxios ) 861 CALL iom_get( numror, jpdom_autoglo, 'avmv' , avmv, ldxios = lrxios ) 862 CALL iom_get( numror, jpdom_autoglo, 'dissl', dissl, ldxios = lrxios ) 854 863 ELSE ! one at least array is missing 855 864 CALL tke_avn ! compute avt, avm, avmu, avmv and dissl (approximation) … … 880 889 ! ! ------------------- 881 890 IF(lwp) WRITE(numout,*) '---- tke-rst ----' 882 CALL iom_rstput( kt, nitrst, numrow, 'en' , en ) 883 CALL iom_rstput( kt, nitrst, numrow, 'avt' , avt_k ) 884 CALL iom_rstput( kt, nitrst, numrow, 'avm' , avm_k ) 885 CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k ) 886 CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k ) 887 CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl ) 891 IF( lwxios ) CALL iom_swap( cwxios_context ) 892 CALL iom_rstput( kt, nitrst, numrow, 'en' , en , ldxios = lwxios ) 893 CALL iom_rstput( kt, nitrst, numrow, 'avt' , avt_k , ldxios = lwxios ) 894 CALL iom_rstput( kt, nitrst, numrow, 'avm' , avm_k , ldxios = lwxios ) 895 CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k, ldxios = lwxios ) 896 CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k, ldxios = lwxios ) 897 CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl , ldxios = lwxios ) 898 IF( lwxios ) CALL iom_swap( cxios_context ) 888 899 ! 889 900 ENDIF -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r8868 r8910 422 422 IF( lk_c1d ) CALL c1d_init ! 1D column configuration 423 423 CALL wad_init ! Wetting and drying options 424 CALL dom_init ! Domain424 CALL dom_init("OPA") ! Domain 425 425 IF( ln_crs ) CALL crs_init ! coarsened grid: domain initialization 426 426 IF( ln_nnogather ) CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/OPA_SRC/step.F90
r7753 r8910 345 345 IF( kstp == nitend .OR. indic < 0 ) THEN 346 346 CALL iom_context_finalize( cxios_context ) ! needed for XIOS+AGRIF 347 IF(lrxios) CALL iom_context_finalize( crxios_context ) 347 348 IF( ln_crs ) CALL iom_context_finalize( trim(cxios_context)//"_crs" ) ! 348 349 ENDIF -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAO_SRC/nemogcm.F90
r8868 r8910 271 271 CALL phy_cst ! Physical constants 272 272 CALL eos_init ! Equation of state 273 CALL dom_init ! Domain273 CALL dom_init('SAO') ! Domain 274 274 275 275 IF( ln_nnogather ) CALL nemo_northcomms ! Initialise the northfold neighbour lists (must be done after the masks are defined) -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAS_SRC/daymod.F90
r8868 r8910 30 30 USE in_out_manager ! I/O manager 31 31 USE prtctl ! Print control 32 USE iom ! 32 USE iom ! I/O manager 33 33 USE timing ! Timing 34 34 USE restart ! restart … … 142 142 ! call day to set the calendar parameters at the begining of the current simulaton. needed by iom_init 143 143 CALL day( nit000 ) 144 IF( lwxios ) THEN 145 CALL iom_set_rstw_var_active('kt') 146 CALL iom_set_rstw_var_active('ndastp') 147 CALL iom_set_rstw_var_active('adatrj') 148 CALL iom_set_rstw_var_active('ntime') 149 ENDIF 144 150 ! 145 151 END SUBROUTINE day_init … … 318 324 IF( iom_varid( numror, 'kt', ldstop = .FALSE. ) > 0 ) THEN 319 325 ! Get Calendar informations 320 CALL iom_get( numror, 'kt', zkt ) ! last time-step of previous run326 CALL iom_get( numror, 'kt', zkt, ldxios = lrxios ) ! last time-step of previous run 321 327 IF(lwp) THEN 322 328 WRITE(numout,*) ' *** Info read in restart : ' … … 337 343 IF ( nrstdt == 2 ) THEN 338 344 ! read the parameters corresponding to nit000 - 1 (last time step of previous run) 339 CALL iom_get( numror, 'ndastp', zndastp )345 CALL iom_get( numror, 'ndastp', zndastp, ldxios = lrxios ) 340 346 ndastp = NINT( zndastp ) 341 CALL iom_get( numror, 'adatrj', adatrj )342 CALL iom_get( numror, 'ntime' , ktime)347 CALL iom_get( numror, 'adatrj', adatrj , ldxios = lrxios ) 348 CALL iom_get( numror, 'ntime' , ktime , ldxios = lrxios ) 343 349 nn_time0=INT(ktime) 344 350 ! calculate start time in hours and minutes … … 399 405 ENDIF 400 406 ! calendar control 401 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) ) ! time-step 402 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) ) ! date 403 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj ) ! number of elapsed days since 407 IF( lwxios ) CALL iom_swap( cwxios_context ) 408 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) , ldxios = lwxios ) ! time-step 409 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) , ldxios = lwxios ) ! date 410 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj , ldxios = lwxios ) ! number of elapsed days since 404 411 ! ! the begining of the run [s] 405 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp) ) ! time 412 CALL iom_rstput( kt, nitrst, numrow, 'ntime' , REAL( nn_time0, wp), ldxios = lwxios ) ! time 413 IF( lwxios ) CALL iom_swap( cxios_context ) 406 414 ENDIF 407 415 ! -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAS_SRC/nemogcm.F90
r8868 r8910 359 359 CALL phy_cst ! Physical constants 360 360 CALL eos_init ! Equation of state 361 CALL dom_init ! Domain 362 361 CALL dom_init('SAS') ! Domain 363 362 IF( ln_nnogather ) CALL nemo_northcomms ! Initialise the northfold neighbour lists (must be done after the masks are defined) 364 363 -
branches/2017/dev_METO_2017/NEMOGCM/NEMO/SAS_SRC/step.F90
r7761 r8910 122 122 123 123 #if defined key_iomput 124 IF( kstp == nitend .OR. indic < 0 ) THEN 124 IF( kstp == nitrst ) THEN 125 IF(.NOT.lwxios) THEN 126 CALL iom_close( numrow ) 127 ELSE 128 CALL iom_context_finalize( cwxios_context ) 129 ENDIF 130 lrst_oce = .FALSE. 131 ENDIF 132 IF( kstp == nitend .OR. indic < 0 ) THEN 125 133 CALL iom_context_finalize( cxios_context ) ! needed for XIOS+AGRIF 126 134 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.