Opened 6 years ago

Closed 6 years ago

#766 closed upgrade (Done)

Minor update to facilitate multi-model coupling

Reported by: arango Owned by:
Priority: major Milestone: Release ROMS/TOMS 3.7
Component: Nonlinear Version: 3.7
Keywords: Cc:

Description

  • The internal CPP option ATM_COUPLING is renamed to FRC_COUPLING since it is possible to couple to an atmospheric model or a data model (DATA_COUPLING) for the same forcing fields. It is done to consolidate with the coupling research branch that uses the ESMF/NUOPC library.
  • Introduced CPP option ROMS_STDOUT to redirect ROMS standard output information to file log.roms. It coupling is advantageous to separate the standard output information of all the coupled Earth System Model (ESM) components to different log files. It is easier to track the solution of each ESM component when they are separated. In inp_par.F, we now have:
    #ifdef ROMS_STDOUT
    !
    !  Change default Fortran standard out unit, so ROMS run information is
    !  directed to a file. This is advantageous in coupling applications to
    !  ROMS information separated from other models.
    !
           stdout=20                      ! overwite Fortran default unit 6
    !
           OPEN (stdout, FILE='log.roms', FORM='formatted',                 &
         &       STATUS='replace')
    #endif
    
    Changed several routines to replace PRINT statements with WRITE (stdout,*).
  • Update ROMS Nonlinear model driver nl_ocean.h to provide the correct information to time stepping kernel during model coupling:
    !
    !  Local variable declarations.
    !
    #if defined MODEL_COUPLING && !defined MCT_LIB
          logical, save :: FirstPass = .TRUE.
    #endif
          integer :: ng
    #if defined MODEL_COUPLING && !defined MCT_LIB
          integer :: NstrStep, NendStep
    #endif
          real (r8) :: MyRunInterval
    !
    !-----------------------------------------------------------------------
    !  Time-step nonlinear model over all nested grids, if applicable.
    #if defined MODEL_COUPLING && !defined MCT_LIB
    !  On first pass, add a timestep to the coupling interval to account
    !  for ROMS kernel delayed delayed output until next timestep.
    #endif
    !-----------------------------------------------------------------------
    !
          MyRunInterval=RunInterval
          IF (Master) WRITE (stdout,'(1x)')
          DO ng=1,Ngrids
    #if defined MODEL_COUPLING && !defined MCT_LIB
            step_counter(ng)=0
            NstrStep=iic(ng)
            IF (FirstPass) THEN
              NendStep=NstrStep+INT((RunInterval+dt(ng))/dt(ng))
              IF (ng.eq.1) MyRunInterval=MyRunInterval+dt(ng) 
              FirstPass=.FALSE.
            ELSE
              NendStep=NstrStep+INT(MyRunInterval/dt(ng))
            END IF
            IF (Master) WRITE (stdout,10) 'NL', ng, NstrStep, NendStep
    #else
            IF (Master) WRITE (stdout,10) 'NL', ng, ntstart(ng), ntend(ng)
    #endif
          END DO
          IF (Master) WRITE (stdout,'(1x)')
    !
    !$OMP PARALLEL
    #ifdef SOLVE3D
          CALL main3d (MyRunInterval)
    #else
          CALL main2d (MyRunInterval)
    #endif
    !$OMP END PARALLEL
    
    Recall that MyRunInterval may span the full period of the simulation, a multi-model coupling interval (RunInterval > ifac*dt), or just a single step (RunInterval=0). The zero value here is valid and can be explained by ROMS design of delayed output.

Change History (1)

comment:1 by arango, 6 years ago

Resolution: Done
Status: newclosed
Note: See TracTickets for help on using tickets.