/[lmdze]/trunk/libf/dyn3d/caldyn.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/caldyn.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 40 - (show annotations)
Tue Feb 22 13:49:36 2011 UTC (13 years, 3 months ago) by guez
File size: 2670 byte(s)
"alpha" useless, always 0, in "exner_hyb".

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

  ViewVC Help
Powered by ViewVC 1.1.21