source: LMDZ4/trunk/libf/dyn3d/tetaleveli1j1.F @ 953

Last change on this file since 953 was 947, checked in by Laurent Fairhead, 17 years ago

Remplacement du include dimphy par USE dimphy
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
Line 
1c================================================================
2c================================================================
3      SUBROUTINE tetaleveli1j1(ilon,ilev,lnew,pgcm,pres,Qgcm,Qpres)
4c================================================================
5c================================================================
6
7      USE dimphy
8      IMPLICIT none
9
10#include "dimensions.h"
11cccc#include "dimphy.h"
12
13c================================================================
14c
15c Interpoler des champs 3-D u, v et g du modele a un niveau de
16c pression donnee (pres)
17c
18c INPUT:  ilon ----- nombre de points
19c         ilev ----- nombre de couches
20c         lnew ----- true si on doit reinitialiser les poids
21c         pgcm ----- pressions modeles
22c         pres ----- pression vers laquelle on interpolle
23c         Qgcm ----- champ GCM
24c         Qpres ---- champ interpolle au niveau pres
25c
26c================================================================
27c
28c   arguments :
29c   -----------
30
31      INTEGER ilon, ilev
32      logical lnew
33
34      REAL pgcm(ilon,ilev)
35      REAL Qgcm(ilon,ilev)
36      real pres
37      REAL Qpres(ilon)
38
39c   local :
40c   -------
41
42cIM 211004
43c     INTEGER lt(klon), lb(klon)
44c     REAL ptop, pbot, aist(klon), aisb(klon)
45c
46#include "paramet.h"
47c
48      INTEGER lt(ip1jmp1), lb(ip1jmp1)
49      REAL ptop, pbot, aist(ip1jmp1), aisb(ip1jmp1)
50cMI 211004
51      save lt,lb,ptop,pbot,aist,aisb
52
53      INTEGER i, k
54c
55c     PRINT*,'tetalevel pres=',pres
56c=====================================================================
57      if (lnew) then
58c   on réinitialise les réindicages et les poids
59c=====================================================================
60
61
62c Chercher les 2 couches les plus proches du niveau a obtenir
63c
64c Eventuellement, faire l'extrapolation a partir des deux couches
65c les plus basses ou les deux couches les plus hautes:
66      DO 130 i = 1, ilon
67cIM      IF ( ABS(pres-pgcm(i,ilev) ) .LT.
68         IF ( ABS(pres-pgcm(i,ilev) ) .GT.
69     .        ABS(pres-pgcm(i,1)) ) THEN
70            lt(i) = ilev     ! 2
71            lb(i) = ilev-1   ! 1
72         ELSE
73            lt(i) = 2
74            lb(i) = 1
75         ENDIF
76cIM   PRINT*,'i, ABS(pres-pgcm),ABS(pres-pgcm)',
77cIM  .i, ABS(pres-pgcm(i,ilev)),ABS(pres-pgcm(i,1))
78  130 CONTINUE
79      DO 150 k = 1, ilev-1
80         DO 140 i = 1, ilon
81            pbot = pgcm(i,k)
82            ptop = pgcm(i,k+1)
83cIM         IF (ptop.LE.pres .AND. pbot.GE.pres) THEN
84            IF (ptop.GE.pres .AND. pbot.LE.pres) THEN
85               lt(i) = k+1
86               lb(i) = k
87            ENDIF
88  140    CONTINUE
89  150 CONTINUE
90c
91c Interpolation lineaire:
92c
93      DO i = 1, ilon
94c interpolation en logarithme de pression:
95c
96c ...   Modif . P. Le Van    ( 20/01/98) ....
97c       Modif Frédéric Hourdin (3/01/02)
98
99        IF(pgcm(i,lb(i)).EQ.0.OR.
100     $     pgcm(i,lt(i)).EQ.0.) THEN
101c
102        PRINT*,'i,lb,lt,2pgcm,pres',i,lb(i),
103     .  lt(i),pgcm(i,lb(i)),pgcm(i,lt(i)),pres
104c
105        ENDIF
106c
107        aist(i) = LOG( pgcm(i,lb(i))/ pres )
108     .       / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)) )
109        aisb(i) = LOG( pres / pgcm(i,lt(i)) )
110     .       / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)))
111      enddo
112
113
114      endif ! lnew
115
116c======================================================================
117c    inteprollation
118c======================================================================
119
120      do i=1,ilon
121         Qpres(i)= Qgcm(i,lb(i))*aisb(i)+Qgcm(i,lt(i))*aist(i)
122cIM      PRINT*,'i,Qgcm,Qpres',i,Qgcm(i,lb(i)),aisb(i),
123cIM  $   Qgcm(i,lt(i)),aist(i),Qpres(i)
124      enddo
125c
126c Je mets les vents a zero quand je rencontre une montagne
127      do i = 1, ilon
128cIM      if (pgcm(i,1).LT.pres) THEN
129         if (pgcm(i,1).GT.pres) THEN
130c           Qpres(i)=1e33
131            Qpres(i)=1e+20
132cIM         PRINT*,'i,pgcm(i,1),pres =',i,pgcm(i,1),pres
133         endif
134      enddo
135
136c
137      RETURN
138      END
Note: See TracBrowser for help on using the repository browser.