Changeset 8243
- Timestamp:
- 2017-06-29T11:41:55+02:00 (7 years ago)
- Location:
- branches/UKMO/test_moci_test_suite/NEMOGCM
- Files:
-
- 41 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/test_moci_test_suite/NEMOGCM/CONFIG/SHARED/domain_def.xml
r7923 r8243 193 193 </domain_group> 194 194 195 <domain_group id="grid_N"> 196 <domain id="grid_N" long_name="grid nomask"/> 197 </domain_group> 198 195 199 </domain_definition> 196 200 -
branches/UKMO/test_moci_test_suite/NEMOGCM/CONFIG/SHARED/namelist_ref
r8038 r8243 51 51 nn_chunksz = 0 ! chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 52 52 ln_xios_read = .FALSE. ! use XIOS to read restart file (only for a single file restart) 53 nn_wxios = 0 ! use XIOS to write restart file 0 - no, 1 - single file output, 2 - multiple file output 53 54 / 54 55 ! … … 211 212 ln_tsd_init = .true. ! Initialisation of ocean T & S with T &S input data (T) or not (F) 212 213 ln_tsd_tradmp = .true. ! damping of ocean T & S toward T &S input data (T) or not (F) 214 ln_tsd_sio = .false. 213 215 / 214 216 !!====================================================================== … … 298 300 299 301 cn_dir = './' ! root directory for the location of the flux files 302 ln_lfx_sio = .false. ! read data using 1 processor only 300 303 / 301 304 !----------------------------------------------------------------------- … … 313 316 314 317 cn_dir = './' ! root directory for the location of the bulk files are 318 ln_clio_sio = .false. ! read data using 1 processor only 315 319 / 316 320 !----------------------------------------------------------------------- … … 337 341 rn_vfac = 0. ! multiplicative factor for ocean/ice velocity 338 342 ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 343 ln_core_sio = .false. ! read data using 1 processor only 339 344 / 340 345 !----------------------------------------------------------------------- … … 352 357 353 358 cn_dir = './ECMWF/' ! root directory for the location of the bulk files 359 ln_msf_sio = .false. ! read data using 1 processor only 354 360 / 355 361 !----------------------------------------------------------------------- … … 421 427 rn_si1 = 23.0 ! 2 bands: longest depth of extinction 422 428 ln_qsr_ice = .true. ! light penetration for ice-model LIM3 429 ln_qsr_sio = .false. 423 430 / 424 431 !----------------------------------------------------------------------- … … 445 452 rn_dep_max = 150. ! depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) 446 453 nn_rnf_depth_file = 0 ! create (=1) a runoff depth file or not (=0) 454 ln_rnf_sio = .false. ! read data using 1 processor only 447 455 / 448 456 !----------------------------------------------------------------------- … … 475 483 ! if you want to keep the cd as in global config, adjust rn_gammat0 to compensate 476 484 ! 2 = velocity and stability dependent Gamma Holland et al. 1999 485 ln_isf_sio = .false. ! read data using 1 processor only 477 486 / 478 487 !----------------------------------------------------------------------- … … 487 496 ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) 488 497 ln_apr_obc = .false. ! inverse barometer added to OBC ssh data 498 ln_apr_sio = .false. 489 499 / 490 500 !----------------------------------------------------------------------- … … 504 514 ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) 505 515 rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] 516 ln_ssr_sio = .false. ! read data using 1 processor only 506 517 / 507 518 !----------------------------------------------------------------------- … … 645 656 cn_dir = 'bdydta/' 646 657 ln_full_vel = .false. 658 ln_bdy_sio = .false. 647 659 / 648 660 !----------------------------------------------------------------------- -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r6487 r8243 46 46 INTEGER, ALLOCATABLE, DIMENSION(:) :: nb_bdy_fld ! Number of fields to update for each boundary set. 47 47 INTEGER :: nb_bdy_fld_sum ! Total number of fields to update for all boundary sets. 48 LOGICAL :: ln_bdy_sio ! single processor read flag 48 49 49 50 LOGICAL, DIMENSION(jp_bdy) :: ln_full_vel_array ! =T => full velocities in 3D boundary conditions … … 255 256 ! update external data from files 256 257 !-------------------------------- 257 258 lspr = ln_bdy_sio 258 259 jstart = 1 259 260 DO ib_bdy = 1, nb_bdy … … 387 388 END IF ! nn_dta(ib_bdy) = 1 388 389 END DO ! ib_bdy 389 390 lspr = .false. 390 391 ! bg jchanut tschanges 391 392 #if defined key_tide … … 427 428 INTEGER :: ib_bdy, jfld, jstart, jend, ierror ! local indices 428 429 INTEGER :: ios ! Local integer output status for namelist read 430 LOGICAL :: ln_bdy_sio 429 431 !! 430 432 CHARACTER(len=100) :: cn_dir ! Root directory for location of data files … … 452 454 TYPE(FLD_N) :: bn_a_i, bn_ht_i, bn_ht_s 453 455 #endif 454 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 456 NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d, ln_bdy_sio 455 457 #if defined key_lim2 456 NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif 458 NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif, ln_bdy_sio 457 459 #elif defined key_lim3 458 NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s 459 #endif 460 NAMELIST/nambdy_dta/ ln_full_vel 460 NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s, ln_bdy_sio 461 #endif 462 NAMELIST/nambdy_dta/ ln_full_vel, ln_bdy_sio 461 463 !!--------------------------------------------------------------------------- 462 464 … … 516 518 CALL ctl_stop( 'bdy_dta: unable to allocate nbmap_ptr structure' ) ; RETURN 517 519 ENDIF 518 ALLOCATE( ilen1(nb_bdy_fld_sum), ilen3(nb_bdy_fld_sum) ) 520 ALLOCATE( ilen1(nb_bdy_fld_sum), ilen3(nb_bdy_fld_sum) ) 519 521 ALLOCATE( ibdy(nb_bdy_fld_sum) ) 520 522 ALLOCATE( igrid(nb_bdy_fld_sum) ) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r7924 r8243 33 33 USE wrk_nemo ! work arrays 34 34 USE iom_def, ONLY : lxios_read 35 USE iom_def, ONLY : lwxios 35 36 36 37 IMPLICIT NONE … … 305 306 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp 306 307 IF(lwp) WRITE(numout,*) '~~~~~~~' 307 308 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v 309 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t 310 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s 308 IF( lwxios ) CALL iom_swap( wxios_context ) 309 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v, lxios = lwxios) 310 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t, lxios = lwxios) 311 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s, lxios = lwxios) 311 312 IF( .NOT. lk_vvl ) THEN 312 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t 313 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s )313 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t, lxios = lwxios) 314 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s, lxios = lwxios ) 314 315 ENDIF 315 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini 316 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini 317 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini 318 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini 316 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini, lxios = lwxios) 317 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini, lxios = lwxios) 318 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini, lxios = lwxios) 319 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini, lxios = lwxios) 319 320 IF( .NOT. lk_vvl ) THEN 320 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini )321 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini )321 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini, lxios = lwxios ) 322 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini, lxios = lwxios ) 322 323 ENDIF 323 324 ! 325 IF( lwxios ) CALL iom_swap( cxios_context ) 324 326 ENDIF 325 327 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DOM/daymod.F90
r8001 r8243 36 36 USE restart ! restart 37 37 USE iom_def, ONLY : lxios_read 38 USE iom_def, ONLY : lwxios 38 39 39 40 IMPLICIT NONE … … 360 361 ENDIF 361 362 ! calendar control 362 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp) ) ! time-step 363 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp) ) ! date 364 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj ) ! number of elapsed days since 363 IF( lwxios ) CALL iom_swap( wxios_context ) 364 CALL iom_rstput( kt, nitrst, numrow, 'kt' , REAL( kt , wp), lxios = lwxios ) ! time-step 365 CALL iom_rstput( kt, nitrst, numrow, 'ndastp' , REAL( ndastp, wp), lxios = lwxios ) ! date 366 CALL iom_rstput( kt, nitrst, numrow, 'adatrj' , adatrj, lxios = lwxios ) ! number of elapsed days since 365 367 ! ! the begining of the run [s] 368 IF( lwxios ) CALL iom_swap( cxios_context ) 366 369 ENDIF 367 370 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90
r8001 r8243 38 38 USE timing ! Timing 39 39 USE lbclnk ! ocean lateral boundary condition (or mpp link) 40 USE iom_def, ONLY:lxios_read 40 USE iom_def, ONLY:lxios_read, lwxios, wxioso 41 41 42 42 IMPLICIT NONE … … 140 140 & nn_it000, nn_itend , nn_date0 , nn_leapy , nn_istate , nn_stock , & 141 141 & nn_write, ln_dimgnnn, ln_mskland , ln_cfmeta , ln_clobber, nn_chunksz, nn_euler, & 142 & ln_xios_read 142 & ln_xios_read, nn_wxios 143 143 NAMELIST/namdom/ nn_bathy, rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin, & 144 144 & nn_acc , rn_atfp , rn_rdt , rn_rdtmin , & … … 155 155 !!---------------------------------------------------------------------- 156 156 ln_xios_read = .false. ! set in case ln_xios_read is not in namelist 157 nn_wxios = 0 157 158 REWIND( numnam_ref ) ! Namelist namrun in reference namelist : Parameters of the run 158 159 READ ( numnam_ref, namrun, IOSTAT = ios, ERR = 901) … … 196 197 WRITE(numout,*) ' NetCDF chunksize (bytes) nn_chunksz = ', nn_chunksz 197 198 WRITE(numout,*) ' READ restart for a single file using XIOS ln_xios_read =', ln_xios_read 199 WRITE(numout,*) ' Write restart using XIOS nn_wxios = ', nn_wxios 198 200 ENDIF 199 201 … … 309 311 rdtmax = rn_rdtmin 310 312 rdth = rn_rdth 313 if (nn_wxios > 0) lwxios = .TRUE. 314 wxioso = nn_wxios 311 315 312 316 REWIND( numnam_ref ) ! Namelist namcla in reference namelist : Cross land advection -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90
r7924 r8243 135 135 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 136 136 137 ! Set variables needed in iom for reastart write with XIOS 138 lr_vvl_ztilde = ln_vvl_ztilde 139 lr_vvl_layer = ln_vvl_layer 137 140 ! choose vertical coordinate (z_star, z_tilde or layer) 138 141 ! ========================== … … 910 913 ! ! all cases ! 911 914 ! ! --------- ! 912 CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:) ) 913 CALL iom_rstput( kt, nitrst, numrow, 'fse3t_n', fse3t_n(:,:,:) ) 915 IF( lwxios ) CALL iom_swap( wxios_context ) 916 CALL iom_rstput( kt, nitrst, numrow, 'fse3t_b', fse3t_b(:,:,:), lxios = lwxios ) 917 CALL iom_rstput( kt, nitrst, numrow, 'fse3t_n', fse3t_n(:,:,:), lxios = lwxios ) 914 918 ! ! ----------------------- ! 915 919 IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN ! z_tilde and layer cases ! 916 920 ! ! ----------------------- ! 917 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:) 918 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:) 921 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_b', tilde_e3t_b(:,:,:), lxios = lwxios) 922 CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:), lxios = lwxios) 919 923 END IF 920 924 ! ! -------------! 921 925 IF( ln_vvl_ztilde ) THEN ! z_tilde case ! 922 926 ! ! ------------ ! 923 CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:) 927 CALL iom_rstput( kt, nitrst, numrow, 'hdiv_lf', hdiv_lf(:,:,:), lxios = lwxios) 924 928 ENDIF 925 929 IF( lwxios ) CALL iom_swap( cxios_context ) 926 930 ENDIF 927 931 IF( nn_timing == 1 ) CALL timing_stop('dom_vvl_rst') -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DOM/dtatsd.F90
r6486 r8243 23 23 USE wrk_nemo ! Memory allocation 24 24 USE timing ! Timing 25 USE iom_def, ONLY:lspr 25 26 26 27 IMPLICIT NONE … … 32 33 LOGICAL , PUBLIC :: ln_tsd_init !: T & S data flag 33 34 LOGICAL , PUBLIC :: ln_tsd_tradmp !: internal damping toward input data flag 35 LOGICAL , PUBLIC :: ln_tsd_sio !: read file using 1 processor 34 36 35 37 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tsd ! structure of input SST (file informations, fields read) … … 61 63 TYPE(FLD_N) :: sn_tem, sn_sal 62 64 !! 63 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_tradmp, cn_dir, sn_tem, sn_sal 65 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_tradmp, cn_dir, sn_tem, sn_sal, ln_tsd_sio 64 66 INTEGER :: ios 65 67 !!---------------------------------------------------------------------- … … 70 72 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 71 73 ! 74 ln_tsd_sio = .FALSE. 72 75 REWIND( numnam_ref ) ! Namelist namtsd in reference namelist : 73 76 READ ( numnam_ref, namtsd, IOSTAT = ios, ERR = 901) … … 154 157 IF( nn_timing == 1 ) CALL timing_start('dta_tsd') 155 158 ! 159 lspr = ln_tsd_sio 156 160 CALL fld_read( kt, 1, sf_tsd ) !== read T & S data at kt time step ==! 161 lspr = .false. 157 162 ! 158 163 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_flt.F90
r7924 r8243 52 52 #endif 53 53 USE iom_def, ONLY : lxios_read 54 USE iom_def, ONLY : lwxios 54 55 55 56 IMPLICIT NONE … … 406 407 ! Caution : extra-hallow 407 408 ! gcx and gcxb are defined as: DIMENSION(1-jpr2di:jpi+jpr2di,1-jpr2dj:jpj+jpr2dj) 408 CALL iom_rstput( kt, nitrst, numrow, 'gcx' , gcx (1:jpi,1:jpj) ) 409 CALL iom_rstput( kt, nitrst, numrow, 'gcxb', gcxb(1:jpi,1:jpj) ) 409 IF( lwxios ) CALL iom_swap( wxios_context ) 410 CALL iom_rstput( kt, nitrst, numrow, 'gcx' , gcx (1:jpi,1:jpj), lxios = lwxios ) 411 CALL iom_rstput( kt, nitrst, numrow, 'gcxb', gcxb(1:jpi,1:jpj), lxios = lwxios ) 412 IF( lwxios ) CALL iom_swap( cxios_context ) 410 413 ENDIF 411 414 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r7924 r8243 49 49 #endif 50 50 USE iom_def, ONLY : lxios_read 51 USE iom_def, ONLY : lwxios 51 52 52 53 IMPLICIT NONE … … 1039 1040 ! 1040 1041 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 1041 CALL iom_rstput( kt, nitrst, numrow, 'ub2_b' , ub2_b (:,:) ) 1042 CALL iom_rstput( kt, nitrst, numrow, 'vb2_b' , vb2_b (:,:) ) 1042 IF( lwxios ) CALL iom_swap( wxios_context ) 1043 CALL iom_rstput( kt, nitrst, numrow, 'ub2_b' , ub2_b (:,:), lxios = lwxios ) 1044 CALL iom_rstput( kt, nitrst, numrow, 'vb2_b' , vb2_b (:,:), lxios = lwxios ) 1043 1045 ! 1044 1046 IF (.NOT.ln_bt_av) THEN 1045 CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e' , sshbb_e(:,:) )1046 CALL iom_rstput( kt, nitrst, numrow, 'ubb_e' , ubb_e(:,:) )1047 CALL iom_rstput( kt, nitrst, numrow, 'vbb_e' , vbb_e(:,:) )1048 CALL iom_rstput( kt, nitrst, numrow, 'sshb_e' , sshb_e(:,:) )1049 CALL iom_rstput( kt, nitrst, numrow, 'ub_e' , ub_e(:,:) )1050 CALL iom_rstput( kt, nitrst, numrow, 'vb_e' , vb_e(:,:) )1047 CALL iom_rstput( kt, nitrst, numrow, 'sshbb_e' , sshbb_e(:,:), lxios = lwxios ) 1048 CALL iom_rstput( kt, nitrst, numrow, 'ubb_e' , ubb_e(:,:), lxios = lwxios ) 1049 CALL iom_rstput( kt, nitrst, numrow, 'vbb_e' , vbb_e(:,:), lxios = lwxios ) 1050 CALL iom_rstput( kt, nitrst, numrow, 'sshb_e' , sshb_e(:,:), lxios = lwxios ) 1051 CALL iom_rstput( kt, nitrst, numrow, 'ub_e' , ub_e(:,:), lxios = lwxios ) 1052 CALL iom_rstput( kt, nitrst, numrow, 'vb_e' , vb_e(:,:), lxios = lwxios ) 1051 1053 ENDIF 1052 1054 #if defined key_agrif 1053 1055 ! Save time integrated fluxes 1054 1056 IF ( .NOT.Agrif_Root() ) THEN 1055 CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b' , ub2_i_b(:,:) ) 1056 CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b' , vb2_i_b(:,:) ) 1057 ENDIF 1058 #endif 1057 CALL iom_rstput( kt, nitrst, numrow, 'ub2_i_b' , ub2_i_b(:,:), lxios = lwxios ) 1058 CALL iom_rstput( kt, nitrst, numrow, 'vb2_i_b' , vb2_i_b(:,:), lxios = lwxios ) 1059 ENDIF 1060 #endif 1061 IF( lwxios ) CALL iom_swap( cxios_context ) 1059 1062 ENDIF 1060 1063 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r8001 r8243 50 50 INTEGER :: nn_chunksz !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 51 51 LOGICAL :: ln_xios_read !: use xios to read single file restart 52 INTEGER :: nn_wxios !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 52 53 #if defined key_netcdf4 53 54 !!---------------------------------------------------------------------- … … 153 154 LOGICAL :: lsp_area = .TRUE. !: to make a control print over a specific area 154 155 CHARACTER(lc) :: cxios_context !: context name used in xios 155 CHARACTER(lc) :: rxios_context !: context name used in xios to read restart 156 CHARACTER(lc) :: rxios_context = "nemo_rst" !: context name used in xios to read restart 157 CHARACTER(lc) :: wxios_context = "nemo_rstw" !: context name used in xios to write restart file 156 158 157 159 !!---------------------------------------------------------------------- -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r8161 r8243 41 41 USE dianam ! build name of file 42 42 USE xios 43 USE iom_def, ONLY : max_rst_fields, rst_fields 43 USE iom_def, ONLY : max_rst_fields, rst_fields, wxioso 44 44 # endif 45 45 USE ioipsl, ONLY : ju2ymds ! for calendar 46 46 USE crs ! Grid coarsening 47 USE lib_fortran 47 USE sbc_oce, ONLY : lk_oasis, ln_coupled_iceshelf_fluxes, ln_apr_dyn, ln_rnf, nn_components, jp_iam_sas 48 USE diadct, ONLY : lk_diadct 48 49 49 50 IMPLICIT NONE 51 ! values needed to set correctlyfiles in reast file when using XIOS for writing 52 LOGICAL, PUBLIC :: lr_vvl_ztilde, lr_vvl_layer, lr_traadv_cen2 53 50 54 PUBLIC ! must be public to be able to access iom_def through iom 51 52 55 #if defined key_iomput 53 56 LOGICAL, PUBLIC, PARAMETER :: lk_iomput = .TRUE. !: iom_put flag … … 55 58 LOGICAL, PUBLIC, PARAMETER :: lk_iomput = .FALSE. !: iom_put flag 56 59 #endif 60 57 61 PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 58 62 PUBLIC iom_getatt, iom_use, iom_context_finalize … … 64 68 PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_get_file_attr, iom_set_grid_attr 65 69 PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 66 PRIVATE set_rst_vars, set_rstr_active 70 PRIVATE set_rst_vars, set_rstr_active, set_rstw_active 67 71 # endif 68 72 … … 88 92 CONTAINS 89 93 90 SUBROUTINE iom_init( cdname )94 SUBROUTINE iom_init( cdname, filename, it ) 91 95 !!---------------------------------------------------------------------- 92 96 !! *** ROUTINE *** … … 108 112 ! 109 113 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: z_bnds 114 CHARACTER(len=*), OPTIONAL, INTENT(in) :: filename 115 LOGICAL :: lrst_context ! is context related to restart 116 INTEGER, OPTIONAL :: it ! timestep when subroutine was called 110 117 !!---------------------------------------------------------------------- 111 118 #if ! defined key_xios2 … … 119 126 CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 120 127 CALL iom_swap( cdname ) 128 lrst_context = (TRIM(cdname) == TRIM(wxios_context)).OR.(TRIM(cdname) == TRIM(rxios_context)) 121 129 122 130 ! calendar parameters … … 145 153 CALL set_scalar 146 154 147 IF( TRIM(cdname) == TRIM(cxios_context) .OR. TRIM(cdname) == TRIM(rxios_context)) THEN155 IF( TRIM(cdname) == TRIM(cxios_context) ) THEN 148 156 CALL set_grid( "T", glamt, gphit, ln_mskland ) 149 157 CALL set_grid( "U", glamu, gphiu, ln_mskland ) … … 151 159 CALL set_grid( "W", glamt, gphit, ln_mskland ) 152 160 CALL set_grid_znl( gphit ) 153 CALL set_grid("N",glamt, gphit, .FALSE.) ! not masked values154 161 ! 155 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN ! Add additional grid metadata162 IF( ln_cfmeta ) THEN ! Add additional grid metadata 156 163 CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 157 164 CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) … … 164 171 ENDIF 165 172 ENDIF 173 174 IF( lrst_context ) CALL set_grid("N",glamt, gphit, .FALSE.) ! not masked values 166 175 167 176 IF( TRIM(cdname) == TRIM(cxios_context)//"_crs" ) THEN … … 176 185 CALL dom_grid_glo ! Return to parent grid domain 177 186 ! 178 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN ! Add additional grid metadata187 IF( ln_cfmeta .AND. .NOT.lrst_context) THEN ! Add additional grid metadata 179 188 CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 180 189 CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) … … 188 197 ENDIF 189 198 190 ! vertical grid definition 191 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 192 CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 193 CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 194 CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 195 199 ! vertical grid definition 200 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 201 CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 202 CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 203 CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 204 205 IF(.NOT.lrst_context) THEN 196 206 ! Add vertical grid bounds 197 207 #if ! defined key_xios2 198 z_bnds(: ,1) = gdepw_1d(:)199 z_bnds(1:jpkm1,2) = gdepw_1d(2:jpk)200 z_bnds(jpk: ,2) = gdepw_1d(jpk) + e3t_1d(jpk)201 #else 202 z_bnds(1 ,:) = gdepw_1d(:)203 z_bnds(2,1:jpkm1) = gdepw_1d(2:jpk)204 z_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk)205 #endif 206 207 CALL iom_set_axis_attr( "deptht", bounds=z_bnds )208 CALL iom_set_axis_attr( "depthu", bounds=z_bnds )209 CALL iom_set_axis_attr( "depthv", bounds=z_bnds )208 z_bnds(: ,1) = gdepw_1d(:) 209 z_bnds(1:jpkm1,2) = gdepw_1d(2:jpk) 210 z_bnds(jpk: ,2) = gdepw_1d(jpk) + e3t_1d(jpk) 211 #else 212 z_bnds(1 ,:) = gdepw_1d(:) 213 z_bnds(2,1:jpkm1) = gdepw_1d(2:jpk) 214 z_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk) 215 #endif 216 217 CALL iom_set_axis_attr( "deptht", bounds=z_bnds ) 218 CALL iom_set_axis_attr( "depthu", bounds=z_bnds ) 219 CALL iom_set_axis_attr( "depthv", bounds=z_bnds ) 210 220 211 221 #if ! defined key_xios2 212 z_bnds(: ,2) = gdept_1d(:)213 z_bnds(2:jpk,1) = gdept_1d(1:jpkm1)214 z_bnds(1 ,1) = gdept_1d(1) - e3w_1d(1)215 #else 216 z_bnds(2,: ) = gdept_1d(:)217 z_bnds(1,2:jpk) = gdept_1d(1:jpkm1)218 z_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1)219 #endif 220 CALL iom_set_axis_attr( "depthw", bounds=z_bnds )221 222 z_bnds(: ,2) = gdept_1d(:) 223 z_bnds(2:jpk,1) = gdept_1d(1:jpkm1) 224 z_bnds(1 ,1) = gdept_1d(1) - e3w_1d(1) 225 #else 226 z_bnds(2,: ) = gdept_1d(:) 227 z_bnds(1,2:jpk) = gdept_1d(1:jpkm1) 228 z_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1) 229 #endif 230 CALL iom_set_axis_attr( "depthw", bounds=z_bnds ) 231 ENDIF 222 232 223 233 # if defined key_floats … … 237 247 !set which fields are to be read from restart file 238 248 CALL set_rstr_active() 249 ELSE IF ( TRIM(cdname) == TRIM(wxios_context)) THEN 250 !set names of the fields in restart file IF using XIOS to read/write data 251 CALL set_rst_vars() 252 !set which fields are to be read from restart file 253 CALL set_rstw_active(filename, it) 239 254 ELSE 240 255 CALL set_xmlatt … … 255 270 256 271 END SUBROUTINE iom_init 257 258 272 259 273 SUBROUTINE set_rst_vars() … … 370 384 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 371 385 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 372 rst_file = TRIM(c n_ocerst_indir)//TRIM(cn_ocerst_in)386 rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 373 387 ELSE 374 rst_file = TRIM(c n_ocerst_indir)//'1_'//TRIM(cn_ocerst_in)388 rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 375 389 ENDIF 376 390 !set name of the restart file and enable available fields … … 394 408 #endif 395 409 END SUBROUTINE set_rstr_active 410 411 SUBROUTINE set_rstw_active(rst_file, it) 412 !sets enabled = .TRUE. for each field in restart file 413 #if defined key_xios2 414 CHARACTER(len=*) :: rst_file 415 INTEGER, INTENT(in) :: it ! timestep when iom_init was called 416 TYPE(xios_field) :: field_hdl 417 TYPE(xios_file) :: file_hdl 418 TYPE(xios_filegroup) :: filegroup_hdl 419 INTEGER :: i 420 421 !set then name of the restart file (OUTPUT!) and enable available fields 422 if(lwp) WRITE(numout,*) 'Setting (output) restart filename (for XIOS) to: ',TRIM(rst_file) 423 CALL xios_get_handle("file_definition", filegroup_hdl ) 424 CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 425 IF(wxioso.eq.1) THEN 426 CALL xios_set_file_attr( "wrestart", type="one_file", name = TRIM(rst_file), & 427 enabled=.TRUE., mode="write", output_freq=xios_timestep) 428 if(lwp) write(numout,*) 'OPEN ', trim(rst_file), ' in one_file mode' 429 ELSE 430 CALL xios_set_file_attr( "wrestart", type="multiple_file", name = TRIM(rst_file),& 431 enabled=.TRUE., mode="write", output_freq=xios_timestep) 432 if(lwp) write(numout,*) 'OPEN ', trim(rst_file), ' in multiple_file mode' 433 ENDIF 434 435 CALL xios_set_file_attr( "wrestart", name=trim(rst_file)) 436 call flush(numout) 437 ! CALL xios_update_calendar(it+1) ! + one because we open restart file 438 ! 1 timestep before write 439 440 !define fields for restart write context 441 !in restart.F90 442 DO i= 1, 17 443 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 444 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 445 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 446 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 447 ENDDO 448 !in daymod.F90 449 DO i= 18, 20 450 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 451 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 452 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 453 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 454 ENDDO 455 !end daymod.F90 456 !sbcmod.F90 457 DO i= 21, 25 458 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 459 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 460 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 461 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 462 ENDDO 463 !end sbcmod.F90 464 !ALL FIELDS ABOUVE ALWAYS 465 !zdftke.F90 466 #if defined key_zdftke || defined key_esopa 467 DO i= 26, 31 468 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 469 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 470 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 471 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 472 ENDDO 473 #endif 474 !end zdftke.F90 475 !traqsr.F90 476 i = 34 477 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 478 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 479 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 480 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 481 i = 37 482 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 483 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 484 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 485 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 486 !END traqsr.F90 487 #if defined key_dynspg_flt || defined key_esopa 488 !dynspg_flt.F90 489 DO i= 35, 36 490 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 491 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 492 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 493 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 494 ENDDO 495 !end dynspg_flt.F90 496 #endif 497 !trasbc.F90 START 498 DO i= 32, 33 499 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 500 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 501 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 502 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 503 ENDDO 504 DO i= 69, 71 505 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 506 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 507 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 508 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 509 ENDDO 510 !trasbc.F90 END 511 IF( lk_oasis) THEN 512 ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 513 IF( ln_coupled_iceshelf_fluxes ) THEN 514 DO i= 38, 43 515 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 516 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 517 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 518 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 519 ENDDO 520 ENDIF 521 ENDIF 522 #if defined key_zdfkpp 523 i = 44 524 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 525 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 526 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 527 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 528 #endif 529 !dia_hsb_rst 530 #if defined key_diadct 531 IF( lk_diadct ) THEN 532 DO i= 45, 47 533 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 534 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 535 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 536 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 537 ENDDO 538 539 DO i= 50, 53 540 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 541 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 542 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 543 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 544 ENDDO 545 IF( .NOT. lk_vvl ) THEN 546 DO i= 48, 48 547 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 548 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 549 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 550 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 551 ENDDO 552 DO i= 54, 55 553 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 554 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 555 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 556 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 557 ENDDO 558 ENDIF 559 ENDIF 560 #endif 561 !end dia_hsb_rst 562 !domvvl.F90 563 IF( lk_vvl ) THEN 564 DO i= 56, 57 565 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 566 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 567 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 568 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 569 ENDDO 570 IF( lr_vvl_ztilde .OR. lr_vvl_layer ) THEN ! z_tilde and layer cases ! 571 DO i= 58, 59 572 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 573 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 574 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 575 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 576 ENDDO 577 END IF 578 IF( lr_vvl_ztilde ) THEN ! z_tilde case ! 579 i=60 580 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 581 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 582 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 583 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 584 ENDIF 585 ENDIF 586 !end domvvl.F90 587 !dynspg_ts.F90 588 #if defined key_dynspg_ts || defined key_esopa 589 DO i= 61, 62 590 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 591 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 592 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 593 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 594 ENDDO 595 IF (.NOT.ln_bt_av) THEN 596 DO i= 63, 68 597 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 598 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 599 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 600 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 601 ENDDO 602 ENDIF 603 #if defined key_agrif 604 ! Save time integrated fluxes 605 IF ( .NOT.Agrif_Root() ) THEN 606 DO i= 84, 85 607 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 608 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 609 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 610 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 611 ENDDO 612 ENDIF 613 #endif 614 #endif 615 !end dynspg_ts.F90 616 !sbcapr.F90 617 IF( ln_apr_dyn) THEN 618 i = 72 619 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 620 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 621 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 622 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 623 ENDIF 624 !end sbcapr.F90 625 !sbcrnf.F90 626 IF( ln_rnf ) THEN 627 DO i= 73, 75 628 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 629 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 630 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 631 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 632 ENDDO 633 ENDIF 634 !end sbcrnf.F90 635 !sbcssm.F90 636 IF( nn_components /= jp_iam_sas .AND. nn_fsbc .NE. 1) THEN 637 DO i= 76, 81 638 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 639 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 640 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 641 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 642 ENDDO 643 i = 83 644 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 645 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 646 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 647 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 648 IF( lk_vvl ) THEN 649 i = 82 650 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 651 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 652 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 653 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 654 ENDIF 655 ENDIF 656 !end sbcssm.F90 657 IF( lr_traadv_cen2 ) THEN 658 DO i= 84, 85 659 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 660 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 661 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 662 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 663 ENDDO 664 ENDIF 665 #endif 666 END SUBROUTINE set_rstw_active 396 667 397 668 SUBROUTINE iom_swap( cdname ) … … 510 781 ! try to find if the file to be opened already exist 511 782 ! ============= 512 INQUIRE( FILE = clname, EXIST = llok ) 783 lxios_sini = .TRUE. 784 if(lwm) INQUIRE( FILE = clname, EXIST = llok ) 785 IF(lk_mpp) CALL mpp_bcast(llok) 513 786 IF( .NOT.llok ) THEN 514 787 ! we try to add the cpu number to the name … … 528 801 icnt = icnt + 1 529 802 END DO 530 ELSE 531 lxios_sini = .TRUE. 803 lxios_sini = .FALSE. 532 804 ENDIF 533 805 IF( llwrt ) THEN … … 1263 1535 !! INTERFACE iom_rstput 1264 1536 !!---------------------------------------------------------------------- 1265 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype )1537 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1266 1538 INTEGER , INTENT(in) :: kt ! ocean time-step 1267 1539 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1270 1542 REAL(wp) , INTENT(in) :: pvar ! written field 1271 1543 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1544 LOGICAL, OPTIONAL :: lxios ! xios write flag 1545 LOGICAL :: lx ! local xios write flag 1272 1546 INTEGER :: ivid ! variable id 1273 IF( kiomid > 0 ) THEN 1274 IF( iom_file(kiomid)%nfid > 0 ) THEN 1275 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1276 SELECT CASE (iom_file(kiomid)%iolib) 1277 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1278 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1279 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pvar ) 1280 CASE DEFAULT 1281 CALL ctl_stop( 'iom_rp0d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1282 END SELECT 1547 1548 lx = .FALSE. 1549 IF(PRESENT(lxios)) lx = lxios 1550 IF( lx ) THEN 1551 #ifdef key_iomput 1552 IF( kt == kwrite ) THEN 1553 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1554 CALL xios_send_field(trim(cdvar), pvar) 1555 ENDIF 1556 #endif 1557 ELSE 1558 IF( kiomid > 0 ) THEN 1559 IF( iom_file(kiomid)%nfid > 0 ) THEN 1560 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1561 SELECT CASE (iom_file(kiomid)%iolib) 1562 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1563 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1564 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pvar ) 1565 CASE DEFAULT 1566 CALL ctl_stop( 'iom_rp0d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1567 END SELECT 1568 ENDIF 1283 1569 ENDIF 1284 1570 ENDIF 1285 1571 END SUBROUTINE iom_rp0d 1286 1572 1287 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype )1573 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1288 1574 INTEGER , INTENT(in) :: kt ! ocean time-step 1289 1575 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1292 1578 REAL(wp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1293 1579 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1580 LOGICAL, OPTIONAL :: lxios ! xios write flag 1581 LOGICAL :: lx ! local xios write flag 1294 1582 INTEGER :: ivid ! variable id 1295 IF( kiomid > 0 ) THEN 1296 IF( iom_file(kiomid)%nfid > 0 ) THEN 1297 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1298 SELECT CASE (iom_file(kiomid)%iolib) 1299 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1300 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1301 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r1d = pvar ) 1302 CASE DEFAULT 1303 CALL ctl_stop( 'iom_rp1d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1304 END SELECT 1583 1584 lx = .FALSE. 1585 IF(PRESENT(lxios)) lx = lxios 1586 IF( lx ) THEN 1587 #ifdef key_iomput 1588 IF( kt == kwrite ) THEN 1589 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1590 CALL xios_send_field(trim(cdvar), pvar) 1591 ENDIF 1592 #endif 1593 ELSE 1594 IF( kiomid > 0 ) THEN 1595 IF( iom_file(kiomid)%nfid > 0 ) THEN 1596 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1597 SELECT CASE (iom_file(kiomid)%iolib) 1598 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1599 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1600 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r1d = pvar ) 1601 CASE DEFAULT 1602 CALL ctl_stop( 'iom_rp1d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1603 END SELECT 1604 ENDIF 1305 1605 ENDIF 1306 1606 ENDIF 1307 1607 END SUBROUTINE iom_rp1d 1308 1608 1309 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype )1609 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1310 1610 INTEGER , INTENT(in) :: kt ! ocean time-step 1311 1611 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1314 1614 REAL(wp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1315 1615 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1616 LOGICAL, OPTIONAL :: lxios ! xios write flag 1617 LOGICAL :: lx ! local xios write flag 1316 1618 INTEGER :: ivid ! variable id 1317 IF( kiomid > 0 ) THEN 1318 IF( iom_file(kiomid)%nfid > 0 ) THEN 1319 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1320 SELECT CASE (iom_file(kiomid)%iolib) 1321 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1322 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1323 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r2d = pvar ) 1324 CASE DEFAULT 1325 CALL ctl_stop( 'iom_rp2d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1326 END SELECT 1619 1620 lx = .FALSE. 1621 IF(PRESENT(lxios)) lx = lxios 1622 IF( lx ) THEN 1623 #ifdef key_iomput 1624 IF( kt == kwrite ) THEN 1625 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1626 CALL xios_send_field(trim(cdvar), pvar) 1627 ENDIF 1628 #endif 1629 ELSE 1630 IF( kiomid > 0 ) THEN 1631 IF( iom_file(kiomid)%nfid > 0 ) THEN 1632 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1633 SELECT CASE (iom_file(kiomid)%iolib) 1634 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1635 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1636 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r2d = pvar ) 1637 CASE DEFAULT 1638 CALL ctl_stop( 'iom_rp2d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1639 END SELECT 1640 ENDIF 1327 1641 ENDIF 1328 1642 ENDIF 1329 1643 END SUBROUTINE iom_rp2d 1330 1644 1331 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype )1645 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1332 1646 INTEGER , INTENT(in) :: kt ! ocean time-step 1333 1647 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1336 1650 REAL(wp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1337 1651 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1652 LOGICAL, OPTIONAL :: lxios ! xios write flag 1653 LOGICAL :: lx ! local xios write flag 1338 1654 INTEGER :: ivid ! variable id 1339 IF( kiomid > 0 ) THEN 1340 IF( iom_file(kiomid)%nfid > 0 ) THEN 1341 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1342 SELECT CASE (iom_file(kiomid)%iolib) 1343 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1344 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1345 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r3d = pvar ) 1346 CASE DEFAULT 1347 CALL ctl_stop( 'iom_rp3d: accepted IO library are only jpioipsl and jprstdimg' ) 1348 END SELECT 1655 1656 lx = .FALSE. 1657 IF(PRESENT(lxios)) lx = lxios 1658 IF( lx ) THEN 1659 #ifdef key_iomput 1660 IF( kt == kwrite ) THEN 1661 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1662 CALL xios_send_field(trim(cdvar), pvar) 1663 ENDIF 1664 #endif 1665 ELSE 1666 IF( kiomid > 0 ) THEN 1667 IF( iom_file(kiomid)%nfid > 0 ) THEN 1668 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1669 SELECT CASE (iom_file(kiomid)%iolib) 1670 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1671 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1672 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r3d = pvar ) 1673 CASE DEFAULT 1674 CALL ctl_stop( 'iom_rp3d: accepted IO library are only jpioipsl and jprstdimg' ) 1675 END SELECT 1676 ENDIF 1349 1677 ENDIF 1350 1678 ENDIF … … 1598 1926 #endif 1599 1927 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1600 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), &1601 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))1602 1928 1603 1929 IF ( lmask ) THEN 1930 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei,nldj:nlej),(/ ni*nj /)), & 1931 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1604 1932 ! mask land points, keep values on coast line -> specific mask for U, V and W points 1605 1933 SELECT CASE ( cdgrd ) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90
r8038 r8243 55 55 LOGICAL, PUBLIC :: lxios_sini = .FALSE. ! is restart in a single file 56 56 LOGICAL, PUBLIC :: lxios_set = .FALSE. 57 !XIOS read restart 58 LOGICAL, PUBLIC :: lwxios !: read single file restart using XIOS 59 INTEGER, PUBLIC :: wxioso !: type of restart file when writing using XIOS 1 - single, 2 - multiple 60 LOGICAL, PUBLIC :: lspr !: single processor read data flag 61 57 62 58 63 TYPE, PUBLIC :: file_descriptor … … 72 77 REAL(kind=wp), DIMENSION(jpmax_vars) :: scf !: scale_factor of the variables 73 78 REAL(kind=wp), DIMENSION(jpmax_vars) :: ofs !: add_offset of the variables 79 LOGICAL :: lsngl = .FALSE. !: one file flag 74 80 END TYPE file_descriptor 75 81 TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC :: iom_file !: array containing the info for all opened files -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90
r7924 r8243 72 72 INTEGER :: ihdf5 ! local variable for retrieval of value for NF90_HDF5 73 73 LOGICAL :: llclobber ! local definition of ln_clobber 74 INTEGER :: lng ! length of the string - unlimited dimension 74 75 !--------------------------------------------------------------------- 75 76 … … 92 93 CALL iom_nf90_check(NF90_SET_FILL( if90id, NF90_NOFILL, idmy ), clinfo) 93 94 ELSE ! ... in read mode 94 IF(lwp) WRITE(numout,*) TRIM(clinfo)//' open existing file: '//TRIM(cdname)//' in READ mode' 95 CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 95 IF(lwp) WRITE(numout,*) & 96 TRIM(clinfo)//' open existing file: '//TRIM(cdname)//' in READ mode (Single PE read ',lspr,')' 97 IF(lspr) THEN 98 IF(lwm) CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 99 IF(lk_mpp) call mpp_bcast(if90id) 100 ELSE 101 CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 102 ENDIF 96 103 ENDIF 97 104 ELSE ! the file does not exist (or we overwrite it) … … 152 159 iom_file(kiomid)%nvars = 0 153 160 iom_file(kiomid)%irec = -1 ! useless for NetCDF files, used to know if the file is in define mode 154 CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 161 IF(lwm) CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 162 IF(lk_mpp) CALL mpp_bcast(iom_file(kiomid)%iduld) 155 163 IF ( iom_file(kiomid)%iduld .GE. 0 ) THEN 156 CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld, &164 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld, & 157 165 & name = iom_file(kiomid)%uldname, & 158 166 & len = iom_file(kiomid)%lenuld ), clinfo ) 159 ENDIF 160 IF(lwp) WRITE(numout,*) ' ---> '//TRIM(cdname)//' OK' 167 IF(lk_mpp) THEN 168 lng = 32 ! from iom_file definition 169 CALL mpp_bcast(iom_file(kiomid)%uldname, lng) 170 CALL mpp_bcast(iom_file(kiomid)%lenuld) 171 ENDIF 172 ENDIF 173 iom_file(kiomid)%lsngl = lxios_sini.and.lspr 174 IF(lwp) WRITE(numout,*) ' ---> '//TRIM(cdname)//' OK. Is one file?:', lxios_sini, '1PE read:',iom_file(kiomid)%lsngl 161 175 ELSE 162 176 kiomid = 0 ! return error flag … … 177 191 ! 178 192 clinfo = ' iom_nf90_close , file: '//TRIM(iom_file(kiomid)%name) 179 CALL iom_nf90_check(NF90_CLOSE(iom_file(kiomid)%nfid), clinfo)193 IF(lwp.OR.(.NOT.lwp.AND..NOT.iom_file(kiomid)%lsngl)) CALL iom_nf90_check(NF90_CLOSE(iom_file(kiomid)%nfid), clinfo) 180 194 ! 181 195 END SUBROUTINE iom_nf90_close … … 202 216 LOGICAL :: llok ! ok test 203 217 CHARACTER(LEN=100) :: clinfo ! info character 218 REAL(wp) :: rwp ! real scratch variable 204 219 !!----------------------------------------------------------------------- 205 220 clinfo = ' iom_nf90_varid, file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(cdvar) … … 208 223 if90id = iom_file(kiomid)%nfid ! get back NetCDF file id 209 224 ! 210 llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr ! does the variable exist in the file 225 IF(lwm) llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr ! does the variable exist in the file 226 IF(lk_mpp) CALL mpp_bcast(llok) 211 227 IF( llok ) THEN 212 228 iom_nf90_varid = kiv 213 229 iom_file(kiomid)%nvars = kiv 230 IF(lk_mpp) CALL mpp_bcast(ivarid) 214 231 iom_file(kiomid)%nvid(kiv) = ivarid 215 232 iom_file(kiomid)%cn_var(kiv) = TRIM(cdvar) 216 CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, ndims = i_nvd), clinfo) ! number of dimensions 233 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, ndims = i_nvd), clinfo) ! number of dimensions 234 IF(lk_mpp) CALL mpp_bcast(i_nvd) 217 235 iom_file(kiomid)%ndims(kiv) = i_nvd 218 CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, dimids = idimid(1:i_nvd)), clinfo) ! dimensions ids 236 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, dimids = idimid(1:i_nvd)), clinfo) ! dimensions ids 237 IF(lk_mpp) CALL mpp_bcast(idimid(1:i_nvd), i_nvd) 219 238 iom_file(kiomid)%luld(kiv) = .FALSE. ! default value 220 239 iom_file(kiomid)%dimsz(:,kiv) = 0 ! reset dimsz in case previously used 221 240 DO ji = 1, i_nvd ! dimensions size 222 CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo) 241 IF(iom_file(kiomid)%lsngl) THEN ! if single file 242 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo) 243 IF(lk_mpp) CALL mpp_bcast(iom_file(kiomid)%dimsz(ji,kiv)) 244 ELSE 245 CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo) 246 ENDIF 223 247 IF( idimid(ji) == iom_file(kiomid)%iduld ) iom_file(kiomid)%luld(kiv) = .TRUE. ! unlimited dimension? 224 248 END DO 225 249 !---------- Deal with scale_factor and add_offset 226 llok = NF90_Inquire_attribute(if90id, ivarid, 'scale_factor') == nf90_noerr 250 IF(lwm) llok = NF90_Inquire_attribute(if90id, ivarid, 'scale_factor') == nf90_noerr 251 IF(lk_mpp) CALL mpp_bcast(llok) 227 252 IF( llok) THEN 228 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'scale_factor', iom_file(kiomid)%scf(kiv)), clinfo) 253 IF(iom_file(kiomid)%lsngl) THEN ! if single file 254 IF(lwm) CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'scale_factor', rwp), clinfo) 255 IF(lk_mpp) CALL mpp_bcast(rwp) 256 ELSE 257 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'scale_factor', rwp), clinfo) 258 ENDIF 259 iom_file(kiomid)%scf(kiv) = rwp 229 260 ELSE 230 261 iom_file(kiomid)%scf(kiv) = 1. 231 262 END IF 232 llok = NF90_Inquire_attribute(if90id, ivarid, 'add_offset') == nf90_noerr 263 IF(lwm) llok = NF90_Inquire_attribute(if90id, ivarid, 'add_offset') == nf90_noerr 264 IF(lk_mpp) CALL mpp_bcast(llok) 233 265 IF( llok ) THEN 234 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'add_offset', iom_file(kiomid)%ofs(kiv)), clinfo) 266 IF(iom_file(kiomid)%lsngl) THEN ! if single file 267 IF(lwm) CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'add_offset', rwp), clinfo) 268 IF(lk_mpp) CALL mpp_bcast(rwp) 269 ELSE 270 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'add_offset', rwp), clinfo) 271 ENDIF 272 iom_file(kiomid)%ofs(kiv) = rwp 235 273 ELSE 236 274 iom_file(kiomid)%ofs(kiv) = 0. 237 275 END IF 238 ! return the simension size276 ! return the dimension size 239 277 IF( PRESENT(kdimsz) ) THEN 240 278 IF( i_nvd == SIZE(kdimsz) ) THEN … … 267 305 !--------------------------------------------------------------------- 268 306 clinfo = 'iom_nf90_g0d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 269 CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 307 IF(lwm.OR.(.NOT.iom_file(kiomid)%lsngl)) & 308 & CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 309 IF(lk_mpp.AND.iom_file(kiomid)%lsngl) call mpp_bcast(pvar) 270 310 ! 271 311 END SUBROUTINE iom_nf90_g0d … … 290 330 REAL(wp), DIMENSION(:,:) , INTENT( out), OPTIONAL :: pv_r2d ! read field (2D case) 291 331 REAL(wp), DIMENSION(:,:,:) , INTENT( out), OPTIONAL :: pv_r3d ! read field (3D case) 332 ! Temporary arrays 333 ! 334 REAL(wp), ALLOCATABLE, DIMENSION(:) :: t_r1d 335 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: t_r2d ! read field (2D case) 336 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: t_r3d ! read field (3D case) 292 337 ! 293 338 CHARACTER(LEN=100) :: clinfo ! info character 294 339 INTEGER :: if90id ! nf90 identifier of the opened file 295 340 INTEGER :: ivid ! nf90 variable id 341 INTEGER :: klev ! vertical level 342 REAL(wp) :: astart , mpi_wtime 296 343 !--------------------------------------------------------------------- 297 344 clinfo = 'iom_nf90_g123d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) … … 299 346 ivid = iom_file(kiomid)%nvid(kvid) ! get back NetCDF var id 300 347 ! 348 if(lwm) astart = mpi_wtime() 301 349 IF( PRESENT(pv_r1d) ) THEN 350 IF(iom_file(kiomid)%lsngl) THEN 351 allocate(t_r1d(iom_file(kiomid)%dimsz(1,kvid))) 352 IF(lwm) THEN 353 if(lwp) write(numout,*) 'READ 1D SINGLE PROCESSOR: ',TRIM(iom_file(kiomid)%cn_var(kvid)) 354 IF(knbdim.EQ.2) THEN 355 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r1d, start = (/ 1, kstart(knbdim) /), & 356 & count = (/ iom_file(kiomid)%dimsz(1,kvid), 1 /)), clinfo) 357 ELSE 358 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r1d), clinfo) 359 ENDIF 360 ENDIF 361 if(lk_mpp) CALL mpp_bcast(t_r1d, iom_file(kiomid)%dimsz(1,kvid)) 362 pv_r1d(:) = t_r1d(kstart(1):kstart(1)+kcount(1)-1) 363 deallocate(t_r1d) 364 ELSE 302 365 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r1d(: ), start = kstart(1:knbdim), & 303 366 & count = kcount(1:knbdim)), clinfo ) 367 ENDIF 304 368 ELSEIF( PRESENT(pv_r2d) ) THEN 305 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r2d(kx1:kx2,ky1:ky2 ), start = kstart(1:knbdim), & 369 IF(iom_file(kiomid)%lsngl) THEN 370 allocate(t_r2d(iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid))) 371 IF(lwm) THEN 372 if(lwp) write(numout,*) 'READ 2D SINGLE PROCESSOR: ',TRIM(iom_file(kiomid)%cn_var(kvid)) 373 IF(knbdim.EQ.3) THEN 374 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r2d, start = (/ 1, 1, kstart(knbdim) /), & 375 & count = (/ iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), 1 /)), clinfo) 376 ELSE 377 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r2d), clinfo) 378 ENDIF 379 ENDIF 380 if(lk_mpp) CALL mpp_bcast(t_r2d, iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid)) 381 pv_r2d(kx1:kx2,ky1:ky2 ) = t_r2d(kstart(1):kstart(1)+kcount(1)-1, kstart(2):kstart(2)+kcount(2)-1) 382 deallocate(t_r2d) 383 ELSE 384 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r2d(kx1:kx2,ky1:ky2 ), start = kstart(1:knbdim), & 306 385 & count = kcount(1:knbdim)), clinfo ) 386 ENDIF 307 387 ELSEIF( PRESENT(pv_r3d) ) THEN 388 IF(iom_file(kiomid)%lsngl) THEN 389 allocate(t_r3d(iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), iom_file(kiomid)%dimsz(3,kvid))) 390 if(lwp) write(numout,*) 'READ 3D SINGLE PROCESSOR: ',TRIM(iom_file(kiomid)%cn_var(kvid)) 391 IF(lwm) THEN 392 IF(knbdim.EQ.4) THEN 393 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r3d, start = (/ 1, 1, 1, kstart(knbdim) /), & 394 & count = (/ iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), & 395 iom_file(kiomid)%dimsz(3,kvid), 1 /)), clinfo) 396 ! do klev = 1, iom_file(kiomid)%dimsz(3,kvid) 397 ! CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r3d(:,:,klev), start = (/ 1, 1, klev, kstart(knbdim) /), & 398 ! & count = (/ iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), 1, 1 /)), clinfo) 399 ! enddo 400 ELSE 401 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r3d), clinfo) 402 ENDIF 403 ENDIF 404 if(lk_mpp) CALL mpp_bcast(t_r3d, iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), iom_file(kiomid)%dimsz(3,kvid)) 405 pv_r3d(kx1:kx2,ky1:ky2, :) = & 406 t_r3d(kstart(1):kstart(1)+kcount(1)-1, kstart(2):kstart(2)+kcount(2)-1, kstart(3):kstart(3)+kcount(3)-1) 407 deallocate(t_r3d) 408 ELSE 308 409 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r3d(kx1:kx2,ky1:ky2,:), start = kstart(1:knbdim), & 309 410 & count = kcount(1:knbdim)), clinfo ) 310 ENDIF 411 ENDIF 412 ENDIF 413 if(lwm) write(*,*) 'IT took ', mpi_wtime() - astart ,' [s] to read ',TRIM(iom_file(kiomid)%cn_var(kvid)) 311 414 ! 312 415 END SUBROUTINE iom_nf90_g123d … … 327 430 CHARACTER(LEN=100) :: clinfo ! info character 328 431 !--------------------------------------------------------------------- 329 ! 330 if90id = iom_file(kiomid)%nfid 331 llok = NF90_Inquire_attribute(if90id, NF90_GLOBAL, cdatt) == nf90_noerr 332 IF( llok) THEN 333 clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 334 CALL iom_nf90_check(NF90_GET_ATT(if90id, NF90_GLOBAL, cdatt, values=pvar), clinfo) 335 ELSE 336 CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 337 pvar = -999 338 ENDIF 432 ! 433 clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 434 IF(lwm) THEN 435 if90id = iom_file(kiomid)%nfid 436 llok = NF90_Inquire_attribute(if90id, NF90_GLOBAL, cdatt) == nf90_noerr 437 IF( llok) THEN 438 clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 439 CALL iom_nf90_check(NF90_GET_ATT(if90id, NF90_GLOBAL, cdatt, values=pvar), clinfo) 440 ELSE 441 pvar = -999 442 ENDIF 443 ENDIF 444 445 IF( lk_mpp ) call mpp_bcast(pvar) 446 447 IF( pvar .EQ. -999 ) CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 339 448 ! 340 449 END SUBROUTINE iom_nf90_intatt … … 356 465 !--------------------------------------------------------------------- 357 466 clinfo = 'iom_nf90_gettime, file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 358 CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), ptime(:), & 359 & start=(/ 1 /), count=(/ iom_file(kiomid)%dimsz(1, kvid) /)), clinfo) 360 IF ( PRESENT(cdunits) ) THEN 361 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "units", & 362 & values=cdunits), clinfo) 363 ENDIF 364 IF ( PRESENT(cdcalendar) ) THEN 365 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "calendar", & 366 & values=cdcalendar), clinfo) 467 IF(lwm) THEN 468 CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), ptime(:), & 469 & start=(/ 1 /), count=(/ iom_file(kiomid)%dimsz(1, kvid) /)), clinfo) 470 IF( lk_mpp ) CALL mpp_bcast(ptime, SIZE(ptime)) 471 IF ( PRESENT(cdunits) ) THEN 472 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "units", & 473 & values=cdunits), clinfo) 474 IF( lk_mpp ) CALL mpp_bcast(cdunits, LEN(cdunits)) 475 ENDIF 476 IF ( PRESENT(cdcalendar) ) THEN 477 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "calendar", & 478 & values=cdcalendar), clinfo) 479 IF( lk_mpp ) CALL mpp_bcast(cdcalendar, LEN(cdcalendar)) 480 ENDIF 481 ELSE 482 IF( lk_mpp ) CALL mpp_bcast(ptime, SIZE(ptime)) 483 IF ( PRESENT(cdunits) .AND. lk_mpp ) CALL mpp_bcast(cdunits, LEN(cdunits)) 484 IF ( PRESENT(cdcalendar) .AND. lk_mpp ) CALL mpp_bcast(cdcalendar, LEN(cdcalendar)) 367 485 ENDIF 368 486 ! … … 576 694 CHARACTER(LEN=*), INTENT(in) :: cdinfo 577 695 !--------------------------------------------------------------------- 578 IF(kstatus /= nf90_noerr) CALL ctl_stop( 'iom_nf90_check : '//TRIM(nf90_strerror(kstatus)), TRIM(cdinfo) ) 696 IF(kstatus /= nf90_noerr) then 697 CALL ctl_stop( 'iom_nf90_check : '//TRIM(nf90_strerror(kstatus)), TRIM(cdinfo) ) 698 ENDIF 579 699 END SUBROUTINE iom_nf90_check 580 700 -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r8161 r8243 26 26 USE divcur ! hor. divergence and curl (div & cur routines) 27 27 USE sbc_oce ! for icesheet freshwater input variables 28 USE iom_def, ONLY : lxios_read, lxios_set, lxios_sini 28 USE iom_def, ONLY : lxios_read, lxios_set, lxios_sini, lwxios 29 29 USE timing 30 30 … … 67 67 !!---------------------------------------------------------------------- 68 68 ! 69 69 70 IF( kt == nit000 ) THEN ! default definitions 70 71 lrst_oce = .FALSE. … … 105 106 IF(lwp) THEN 106 107 WRITE(numout,*) 107 SELECT CASE ( jprstlib ) 108 CASE ( jprstdimg ) ; WRITE(numout,*) & 109 ' open ocean restart binary file: ',TRIM(clpath)//clname 110 CASE DEFAULT ; WRITE(numout,*) & 111 ' open ocean restart NetCDF file: ',TRIM(clpath)//clname 112 END SELECT 113 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 114 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 115 ELSE ; WRITE(numout,*) ' kt = ' , kt 108 IF(lwxios) THEN 109 WRITE(numout,*) & 110 ' XIOS open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 111 ELSE 112 SELECT CASE ( jprstlib ) 113 CASE ( jprstdimg ) ; WRITE(numout,*) & 114 ' open ocean restart binary file: ',TRIM(clpath)//TRIM(clname) 115 CASE DEFAULT ; WRITE(numout,*) & 116 ' open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 117 END SELECT 118 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 119 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 120 ELSE ; WRITE(numout,*) ' kt = ' , kt 121 ENDIF 116 122 ENDIF 117 123 ENDIF 118 124 ! 119 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 125 IF(.NOT.lwxios) THEN 126 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 127 ELSE 128 CALL iom_init( wxios_context, TRIM(clpath)//TRIM(clname) ) 129 CALL xios_update_calendar(nitrst) 130 CALL iom_swap( cxios_context ) 131 ENDIF 120 132 lrst_oce = .TRUE. 121 133 ENDIF … … 136 148 INTEGER, INTENT(in) :: kt ! ocean time-step 137 149 !!---------------------------------------------------------------------- 138 139 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt ) ! dynamics time step140 CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) ) ! surface tracer time step141 142 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub ) ! before fields143 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb )144 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem) )145 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal) )146 CALL iom_rstput( kt, nitrst, numrow, 'rotb' , rotb )147 CALL iom_rstput( kt, nitrst, numrow, 'hdivb' , hdivb )148 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb )150 IF(lwxios) CALL iom_swap( wxios_context ) 151 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt , lxios = lwxios) ! dynamics time step 152 CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) , lxios = lwxios) ! surface tracer time step 153 154 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub , lxios = lwxios) ! before fields 155 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb , lxios = lwxios) 156 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem) , lxios = lwxios) 157 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal) , lxios = lwxios) 158 CALL iom_rstput( kt, nitrst, numrow, 'rotb' , rotb , lxios = lwxios) 159 CALL iom_rstput( kt, nitrst, numrow, 'hdivb' , hdivb , lxios = lwxios) 160 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb , lxios = lwxios) 149 161 ! 150 CALL iom_rstput( kt, nitrst, numrow, 'un' , un ) ! now fields151 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn )152 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem) )153 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal) )154 CALL iom_rstput( kt, nitrst, numrow, 'rotn' , rotn )155 CALL iom_rstput( kt, nitrst, numrow, 'hdivn' , hdivn )156 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn )157 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop )162 CALL iom_rstput( kt, nitrst, numrow, 'un' , un , lxios = lwxios) ! now fields 163 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn , lxios = lwxios) 164 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem) , lxios = lwxios) 165 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal) , lxios = lwxios) 166 CALL iom_rstput( kt, nitrst, numrow, 'rotn' , rotn , lxios = lwxios) 167 CALL iom_rstput( kt, nitrst, numrow, 'hdivn' , hdivn , lxios = lwxios) 168 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn , lxios = lwxios) 169 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop , lxios = lwxios) 158 170 #if defined key_zdfkpp 159 CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd )171 CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd , lxios = lwxios) 160 172 #endif 161 173 IF( lk_oasis) THEN 162 174 ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 163 175 IF( ln_coupled_iceshelf_fluxes ) THEN 164 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass', greenland_icesheet_mass ) 165 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_timelapsed', greenland_icesheet_timelapsed ) 166 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass_roc', greenland_icesheet_mass_rate_of_change ) 167 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass', antarctica_icesheet_mass ) 168 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_timelapsed', antarctica_icesheet_timelapsed ) 169 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass_roc', antarctica_icesheet_mass_rate_of_change ) 176 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass', greenland_icesheet_mass ,& 177 & lxios = lwxios) 178 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_timelapsed', greenland_icesheet_timelapsed ,& 179 & lxios = lwxios) 180 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass_roc', greenland_icesheet_mass_rate_of_change ,& 181 & lxios = lwxios) 182 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass', antarctica_icesheet_mass , & 183 & lxios = lwxios) 184 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_timelapsed', antarctica_icesheet_timelapsed ,& 185 & lxios = lwxios) 186 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass_roc', & 187 & antarctica_icesheet_mass_rate_of_change , lxios = lwxios) 170 188 ENDIF 171 189 ENDIF 172 190 173 191 IF( kt == nitrst ) THEN 174 CALL iom_close( numrow ) ! close the restart file (only at last time step) 192 IF(.NOT.lwxios) THEN 193 CALL iom_close( numrow ) ! close the restart file (only at last time step) 194 ELSE 195 CALL iom_context_finalize( wxios_context ) 196 CALL iom_swap( cxios_context ) 197 ENDIF 175 198 !!gm IF( .NOT. lk_trdmld ) lrst_oce = .FALSE. 176 199 !!gm not sure what to do here ===>>> ask to Sebastian … … 180 203 nitrst = nstocklist( nrst_lst ) 181 204 ENDIF 182 lrst_oce = .FALSE.183 205 ENDIF 184 206 ! … … 219 241 IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF 220 242 ENDIF 243 lspr = .FALSE. ! do not read restart using single processor 221 244 CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 222 245 ! are we using XIOS to read the data? Part above will have to modified once XIOS … … 226 249 IF( lxios_read) THEN 227 250 if(.NOT.lxios_set) then 228 rxios_context = 'nemo_rst'229 251 call iom_init( rxios_context ) 230 252 lxios_set = .TRUE. … … 232 254 ENDIF 233 255 IF( TRIM(Agrif_CFixed()) /= '0' .AND. lxios_read) THEN 234 rxios_context = 'nemo_rst'235 256 call iom_init( rxios_context ) 236 257 ENDIF … … 339 360 ! 340 361 END SUBROUTINE rst_read 341 342 362 !!===================================================================== 343 363 END MODULE restart -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r6487 r8243 78 78 PUBLIC mpp_lnk_bdy_2d, mpp_lnk_bdy_3d 79 79 PUBLIC mpp_lbc_north_icb, mpp_lnk_2d_icb 80 PUBLIC mpp_bcast, mpp_barrier 80 81 81 82 TYPE arrayptr … … 87 88 !! with scalar arguments instead of array arguments, which causes problems 88 89 !! for the compilation on AIX system as well as NEC and SGI. Ok on COMPACQ 90 INTERFACE mpp_bcast 91 MODULE PROCEDURE mpp_bcast_i1, mpp_bcast_da, mpp_bcast_ch, mpp_bcast_ia, mpp_bcast_l, & 92 & mpp_bcast_d, mpp_bcast_d2a, mpp_bcast_d3a 93 END INTERFACE 89 94 INTERFACE mpp_min 90 95 MODULE PROCEDURE mppmin_a_int, mppmin_int, mppmin_a_real, mppmin_real … … 1838 1843 END SUBROUTINE mppsum_a_realdd 1839 1844 1845 SUBROUTINE mpp_bcast_i1(ival) 1846 !!------------------------------------------------------------------------ 1847 !! *** routine mpp_bcast_i1 *** 1848 !! 1849 !! ** Purpose : lwm broadcasts integer value to all processors 1850 !! ** Method : it is assumed that some information is read only by 1851 !i! processor 0 - lwm = .true.. 1852 !!-------------------------------------------------------------------------- 1853 INTEGER, INTENT(INOUT) :: ival ! value to broadcast 1854 INTEGER :: ierror ! mpi error 1855 CALL MPI_BCAST(ival, 1, MPI_INTEGER4, 0, mpi_comm_opa, ierror) 1856 END SUBROUTINE mpp_bcast_i1 1857 1858 SUBROUTINE mpp_bcast_da(dvalv, lng) 1859 !!------------------------------------------------------------------------ 1860 !! *** routine mpp_bcast *** 1861 !! 1862 !! ** Purpose : lwm broadcasts double 1D array to all processors 1863 !! ** Method : it is assumed that some information is read only by 1864 !i! processor 0 - lwm = .true.. NETCDF related call 1865 !!-------------------------------------------------------------------------- 1866 REAL(wp), DIMENSION(lng), INTENT(INOUT) :: dvalv ! real 1D array 1867 INTEGER, INTENT(IN) :: lng ! length of dval 1868 INTEGER :: ierror ! mpi error 1869 CALL MPI_BCAST(dvalv, lng, mpi_double_precision, 0, mpi_comm_opa, ierror) 1870 END SUBROUTINE mpp_bcast_da 1871 1872 1873 SUBROUTINE mpp_bcast_d2a(dvala, nx, ny) 1874 !!------------------------------------------------------------------------ 1875 !! *** routine mpp_bcast *** 1876 !! 1877 !! ** Purpose : lwm broadcasts double 2D array to all processors 1878 !! ** Method : it is assumed that some information is read only by 1879 !i! processor 0 - lwm = .true.. NETCDF related call 1880 !!-------------------------------------------------------------------------- 1881 REAL(wp), DIMENSION(nx, ny), INTENT(INOUT) :: dvala ! real 2D array 1882 INTEGER, INTENT(IN) :: nx, ny ! size of dvala 1883 INTEGER :: ierror ! mpi error 1884 INTEGER :: itotal ! local variable 1885 itotal = nx*ny 1886 CALL MPI_BCAST(dvala, itotal, mpi_double_precision, 0, mpi_comm_opa, ierror) 1887 END SUBROUTINE mpp_bcast_d2a 1888 1889 SUBROUTINE mpp_bcast_d3a(dvala, nx, ny, nz) 1890 !!------------------------------------------------------------------------ 1891 !! *** routine mpp_bcast *** 1892 !! 1893 !! ** Purpose : lwm broadcasts double 3D array to all processors 1894 !! ** Method : it is assumed that some information is read only by 1895 !i! processor 0 - lwm = .true.. NETCDF related call 1896 !!-------------------------------------------------------------------------- 1897 REAL(wp), DIMENSION(nx, ny, nz), INTENT(INOUT) :: dvala ! real 2D array 1898 INTEGER, INTENT(IN) :: nx, ny, nz ! size of dvala 1899 INTEGER :: ierror ! mpi error 1900 CALL MPI_BCAST(dvala, nx*ny*nz, mpi_double_precision, 0, mpi_comm_opa, ierror) 1901 END SUBROUTINE mpp_bcast_d3a 1902 1903 SUBROUTINE mpp_bcast_d(dval) 1904 !!------------------------------------------------------------------------ 1905 !! *** routine mpp_bcast *** 1906 !! 1907 !! ** Purpose : lwm broadcasts double value to all processors 1908 !! ** Method : it is assumed that some information is read only by 1909 !i! processor 0 - lwm = .true.. NETCDF related call 1910 !!-------------------------------------------------------------------------- 1911 REAL(wp), INTENT(INOUT) :: dval ! real 1D array 1912 INTEGER :: ierror ! mpi error 1913 CALL MPI_BCAST(dval, 1, mpi_double_precision, 0, mpi_comm_opa, ierror) 1914 END SUBROUTINE mpp_bcast_d 1915 1916 SUBROUTINE mpp_bcast_ch(cstring, lng) 1917 !!------------------------------------------------------------------------ 1918 !! *** routine mpp_bcast *** 1919 !! 1920 !! ** Purpose : lwm broadcasts string value to all processors 1921 !! ** Method : it is assumed that some information is read only by 1922 !i! processor 0 - lwm = .true.. NETCDF related call 1923 !!-------------------------------------------------------------------------- 1924 CHARACTER(len=lng), INTENT(IN) :: cstring ! string 1D array 1925 INTEGER, INTENT(IN) :: lng ! length of cstring 1926 INTEGER :: ierror ! mpi error 1927 CALL MPI_BCAST(cstring, lng, MPI_CHARACTER, 0, mpi_comm_opa, ierror) 1928 END SUBROUTINE mpp_bcast_ch 1929 1930 SUBROUTINE mpp_bcast_ia(ivalv, lng) 1931 INTEGER, DIMENSION(lng), INTENT(INOUT) :: ivalv ! value to broadcast 1932 INTEGER, INTENT (IN) :: lng 1933 INTEGER :: ierror ! mpi error 1934 CALL MPI_BCAST(ivalv, lng, MPI_INTEGER4, 0, mpi_comm_opa, ierror) 1935 END SUBROUTINE mpp_bcast_ia 1936 1937 SUBROUTINE mpp_bcast_l(lval) 1938 LOGICAL, INTENT(INOUT) :: lval ! value to broadcast 1939 INTEGER :: ierror ! mpi error 1940 CALL MPI_BCAST(lval, 1, MPI_LOGICAL, 0, mpi_comm_opa, ierror) 1941 END SUBROUTINE mpp_bcast_l 1942 1943 SUBROUTINE mpp_bcast_d2d(dval, ni, nj) 1944 !!------------------------------------------------------------------------ 1945 !! *** routine mpp_bcast *** 1946 !! 1947 !! ** Purpose : lwm broadcasts wp array to all processors 1948 !! ** Method : it is assumed that some information is read only by 1949 !i! processor 0 - lwm = .true.. NETCDF related call 1950 !!-------------------------------------------------------------------------- 1951 REAL(wp), DIMENSION(ni, nj), INTENT(INOUT) :: dval ! real 1D array 1952 INTEGER, INTENT(IN) :: ni, nj 1953 INTEGER :: ierror ! mpi error 1954 CALL MPI_BCAST(dval, ni*nj, mpi_double_precision, 0, mpi_comm_opa, ierror) 1955 END SUBROUTINE mpp_bcast_d2d 1956 1957 SUBROUTINE mpp_barrier(kcom) 1958 !!------------------------------------------------------------------------ 1959 !! *** routine mpp_barrier *** 1960 !! 1961 !! ** Purpose : mpi barrier 1962 !!-------------------------------------------------------------------------- 1963 INTEGER , INTENT(in ), OPTIONAL :: kcom 1964 !! 1965 INTEGER :: ierror, localcomm 1966 !!---------------------------------------------------------------------- 1967 ! 1968 localcomm = mpi_comm_opa 1969 IF( PRESENT(kcom) ) localcomm = kcom 1970 CALL MPI_Barrier(localcomm, ierror) 1971 END SUBROUTINE mpp_barrier 1972 1840 1973 SUBROUTINE mpp_minloc2d( ptab, pmask, pmin, ki,kj ) 1841 1974 !!------------------------------------------------------------------------ … … 3465 3598 USE in_out_manager 3466 3599 3600 INTERFACE mpp_bcast 3601 MODULE PROCEDURE mpp_bcast_i1, mpp_bcast_da, mpp_bcast_ch, mpp_bcast_ia, mpp_bcast_l, & 3602 & mpp_bcast_d 3603 END INTERFACE 3467 3604 INTERFACE mpp_sum 3468 3605 MODULE PROCEDURE mpp_sum_a2s, mpp_sum_as, mpp_sum_ai, mpp_sum_s, mpp_sum_i, mppsum_realdd, mppsum_a_realdd … … 3605 3742 END SUBROUTINE mppmin_int 3606 3743 3744 SUBROUTINE mpp_bcast_i1(ival) 3745 INTEGER, INTENT(IN) :: ivar ! value to broadcast 3746 3747 WRITE(*,*) 'mpp_bcast_i1: You should not have seen this print! error?' 3748 3749 END SUBROUTINE mpp_bcast_i1 3750 3751 SUBROUTINE mpp_bcast_ia(ival, lng) 3752 INTEGER, DIMENSION(lng), INTENT(IN) :: ivar ! value to broadcast 3753 INTEGER, INTENT (IN) :: lng 3754 3755 WRITE(*,*) 'mpp_bcast_ia: You should not have seen this print! error?' 3756 3757 END SUBROUTINE mpp_bcast_ia 3758 3759 SUBROUTINE mpp_bcast_l(lval) 3760 INTEGER, INTENT(IN) :: lvar ! value to broadcast 3761 3762 WRITE(*,*) 'mpp_bcast_l: You should not have seen this print! error?' 3763 3764 END SUBROUTINE mpp_bcast_l 3765 3766 SUBROUTINE mpp_bcast_da(dval, lng) 3767 REAL(wp), INTENT(IN) :: dval(lng) ! real 1D array 3768 INTEGER, INTENT(IN) :: lng ! length of dval 3769 3770 WRITE(*,*) 'mpp_bcast_da: You should not have seen this print! error?' 3771 3772 END SUBROUTINE mpp_bcast_da 3773 3774 SUBROUTINE mpp_bcast_d2a(dvala, nx, ny) 3775 REAL(wp), DIMENSION(nx, ny), INTENT(INOUT) :: dvala ! real 2D array 3776 INTEGER, INTENT(IN) :: nx, ny ! size of dvala 3777 INTEGER :: ierror ! mpi error 3778 WRITE(*,*) 'mpp_bcast_d2a: You should not have seen this print! error?' 3779 END SUBROUTINE mpp_bcast_d2a 3780 3781 SUBROUTINE mpp_bcast_d3a(dvala, nx, ny) 3782 REAL(wp), DIMENSION(nx, ny), INTENT(INOUT) :: dvala ! real 2D array 3783 INTEGER, INTENT(IN) :: nx, ny ! size of dvala 3784 INTEGER :: ierror ! mpi error 3785 WRITE(*,*) 'mpp_bcast_d2a: You should not have seen this print! error?' 3786 END SUBROUTINE mpp_bcast_d3a 3787 3788 SUBROUTINE mpp_bcast_d(dval) 3789 REAL(wp), INTENT(IN) :: dval ! real 1D array 3790 INTEGER, INTENT(IN) :: lng ! length of dval 3791 3792 WRITE(*,*) 'mpp_bcast_d: You should not have seen this print! error?' 3793 3794 END SUBROUTINE mpp_bcast_d 3795 3796 SUBROUTINE mpp_bcast_ch(cstring, lng) 3797 CHARACTER(len=lng), INTENT(IN) :: cstring ! string 1D array 3798 INTEGER, INTENT(IN) :: lng ! length of cstring 3799 3800 WRITE(*,*) 'mpp_bcast_da: You should not have seen this print! error?' 3801 3802 END SUBROUTINE mpp_bcast_ch 3803 3607 3804 SUBROUTINE mpp_minloc2d( ptab, pmask, pmin, ki, kj ) 3608 3805 REAL :: pmin -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/cyclone.F90
r6486 r8243 120 120 ! Interpolation of lon lat vmax... at the current timestep 121 121 ! *************************************************************** 122 122 lspr = .false. 123 123 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 124 lspr = .false. 124 125 125 126 ztct(:,:) = sf(1)%fnow(:,:,1) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r6487 r8243 334 334 llprevday = .FALSE. 335 335 isec_week = 0 336 336 337 337 ! define record informations 338 338 CALL fld_rec( kn_fsbc, sdjf, ldbefore = .TRUE. ) ! return before values in sdjf%nrec_a (as we will swap it later) … … 941 941 & ' data type: ' , sdf(jf)%cltype , & 942 942 & ' land/sea mask:' , TRIM( sdf(jf)%lsmname ) 943 call flush(numout)944 943 END DO 945 944 ENDIF … … 1434 1433 jpj1 = 2 + rec1(2) - jpjmin 1435 1434 jpj2 = jpj1 + recn(2) - 1 1436 IF( jpi1 == 2 ) THEN 1435 1437 1436 rec1(1) = ref_wgts(kw)%ddims(1) - ref_wgts(kw)%overlap 1438 1437 SELECT CASE( SIZE( ref_wgts(kw)%col(:,jpj1:jpj2,:),3) ) … … 1442 1441 CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col(:,jpj1:jpj2,:), nrec, rec1, recn) 1443 1442 END SELECT 1443 IF( jpi1 == 2 ) THEN 1444 1444 ref_wgts(kw)%fly_dta(jpi1-1,jpj1:jpj2,:) = ref_wgts(kw)%col(1,jpj1:jpj2,:) 1445 1445 ENDIF 1446 IF( jpi2 + jpimin - 1 == ref_wgts(kw)%ddims(1)+1 ) THEN 1446 1447 1447 rec1(1) = 1 + ref_wgts(kw)%overlap 1448 1448 SELECT CASE( SIZE( ref_wgts(kw)%col(:,jpj1:jpj2,:),3) ) … … 1452 1452 CALL iom_get( num, jpdom_unknown, clvar, ref_wgts(kw)%col(:,jpj1:jpj2,:), nrec, rec1, recn) 1453 1453 END SELECT 1454 IF( jpi2 + jpimin - 1 == ref_wgts(kw)%ddims(1)+1 ) THEN 1454 1455 ref_wgts(kw)%fly_dta(jpi2+1,jpj1:jpj2,:) = ref_wgts(kw)%col(1,jpj1:jpj2,:) 1455 1456 ENDIF -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcapr.F90
r8161 r8243 19 19 USE iom ! IOM library 20 20 USE lib_mpp ! MPP library 21 USE iom_def, ONLY : lwxios 21 22 22 23 IMPLICIT NONE … … 29 30 LOGICAL, PUBLIC :: ln_ref_apr !: ref. pressure: global mean Patm (F) or a constant (F) 30 31 REAL(wp) :: rn_pref ! reference atmospheric pressure [N/m2] 32 LOGICAL :: ln_apr_sio ! single processor read flag 31 33 32 34 REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) :: ssh_ib ! Inverse barometer now sea surface height [m] … … 77 79 IF( kt == nit000 ) THEN ! First call kt=nit000 ! 78 80 ! ! -------------------- ! 81 ln_apr_sio = .FALSE. 79 82 REWIND( numnam_ref ) ! Namelist namsbc_apr in reference namelist : File for atmospheric pressure forcing 80 83 READ ( numnam_ref, namsbc_apr, IOSTAT = ios, ERR = 901) … … 126 129 IF( kt /= nit000 ) ssh_ibb(:,:) = ssh_ib(:,:) !* Swap of ssh_ib fields 127 130 ! 131 lspr = ln_apr_sio 128 132 CALL fld_read( kt, nn_fsbc, sf_apr ) !* input Patm provided at kt + nn_fsbc/2 133 lspr = .false. 129 134 ! 130 135 ! !* update the reference atmospheric pressure (if necessary) … … 157 162 IF(lwp) WRITE(numout,*) 'sbc_apr : ssh_ib written in ocean restart file at it= ', kt,' date= ', ndastp 158 163 IF(lwp) WRITE(numout,*) '~~~~' 159 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib ) 164 IF( lwxios ) CALL iom_swap( wxios_context ) 165 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ibb' , ssh_ib, lxios = lwxios ) 166 IF( lwxios ) CALL iom_swap( cxios_context ) 160 167 ENDIF 161 168 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r6498 r8243 84 84 85 85 REAL(wp) :: eps20 = 1.e-20 ! constant values 86 LOGICAL :: ln_clio_sio ! single processor read 86 87 87 88 !! * Substitutions … … 137 138 !! 138 139 NAMELIST/namsbc_clio/ cn_dir, sn_utau, sn_vtau, sn_wndm, sn_humi, & 139 & sn_ccov, sn_tair, sn_prec 140 & sn_ccov, sn_tair, sn_prec, ln_clio_sio 140 141 !!--------------------------------------------------------------------- 141 142 … … 143 144 IF( kt == nit000 ) THEN ! First call kt=nit000 ! 144 145 ! ! ====================== ! 145 146 ln_clio_sio = .FALSE. 146 147 REWIND( numnam_ref ) ! Namelist namsbc_clio in reference namelist : CLIO files 147 148 READ ( numnam_ref, namsbc_clio, IOSTAT = ios, ERR = 901) … … 180 181 ! ! ====================== ! 181 182 ! 183 lspr = ln_clio_sio 182 184 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 185 lspr = .false. 183 186 ! 184 187 IF( MOD( kt - 1, nn_fsbc ) == 0 ) CALL blk_oce_clio( sf, sst_m ) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r6823 r8243 91 91 REAL(wp) :: rn_zqt ! z(q,t) : height of humidity and temperature measurements 92 92 REAL(wp) :: rn_zu ! z(u) : height of wind measurements 93 LOGICAL :: ln_core_sio ! single processor read flag 93 94 94 95 !! * Substitutions … … 151 152 & sn_wndi, sn_wndj, sn_humi , sn_qsr , & 152 153 & sn_qlw , sn_tair, sn_prec , sn_snow, & 153 & sn_tdif, rn_zqt, rn_zu 154 & sn_tdif, rn_zqt, rn_zu, ln_core_sio 154 155 !!--------------------------------------------------------------------- 155 156 ! … … 158 159 ! ! ====================== ! 159 160 ! 161 ln_core_sio = .FALSE. 160 162 REWIND( numnam_ref ) ! Namelist namsbc_core in reference namelist : CORE bulk parameters 161 163 READ ( numnam_ref, namsbc_core, IOSTAT = ios, ERR = 901) … … 197 199 ! 198 200 ENDIF 199 201 lspr = ln_core_sio 200 202 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 203 lspr = .false. 201 204 202 205 ! ! compute the surface ocean fluxes using CORE bulk formulea -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_mfs.F90
r6486 r8243 40 40 INTEGER , PARAMETER :: jp_prec = 7 ! index of total precipitation (rain+snow) (Kg/m2/s) 41 41 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) 42 LOGICAL :: ln_msf_sio ! single processor read flag 42 43 43 44 !! * Substitutions … … 120 121 NAMELIST/namsbc_mfs/ cn_dir , & 121 122 & sn_wndi , sn_wndj, sn_clc , sn_msl , & 122 & sn_tair , sn_rhm , sn_prec 123 & sn_tair , sn_rhm , sn_prec, ln_msf_sio 123 124 !!--------------------------------------------------------------------- 124 125 ! 125 126 IF( nn_timing == 1 ) CALL timing_start('sbc_blk_mfs') 126 127 ! 128 ln_msf_sio = .FALSE. 127 129 ! ! ====================== ! 128 130 IF( kt == nit000 ) THEN ! First call kt=nit000 ! … … 161 163 ! 162 164 ENDIF 163 165 lspr = ln_msf_sio 164 166 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 167 lspr = .false. 165 168 166 169 catm(:,:) = 0.0 ! initializze cloud cover variable -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcflx.F90
r6486 r8243 35 35 INTEGER , PARAMETER :: jp_emp = 5 ! index of evaporation-precipation file 36 36 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) 37 LOGICAL, PRIVATE :: ln_lfx_sio ! single processor read flag 37 38 38 39 !! * Substitutions … … 86 87 TYPE(FLD_N), DIMENSION(jpfld) :: slf_i ! array of namelist information structures 87 88 TYPE(FLD_N) :: sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp ! informations about the fields to be read 88 NAMELIST/namsbc_flx/ cn_dir, sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp 89 NAMELIST/namsbc_flx/ cn_dir, sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp, ln_lfx_sio 89 90 !!--------------------------------------------------------------------- 90 91 ! 91 92 IF( kt == nit000 ) THEN ! First call kt=nit000 92 93 ! set file information 94 ln_lfx_sio = .FALSE. 93 95 REWIND( numnam_ref ) ! Namelist namsbc_flx in reference namelist : Files for fluxes 94 96 READ ( numnam_ref, namsbc_flx, IOSTAT = ios, ERR = 901) … … 124 126 ENDIF 125 127 128 lspr = ln_lfx_sio 126 129 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 130 lspr = .false. 127 131 128 132 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! update ocean fluxes at each SBC frequency … … 170 174 CALL prihre( sf(jf)%fnow, jpi, jpj, 1, jpi, 20, 1, jpj, 10, zfact, numout ) 171 175 END DO 172 CALL FLUSH(numout)173 176 ENDIF 174 177 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r6500 r8243 897 897 ! 898 898 ENDIF 899 899 lspr = .false. 900 900 CALL fld_read( kt, nn_fsbc, sf ) ! Read input fields and provides the 901 901 ! ! input fields at the current time-step 902 lspr = .false. 902 903 903 904 ! set the fluxes from read fields -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_if.F90
r6498 r8243 29 29 IMPLICIT NONE 30 30 PRIVATE 31 32 31 PUBLIC sbc_ice_if ! routine called in sbcmod 33 32 … … 93 92 ! 94 93 ENDIF 95 94 lspr = .FALSE. 96 95 CALL fld_read( kt, nn_fsbc, sf_ice ) ! Read input fields and provides the 97 96 ! ! input fields at the current time-step 97 lspr = .FALSE. 98 98 99 99 IF( MOD( kt-1, nn_fsbc) == 0 ) THEN -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90
r7924 r8243 92 92 CHARACTER (LEN=32) :: cvarLeff ! variable name for efficient Length scale 93 93 INTEGER :: ios ! Local integer output status for namelist read 94 94 LOGICAL :: ln_isf_sio ! single processor read 95 95 REAL(wp), DIMENSION(:,:,:), POINTER :: zfwfisf3d, zqhcisf3d, zqlatisf3d 96 96 REAL(wp), DIMENSION(:,: ), POINTER :: zqhcisf2d … … 98 98 !!--------------------------------------------------------------------- 99 99 NAMELIST/namsbc_isf/ nn_isfblk, rn_hisf_tbl, ln_divisf, ln_conserve, rn_gammat0, rn_gammas0, nn_gammablk, & 100 & sn_fwfisf, sn_qisf, sn_rnfisf, sn_depmax_isf, sn_depmin_isf, sn_Leff_isf 100 & sn_fwfisf, sn_qisf, sn_rnfisf, sn_depmax_isf, sn_depmin_isf, sn_Leff_isf, ln_isf_sio 101 101 ! 102 102 ! … … 104 104 IF( kt == nit000 ) THEN ! First call kt=nit000 ! 105 105 ! ! ====================== ! 106 ln_isf_sio = .FALSE. 106 107 REWIND( numnam_ref ) ! Namelist namsbc_rnf in reference namelist : Runoffs 107 108 READ ( numnam_ref, namsbc_isf, IOSTAT = ios, ERR = 901) … … 230 231 231 232 ! compute salf and heat flux 233 lspr = ln_isf_sio 232 234 IF (nn_isf == 1) THEN 233 235 ! realistic ice shelf formulation … … 293 295 294 296 ENDIF 297 lspr = .FALSE. 295 298 ENDIF 296 299 -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r7924 r8243 55 55 USE bdy_par ! Require lk_bdy 56 56 USE iom_def, ONLY : lxios_read 57 USE iom_def, ONLY : lwxios 57 58 58 59 IMPLICIT NONE … … 444 445 & 'at it= ', kt,' date= ', ndastp 445 446 IF(lwp) WRITE(numout,*) '~~~~' 446 CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau ) 447 CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau ) 448 CALL iom_rstput( kt, nitrst, numrow, 'qns_b' , qns ) 447 IF( lwxios ) CALL iom_swap( wxios_context ) 448 CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau, lxios = lwxios ) 449 CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau, lxios = lwxios ) 450 CALL iom_rstput( kt, nitrst, numrow, 'qns_b' , qns, lxios = lwxios ) 449 451 ! The 3D heat content due to qsr forcing is treated in traqsr 450 452 ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b' , qsr ) 451 CALL iom_rstput( kt, nitrst, numrow, 'emp_b' , emp ) 452 CALL iom_rstput( kt, nitrst, numrow, 'sfx_b' , sfx ) 453 CALL iom_rstput( kt, nitrst, numrow, 'emp_b' , emp, lxios = lwxios ) 454 CALL iom_rstput( kt, nitrst, numrow, 'sfx_b' , sfx, lxios = lwxios ) 455 IF( lwxios ) CALL iom_swap( cxios_context ) 453 456 ENDIF 454 457 -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r7924 r8243 27 27 USE eosbn2 28 28 USE wrk_nemo ! Memory allocation 29 USE iom_def, ONLY : lxios_read 29 USE iom_def, ONLY : lxios_read, lwxios 30 30 31 31 IMPLICIT NONE … … 56 56 57 57 LOGICAL , PUBLIC :: l_rnfcpl = .false. ! runoffs recieved from oasis 58 LOGICAL :: ln_rnf_sio !: single processor read 58 59 59 60 INTEGER , PUBLIC :: nkrnf = 0 !: nb of levels over which Kz is increased at river mouths … … 172 173 & 'at it= ', kt,' date= ', ndastp 173 174 IF(lwp) WRITE(numout,*) '~~~~' 174 CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf ) 175 CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem) ) 176 CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal) ) 175 IF( lwxios ) CALL iom_swap( wxios_context ) 176 CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf, lxios = lwxios ) 177 CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem), lxios = lwxios ) 178 CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal), lxios = lwxios ) 179 IF( lwxios ) CALL iom_swap( cxios_context ) 177 180 ENDIF 178 181 ! … … 258 261 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf , sn_dep_rnf, & 259 262 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf, rn_rfact, & 260 & ln_rnf_depth_ini , rn_dep_max , rn_rnf_max, nn_rnf_depth_file 263 & ln_rnf_depth_ini , rn_dep_max , rn_rnf_max, nn_rnf_depth_file, & 264 & ln_rnf_sio 261 265 !!---------------------------------------------------------------------- 262 266 ! … … 278 282 ! ! ============ 279 283 ! 284 ln_rnf_sio = .FALSE. 280 285 REWIND( numnam_ref ) ! Namelist namsbc_rnf in reference namelist : Runoffs 281 286 READ ( numnam_ref, namsbc_rnf, IOSTAT = ios, ERR = 901) … … 302 307 ! ! ================== 303 308 ! 309 lspr = ln_rnf_sio 304 310 IF( .NOT. l_rnfcpl ) THEN 305 311 ALLOCATE( sf_rnf(1), STAT=ierror ) ! Create sf_rnf structure (runoff inflow) … … 482 488 ENDIF 483 489 ! 490 lspr = .false. 484 491 END SUBROUTINE sbc_rnf_init 485 492 -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r7924 r8243 22 22 USE iom ! IOM library 23 23 USE iom_def, ONLY : lxios_read 24 USE iom_def, ONLY : lwxios 24 25 25 26 IMPLICIT NONE … … 157 158 IF(lwp) WRITE(numout,*) '~~~~~~~' 158 159 zf_sbc = REAL( nn_fsbc, wp ) 159 CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc ) ! sbc frequency 160 CALL iom_rstput( kt, nitrst, numrow, 'ssu_m' , ssu_m ) ! sea surface mean fields 161 CALL iom_rstput( kt, nitrst, numrow, 'ssv_m' , ssv_m ) 162 CALL iom_rstput( kt, nitrst, numrow, 'sst_m' , sst_m ) 163 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m ) 164 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m ) 165 IF( lk_vvl ) CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 166 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m ) 167 ! 160 IF( lwxios ) CALL iom_swap( wxios_context ) 161 CALL iom_rstput( kt, nitrst, numrow, 'nn_fsbc', zf_sbc, lxios = lwxios ) ! sbc frequency 162 CALL iom_rstput( kt, nitrst, numrow, 'ssu_m' , ssu_m, lxios = lwxios ) ! sea surface mean fields 163 CALL iom_rstput( kt, nitrst, numrow, 'ssv_m' , ssv_m, lxios = lwxios ) 164 CALL iom_rstput( kt, nitrst, numrow, 'sst_m' , sst_m, lxios = lwxios ) 165 CALL iom_rstput( kt, nitrst, numrow, 'sss_m' , sss_m, lxios = lwxios ) 166 CALL iom_rstput( kt, nitrst, numrow, 'ssh_m' , ssh_m, lxios = lwxios ) 167 IF( lk_vvl ) CALL iom_rstput( kt, nitrst, numrow, 'e3t_m' , e3t_m ) 168 CALL iom_rstput( kt, nitrst, numrow, 'frq_m' , frq_m, lxios = lwxios ) 169 ! 170 IF( lwxios ) CALL iom_swap( cxios_context ) 168 171 ENDIF 169 172 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90
r6486 r8243 42 42 LOGICAL :: ln_sssr_bnd ! flag to bound erp term 43 43 REAL(wp) :: rn_sssr_bnd ! ABS(Max./Min.) value of erp term [mm/day] 44 LOGICAL :: ln_ssr_sio ! single processor read flag 44 45 45 46 REAL(wp) , ALLOCATABLE, DIMENSION(:) :: buffer ! Temporary buffer for exchange … … 87 88 IF( nn_sstr + nn_sssr /= 0 ) THEN 88 89 ! 90 lspr = ln_ssr_sio 89 91 IF( nn_sstr == 1) CALL fld_read( kt, nn_fsbc, sf_sst ) ! Read SST data and provides it at kt 90 92 IF( nn_sssr >= 1) CALL fld_read( kt, nn_fsbc, sf_sss ) ! Read SSS data and provides it at kt 93 lspr = .false. 91 94 ! 92 95 ! ! ========================= ! … … 163 166 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 164 167 TYPE(FLD_N) :: sn_sst, sn_sss ! informations about the fields to be read 165 NAMELIST/namsbc_ssr/ cn_dir, nn_sstr, nn_sssr, rn_dqdt, rn_deds, sn_sst, sn_sss, ln_sssr_bnd, rn_sssr_bnd 168 NAMELIST/namsbc_ssr/ cn_dir, nn_sstr, nn_sssr, rn_dqdt, rn_deds, sn_sst, sn_sss, ln_sssr_bnd, rn_sssr_bnd, & 169 & ln_ssr_sio 166 170 INTEGER :: ios 167 171 !!---------------------------------------------------------------------- 168 172 ! 169 173 174 ln_ssr_sio = .FALSE. 170 175 REWIND( numnam_ref ) ! Namelist namsbc_ssr in reference namelist : 171 176 READ ( numnam_ref, namsbc_ssr, IOSTAT = ios, ERR = 901) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
r6486 r8243 121 121 ! 122 122 ! 123 lspr = .false. 123 124 IF ( ln_cdgw ) THEN 124 125 CALL fld_read( kt, nn_fsbc, sf_cd ) !* read drag coefficient from external forcing … … 189 190 CALL wrk_dealloc( jpi,jpj,jpk,udummy,vdummy,hdivdummy,rotdummy) 190 191 ENDIF 192 lspr = .false. 191 193 END SUBROUTINE sbc_wave 192 194 -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r7923 r8243 46 46 47 47 ! !!* Namelist namtra_adv * 48 LOGICAL :: ln_traadv_cen2 ! 2nd order centered scheme flag 48 !make ln_traadv_cen2 public. It's needed when XIOS is used to write restart file 49 LOGICAL, PUBLIC :: ln_traadv_cen2 ! 2nd order centered scheme flag 49 50 LOGICAL :: ln_traadv_tvd ! TVD scheme flag 50 51 LOGICAL :: ln_traadv_tvd_zts ! TVD scheme flag with vertical sub time-stepping … … 257 258 ! 258 259 CALL tra_adv_mle_init ! initialisation of the Mixed Layer Eddy parametrisation (MLE) 260 lr_traadv_cen2 = ln_traadv_cen2 259 261 ! 260 262 END SUBROUTINE tra_adv_init -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen2.F90
r7923 r8243 34 34 USE timing ! Timing 35 35 USE phycst 36 USE iom_def, ONLY : lwxios 36 37 37 38 IMPLICIT NONE … … 286 287 ! avmb, avtb will be read in zdfini in restart case as they are used in zdftke, kpp etc... 287 288 IF( lrst_oce .AND. cdtype == 'TRA' ) THEN 288 CALL iom_rstput( kt, nitrst, numrow, 'avmb', avmb ) 289 CALL iom_rstput( kt, nitrst, numrow, 'avtb', avtb ) 289 IF( lwxios ) CALL iom_swap( wxios_context ) 290 CALL iom_rstput( kt, nitrst, numrow, 'avmb', avmb, lxios = lwxios ) 291 CALL iom_rstput( kt, nitrst, numrow, 'avtb', avtb, lxios = lwxios ) 292 IF( lwxios ) CALL iom_swap( cxios_context ) 290 293 ENDIF 291 294 ! -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r7924 r8243 33 33 USE wrk_nemo ! Memory Allocation 34 34 USE timing ! Timing 35 USE iom_def, ONLY : lxios_read 35 USE iom_def, ONLY : lxios_read, lwxios 36 36 37 IMPLICIT NONE 37 38 PRIVATE … … 50 51 REAL(wp), PUBLIC :: rn_si0 !: very near surface depth of extinction (RGB & 2 bands) 51 52 REAL(wp), PUBLIC :: rn_si1 !: deepest depth of extinction (water type I) (2 bands) 53 LOGICAL :: ln_qsr_sio !: single processor read flag 52 54 53 55 ! Module variables … … 185 187 IF( ln_qsr_rgb) THEN ! R-G-B light penetration ! 186 188 ! ! ------------------------- ! 189 lspr = ln_qsr_sio 187 190 ! Set chlorophyl concentration 188 191 IF( nn_chldta == 1 .OR. nn_chldta == 2 .OR. lk_vvl ) THEN !* Variable Chlorophyll or ocean volume … … 304 307 ENDIF 305 308 ENDIF 306 309 lspr = .false. 307 310 ENDIF 308 311 ! ! ------------------------- ! … … 368 371 & 'at it= ', kt,' date= ', ndastp 369 372 IF(lwp) WRITE(numout,*) '~~~~' 370 CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b' , qsr_hc ) 371 CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev ) ! default definition in sbcssm 373 IF( lwxios ) CALL iom_swap( wxios_context ) 374 CALL iom_rstput( kt, nitrst, numrow, 'qsr_hc_b', qsr_hc, lxios = lwxios ) 375 CALL iom_rstput( kt, nitrst, numrow, 'fraqsr_1lev', fraqsr_1lev, lxios = lwxios) ! default definition in sbcssm 376 IF( lwxios ) CALL iom_swap( cxios_context ) 372 377 ! 373 378 ENDIF … … 419 424 !! 420 425 NAMELIST/namtra_qsr/ sn_chl, cn_dir, ln_traqsr, ln_qsr_rgb, ln_qsr_2bd, ln_qsr_bio, ln_qsr_ice, & 421 & nn_chldta, rn_abs, rn_si0, rn_si1 426 & nn_chldta, rn_abs, rn_si0, rn_si1, ln_qsr_sio 422 427 !!---------------------------------------------------------------------- 423 428 … … 428 433 CALL wrk_alloc( jpi, jpj, jpk, ze0, ze1, ze2, ze3, zea ) 429 434 ! 430 435 ln_qsr_ice = .FALSE. 431 436 REWIND( numnam_ref ) ! Namelist namtra_qsr in reference namelist : Ratio and length of penetration 432 437 READ ( numnam_ref, namtra_qsr, IOSTAT = ios, ERR = 901) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/TRA/trasbc.F90
r7924 r8243 34 34 USE eosbn2 35 35 USE iom_def, ONLY : lxios_read 36 USE iom_def, ONLY : lwxios 36 37 37 38 IMPLICIT NONE … … 210 211 & 'at it= ', kt,' date= ', ndastp 211 212 IF(lwp) WRITE(numout,*) '~~~~' 212 CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem) ) 213 CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal) ) 213 IF( lwxios ) CALL iom_swap( wxios_context ) 214 CALL iom_rstput( kt, nitrst, numrow, 'sbc_hc_b', sbc_tsc(:,:,jp_tem), lxios = lwxios ) 215 CALL iom_rstput( kt, nitrst, numrow, 'sbc_sc_b', sbc_tsc(:,:,jp_sal), lxios = lwxios ) 216 IF( lwxios ) CALL iom_swap( cxios_context ) 214 217 ENDIF 215 218 ! … … 254 257 & 'at it= ', kt,' date= ', ndastp 255 258 IF(lwp) WRITE(numout,*) '~~~~' 256 CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:) ) 257 CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem) ) 258 CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal) ) 259 IF( lwxios ) CALL iom_swap( wxios_context ) 260 CALL iom_rstput( kt, nitrst, numrow, 'fwf_isf_b', fwfisf(:,:) , lxios = lwxios) 261 CALL iom_rstput( kt, nitrst, numrow, 'isf_hc_b' , risf_tsc(:,:,jp_tem), lxios = lwxios) 262 CALL iom_rstput( kt, nitrst, numrow, 'isf_sc_b' , risf_tsc(:,:,jp_sal), lxios = lwxios) 263 IF( lwxios ) CALL iom_swap( cxios_context ) 259 264 ENDIF 260 265 END IF -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90
r7924 r8243 53 53 USE timing ! Timing 54 54 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 55 USE iom_def, ONLY : lwxios 55 56 #if defined key_agrif 56 57 USE agrif_opa_interp … … 971 972 ! ! ------------------- 972 973 IF(lwp) WRITE(numout,*) '---- tke-rst ----' 973 CALL iom_rstput( kt, nitrst, numrow, 'en' , en ) 974 CALL iom_rstput( kt, nitrst, numrow, 'avt' , avt_k ) 975 CALL iom_rstput( kt, nitrst, numrow, 'avm' , avm_k ) 976 CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k ) 977 CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k ) 978 CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl ) 974 IF( lwxios ) CALL iom_swap( wxios_context ) 975 CALL iom_rstput( kt, nitrst, numrow, 'en' , en , lxios = lwxios ) 976 CALL iom_rstput( kt, nitrst, numrow, 'avt' , avt_k , lxios = lwxios ) 977 CALL iom_rstput( kt, nitrst, numrow, 'avm' , avm_k , lxios = lwxios ) 978 CALL iom_rstput( kt, nitrst, numrow, 'avmu' , avmu_k, lxios = lwxios ) 979 CALL iom_rstput( kt, nitrst, numrow, 'avmv' , avmv_k, lxios = lwxios ) 980 CALL iom_rstput( kt, nitrst, numrow, 'dissl', dissl , lxios = lwxios ) 981 IF( lwxios ) CALL iom_swap( cxios_context ) 979 982 ! 980 983 ENDIF -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/SAS_SRC/sbcssm.F90
r6486 r8243 81 81 ! 82 82 IF( nn_timing == 1 ) CALL timing_start( 'sbc_ssm') 83 83 lspr = .false. 84 84 IF( nfld_3d > 0 ) CALL fld_read( kt, 1, sf_ssm_3d ) !== read data at kt time step ==! 85 85 IF( nfld_2d > 0 ) CALL fld_read( kt, 1, sf_ssm_2d ) !== read data at kt time step ==! 86 lspr = .false. 86 87 ! 87 88 IF( ln_3d_uve ) THEN -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r6498 r8243 374 374 ! 375 375 IF( ln_presatm ) THEN 376 lspr = .false. 376 377 CALL fld_read( kt, 1, sf_patm ) !* input Patm provided at kt + 1/2 378 lspr = .false. 377 379 patm(:,:) = sf_patm(1)%fnow(:,:,1) ! atmospheric pressure 378 380 ENDIF -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r6793 r8243 335 335 IF( ln_varpar ) THEN 336 336 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_par > 1 ) ) THEN 337 lspr = .false. 337 338 CALL fld_read( kt, 1, sf_par ) 339 lspr = .false. 338 340 par_varsw(:,:) = ( sf_par(1)%fnow(:,:,1) ) / 3.0 339 341 ENDIF -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r6487 r8243 114 114 ! 115 115 ! Compute dust at nit000 or only if there is more than 1 time record in dust file 116 lspr = .false. 116 117 IF( ln_dust ) THEN 117 118 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN … … 167 168 ENDIF 168 169 ENDIF 170 lspr = .false. 169 171 ! 170 172 IF( nn_timing == 1 ) CALL timing_stop('p4z_sbc') -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/TOP_SRC/trcbc.F90
r6486 r8243 274 274 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 275 275 ENDIF 276 276 lspr = .false. 277 277 ! OPEN boundary conditions: DOES NOT WORK. Waiting for stable BDY 278 278 IF( nb_trcobc > 0 ) THEN … … 293 293 CALL fld_read(kt,1,sf_trccbc) 294 294 ENDIF 295 lspr = .false. 295 296 ! 296 297 IF( nn_timing == 1 ) CALL timing_stop('trc_bc_read')
Note: See TracChangeset
for help on using the changeset viewer.