/[lmdze]/trunk/dyn3d/Dissipation/dissip.f
ViewVC logotype

Contents of /trunk/dyn3d/Dissipation/dissip.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 55 - (show annotations)
Mon Dec 12 13:25:01 2011 UTC (12 years, 6 months ago) by guez
Original Path: trunk/libf/dyn3d/Dissipation/dissip.f90
File size: 2720 byte(s)
-- In procedure "bilan_dyn", replaced average of "zvq" by integral of
"zvq", following a comment of Francis Codron :

Le calcul actuel donne des unités peu pratiques : transports de
chaleur en K m / s par exemple. C'est bien pour les sorties à 2
dimensions, latitude et pression, car alors le transport ne dépend pas
de l'espacement des niveaux, mieux pour comparer ou tracer en latitude
et pression. Par contre, quand on somme sur la verticale, on
préfèrerait avoir des transports d'énergie en watts, ou au moins an K
kg / s (à multiplier par "Cp" ou "L"). On doit pouvoir recalculer le
transport intégré à partir des fichiers de sortie, mais c'est embêtant
(calcul de "cv").

-- Gathered files in directory Dissipation.

1 module dissip_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE dissip(vcov, ucov, teta, p, dv, du, dh)
8
9 ! From dyn3d/dissip.F, version 1.1.1.1 2004/05/19 12:53:05
10 ! Avec nouveaux opérateurs star : gradiv2, divgrad2, nxgraro2
11 ! Author: P. Le Van
12 ! Objet : dissipation horizontale
13
14 USE dimens_m, ONLY: iim, jjm, llm
15 USE paramet_m, ONLY: iip1, iip2, ip1jmp1, llmp1
16 USE comdissnew, ONLY: lstardis, nitergdiv, nitergrot, niterh
17 USE inidissip_m, ONLY: dtdiss, tetah, tetaudiv, tetaurot, cdivu, crot, cdivh
18 use gradiv2_m, only: gradiv2
19
20 REAL, intent(in):: vcov(:, :, :) ! (iim + 1, jjm, llm)
21 REAL, intent(in):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm)
22 REAL, intent(in):: teta((iim + 1) * (jjm + 1), llm)
23 REAL, INTENT(IN):: p((iim + 1) * (jjm + 1), llmp1)
24 REAL, intent(out):: dv(:, :, :) ! (iim + 1, jjm, llm)
25 REAL, intent(out):: du(:, :, :) ! (iim + 1, jjm + 1, llm)
26 REAL, intent(out):: dh(:, :, :) ! (iim + 1, jjm + 1, llm)
27
28 ! Local:
29 REAL gdx(iim + 1, jjm + 1, llm), gdy(iim + 1, jjm, llm)
30 REAL grx(iim + 1, jjm + 1, llm), gry(iim + 1, jjm, llm)
31 REAL te1dt(llm), te2dt(llm), te3dt(llm)
32 REAL deltapres((iim + 1) * (jjm + 1), llm)
33 INTEGER l
34
35 !-----------------------------------------------------------------------
36
37 ! Initializations:
38 te1dt = tetaudiv * dtdiss
39 te2dt = tetaurot * dtdiss
40 te3dt = tetah * dtdiss
41 du = 0.
42 dv = 0.
43 dh = 0.
44
45 ! Calcul de la dissipation:
46
47 ! Calcul de la partie grad (div) :
48
49 IF (lstardis) THEN
50 CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
51 ELSE
52 CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
53 END IF
54
55 gdx(:, 1, :) = 0.
56 gdx(:, jjm + 1, :) = 0.
57 forall (l = 1: llm)
58 du(:, 2: jjm, l) = du(:, 2: jjm, l) - te1dt(l) * gdx(:, 2: jjm, l)
59 dv(:, :, l) = dv(:, :, l) - te1dt(l) * gdy(:, :, l)
60 END forall
61
62 ! calcul de la partie n X grad (rot) :
63
64 IF (lstardis) THEN
65 CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry, crot)
66 ELSE
67 CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry, crot)
68 END IF
69
70
71 grx(:, 1, :) = 0.
72 forall (l = 1: llm)
73 du(:, 2: jjm, l) = du(:, 2: jjm, l) - te2dt(l) * grx(:, 2: jjm, l)
74 dv(:, :, l) = dv(:, :, l) - te2dt(l) * gry(:, :, l)
75 END forall
76
77 ! calcul de la partie div (grad) :
78
79 IF (lstardis) THEN
80 forall (l = 1: llm) deltapres(:, l) = max(0., p(:, l) - p(:, l + 1))
81 CALL divgrad2(llm, teta, deltapres, niterh, gdx, cdivh)
82 ELSE
83 CALL divgrad(llm, teta, niterh, gdx, cdivh)
84 END IF
85
86 forall (l = 1: llm) dh(:, :, l) = dh(:, :, l) - te3dt(l) * gdx(:, :, l)
87
88 END SUBROUTINE dissip
89
90 end module dissip_m

  ViewVC Help
Powered by ViewVC 1.1.21