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

Annotation of /trunk/dyn3d/sortvarc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 256 - (hide annotations)
Tue Mar 6 14:29:20 2018 UTC (6 years, 2 months ago) by guez
File size: 3354 byte(s)
Replace sum(ge) - sum(ge(1, :)) by sum(ge(:iim, :)) in procedure
sortvarc. Remove intermediary variables vor and ztotl.

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

  ViewVC Help
Powered by ViewVC 1.1.21