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

Annotation of /trunk/Sources/dyn3d/caldyn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide annotations)
Wed Feb 5 17:51:07 2014 UTC (10 years, 3 months ago) by guez
Original Path: trunk/dyn3d/caldyn.f90
File size: 3148 byte(s)
Moved procedure inigeom into module comgeom.

In disvert, renamed s_sampling to vert_sampling, following
LMDZ. Removed choice strato1. In case read, read ap and bp instead of
s (following LMDZ).

Added argument phis to start_init_orog and start_init_dyn, and removed
variable phis of module start_init_orog_m. In etat0 and
start_init_orog, renamed relief to zmea_2d. In start_init_dyn, renamed
psol to ps.

In start_init_orog, renamed relief_hi to relief. No need to set
phis(iim + 1, :) = phis(1, :), already done in grid_noro.

Documentation for massbar out of SVN, in massbar.txt. Documentation
was duplicated in massdair, but not relevant in massdair.

In conflx, no need to initialize pen_[ud] and pde_[ud]. In flxasc,
used intermediary variable fact (following LMDZ).

In grid_noro, added local variable zmea0 for zmea not smoothed and
computed zphi from zmea instead of zmea0 (following LMDZ). This
changes the results of ce0l.

Removed arguments pen_u and pde_d of phytrac and nflxtr, which were
not used.

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 70 USE paramet_m, ONLY: iip1, ip1jm, 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 43 real, intent(in):: teta(ip1jmp1, llm)
30 guez 70 REAL, INTENT(IN):: ps(ip1jmp1)
31     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 78 REAL dudyn(ip1jmp1, llm), dv(ip1jm, 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 43 REAL pbaru(ip1jmp1, llm), pbarv(ip1jm, llm)
41     REAL, intent(in):: time_0
42 guez 70 LOGICAL, INTENT(IN):: conser
43 guez 3
44 guez 43 ! Local:
45 guez 3
46 guez 70 REAL vcont(ip1jm, llm), ucont(ip1jmp1, llm)
47 guez 78 REAL ang(iim + 1, jjm + 1, llm), p(ip1jmp1, llmp1)
48 guez 46 REAL massebx(ip1jmp1, llm), masseby(ip1jm, llm)
49 guez 43 REAL vorpot(ip1jm, llm)
50     real ecin(ip1jmp1, llm), convm(ip1jmp1, llm)
51     REAL bern(ip1jmp1, llm)
52     REAL massebxy(ip1jm, 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     DO ij = 1, ip1jm, iip1
81     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