source: BOL/trunk/IPCC/plevel.F @ 667

Last change on this file since 667 was 568, checked in by lmdzadmin, 20 years ago

Un filtre permettant de relire a posteriori un fichier netcdf contenant
la serie temporelle d'une variable 3d et de l'interpoler sur des niveaux standards
LF

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