source: LMDZ4/branches/LMDZ4_V2_patch/libf/phylmd/tetalevel.F

Last change on this file 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.