source: LMDZ.3.3/tags/IPSL-CM4_v2x0/libf/phylmd/plevel.F @ 464

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

This commit was manufactured by cvs2svn to create tag
'IPSL-CM4_v2x0'.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.0 KB
Line 
1c================================================================
2c================================================================
3      SUBROUTINE plevel(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   -------
40
41      INTEGER lt(klon), lb(klon)
42      REAL ptop, pbot, aist(klon), aisb(klon)
43
44      save lt,lb,ptop,pbot,aist,aisb
45
46      INTEGER i, k
47c
48
49c=====================================================================
50      if (lnew) then
51c   on réinitialise les réindicages et les poids
52c=====================================================================
53
54
55c Chercher les 2 couches les plus proches du niveau a obtenir
56c
57c Eventuellement, faire l'extrapolation a partir des deux couches
58c les plus basses ou les deux couches les plus hautes:
59      DO 130 i = 1, klon
60         IF ( ABS(pres-pgcm(i,ilev) ) .LT.
61     .        ABS(pres-pgcm(i,1)) ) THEN
62            lt(i) = ilev     ! 2
63            lb(i) = ilev-1   ! 1
64         ELSE
65            lt(i) = 2
66            lb(i) = 1
67         ENDIF
68  130 CONTINUE
69      DO 150 k = 1, ilev-1
70         DO 140 i = 1, klon
71            pbot = pgcm(i,k)
72            ptop = pgcm(i,k+1)
73            IF (ptop.LE.pres .AND. pbot.GE.pres) THEN
74               lt(i) = k+1
75               lb(i) = k
76            ENDIF
77  140    CONTINUE
78  150 CONTINUE
79c
80c Interpolation lineaire:
81c
82      DO i = 1, klon
83c interpolation en logarithme de pression:
84c
85c ...   Modif . P. Le Van    ( 20/01/98) ....
86c       Modif Frédéric Hourdin (3/01/02)
87
88        aist(i) = LOG( pgcm(i,lb(i))/ pres )
89     .       / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)) )
90        aisb(i) = LOG( pres / pgcm(i,lt(i)) )
91     .       / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)))
92      enddo
93
94
95      endif ! lnew
96
97c======================================================================
98c    inteprollation
99c======================================================================
100
101      do i=1,klon
102         Qpres(i)= Qgcm(i,lb(i))*aisb(i)+Qgcm(i,lt(i))*aist(i)
103      enddo
104c
105c Je mets les vents a zero quand je rencontre une montagne
106      do i = 1, klon
107         if (pgcm(i,1).LT.pres) THEN
108            Qpres(i)=1e33
109         endif
110      enddo
111
112c
113      RETURN
114      END
Note: See TracBrowser for help on using the repository browser.