CCPP SciDoc v7.0.0  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
cnvc90.f
1
5 module cnvc90
6
7 contains
8
9 subroutine cnvc90_init()
10 end subroutine cnvc90_init
11
20! \section gen_cnvc_run GFS cnvc90_run General Algorithm
21 SUBROUTINE cnvc90_run(CLSTP,IM,RN,KBOT,KTOP,KM,PRSI, &
22 & ACV,ACVB,ACVT,CV,CVB,CVT,errmsg,errflg)
23
24 USE machine, ONLY :kind_phys
25 implicit none
26
27 ! Interface variables
28 real(kind=kind_phys), intent(in) :: clstp
29 integer, intent(in) :: im, km
30 real(kind=kind_phys), intent(in) :: rn(:)
31 integer, intent(in) :: KBOT(:)
32 integer, intent(in) :: KTOP(:)
33 real(kind=kind_phys), intent(in) :: prsi(:,:)
34 real(kind=kind_phys), intent(inout) :: acv(:)
35 real(kind=kind_phys), intent(inout) :: acvb(:)
36 real(kind=kind_phys), intent(inout) :: acvt(:)
37 real(kind=kind_phys), intent(inout) :: cv(:)
38 real(kind=kind_phys), intent(inout) :: cvb(:)
39 real(kind=kind_phys), intent(inout) :: cvt(:)
40
41 character(len=*), intent(out) :: errmsg
42 integer, intent(out) :: errflg
43
44 ! Local variables
45 integer :: i,ibot,itop,lc,lz,n,ncc
46 real(kind=kind_phys) :: ah,cc1,cc2,cvb0,p1,p2,rkbot,rktop,val
47 integer :: NMD(IM)
48 real(kind=kind_phys) :: pmd(im)
49!
50 real (kind=kind_phys), parameter :: cons_100=100.0
51 real(kind=kind_phys) :: r_kbot_i, r_ktop_i
52!
53 parameter(ncc=9)
54 real(kind=kind_phys) :: cc(ncc),p(ncc)
55 DATA cc/0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8/
56 DATA p/.14,.31,.70,1.6,3.4,7.7,17.,38.,85./
57 DATA cvb0/100./
58!
59 ! Initialize CCPP error handling variables
60 errmsg = ''
61 errflg = 0
62!
63 lz=0
64 lc=0
65 IF(clstp.GE.1000.) lz=1
66 IF(clstp.GE.1100..OR.(clstp.LT.1000..AND.clstp.GE.100.)) lc=1
67 ah=mod(clstp,cons_100)
68 IF(lz.NE.0) THEN
69 DO i=1,im
70 acv(i) = 0.
71 acvb(i) = cvb0
72 acvt(i) = 0.
73 ENDDO
74 ENDIF
75 IF(lc.NE.0) THEN
76 DO i=1,im
77 IF(rn(i).GT.0.) THEN
78 acv(i) = acv(i)+rn(i)
79 r_kbot_i= kbot(i)
80 acvb(i) = min(acvb(i),r_kbot_i)
81 r_ktop_i= ktop(i)
82 acvt(i) = max(acvt(i),r_ktop_i)
83 ENDIF
84 ENDDO
85 ENDIF
86 IF(ah.GT.0.01.AND.ah.LT.99.99) THEN
87 DO i=1,im
88 IF(acv(i).GT.0.) THEN
89! CVB(I) = ACVB(I)
90! CVT(I) = ACVT(I)
91! convert cvt and cvb to pressures
92 itop = nint(acvt(i))
93 cvt(i) = prsi(i,itop+1)
94 ibot = nint(acvb(i))
95 cvb(i) = prsi(i,ibot)
96 ELSE
97! CVB(I) = CVB0
98 cvb(i) = 0.
99 cvt(i) = 0.
100 ENDIF
101 pmd(i) = acv(i)*(24.e+3/ah)
102 nmd(i) = 0
103 ENDDO
104 DO n=1,ncc
105 DO i=1,im
106 IF(pmd(i).GT.p(n)) nmd(i) = n
107 ENDDO
108 ENDDO
109 DO i=1,im
110 IF(nmd(i).EQ.0) THEN
111 cv(i) = 0.
112! CVB(I) = CVB0
113 cvb(i) = 0.
114 cvt(i) = 0.
115 ELSEIF(nmd(i).EQ.ncc) THEN
116 cv(i) = cc(ncc)
117 ELSE
118 cc1 = cc(nmd(i))
119 cc2 = cc(nmd(i)+1)
120 p1 = p(nmd(i))
121 p2 = p(nmd(i)+1)
122 cv(i) = cc1 + (cc2-cc1)*(pmd(i)-p1)/(p2-p1)
123 ENDIF
124 ENDDO
125 ENDIF
126 RETURN
127 END SUBROUTINE cnvc90_run
129
130 end module cnvc90
131
subroutine cnvc90_run(clstp, im, rn, kbot, ktop, km, prsi, acv, acvb, acvt, cv, cvb, cvt, errmsg, errflg)
Definition cnvc90.f:23
Definition cnvc90.f:5