From 4f4c0bbe4ea1c4dc0f3efc4ff112339842a89aa8 Mon Sep 17 00:00:00 2001 From: michalakes Date: Tue, 28 Feb 2023 14:41:13 -0800 Subject: [PATCH 1/3] On branch jm-pr-multiple-instances-of-ccpp-physics Changes to add an instance index for CCPP physics Changes to be committed: modified: scripts/mkstatic.py modified: src/ccpp_types.F90 modified: src/ccpp_types.meta --- scripts/mkstatic.py | 14 +++++++------- src/ccpp_types.F90 | 1 + src/ccpp_types.meta | 6 ++++++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/scripts/mkstatic.py b/scripts/mkstatic.py index 51202c41..afb94b79 100755 --- a/scripts/mkstatic.py +++ b/scripts/mkstatic.py @@ -896,7 +896,7 @@ class Group(object): private public :: {subroutines} - logical, save :: initialized = .false. + logical, dimension(200), save :: initialized = .false. contains ''' @@ -930,37 +930,37 @@ class Group(object): initialized_test_blocks = { 'init' : ''' - if (initialized) return + if (initialized(cdata%ccpp_instance)) return ''', 'timestep_init' : ''' - if (.not.initialized) then + if (.not.initialized(cdata%ccpp_instance)) then write({target_name_msg},'(*(a))') '{name}_timestep_init called before {name}_init' {target_name_flag} = 1 return end if ''', 'run' : ''' - if (.not.initialized) then + if (.not.initialized(cdata%ccpp_instance)) then write({target_name_msg},'(*(a))') '{name}_run called before {name}_init' {target_name_flag} = 1 return end if ''', 'timestep_finalize' : ''' - if (.not.initialized) then + if (.not.initialized(cdata%ccpp_instance)) then write({target_name_msg},'(*(a))') '{name}_timestep_finalize called before {name}_init' {target_name_flag} = 1 return end if ''', 'finalize' : ''' - if (.not.initialized) return + if (.not.initialized(cdata%ccpp_instance)) return ''', } initialized_set_blocks = { 'init' : ''' - initialized = .true. + initialized(cdata%ccpp_instance) = .true. ''', 'timestep_init' : '', 'run' : '', diff --git a/src/ccpp_types.F90 b/src/ccpp_types.F90 index 992646bd..bebb53cb 100644 --- a/src/ccpp_types.F90 +++ b/src/ccpp_types.F90 @@ -58,6 +58,7 @@ module ccpp_types integer :: loop_max = CCPP_DEFAULT_LOOP_MAX integer :: blk_no = CCPP_DEFAULT_BLOCK_AND_THREAD_NUMBER integer :: thrd_no = CCPP_DEFAULT_BLOCK_AND_THREAD_NUMBER + integer :: ccpp_instance = 1 contains diff --git a/src/ccpp_types.meta b/src/ccpp_types.meta index 963762cc..6ad84522 100644 --- a/src/ccpp_types.meta +++ b/src/ccpp_types.meta @@ -44,6 +44,12 @@ units = index dimensions = () type = integer +[ccpp_instance] + standard_name = ccpp_instance + long_name = ccpp_instance + units = index + dimensions = () + type = integer ######################################################################## From 11db46d2ccabcc66e32e7c842928933f6b5f88a3 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Mon, 22 May 2023 14:38:20 -0600 Subject: [PATCH 2/3] Move definition of the hard-coded limit of concurrent instances to common.py --- scripts/common.py | 3 +++ scripts/mkstatic.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/common.py b/scripts/common.py index 6c035fa2..a32c626b 100755 --- a/scripts/common.py +++ b/scripts/common.py @@ -68,6 +68,9 @@ # Filename pattern for suite definition files SUITE_DEFINITION_FILENAME_PATTERN = re.compile('^suite_(.*)\.xml$') +# Maximum number of concurrent CCPP instances per MPI task +CCPP_NUM_INSTANCES = 200 + def execute(cmd, abort = True): """Runs a local command in a shell. Waits for completion and returns status, stdout and stderr. If abort = True, abort in diff --git a/scripts/mkstatic.py b/scripts/mkstatic.py index afb94b79..bca6f21d 100755 --- a/scripts/mkstatic.py +++ b/scripts/mkstatic.py @@ -896,7 +896,7 @@ class Group(object): private public :: {subroutines} - logical, dimension(200), save :: initialized = .false. + logical, dimension({CCPP_NUM_INSTANCES}), save :: initialized = .false. contains ''' From e72107f8e9f9461589c15ce8cad781fb9c2cd98b Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Mon, 22 May 2023 14:56:07 -0600 Subject: [PATCH 3/3] Correctly include new CCPP_NUM_INSTANCES variable --- scripts/mkstatic.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/mkstatic.py b/scripts/mkstatic.py index bca6f21d..cd389b3b 100755 --- a/scripts/mkstatic.py +++ b/scripts/mkstatic.py @@ -16,7 +16,7 @@ from common import CCPP_STAGES from common import CCPP_ERROR_CODE_VARIABLE, CCPP_ERROR_MSG_VARIABLE, CCPP_LOOP_COUNTER, CCPP_LOOP_EXTENT from common import CCPP_BLOCK_NUMBER, CCPP_BLOCK_COUNT, CCPP_BLOCK_SIZES, CCPP_THREAD_NUMBER, CCPP_INTERNAL_VARIABLES -from common import CCPP_CONSTANT_ONE, CCPP_HORIZONTAL_DIMENSION, CCPP_HORIZONTAL_LOOP_EXTENT +from common import CCPP_CONSTANT_ONE, CCPP_HORIZONTAL_DIMENSION, CCPP_HORIZONTAL_LOOP_EXTENT, CCPP_NUM_INSTANCES from common import FORTRAN_CONDITIONAL_REGEX_WORDS, FORTRAN_CONDITIONAL_REGEX from common import CCPP_TYPE, STANDARD_VARIABLE_TYPES, STANDARD_CHARACTER_TYPE from common import CCPP_STATIC_API_MODULE, CCPP_STATIC_SUBROUTINE_NAME @@ -896,7 +896,7 @@ class Group(object): private public :: {subroutines} - logical, dimension({CCPP_NUM_INSTANCES}), save :: initialized = .false. + logical, dimension({num_instances}), save :: initialized = .false. contains ''' @@ -1665,7 +1665,8 @@ def write(self, metadata_request, metadata_define, arguments, debug): f.write(Group.header.format(group=self._name, module=self._module, module_use=module_use, - subroutines=', &\n '.join(self._subroutines))) + subroutines=', &\n '.join(self._subroutines), + num_instances=CCPP_NUM_INSTANCES)) f.write(local_subs) f.write(Group.footer.format(module=self._module)) if (f is not sys.stdout):