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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 265 - (show annotations)
Tue Mar 20 09:35:59 2018 UTC (6 years, 1 month ago) by guez
File size: 2672 byte(s)
Rename module dimens_m to dimensions.
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 ! Author: P. Le Van
11 ! Objet : calcul de la dissipation horizontale
12 ! Avec opérateurs star : gradiv2, divgrad2, nxgraro2
13
14 USE comdissnew, ONLY: nitergdiv, nitergrot, niterh
15 USE dimensions, ONLY: iim, jjm, llm
16 use divgrad2_m, only: divgrad2
17 use gradiv2_m, only: gradiv2
18 USE inidissip_m, ONLY: dtdiss, tetah, tetaudiv, tetaurot, cdivu, crot, cdivh
19 use nr_util, only: assert
20 use nxgraro2_m, only: nxgraro2
21
22 REAL, intent(in):: vcov(:, :, :) ! (iim + 1, jjm, llm)
23 REAL, intent(in):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm)
24 REAL, intent(in):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
25 REAL, INTENT(IN):: p(:, :, :) ! (iim + 1, jjm + 1, llm + 1)
26 REAL, intent(out):: dv(:, :, :) ! (iim + 1, jjm, llm)
27 REAL, intent(out):: du(:, :, :) ! (iim + 1, jjm + 1, llm)
28 REAL, intent(out):: dh(:, :, :) ! (iim + 1, jjm + 1, llm)
29
30 ! Local:
31 REAL gdx(iim + 1, jjm + 1, llm), gdy(iim + 1, jjm, llm)
32 REAL tedt(llm)
33 REAL deltapres(iim + 1, jjm + 1, llm)
34 INTEGER l
35
36 !-----------------------------------------------------------------------
37
38 call assert((/size(vcov, 1), size(ucov, 1), size(teta, 1), size(p, 1), &
39 size(dv, 1), size(du, 1), size(dh, 1)/) == iim + 1, "dissip iim")
40 call assert((/size(vcov, 2), size(ucov, 2) - 1, size(teta, 2) - 1, &
41 size(p, 2) - 1, size(dv, 2), size(du, 2) - 1, size(dh, 2) - 1/) &
42 == jjm, "dissip jjm")
43 call assert((/size(vcov, 3), size(ucov, 3), size(teta, 3), size(p, 3) - 1, &
44 size(dv, 3), size(du, 3), size(dh, 3)/) == llm, "dissip llm")
45
46 du(:, 1, :) = 0.
47 du(:, jjm + 1, :) = 0.
48
49 ! Calcul de la partie grad(div) :
50 CALL gradiv2(ucov, vcov, nitergdiv, gdx, gdy, cdivu)
51 tedt = tetaudiv * dtdiss
52 forall (l = 1: llm)
53 du(:, 2: jjm, l) = - tedt(l) * gdx(:, 2: jjm, l)
54 dv(:, :, l) = - tedt(l) * gdy(:, :, l)
55 END forall
56
57 ! Calcul de la partie n X grad(rot) :
58 CALL nxgraro2(ucov, vcov, nitergrot, gdx, gdy, crot)
59 tedt = tetaurot * dtdiss
60 forall (l = 1: llm)
61 du(:, 2: jjm, l) = du(:, 2: jjm, l) - tedt(l) * gdx(:, 2: jjm, l)
62 dv(:, :, l) = dv(:, :, l) - tedt(l) * gdy(:, :, l)
63 END forall
64
65 ! calcul de la partie div(grad) :
66 forall (l = 1: llm) &
67 deltapres(:, :, l) = max(0., p(:, :, l) - p(:, :, l + 1))
68 CALL divgrad2(llm, teta, deltapres, niterh, gdx, cdivh)
69 forall (l = 1: llm) dh(:, :, l) = - tetah(l) * dtdiss * gdx(:, :, l)
70
71 END SUBROUTINE dissip
72
73 end module dissip_m

  ViewVC Help
Powered by ViewVC 1.1.21