1 | !WRF:MODEL_LAYER:DYNAMICS |
---|
2 | ! |
---|
3 | MODULE module_avgflx_em |
---|
4 | |
---|
5 | USE module_bc |
---|
6 | USE module_model_constants |
---|
7 | USE module_wrf_error |
---|
8 | |
---|
9 | CONTAINS |
---|
10 | |
---|
11 | !------------------------------------------------------------------------------- |
---|
12 | |
---|
13 | |
---|
14 | subroutine zero_avgflx(avgflx_rum,avgflx_rvm,avgflx_wwm, & |
---|
15 | & ids, ide, jds, jde, kds, kde, & |
---|
16 | & ims, ime, jms, jme, kms, kme, & |
---|
17 | & its, ite, jts, jte, kts, kte, do_cu, & |
---|
18 | & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 ) |
---|
19 | |
---|
20 | IMPLICIT NONE |
---|
21 | |
---|
22 | INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, & |
---|
23 | ims, ime, jms, jme, kms, kme, & |
---|
24 | its, ite, jts, jte, kts, kte |
---|
25 | |
---|
26 | LOGICAL, INTENT(IN) :: do_cu |
---|
27 | |
---|
28 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & |
---|
29 | avgflx_rum,avgflx_rvm,avgflx_wwm |
---|
30 | |
---|
31 | REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & |
---|
32 | avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 |
---|
33 | |
---|
34 | INTEGER :: i,j,k |
---|
35 | |
---|
36 | DO j=jts,jte |
---|
37 | DO k=kts,kte |
---|
38 | DO i=its,ite |
---|
39 | avgflx_rum(i,k,j) = 0. |
---|
40 | avgflx_rvm(i,k,j) = 0. |
---|
41 | avgflx_wwm(i,k,j) = 0. |
---|
42 | end DO |
---|
43 | end DO |
---|
44 | end DO |
---|
45 | |
---|
46 | if (do_cu .and. & |
---|
47 | & present(avgflx_cfu1) .and. present(avgflx_cfd1) .and. present(avgflx_dfu1) & |
---|
48 | & .and. present(avgflx_efu1) .and. present(avgflx_dfd1) .and. present(avgflx_efd1) ) then |
---|
49 | DO j=jts,jte |
---|
50 | DO k=kts,kte |
---|
51 | DO i=its,ite |
---|
52 | avgflx_cfu1(i,k,j) = 0. |
---|
53 | avgflx_cfd1(i,k,j) = 0. |
---|
54 | avgflx_dfu1(i,k,j) = 0. |
---|
55 | avgflx_efu1(i,k,j) = 0. |
---|
56 | avgflx_dfd1(i,k,j) = 0. |
---|
57 | avgflx_efd1(i,k,j) = 0. |
---|
58 | end DO |
---|
59 | end DO |
---|
60 | end DO |
---|
61 | end if |
---|
62 | |
---|
63 | return |
---|
64 | end subroutine zero_avgflx |
---|
65 | |
---|
66 | subroutine upd_avgflx(avgflx_count,avgflx_rum,avgflx_rvm,avgflx_wwm, & |
---|
67 | & ru_m, rv_m, ww_m, & |
---|
68 | & ids, ide, jds, jde, kds, kde, & |
---|
69 | & ims, ime, jms, jme, kms, kme, & |
---|
70 | & its, ite, jts, jte, kts, kte, do_cu, & |
---|
71 | & cfu1,cfd1,dfu1,efu1,dfd1,efd1, & |
---|
72 | & avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 ) |
---|
73 | |
---|
74 | IMPLICIT NONE |
---|
75 | |
---|
76 | INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, & |
---|
77 | ims, ime, jms, jme, kms, kme, & |
---|
78 | its, ite, jts, jte, kts, kte |
---|
79 | |
---|
80 | INTEGER , INTENT(IN) :: avgflx_count |
---|
81 | LOGICAL, INTENT(IN) :: do_cu |
---|
82 | REAL, DIMENSION(ims:ime, kms:kme, jms:jme) , INTENT(IN) :: ru_m, & |
---|
83 | rv_m, & |
---|
84 | ww_m |
---|
85 | |
---|
86 | REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & |
---|
87 | avgflx_rum,avgflx_rvm,avgflx_wwm |
---|
88 | |
---|
89 | REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(IN) :: & |
---|
90 | cfu1,cfd1,dfu1,efu1,dfd1,efd1 |
---|
91 | REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: & |
---|
92 | avgflx_cfu1,avgflx_cfd1,avgflx_dfu1,avgflx_efu1,avgflx_dfd1,avgflx_efd1 |
---|
93 | |
---|
94 | INTEGER :: i,j,k |
---|
95 | REAL :: local_count |
---|
96 | |
---|
97 | local_count = real(avgflx_count) |
---|
98 | DO j=jts,jte |
---|
99 | DO k=kts,kte |
---|
100 | DO i=its,ite |
---|
101 | avgflx_rum(i,k,j) = (local_count*avgflx_rum(i,k,j) + ru_m(i,k,j))/(local_count+1.) |
---|
102 | avgflx_rvm(i,k,j) = (local_count*avgflx_rvm(i,k,j) + rv_m(i,k,j))/(local_count+1.) |
---|
103 | avgflx_wwm(i,k,j) = (local_count*avgflx_wwm(i,k,j) + ww_m(i,k,j))/(local_count+1.) |
---|
104 | end DO |
---|
105 | end DO |
---|
106 | end DO |
---|
107 | |
---|
108 | if (do_cu .and. & |
---|
109 | & present(avgflx_cfu1) .and. present(avgflx_cfd1) .and. present(avgflx_dfu1) & |
---|
110 | & .and. present(avgflx_efu1) .and. present(avgflx_dfd1) .and. present(avgflx_efd1) & |
---|
111 | & .and. present(cfu1) .and. present(cfd1) .and. present(dfu1) & |
---|
112 | & .and. present(efu1) .and. present(dfd1) .and. present(efd1) ) then |
---|
113 | DO j=jts,jte |
---|
114 | DO k=kts,kte |
---|
115 | DO i=its,ite |
---|
116 | avgflx_cfu1(i,k,j) = (local_count*avgflx_cfu1(i,k,j) + & |
---|
117 | & cfu1(i,k,j)) / (local_count+1.) |
---|
118 | avgflx_cfd1(i,k,j) = (local_count*avgflx_cfd1(i,k,j) + & |
---|
119 | & cfd1(i,k,j)) / (local_count+1.) |
---|
120 | avgflx_dfu1(i,k,j) = (local_count*avgflx_dfu1(i,k,j) + & |
---|
121 | & dfu1(i,k,j)) / (local_count+1.) |
---|
122 | avgflx_efu1(i,k,j) = (local_count*avgflx_efu1(i,k,j) + & |
---|
123 | & efu1(i,k,j)) / (local_count+1.) |
---|
124 | avgflx_dfd1(i,k,j) = (local_count*avgflx_dfd1(i,k,j) + & |
---|
125 | & dfd1(i,k,j)) / (local_count+1.) |
---|
126 | avgflx_efd1(i,k,j) = (local_count*avgflx_efd1(i,k,j) + & |
---|
127 | & efd1(i,k,j)) / (local_count+1.) |
---|
128 | end DO |
---|
129 | end DO |
---|
130 | end DO |
---|
131 | end if |
---|
132 | |
---|
133 | return |
---|
134 | end subroutine upd_avgflx |
---|
135 | end MODULE module_avgflx_em |
---|