saving work
atm/crm_main/Makefile.gnu
0 → 100644
atm/crm_main/Makefile.inc
0 → 100644
!KGEN-generated Fortran source file | ||
!Generated at : 2020-05-29 19:47:47 | ||
!KGEN version : 0.9.0 | ||
module crm_module | ||
USE abcoefs_mod, ONLY: abcoefs | ||
USE kurant_mod, ONLY: kurant | ||
USE boundaries_mod, ONLY: boundaries | ||
USE forcing_mod, ONLY: forcing | ||
USE advect_mom_mod, ONLY: advect_mom | ||
USE adams_mod, ONLY: adams | ||
USE advect_all_scalars_mod, ONLY: advect_all_scalars | ||
USE crm_surface_mod | ||
USE zero_mod | ||
USE buoyancy_mod | ||
USE pressure_mod | ||
USE uvw_mod | ||
USE diagnose_mod | ||
USE damping_mod | ||
USE ice_fall_mod | ||
USE coriolis_mod | ||
USE crm_output_module | ||
!--------------------------------------------------------------- | ||
! Super-parameterization's main driver | ||
! Marat Khairoutdinov, 2001-2009 | ||
!--------------------------------------------------------------- | ||
USE kgen_utils_mod, ONLY: kgen_dp, kgen_array_sumcheck | ||
USE tprof_mod, ONLY: tstart, tstop, tnull, tprnt | ||
PUBLIC crm | ||
#ifdef _MPI | ||
include "mpif.h" | ||
#endif | ||
contains | ||
SUBROUTINE crm(kgen_unit, kgen_measure, kgen_isverified, kgen_filepath, ncrms, plev) | ||
!----------------------------------------------------------------------------------------------- | ||
!----------------------------------------------------------------------------------------------- | ||
USE EXTRAE_MODULE | ||
USE shr_kind_mod, ONLY: r8 => shr_kind_r8 | ||
USE vars | ||
USE microphysics | ||
USE sgs | ||
USE scalar_momentum_mod | ||
USE crmdims, ONLY: crm_nx_rad, crm_ny_rad | ||
USE accelerate_crm_mod, ONLY: use_crm_accel, accelerate_crm | ||
USE kgen_utils_mod, ONLY: kgen_dp, kgen_array_sumcheck | ||
USE kgen_utils_mod, ONLY: kgen_perturb_real | ||
USE vars, ONLY: kr_externs_out_vars | ||
USE grid, ONLY: kr_externs_out_grid | ||
USE sgs, ONLY: kr_externs_out_sgs | ||
USE params, ONLY: kr_externs_out_params | ||
USE microphysics, ONLY: kr_externs_out_microphysics | ||
USE micro_params, ONLY: kr_externs_out_micro_params | ||
USE crm_output_module, ONLY: kr_externs_out_crm_output_module | ||
USE accelerate_crm_mod, ONLY: kr_externs_out_accelerate_crm_mod | ||
USE kgen_utils_mod, ONLY: check_t, kgen_init_check, kgen_init_verify, kgen_tolerance, kgen_minvalue, kgen_verboselevel, & | ||
&CHECK_IDENTICAL, CHECK_IN_TOL, CHECK_OUT_TOL | ||
USE vars, ONLY: kv_externs_vars | ||
USE grid, ONLY: kv_externs_grid | ||
USE params, ONLY: kv_externs_params | ||
USE microphysics, ONLY: kv_externs_microphysics | ||
USE micro_params, ONLY: kv_externs_micro_params | ||
USE crm_output_module, ONLY: kv_externs_crm_output_module | ||
IMPLICIT NONE | ||
!----------------------------------------------------------------------------------------------- | ||
! Interface variable declarations | ||
!----------------------------------------------------------------------------------------------- | ||
INTEGER, INTENT(INOUT) :: ncrms | ||
INTEGER, INTENT(INOUT) :: plev | ||
!----------------------------------------------------------------------------------------------- | ||
! Local variable declarations | ||
!----------------------------------------------------------------------------------------------- | ||
real(r8), parameter :: wmin = 2. ! minimum up/downdraft velocity for stat | ||
real(crm_rknd), parameter :: cwp_threshold = 0.001 ! threshold for cloud condensate for shaded fraction calculation | ||
REAL(KIND=crm_rknd) :: tmp1, tmp | ||
INTEGER :: i, j, k, l, nn, icyc, icrm | ||
INTEGER :: kx | ||
REAL(KIND=crm_rknd) :: qsat | ||
REAL(KIND=crm_rknd), allocatable :: bflx(:) | ||
! These should all be inputs | ||
! variables for radiation grouping method | ||
INTEGER :: i_rad | ||
INTEGER :: j_rad | ||
LOGICAL :: crm_accel_ceaseflag | ||
! Arrays | ||
REAL(KIND=crm_rknd), allocatable :: cwp (:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: cwph (:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: cwpm (:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: cwpl (:,:,:) | ||
LOGICAL, allocatable :: flag_top(:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: cltemp (:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: cmtemp (:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: chtemp (:,:,:) | ||
REAL(KIND=crm_rknd), allocatable :: cttemp (:,:,:) | ||
REAL(KIND=r8), allocatable :: mui_crm(:,:) | ||
REAL(KIND=r8), allocatable :: mdi_crm(:,:) | ||
REAL(KIND=crm_rknd), pointer :: crm_rad_temperature (:,:,:,:) | ||
REAL(KIND=crm_rknd), pointer :: crm_rad_qv (:,:,:,:) | ||
REAL(KIND=crm_rknd), pointer :: crm_rad_qc (:,:,:,:) | ||
REAL(KIND=crm_rknd), pointer :: crm_rad_qi (:,:,:,:) | ||
REAL(KIND=crm_rknd), pointer :: crm_rad_cld (:,:,:,:) | ||
REAL(KIND=crm_rknd), pointer :: crm_rad_qrad (:,:,:,:) | ||
!----------------------------------------------------------------------------------------------- | ||
!----------------------------------------------------------------------------------------------- | ||
INTEGER, INTENT(IN) :: kgen_unit | ||
REAL(KIND=kgen_dp), INTENT(OUT) :: kgen_measure | ||
LOGICAL, INTENT(OUT) :: kgen_isverified | ||
CHARACTER(LEN=*), INTENT(IN) :: kgen_filepath | ||
LOGICAL :: kgen_istrue | ||
REAL(KIND=8) :: kgen_array_sum | ||
INTEGER :: kgen_intvar, kgen_ierr | ||
INTEGER :: kgen_mpirank, kgen_openmptid, kgen_kernelinvoke | ||
LOGICAL :: kgen_evalstage, kgen_warmupstage, kgen_mainstage | ||
COMMON / state / kgen_mpirank, kgen_openmptid, kgen_kernelinvoke, kgen_evalstage, kgen_warmupstage, kgen_mainstage | ||
INTEGER, PARAMETER :: KGEN_MAXITER = 10 | ||
TYPE(check_t) :: check_status | ||
INTEGER*8 :: kgen_start_clock, kgen_stop_clock, kgen_rate_clock | ||
REAL(KIND=kgen_dp) :: gkgen_measure | ||
REAL(KIND=crm_rknd) :: kgenref_tmp1 | ||
REAL(KIND=crm_rknd) :: kgenref_tmp | ||
INTEGER :: kgenref_icrm | ||
INTEGER :: kgenref_icyc | ||
INTEGER :: kgenref_k | ||
INTEGER :: kgenref_j | ||
INTEGER :: kgenref_i | ||
INTEGER :: kgenref_nn | ||
INTEGER :: kgenref_l | ||
INTEGER :: kgenref_kx | ||
REAL(KIND=crm_rknd) :: kgenref_qsat | ||
INTEGER :: kgenref_i_rad | ||
INTEGER :: kgenref_j_rad | ||
LOGICAL :: kgenref_crm_accel_ceaseflag | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cwp | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cwph | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cwpm | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cwpl | ||
LOGICAL, allocatable, dimension(:,:,:) :: kgenref_flag_top | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cltemp | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cmtemp | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_chtemp | ||
REAL(KIND=crm_rknd), allocatable, dimension(:,:,:) :: kgenref_cttemp | ||
REAL(KIND=r8), allocatable, dimension(:,:) :: kgenref_mui_crm | ||
REAL(KIND=r8), allocatable, dimension(:,:) :: kgenref_mdi_crm | ||
REAL(KIND=crm_rknd), pointer, dimension(:,:,:,:) :: kgenref_crm_rad_temperature | ||
REAL(KIND=crm_rknd), pointer, dimension(:,:,:,:) :: kgenref_crm_rad_qv | ||
REAL(KIND=crm_rknd), pointer, dimension(:,:,:,:) :: kgenref_crm_rad_qc | ||
REAL(KIND=crm_rknd), pointer, dimension(:,:,:,:) :: kgenref_crm_rad_qi | ||
REAL(KIND=crm_rknd), pointer, dimension(:,:,:,:) :: kgenref_crm_rad_cld | ||
!parent block preprocessing | ||
#ifdef _MPI | ||
call mpi_comm_rank(mpi_comm_world, kgen_mpirank, kgen_ierr) | ||
#else | ||
kgen_mpirank = 0 | ||
#endif | ||
!local input variables | ||
READ (UNIT = kgen_unit) tmp1 | ||
READ (UNIT = kgen_unit) tmp | ||
READ (UNIT = kgen_unit) icrm | ||
READ (UNIT = kgen_unit) icyc | ||
READ (UNIT = kgen_unit) i | ||
READ (UNIT = kgen_unit) j | ||
READ (UNIT = kgen_unit) k | ||
READ (UNIT = kgen_unit) nn | ||
READ (UNIT = kgen_unit) l | ||
READ (UNIT = kgen_unit) kx | ||
READ (UNIT = kgen_unit) qsat | ||
CALL kr_crm_real__crm_rknd_dim1(bflx, kgen_unit, "bflx", .FALSE.) | ||
READ (UNIT = kgen_unit) i_rad | ||
READ (UNIT = kgen_unit) j_rad | ||
READ (UNIT = kgen_unit) crm_accel_ceaseflag | ||
CALL kr_crm_real__crm_rknd_dim3(cwp, kgen_unit, "cwp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(cwph, kgen_unit, "cwph", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(cwpm, kgen_unit, "cwpm", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(cwpl, kgen_unit, "cwpl", .FALSE.) | ||
CALL kr_crm_logical___dim3(flag_top, kgen_unit, "flag_top", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(cltemp, kgen_unit, "cltemp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(cmtemp, kgen_unit, "cmtemp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(chtemp, kgen_unit, "chtemp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(cttemp, kgen_unit, "cttemp", .FALSE.) | ||
CALL kr_crm_real__r8_dim2(mui_crm, kgen_unit, "mui_crm", .FALSE.) | ||
CALL kr_crm_real__r8_dim2(mdi_crm, kgen_unit, "mdi_crm", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(crm_rad_temperature, kgen_unit, "crm_rad_temperature", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(crm_rad_qv, kgen_unit, "crm_rad_qv", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(crm_rad_qc, kgen_unit, "crm_rad_qc", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(crm_rad_qi, kgen_unit, "crm_rad_qi", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(crm_rad_cld, kgen_unit, "crm_rad_cld", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(crm_rad_qrad, kgen_unit, "crm_rad_qrad", .FALSE.) | ||
!extern output variables | ||
CALL kr_externs_out_vars(kgen_unit) | ||
CALL kr_externs_out_grid(kgen_unit) | ||
CALL kr_externs_out_sgs(kgen_unit) | ||
CALL kr_externs_out_params(kgen_unit) | ||
CALL kr_externs_out_microphysics(kgen_unit) | ||
CALL kr_externs_out_micro_params(kgen_unit) | ||
CALL kr_externs_out_crm_output_module(kgen_unit) | ||
CALL kr_externs_out_accelerate_crm_mod(kgen_unit) | ||
!local output variables | ||
READ (UNIT = kgen_unit) kgenref_tmp1 | ||
READ (UNIT = kgen_unit) kgenref_tmp | ||
READ (UNIT = kgen_unit) kgenref_icrm | ||
READ (UNIT = kgen_unit) kgenref_icyc | ||
READ (UNIT = kgen_unit) kgenref_k | ||
READ (UNIT = kgen_unit) kgenref_j | ||
READ (UNIT = kgen_unit) kgenref_i | ||
READ (UNIT = kgen_unit) kgenref_nn | ||
READ (UNIT = kgen_unit) kgenref_l | ||
READ (UNIT = kgen_unit) kgenref_kx | ||
READ (UNIT = kgen_unit) kgenref_qsat | ||
READ (UNIT = kgen_unit) kgenref_i_rad | ||
READ (UNIT = kgen_unit) kgenref_j_rad | ||
READ (UNIT = kgen_unit) kgenref_crm_accel_ceaseflag | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cwp, kgen_unit, "kgenref_cwp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cwph, kgen_unit, "kgenref_cwph", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cwpm, kgen_unit, "kgenref_cwpm", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cwpl, kgen_unit, "kgenref_cwpl", .FALSE.) | ||
CALL kr_crm_logical___dim3(kgenref_flag_top, kgen_unit, "kgenref_flag_top", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cltemp, kgen_unit, "kgenref_cltemp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cmtemp, kgen_unit, "kgenref_cmtemp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_chtemp, kgen_unit, "kgenref_chtemp", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim3(kgenref_cttemp, kgen_unit, "kgenref_cttemp", .FALSE.) | ||
CALL kr_crm_real__r8_dim2(kgenref_mui_crm, kgen_unit, "kgenref_mui_crm", .FALSE.) | ||
CALL kr_crm_real__r8_dim2(kgenref_mdi_crm, kgen_unit, "kgenref_mdi_crm", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(kgenref_crm_rad_temperature, kgen_unit, "kgenref_crm_rad_temperature", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(kgenref_crm_rad_qv, kgen_unit, "kgenref_crm_rad_qv", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(kgenref_crm_rad_qc, kgen_unit, "kgenref_crm_rad_qc", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(kgenref_crm_rad_qi, kgen_unit, "kgenref_crm_rad_qi", .FALSE.) | ||
CALL kr_crm_real__crm_rknd_dim4_ptr(kgenref_crm_rad_cld, kgen_unit, "kgenref_crm_rad_cld", .FALSE.) | ||
!$omp target enter data map(alloc: t00 ) | ||
!$omp target enter data map(alloc: tln ) | ||
!$omp target enter data map(alloc: qln ) | ||
!$omp target enter data map(alloc: qccln ) | ||
!$omp target enter data map(alloc: qiiln ) | ||
!$omp target enter data map(alloc: uln ) | ||
!$omp target enter data map(alloc: vln ) | ||
!$omp target enter data map(alloc: cwp ) | ||
!$omp target enter data map(alloc: cwph ) | ||
!$omp target enter data map(alloc: cwpm ) | ||
!$omp target enter data map(alloc: cwpl ) | ||
!$omp target enter data map(alloc: flag_top ) | ||
!$omp target enter data map(alloc: cltemp ) | ||
!$omp target enter data map(alloc: cmtemp ) | ||
!$omp target enter data map(alloc: chtemp ) | ||
!$omp target enter data map(alloc: cttemp ) | ||
!$omp target enter data map(alloc: dd_crm ) | ||
!$omp target enter data map(alloc: mui_crm ) | ||
!$omp target enter data map(alloc: mdi_crm ) | ||
!$omp target enter data map(alloc: ustar ) | ||
!$omp target enter data map(alloc: bflx ) | ||
!$omp target enter data map(alloc: wnd ) | ||
!$omp target enter data map(alloc: qtot ) | ||
!$omp target enter data map(alloc: colprec ) | ||
!$omp target enter data map(alloc: colprecs ) | ||
!$omp target enter data map(alloc: crm_rad_temperature ) | ||
!$omp target enter data map(alloc: crm_rad_qv ) | ||
!$omp target enter data map(alloc: crm_rad_qc ) | ||
!$omp target enter data map(alloc: crm_rad_qi ) | ||
!$omp target enter data map(alloc: crm_rad_cld ) | ||
!$omp target enter data map(alloc: crm_rad_qrad ) | ||
!$omp target enter data map(alloc: crm_state_u_wind ) | ||
!$omp target enter data map(alloc: crm_state_v_wind ) | ||
!$omp target enter data map(alloc: crm_state_w_wind ) | ||
!$omp target enter data map(alloc: crm_state_temperature ) | ||
!$omp target enter data map(alloc: crm_state_qt ) | ||
!$omp target enter data map(alloc: crm_state_qp ) | ||
!$omp target enter data map(alloc: crm_state_qn ) | ||
!Loop over "vector columns" | ||
!----------------------------------------------- | ||
!----------------------------------------- | ||
! update data at device | ||
!$omp taskwait | ||
! Initialize CRM fields: | ||
!$omp target teams distribute parallel do collapse(4) | ||
! limit the velocity at the very first step: | ||
! Populate microphysics array from crm_state | ||
!$omp target teams distribute parallel do collapse(4) | ||
! initialize sgs fields | ||
!$omp target teams distribute parallel do | ||
< |