27 integer(c_int),
value,
intent(in) :: ims, ime, jms, jme, kms, kme
28 integer(c_int),
value,
intent(in) :: its, ite, jts, jte, kts, kte
29 real(c_double),
intent(inout),
dimension(ims:ime, jms:jme, kms:kme) :: t, qv, qc, qi, qr, qs, qg
30 real(c_double),
intent(in),
dimension(ims:ime, jms:jme, kms:kme) :: den, p, delz
31 real(c_double),
value,
intent(in) :: delt, g, cpd, cpv, rd, rv, t0c, ep1, ep2, qmin, xls
32 real(c_double),
value,
intent(in) :: xlv0, xlf0, den0, denr, cliq, cice, psat
33 real(c_double),
intent(inout),
dimension(ims:ime, jms:jme) :: rain, rainncv, sr
34 real(c_double),
intent(inout),
dimension(ims:ime, jms:jme) :: snow, snowncv, graupel, graupelncv
36 integer :: i, j, k, kk, kdim
38 character(len=256) :: errmsg
40 real(c_double),
allocatable :: t_col(:,:), q_col(:,:), qc_col(:,:), qi_col(:,:), qr_col(:,:), qs_col(:,:), qg_col(:,:)
41 real(c_double),
allocatable :: den_col(:,:), p_col(:,:), delz_col(:,:)
42 real(c_double),
allocatable :: rain_col(:), rainncv_col(:), sr_col(:)
43 real(c_double),
allocatable :: snow_col(:), snowncv_col(:), graupel_col(:), graupelncv_col(:)
45 if (its < ims .or. ite > ime .or. jts < jms .or. jte > jme .or. kts < kms .or. kte > kme)
then
46 write(*,
'(A)')
'mp_wsm6_run_c bounds error: run-window outside storage bounds'
47 write(*,
'(A,6(1X,I0))')
' storage ims ime jms jme kms kme =', ims, ime, jms, jme, kms, kme
48 write(*,
'(A,6(1X,I0))')
' active its ite jts jte kts kte =', its, ite, jts, jte, kts, kte
51 if (its > ite .or. jts > jte .or. kts > kte)
then
52 write(*,
'(A)')
'mp_wsm6_run_c bounds error: invalid active index ordering'
53 write(*,
'(A,6(1X,I0))')
' active its ite jts jte kts kte =', its, ite, jts, jte, kts, kte
59 allocate(t_col(ims:ime,1:kdim), q_col(ims:ime,1:kdim), qc_col(ims:ime,1:kdim), qi_col(ims:ime,1:kdim))
60 allocate(qr_col(ims:ime,1:kdim), qs_col(ims:ime,1:kdim), qg_col(ims:ime,1:kdim))
61 allocate(den_col(ims:ime,1:kdim), p_col(ims:ime,1:kdim), delz_col(ims:ime,1:kdim))
62 allocate(rain_col(ims:ime), rainncv_col(ims:ime), sr_col(ims:ime))
63 allocate(snow_col(ims:ime), snowncv_col(ims:ime), graupel_col(ims:ime), graupelncv_col(ims:ime))
69 t_col(i,kk) = t(i,j,k)
70 q_col(i,kk) = qv(i,j,k)
71 qc_col(i,kk) = qc(i,j,k)
72 qi_col(i,kk) = qi(i,j,k)
73 qr_col(i,kk) = qr(i,j,k)
74 qs_col(i,kk) = qs(i,j,k)
75 qg_col(i,kk) = qg(i,j,k)
76 den_col(i,kk) = den(i,j,k)
77 p_col(i,kk) = p(i,j,k)
78 delz_col(i,kk) = delz(i,j,k)
83 rain_col(i) = rain(i,j)
84 rainncv_col(i) = rainncv(i,j)
86 snow_col(i) = snow(i,j)
87 snowncv_col(i) = snowncv(i,j)
88 graupel_col(i) = graupel(i,j)
89 graupelncv_col(i)= graupelncv(i,j)
92 call mp_wsm6_run(t_col, q_col, qc_col, qi_col, qr_col, qs_col, qg_col, den_col, p_col, delz_col, &
93 delt, g, cpd, cpv, rd, rv, t0c, ep1, ep2, qmin, xls, xlv0, xlf0, den0, denr, &
94 cliq, cice, psat, rain_col, rainncv_col, sr_col, snow_col, snowncv_col, &
95 graupel_col, graupelncv_col, its=its, ite=ite, kts=1, kte=kdim, errmsg=errmsg, errflg=errflg)
98 write(*,
'(A,1X,I0,2A)')
'mp_wsm6_run_c error at j=', j,
': ', trim(errmsg)
99 write(*,
'(A,6(1X,I0))')
' storage ims ime jms jme kms kme =', ims, ime, jms, jme, kms, kme
100 write(*,
'(A,6(1X,I0))')
' active its ite jts jte kts kte =', its, ite, jts, jte, kts, kte
107 t(i,j,k) = t_col(i,kk)
108 qv(i,j,k) = q_col(i,kk)
109 qc(i,j,k) = qc_col(i,kk)
110 qi(i,j,k) = qi_col(i,kk)
111 qr(i,j,k) = qr_col(i,kk)
112 qs(i,j,k) = qs_col(i,kk)
113 qg(i,j,k) = qg_col(i,kk)
118 rain(i,j) = rain_col(i)
119 rainncv(i,j) = rainncv_col(i)
121 snow(i,j) = snow_col(i)
122 snowncv(i,j) = snowncv_col(i)
123 graupel(i,j) = graupel_col(i)
124 graupelncv(i,j) = graupelncv_col(i)
128 deallocate(t_col, q_col, qc_col, qi_col, qr_col, qs_col, qg_col)
129 deallocate(den_col, p_col, delz_col)
130 deallocate(rain_col, rainncv_col, sr_col, snow_col, snowncv_col, graupel_col, graupelncv_col)