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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 64 - (show annotations)
Wed Aug 29 14:47:17 2012 UTC (11 years, 9 months ago) by guez
File size: 2671 byte(s)
Removed variable lstardis in module comdissnew and procedures gradiv
and nxgrarot. lstardir had to be true. gradiv and nxgrarot were called
if lstardis was false. Removed argument iter of procedure
filtreg. iter had to be 1. gradiv and nxgrarot called filtreg with
iter == 2.

Moved procedure flxsetup into module yoecumf. Module yoecumf is only
used in program units of directory Conflx, moved it there.

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 dimens_m, ONLY: iim, jjm, llm
15 USE comdissnew, ONLY: nitergdiv, nitergrot, niterh
16 USE inidissip_m, ONLY: dtdiss, tetah, tetaudiv, tetaurot, cdivu, crot, cdivh
17 use gradiv2_m, only: gradiv2
18 use nr_util, only: assert
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, llm + 1)
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 tedt(llm)
32 REAL deltapres(iim + 1, jjm + 1, llm)
33 INTEGER l
34
35 !-----------------------------------------------------------------------
36
37 call assert((/size(vcov, 1), size(ucov, 1), size(teta, 1), size(p, 1), &
38 size(dv, 1), size(du, 1), size(dh, 1)/) == iim + 1, "dissip iim")
39 call assert((/size(vcov, 2), size(ucov, 2) - 1, size(teta, 2) - 1, &
40 size(p, 2) - 1, size(dv, 2), size(du, 2) - 1, size(dh, 2) - 1/) &
41 == jjm, "dissip jjm")
42 call assert((/size(vcov, 3), size(ucov, 3), size(teta, 3), size(p, 3) - 1, &
43 size(dv, 3), size(du, 3), size(dh, 3)/) == llm, "dissip llm")
44
45 du(:, 1, :) = 0.
46 du(:, jjm + 1, :) = 0.
47
48 ! Calcul de la partie grad (div) :
49
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
59 CALL nxgraro2(llm, ucov, vcov, nitergrot, grx, gry, crot)
60 tedt = tetaurot * dtdiss
61 forall (l = 1: llm)
62 du(:, 2: jjm, l) = du(:, 2: jjm, l) - tedt(l) * grx(:, 2: jjm, l)
63 dv(:, :, l) = dv(:, :, l) - tedt(l) * gry(:, :, l)
64 END forall
65
66 ! calcul de la partie div (grad) :
67
68 forall (l = 1: llm) &
69 deltapres(:, :, l) = max(0., p(:, :, l) - p(:, :, l + 1))
70 CALL divgrad2(llm, teta, deltapres, niterh, gdx, cdivh)
71 forall (l = 1: llm) dh(:, :, l) = - tetah(l) * dtdiss * gdx(:, :, l)
72
73 END SUBROUTINE dissip
74
75 end module dissip_m

  ViewVC Help
Powered by ViewVC 1.1.21