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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 56 - (hide annotations)
Tue Jan 10 19:02:02 2012 UTC (12 years, 5 months ago) by guez
Original Path: trunk/libf/dyn3d/Dissipation/dissip.f90
File size: 3013 byte(s)
Imported "writehist.f" from LMDZ.

Moved module variable "histaveid" from "com_io_dyn" to "initdynav_m".

In "inithist", access directly module variables from "com_io_dyn"
instead of going through the arguments. Copying from LMDZ, write "u"
and scalar variables to separate files. Create a new variable for the
new file in "com_io_dyn". Copying from LMDZ, change the vertical axes
of the three files.

Removed some useless initializations in "dissip".

In "bilan_dyn", removed useless variable "time". Avoiding the
approximate test on "dt_cum" being a multiple of "dt_app", just
compute "ncum" from known usage of "bilan_dyn" and compute "dt_cum"
from "ncum". Change "periodav" from real to integer in
"conf_gcm_m". Since "day_step" is required to be a multiple of
"iperiod", so is "ncum".

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 55 USE dimens_m, ONLY: iim, jjm, llm
15     USE comdissnew, ONLY: lstardis, nitergdiv, nitergrot, niterh
16     USE inidissip_m, ONLY: dtdiss, tetah, tetaudiv, tetaurot, cdivu, crot, cdivh
17 guez 54 use gradiv2_m, only: gradiv2
18 guez 56 use nr_util, only: assert
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 guez 56 REAL, intent(in):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
23     REAL, INTENT(IN):: p(:, :, :) ! (iim + 1, jjm + 1, llm + 1)
24 guez 55 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 56 REAL tedt(llm)
32     REAL deltapres(iim + 1, jjm + 1, llm)
33 guez 55 INTEGER l
34 guez 3
35 guez 47 !-----------------------------------------------------------------------
36 guez 3
37 guez 56 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 guez 3
45 guez 56 du(:, 1, :) = 0.
46     du(:, jjm + 1, :) = 0.
47 guez 3
48 guez 47 ! Calcul de la partie grad (div) :
49 guez 3
50 guez 47 IF (lstardis) THEN
51 guez 54 CALL gradiv2(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
52 guez 47 ELSE
53 guez 54 CALL gradiv(llm, ucov, vcov, nitergdiv, gdx, gdy, cdivu)
54 guez 47 END IF
55 guez 3
56 guez 56 tedt = tetaudiv * dtdiss
57 guez 55 forall (l = 1: llm)
58 guez 56 du(:, 2: jjm, l) = - tedt(l) * gdx(:, 2: jjm, l)
59     dv(:, :, l) = - tedt(l) * gdy(:, :, l)
60 guez 55 END forall
61 guez 3
62 guez 56 ! 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 guez 56 tedt = tetaurot * dtdiss
71 guez 55 forall (l = 1: llm)
72 guez 56 du(:, 2: jjm, l) = du(:, 2: jjm, l) - tedt(l) * grx(:, 2: jjm, l)
73     dv(:, :, l) = dv(:, :, l) - tedt(l) * gry(:, :, l)
74 guez 55 END forall
75 guez 3
76 guez 47 ! calcul de la partie div (grad) :
77 guez 3
78 guez 47 IF (lstardis) THEN
79 guez 56 forall (l = 1: llm) &
80     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 56 forall (l = 1: llm) dh(:, :, l) = - tetah(l) * dtdiss * gdx(:, :, l)
87 guez 47
88     END SUBROUTINE dissip
89    
90     end module dissip_m

  ViewVC Help
Powered by ViewVC 1.1.21