Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add logging options to ESMF_Initialize #1289

Merged
merged 2 commits into from
Mar 31, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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