﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
832	IMPORTANT: Miscellaneous Update	arango		"It is a miscellaneous update that consolidates the research repositories with code distributed to the community. It is done to smooth the transition to significant updates in the future.

* '''nl_ocean.h''': the logic time-stepping logic in the nonlinear kernel driver was slightly modified for coupling to other models during a '''!RunInterval''':
 {{{
!
!-----------------------------------------------------------------------
!  Time-step nonlinear model over nested grids, if applicable.
#if defined MODEL_COUPLING && !defined MCT_LIB
!  Since the ROMS kernel has a delayed output and line diagnostics by
!  one timestep, subtract an extra value to the report of starting and
!  ending timestep for clarity. Usually, the model coupling interval
!  is of the same size as ROMS timestep.
#endif
!-----------------------------------------------------------------------
!
      MyRunInterval=RunInterval
      IF (Master) WRITE (stdout,'(1x)')
      DO ng=1,Ngrids
#if defined MODEL_COUPLING && !defined MCT_LIB
        NEXTtime=time(ng)+RunInterval
        ENDtime=INItime(ng)+(ntimes(ng)-1)*dt(ng)
        IF ((NEXTtime.eq.ENDtime).and.(ng.eq.1)) THEN
          extra=0                                   ! last time interval
        ELSE
          extra=1
        END IF
        step_counter(ng)=0
        NstrStep=iic(ng)
        NendStep=NstrStep+INT((MyRunInterval)/dt(ng))-extra
        IF (Master) WRITE (stdout,10) 'NL', ng, NstrStep, NendStep
#else
        IF (Master) WRITE (stdout,10) 'NL', ng, ntstart(ng), ntend(ng)
#endif
      END DO
}}}

* '''ntimestep.F''' the above logic about the delayed output need to be accounted when computing the time-stepping parameters:
 {{{
#if defined MODEL_COUPLING && !defined MCT_LIB
!
!  Set extra step parameter needed to finish the simulation due to ROMS
!  delayed output until the next half step. If RunInterval (seconds) is
!  less than full simulation interval because of model coupling, extra=1
!  for last coupling interval and extra=0 otherwise.
!
          NEXTtime=time(ng)+RunInterval
          ENDtime=INItime(ng)+(ntimes(ng)-1)*dt(ng)
          IF (NEXTtime.eq.ENDtime) THEN
            extra=1
          ELSE
            extra=0
          END IF
#else
!
!  Here, extra=1, indicates that the RunInterval is the same as
!  simulation interval.
!
          extra=1
#endif
}}}

* '''inp_decode.F:''' the function '''load_s1d''' has an additional input dummy argument ('''Mgrids''') to specify the number of nested grids instead of being specified internally with ROMS '''Ngrids''' parameter.  It allows this function to be used during coupling when the DATA component is active.
 {{{
      FUNCTION load_s1d (Nval, Fname, Fdim, line, label, igrid,         &
     &                   Mgrids, Nfiles, S)
}}}
 '''Warning:''' changes need to be done in '''read_asspar.F''' and '''read_phypar.F''' when '''load_s1d''' is called to the addional argument.

* All the '''!RunSequence''' ESMF input scripts were modified to account for the next version of the ROMS coupling framework that uses the native nesting capabilities of the NUOPC layer version '''8.0.0''' and higher.   If the '''timeStep''' value (in seconds) coupling interval is a '''wildcard  (*)''' character used for a single outer time loop in the run sequence,  then the associated run clock is identical to the driver clock, which is set up in standard input configuration script '''coupling_esmf.in'''.  For example, we can have a semi-implicit run sequence as follows:
 {{{
runSeq::
  @*                         # timeStep = wildcard (*), single time loop
    DATA -> WRF              # DATA to WRF connector
    DATA
    ROMS -> WRF              # ROMS to WRF connector
    WRF
    WRF -> ROMS              # WRF to ROMS connector
    WRF
  @
::
}}}
 where the '''wildcard''' character is used to specify the coupling interval. New scripts were added for coupling DATA and ROMS. It is more generic that specifying the value:
 {{{
runSeq::
  @300                       # timeStep = 5 min interval, single time loop
    DATA -> WRF              # DATA to WRF connector
    DATA
    ROMS -> WRF              # ROMS to WRF connector
    WRF
    WRF -> ROMS              # WRF to ROMS connector
    ROMS
  @
::
}}}
"	upgrade	closed	major	Release ROMS/TOMS 3.8	Nonlinear	3.8	Done		
