Description |
The ESMF library version 8.0.0 includes new extrapolation methods for unmapped points in the destination field. The routine ESMF_FieldRegridStore includes several new arguments to specify the extrapolation method and associated parameters. The unmapped points can be extrapolated using the nearest source to destination (ESMF_EXTRAPMETHOD_NEAREST_STOD), nearest inverse distance average (ESMF_EXTRAPMETHOD_NEAREST_IDAVG), or creep fill methods (ESMF_EXTRAPMETHOD_NEAREST_CREEP).
- The coupling metadata input file coupling_esmf.dat was modified to include the new extrapolation methods for an exchanged field:
! Cinfo(11) Field regridding method from source to destination:
! 'bilinear' => bilinear interpolation
! 'patch' => high-order patch recovery
! 'conservative1' => first-order conservative
! 'conservative2' => second-order conservative
! 'nearest' => nearest neighbor interpolation
! Cinfo(12) Field extrapolation method for unmapped points:
! 'none' => no extrapolation
! 'nearest' => nearest source to destination
! 'idavg' => nearest inverse distance average
! 'creep' => creep fill at specified level
! '2steps' => Turuncoglu's 2 steps extrapolation
...
'SST'
'sea_surface_temperature' ! standard name
'sea surface temperature'
't(:,:,N,itemp)', 'ROMS' ! source variable, ROMS
'C' ! source units
'Center' ! source grid-cell
'tsea', 'COAMPS' ! destination variable, COAMPS
'K' ! destination units
'Center' ! destination grid-cell
'SST' ! DATA Model file variable
'bilinear' ! regridding method
'nearest' ! unmapped extrapolation method
.TRUE. ! connected to coupler
273.15d0 ! importing add offset
1.0d0 ! importing scale
- Added the generic metadata file for COAMPS (coupling_esmf_coamps.dat) and WRF (coupling_esmf_wrf.dat) that can be used to couple to ROMS and DATA components.
|
Description |
We are getting a weird compiler error with ifort (intel-17.0.4) in a cluster:
stiffness.f90(119): error #6401: The attributes of this name conflict with those made accessible by a USE statement. [OP_HANDLE]
character (len=3), dimension(5) :: op_handle
-----------------------------------------^
compilation aborted for stiffness.f90 (code 1)
make: *** [/home/hga/ocean/repository/Projects/indian/Build_roms/stiffness.o] Error 1
when using mp_reduce from distribute.F module. It is a bug in the ifort compiler because the variable op_handle is a dummy argument to the module interface:
INTERFACE mp_reduce
# ifdef SINGLE_PRECISION
MODULE PROCEDURE mp_reduce_0dp ! double-precision reduction
MODULE PROCEDURE mp_reduce_1dp ! double-precision reduction
# endif
MODULE PROCEDURE mp_reduce_0d
MODULE PROCEDURE mp_reduce_1d
END INTERFACE mp_reduce
An easy solution is to rename the routine argument from op_handle to handle_op in distribute.F. The compiler thinks that the variable is declared in the module part. Anyway, it a simple variable rename that makes the compiling more robust.
|
Description |
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
@
::
|