CCPP SciDoc v7.0.0  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
cu_c3_driver_pre.F90
1
3
5
6 implicit none
7
8 private
9
10 public :: cu_c3_driver_pre_run
11
12 contains
13
18 subroutine cu_c3_driver_pre_run (flag_init, flag_restart, kdt, fhour, dtp, t, q, prevst, prevsq, &
19 forcet, forceq, cactiv, cactiv_m, conv_act, conv_act_m, &
20 errmsg, errflg)
21
22 use machine, only: kind_phys
23
24 implicit none
25
26 logical, intent(in) :: flag_init
27 logical, intent(in) :: flag_restart
28 integer, intent(in) :: kdt
29 real(kind_phys), intent(in) :: fhour
30 real(kind_phys), intent(in) :: dtp
31 real(kind_phys), intent(in) :: t(:,:)
32 real(kind_phys), intent(in) :: q(:,:)
33 real(kind_phys), intent(in), optional :: prevst(:,:)
34 real(kind_phys), intent(in), optional :: prevsq(:,:)
35!$acc declare copyin(t,q,prevst,prevsq)
36 real(kind_phys), intent(out), optional :: forcet(:,:)
37 real(kind_phys), intent(out), optional :: forceq(:,:)
38 integer, intent(out), optional :: cactiv(:)
39 integer, intent(out), optional :: cactiv_m(:)
40!$acc declare copyout(forcet,forceq,cactiv,cactiv_m)
41 real(kind_phys), intent(in), optional :: conv_act(:)
42 real(kind_phys), intent(in), optional :: conv_act_m(:)
43!$acc declare copyin(conv_act,conv_act_m)
44 character(len=*), intent(out) :: errmsg
45 integer, intent(out) :: errflg
46
47 ! local variables
48 real(kind=kind_phys) :: dtdyn
49
50 ! Initialize CCPP error handling variables
51 errmsg = ''
52 errflg = 0
53
54 ! For restart runs, can assume that prevst and prevsq
55 ! are read from the restart files beforehand, same
56 ! for conv_act.
57 if(flag_init .and. .not.flag_restart) then
58!$acc kernels
59 forcet(:,:)=0.0
60 forceq(:,:)=0.0
61!$acc end kernels
62 else
63 dtdyn=3600.0*(fhour)/kdt
64 if(dtp > dtdyn) then
65!$acc kernels
66 forcet(:,:)=(t(:,:) - prevst(:,:))/dtp
67 forceq(:,:)=(q(:,:) - prevsq(:,:))/dtp
68!$acc end kernels
69 else
70!$acc kernels
71 forcet(:,:)=(t(:,:) - prevst(:,:))/dtdyn
72 forceq(:,:)=(q(:,:) - prevsq(:,:))/dtdyn
73!$acc end kernels
74 endif
75 endif
76
77!$acc kernels
78 cactiv(:)=nint(conv_act(:))
79 cactiv_m(:)=nint(conv_act_m(:))
80!$acc end kernels
81
82 end subroutine cu_c3_driver_pre_run
83
84end module cu_c3_driver_pre
subroutine, public cu_c3_driver_pre_run(flag_init, flag_restart, kdt, fhour, dtp, t, q, prevst, prevsq, forcet, forceq, cactiv, cactiv_m, conv_act, conv_act_m, errmsg, errflg)