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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 47 - (show annotations)
Fri Jul 1 15:00:48 2011 UTC (12 years, 10 months ago) by guez
File size: 2876 byte(s)
Split "thermcell.f" and "cv3_routines.f".
Removed copies of files that are now in "L_util".
Moved "mva9" and "diagetpq" to their own files.
Unified variable names across procedures.

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 comvert, 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