/[lmdze]/trunk/libf/dyn3d/dissip.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/dissip.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 47 - (show annotations)
Fri Jul 1 15:00:48 2011 UTC (12 years, 10 months ago) by guez
File size: 2697 byte(s)
Split "thermcell.f" and "cv3_routines.f".
Removed copies of files that are now in "L_util".
Moved "mva9" and "diagetpq" to their own files.
Unified variable names across procedures.

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
18
19 ! Arguments:
20 REAL vcov((iim + 1) * jjm, llm), ucov(ip1jmp1, llm), teta(ip1jmp1, llm)
21 REAL, INTENT (IN) :: p(ip1jmp1, llmp1)
22 REAL dv((iim + 1) * jjm, llm), du(ip1jmp1, llm), dh(ip1jmp1, llm)
23
24 ! Local:
25 REAL gdx(ip1jmp1, llm), gdy((iim + 1) * jjm, llm)
26 REAL grx(ip1jmp1, llm), gry((iim + 1) * jjm, llm)
27 REAL te1dt(llm), te2dt(llm), te3dt(llm)
28 REAL deltapres(ip1jmp1, llm)
29
30 INTEGER l, ij
31
32 !-----------------------------------------------------------------------
33
34 ! Initializations:
35 te1dt = tetaudiv * dtdiss
36 te2dt = tetaurot * dtdiss
37 te3dt = tetah * dtdiss
38 du = 0.
39 dv = 0.
40 dh = 0.
41
42 ! Calcul de la dissipation:
43
44 ! Calcul de la partie grad (div) :
45
46 IF (lstardis) THEN
47 CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy)
48 ELSE
49 CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy)
50 END IF
51
52 DO l = 1, llm
53 DO ij = 1, iip1
54 gdx(ij, l) = 0.
55 gdx(ij+(iim + 1) * jjm, l) = 0.
56 END DO
57
58 DO ij = iip2, (iim + 1) * jjm
59 du(ij, l) = du(ij, l) - te1dt(l) * gdx(ij, l)
60 END DO
61 DO ij = 1, (iim + 1) * jjm
62 dv(ij, l) = dv(ij, l) - te1dt(l) * gdy(ij, l)
63 END DO
64 END DO
65
66 ! calcul de la partie n X grad (rot) :
67
68 IF (lstardis) THEN
69 CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry)
70 ELSE
71 CALL nxgrarot(llm, ucov, vcov, nitergrot, grx, gry)
72 END IF
73
74
75 DO l = 1, llm
76 DO ij = 1, iip1
77 grx(ij, l) = 0.
78 END DO
79
80 DO ij = iip2, (iim + 1) * jjm
81 du(ij, l) = du(ij, l) - te2dt(l) * grx(ij, l)
82 END DO
83 DO ij = 1, (iim + 1) * jjm
84 dv(ij, l) = dv(ij, l) - te2dt(l) * gry(ij, l)
85 END DO
86 END DO
87
88 ! calcul de la partie div (grad) :
89
90 IF (lstardis) THEN
91 DO l = 1, llm
92 DO ij = 1, ip1jmp1
93 deltapres(ij, l) = max(0., p(ij, l) - p(ij, l + 1))
94 END DO
95 END DO
96
97 CALL divgrad2(llm, teta, deltapres, niterh, gdx)
98 ELSE
99 CALL divgrad(llm, teta, niterh, gdx)
100 END IF
101
102 forall (l = 1: llm) dh(:, l) = dh(:, l) - te3dt(l) * gdx(:, l)
103
104 END SUBROUTINE dissip
105
106 end module dissip_m

  ViewVC Help
Powered by ViewVC 1.1.21