Newer
Older

Gaelle Tanguy
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.
!-----------------------------------------------------------------
!--------------- special set of characters for RCS information
!-----------------------------------------------------------------
! $Source$ $Revision$ $Date$
!-----------------------------------------------------------------
!##########################################
MODULE MODI_GPS_ZENITH_GRID
!##########################################
INTERFACE
SUBROUTINE GPS_ZENITH_GRID(PRT,PTEMP,PPABST,PZTD,PZHD,PZWD)
!
!* 0.1 Declarations of dummy arguments :
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRT ! Water vapor mixing ratio
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTEMP ! Air temperature
REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure
!
REAL, DIMENSION(:,:), INTENT(OUT) :: PZTD ! Zenithal Total Delay
REAL, DIMENSION(:,:), INTENT(OUT) :: PZHD ! Zenithal Hydrostatic Delay
REAL, DIMENSION(:,:), INTENT(OUT) :: PZWD ! Zenithal Wet Delay
!
END SUBROUTINE GPS_ZENITH_GRID
END INTERFACE
END MODULE MODI_GPS_ZENITH_GRID
!
! ###################################################################
SUBROUTINE GPS_ZENITH_GRID(PRT,PTEMP,PPABST,PZTD,PZHD,PZWD)
! ###################################################################
!
!!**** *GPS_ZENITH_GRID * - computes GPS zenithal delays parameters
!!
!! PURPOSE
!! -------
!! The purpose of this routine is to compute the synthetic ZTD, ZHD, ZWD
!!
!!** METHOD
!! ------
!! The delays are computed using the refractivity formula and its different
!! approximation. The delay can be separated in two parts.
!! The ZTD is the sum of the ZHD, including all component of the atmosphere, and
!! the ZWD, including the contribution of the non-dipolar moment of the molecule
!! of water vapor.
!!
!! EXTERNAL
!! --------
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!!
!! Brenot et al, 2006, JGR
!!
!! AUTHORS
!! -------
!! H. Brenot * Laboratoire de Geophysique Interne et Tectonophysique *
!! / * Meteo France *
!! & V. Ducrocq * Meteo France *
!! & A. Walpersdorf * Laboratoire de Geophysique Interne et Tectonophysique *
!!
!! MODIFICATIONS
!! -------------
!! Original 18/11/04
!! Modified 4/12/2007
!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for
!! aircraft, ballon and profiler
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
!
USE MODD_PARAMETERS
USE MODD_LUNIT
USE MODD_CST
USE MODE_FM
USE MODD_GR_FIELD_n
USE MODD_DIAG_FLAG
USE MODD_GRID, ONLY: XLONORI,XLATORI
USE MODD_GRID_n
USE MODE_GRIDPROJ
USE MODE_ll
!
USE MODI_IO_ll
!
IMPLICIT NONE
!
!
!* 0.1 Declarations of dummy arguments :
!
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRT ! Water vapour mixing ratio
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTEMP ! Air temperature
REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! Absolute pressure
!
REAL, DIMENSION(:,:), INTENT(OUT) :: PZTD ! Zenithal Total Delay
REAL, DIMENSION(:,:), INTENT(OUT) :: PZHD ! Zenithal Hydrostatic Delay
REAL, DIMENSION(:,:), INTENT(OUT) :: PZWD ! Zenithal Wet Delay
!
!* 0.2 Declarations of local variables :
!
!-------- Calculation parameters --------
REAL :: ZK1,ZK2,ZK3 ! k1, k2 and K3 atmospheric refractivity constants
REAL :: ZRDSRV ! XRD/XRV
!-------- Loop parameters ---------------
INTEGER :: IIB,IIE ! Loop limits for coordinate X
INTEGER :: IJB,IJE ! Loop limits for coordinate Y
INTEGER :: IKB,IKE ! Loop limits for coordinate Z
INTEGER :: JK ! Loop variables of control
INTEGER :: IIU,IJU,IKU ! Loop variables of model
INTEGER :: ILUOUT0, IRESP ! file unit and return code for output
REAL, DIMENSION(:),ALLOCATABLE :: ZXHATM,ZYHATM ! mass-point positions
REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZZHATM ! mass level altitude
!-------- Physical parameters for the integration ----------------------------
REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZE ! Partial pressure of water vapor
REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZTV ! Virtual temperature
!-------- External model contributions ---------------------------------------
REAL, DIMENSION(:,:),ALLOCATABLE :: ZZHDX ! Zenith hydrostatic delay external (of the model contribution)
!-------- Top model parameters -----------------------------------------------
REAL, DIMENSION(:,:), ALLOCATABLE :: ZPTOP ! pressure of top of model
REAL, DIMENSION(:,:), ALLOCATABLE :: ZTVTOP ! Tv of top of model
REAL, DIMENSION(:,:), ALLOCATABLE :: ZETOP ! water vapor partial pressure of top of model
REAL, DIMENSION(:,:), ALLOCATABLE :: ZTEMPTOP ! absolute temperature of top of model
REAL, DIMENSION(:,:),ALLOCATABLE :: ZG0 ! gravity of ground (Vedel approx.)
REAL, DIMENSION(:,:),ALLOCATABLE :: ZR0 ! radius of ground (Vedel approx.)
REAL, DIMENSION(:,:),ALLOCATABLE :: ZGTOP ! gravity of top of model using Vedel approx.
!
!-------------------------------------------------------------------------------
!
!* 1. INTIALIZE DIMENSIONS AND ALLOCATE ARRAYS
! ----------------------------------------
!
CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
IIU = SIZE (PTEMP,1)
IJU = SIZE (PTEMP,2)
IKU = SIZE (PTEMP,3)
IKB = JPVEXT + 1
IKE = IKU - JPVEXT
!
ALLOCATE(ZXHATM(IIU))
ALLOCATE(ZYHATM(IJU))
ALLOCATE(ZZHATM(IIU,IJU,IKU))
ALLOCATE(ZE(IIU,IJU,IKU))
ALLOCATE(ZTV(IIU,IJU,IKU))
ALLOCATE(ZGTOP(IIU,IJU))
ALLOCATE(ZPTOP(IIU,IJU))
ALLOCATE(ZTVTOP(IIU,IJU))
ALLOCATE(ZTEMPTOP(IIU,IJU))
!
ALLOCATE(ZZHDX(IIU,IJU))
!
ALLOCATE(ZG0(IIU,IJU))
ALLOCATE(ZR0(IIU,IJU))
!
PZTD(:,:) = 0. ! Zenithal Total Delay
PZHD(:,:) = 0. ! Zenithal Hydrostatic Delay
PZWD(:,:) = 0. ! Zenithal Wet Delay
!
ZZHDX(:,:) = 0.
!-------------------------------------------------------------------------------
!
!* 3. REFRACTIVITY COEFFICIENTS AND OTHER CONSTANTS
! ---------------------------------------------
!
! Refractivity coeficients
! Bevis et al. (1994)
ZK1 = 0.776 ! K/Pa
ZK2 = 0.704 ! K/Pa
ZK3 = 3739. ! K2/Pa
ZRDSRV=XRD/XRV
!
!-------------------------------------------------------------------------------!
!* 4. AUXILLARY VARIABLES
! -------------------
!
!
ZXHATM(1:IIU-1) = 0.5*(XXHAT(1:IIU-1)+XXHAT(2:IIU))
ZXHATM(IIU) = 2.*XXHAT(IIU)-ZXHATM(IIU-1)
ZYHATM(1:IJU-1) = 0.5*(XYHAT(1:IJU-1)+XYHAT(2:IJU))
ZYHATM(IJU) = 2.*XXHAT(IJU)-ZXHATM(IJU-1)
ZZHATM(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU))
ZZHATM(:,:,IKU) = 2.*XZZ(:,:,IKU) -ZZHATM(:,:,IKU-1)
!
! Vapor pressure in Pa : ZE
ZE(:,:,:) = PPABST(:,:,:) * PRT(:,:,:) / ( ZRDSRV + PRT(:,:,:) )
! Virtual temperature
ZTV(:,:,:) = PTEMP(:,:,:) * ( 1. + PRT(:,:,:) / ZRDSRV ) &
/ ( 1. + PRT(:,:,:) )
ZTVTOP(:,:)= ( ZTV(:,:,IKE) - ZTV(:,:,IKE-1) ) * ( XZZ(:,:,IKE+1) - ZZHATM(:,:,IKE) ) &
/(ZZHATM(:,:,IKE) - ZZHATM(:,:,IKE-1)) + ZTV(:,:,IKE)
! for extrapolation above model top : gtop, Ptop et Ttop
ZG0(:,:) = 9.780356 * ( 1. + 5.2885E-3 * (SIN(XLAT(:,:)*XPI/180.))**2 - &
5.9E-6 * ( SIN(2.*XLAT(:,:)*XPI/180.))**2 )
ZR0(:,:) = 6378.1E3 / SQRT ( ( SIN(XLAT(:,:)*XPI/180.)*6378.1/6356.6 )**2 + &
( COS(XLAT(:,:)*XPI/180.))**2 )
ZGTOP(:,:) = ZG0(:,:) * ( ZR0(:,:) / ( ZR0(:,:) + XZZ(:,:,IKE+1) ) )**2
ZPTOP(:,:) = PPABST(:,:,IKE)*EXP(XG*0.5*(XZZ(:,:,IKE)-XZZ(:,:,IKE+1))/(XRD*ZTVTOP(:,:)))
ZTEMPTOP(:,:) = (( PTEMP(:,:,IKE) - PTEMP(:,:,IKE-1) ) * 0.5 * ( XZZ(:,:,IKE+1) - XZZ(:,:,IKE) ) &
/ ( XZZ(:,:,IKE) - XZZ(:,:,IKE-1) )) + PTEMP(:,:,IKE)
!
!-------------------------------------------------------------------------------!
!* 5. ZENITH DELAYS
! -------------
!
! 5.1 Integrated Model Contribution
!
! 5.1.1 ZHD
!
! level contribution for integrated formulation
DO JK=IKB,IKE
PZHD(:,:) = PZHD(:,:) + ( 1.E-6 * ZK1 * PPABST(:,:,JK) * &
( XZZ(:,:,JK+1) - XZZ(:,:,JK) ) / ZTV(:,:,JK) )
END DO
!
! 5.1.2 ZWD
!
DO JK=IKB,IKE
PZWD(:,:) = PZWD(:,:) + (1.E-6 * ( (ZK2-ZRDSRV*ZK1) + ( ZK3/PTEMP(:,:,JK) ) ) * &
ZE(:,:,JK)* ( XZZ(:,:,JK+1) - XZZ(:,:,JK) ) / PTEMP(:,:,JK))
END DO
!
! 5.2 External Model Contribution (hydrostatic delay only, wet delay negligeable)
!
ZZHDX(:,:) = 1.E-6 * ZK1 * ZPTOP(:,:) * XRD * ( 1. + 2. * XRD * ZTEMPTOP(:,:) &
/ ( ( XRADIUS + XZZ(:,:,IKE+1) ) * ZGTOP(:,:) ) + 2. * ( XRD * ZTEMPTOP(:,:) &
/ ( (XRADIUS + XZZ(:,:,IKE+1)) * ZGTOP(:,:) ))**2 ) / ZGTOP(:,:)
PZHD(:,:) = PZHD(:,:) + ZZHDX(:,:)
!
! 5.3 Total Zenith delay
!
PZTD(:,:) = PZHD(:,:) + PZWD(:,:)
!
!
DEALLOCATE(ZE)
DEALLOCATE(ZTV)
DEALLOCATE(ZGTOP)
DEALLOCATE(ZPTOP)
DEALLOCATE(ZTVTOP)
DEALLOCATE(ZTEMPTOP)
DEALLOCATE(ZZHDX)
!
END SUBROUTINE GPS_ZENITH_GRID