LMDZ
gppref.F90
Go to the documentation of this file.
1 SUBROUTINE gppref(KPROMA,KSTART,KPROF,KFLEV,PVAH,PVBH,PALPH,PRESH,PRESF)
2 
3 !**** *GPPREF* - Computes full level pressure
4 
5 ! Purpose.
6 ! --------
7 ! Computes pressures at half and full model levels.
8 
9 !** Interface.
10 ! ----------
11 ! *CALL* *GPPREF(...)
12 
13 ! Explicit arguments :
14 ! --------------------
15 ! KPROMA : dimensioning
16 ! KSTART : start of work
17 ! KPROF : depth of work
18 ! KFLEV : vert. dimensioning
19 ! PVAH(KFLEV),PVBH(KFLEV)- vertical coordinate
20 ! PALPH (KPROMA,KFLEV) - COEFF OF THE HYDROST
21 ! PRESH(KPROMA,0:KFLEV) - HALF LEVEL PRESSURE
22 ! PRESF(KPROMA,KFLEV) - FULL LEVEL PRESSURE
23 !
24 ! Implicit arguments : NONE.
25 ! --------------------
26 
27 ! Method.
28 ! -------
29 ! See documentation
30 
31 ! Externals. None.
32 ! ----------
33 
34 ! Reference.
35 ! ----------
36 ! ECMWF Research Department documentation of the IFS
37 
38 ! PHk*ln(PHk) - PHk-1*ln(PHk-1)
39 ! Full level P: ln(PFk) = [ ------------------------------- - 1. ]
40 ! PHk - PHk-1
41 
42 ! which simplifies to: PFk = Pk+1/2 * exp(-ALPHA)
43 
44 ! In case of NDLNPR=1 it becomes even simpler (no need of LAPRXP any
45 ! more in principle !) :
46 ! PFk = Pk+1/2 * (1.-ALPHA) except at the top
47 ! level :
48 ! PF1 = P1.5 / (2+Cv/R)
49 
50 ! Author.
51 ! -------
52 ! Erik Andersson, Mats Hamrud and Philippe Courtier *ECMWF*
53 
54 ! Modifications.
55 ! --------------
56 ! Original : 92-11-23
57 ! Modified : 95-01-31 by Radmila Bubnova: correction in the case
58 ! of the other approximation of d (ln p).
59 ! Modified : 00-11-22 by Agathe Untch: modifications for vertical
60 ! finite elements
61 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
62 ! Modified : 04-11-15 by K. YESSAD: improve the hierarchy of tests
63 ! Modified : 15-Feb-2005 by K. YESSAD: ZTOPPRES becomes TOPPRES
64 ! ------------------------------------------------------------------
65 
66 USE parkind1 ,ONLY : jpim ,jprb
67 USE yomhook ,ONLY : lhook, dr_hook
68 
69 USE yomct0 , ONLY : laprxpk
70 USE yomdyn , ONLY : ndlnpr
71 USE yomcst , ONLY : rd ,rcvd
72 USE yomcver , ONLY : lvertfe
73 USE yomgem , ONLY : vaf ,vbf ,toppres
74 
75 ! ------------------------------------------------------------------
76 
77 IMPLICIT NONE
78 
79 INTEGER(KIND=JPIM),INTENT(IN) :: KPROMA
80 INTEGER(KIND=JPIM),INTENT(IN) :: KFLEV
81 INTEGER(KIND=JPIM),INTENT(IN) :: KSTART
82 INTEGER(KIND=JPIM),INTENT(IN) :: KPROF
83 REAL(KIND=JPRB) :: PVAH(0:kflev) ! Argument NOT used
84 REAL(KIND=JPRB) :: PVBH(0:kflev) ! Argument NOT used
85 REAL(KIND=JPRB) ,INTENT(IN) :: PALPH(kproma,kflev)
86 REAL(KIND=JPRB) ,INTENT(IN) :: PRESH(kproma,0:kflev)
87 REAL(KIND=JPRB) ,INTENT(OUT) :: PRESF(kproma,kflev)
88 
89 ! ------------------------------------------------------------------
90 
91 INTEGER(KIND=JPIM) :: IFIRST, JLEV, JLON
92 REAL(KIND=JPRB) :: ZMUL
93 REAL(KIND=JPRB) :: ZHOOK_HANDLE
94 
95 ! ------------------------------------------------------------------
96 
97 IF (lhook) CALL dr_hook('GPPREF',0,zhook_handle)
98 
99 ! ------------------------------------------------------------------
100 
101 !* 1. Level to begin normal computations
102 ! ----------------------------------
103 
104 ! This is introduced to allow the use of GPPREF without the implicit
105 ! assumption that the top level input for pressure is 0 hPa.
106 ! This restriction is only necessary in the case of use of NDLNPR=1.
107 !
108 ! LVERTFE : .T./.F. Finite element/conventional vertical discretisation.
109 ! NDLNPR : NDLNPR=0: conventional formulation of delta, i.e. ln(P(l)/P(l-1)).
110 ! NDLNPR=1: formulation of delta used in non hydrostatic model,
111 ! LAPRXPK : way of computing full-levels pressures in primitive equation
112 !
113 lvertfe=.true. !!!!! A REVOIR (MPL) comment faut-il vraiment calculer PRESF ?
114 
115 IF ((.NOT.lvertfe).AND.(ndlnpr == 1)) THEN
116  IF(presh(kstart,0) <= toppres)THEN
117  ifirst=2
118  ELSE
119  ifirst=1
120  DO jlon=kstart,kprof
121  IF(presh(jlon,0) <= toppres)THEN
122  ifirst=2
123  EXIT
124  ENDIF
125  ENDDO
126  ENDIF
127 ENDIF
128 
129 ! ------------------------------------------------------------------
130 
131 !* 2. COMPUTES FULL LEVEL PRESSURES.
132 ! ------------------------------
133 
134 IF (lvertfe) THEN
135  DO jlev=1,kflev
136 ! print *,'GPPREF: LVERTFE KFLEV KSTART KPROF JLEV',LVERTFE,KFLEV,KSTART,KPROF,JLEV
137  presf(kstart:kprof,jlev)=vaf(jlev)+vbf(jlev)*presh(kstart:kprof,kflev)
138  ENDDO
139 ELSE
140  IF (ndlnpr == 0) THEN
141  IF (laprxpk) THEN
142  DO jlev=1,kflev
143  DO jlon=kstart,kprof
144  presf(jlon,jlev)=(presh(jlon,jlev-1)+presh(jlon,jlev))*0.5_jprb
145  ENDDO
146  ENDDO
147  ELSE
148  DO jlev=1,kflev
149  DO jlon=kstart,kprof
150  presf(jlon,jlev)=exp(-palph(jlon,jlev))*presh(jlon,jlev)
151  ENDDO
152  ENDDO
153  ENDIF
154  ELSEIF (ndlnpr == 1) THEN
155  DO jlev=ifirst,kflev
156  DO jlon=kstart,kprof
157  presf(jlon,jlev)=(1.0_jprb-palph(jlon,jlev))*presh(jlon,jlev)
158  ENDDO
159  ENDDO
160  zmul=1.0_jprb/(2.0_jprb+rcvd/rd)
161  DO jlev=1,ifirst-1
162  DO jlon=kstart,kprof
163  presf(jlon,jlev)=presh(jlon,jlev)*zmul
164  ENDDO
165  ENDDO
166  ENDIF
167 ENDIF
168 
169 ! ------------------------------------------------------------------
170 
171 IF (lhook) CALL dr_hook('GPPREF',1,zhook_handle)
172 END SUBROUTINE gppref
real(kind=jprb), dimension(:), allocatable vbf
Definition: yomgem.F90:174
subroutine gppref(KPROMA, KSTART, KPROF, KFLEV, PVAH, PVBH, PALPH, PRESH, PRESF)
Definition: gppref.F90:2
real(kind=jprb) rd
Definition: yomcst.F90:39
Definition: yomct0.F90:1
Definition: yomgem.F90:1
integer, parameter jprb
Definition: parkind1.F90:31
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
logical laprxpk
Definition: yomct0.F90:363
real(kind=jprb) toppres
Definition: yomgem.F90:176
logical lhook
Definition: yomhook.F90:12
logical lvertfe
Definition: yomcver.F90:20
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
Definition: yomdyn.F90:1
integer, parameter jpim
Definition: parkind1.F90:13
real(kind=jprb), dimension(:), allocatable vaf
Definition: yomgem.F90:173
integer(kind=jpim) ndlnpr
Definition: yomdyn.F90:258
Definition: yomcst.F90:1
real(kind=jprb) rcvd
Definition: yomcst.F90:43