New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 8243 for branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM – NEMO

Ignore:
Timestamp:
2017-06-29T11:41:55+02:00 (7 years ago)
Author:
andmirek
Message:

#1914 working XIOS read, XIOS write and single processor read

Location:
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90

    r8001 r8243  
    5050   INTEGER       ::   nn_chunksz       !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 
    5151   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 
    5253#if defined key_netcdf4 
    5354   !!---------------------------------------------------------------------- 
     
    153154   LOGICAL       ::   lsp_area = .TRUE.     !: to make a control print over a specific area 
    154155   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 
    156158 
    157159   !!---------------------------------------------------------------------- 
  • branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r8161 r8243  
    4141   USE dianam          ! build name of file 
    4242   USE xios 
    43    USE iom_def, ONLY : max_rst_fields, rst_fields 
     43   USE iom_def, ONLY : max_rst_fields, rst_fields, wxioso 
    4444# endif 
    4545   USE ioipsl, ONLY :  ju2ymds    ! for calendar 
    4646   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 
    4849 
    4950   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 
    5054   PUBLIC   !   must be public to be able to access iom_def through iom 
    51     
    5255#if defined key_iomput 
    5356   LOGICAL, PUBLIC, PARAMETER ::   lk_iomput = .TRUE.        !: iom_put flag 
     
    5558   LOGICAL, PUBLIC, PARAMETER ::   lk_iomput = .FALSE.       !: iom_put flag 
    5659#endif 
     60 
    5761   PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 
    5862   PUBLIC iom_getatt, iom_use, iom_context_finalize 
     
    6468   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 
    6569   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 
    6771# endif 
    6872 
     
    8892CONTAINS 
    8993 
    90    SUBROUTINE iom_init( cdname )  
     94   SUBROUTINE iom_init( cdname, filename, it )  
    9195      !!---------------------------------------------------------------------- 
    9296      !!                     ***  ROUTINE   *** 
     
    108112      ! 
    109113      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 
    110117      !!---------------------------------------------------------------------- 
    111118#if ! defined key_xios2 
     
    119126      CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 
    120127      CALL iom_swap( cdname ) 
     128      lrst_context =  (TRIM(cdname) == TRIM(wxios_context)).OR.(TRIM(cdname) == TRIM(rxios_context)) 
    121129 
    122130      ! calendar parameters 
     
    145153      CALL set_scalar 
    146154 
    147       IF( TRIM(cdname) == TRIM(cxios_context) .OR. TRIM(cdname) == TRIM(rxios_context)) THEN   
     155      IF( TRIM(cdname) == TRIM(cxios_context) ) THEN   
    148156         CALL set_grid( "T", glamt, gphit, ln_mskland )  
    149157         CALL set_grid( "U", glamu, gphiu, ln_mskland ) 
     
    151159         CALL set_grid( "W", glamt, gphit, ln_mskland ) 
    152160         CALL set_grid_znl( gphit ) 
    153          CALL set_grid("N",glamt, gphit, .FALSE.)        ! not masked values 
    154161         ! 
    155          IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN   ! Add additional grid metadata 
     162         IF( ln_cfmeta ) THEN   ! Add additional grid metadata 
    156163            CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 
    157164            CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) 
     
    164171         ENDIF 
    165172      ENDIF 
     173 
     174     IF( lrst_context )  CALL set_grid("N",glamt, gphit, .FALSE.)        ! not masked values 
    166175 
    167176      IF( TRIM(cdname) == TRIM(cxios_context)//"_crs" ) THEN   
     
    176185         CALL dom_grid_glo   ! Return to parent grid domain 
    177186         ! 
    178          IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN   ! Add additional grid metadata 
     187         IF( ln_cfmeta .AND. .NOT.lrst_context) THEN   ! Add additional grid metadata 
    179188            CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 
    180189            CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) 
     
    188197      ENDIF 
    189198 
    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 
    196206      ! Add vertical grid bounds 
    197207#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 ) 
    210220 
    211221#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 
    222232 
    223233# if defined key_floats 
     
    237247!set which fields are to be read from restart file 
    238248       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) 
    239254      ELSE 
    240255       CALL set_xmlatt 
     
    255270 
    256271   END SUBROUTINE iom_init 
    257  
    258272    
    259273   SUBROUTINE set_rst_vars() 
     
    370384        IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 
    371385        IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    372            rst_file = TRIM(cn_ocerst_indir)//TRIM(cn_ocerst_in) 
     386           rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 
    373387        ELSE 
    374            rst_file = TRIM(cn_ocerst_indir)//'1_'//TRIM(cn_ocerst_in) 
     388           rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 
    375389        ENDIF 
    376390!set name of the restart file and enable available fields 
     
    394408#endif 
    395409   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 
    396667 
    397668   SUBROUTINE iom_swap( cdname ) 
     
    510781      ! try to find if the file to be opened already exist 
    511782      ! ============= 
    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) 
    513786      IF( .NOT.llok ) THEN 
    514787         ! we try to add the cpu number to the name 
     
    528801            icnt = icnt + 1 
    529802         END DO 
    530       ELSE 
    531          lxios_sini = .TRUE. 
     803         lxios_sini = .FALSE. 
    532804      ENDIF 
    533805      IF( llwrt ) THEN 
     
    12631535   !!                   INTERFACE iom_rstput 
    12641536   !!---------------------------------------------------------------------- 
    1265    SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1537   SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    12661538      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    12671539      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    12701542      REAL(wp)        , INTENT(in)                         ::   pvar     ! written field 
    12711543      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1544      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1545      LOGICAL :: lx                ! local xios write flag 
    12721546      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 
    12831569         ENDIF 
    12841570      ENDIF 
    12851571   END SUBROUTINE iom_rp0d 
    12861572 
    1287    SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1573   SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    12881574      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    12891575      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    12921578      REAL(wp)        , INTENT(in), DIMENSION(          :) ::   pvar     ! written field 
    12931579      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1580      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1581      LOGICAL :: lx                ! local xios write flag 
    12941582      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 
    13051605         ENDIF 
    13061606      ENDIF 
    13071607   END SUBROUTINE iom_rp1d 
    13081608 
    1309    SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1609   SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    13101610      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    13111611      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    13141614      REAL(wp)        , INTENT(in), DIMENSION(:,    :    ) ::   pvar     ! written field 
    13151615      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1616      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1617      LOGICAL :: lx                ! local xios write flag 
    13161618      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 
    13271641         ENDIF 
    13281642      ENDIF 
    13291643   END SUBROUTINE iom_rp2d 
    13301644 
    1331    SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype ) 
     1645   SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 
    13321646      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
    13331647      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     
    13361650      REAL(wp)        , INTENT(in),       DIMENSION(:,:,:) ::   pvar     ! written field 
    13371651      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1652      LOGICAL, OPTIONAL :: lxios   ! xios write flag 
     1653      LOGICAL :: lx                 ! local xios write flag 
    13381654      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 
    13491677         ENDIF 
    13501678      ENDIF 
     
    15981926#endif      
    15991927      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 /)))   
    16021928 
    16031929      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 /))) 
    16041932         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
    16051933         SELECT CASE ( cdgrd ) 
  • branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90

    r8038 r8243  
    5555   LOGICAL, PUBLIC            ::   lxios_sini = .FALSE. ! is restart in a single file 
    5656   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 
    5762 
    5863   TYPE, PUBLIC ::   file_descriptor 
     
    7277      REAL(kind=wp), DIMENSION(jpmax_vars)      ::   scf      !: scale_factor of the variables 
    7378      REAL(kind=wp), DIMENSION(jpmax_vars)      ::   ofs      !: add_offset of the variables 
     79      LOGICAL                                   ::   lsngl = .FALSE.    !: one file flag 
    7480   END TYPE file_descriptor 
    7581   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  
    7272      INTEGER            ::   ihdf5            ! local variable for retrieval of value for NF90_HDF5 
    7373      LOGICAL            ::   llclobber        ! local definition of ln_clobber 
     74      INTEGER            ::   lng              ! length of the string - unlimited dimension 
    7475      !--------------------------------------------------------------------- 
    7576 
     
    9293            CALL iom_nf90_check(NF90_SET_FILL( if90id, NF90_NOFILL, idmy                          ), clinfo) 
    9394         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 
    96103         ENDIF 
    97104      ELSE                                       ! the file does not exist (or we overwrite it) 
     
    152159         iom_file(kiomid)%nvars  = 0 
    153160         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) 
    155163         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,     &  
    157165        &                                               name = iom_file(kiomid)%uldname,  & 
    158166        &                                               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 
    161175      ELSE 
    162176         kiomid = 0               ! return error flag 
     
    177191      ! 
    178192      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) 
    180194      !     
    181195   END SUBROUTINE iom_nf90_close 
     
    202216      LOGICAL                        ::   llok             ! ok  test 
    203217      CHARACTER(LEN=100)             ::   clinfo           ! info character 
     218      REAL(wp)                       ::   rwp              ! real scratch variable 
    204219      !!----------------------------------------------------------------------- 
    205220      clinfo = '          iom_nf90_varid, file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(cdvar) 
     
    208223      if90id = iom_file(kiomid)%nfid        ! get back NetCDF file id 
    209224      ! 
    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)  
    211227      IF( llok ) THEN 
    212228         iom_nf90_varid = kiv 
    213229         iom_file(kiomid)%nvars       = kiv 
     230         IF(lk_mpp) CALL mpp_bcast(ivarid) 
    214231         iom_file(kiomid)%nvid(kiv)   = ivarid 
    215232         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) 
    217235         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) 
    219238         iom_file(kiomid)%luld(kiv) = .FALSE.   ! default value 
    220239         iom_file(kiomid)%dimsz(:,kiv) = 0      ! reset dimsz in case previously used 
    221240         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 
    223247            IF( idimid(ji) == iom_file(kiomid)%iduld ) iom_file(kiomid)%luld(kiv) = .TRUE.   ! unlimited dimension?  
    224248         END DO 
    225249         !---------- 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) 
    227252         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  
    229260         ELSE 
    230261            iom_file(kiomid)%scf(kiv) = 1. 
    231262         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) 
    233265         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 
    235273         ELSE 
    236274            iom_file(kiomid)%ofs(kiv) = 0. 
    237275         END IF 
    238          ! return the simension size 
     276         ! return the dimension size 
    239277         IF( PRESENT(kdimsz) ) THEN  
    240278            IF( i_nvd == SIZE(kdimsz) ) THEN 
     
    267305      !--------------------------------------------------------------------- 
    268306      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) 
    270310      !  
    271311   END SUBROUTINE iom_nf90_g0d 
     
    290330      REAL(wp), DIMENSION(:,:)   , INTENT(  out), OPTIONAL ::   pv_r2d    ! read field (2D case) 
    291331      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) 
    292337      ! 
    293338      CHARACTER(LEN=100) ::   clinfo               ! info character 
    294339      INTEGER            ::   if90id               ! nf90 identifier of the opened file 
    295340      INTEGER            ::   ivid                 ! nf90 variable id 
     341      INTEGER            ::   klev                 ! vertical level 
     342      REAL(wp)           ::   astart , mpi_wtime 
    296343      !--------------------------------------------------------------------- 
    297344      clinfo = 'iom_nf90_g123d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 
     
    299346      ivid   = iom_file(kiomid)%nvid(kvid)   ! get back NetCDF var id 
    300347      ! 
     348      if(lwm) astart =  mpi_wtime() 
    301349      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 
    302365         CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r1d(:                ), start = kstart(1:knbdim),   & 
    303366            &                                                                       count = kcount(1:knbdim)), clinfo ) 
     367        ENDIF 
    304368      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),   & 
    306385            &                                                                       count = kcount(1:knbdim)), clinfo ) 
     386         ENDIF 
    307387      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 
    308409         CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r3d(kx1:kx2,ky1:ky2,:), start = kstart(1:knbdim),   & 
    309410            &                                                                       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)) 
    311414      ! 
    312415   END SUBROUTINE iom_nf90_g123d 
     
    327430      CHARACTER(LEN=100)              ::   clinfo   ! info character 
    328431      !--------------------------------------------------------------------- 
    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') 
    339448      !  
    340449   END SUBROUTINE iom_nf90_intatt 
     
    356465      !--------------------------------------------------------------------- 
    357466      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)) 
    367485      ENDIF 
    368486      ! 
     
    576694      CHARACTER(LEN=*), INTENT(in) :: cdinfo 
    577695      !--------------------------------------------------------------------- 
    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 
    579699   END SUBROUTINE iom_nf90_check 
    580700 
  • branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90

    r8161 r8243  
    2626   USE divcur          ! hor. divergence and curl      (div & cur routines) 
    2727   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 
    2929   USE timing 
    3030 
     
    6767      !!---------------------------------------------------------------------- 
    6868      ! 
     69 
    6970      IF( kt == nit000 ) THEN   ! default definitions 
    7071         lrst_oce = .FALSE.    
     
    105106            IF(lwp) THEN 
    106107               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 
    116122               ENDIF 
    117123            ENDIF 
    118124            ! 
    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 
    120132            lrst_oce = .TRUE. 
    121133         ENDIF 
     
    136148      INTEGER, INTENT(in) ::   kt   ! ocean time-step 
    137149      !!---------------------------------------------------------------------- 
    138  
    139                      CALL iom_rstput( kt, nitrst, numrow, 'rdt'    , rdt       )   ! dynamics time step 
    140                      CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) )   ! surface tracer time step 
    141  
    142                      CALL iom_rstput( kt, nitrst, numrow, 'ub'     , ub        )     ! before fields 
    143                      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) 
    149161                     ! 
    150                      CALL iom_rstput( kt, nitrst, numrow, 'un'     , un        )     ! now fields 
    151                      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) 
    158170#if defined key_zdfkpp 
    159                      CALL iom_rstput( kt, nitrst, numrow, 'rhd'    , rhd       ) 
     171                     CALL iom_rstput( kt, nitrst, numrow, 'rhd'    , rhd       , lxios = lwxios) 
    160172#endif 
    161173                     IF( lk_oasis) THEN 
    162174                     ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 
    163175                     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) 
    170188                     ENDIF 
    171189                     ENDIF 
    172190 
    173191      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 
    175198!!gm         IF( .NOT. lk_trdmld )   lrst_oce = .FALSE. 
    176199!!gm  not sure what to do here   ===>>>  ask to Sebastian 
     
    180203               nitrst = nstocklist( nrst_lst ) 
    181204            ENDIF 
    182             lrst_oce = .FALSE. 
    183205      ENDIF 
    184206      ! 
     
    219241           IF ( llok ) THEN ; jlibalt = jpnf90  ; ELSE ; jlibalt = jprstlib ; ENDIF 
    220242         ENDIF 
     243         lspr = .FALSE.                       ! do not read restart using single processor 
    221244         CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 
    222245! are we using XIOS to read the data? Part above will have to modified once XIOS 
     
    226249         IF( lxios_read) THEN 
    227250         if(.NOT.lxios_set) then 
    228              rxios_context = 'nemo_rst' 
    229251             call iom_init( rxios_context ) 
    230252             lxios_set = .TRUE. 
     
    232254         ENDIF 
    233255         IF( TRIM(Agrif_CFixed()) /= '0' .AND. lxios_read) THEN 
    234             rxios_context = 'nemo_rst' 
    235256            call iom_init( rxios_context ) 
    236257         ENDIF  
     
    339360      ! 
    340361   END SUBROUTINE rst_read 
    341  
    342362   !!===================================================================== 
    343363END MODULE restart 
Note: See TracChangeset for help on using the changeset viewer.