Newer
Older

WAUTELET Philippe
committed
!MNH_LIC Copyright 2007-2019 CNRS, Meteo-France and Universite Paul Sabatier
!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence

WAUTELET Philippe
committed
!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!MNH_LIC for details. version 1.

WAUTELET Philippe
committed
!-----------------------------------------------------------------
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
! #######################
MODULE MODI_BHMIE_WATER
! #######################
!
INTERFACE
!
SUBROUTINE BHMIE_WATER( PWAVELENGTH, PREFINDEX, HDSD, PCONC, &
KANGLE, PEXTINCTION_COEF, PBACKSCAT_COEF, &
KRADIUS, PALPHA, PNU, PLWC, PRADIUS )
!
REAL, INTENT(IN) :: PWAVELENGTH ! EM wavelength
COMPLEX, INTENT(IN) :: PREFINDEX ! Refraction index
CHARACTER(LEN=*), INTENT(IN) :: HDSD ! Type de size distribution
REAL, INTENT(IN) :: PCONC ! Particle concentration
INTEGER, INTENT(IN) :: KANGLE ! Number of scattering angles
!
REAL, INTENT(OUT) :: PEXTINCTION_COEF ! Extinction
REAL, INTENT(OUT) :: PBACKSCAT_COEF ! BackScattering
!
INTEGER, OPTIONAL, INTENT(IN) :: KRADIUS ! Number of radii
! to discretize the dsd
REAL, OPTIONAL, INTENT(IN) :: PALPHA ! Gamma-dsd shape parameter
REAL, OPTIONAL, INTENT(IN) :: PNU ! Gamma-dsd shape parameter
REAL, OPTIONAL, INTENT(IN) :: PLWC ! Gamma-dsd liquid water content
REAL, OPTIONAL, INTENT(IN) :: PRADIUS ! Monodispersed-dsd radius
!
END SUBROUTINE BHMIE_WATER
END INTERFACE
END MODULE MODI_BHMIE_WATER
!
! ##################################################################
SUBROUTINE BHMIE_WATER( PWAVELENGTH, PREFINDEX, HDSD, PCONC, &
KANGLE, PEXTINCTION_COEF, PBACKSCAT_COEF, &
KRADIUS, PALPHA, PNU, PLWC, PRADIUS )
! ##################################################################
!
!!**** *BHMIE_WATER* - computes the intgration of the Mie parameters over
!! the drop size distributions
!!
!! PURPOSE
!! -------
!! The purpose of this routine is to compute the
!!
!!** METHOD
!! ------
!! The reflectivities are computed using the n(D) * D**6 formula. The
!!
!! EXTERNAL
!! --------
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!! Module MODD_CST
!! XPI !
!! XRHOLW ! Liquid water density
!! Module MODD_RAIN_ICE_DESCR
!! Module MODD_RAIN_ICE_PARAM
!!
!! REFERENCE
!! ---------
!!
!! AUTHOR
!! ------
!! J.-P. Pinty * Laboratoire d'Aerologie*
!! J.-P. Chaboureau * Laboratoire d'Aerologie*
!!
!! MODIFICATIONS
!! -------------
!! Original 01/04/07

WAUTELET Philippe
committed
! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
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
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CST
USE MODI_BHMIE
USE MODI_GAMMA
!USE MODI_GAULAG
IMPLICIT NONE
!
!* 0.1 Declarations of dummy arguments :
!
REAL, INTENT(IN) :: PWAVELENGTH ! EM wavelength
COMPLEX, INTENT(IN) :: PREFINDEX ! Refraction index
CHARACTER(LEN=*), INTENT(IN) :: HDSD ! Type de size distribution
REAL, INTENT(IN) :: PCONC ! Particle concentration
INTEGER, INTENT(IN) :: KANGLE ! Number of scattering angles
!
REAL, INTENT(OUT) :: PEXTINCTION_COEF ! Extinction
REAL, INTENT(OUT) :: PBACKSCAT_COEF ! BackScattering
!
INTEGER, OPTIONAL, INTENT(IN) :: KRADIUS ! Number of radii
! to discretize the dsd
REAL, OPTIONAL, INTENT(IN) :: PALPHA ! Gamma-dsd shape parameter
REAL, OPTIONAL, INTENT(IN) :: PNU ! Gamma-dsd shape parameter
REAL, OPTIONAL, INTENT(IN) :: PLWC ! Gamma-dsd liquid water content
REAL, OPTIONAL, INTENT(IN) :: PRADIUS ! Monodispersed-dsd radius
!
!* 0.2 Declarations of local variables :
!
INTEGER :: J
!
REAL :: ZDELTANGLE ! Angle increment
REAL :: ZNUM1 ! PNU-1.
REAL :: ZEXT ! Extinction efficiency
REAL :: ZBAK ! BackScattering efficiency
REAL :: ZSIZE_PARAM ! Size parameter
REAL :: ZLAMBDA ! Dsd slope parameter
REAL :: ZSHAPE_FACTOR ! Shape parameter
REAL :: ZSURF_FACTOR ! Surface parameter
!
COMPLEX, DIMENSION(:), ALLOCATABLE :: ZZS1,ZZS2
REAL, DIMENSION(:), ALLOCATABLE :: ZABSCISSI,ZWEIGHTS
!
!-------------------------------------------------------------------------------
!

WAUTELET Philippe
committed
ZDELTANGLE=0.5E0*XPI/REAL(KANGLE-1)
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
ALLOCATE(ZZS1(2*KANGLE-1))
ALLOCATE(ZZS2(2*KANGLE-1))
PEXTINCTION_COEF = 0.0
PBACKSCAT_COEF = 0.0
!
IF( HDSD=="GAMMA" ) THEN
ALLOCATE(ZABSCISSI(KRADIUS))
ALLOCATE(ZWEIGHTS(KRADIUS))
ZNUM1=PNU-1.0E0
CALL GAULAG(ZABSCISSI,ZWEIGHTS,KRADIUS,ZNUM1)
ZSHAPE_FACTOR = GAMMA(PNU+3.0/PALPHA)/GAMMA(PNU)
ZLAMBDA = ((XPI/6.E0)*(PCONC/PLWC)*ZSHAPE_FACTOR)**(1.0/3.0)
ZSURF_FACTOR = 0.25*XPI*PCONC/(ZLAMBDA)**2
DO J = 1,KRADIUS
ZSIZE_PARAM = (XPI/PWAVELENGTH)* &
((1.0/ZLAMBDA)*(ZABSCISSI(J))**(1.0/PALPHA))
CALL BHMIE(ZSIZE_PARAM,PREFINDEX,KANGLE,ZZS1,ZZS2,ZEXT,ZBAK)
ZWEIGHTS(J) = ZWEIGHTS(J)*ZSURF_FACTOR*(ZABSCISSI(J))**(2.0/PALPHA)
PEXTINCTION_COEF = PEXTINCTION_COEF+ZWEIGHTS(J)*ZEXT
PBACKSCAT_COEF = PBACKSCAT_COEF +ZWEIGHTS(J)*ZBAK
END DO
ELSE IF( HDSD=="MONOD" ) THEN
ZSIZE_PARAM = (2.E0*XPI*PRADIUS/PWAVELENGTH)
ZSURF_FACTOR = (XPI*PRADIUS**2)*PCONC
CALL BHMIE(ZSIZE_PARAM,PREFINDEX,KANGLE,ZZS1,ZZS2,ZEXT,ZBAK)
PEXTINCTION_COEF = ZSURF_FACTOR*ZEXT
PBACKSCAT_COEF = ZSURF_FACTOR*ZBAK
END IF
!
END SUBROUTINE BHMIE_WATER