Skip to content

Commit

Permalink
Merge pull request #1289 from gold2718/esmfLog
Browse files Browse the repository at this point in the history
Added log kind flag to ESMF_Initialize call to allow control over ESMF PET log files when the ESMF library is used. The flag determines what ESMF log files (if any) are generated when USE_ESMF_LIB is TRUE.

ESMF_LOGKIND_SINGLE: Use a single log file, combining messages from all of the PETs. Not supported on some platforms.
ESMF_LOGKIND_MULTI: Use multiple log files -- one per PET.
ESMF_LOGKIND_NONE: Do not issue messages to a log file.
By default, no ESMF log files are generated.
Test suite: ./scripts_regression_test.py + hand testing:

./create_newcase --case /glade/scratch/goldy/esmfTest --compset A --res ne16_ne16 --run-unsupported
./xmlchange USE_ESMF_LIB=TRUE,DOUT_S=FALSE,STOP_OPTION=nsteps,STOP_N=3
Run test with each ESMF log kind option
Test baseline: NA
Test namelist changes: New driver namelist variable: esmf_logging
Test status: bit for bit

Fixes #1245

User interface changes?: New run time XML variable: ESMF_LOGFILE_KIND

Code review:
  • Loading branch information
mvertens authored Mar 31, 2017
2 parents 8890873 + a1d1309 commit 0d320ec
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 18 deletions.
17 changes: 17 additions & 0 deletions src/drivers/mct/cime_config/config_component.xml
Original file line number Diff line number Diff line change
Expand Up @@ -935,6 +935,23 @@
this to work.</desc>
</entry>

<entry id="ESMF_LOGFILE_KIND">
<type>char</type>
<valid_values>ESMF_LOGKIND_SINGLE,ESMF_LOGKIND_MULTI,ESMF_LOGKIND_NONE</valid_values>
<default_value>ESMF_LOGKIND_NONE</default_value>
<group>run_cesm</group>
<file>env_run.xml</file>
<desc>
Determines what ESMF log files (if any) are generated when
USE_ESMF_LIB is TRUE.
ESMF_LOGKIND_SINGLE: Use a single log file, combining messages from
all of the PETs. Not supported on some platforms.
ESMF_LOGKIND_MULTI: Use multiple log files -- one per PET.
ESMF_LOGKIND_NONE: Do not issue messages to a log file.
By default, no ESMF log files are generated.
</desc>
</entry>

<entry id="COMP_RUN_BARRIERS">
<type>logical</type>
<valid_values>TRUE,FALSE</valid_values>
Expand Down
18 changes: 18 additions & 0 deletions src/drivers/mct/cime_config/namelist_definition_drv.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2602,6 +2602,24 @@
</values>
</entry>

<entry id="esmf_logging" modify_via_xml="ESMF_LOGFILE_KIND">
<type>char</type>
<category>ccsm_pes</category>
<group>ccsm_pes</group>
<desc>
Determines what ESMF log files (if any) are generated when
USE_ESMF_LIB is TRUE.
ESMF_LOGKIND_SINGLE: Use a single log file, combining messages from
all of the PETs. Not supported on some platforms.
ESMF_LOGKIND_MULTI: Use multiple log files — one per PET.
ESMF_LOGKIND_NONE: Do not issue messages to a log file.
By default, no ESMF log files are generated.
</desc>
<values>
<value>$ESMF_LOGFILE_KIND</value>
</values>
</entry>

<!-- =========================== -->
<!-- group prof_inparm -->
<!-- in perf_mod.F90 -->
Expand Down
7 changes: 4 additions & 3 deletions src/drivers/mct/main/cesm_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ program cesm_driver
!----------------------------------------------------------------------------
! share code & libs
!----------------------------------------------------------------------------
use perf_mod
use ESMF
use perf_mod, only : t_startf, t_adj_detailf, t_stopf
use ESMF, only : ESMF_Initialize, ESMF_Finalize
use seq_comm_mct, only : esmf_logfile_kind
use cesm_comp_mod, only : cesm_pre_init1
use cesm_comp_mod, only : cesm_pre_init2
use cesm_comp_mod, only : cesm_init
Expand All @@ -40,7 +41,7 @@ program cesm_driver
! because it is needed for the time manager, even if the ESMF_INTERFACE
! is not used.
!--------------------------------------------------------------------------
call ESMF_Initialize()
call ESMF_Initialize(logkindflag=esmf_logfile_kind)

!--------------------------------------------------------------------------
! Read in the configuration information and initialize the time manager.
Expand Down
35 changes: 34 additions & 1 deletion src/drivers/mct/shr/seq_comm_mct.F90
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ module seq_comm_mct
use shr_sys_mod , only : shr_sys_abort, shr_sys_flush
use shr_mpi_mod , only : shr_mpi_chkerr, shr_mpi_bcast, shr_mpi_max
use shr_file_mod, only : shr_file_getUnit, shr_file_freeUnit
use esmf , only : ESMF_LogKind_Flag, ESMF_LOGKIND_NONE
use esmf , only : ESMF_LOGKIND_SINGLE, ESMF_LOGKIND_MULTI

implicit none

Expand Down Expand Up @@ -145,7 +147,10 @@ module seq_comm_mct
integer, public :: CPLWAVID(num_inst_wav)
integer, public :: CPLESPID(num_inst_esp)

type(ESMF_LogKind_Flag), public :: esmf_logfile_kind

integer, parameter, public :: seq_comm_namelen=16

type seq_comm_type
character(len=seq_comm_namelen) :: name ! my name
character(len=seq_comm_namelen) :: suffix ! recommended suffix
Expand Down Expand Up @@ -236,6 +241,8 @@ subroutine seq_comm_init(Comm_in, nmlfile)
ocn_ntasks, ocn_rootpe, ocn_pestride, ocn_nthreads, &
esp_ntasks, esp_rootpe, esp_pestride, esp_nthreads, &
cpl_ntasks, cpl_rootpe, cpl_pestride, cpl_nthreads
character(len=24) :: esmf_logging

namelist /ccsm_pes/ &
atm_ntasks, atm_rootpe, atm_pestride, atm_nthreads, atm_layout, &
lnd_ntasks, lnd_rootpe, lnd_pestride, lnd_nthreads, lnd_layout, &
Expand All @@ -245,7 +252,7 @@ subroutine seq_comm_init(Comm_in, nmlfile)
rof_ntasks, rof_rootpe, rof_pestride, rof_nthreads, rof_layout, &
ocn_ntasks, ocn_rootpe, ocn_pestride, ocn_nthreads, ocn_layout, &
esp_ntasks, esp_rootpe, esp_pestride, esp_nthreads, esp_layout, &
cpl_ntasks, cpl_rootpe, cpl_pestride, cpl_nthreads
cpl_ntasks, cpl_rootpe, cpl_pestride, cpl_nthreads, esmf_logging
!----------------------------------------------------------

! make sure this is first pass and set comms unset
Expand Down Expand Up @@ -352,6 +359,8 @@ subroutine seq_comm_init(Comm_in, nmlfile)
cpl_pestride = 1
cpl_nthreads = 1

esmf_logging = 'unset'

! Read namelist if it exists

nu = shr_file_getUnit()
Expand Down Expand Up @@ -890,6 +899,30 @@ subroutine seq_comm_init(Comm_in, nmlfile)

deallocate(comps,comms)

! ESMF logging (only has effect if ESMF libraries are used)
if (mype == 0) then
if (esmf_logging == 'unset') then
write(logunit,*) trim(subname),' ERROR: esmf_logging not set'
call shr_sys_abort(trim(subname)//' ERROR: esmf_logging not set')
endif
endif

call mpi_bcast(esmf_logging, len(esmf_logging), MPI_CHARACTER, 0, GLOBAL_COMM, ierr)

select case(esmf_logging)
case ("ESMF_LOGKIND_SINGLE")
esmf_logfile_kind = ESMF_LOGKIND_SINGLE
case ("ESMF_LOGKIND_MULTI")
esmf_logfile_kind = ESMF_LOGKIND_MULTI
case ("ESMF_LOGKIND_NONE")
esmf_logfile_kind = ESMF_LOGKIND_NONE
case default
if (mype == 0) then
write(logunit,*) trim(subname),' ERROR: Invalid value for esmf_logging, ',esmf_logging
endif
call shr_sys_abort(trim(subname)//' ERROR: Invalid value for esmf_logging '//esmf_logging)
end select

call seq_comm_printcomms()

end subroutine seq_comm_init
Expand Down
39 changes: 25 additions & 14 deletions src/share/esmf_wrf_timemgr/ESMF_Stubs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,47 @@ MODULE ESMF_Stubs
! Bogus typedefs
TYPE ESMF_Grid
INTEGER :: dummy
END TYPE
END TYPE ESMF_Grid

TYPE ESMF_GridComp
INTEGER :: dummy
END TYPE
END TYPE ESMF_GridComp

TYPE ESMF_State
INTEGER :: dummy
END TYPE
END TYPE ESMF_State

TYPE ESMF_VM
INTEGER :: dummy
END TYPE
END TYPE ESMF_VM

TYPE ESMF_END_FLAG
INTEGER :: dummy
END TYPE
TYPE(ESMF_END_FLAG), PARAMETER :: &
ESMF_END_ABORT = ESMF_END_FLAG(1), &
ESMF_END_NORMAL = ESMF_END_FLAG(2), &
END TYPE ESMF_END_FLAG
TYPE(ESMF_END_FLAG), PARAMETER :: &
ESMF_END_ABORT = ESMF_END_FLAG(1), &
ESMF_END_NORMAL = ESMF_END_FLAG(2), &
ESMF_END_KEEPMPI = ESMF_END_FLAG(3)

TYPE ESMF_MsgType
INTEGER :: mtype
END TYPE
TYPE(ESMF_MsgType), PARAMETER :: &
ESMF_LOG_INFO = ESMF_MsgType(1), &
ESMF_LOG_WARNING = ESMF_MsgType(2), &
END TYPE ESMF_MsgType
TYPE(ESMF_MsgType), PARAMETER :: &
ESMF_LOG_INFO = ESMF_MsgType(1), &
ESMF_LOG_WARNING = ESMF_MsgType(2), &
ESMF_LOG_ERROR = ESMF_MsgType(3)

TYPE ESMF_LOG
INTEGER :: dummy
END TYPE
END TYPE ESMF_LOG

TYPE ESMF_LogKind_Flag
INTEGER :: dummy
END TYPE ESMF_LogKind_Flag
TYPE(ESMF_LogKind_Flag), PARAMETER :: &
ESMF_LOGKIND_NONE = ESMF_LogKind_Flag(1), &
ESMF_LOGKIND_SINGLE = ESMF_LogKind_Flag(2), &
ESMF_LOGKIND_MULTI = ESMF_LogKind_Flag(3)

LOGICAL, private, save :: initialized = .false.

Expand All @@ -52,17 +60,20 @@ MODULE ESMF_Stubs
PUBLIC ESMF_LogWrite, ESMF_LOG, ESMF_MsgType, ESMF_END_FLAG
PUBLIC ESMF_LOG_INFO, ESMF_LOG_WARNING, ESMF_LOG_ERROR
PUBLIC ESMF_END_ABORT, ESMF_END_NORMAL, ESMF_END_KEEPMPI
PUBLIC ESMF_LogKind_Flag
PUBLIC ESMF_LOGKIND_NONE, ESMF_LOGKIND_SINGLE, ESMF_LOGKIND_MULTI

CONTAINS


! NOOP
SUBROUTINE ESMF_Initialize( vm, defaultCalendar, rc )
SUBROUTINE ESMF_Initialize( vm, defaultCalendar, logkindflag, rc )
USE ESMF_BaseMod
USE ESMF_CalendarMod
! USE ESMF_TimeMod, only: defaultCal
TYPE(ESMF_VM), INTENT(IN ), OPTIONAL :: vm
TYPE(ESMF_CalKind_Flag), INTENT(IN ), OPTIONAL :: defaultCalendar
TYPE(ESMF_LogKind_Flag), INTENT(IN ), OPTIONAL :: logkindflag
INTEGER, INTENT( OUT), OPTIONAL :: rc

TYPE(ESMF_CalKind_Flag) :: defaultCalType
Expand Down

0 comments on commit 0d320ec

Please sign in to comment.