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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 55 - (hide 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 guez 47 module dissip_m
2 guez 3
3 guez 47 IMPLICIT NONE
4 guez 3
5 guez 47 contains
6 guez 3
7 guez 47 SUBROUTINE dissip(vcov, ucov, teta, p, dv, du, dh)
8 guez 3
9 guez 47 ! 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 guez 3
14 guez 55 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 guez 54 use gradiv2_m, only: gradiv2
19 guez 3
20 guez 55 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 guez 3
28 guez 47 ! Local:
29 guez 55 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 guez 47 REAL te1dt(llm), te2dt(llm), te3dt(llm)
32 guez 55 REAL deltapres((iim + 1) * (jjm + 1), llm)
33     INTEGER l
34 guez 3
35 guez 47 !-----------------------------------------------------------------------
36 guez 3
37 guez 47 ! Initializations:
38     te1dt = tetaudiv * dtdiss
39     te2dt = tetaurot * dtdiss
40     te3dt = tetah * dtdiss
41     du = 0.
42     dv = 0.
43     dh = 0.
44 guez 3
45 guez 47 ! Calcul de la dissipation:
46 guez 3
47 guez 47 ! Calcul de la partie grad (div) :
48 guez 3
49 guez 47 IF (lstardis) THEN
50 guez 54 CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
51 guez 47 ELSE
52 guez 54 CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
53 guez 47 END IF
54 guez 3
55 guez 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 guez 3
62 guez 47 ! calcul de la partie n X grad (rot) :
63 guez 3
64 guez 47 IF (lstardis) THEN
65 guez 54 CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry, crot)
66 guez 47 ELSE
67 guez 54 CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry, crot)
68 guez 47 END IF
69 guez 3
70    
71 guez 55 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 guez 3
77 guez 47 ! calcul de la partie div (grad) :
78 guez 3
79 guez 47 IF (lstardis) THEN
80 guez 55 forall (l = 1: llm) deltapres(:, l) = max(0., p(:, l) - p(:, l + 1))
81 guez 54 CALL divgrad2(llm, teta, deltapres, niterh, gdx, cdivh)
82 guez 47 ELSE
83 guez 54 CALL divgrad(llm, teta, niterh, gdx, cdivh)
84 guez 47 END IF
85 guez 3
86 guez 55 forall (l = 1: llm) dh(:, :, l) = dh(:, :, l) - te3dt(l) * gdx(:, :, l)
87 guez 47
88     END SUBROUTINE dissip
89    
90     end module dissip_m

  ViewVC Help
Powered by ViewVC 1.1.21