source: trunk/LMDZ.MARS/libf/dyn3d/caldyn.F @ 1980

Last change on this file since 1980 was 1422, checked in by milmd, 10 years ago

In GENERIC, MARS and COMMON models replace some include files by modules (usefull for decoupling physics with dynamics).

File size: 4.0 KB
Line 
1      SUBROUTINE caldyn
2     $ (itau,ucov,vcov,teta,ps,masse,pk,pkf,phis ,
3     $  phi,conser,du,dv,dteta,dp,w,pbaru,pbarv,time )
4
5      USE comvert_mod, ONLY: ap,bp
6
7      IMPLICIT NONE
8
9c=======================================================================
10c
11c  Auteur :  P. Le Van
12c
13c   Objet:
14c   ------
15c
16c   Calcul des tendances dynamiques.
17c
18c Modif 04/93 F.Forget
19c=======================================================================
20
21c-----------------------------------------------------------------------
22c   0. Declarations:
23c   ----------------
24
25#include "dimensions.h"
26#include "paramet.h"
27#include "comgeom.h"
28
29c   Arguments:
30c   ----------
31
32      LOGICAL conser
33
34      INTEGER itau
35      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm)
36      REAL ps(ip1jmp1),phis(ip1jmp1)
37      REAL pk(iip1,jjp1,llm),pkf(ip1jmp1,llm)
38      REAL vcont(ip1jm,llm),ucont(ip1jmp1,llm)
39      REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)
40      REAL dv(ip1jm,llm),du(ip1jmp1,llm)
41      REAL dteta(ip1jmp1,llm),dp(ip1jmp1)
42      REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)
43      REAL time ! elapsed time (in days) since begining of the run
44
45c   Local:
46c   ------
47
48      REAL ang(ip1jmp1,llm),p(ip1jmp1,llmp1)
49      REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm),psexbarxy(ip1jm)
50      REAL vorpot(ip1jm,llm)
51      REAL w(ip1jmp1,llm),ecin(ip1jmp1,llm),convm(ip1jmp1,llm)
52      REAL bern(ip1jmp1,llm)
53      REAL massebxy(ip1jm,llm)
54   
55
56      INTEGER   ij,l
57      EXTERNAL  advect,bernoui,convmas,covcont,dteta1,dudv1,dudv2,
58     *          enercin,flumass,tourpot,vitvert,sortvarc,
59     *          pression,psextbar,massdair
60
61c-----------------------------------------------------------------------
62c   Calcul des tendances dynamiques:
63c   --------------------------------
64
65      CALL covcont  ( llm    , ucov    , vcov , ucont, vcont        )
66      CALL pression ( ip1jmp1, ap      , bp   ,  ps  , p            )
67      CALL psextbar (   ps   , psexbarxy                            )
68      CALL massdair (    p   , masse                                )
69      CALL massbar  (   masse, massebx , masseby                    )
70      call massbarxy(   masse, massebxy                             )
71      CALL flumass  ( massebx, masseby , vcont, ucont ,pbaru, pbarv )
72      CALL dteta1   (   teta , pbaru   , pbarv, dteta               )
73      CALL convmas  (   pbaru, pbarv   , convm                      )
74
75      DO ij =1, ip1jmp1
76         dp( ij ) = convm( ij,1 ) / airesurg( ij )
77      ENDDO
78c     write (38,*) "convm: ",convm
79c     write (38,*) "airesurg: ",airesurg
80c     write (38,*) "iip1: ",iip1
81c     close (38)
82
83
84      CALL vitvert ( convm  , w                                  )
85      CALL tourpot ( vcov   , ucov  , massebxy  , vorpot         )
86      CALL dudv1   ( vorpot , pbaru , pbarv     , du     , dv    )
87      CALL enercin ( vcov   , ucov  , vcont     , ucont  , ecin  )
88      CALL bernoui ( ip1jmp1, llm   , phi       , ecin   , bern  )
89      CALL dudv2   ( teta   , pkf   , bern      , du     , dv    )
90
91
92      DO l=1,llm
93         DO ij=1,ip1jmp1
94            ang(ij,l) = ucov(ij,l) + constang(ij)
95      ENDDO
96      ENDDO
97
98
99      CALL advect( ang, vcov, teta, w, massebx, masseby, du, dv,dteta )
100
101C  WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi
102C          probablement. Observe sur le code compile avec pgf90 3.0-1
103
104      DO l = 1, llm
105         DO ij = 1, ip1jm, iip1
106           IF( dv(ij,l).NE.dv(ij+iim,l) )  THEN
107c         PRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov', 
108c    ,   ' dans caldyn'
109c         PRINT *,' l,  ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l)
110          dv(ij+iim,l) = dv(ij,l)
111          endif
112         enddo
113      enddo
114c-----------------------------------------------------------------------
115c   Sorties eventuelles des variables de controle:
116c   ----------------------------------------------
117!      write(*,*) 'CALDYN: itau=',itau,' conser=',conser
118      IF( conser )  THEN
119        CALL sortvarc
120     $ ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov )
121
122      ENDIF
123
124      RETURN
125      END
Note: See TracBrowser for help on using the repository browser.