66! distributed with this code, or at http:// mpas- dev.github.com/ license.html
77!
88!=================================================================================================================
9- module mpas_atmphys_interface
10- use mpas_kind_types
11- use mpas_pool_routines
12-
13- use mpas_atmphys_constants
14- use mpas_atmphys_vars
15- use mpas_timer
169
1710#ifdef MPAS_OPENACC
1811#define MPAS_ACC_TIMER_START(X) call mpas_timer_start(X)
@@ -22,6 +15,13 @@ module mpas_atmphys_interface
2215#define MPAS_ACC_TIMER_STOP(X)
2316#endif
2417
18+ module mpas_atmphys_interface
19+ use mpas_kind_types
20+ use mpas_pool_routines
21+
22+ use mpas_atmphys_constants
23+ use mpas_atmphys_vars
24+ use mpas_timer
2525
2626 implicit none
2727 private
@@ -555,6 +555,40 @@ subroutine MPAS_to_physics(configs,mesh,state,time_lev,diag,diag_physics,its,ite
555555
556556 end subroutine MPAS_to_physics
557557
558+ !=================================================================================================================
559+ subroutine update_d2h_pre_microphysics (configs ,state ,diag ,time_lev )
560+ !=================================================================================================================
561+
562+ !input variables:
563+ type(mpas_pool_type),intent (in ):: configs
564+ type(mpas_pool_type),intent (in ):: state
565+ type(mpas_pool_type),intent (in ):: diag
566+
567+ integer :: time_lev
568+
569+ !local pointers:
570+ real (kind= RKIND),dimension (:,:),pointer :: exner,pressure_b,w
571+ real (kind= RKIND),dimension (:,:),pointer :: rho_zz,theta_m,pressure_p
572+ real (kind= RKIND),dimension (:,:,:),pointer:: scalars
573+
574+
575+ MPAS_ACC_TIMER_START(' update_d2h_pre_microphysics [ACC_data_xfer]' )
576+ call mpas_pool_get_array(diag,' exner' ,exner )
577+ call mpas_pool_get_array(diag,' pressure_base' ,pressure_b)
578+ call mpas_pool_get_array(diag,' pressure_p' ,pressure_p)
579+
580+ call mpas_pool_get_array(state,' rho_zz' ,rho_zz ,time_lev)
581+ call mpas_pool_get_array(state,' theta_m' ,theta_m,time_lev)
582+ call mpas_pool_get_array(state,' w' ,w ,time_lev)
583+ !$acc update host(exner, pressure_b, pressure_p, rho_zz, theta_m, w)
584+
585+ call mpas_pool_get_array(state,' scalars' ,scalars,time_lev)
586+ !$acc update host(scalars)
587+
588+ MPAS_ACC_TIMER_STOP(' update_d2h_pre_microphysics [ACC_data_xfer]' )
589+
590+ end subroutine update_d2h_pre_microphysics
591+
558592!=================================================================================================================
559593 subroutine microphysics_from_MPAS (configs ,mesh ,state ,time_lev ,diag ,diag_physics ,tend_physics ,its ,ite )
560594!=================================================================================================================
@@ -598,22 +632,18 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
598632 call mpas_pool_get_array(mesh,' zgrid' ,zgrid)
599633 call mpas_pool_get_array(mesh,' zz' ,zz )
600634
601- MPAS_ACC_TIMER_START(' atm_srk3: physics ACC_data_xfer' )
602635 call mpas_pool_get_array(diag,' exner' ,exner )
603636 call mpas_pool_get_array(diag,' pressure_base' ,pressure_b)
604637 call mpas_pool_get_array(diag,' pressure_p' ,pressure_p)
605638
606639 call mpas_pool_get_array(state,' rho_zz' ,rho_zz ,time_lev)
607640 call mpas_pool_get_array(state,' theta_m' ,theta_m,time_lev)
608641 call mpas_pool_get_array(state,' w' ,w ,time_lev)
609- !$acc update host(exner, pressure_b, pressure_p, rho_zz, theta_m, w)
610642
611643 call mpas_pool_get_dimension(state,' index_qv' ,index_qv)
612644 call mpas_pool_get_dimension(state,' index_qc' ,index_qc)
613645 call mpas_pool_get_dimension(state,' index_qr' ,index_qr)
614- call mpas_pool_get_array(state,' scalars' ,scalars,time_lev)
615- !$acc update host(scalars)
616- MPAS_ACC_TIMER_STOP(' atm_srk3: physics ACC_data_xfer' )
646+ call mpas_pool_get_array(state,' scalars' ,scalars,time_lev)
617647 qv = > scalars(index_qv,:,:)
618648 qc = > scalars(index_qc,:,:)
619649 qr = > scalars(index_qr,:,:)
@@ -1054,13 +1084,49 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te
10541084 case default
10551085 end select mp_tend_select
10561086
1057- MPAS_ACC_TIMER_START(' atm_srk3: physics ACC_data_xfer' )
1087+ end subroutine microphysics_to_MPAS
1088+
1089+ !=================================================================================================================
1090+ subroutine update_h2d_post_microphysics (configs ,state ,diag ,tend ,time_lev )
1091+ !=================================================================================================================
1092+
1093+ !input variables:
1094+ type(mpas_pool_type),intent (in ):: configs
1095+ type(mpas_pool_type),intent (in ):: state
1096+ type(mpas_pool_type),intent (in ):: diag
1097+ type(mpas_pool_type),intent (inout ):: tend
1098+
1099+
1100+ integer :: time_lev
1101+
1102+ !local pointers:
1103+ real (kind= RKIND),dimension (:,:),pointer :: exner,exner_b,pressure_b,rtheta_p,rtheta_b
1104+ real (kind= RKIND),dimension (:,:),pointer :: rho_zz,theta_m,pressure_p
1105+ real (kind= RKIND),dimension (:,:,:),pointer:: scalars
1106+ real (kind= RKIND),dimension (:,:),pointer :: rt_diabatic_tend
1107+
1108+ call mpas_pool_get_array(diag,' exner' ,exner )
1109+ call mpas_pool_get_array(diag,' exner_base' ,exner_b )
1110+ call mpas_pool_get_array(diag,' pressure_base' ,pressure_b)
1111+ call mpas_pool_get_array(diag,' pressure_p' ,pressure_p)
1112+ call mpas_pool_get_array(diag,' rtheta_base' ,rtheta_b )
1113+ call mpas_pool_get_array(diag,' rtheta_p' ,rtheta_p )
1114+
1115+ call mpas_pool_get_array(state,' rho_zz' ,rho_zz ,time_lev)
1116+ call mpas_pool_get_array(state,' theta_m' ,theta_m,time_lev)
1117+
1118+ call mpas_pool_get_array(state,' scalars' ,scalars,time_lev)
1119+
1120+ call mpas_pool_get_array(tend,' rt_diabatic_tend' ,rt_diabatic_tend)
1121+
1122+
1123+ MPAS_ACC_TIMER_START(' update_h2d_post_microphysics [ACC_data_xfer]' )
10581124 !$acc update device(exner, exner_b, pressure_b, pressure_p, rtheta_b)
10591125 !$acc update device(rtheta_p, rho_zz, theta_m, scalars)
10601126 !$acc update device(rt_diabatic_tend)
1061- MPAS_ACC_TIMER_STOP(' atm_srk3: physics ACC_data_xfer' )
1127+ MPAS_ACC_TIMER_STOP(' update_h2d_post_microphysics [ ACC_data_xfer] ' )
10621128
1063- end subroutine microphysics_to_MPAS
1129+ end subroutine update_h2d_post_microphysics
10641130
10651131!=================================================================================================================
10661132 end module mpas_atmphys_interface
0 commit comments