source: LMDZ4/branches/pre_V3/libf/phylmd/plevel.F @ 701

Last change on this file since 701 was 701, checked in by (none), 18 years ago

This commit was manufactured by cvs2svn to create branch 'pre_V3'.

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