diff --git a/ccpp-framework b/ccpp-framework index 5d0769a9f..f02e876bf 160000 --- a/ccpp-framework +++ b/ccpp-framework @@ -1 +1 @@ -Subproject commit 5d0769a9fcfb1c76e31cb43849e58e3f75a7953f +Subproject commit f02e876bff92d6c585e1397c057f63efbba9525e diff --git a/ccpp-physics b/ccpp-physics index 3ad70b0a6..790c19b82 160000 --- a/ccpp-physics +++ b/ccpp-physics @@ -1 +1 @@ -Subproject commit 3ad70b0a6ccca01948b2ffa768bebe2e779a10a2 +Subproject commit 790c19b82c811a4ff75b16c20e2869206b3429c4 diff --git a/scm/src/gmtb_scm.F90 b/scm/src/gmtb_scm.F90 index e1f830969..c3c52a05d 100644 --- a/scm/src/gmtb_scm.F90 +++ b/scm/src/gmtb_scm.F90 @@ -15,16 +15,16 @@ subroutine gmtb_scm_main_sub() use gmtb_scm_time_integration use gmtb_scm_output - use :: ccpp_types, & - only: ccpp_t - use :: ccpp, & - only: ccpp_init - use :: ccpp_fcall, & - only: ccpp_run - use :: ccpp_fields, & - only: ccpp_field_add + use :: ccpp_api, & + only: ccpp_t, & + ccpp_init, & + ccpp_finalize, & + ccpp_physics_init, & + ccpp_physics_run, & + ccpp_physics_finalize, & + ccpp_field_add - use iso_c_binding, only: c_loc + use :: iso_c_binding, only: c_loc #include "ccpp_modules.inc" @@ -103,9 +103,13 @@ subroutine gmtb_scm_main_sub() do i = 1, scm_state%n_cols !set up each column's physics suite (which may be different) - call ccpp_init( & - trim(adjustl(scm_state%physics_suite_dir))//trim(adjustl(scm_state%physics_suite_name(i)))//'.xml', & - cdata(i), ierr) + call ccpp_init( & + trim(adjustl(scm_state%physics_suite_dir))//trim(adjustl(scm_state%physics_suite_name(i)))//'.xml', & + cdata(i), ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_init for column ', i, '. Exiting...' + stop + end if physics%Init_parm(i)%levs = scm_state%n_levels physics%Init_parm(i)%bdat(1) = scm_state%init_year @@ -147,7 +151,12 @@ subroutine gmtb_scm_main_sub() call ccpp_field_add(cdata(i), 'error_message', physics%Interstitial(i)%errmsg, ierr, 'none') call ccpp_field_add(cdata(i), 'error_flag', physics%Interstitial(i)%errflg, ierr, 'flag') - call ccpp_run(cdata(i)%suite%init, cdata(i), ierr) + !initialize easch column's physics + call ccpp_physics_init(cdata(i), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_init for column ', i, '. Exiting...' + stop + end if call physics%associate(scm_state, i) !use ccpp_fields.inc to call ccpp_field_add for all variables to be exposed to CCPP (this is auto-generated from /src/ccpp/scripts/ccpp_prebuild.py - the script parses tables in gmtb_scm_type_defs.f90) @@ -195,7 +204,11 @@ subroutine gmtb_scm_main_sub() scm_state%state_v(:,:,:,2) = scm_state%state_v(:,:,:,1) do i=1, scm_state%n_cols - call ccpp_run(cdata(i)%suite, cdata(i), ierr) + call ccpp_physics_run(cdata(i), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_run for column ', i, '. Exiting...' + stop + end if end do !the filter routine (called after the following leapfrog time step) expects time level 2 in temp_tracer to be the updated, unfiltered state after the previous time step @@ -281,6 +294,22 @@ subroutine gmtb_scm_main_sub() end if end do + do i=1, scm_state%n_cols + call ccpp_physics_finalize(cdata(i), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_finalize for column ', i, '. Exiting...' + stop + end if + end do + + do i=1, scm_state%n_cols + call ccpp_finalize(cdata(i), ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_finalize for column ', i, '. Exiting...' + stop + end if + end do + end subroutine gmtb_scm_main_sub end module gmtb_scm_main diff --git a/scm/src/gmtb_scm_time_integration.f90 b/scm/src/gmtb_scm_time_integration.f90 index bc7d1f0f2..fbb16391a 100644 --- a/scm/src/gmtb_scm_time_integration.f90 +++ b/scm/src/gmtb_scm_time_integration.f90 @@ -6,8 +6,7 @@ module gmtb_scm_time_integration use gmtb_scm_kinds, only: sp, dp, qp use gmtb_scm_forcing -use :: ccpp_types, only: ccpp_t -use :: ccpp_fcall, only: ccpp_run +use ccpp_api, only: ccpp_t, ccpp_physics_run implicit none @@ -79,7 +78,11 @@ subroutine do_time_step(scm_state, cdata) end if do i=1, scm_state%n_cols - call ccpp_run(cdata(i)%suite, cdata(i), ierr) + call ccpp_physics_run(cdata(i), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_run for column ', i, '. Exiting...' + stop + end if end do