/[lmdze]/trunk/dyn3d/caldyn.f
ViewVC logotype

Contents of /trunk/dyn3d/caldyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 66 - (show annotations)
Thu Sep 20 13:00:41 2012 UTC (11 years, 8 months ago) by guez
Original Path: trunk/libf/dyn3d/caldyn.f90
File size: 2878 byte(s)
Changed name of module "comvert" to "disvert_m". Changed constant
1. to 0.3 in vertical sampling "strato".

1 module caldyn_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE caldyn(itau, ucov, vcov, teta, ps, masse, pk, pkf, phis, phi, &
8 dudyn, dv, dteta, dp, w, pbaru, pbarv, time_0, conser)
9
10 ! From dyn3d/caldyn.F, v 1.1.1.1 2004/05/19 12:53:06
11 ! Auteur : P. Le Van
12 ! Objet : calcul des tendances dynamiques
13
14 use advect_m, only: advect
15 USE dimens_m, ONLY : iim, llm
16 USE paramet_m, ONLY : iip1, ip1jm, ip1jmp1, jjp1, llmp1
17 USE disvert_m, ONLY : ap, bp
18 USE comgeom, ONLY : airesurg, constang
19 use sortvarc_m, only: sortvarc
20
21 ! Arguments:
22
23 LOGICAL, INTENT(IN):: conser
24 INTEGER, INTENT(IN):: itau
25 REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm)
26 real, intent(in):: teta(ip1jmp1, llm)
27 REAL, INTENT(IN):: ps(ip1jmp1), phis(ip1jmp1)
28 REAL, INTENT(IN):: pk(iip1, jjp1, llm)
29 REAL pkf(ip1jmp1, llm)
30 REAL vcont(ip1jm, llm), ucont(ip1jmp1, llm)
31 REAL phi(ip1jmp1, llm), masse(ip1jmp1, llm)
32 REAL dv(ip1jm, llm), dudyn(ip1jmp1, llm)
33 REAL dteta(ip1jmp1, llm)
34 real, INTENT(out):: dp(ip1jmp1)
35 REAL pbaru(ip1jmp1, llm), pbarv(ip1jm, llm)
36 REAL, intent(in):: time_0
37 REAL, INTENT(out):: w(ip1jmp1, llm)
38
39 ! Local:
40
41 REAL ang(ip1jmp1, llm), p(ip1jmp1, llmp1)
42 REAL massebx(ip1jmp1, llm), masseby(ip1jm, llm)
43 REAL vorpot(ip1jm, llm)
44 real ecin(ip1jmp1, llm), convm(ip1jmp1, llm)
45 REAL bern(ip1jmp1, llm)
46 REAL massebxy(ip1jm, llm)
47
48 INTEGER ij, l
49
50 !-----------------------------------------------------------------------
51
52 CALL covcont(llm, ucov, vcov, ucont, vcont)
53 forall (l = 1: llm + 1) p(:, l) = ap(l) + bp(l) * ps
54 CALL massdair(p, masse)
55 CALL massbar(masse, massebx, masseby)
56 CALL massbarxy(masse, massebxy)
57 CALL flumass(massebx, masseby, vcont, ucont, pbaru, pbarv)
58 CALL dteta1(teta, pbaru, pbarv, dteta)
59 CALL convmas(pbaru, pbarv, convm)
60 dp = convm(:, 1) / airesurg
61 CALL vitvert(convm, w)
62 CALL tourpot(vcov, ucov, massebxy, vorpot)
63 CALL dudv1(vorpot, pbaru, pbarv, dudyn, dv)
64 CALL enercin(vcov, ucov, vcont, ucont, ecin)
65 CALL bernoui(ip1jmp1, llm, phi, ecin, bern)
66 CALL dudv2(teta, pkf, bern, dudyn, dv)
67
68 DO l = 1, llm
69 DO ij = 1, ip1jmp1
70 ang(ij, l) = ucov(ij, l) + constang(ij)
71 END DO
72 END DO
73
74 CALL advect(ang, vcov, teta, w, massebx, masseby, dudyn, dv, dteta)
75
76 ! WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi
77 ! probablement. Observe sur le code compile avec pgf90 3.0-1
78 DO l = 1, llm
79 DO ij = 1, ip1jm, iip1
80 IF (dv(ij, l)/=dv(ij+iim, l)) THEN
81 dv(ij+iim, l) = dv(ij, l)
82 END IF
83 END DO
84 END DO
85
86 ! Sorties eventuelles des variables de controle :
87 IF (conser) CALL sortvarc(itau, ucov, teta, ps, masse, pk, phis, vorpot, &
88 phi, bern, dp, time_0)
89
90 END SUBROUTINE caldyn
91
92 end module caldyn_m

  ViewVC Help
Powered by ViewVC 1.1.21