-
Notifications
You must be signed in to change notification settings - Fork 64
CCPP Framework Meeting Minutes 2019 01 17
goldy edited this page Mar 9, 2020
·
4 revisions
Issues with blocking/no-blocking:
- blocked data/non-blocked data versus parameterizations that expect blocked data/non-blocked data in the different stages (init, run) of the model
- need a portable solution that works for all combinations, suggested interface at the end of these minutes works for 3 out of the 4 cases
- it doesn't work for blocked data and physics expecting the entire field as non-blocked data (for example for computing global sums), in all other cases the easiest solution would be to loop over all blocks and call the scheme
- getting the FV3 time vary step to work with the suggestion below is something Steve and Dom will try next week, as this would be a good test of the suggested approach
Dom's static build w/o using cdata:
- parallel work using current prebuild system to avoid using the cdata lookup table
- how to deal with ccpp_loop_cnt, ccpp_error_message, ccpp_error_flag?
- Steve's approach is different from Dom's, let's try to compare and consolidate
Action items:
- Dom to create a testing system for NEMSfv3gfs (and SCM?) on Cheyenne and provide instructions on the wiki; the testing system should work off branches in forks, not off PRs
- Steve to create a PR of his current work (even though not finished) so that people can start looking at it
Proposal to provide a portable interface for 'blocked' host model data
Current ccpp_capgen
host model interface
subroutine CAM_ccpp_physics_initialize(suite_name)
character(len=*), intent(in) :: suite_name
call ccpp_physics_initialize(suite_name, pcols, pver, pverp, begchunk, &
endchunk, pcnst, ix_qv, ix_qc, ix_qr, CPDAIR, RGAS, LATVAP, PSTD, &
RHOFW, lblk, state, tend, timestep, errmsg, errflg)
end subroutine CAM_ccpp_physics_initialize
Proposed ccpp_capgen
host model interface
use <module>, only: <thread_block_begin>
use <module>, only: <thread_block_end>
private
type :: ccpp_field_ptr_2d_kind_phys_t
real(kind_phys), pointer :: field(:,:)
end type ccpp_field_ptr_2d_kind_phys_t
type(ccpp_field_ptr_2d_kind_phys_t), allocatable :: ccpp_state_u(:)
type(ccpp_field_ptr_2d_kind_phys_t), allocatable :: ccpp_state_v(:)
type(ccpp_field_ptr_2d_kind_phys_t), allocatable :: ccpp_state_t(:)
contains
subroutine CAM_ccpp_physics_initialize(suite_name)
character(len=*), intent(in) :: suite_name
integer :: ccpp_alloc_loop1
allocate(ccpp_state_u(<thread_block_begin>:<thread_block_end>))
allocate(ccpp_state_v(<thread_block_begin>:<thread_block_end>))
allocate(ccpp_state_t(<thread_block_begin>:<thread_block_end>))
do ccpp_alloc_loop1 = <thread_block_begin>, <thread_block_end>
ccpp_state_u(ccpp_alloc_loop1) = state(ccpp_alloc_loop1)%u
ccpp_state_v(ccpp_alloc_loop1) = state(ccpp_alloc_loop1)%v
ccpp_state_t(ccpp_alloc_loop1) = state(ccpp_alloc_loop1)%t
end do
call ccpp_physics_initialize(suite_name, pcols, pver, pverp, begchunk, &
endchunk, pcnst, ix_qv, ix_qc, ix_qr, CPDAIR, RGAS, LATVAP, PSTD, &
RHOFW, lblk, ccpp_state_u, ccpp_state_v, ccpp_state_t, tend, timestep, errmsg, errflg)
end subroutine CAM_ccpp_physics_initialize