source: LMDZ6/trunk/libf/dyn3d/tetaleveli1j.F90 @ 5273

Last change on this file since 5273 was 5272, checked in by abarral, 2 days ago

Turn paramet.h into a module

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1!================================================================
2!================================================================
3SUBROUTINE tetaleveli1j(ilon,ilev,lnew,pgcm,pres,Qgcm,Qpres)
4  !================================================================
5  !================================================================
6
7  ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique
8   ! USE dimphy
9  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
10USE paramet_mod_h, ONLY: iip1, iip2, iip3, jjp1, llmp1, llmp2, llmm1, kftd, ip1jm, ip1jmp1, &
11          ip1jmi1, ijp1llm, ijmllm, mvar, jcfil, jcfllm
12IMPLICIT none
13
14
15  !ccccINCLUDE "dimphy.h"
16
17  !================================================================
18  !
19  ! Interpoler des champs 3-D u, v et g du modele a un niveau de
20  ! pression donnee (pres)
21  !
22  ! INPUT:  ilon ----- nombre de points
23  !     ilev ----- nombre de couches
24  !     lnew ----- true si on doit reinitialiser les poids
25  !     pgcm ----- pressions modeles
26  !     pres ----- pression vers laquelle on interpolle
27  !     Qgcm ----- champ GCM
28  !     Qpres ---- champ interpolle au niveau pres
29  !
30  !================================================================
31  !
32  !   arguments :
33  !   -----------
34
35  INTEGER :: ilon, ilev
36  logical :: lnew
37
38  REAL :: pgcm(ilon,ilev)
39  REAL :: Qgcm(ilon,ilev)
40  real :: pres
41  REAL :: Qpres(ilon)
42
43  !   local :
44  !   -------
45
46  !IM 211004
47  ! INTEGER lt(klon), lb(klon)
48  ! REAL ptop, pbot, aist(klon), aisb(klon)
49  !
50
51  !
52  INTEGER :: lt(ip1jm), lb(ip1jm)
53  REAL :: ptop, pbot, aist(ip1jm), aisb(ip1jm)
54  !MI 211004
55  save lt,lb,ptop,pbot,aist,aisb
56
57  INTEGER :: i, k
58  !
59  ! PRINT*,'tetalevel pres=',pres
60  !=====================================================================
61  if (lnew) then
62  !   on r�initialise les r�indicages et les poids
63  !=====================================================================
64
65
66  ! Chercher les 2 couches les plus proches du niveau a obtenir
67  !
68  ! Eventuellement, faire l'extrapolation a partir des deux couches
69  ! les plus basses ou les deux couches les plus hautes:
70  DO i = 1, ilon
71  !IM      IF ( ABS(pres-pgcm(i,ilev) ) .LT.
72     IF ( ABS(pres-pgcm(i,ilev) ) .GT. &
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  !IM   PRINT*,'i, ABS(pres-pgcm),ABS(pres-pgcm)',
81  !IM  .i, ABS(pres-pgcm(i,ilev)),ABS(pres-pgcm(i,1))
82  END DO
83  DO k = 1, ilev-1
84     DO i = 1, ilon
85        pbot = pgcm(i,k)
86        ptop = pgcm(i,k+1)
87  !IM         IF (ptop.LE.pres .AND. pbot.GE.pres) THEN
88        IF (ptop.GE.pres .AND. pbot.LE.pres) THEN
89           lt(i) = k+1
90           lb(i) = k
91        ENDIF
92     END DO
93  END DO
94  !
95  ! Interpolation lineaire:
96  !
97  DO i = 1, ilon
98  ! interpolation en logarithme de pression:
99  !
100  ! ...   Modif . P. Le Van    ( 20/01/98) ....
101  !   Modif Fr�d�ric Hourdin (3/01/02)
102
103    IF(pgcm(i,lb(i)).EQ.0.OR. &
104          pgcm(i,lt(i)).EQ.0.) THEN
105  !
106    PRINT*,'i,lb,lt,2pgcm,pres',i,lb(i), &
107          lt(i),pgcm(i,lb(i)),pgcm(i,lt(i)),pres
108  !
109    ENDIF
110  !
111    aist(i) = LOG( pgcm(i,lb(i))/ pres ) &
112          / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)) )
113    aisb(i) = LOG( pres / pgcm(i,lt(i)) ) &
114          / LOG( pgcm(i,lb(i))/ pgcm(i,lt(i)))
115  enddo
116
117
118  endif ! lnew
119
120  !======================================================================
121  !    inteprollation
122  !======================================================================
123
124  do i=1,ilon
125     Qpres(i)= Qgcm(i,lb(i))*aisb(i)+Qgcm(i,lt(i))*aist(i)
126  !IM      PRINT*,'i,Qgcm,Qpres',i,Qgcm(i,lb(i)),aisb(i),
127  !IM  $   Qgcm(i,lt(i)),aist(i),Qpres(i)
128  enddo
129  !
130  ! Je mets les vents a zero quand je rencontre une montagne
131  do i = 1, ilon
132  !IM      if (pgcm(i,1).LT.pres) THEN
133     if (pgcm(i,1).GT.pres) THEN
134        ! Qpres(i)=1e33
135        Qpres(i)=1e+20
136  !IM         PRINT*,'i,pgcm(i,1),pres =',i,pgcm(i,1),pres
137     endif
138  enddo
139
140  !
141  RETURN
142END SUBROUTINE tetaleveli1j
Note: See TracBrowser for help on using the repository browser.