/[lmdze]/trunk/libf/dyn3d/addfi.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/addfi.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 71 - (show annotations)
Mon Jul 8 18:12:18 2013 UTC (10 years, 9 months ago) by guez
File size: 3029 byte(s)
No reason to call inidissip in ce0l.

In inidissip, set random seed to 1 beacuse PGI compiler does not
accept all zeros.

dq was computed needlessly in caladvtrac. Arguments masse and dq of
calfis not used.

Replaced real*8 by double precision.

Pass arrays with inverted order of vertical levels to conflx instead
of creating local variables for this inside conflx.

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

  ViewVC Help
Powered by ViewVC 1.1.21