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 13914 for NEMO – NEMO

Changeset 13914 for NEMO


Ignore:
Timestamp:
2020-11-30T11:55:56+01:00 (3 years ago)
Author:
techene
Message:

#2574 l_1st_euler management in the restart case at a single location : dom_nam

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src/OCE/DOM/domain.F90

    r13895 r13914  
    125125         WRITE(numout,*)     '         cn_cfg = ', TRIM( cn_cfg ), '   nn_cfg = ', nn_cfg 
    126126      ENDIF 
    127       lwxios = .FALSE. 
    128       ln_xios_read = .FALSE. 
     127       
    129128      ! 
    130129      !           !==  Reference coordinate system  ==! 
    131130      ! 
    132131      CALL dom_glo                     ! global domain versus local domain 
    133       CALL dom_nam                     ! read namelist ( namrun, namdom ) 
    134       ! 
    135       IF( lwxios ) THEN 
    136 !define names for restart write and set core output (restart.F90) 
    137          CALL iom_set_rst_vars(rst_wfields) 
    138          CALL iom_set_rstw_core(cdstr) 
    139       ENDIF 
    140 !reset namelist for SAS 
    141       IF(cdstr == 'SAS') THEN 
    142          IF(lrxios) THEN 
    143                IF(lwp) write(numout,*) 'Disable reading restart file using XIOS for SAS' 
    144                lrxios = .FALSE. 
    145          ENDIF 
    146       ENDIF 
    147       ! 
    148       ! 
    149       IF( ln_rstart ) THEN             ! check consistency between ln_rstart and ln_1st_euler 
    150          ! 
    151          IF(lwp) WRITE(numout,*) 'dom_nam : open the restart file' 
    152          CALL rst_read_open                                                !- open the restart file 
    153          ! 
    154          IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 )   THEN     !- check time-step consistency and force Euler restart if changed 
    155             CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
    156             IF( zrdt /= rn_Dt ) THEN 
    157                IF(lwp) WRITE( numout,*) 
    158                IF(lwp) WRITE( numout,*) 'ssh_init_rst:  rdt not equal to the read one' 
    159                IF(lwp) WRITE( numout,*) 
    160                IF(lwp) WRITE( numout,*) '      ==>>>   forced euler first time-step' 
    161                l_1st_euler =  .TRUE. 
    162             ENDIF 
    163          ENDIF 
    164          ! 
    165          IF( iom_varid( numror, 'sshb', ldstop = .FALSE. ) <= 0 ) THEN   !- check absence of one of the Kbb field (here sshb) 
    166             !                                                            !  (any Kbb field is missing ==> all Kbb fields are missing) 
    167             IF( .NOT.l_1st_euler ) THEN 
    168                CALL ctl_warn ('ssh_init_rst: ssh at Kbb not found in restart files ',   & 
    169                   &                         'l_1st_euler forced to .true. and ',        & 
    170                   &                         'ssh(Kbb) = ssh(Kmm) '                    ) 
    171                l_1st_euler = .TRUE. 
    172             ENDIF 
    173          ENDIF 
    174       ENDIF 
     132      CALL dom_nam( cdstr )                     ! read namelist ( namrun, namdom ) 
    175133      ! 
    176134      CALL dom_hgr                      ! Horizontal mesh 
     
    338296 
    339297 
    340    SUBROUTINE dom_nam 
     298   SUBROUTINE dom_nam( cdstr ) 
    341299      !!---------------------------------------------------------------------- 
    342300      !!                     ***  ROUTINE dom_nam  *** 
     
    350308      USE ioipsl 
    351309      !! 
    352       INTEGER  ::   ios   ! Local integer 
     310      CHARACTER (len=*), INTENT(in) ::   cdstr   ! model: NEMO or SAS. Determines core restart variables 
     311      ! 
     312      INTEGER ::   ios   ! Local integer 
     313      REAL(wp)::   zrdt 
     314      !!---------------------------------------------------------------------- 
    353315      ! 
    354316      NAMELIST/namrun/ cn_ocerst_indir, cn_ocerst_outdir, nn_stocklist, ln_rst_list,                 & 
     
    368330         WRITE(numout,*) '~~~~~~~ ' 
    369331      ENDIF 
     332      ! 
     333      !                       !=======================! 
     334      !                       !==  namelist namdom  ==! 
     335      !                       !=======================! 
     336      ! 
     337      READ  ( numnam_ref, namdom, IOSTAT = ios, ERR = 903) 
     338903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namdom in reference namelist' ) 
     339      READ  ( numnam_cfg, namdom, IOSTAT = ios, ERR = 904 ) 
     340904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namdom in configuration namelist' ) 
     341      IF(lwm) WRITE( numond, namdom ) 
     342      ! 
     343#if defined key_agrif 
     344      IF( .NOT. Agrif_Root() ) THEN    ! AGRIF child, subdivide the Parent timestep 
     345         rn_Dt = Agrif_Parent (rn_Dt ) / Agrif_Rhot() 
     346      ENDIF 
     347#endif 
     348      ! 
     349      IF(lwp) THEN 
     350         WRITE(numout,*) 
     351         WRITE(numout,*) '   Namelist : namdom   ---   space & time domain' 
     352         WRITE(numout,*) '      linear free surface (=T)                ln_linssh   = ', ln_linssh 
     353         WRITE(numout,*) '      create mesh/mask file                   ln_meshmask = ', ln_meshmask 
     354         WRITE(numout,*) '      ocean time step                         rn_Dt       = ', rn_Dt 
     355         WRITE(numout,*) '      asselin time filter parameter           rn_atfp     = ', rn_atfp 
     356         WRITE(numout,*) '      online coarsening of dynamical fields   ln_crs      = ', ln_crs 
     357      ENDIF 
     358      ! 
     359      ! set current model timestep rDt = 2*rn_Dt if MLF or rDt = rn_Dt if RK3 
     360      rDt   = 2._wp * rn_Dt 
     361      r1_Dt = 1._wp / rDt 
     362      ! 
     363#if defined key_qco 
     364      IF( ln_linssh )   CALL ctl_stop( 'STOP','domain: key_qco and ln_linssh = T are incompatible' ) 
     365#endif 
    370366      ! 
    371367      !                       !=======================! 
     
    431427      nleapy = nn_leapy 
    432428      ninist = nn_istate 
     429      ! 
     430      !                                        !==  Set parameters for restart reading using xIOS  ==! 
     431      lwxios = .FALSE. 
     432      ! 
     433      IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
     434         lrxios = ln_xios_read .AND. ln_rstart 
     435         IF( nn_wxios > 0 )   lwxios = .TRUE.           !* set output file type for XIOS based on NEMO namelist 
     436         nxioso = nn_wxios 
     437      ENDIF 
     438      ! 
     439      IF( lwxios ) THEN                                 !*  define names for restart write and set core output (restart.F90) 
     440         CALL iom_set_rst_vars ( rst_wfields ) 
     441         CALL iom_set_rstw_core( cdstr ) 
     442      ENDIF 
     443      ! 
     444      IF( cdstr == 'SAS' ) THEN                         !*  reset namelist for SAS 
     445         IF( lrxios ) THEN 
     446            IF(lwp) WRITE(numout,*) 'Disable reading restart file using XIOS for SAS' 
     447            lrxios = .FALSE. 
     448         ENDIF 
     449      ENDIF 
     450      ! 
     451      !                                        !==  Check consistency between ln_rstart and ln_1st_euler  ==!   (i.e. set l_1st_euler) 
    433452      l_1st_euler = ln_1st_euler 
    434       IF( .NOT. l_1st_euler .AND. .NOT. ln_rstart ) THEN 
     453      ! 
     454      IF( ln_rstart ) THEN                              !*  Restart case 
     455         ! 
     456         IF(lwp) WRITE(numout,*) 
     457         IF(lwp) WRITE(numout,*) '   open the restart file' 
     458         CALL rst_read_open                                              !- Open the restart file 
     459         ! 
     460         IF( iom_varid( numror, 'rdt', ldstop = .FALSE. ) > 0 ) THEN     !- Check time-step consistency and force Euler restart if changed 
     461            CALL iom_get( numror, 'rdt', zrdt, ldxios = lrxios ) 
     462            IF( zrdt /= rn_Dt ) THEN 
     463               IF(lwp) WRITE( numout,*) 
     464               IF(lwp) WRITE( numout,*) '   rn_Dt = ', rn_Dt,' not equal to the READ one rdt = ', zrdt 
     465               IF(lwp) WRITE( numout,*) 
     466               IF(lwp) WRITE( numout,*) '      ==>>>   forced euler first time-step' 
     467               l_1st_euler =  .TRUE. 
     468            ENDIF 
     469         ENDIF 
     470         ! 
     471         IF( iom_varid( numror, 'sshb', ldstop = .FALSE. ) <= 0 ) THEN   !- Check absence of one of the Kbb field (here sshb) 
     472            !                                                            !  (any Kbb field is missing ==> all Kbb fields are missing)  
     473            IF( .NOT.l_1st_euler ) THEN 
     474               CALL ctl_warn('dom_nam : ssh at Kbb not found in restart files ',   & 
     475                  &                        'l_1st_euler forced to .true. and ' ,   & 
     476                  &                        'ssh(Kbb) = ssh(Kmm) '                  ) 
     477               l_1st_euler = .TRUE. 
     478            ENDIF 
     479         ENDIF 
     480      ELSEIF( .NOT.l_1st_euler ) THEN                   !*  Initialization case 
    435481         IF(lwp) WRITE(numout,*)   
    436482         IF(lwp) WRITE(numout,*)'   ==>>>   Start from rest (ln_rstart=F)' 
    437483         IF(lwp) WRITE(numout,*)'           an Euler initial time step is used : l_1st_euler is forced to .true. '    
    438          l_1st_euler = .true. 
    439       ENDIF 
    440       !                             ! control of output frequency 
    441       IF( .NOT. ln_rst_list ) THEN     ! we use nn_stock 
     484         l_1st_euler = .TRUE. 
     485      ENDIF 
     486       
     487      ! 
     488      !                                        !==  control of output frequency  ==! 
     489      ! 
     490      IF( .NOT. ln_rst_list ) THEN   ! we use nn_stock 
    442491         IF( nn_stock == -1 )   CALL ctl_warn( 'nn_stock = -1 --> no restart will be done' ) 
    443492         IF( nn_stock == 0 .OR. nn_stock > nitend ) THEN 
     
    458507      IF( Agrif_Root() ) THEN 
    459508         IF(lwp) WRITE(numout,*) 
    460          SELECT CASE ( nleapy )        ! Choose calendar for IOIPSL 
     509         SELECT CASE ( nleapy )                !==  Choose calendar for IOIPSL  ==! 
    461510         CASE (  1 )  
    462511            CALL ioconf_calendar('gregorian') 
     
    470519         END SELECT 
    471520      ENDIF 
    472       ! 
    473       !                       !=======================! 
    474       !                       !==  namelist namdom  ==! 
    475       !                       !=======================! 
    476       ! 
    477       READ  ( numnam_ref, namdom, IOSTAT = ios, ERR = 903) 
    478 903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namdom in reference namelist' ) 
    479       READ  ( numnam_cfg, namdom, IOSTAT = ios, ERR = 904 ) 
    480 904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namdom in configuration namelist' ) 
    481       IF(lwm) WRITE( numond, namdom ) 
    482       ! 
    483 #if defined key_agrif 
    484       IF( .NOT. Agrif_Root() ) THEN    ! AGRIF child, subdivide the Parent timestep 
    485          rn_Dt = Agrif_Parent (rn_Dt ) / Agrif_Rhot() 
    486       ENDIF 
    487 #endif 
    488       ! 
    489       IF(lwp) THEN 
    490          WRITE(numout,*) 
    491          WRITE(numout,*) '   Namelist : namdom   ---   space & time domain' 
    492          WRITE(numout,*) '      linear free surface (=T)                ln_linssh   = ', ln_linssh 
    493          WRITE(numout,*) '      create mesh/mask file                   ln_meshmask = ', ln_meshmask 
    494          WRITE(numout,*) '      ocean time step                         rn_Dt       = ', rn_Dt 
    495          WRITE(numout,*) '      asselin time filter parameter           rn_atfp     = ', rn_atfp 
    496          WRITE(numout,*) '      online coarsening of dynamical fields   ln_crs      = ', ln_crs 
    497       ENDIF 
    498       ! 
    499       ! set current model timestep rDt = 2*rn_Dt if MLF or rDt = rn_Dt if RK3 
    500       rDt   = 2._wp * rn_Dt 
    501       r1_Dt = 1._wp / rDt 
    502       ! 
    503 #if defined key_qco 
    504       IF( ln_linssh )   CALL ctl_stop( 'STOP','domain: key_qco and ln_linssh = T are incompatible' ) 
    505 #endif 
    506  
    507       IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    508          lrxios = ln_xios_read .AND. ln_rstart 
    509          IF (nn_wxios > 0)   lwxios = .TRUE.    ! set output file type for XIOS based on NEMO namelist 
    510          nxioso = nn_wxios 
    511       ENDIF 
    512  
     521       
     522       
    513523#if defined key_netcdf4 
    514524      ! 
Note: See TracChangeset for help on using the changeset viewer.