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 11893 for NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2019-11-13T09:48:43+01:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2323 read/write SI3 restart file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom.F90

    r11870 r11893  
    6464   PUBLIC iom_use, iom_context_finalize, iom_miss_val 
    6565 
    66    PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
     66   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d, iom_rp4d 
    6767   PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_g4d, iom_get_123d 
    6868   PRIVATE iom_p1d, iom_p2d, iom_p3d 
     
    8989   END INTERFACE 
    9090   INTERFACE iom_rstput 
    91       MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
     91      MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d, iom_rp4d 
    9292   END INTERFACE 
    9393   INTERFACE iom_put 
     
    451451                CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 
    452452                SELECT CASE (TRIM(rst_rfields(i)%grid)) 
    453 !                CASE ("grid_Ni_4D") 
    454 !                   CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    455 !                       domain_ref="grid_N", axis_ref="nlay_i", axis_ref="numcat", operation = "instant") 
    456 !                CASE ("grid_Ns_4D") 
    457 !                   CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    458 !                       domain_ref="grid_N", axis_ref="nlay_s", axis_ref="numcat", operation = "instant") 
     453#if defined key_si3 
     454                 CASE ("grid_Ni_4D") 
     455                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     456                         grid_ref="grid_Ni_4D", operation = "instant") 
     457                 CASE ("grid_Ns_4D") 
     458                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     459                         grid_ref="grid_Ns_4D", operation = "instant") 
    459460                 CASE ("grid_Ni_3D") 
    460461                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    461                         domain_ref="grid_N", axis_ref="numcat", operation = "instant") 
     462                         domain_ref="grid_N", axis_ref="numcat", operation = "instant") 
     463#endif 
    462464                 CASE ("grid_N_3D") 
    463465                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    464                         domain_ref="grid_N", axis_ref="nav_lev", operation = "instant") 
     466                         domain_ref="grid_N", axis_ref="nav_lev", operation = "instant") 
    465467                 CASE ("grid_N") 
    466468                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    467                         domain_ref="grid_N", operation = "instant")  
     469                         domain_ref="grid_N", operation = "instant")  
    468470                CASE ("grid_vector") 
    469471                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
     
    471473                 CASE ("grid_scalar") 
    472474                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 
    473                         scalar_ref = "grid_scalar", operation = "instant") 
     475                         scalar_ref = "grid_scalar", operation = "instant") 
    474476                END SELECT 
    475477                IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_rfields(i)%vname), ' enabled in ', TRIM(rst_file) 
     
    526528         CALL iom_set_rstw_var_active(drst_wfields, 'sbc_sc_b') 
    527529   ELSE IF(cdmdl == "SI3") THEN 
     530#if defined key_si3 
    528531      CALL iom_set_rstw_var_active(drst_wfields, 'nn_fsbc_ice') 
    529       CALL iom_set_rstw_var_active(drst_wfields, 'kt_ice') 
    530       CALL iom_set_rstw_var_active(drst_wfields, 'v_i') 
    531       CALL iom_set_rstw_var_active(drst_wfields, 'v_s') 
    532       CALL iom_set_rstw_var_active(drst_wfields, 'sv_i') 
    533       CALL iom_set_rstw_var_active(drst_wfields, 'a_i') 
    534       CALL iom_set_rstw_var_active(drst_wfields, 't_su') 
    535       CALL iom_set_rstw_var_active(drst_wfields, 'u_ice') 
    536       CALL iom_set_rstw_var_active(drst_wfields, 'v_ice') 
    537       CALL iom_set_rstw_var_active(drst_wfields, 'oa_i') 
    538       CALL iom_set_rstw_var_active(drst_wfields, 'a_ip') 
    539       CALL iom_set_rstw_var_active(drst_wfields, 'v_ip') 
    540       DO jk = 1, nlay_s  
    541          WRITE(zchar1,'(I2.2)') jk 
    542          znam = 'e_s'//'_l'//zchar1 
    543          CALL iom_set_rstw_var_active(drst_wfields, znam ) 
    544       END DO 
    545       ! Ice enthalpy 
    546       DO jk = 1, nlay_i  
    547          WRITE(zchar1,'(I2.2)') jk 
    548          znam = 'e_i'//'_l'//zchar1 
    549          CALL iom_set_rstw_var_active(drst_wfields, znam ) 
    550       END DO 
     532      CALL iom_set_rstw_var_active(drst_wfields, 'kt_ice'     ) 
     533      CALL iom_set_rstw_var_active(drst_wfields, 'v_i'        ) 
     534      CALL iom_set_rstw_var_active(drst_wfields, 'v_s'        ) 
     535      CALL iom_set_rstw_var_active(drst_wfields, 'sv_i'       ) 
     536      CALL iom_set_rstw_var_active(drst_wfields, 'a_i'        ) 
     537      CALL iom_set_rstw_var_active(drst_wfields, 't_su'       ) 
     538      CALL iom_set_rstw_var_active(drst_wfields, 'u_ice'      ) 
     539      CALL iom_set_rstw_var_active(drst_wfields, 'v_ice'      ) 
     540      CALL iom_set_rstw_var_active(drst_wfields, 'oa_i'       ) 
     541      CALL iom_set_rstw_var_active(drst_wfields, 'a_ip'       ) 
     542      CALL iom_set_rstw_var_active(drst_wfields, 'v_ip'       ) 
     543      CALL iom_set_rstw_var_active(drst_wfields, 'e_s'        ) 
     544      CALL iom_set_rstw_var_active(drst_wfields, 'e_i'        ) 
     545#endif 
    551546   ENDIF 
    552547#else 
     
    707702        i = iom_add(i); fields(i)%vname="syyage";         fields(i)%grid="grid_Ni_3D" 
    708703        i = iom_add(i); fields(i)%vname="sxyage";         fields(i)%grid="grid_Ni_3D" 
    709 !this part is in addition to 4D grids, to handle old format of SI3 resart 
     704!this part is in addition to 4D grids, to handle old format for SI3 resart 
    710705!NEMO format restart 
    711706        DO jk = 1, nlay_s 
     
    727722        i = iom_add(i); fields(i)%vname="sxxc0";          fields(i)%grid="grid_Ns_4D" 
    728723        i = iom_add(i); fields(i)%vname="syyc0";          fields(i)%grid="grid_Ns_4D" 
    729         i = iom_add(i); fields(i)%vname="sxxc0";          fields(i)%grid="grid_Ns_4D" 
     724        i = iom_add(i); fields(i)%vname="sxyc0";          fields(i)%grid="grid_Ns_4D" 
    730725        ! 
    731726!NEMO format restart 
     
    839834                CALL xios_add_child(file_hdl, field_hdl, TRIM(drst_wfields(i)%vname)//"_"//TRIM(ADJUSTL(snr))) 
    840835                SELECT CASE (TRIM(drst_wfields(i)%grid)) 
     836#if defined key_si3 
     837                 CASE ("grid_Ni_4D") 
     838                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
     839                         grid_ref="grid_Ni_4D", prec = 8, operation = "instant") 
     840                 CASE ("grid_Ns_4D") 
     841                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
     842                         grid_ref="grid_Ns_4D", prec = 8, operation = "instant") 
    841843                 CASE ("grid_Ni_3D") 
    842844                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    843                         domain_ref="grid_N", axis_ref="numcat", prec = 8, operation = "once",            & 
    844                         freq_offset=(kdstep -1) * xios_timestep) 
     845                         domain_ref="grid_N", axis_ref="numcat", prec = 8, operation = "instant") 
     846#endif 
    845847                 CASE ("grid_N_3D") 
    846848                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    847                         domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "once",           & 
    848                         freq_offset=(kdstep -1) * xios_timestep) 
     849                         domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "instant") 
    849850                 CASE ("grid_N") 
    850851                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    851                         domain_ref="grid_N", prec = 8, operation = "once",                               & 
    852                         freq_offset=(kdstep -1) * xios_timestep) 
     852                         domain_ref="grid_N", prec = 8, operation = "instant") 
    853853                 CASE ("grid_vector") 
    854854                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    855                          axis_ref="nav_lev", prec = 8, operation = "once",                               & 
    856                         freq_offset=(kdstep -1) * xios_timestep) 
     855                         axis_ref="nav_lev", prec = 8, operation = "instant") 
    857856                 CASE ("grid_scalar") 
    858857                    CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 
    859                         scalar_ref = "grid_scalar", prec = 8, operation = "once",                        & 
    860                         freq_offset=(kdstep -1) * xios_timestep) 
     858                         scalar_ref = "grid_scalar", prec = 8, operation = "instant") 
    861859                END SELECT 
    862860         ENDIF 
     
    19531951   END SUBROUTINE iom_rp3d 
    19541952 
    1955  
    1956   SUBROUTINE iom_delay_rst( cdaction, cdcpnt, kncid ) 
     1953   SUBROUTINE iom_rp4d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 
     1954      INTEGER         , INTENT(in)                         ::   kt       ! ocean time-step 
     1955      INTEGER         , INTENT(in)                         ::   kwrite   ! writing time-step 
     1956      INTEGER         , INTENT(in)                         ::   kiomid   ! Identifier of the file  
     1957      CHARACTER(len=*), INTENT(in)                         ::   cdvar    ! time axis name 
     1958      REAL(wp)        , INTENT(in),     DIMENSION(:,:,:,:) ::   pvar     ! written field 
     1959      INTEGER         , INTENT(in), OPTIONAL               ::   ktype    ! variable external type 
     1960      LOGICAL, OPTIONAL :: ldxios   ! xios write flag 
     1961      LOGICAL :: llx                 ! local xios write flag 
     1962      INTEGER :: ivid   ! variable id 
     1963 
     1964      llx = .FALSE. 
     1965      IF(PRESENT(ldxios)) llx = ldxios 
     1966      IF( llx ) THEN 
     1967#ifdef key_iomput 
     1968      IF( kt == kwrite ) THEN 
     1969         IF(lwp) write(numout,*) 'RESTART: write (XIOS 4D) ',trim(cdvar) 
     1970         write(snr, *) nitrst 
     1971         CALL xios_send_field(trim(cdvar)//"_"//TRIM(ADJUSTL(snr)), pvar) 
     1972      ENDIF 
     1973#endif 
     1974      ELSE 
     1975        CALL ctl_stop('Error in the name  iom_rp4d for variable '//TRIM(cdvar),   & 
     1976           & 'Restart with iom_nf90_rstput can not handle 4D cases' ) 
     1977      ENDIF 
     1978   END SUBROUTINE iom_rp4d 
     1979 
     1980   SUBROUTINE iom_delay_rst( cdaction, cdcpnt, kncid ) 
    19571981      !!--------------------------------------------------------------------- 
    19581982      !!   Routine iom_delay_rst: used read/write restart related to mpp_delay 
     
    19701994      ! 
    19711995      !return for now. When XIOS is used to write restart it also should be used to write this attribute 
    1972       IF(lwxios) return 
     1996      IF(lwxios) THEN 
     1997         CALL ctl_warn( 'From iom_delay_rst: ', 'Can not '//cdaction//' mpp_delay information with XIOS') 
     1998         RETURN 
     1999      ENDIF 
     2000 
    19732001      !                                      =================================== 
    19742002      IF( TRIM(cdaction) == 'READ' ) THEN   ! read restart related to mpp_delay ! 
     
    27402768   IF( iom_add > max_rst_fields) THEN 
    27412769     WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 
    2742      CALL ctl_stop( 'iom_add:', ctmp1 ) 
     2770     CALL ctl_stop( 'iom_add:', ctmp1, 'Increase parameter max_rst_fields') 
    27432771   ENDIF 
    27442772 
Note: See TracChangeset for help on using the changeset viewer.