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

Annotation of /trunk/dyn3d/caldyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 79 - (hide annotations)
Fri Feb 28 17:52:47 2014 UTC (10 years, 2 months ago) by guez
Original Path: trunk/dyn3d/caldyn.f90
File size: 3221 byte(s)
Moved procedure iniconst inside module comconst. Removed useless
variables of module comconst: im, jm, lllm, imp1, jmp1, lllmm1,
lllmp1, lcl, cotot, unsim. Move definition of dtvr that was in
dynetat0 and etat0 to iniconst. Moved comparison of dtvr from day_step
and start.nc that was in gcm to dynetat0. Moved call to disvert out of
iniconst. Moved call to iniconst in gcm before call to dynetat0.

Removed unused argument pvteta of physiq (not used either in LMDZ).

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

  ViewVC Help
Powered by ViewVC 1.1.21