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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21