/[lmdze]/trunk/dyn3d/addfi.f
ViewVC logotype

Contents of /trunk/dyn3d/addfi.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 70 - (show annotations)
Mon Jun 24 15:39:52 2013 UTC (10 years, 11 months ago) by guez
Original Path: trunk/libf/dyn3d/addfi.f90
File size: 2986 byte(s)
In procedure, "addfi" access directly the module variable "dtphys"
instead of going through an argument.

In "conflx", do not create a local variable for temperature with
reversed order of vertical levels. Instead, give an actual argument
with reversed order in "physiq".

Changed names of variables "rmd" and "rmv" from module "suphec_m" to
"md" and "mv".

In "hgardfou", print only the first temperature out of range found.

1 module addfi_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE addfi(nq, ucov, vcov, teta, pq, pps, dufi, dvfi, pdhfi, &
8 pdqfi, pdpfi)
9
10 ! From dyn3d/addfi.F, v 1.1.1.1 2004/05/19 12:53:06
11
12 ! Addition of the physical tendencies
13
14 USE comconst, ONLY: dtphys
15 USE comgeom, ONLY: aire, apoln, apols
16 USE dimens_m, ONLY: iim, llm
17 USE paramet_m, ONLY: iip1, iip2, ip1jm, ip1jmp1
18
19 INTEGER, intent(in):: nq
20
21 REAL, intent(inout):: ucov(ip1jmp1, llm), vcov(ip1jm, llm)
22 ! first and second components of the covariant velocity
23
24 REAL, intent(inout):: teta(ip1jmp1, llm) ! potential temperature
25 real, intent(inout):: pq(ip1jmp1, llm, nq), pps(ip1jmp1)
26 REAL, intent(in):: dufi(ip1jmp1, llm), dvfi(ip1jm, llm) ! tendencies
27 real, intent(in):: pdhfi(ip1jmp1, llm) ! tendency
28 REAL, intent(in):: pdqfi(ip1jmp1, llm, nq), pdpfi(ip1jmp1)
29
30 ! Local variables :
31 REAL xpn(iim), xps(iim), tpn, tps
32 INTEGER j, k, iq, ij
33 REAL, PARAMETER:: qtestw = 1e-15, qtestt = 1e-40
34
35 !-----------------------------------------------------------------------
36
37 DO k = 1, llm
38 DO j = 1, ip1jmp1
39 teta(j, k)= teta(j, k) + pdhfi(j, k) * dtphys
40 ENDDO
41 ENDDO
42
43 DO k = 1, llm
44 DO ij = 1, iim
45 xpn(ij) = aire(ij) * teta(ij , k)
46 xps(ij) = aire(ij+ip1jm) * teta(ij+ip1jm, k)
47 ENDDO
48 tpn = SUM(xpn)/ apoln
49 tps = SUM(xps)/ apols
50
51 DO ij = 1, iip1
52 teta(ij , k) = tpn
53 teta(ij+ip1jm, k) = tps
54 ENDDO
55 ENDDO
56
57 DO k = 1, llm
58 DO j = iip2, ip1jm
59 ucov(j, k)= ucov(j, k) + dufi(j, k) * dtphys
60 ENDDO
61 ENDDO
62
63 DO k = 1, llm
64 DO j = 1, ip1jm
65 vcov(j, k)= vcov(j, k) + dvfi(j, k) * dtphys
66 ENDDO
67 ENDDO
68
69 DO j = 1, ip1jmp1
70 pps(j) = pps(j) + pdpfi(j) * dtphys
71 ENDDO
72
73 DO iq = 1, 2
74 DO k = 1, llm
75 DO j = 1, ip1jmp1
76 pq(j, k, iq)= pq(j, k, iq) + pdqfi(j, k, iq) * dtphys
77 pq(j, k, iq)= MAX(pq(j, k, iq), qtestw)
78 ENDDO
79 ENDDO
80 ENDDO
81
82 DO iq = 3, nq
83 DO k = 1, llm
84 DO j = 1, ip1jmp1
85 pq(j, k, iq)= pq(j, k, iq) + pdqfi(j, k, iq) * dtphys
86 pq(j, k, iq)= MAX(pq(j, k, iq), qtestt)
87 ENDDO
88 ENDDO
89 ENDDO
90
91 DO ij = 1, iim
92 xpn(ij) = aire(ij) * pps(ij)
93 xps(ij) = aire(ij+ip1jm) * pps(ij+ip1jm)
94 ENDDO
95 tpn = SUM(xpn)/apoln
96 tps = SUM(xps)/apols
97
98 DO ij = 1, iip1
99 pps (ij) = tpn
100 pps (ij+ip1jm) = tps
101 ENDDO
102
103 DO iq = 1, nq
104 DO k = 1, llm
105 DO ij = 1, iim
106 xpn(ij) = aire(ij) * pq(ij , k, iq)
107 xps(ij) = aire(ij+ip1jm) * pq(ij+ip1jm, k, iq)
108 ENDDO
109 tpn = SUM(xpn)/apoln
110 tps = SUM(xps)/apols
111
112 DO ij = 1, iip1
113 pq (ij , k, iq) = tpn
114 pq (ij+ip1jm, k, iq) = tps
115 ENDDO
116 ENDDO
117 ENDDO
118
119 END SUBROUTINE addfi
120
121 end module addfi_m

  ViewVC Help
Powered by ViewVC 1.1.21