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

Contents of /trunk/dyn3d/sortvarc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 257 - (show annotations)
Tue Mar 6 14:49:28 2018 UTC (6 years, 2 months ago) by guez
File size: 3306 byte(s)
Remove intermediary variable ge when not useful.

1 module sortvarc_m
2
3 IMPLICIT NONE
4
5 real, save:: ang, etot, ptot, ztot, stot, rmsdpdt, rmsv
6
7 contains
8
9 SUBROUTINE sortvarc(ucov, teta, ps, masse, pk, phis, vorpot, phi, bern, dp, &
10 resetvarc)
11
12 ! From dyn3d/sortvarc.F, version 1.1.1.1, 2004/05/19 12:53:07
13 ! Author: P. Le Van
14 ! Objet : sortie des variables de contr\^ole
15
16 USE comconst, ONLY: daysec, g, omeg, rad
17 USE comgeom, ONLY: aire_2d, cu_2d
18 USE dimens_m, ONLY: iim, jjm, llm
19 use dynetat0_m, ONLY: rlatu
20 USE ener, ONLY: ang0, etot0, ptot0, stot0, ztot0
21 use filtreg_scal_m, only: filtreg_scal
22 use massbarxy_m, only: massbarxy
23 USE paramet_m, ONLY: jjp1
24
25 REAL, INTENT(IN):: ucov(iim + 1, jjm + 1, llm)
26 REAL, INTENT(IN):: teta(iim + 1, jjm + 1, llm)
27 REAL, INTENT(IN):: ps(iim + 1, jjm + 1)
28 REAL, INTENT(IN):: masse(iim + 1, jjm + 1, llm)
29 REAL, INTENT(IN):: pk(iim + 1, jjm + 1, llm)
30 REAL, INTENT(IN):: phis(iim + 1, jjm + 1)
31 REAL, INTENT(IN):: vorpot(:, :, :) ! (iim + 1, jjm, llm)
32 REAL, intent(in):: phi(iim + 1, jjm + 1, llm)
33 real, intent(in):: bern(iim + 1, jjm + 1, llm)
34 REAL, intent(in):: dp(iim + 1, jjm + 1)
35 logical, intent(in):: resetvarc
36
37 ! Local:
38 REAL bernf(iim + 1, jjm + 1, llm)
39 REAL etotl(llm), stotl(llm), rmsvl(llm), angl(llm), ge(iim, 2:jjm)
40 REAL cosphi(2:jjm)
41 REAL radsg, radomeg
42 REAL massebxy(iim + 1, jjm, llm)
43 INTEGER j, l
44
45 !-----------------------------------------------------------------------
46
47 PRINT *, "Call sequence information: sortvarc"
48
49 CALL massbarxy(masse, massebxy)
50
51 ! Calcul de rmsdpdt
52 rmsdpdt = sum(dp(:iim, :)**2)
53 rmsdpdt = daysec * 1.E-2 * sqrt(rmsdpdt / (iim * jjp1))
54 bernf = bern
55 CALL filtreg_scal(bernf, direct = .false., intensive = .false.)
56
57 ! Calcul du moment angulaire
58 radsg = rad/g
59 radomeg = rad * omeg
60 cosphi = cos(rlatu(2:jjm))
61
62 ! Calcul de l'energie, de l'enstrophie, de l'entropie et de rmsv
63
64 DO l = 1, llm
65 etotl(l) = sum(masse(:iim, :, l) * (phis(:iim, :) + teta(:iim, :, l) &
66 * pk(:iim, :, l) + bernf(:iim, :, l) - phi(:iim, :, l)))
67 stotl(l) = sum(masse(:iim, :, l) * teta(:iim, :, l))
68 rmsvl(l) = 2. * sum(masse(:iim, :, l) &
69 * max(bernf(:iim, :, l) - phi(:iim, :, l), 0.))
70
71 forall (j = 2:jjm) ge(:, j) = (ucov(:iim, j, l) / cu_2d(:iim, j) &
72 + radomeg * cosphi(j)) * masse(:iim, j, l) * cosphi(j)
73 angl(l) = radsg * sum(ge)
74 END DO
75
76 ptot = sum(ps(:iim, :) * aire_2d(:iim, :))
77 etot = sum(etotl)
78 ztot = sum(vorpot(:iim, :, :)**2 * massebxy(:iim, :, :))
79 stot = sum(stotl)
80 rmsv = sum(rmsvl)
81 ang = sum(angl)
82
83 IF (resetvarc .or. ptot0 == 0.) then
84 print *, 'sortvarc: recomputed initial values.'
85 etot0 = etot
86 ptot0 = ptot
87 ztot0 = ztot
88 stot0 = stot
89 ang0 = ang
90 PRINT *, 'ptot0 = ', ptot0
91 PRINT *, 'etot0 = ', etot0
92 PRINT *, 'ztot0 = ', ztot0
93 PRINT *, 'stot0 = ', stot0
94 PRINT *, 'ang0 = ', ang0
95 END IF
96
97 IF (.not. resetvarc) then
98 etot = etot/etot0
99 rmsv = sqrt(rmsv/ptot)
100 ptot = ptot/ptot0
101 ztot = ztot/ztot0
102 stot = stot/stot0
103 ang = ang/ang0
104 end IF
105
106 END SUBROUTINE sortvarc
107
108 end module sortvarc_m

  ViewVC Help
Powered by ViewVC 1.1.21