source: LMDZ4/trunk/libf/phylmd/tetalevel.F @ 644

Last change on this file since 644 was 644, checked in by Laurent Fairhead, 19 years ago

Synchronisation avec tous les diagnostiques de Ionela IM
Inclusion du slab ocean IM
LF

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