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

Contents of /trunk/dyn3d/sortvarc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 76 - (show annotations)
Fri Nov 15 18:45:49 2013 UTC (10 years, 6 months ago) by guez
Original Path: trunk/dyn3d/sortvarc.f90
File size: 4459 byte(s)
Moved everything out of libf.
1 module sortvarc_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE sortvarc(itau, ucov, teta, ps, masse, pk, phis, vorpot, phi, &
8 bern, dp, time_0)
9
10 ! From dyn3d/sortvarc.F, version 1.1.1.1 2004/05/19 12:53:07
11 ! Author: P. Le Van
12 ! Objet : sortie des variables de contrĂ´le
13
14 USE comconst, ONLY: daysec, dtvr, g, omeg, rad
15 USE comgeom, ONLY: aire, cu, rlatu
16 USE conf_gcm_m, ONLY: day_step
17 USE dimens_m, ONLY: iim, jjm, llm
18 USE dynetat0_m, ONLY: day_ini
19 USE ener, ONLY: ang, ang0, etot, etot0, ptot, ptot0, rmsdpdt, rmsv, &
20 stot, stot0, ztot, ztot0
21 use filtreg_m, only: filtreg
22 USE paramet_m, ONLY: iip1, iip2, ijp1llm, ip1jm, ip1jmp1, jjp1
23
24 INTEGER, INTENT(IN):: itau
25 REAL, INTENT(IN):: ucov(ip1jmp1, llm)
26 real, intent(in):: teta(ip1jmp1, llm)
27 REAL, INTENT(IN):: ps(ip1jmp1)
28 REAL, INTENT(IN):: masse(ip1jmp1, llm)
29 REAL, INTENT (IN):: pk(ip1jmp1, llm)
30 REAL, INTENT(IN):: phis(ip1jmp1)
31 REAL, INTENT(IN):: vorpot(ip1jm, llm)
32 REAL, intent(in):: phi(ip1jmp1, llm)
33 real, intent(in):: bern(ip1jmp1, llm)
34 REAL, intent(in):: dp(ip1jmp1)
35 REAL, INTENT (IN):: time_0
36
37 ! Local:
38 REAL:: vor(ip1jm), bernf(ip1jmp1, llm), ztotl(llm)
39 REAL:: etotl(llm), stotl(llm), rmsvl(llm), angl(llm), ge(ip1jmp1)
40 REAL:: cosphi(ip1jm), omegcosp(ip1jm)
41 REAL:: dtvrs1j, rjour, heure, radsg, radomeg
42 real massebxy(ip1jm, llm)
43 INTEGER:: l, ij, imjmp1
44 REAL:: ssum
45 real time
46
47 !-----------------------------------------------------------------------
48
49 print *, "Call sequence information: sortvarc"
50
51 time = real(itau) / day_step + time_0
52 dtvrs1j = dtvr/daysec
53 rjour = real(int(itau*dtvrs1j))
54 heure = (itau*dtvrs1j-rjour)*24.
55 imjmp1 = iim*jjp1
56 IF (abs(heure-24.)<=0.0001) heure = 0.
57
58 CALL massbarxy(masse, massebxy)
59
60 ! Calcul de rmsdpdt
61 ge(:) = dp(:)*dp(:)
62 rmsdpdt = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
63 rmsdpdt = daysec*1.E-2*sqrt(rmsdpdt/imjmp1)
64 bernf = bern
65 CALL filtreg(bernf, jjp1, llm, -2, 2, .TRUE.)
66
67 ! Calcul du moment angulaire
68 radsg = rad/g
69 radomeg = rad*omeg
70 DO ij = iip2, ip1jm
71 cosphi(ij) = cos(rlatu((ij-1)/iip1+1))
72 omegcosp(ij) = radomeg*cosphi(ij)
73 END DO
74
75 ! Calcul de l'energie, de l'enstrophie, de l'entropie et de rmsv
76 DO l = 1, llm
77 DO ij = 1, ip1jm
78 vor(ij) = vorpot(ij, l)*vorpot(ij, l)*massebxy(ij, l)
79 END DO
80 ztotl(l) = (ssum(ip1jm, vor, 1)-ssum(jjm, vor, iip1))
81
82 DO ij = 1, ip1jmp1
83 ge(ij) = masse(ij, l) * (phis(ij) + teta(ij, l) * pk(ij, l) &
84 + bernf(ij, l)-phi(ij, l))
85 END DO
86 etotl(l) = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
87
88 DO ij = 1, ip1jmp1
89 ge(ij) = masse(ij, l)*teta(ij, l)
90 END DO
91 stotl(l) = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
92
93 DO ij = 1, ip1jmp1
94 ge(ij) = masse(ij, l)*amax1(bernf(ij, l)-phi(ij, l), 0.)
95 END DO
96 rmsvl(l) = 2.*(ssum(ip1jmp1, ge, 1)-ssum(jjp1, ge, iip1))
97
98 DO ij = iip2, ip1jm
99 ge(ij) = (ucov(ij, l)/cu(ij)+omegcosp(ij))*masse(ij, l)*cosphi(ij)
100 END DO
101 angl(l) = radsg * (ssum(ip1jm-iip1, ge(iip2), 1) &
102 - ssum(jjm-1, ge(iip2), iip1))
103 END DO
104
105 DO ij = 1, ip1jmp1
106 ge(ij) = ps(ij)*aire(ij)
107 END DO
108 ptot = ssum(ip1jmp1, ge, 1) - ssum(jjp1, ge, iip1)
109 etot = ssum(llm, etotl, 1)
110 ztot = ssum(llm, ztotl, 1)
111 stot = ssum(llm, stotl, 1)
112 rmsv = ssum(llm, rmsvl, 1)
113 ang = ssum(llm, angl, 1)
114
115 IF (ptot0 == 0.) THEN
116 PRINT *, 'WARNING!!! On recalcule les valeurs initiales de :'
117 PRINT *, 'ptot, rmsdpdt, etot, ztot, stot, rmsv, ang'
118 PRINT *, ptot, rmsdpdt, etot, ztot, stot, rmsv, ang
119 etot0 = etot
120 ptot0 = ptot
121 ztot0 = ztot
122 stot0 = stot
123 ang0 = ang
124 END IF
125
126 etot = etot/etot0
127 rmsv = sqrt(rmsv/ptot)
128 ptot = ptot/ptot0
129 ztot = ztot/ztot0
130 stot = stot/stot0
131 ang = ang/ang0
132
133 PRINT 3500, itau, int(day_ini + time), heure, time
134 PRINT 4000, ptot, rmsdpdt, etot, ztot, stot, rmsv, ang
135
136 3500 FORMAT (4X, 'pas', I7, 5X, 'jour', i5, 1X, 'heure', F5.1, 4X, 'date', &
137 F10.5)
138 4000 FORMAT (10X, 'masse', 4X, 'rmsdpdt', 7X, 'energie', 2X, 'enstrophie', &
139 2X, 'entropie', 3X, 'rmsv', 4X, 'mt.ang', /, 'GLOB ', F10.6, &
140 E13.6, 5F10.3/)
141
142 END SUBROUTINE sortvarc
143
144 end module sortvarc_m

  ViewVC Help
Powered by ViewVC 1.1.21