From 11bcd200a6faf27ad97c7f34b943da6da247443a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 17 Jun 2021 08:03:38 -0600 Subject: [PATCH 1/2] esmf aware threading now works with esmf 8.2.0b10 or newer --- cime_config/buildexe | 15 +++++++++++++++ drivers/cime/esm.F90 | 8 -------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cime_config/buildexe b/cime_config/buildexe index 476bee765..06e9e077f 100755 --- a/cime_config/buildexe +++ b/cime_config/buildexe @@ -76,6 +76,21 @@ def _main_func(): gmake_args += " MED_PRESENT=FALSE" if esmf_aware_threading: gmake_args += " USER_CPPDEFS=-DESMF_AWARE_THREADING" + esmfmkfile = os.getenv("ESMFMKFILE") + expect(esmfmkfile and os.path.isfile(esmfmkfile),"ESMFMKFILE not found {}".format(esmfmkfile)) + with open(esmfmkfile, 'r') as f: + major = None + minor = None + for line in f.readlines(): + if 'ESMF_VERSION' in line: + major = line[-2] if 'MAJOR' in line else major + minor = line[-2] if 'MINOR' in line else minor + logger.debug("ESMF version major {} minor {}".format(major,minor)) + expect(int(major) >=8,"ESMF version should be 8.1 or newer") + if esmf_aware_threading: + expect(int(minor) >= 2, "ESMF version should be 8.2.0 or newer when using ESMF_AWARE_THREADING") + else: + expect(int(minor) >= 1, "ESMF version should be 8.1.0 or newer") gmake_args += " IAC_PRESENT=FALSE" expect((num_esp is None) or (int(num_esp) == 1), "ESP component restricted to one instance") diff --git a/drivers/cime/esm.F90 b/drivers/cime/esm.F90 index ecf6d931d..e1a18f135 100644 --- a/drivers/cime/esm.F90 +++ b/drivers/cime/esm.F90 @@ -981,14 +981,6 @@ subroutine esm_init_pelayout(driver, maxthreads, rc) call ESMF_InfoSet(info, key="/NUOPC/Hint/PePerPet/MaxCount", value=nthrds, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return -! call ESMF_InfoSet(info, key="/NUOPC/Hint/PePerPet/MinStackSize", value='40MiB', rc=rc) -! if (chkerr(rc,__LINE__,u_FILE_u)) return - - if (nthrds == 1) then - call ESMF_InfoSet(info, key="/NUOPC/Hint/PePerPet/OpenMpHandling", value='none', rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - endif - call NUOPC_CompAttributeGet(driver, name=trim(namestr)//'_rootpe', value=cvalue, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return read(cvalue,*) rootpe From bce1ecdc83713e7fe1814299ddbea9c5ba5db01c Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 17 Jun 2021 09:30:01 -0600 Subject: [PATCH 2/2] move the version check to buildnml for faster feedback to user --- cime_config/buildexe | 15 --------------- cime_config/buildnml | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/cime_config/buildexe b/cime_config/buildexe index 06e9e077f..476bee765 100755 --- a/cime_config/buildexe +++ b/cime_config/buildexe @@ -76,21 +76,6 @@ def _main_func(): gmake_args += " MED_PRESENT=FALSE" if esmf_aware_threading: gmake_args += " USER_CPPDEFS=-DESMF_AWARE_THREADING" - esmfmkfile = os.getenv("ESMFMKFILE") - expect(esmfmkfile and os.path.isfile(esmfmkfile),"ESMFMKFILE not found {}".format(esmfmkfile)) - with open(esmfmkfile, 'r') as f: - major = None - minor = None - for line in f.readlines(): - if 'ESMF_VERSION' in line: - major = line[-2] if 'MAJOR' in line else major - minor = line[-2] if 'MINOR' in line else minor - logger.debug("ESMF version major {} minor {}".format(major,minor)) - expect(int(major) >=8,"ESMF version should be 8.1 or newer") - if esmf_aware_threading: - expect(int(minor) >= 2, "ESMF version should be 8.2.0 or newer when using ESMF_AWARE_THREADING") - else: - expect(int(minor) >= 1, "ESMF version should be 8.1.0 or newer") gmake_args += " IAC_PRESENT=FALSE" expect((num_esp is None) or (int(num_esp) == 1), "ESP component restricted to one instance") diff --git a/cime_config/buildnml b/cime_config/buildnml index af6ba9011..00b3dad35 100755 --- a/cime_config/buildnml +++ b/cime_config/buildnml @@ -516,6 +516,24 @@ def buildnml(case, caseroot, component): if component != "drv": raise AttributeError +# Do a check here of ESMF VERSION, requires 8.1.0 or newer (8.2.0 or newer for esmf_aware_threading) + esmf_aware_threading = case.get_value("ESMF_AWARE_THREADING") + esmfmkfile = os.getenv("ESMFMKFILE") + expect(esmfmkfile and os.path.isfile(esmfmkfile),"ESMFMKFILE not found {}".format(esmfmkfile)) + with open(esmfmkfile, 'r') as f: + major = None + minor = None + for line in f.readlines(): + if 'ESMF_VERSION' in line: + major = line[-2] if 'MAJOR' in line else major + minor = line[-2] if 'MINOR' in line else minor + logger.debug("ESMF version major {} minor {}".format(major,minor)) + expect(int(major) >=8,"ESMF version should be 8.1 or newer") + if esmf_aware_threading: + expect(int(minor) >= 2, "ESMF version should be 8.2.0 or newer when using ESMF_AWARE_THREADING") + else: + expect(int(minor) >= 1, "ESMF version should be 8.1.0 or newer") + confdir = os.path.join(case.get_value("CASEBUILD"), "cplconf") if not os.path.isdir(confdir): os.makedirs(confdir)