source: LMDZ6/branches/Amaury_dev/libf/phylmd/cospv2/optics_lib.F90 @ 5086

Last change on this file since 5086 was 5086, checked in by abarral, 2 months ago

convert labeled do (f77) to do .. end do

File size: 40.1 KB
Line 
1! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2! Copyright (c) 2015, Regents of the University of Colorado
3! All rights reserved.
4!
5! Redistribution and use in source and binary forms, with or without modification, are
6! permitted provided that the following conditions are met:
7!
8! 1. Redistributions of source code must retain the above copyright notice, this list of
9!    conditions and the following disclaimer.
10!
11! 2. Redistributions in binary form must reproduce the above copyright notice, this list
12!    of conditions and the following disclaimer in the documentation and/or other
13!    materials provided with the distribution.
14!
15! 3. Neither the name of the copyright holder nor the names of its contributors may be
16!    used to endorse or promote products derived from this software without specific prior
17!    written permission.
18!
19! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21! MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22! THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24! OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27! OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28!
29! History:
30! July 2006: John Haynes      - Initial version
31! May 2015:  Dustin Swales    - Modified for COSPv2.0
32!
33! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34module optics_lib
35  USE COSP_KINDS,     ONLY: wp
36  use mod_cosp_error, ONLY: errorMessage
37  implicit none
38
39contains
40
41  ! ##############################################################################
42  !                           subroutine M_WAT
43  ! ##############################################################################
44  subroutine m_wat(freq, tk, n_r, n_i)
45    ! ############################################################################
46    ! 
47    ! Purpose:
48    !   compute complex index of refraction of liquid water
49    !
50    ! Inputs:
51    !   [freq]    frequency (GHz)
52    !   [tk]       temperature (K)
53    !
54    ! Outputs:
55    !   [n_r]     real part index of refraction
56    !   [n_i]     imaginary part index of refraction
57    !
58    ! Reference:
59    !   Based on the work of Ray (1972)
60    !
61    ! Coded:
62    !   03/22/05  John Haynes (haynes@atmos.colostate.edu)
63    ! ############################################################################
64
65    ! INPUTS
66    real(wp), intent(in) :: &
67         freq, & ! Frequency (GHz)
68         tk      ! Temperature (K)
69 
70    ! OUTPUTS
71    real(wp), intent(out) :: &
72         n_r,  & ! Real part of index of refraction
73         n_i     ! Imaginary part of index of refraction
74
75    ! Internal variables
76    real(wp) :: ld,es,ei,a,ls,sg,tm1,cos1,sin1,e_r,e_i,pi,tc
77    complex(wp) :: e_comp, sq
78
79    tc = tk - 273.15_wp
80
81    ld = 100._wp*2.99792458E8_wp/(freq*1E9_wp)
82    es = 78.54_wp*(1-(4.579E-3_wp*(tc-25._wp)+1.19E-5_wp*(tc-25._wp)**2 &
83         -2.8E-8_wp*(tc-25._wp)**3))
84    ei = 5.27137_wp+0.021647_wp*tc-0.00131198_wp*tc**2
85    a = -(16.8129_wp/(tc+273._wp))+0.0609265_wp
86    ls = 0.00033836_wp*exp(2513.98_wp/(tc+273._wp))
87    sg = 12.5664E8_wp
88   
89    tm1 = (ls/ld)**(1-a)
90    pi = acos(-1._wp)
91    cos1 = cos(0.5_wp*a*pi)
92    sin1 = sin(0.5_wp*a*pi)
93   
94    e_r = ei + (((es-ei)*(1.+tm1*sin1))/(1._wp+2*tm1*sin1+tm1**2))
95    e_i = (((es-ei)*tm1*cos1)/(1._wp+2*tm1*sin1+tm1**2)) &
96         +((sg*ld)/1.885E11_wp)
97   
98!ds    e_comp = cmplx(e_r,e_i,Kind=Kind(0d0))
99    e_comp = cmplx(e_r,e_i,Kind=wp)
100    sq = sqrt(e_comp)
101   
102    n_r = real(sq)
103    n_i = aimag(sq)     
104   
105    return
106  end subroutine m_wat
107
108  ! ############################################################################
109  !                           subroutine M_ICE
110  ! ############################################################################
111  subroutine m_ice(freq,t,n_r,n_i)
112    ! ##########################################################################
113    !
114    ! Purpose:
115    !   compute complex index of refraction of ice
116    !
117    ! Inputs:
118    !   [freq]    frequency (GHz)
119    !   [t]       temperature (K)
120    !
121    ! Outputs:
122    !   [n_r]     real part index of refraction
123    !   [n_i]     imaginary part index of refraction
124    !
125    ! Reference:
126    !    Fortran 90 port from IDL of REFICE by Stephen G. Warren
127    !
128    ! Modified:
129    !   05/31/05  John Haynes (haynes@atmos.colostate.edu)
130    ! ##########################################################################
131
132    ! INPUTS
133    real(wp), intent(in) :: &
134         freq, & ! Frequency (GHz)
135         t       ! Temperature (K)
136 
137    ! OUTPUTS
138    real(wp), intent(out) :: &
139         n_r,  & ! Real part of index of refraction
140         n_i     ! Imaginary part of index of refraction
141
142    ! Internal variables
143    integer  :: i,lt1,lt2
144    real(wp) :: alam,pi,t1,t2, &
145         x,x1,x2,y,y1,y2,ylo,yhi,tk
146
147
148    ! Parameters:
149    integer,parameter :: &
150         nwl  = 468,      & !
151         nwlt = 62          !
152    real(wp),parameter,dimension(4) :: &
153         temref = [272.16,268.16,253.16,213.16]
154    real(wp),parameter :: & !
155         wlmin  = 0.045,  & !
156         wlmax  = 8.6e6,  & !
157         cutice = 167.0
158    real(wp),parameter,dimension(nwlt) :: &
159         wlt = &
160         [0.1670e+03, 0.1778e+03, 0.1884e+03, 0.1995e+03, 0.2113e+03, 0.2239e+03, &
161          0.2371e+03, 0.2512e+03, 0.2661e+03, 0.2818e+03, 0.2985e+03, 0.3162e+03, &
162          0.3548e+03, 0.3981e+03, 0.4467e+03, 0.5012e+03, 0.5623e+03, 0.6310e+03, &
163          0.7943e+03, 0.1000e+04, 0.1259e+04, 0.2500e+04, 0.5000e+04, 0.1000e+05, &
164          0.2000e+05, 0.3200e+05, 0.3500e+05, 0.4000e+05, 0.4500e+05, 0.5000e+05, &
165          0.6000e+05, 0.7000e+05, 0.9000e+05, 0.1110e+06, 0.1200e+06, 0.1300e+06, &
166          0.1400e+06, 0.1500e+06, 0.1600e+06, 0.1700e+06, 0.1800e+06, 0.2000e+06, &
167          0.2500e+06, 0.2900e+06, 0.3200e+06, 0.3500e+06, 0.3800e+06, 0.4000e+06, &
168          0.4500e+06, 0.5000e+06, 0.6000e+06, 0.6400e+06, 0.6800e+06, 0.7200e+06, &
169          0.7600e+06, 0.8000e+06, 0.8400e+06, 0.9000e+06, 0.1000e+07, 0.2000e+07, &
170          0.5000e+07,0.8600e+07]
171    real(wp),parameter,dimension(nwl) :: &
172         tabim = &
173         [0.1640e+00, 0.1730e+00, 0.1830e+00, 0.1950e+00, 0.2080e+00, 0.2230e+00, &
174          0.2400e+00, 0.2500e+00, 0.2590e+00, 0.2680e+00, 0.2790e+00, 0.2970e+00, &
175          0.3190e+00, 0.3400e+00, 0.3660e+00, 0.3920e+00, 0.4160e+00, 0.4400e+00, &
176          0.4640e+00, 0.4920e+00, 0.5170e+00, 0.5280e+00, 0.5330e+00, 0.5340e+00, &
177          0.5310e+00, 0.5240e+00, 0.5100e+00, 0.5000e+00, 0.4990e+00, 0.4680e+00, &
178          0.3800e+00, 0.3600e+00, 0.3390e+00, 0.3180e+00, 0.2910e+00, 0.2510e+00, &
179          0.2440e+00, 0.2390e+00, 0.2390e+00, 0.2440e+00, 0.2470e+00, 0.2240e+00, &
180          0.1950e+00, 0.1740e+00, 0.1720e+00, 0.1800e+00, 0.1940e+00, 0.2130e+00, &
181          0.2430e+00, 0.2710e+00, 0.2890e+00, 0.3340e+00, 0.3440e+00, 0.3820e+00, &
182          0.4010e+00, 0.4065e+00, 0.4050e+00, 0.3890e+00, 0.3770e+00, 0.3450e+00, &
183          0.3320e+00, 0.3150e+00, 0.2980e+00, 0.2740e+00, 0.2280e+00, 0.1980e+00, &
184          0.1720e+00, 0.1560e+00, 0.1100e+00, 0.8300e-01, 0.5800e-01, 0.2200e-01, &
185          0.1000e-01, 0.3000e-02, 0.1000e-02, 0.3000e-03, 0.1000e-03, 0.3000e-04, &
186          0.1000e-04, 0.3000e-05, 0.1000e-05, 0.7000e-06, 0.4000e-06, 0.2000e-06, &
187          0.1000e-06, 0.6377e-07, 0.3750e-07, 0.2800e-07, 0.2400e-07, 0.2200e-07, &
188          0.1900e-07, 0.1750e-07, 0.1640e-07, 0.1590e-07, 0.1325e-07, 0.8623e-08, &
189          0.5504e-08, 0.3765e-08, 0.2710e-08, 0.2510e-08, 0.2260e-08, 0.2080e-08, &
190          0.1910e-08, 0.1540e-08, 0.1530e-08, 0.1550e-08, 0.1640e-08, 0.1780e-08, &
191          0.1910e-08, 0.2140e-08, 0.2260e-08, 0.2540e-08, 0.2930e-08, 0.3110e-08, &
192          0.3290e-08, 0.3520e-08, 0.4040e-08, 0.4880e-08, 0.5730e-08, 0.6890e-08, &
193          0.8580e-08, 0.1040e-07, 0.1220e-07, 0.1430e-07, 0.1660e-07, 0.1890e-07, &
194          0.2090e-07, 0.2400e-07, 0.2900e-07, 0.3440e-07, 0.4030e-07, 0.4300e-07, &
195          0.4920e-07, 0.5870e-07, 0.7080e-07, 0.8580e-07, 0.1020e-06, 0.1180e-06, &
196          0.1340e-06, 0.1400e-06, 0.1430e-06, 0.1450e-06, 0.1510e-06, 0.1830e-06, &
197          0.2150e-06, 0.2650e-06, 0.3350e-06, 0.3920e-06, 0.4200e-06, 0.4440e-06, &
198          0.4740e-06, 0.5110e-06, 0.5530e-06, 0.6020e-06, 0.7550e-06, 0.9260e-06, &
199          0.1120e-05, 0.1330e-05, 0.1620e-05, 0.2000e-05, 0.2250e-05, 0.2330e-05, &
200          0.2330e-05, 0.2170e-05, 0.1960e-05, 0.1810e-05, 0.1740e-05, 0.1730e-05, &
201          0.1700e-05, 0.1760e-05, 0.1820e-05, 0.2040e-05, 0.2250e-05, 0.2290e-05, &
202          0.3040e-05, 0.3840e-05, 0.4770e-05, 0.5760e-05, 0.6710e-05, 0.8660e-05, &
203          0.1020e-04, 0.1130e-04, 0.1220e-04, 0.1290e-04, 0.1320e-04, 0.1350e-04, &
204          0.1330e-04, 0.1320e-04, 0.1320e-04, 0.1310e-04, 0.1320e-04, 0.1320e-04, &
205          0.1340e-04, 0.1390e-04, 0.1420e-04, 0.1480e-04, 0.1580e-04, 0.1740e-04, &
206          0.1980e-04, 0.2500e-04, 0.5400e-04, 0.1040e-03, 0.2030e-03, 0.2708e-03, &
207          0.3511e-03, 0.4299e-03, 0.5181e-03, 0.5855e-03, 0.5899e-03, 0.5635e-03, &
208          0.5480e-03, 0.5266e-03, 0.4394e-03, 0.3701e-03, 0.3372e-03, 0.2410e-03, &
209          0.1890e-03, 0.1660e-03, 0.1450e-03, 0.1280e-03, 0.1030e-03, 0.8600e-04, &
210          0.8220e-04, 0.8030e-04, 0.8500e-04, 0.9900e-04, 0.1500e-03, 0.2950e-03, &
211          0.4687e-03, 0.7615e-03, 0.1010e-02, 0.1313e-02, 0.1539e-02, 0.1588e-02, &
212          0.1540e-02, 0.1412e-02, 0.1244e-02, 0.1068e-02, 0.8414e-03, 0.5650e-03, &
213          0.4320e-03, 0.3500e-03, 0.2870e-03, 0.2210e-03, 0.2030e-03, 0.2010e-03, &
214          0.2030e-03, 0.2140e-03, 0.2320e-03, 0.2890e-03, 0.3810e-03, 0.4620e-03, &
215          0.5480e-03, 0.6180e-03, 0.6800e-03, 0.7300e-03, 0.7820e-03, 0.8480e-03, &
216          0.9250e-03, 0.9200e-03, 0.8920e-03, 0.8700e-03, 0.8900e-03, 0.9300e-03, &
217          0.1010e-02, 0.1350e-02, 0.3420e-02, 0.7920e-02, 0.2000e-01, 0.3800e-01, &
218          0.5200e-01, 0.6800e-01, 0.9230e-01, 0.1270e+00, 0.1690e+00, 0.2210e+00, &
219          0.2760e+00, 0.3120e+00, 0.3470e+00, 0.3880e+00, 0.4380e+00, 0.4930e+00, &
220          0.5540e+00, 0.6120e+00, 0.6250e+00, 0.5930e+00, 0.5390e+00, 0.4910e+00, &
221          0.4380e+00, 0.3720e+00, 0.3000e+00, 0.2380e+00, 0.1930e+00, 0.1580e+00, &
222          0.1210e+00, 0.1030e+00, 0.8360e-01, 0.6680e-01, 0.5400e-01, 0.4220e-01, &
223          0.3420e-01, 0.2740e-01, 0.2200e-01, 0.1860e-01, 0.1520e-01, 0.1260e-01, &
224          0.1060e-01, 0.8020e-02, 0.6850e-02, 0.6600e-02, 0.6960e-02, 0.9160e-02, &
225          0.1110e-01, 0.1450e-01, 0.2000e-01, 0.2300e-01, 0.2600e-01, 0.2900e-01, &
226          0.2930e-01, 0.3000e-01, 0.2850e-01, 0.1730e-01, 0.1290e-01, 0.1200e-01, &
227          0.1250e-01, 0.1340e-01, 0.1400e-01, 0.1750e-01, 0.2400e-01, 0.3500e-01, &
228          0.3800e-01, 0.4200e-01, 0.4600e-01, 0.5200e-01, 0.5700e-01, 0.6900e-01, &
229          0.7000e-01, 0.6700e-01, 0.6500e-01, 0.6400e-01, 0.6200e-01, 0.5900e-01, &
230          0.5700e-01, 0.5600e-01, 0.5500e-01, 0.5700e-01, 0.5800e-01, 0.5700e-01, &
231          0.5500e-01, 0.5500e-01, 0.5400e-01, 0.5200e-01, 0.5200e-01, 0.5200e-01, &
232          0.5200e-01, 0.5000e-01, 0.4700e-01, 0.4300e-01, 0.3900e-01, 0.3700e-01, &
233          0.3900e-01, 0.4000e-01, 0.4200e-01, 0.4400e-01, 0.4500e-01, 0.4600e-01, &
234          0.4700e-01, 0.5100e-01, 0.6500e-01, 0.7500e-01, 0.8800e-01, 0.1080e+00, &
235          0.1340e+00, 0.1680e+00, 0.2040e+00, 0.2480e+00, 0.2800e+00, 0.3410e+00, &
236          0.3790e+00, 0.4090e+00, 0.4220e+00, 0.4220e+00, 0.4030e+00, 0.3890e+00, &
237          0.3740e+00, 0.3540e+00, 0.3350e+00, 0.3150e+00, 0.2940e+00, 0.2710e+00, &
238          0.2460e+00, 0.1980e+00, 0.1640e+00, 0.1520e+00, 0.1420e+00, 0.1280e+00, &
239          0.1250e+00, 0.1230e+00, 0.1160e+00, 0.1070e+00, 0.7900e-01, 0.7200e-01, &
240          0.7600e-01, 0.7500e-01, 0.6700e-01, 0.5500e-01, 0.4500e-01, 0.2900e-01, &
241          0.2750e-01, 0.2700e-01, 0.2730e-01, 0.2890e-01, 0.3000e-01, 0.3400e-01, &
242          0.5300e-01, 0.7550e-01, 0.1060e+00, 0.1350e+00, 0.1761e+00, 0.2229e+00, &
243          0.2746e+00, 0.3280e+00, 0.3906e+00, 0.4642e+00, 0.5247e+00, 0.5731e+00, &
244          0.6362e+00, 0.6839e+00, 0.7091e+00, 0.6790e+00, 0.6250e+00, 0.5654e+00, &
245          0.5433e+00, 0.5292e+00, 0.5070e+00, 0.4883e+00, 0.4707e+00, 0.4203e+00, &
246          0.3771e+00, 0.3376e+00, 0.3056e+00, 0.2835e+00, 0.3170e+00, 0.3517e+00, &
247          0.3902e+00, 0.4509e+00, 0.4671e+00, 0.4779e+00, 0.4890e+00, 0.4899e+00, &
248          0.4873e+00, 0.4766e+00, 0.4508e+00, 0.4193e+00, 0.3880e+00, 0.3433e+00, &
249          0.3118e+00, 0.2935e+00, 0.2350e+00, 0.1981e+00, 0.1865e+00, 0.1771e+00, &
250          0.1620e+00, 0.1490e+00, 0.1390e+00, 0.1200e+00, 0.9620e-01, 0.8300e-01]
251    real(wp),parameter,dimension(nwl) :: &
252         wl = &
253         [0.4430e-01, 0.4510e-01, 0.4590e-01, 0.4680e-01, 0.4770e-01, 0.4860e-01, &
254          0.4960e-01, 0.5060e-01, 0.5170e-01, 0.5280e-01, 0.5390e-01, 0.5510e-01, &
255          0.5640e-01, 0.5770e-01, 0.5900e-01, 0.6050e-01, 0.6200e-01, 0.6360e-01, &
256          0.6530e-01, 0.6700e-01, 0.6890e-01, 0.7080e-01, 0.7290e-01, 0.7380e-01, &
257          0.7510e-01, 0.7750e-01, 0.8000e-01, 0.8270e-01, 0.8550e-01, 0.8860e-01, &
258          0.9180e-01, 0.9300e-01, 0.9540e-01, 0.9920e-01, 0.1033e+00, 0.1078e+00, &
259          0.1100e+00, 0.1127e+00, 0.1140e+00, 0.1181e+00, 0.1210e+00, 0.1240e+00, &
260          0.1272e+00, 0.1295e+00, 0.1305e+00, 0.1319e+00, 0.1333e+00, 0.1348e+00, &
261          0.1362e+00, 0.1370e+00, 0.1378e+00, 0.1387e+00, 0.1393e+00, 0.1409e+00, &
262          0.1425e+00, 0.1435e+00, 0.1442e+00, 0.1450e+00, 0.1459e+00, 0.1468e+00, &
263          0.1476e+00, 0.1480e+00, 0.1485e+00, 0.1494e+00, 0.1512e+00, 0.1531e+00, &
264          0.1540e+00, 0.1550e+00, 0.1569e+00, 0.1580e+00, 0.1589e+00, 0.1610e+00, &
265          0.1625e+00, 0.1648e+00, 0.1669e+00, 0.1692e+00, 0.1713e+00, 0.1737e+00, &
266          0.1757e+00, 0.1779e+00, 0.1802e+00, 0.1809e+00, 0.1821e+00, 0.1833e+00, &
267          0.1843e+00, 0.1850e+00, 0.1860e+00, 0.1870e+00, 0.1880e+00, 0.1890e+00, &
268          0.1900e+00, 0.1910e+00, 0.1930e+00, 0.1950e+00, 0.2100e+00, 0.2500e+00, &
269          0.3000e+00, 0.3500e+00, 0.4000e+00, 0.4100e+00, 0.4200e+00, 0.4300e+00, &
270          0.4400e+00, 0.4500e+00, 0.4600e+00, 0.4700e+00, 0.4800e+00, 0.4900e+00, &
271          0.5000e+00, 0.5100e+00, 0.5200e+00, 0.5300e+00, 0.5400e+00, 0.5500e+00, &
272          0.5600e+00, 0.5700e+00, 0.5800e+00, 0.5900e+00, 0.6000e+00, 0.6100e+00, &
273          0.6200e+00, 0.6300e+00, 0.6400e+00, 0.6500e+00, 0.6600e+00, 0.6700e+00, &
274          0.6800e+00, 0.6900e+00, 0.7000e+00, 0.7100e+00, 0.7200e+00, 0.7300e+00, &
275          0.7400e+00, 0.7500e+00, 0.7600e+00, 0.7700e+00, 0.7800e+00, 0.7900e+00, &
276          0.8000e+00, 0.8100e+00, 0.8200e+00, 0.8300e+00, 0.8400e+00, 0.8500e+00, &
277          0.8600e+00, 0.8700e+00, 0.8800e+00, 0.8900e+00, 0.9000e+00, 0.9100e+00, &
278          0.9200e+00, 0.9300e+00, 0.9400e+00, 0.9500e+00, 0.9600e+00, 0.9700e+00, &
279          0.9800e+00, 0.9900e+00, 0.1000e+01, 0.1010e+01, 0.1020e+01, 0.1030e+01, &
280          0.1040e+01, 0.1050e+01, 0.1060e+01, 0.1070e+01, 0.1080e+01, 0.1090e+01, &
281          0.1100e+01, 0.1110e+01, 0.1120e+01, 0.1130e+01, 0.1140e+01, 0.1150e+01, &
282          0.1160e+01, 0.1170e+01, 0.1180e+01, 0.1190e+01, 0.1200e+01, 0.1210e+01, &
283          0.1220e+01, 0.1230e+01, 0.1240e+01, 0.1250e+01, 0.1260e+01, 0.1270e+01, &
284          0.1280e+01, 0.1290e+01, 0.1300e+01, 0.1310e+01, 0.1320e+01, 0.1330e+01, &
285          0.1340e+01, 0.1350e+01, 0.1360e+01, 0.1370e+01, 0.1380e+01, 0.1390e+01, &
286          0.1400e+01, 0.1410e+01, 0.1420e+01, 0.1430e+01, 0.1440e+01, 0.1449e+01, &
287          0.1460e+01, 0.1471e+01, 0.1481e+01, 0.1493e+01, 0.1504e+01, 0.1515e+01, &
288          0.1527e+01, 0.1538e+01, 0.1563e+01, 0.1587e+01, 0.1613e+01, 0.1650e+01, &
289          0.1680e+01, 0.1700e+01, 0.1730e+01, 0.1760e+01, 0.1800e+01, 0.1830e+01, &
290          0.1840e+01, 0.1850e+01, 0.1855e+01, 0.1860e+01, 0.1870e+01, 0.1890e+01, &
291          0.1905e+01, 0.1923e+01, 0.1942e+01, 0.1961e+01, 0.1980e+01, 0.2000e+01, &
292          0.2020e+01, 0.2041e+01, 0.2062e+01, 0.2083e+01, 0.2105e+01, 0.2130e+01, &
293          0.2150e+01, 0.2170e+01, 0.2190e+01, 0.2220e+01, 0.2240e+01, 0.2245e+01, &
294          0.2250e+01, 0.2260e+01, 0.2270e+01, 0.2290e+01, 0.2310e+01, 0.2330e+01, &
295          0.2350e+01, 0.2370e+01, 0.2390e+01, 0.2410e+01, 0.2430e+01, 0.2460e+01, &
296          0.2500e+01, 0.2520e+01, 0.2550e+01, 0.2565e+01, 0.2580e+01, 0.2590e+01, &
297          0.2600e+01, 0.2620e+01, 0.2675e+01, 0.2725e+01, 0.2778e+01, 0.2817e+01, &
298          0.2833e+01, 0.2849e+01, 0.2865e+01, 0.2882e+01, 0.2899e+01, 0.2915e+01, &
299          0.2933e+01, 0.2950e+01, 0.2967e+01, 0.2985e+01, 0.3003e+01, 0.3021e+01, &
300          0.3040e+01, 0.3058e+01, 0.3077e+01, 0.3096e+01, 0.3115e+01, 0.3135e+01, &
301          0.3155e+01, 0.3175e+01, 0.3195e+01, 0.3215e+01, 0.3236e+01, 0.3257e+01, &
302          0.3279e+01, 0.3300e+01, 0.3322e+01, 0.3345e+01, 0.3367e+01, 0.3390e+01, &
303          0.3413e+01, 0.3436e+01, 0.3460e+01, 0.3484e+01, 0.3509e+01, 0.3534e+01, &
304          0.3559e+01, 0.3624e+01, 0.3732e+01, 0.3775e+01, 0.3847e+01, 0.3969e+01, &
305          0.4099e+01, 0.4239e+01, 0.4348e+01, 0.4387e+01, 0.4444e+01, 0.4505e+01, &
306          0.4547e+01, 0.4560e+01, 0.4580e+01, 0.4719e+01, 0.4904e+01, 0.5000e+01, &
307          0.5100e+01, 0.5200e+01, 0.5263e+01, 0.5400e+01, 0.5556e+01, 0.5714e+01, &
308          0.5747e+01, 0.5780e+01, 0.5814e+01, 0.5848e+01, 0.5882e+01, 0.6061e+01, &
309          0.6135e+01, 0.6250e+01, 0.6289e+01, 0.6329e+01, 0.6369e+01, 0.6410e+01, &
310          0.6452e+01, 0.6494e+01, 0.6579e+01, 0.6667e+01, 0.6757e+01, 0.6897e+01, &
311          0.7042e+01, 0.7143e+01, 0.7246e+01, 0.7353e+01, 0.7463e+01, 0.7576e+01, &
312          0.7692e+01, 0.7812e+01, 0.7937e+01, 0.8065e+01, 0.8197e+01, 0.8333e+01, &
313          0.8475e+01, 0.8696e+01, 0.8929e+01, 0.9091e+01, 0.9259e+01, 0.9524e+01, &
314          0.9804e+01, 0.1000e+02, 0.1020e+02, 0.1031e+02, 0.1042e+02, 0.1053e+02, &
315          0.1064e+02, 0.1075e+02, 0.1087e+02, 0.1100e+02, 0.1111e+02, 0.1136e+02, &
316          0.1163e+02, 0.1190e+02, 0.1220e+02, 0.1250e+02, 0.1282e+02, 0.1299e+02, &
317          0.1316e+02, 0.1333e+02, 0.1351e+02, 0.1370e+02, 0.1389e+02, 0.1408e+02, &
318          0.1429e+02, 0.1471e+02, 0.1515e+02, 0.1538e+02, 0.1563e+02, 0.1613e+02, &
319          0.1639e+02, 0.1667e+02, 0.1695e+02, 0.1724e+02, 0.1818e+02, 0.1887e+02, &
320          0.1923e+02, 0.1961e+02, 0.2000e+02, 0.2041e+02, 0.2083e+02, 0.2222e+02, &
321          0.2260e+02, 0.2305e+02, 0.2360e+02, 0.2460e+02, 0.2500e+02, 0.2600e+02, &
322          0.2857e+02, 0.3100e+02, 0.3333e+02, 0.3448e+02, 0.3564e+02, 0.3700e+02, &
323          0.3824e+02, 0.3960e+02, 0.4114e+02, 0.4276e+02, 0.4358e+02, 0.4458e+02, &
324          0.4550e+02, 0.4615e+02, 0.4671e+02, 0.4736e+02, 0.4800e+02, 0.4878e+02, &
325          0.5003e+02, 0.5128e+02, 0.5275e+02, 0.5350e+02, 0.5424e+02, 0.5500e+02, &
326          0.5574e+02, 0.5640e+02, 0.5700e+02, 0.5746e+02, 0.5840e+02, 0.5929e+02, &
327          0.6000e+02, 0.6100e+02, 0.6125e+02, 0.6250e+02, 0.6378e+02, 0.6467e+02, &
328          0.6558e+02, 0.6655e+02, 0.6760e+02, 0.6900e+02, 0.7053e+02, 0.7300e+02, &
329          0.7500e+02, 0.7629e+02, 0.8000e+02, 0.8297e+02, 0.8500e+02, 0.8680e+02, &
330          0.9080e+02, 0.9517e+02, 0.1000e+03, 0.1200e+03, 0.1500e+03, 0.1670e+03]
331    real(wp),parameter,dimension(nwlt,4) :: &
332         tabimt = reshape(source= &
333        (/0.8300e-01, 0.6900e-01, 0.5700e-01, 0.4560e-01, 0.3790e-01, 0.3140e-01, &
334          0.2620e-01, 0.2240e-01, 0.1960e-01, 0.1760e-01, 0.1665e-01, 0.1620e-01, &
335          0.1550e-01, 0.1470e-01, 0.1390e-01, 0.1320e-01, 0.1250e-01, 0.1180e-01, &
336          0.1060e-01, 0.9540e-02, 0.8560e-02, 0.6210e-02, 0.4490e-02, 0.3240e-02, &
337          0.2340e-02, 0.1880e-02, 0.1740e-02, 0.1500e-02, 0.1320e-02, 0.1160e-02, &
338          0.8800e-03, 0.6950e-03, 0.4640e-03, 0.3400e-03, 0.3110e-03, 0.2940e-03, &
339          0.2790e-03, 0.2700e-03, 0.2640e-03, 0.2580e-03, 0.2520e-03, 0.2490e-03, &
340          0.2540e-03, 0.2640e-03, 0.2740e-03, 0.2890e-03, 0.3050e-03, 0.3150e-03, &
341          0.3460e-03, 0.3820e-03, 0.4620e-03, 0.5000e-03, 0.5500e-03, 0.5950e-03, &
342          0.6470e-03, 0.6920e-03, 0.7420e-03, 0.8200e-03, 0.9700e-03, 0.1950e-02, &
343          0.5780e-02, 0.9700e-02, 0.8300e-01, 0.6900e-01, 0.5700e-01, 0.4560e-01, &
344          0.3790e-01, 0.3140e-01, 0.2620e-01, 0.2240e-01, 0.1960e-01, 0.1760e-01, &
345          0.1665e-01, 0.1600e-01, 0.1500e-01, 0.1400e-01, 0.1310e-01, 0.1230e-01, &
346          0.1150e-01, 0.1080e-01, 0.9460e-02, 0.8290e-02, 0.7270e-02, 0.4910e-02, &
347          0.3300e-02, 0.2220e-02, 0.1490e-02, 0.1140e-02, 0.1060e-02, 0.9480e-03, &
348          0.8500e-03, 0.7660e-03, 0.6300e-03, 0.5200e-03, 0.3840e-03, 0.2960e-03, &
349          0.2700e-03, 0.2520e-03, 0.2440e-03, 0.2360e-03, 0.2300e-03, 0.2280e-03, &
350          0.2250e-03, 0.2200e-03, 0.2160e-03, 0.2170e-03, 0.2200e-03, 0.2250e-03, &
351          0.2320e-03, 0.2390e-03, 0.2600e-03, 0.2860e-03, 0.3560e-03, 0.3830e-03, &
352          0.4150e-03, 0.4450e-03, 0.4760e-03, 0.5080e-03, 0.5400e-03, 0.5860e-03, &
353          0.6780e-03, 0.1280e-02, 0.3550e-02, 0.5600e-02, 0.8300e-01, 0.6900e-01, &
354          0.5700e-01, 0.4560e-01, 0.3790e-01, 0.3140e-01, 0.2620e-01, 0.2190e-01, &
355          0.1880e-01, 0.1660e-01, 0.1540e-01, 0.1470e-01, 0.1350e-01, 0.1250e-01, &
356          0.1150e-01, 0.1060e-01, 0.9770e-02, 0.9010e-02, 0.7660e-02, 0.6520e-02, &
357          0.5540e-02, 0.3420e-02, 0.2100e-02, 0.1290e-02, 0.7930e-03, 0.5700e-03, &
358          0.5350e-03, 0.4820e-03, 0.4380e-03, 0.4080e-03, 0.3500e-03, 0.3200e-03, &
359          0.2550e-03, 0.2120e-03, 0.2000e-03, 0.1860e-03, 0.1750e-03, 0.1660e-03, &
360          0.1560e-03, 0.1490e-03, 0.1440e-03, 0.1350e-03, 0.1210e-03, 0.1160e-03, &
361          0.1160e-03, 0.1170e-03, 0.1200e-03, 0.1230e-03, 0.1320e-03, 0.1440e-03, &
362          0.1680e-03, 0.1800e-03, 0.1900e-03, 0.2090e-03, 0.2160e-03, 0.2290e-03, &
363          0.2400e-03, 0.2600e-03, 0.2920e-03, 0.6100e-03, 0.1020e-02, 0.1810e-02, &
364          0.8300e-01, 0.6900e-01, 0.5700e-01, 0.4450e-01, 0.3550e-01, 0.2910e-01, &
365          0.2440e-01, 0.1970e-01, 0.1670e-01, 0.1400e-01, 0.1235e-01, 0.1080e-01, &
366          0.8900e-02, 0.7340e-02, 0.6400e-02, 0.5600e-02, 0.5000e-02, 0.4520e-02, &
367          0.3680e-02, 0.2990e-02, 0.2490e-02, 0.1550e-02, 0.9610e-03, 0.5950e-03, &
368          0.3690e-03, 0.2670e-03, 0.2510e-03, 0.2290e-03, 0.2110e-03, 0.1960e-03, &
369          0.1730e-03, 0.1550e-03, 0.1310e-03, 0.1130e-03, 0.1060e-03, 0.9900e-04, &
370          0.9300e-04, 0.8730e-04, 0.8300e-04, 0.7870e-04, 0.7500e-04, 0.6830e-04, &
371          0.5600e-04, 0.4960e-04, 0.4550e-04, 0.4210e-04, 0.3910e-04, 0.3760e-04, &
372          0.3400e-04, 0.3100e-04, 0.2640e-04, 0.2510e-04, 0.2430e-04, 0.2390e-04, &
373          0.2370e-04, 0.2380e-04, 0.2400e-04, 0.2460e-04, 0.2660e-04, 0.4450e-04, &
374          0.8700e-04, 0.1320e-03/),shape=(/nwlt,4/))
375
376    real(wp),parameter,dimension(nwl) :: &
377         tabre = &
378         [0.83441,   0.83676,   0.83729,   0.83771,   0.83827,   0.84038, &
379          0.84719,   0.85522,   0.86047,   0.86248,   0.86157,   0.86093, &
380          0.86419,   0.86916,   0.87764,   0.89296,   0.91041,   0.93089, &
381          0.95373,   0.98188,   1.02334,   1.06735,   1.11197,   1.13134, &
382          1.15747,   1.20045,   1.23840,   1.27325,   1.32157,   1.38958, &
383          1.41644,   1.40906,   1.40063,   1.40169,   1.40934,   1.40221, &
384          1.39240,   1.38424,   1.38075,   1.38186,   1.39634,   1.40918, &
385          1.40256,   1.38013,   1.36303,   1.34144,   1.32377,   1.30605, &
386          1.29054,   1.28890,   1.28931,   1.30190,   1.32025,   1.36302, &
387          1.41872,   1.45834,   1.49028,   1.52128,   1.55376,   1.57782, &
388          1.59636,   1.60652,   1.61172,   1.61919,   1.62522,   1.63404, &
389          1.63689,   1.63833,   1.63720,   1.63233,   1.62222,   1.58269, &
390          1.55635,   1.52453,   1.50320,   1.48498,   1.47226,   1.45991, &
391          1.45115,   1.44272,   1.43498,   1.43280,   1.42924,   1.42602, &
392          1.42323,   1.42143,   1.41897,   1.41660,   1.41434,   1.41216, &
393          1.41006,   1.40805,   1.40423,   1.40067,   1.38004,   1.35085, &
394          1.33394,   1.32492,   1.31940,   1.31854,   1.31775,   1.31702, &
395          1.31633,   1.31569,   1.31509,   1.31452,   1.31399,   1.31349, &
396          1.31302,   1.31257,   1.31215,   1.31175,   1.31136,   1.31099, &
397          1.31064,   1.31031,   1.30999,   1.30968,   1.30938,   1.30909, &
398          1.30882,   1.30855,   1.30829,   1.30804,   1.30780,   1.30756, &
399          1.30733,   1.30710,   1.30688,   1.30667,   1.30646,   1.30625, &
400          1.30605,   1.30585,   1.30566,   1.30547,   1.30528,   1.30509, &
401          1.30491,   1.30473,   1.30455,   1.30437,   1.30419,   1.30402, &
402          1.30385,   1.30367,   1.30350,   1.30333,   1.30316,   1.30299, &
403          1.30283,   1.30266,   1.30249,   1.30232,   1.30216,   1.30199, &
404          1.30182,   1.30166,   1.30149,   1.30132,   1.30116,   1.30099, &
405          1.30082,   1.30065,   1.30048,   1.30031,   1.30014,   1.29997, &
406          1.29979,   1.29962,   1.29945,   1.29927,   1.29909,   1.29891, &
407          1.29873,   1.29855,   1.29837,   1.29818,   1.29800,   1.29781, &
408          1.29762,   1.29743,   1.29724,   1.29705,   1.29686,   1.29666, &
409          1.29646,   1.29626,   1.29605,   1.29584,   1.29563,   1.29542, &
410          1.29521,   1.29499,   1.29476,   1.29453,   1.29430,   1.29406, &
411          1.29381,   1.29355,   1.29327,   1.29299,   1.29272,   1.29252, &
412          1.29228,   1.29205,   1.29186,   1.29167,   1.29150,   1.29130, &
413          1.29106,   1.29083,   1.29025,   1.28962,   1.28891,   1.28784, &
414          1.28689,   1.28623,   1.28521,   1.28413,   1.28261,   1.28137, &
415          1.28093,   1.28047,   1.28022,   1.27998,   1.27948,   1.27849, &
416          1.27774,   1.27691,   1.27610,   1.27535,   1.27471,   1.27404, &
417          1.27329,   1.27240,   1.27139,   1.27029,   1.26901,   1.26736, &
418          1.26591,   1.26441,   1.26284,   1.26036,   1.25860,   1.25815, &
419          1.25768,   1.25675,   1.25579,   1.25383,   1.25179,   1.24967, &
420          1.24745,   1.24512,   1.24266,   1.24004,   1.23725,   1.23270, &
421          1.22583,   1.22198,   1.21548,   1.21184,   1.20790,   1.20507, &
422          1.20209,   1.19566,   1.17411,   1.14734,   1.10766,   1.06739, &
423          1.04762,   1.02650,   1.00357,   0.98197,   0.96503,   0.95962, &
424          0.97269,   0.99172,   1.00668,   1.02186,   1.04270,   1.07597, &
425          1.12954,   1.21267,   1.32509,   1.42599,   1.49656,   1.55095, &
426          1.59988,   1.63631,   1.65024,   1.64278,   1.62691,   1.61284, &
427          1.59245,   1.57329,   1.55770,   1.54129,   1.52654,   1.51139, &
428          1.49725,   1.48453,   1.47209,   1.46125,   1.45132,   1.44215, &
429          1.43366,   1.41553,   1.39417,   1.38732,   1.37735,   1.36448, &
430          1.35414,   1.34456,   1.33882,   1.33807,   1.33847,   1.34053, &
431          1.34287,   1.34418,   1.34634,   1.34422,   1.33453,   1.32897, &
432          1.32333,   1.31800,   1.31432,   1.30623,   1.29722,   1.28898, &
433          1.28730,   1.28603,   1.28509,   1.28535,   1.28813,   1.30156, &
434          1.30901,   1.31720,   1.31893,   1.32039,   1.32201,   1.32239, &
435          1.32149,   1.32036,   1.31814,   1.31705,   1.31807,   1.31953, &
436          1.31933,   1.31896,   1.31909,   1.31796,   1.31631,   1.31542, &
437          1.31540,   1.31552,   1.31455,   1.31193,   1.30677,   1.29934, &
438          1.29253,   1.28389,   1.27401,   1.26724,   1.25990,   1.24510, &
439          1.22241,   1.19913,   1.17150,   1.15528,   1.13700,   1.11808, &
440          1.10134,   1.09083,   1.08734,   1.09254,   1.10654,   1.14779, &
441          1.20202,   1.25825,   1.32305,   1.38574,   1.44478,   1.47170, &
442          1.49619,   1.51652,   1.53328,   1.54900,   1.56276,   1.57317, &
443          1.58028,   1.57918,   1.56672,   1.55869,   1.55081,   1.53807, &
444          1.53296,   1.53220,   1.53340,   1.53289,   1.51705,   1.50097, &
445          1.49681,   1.49928,   1.50153,   1.49856,   1.49053,   1.46070, &
446          1.45182,   1.44223,   1.43158,   1.41385,   1.40676,   1.38955, &
447          1.34894,   1.31039,   1.26420,   1.23656,   1.21663,   1.20233, &
448          1.19640,   1.19969,   1.20860,   1.22173,   1.24166,   1.28175, &
449          1.32784,   1.38657,   1.46486,   1.55323,   1.60379,   1.61877, &
450          1.62963,   1.65712,   1.69810,   1.72065,   1.74865,   1.76736, &
451          1.76476,   1.75011,   1.72327,   1.68490,   1.62398,   1.59596, &
452          1.58514,   1.59917,   1.61405,   1.66625,   1.70663,   1.73713, &
453          1.76860,   1.80343,   1.83296,   1.85682,   1.87411,   1.89110, &
454          1.89918,   1.90432,   1.90329,   1.88744,   1.87499,   1.86702, &
455          1.85361,   1.84250,   1.83225,   1.81914,   1.82268,   1.82961]
456    real(wp),parameter,dimension(nwlt,4) :: &
457         tabret = reshape( &
458           source =(/1.82961,   1.83258,   1.83149, &
459          1.82748,   1.82224,   1.81718,   1.81204,   1.80704,   1.80250, &
460          1.79834,   1.79482,   1.79214,   1.78843,   1.78601,   1.78434, &
461          1.78322,   1.78248,   1.78201,   1.78170,   1.78160,   1.78190, &
462          1.78300,   1.78430,   1.78520,   1.78620,   1.78660,   1.78680, &
463          1.78690,   1.78700,   1.78700,   1.78710,   1.78710,   1.78720, &
464          1.78720,   1.78720,   1.78720,   1.78720,   1.78720,   1.78720, &
465          1.78720,   1.78720,   1.78720,   1.78720,   1.78720,   1.78720, &
466          1.78720,   1.78720,   1.78720,   1.78720,   1.78720,   1.78720, &
467          1.78720,   1.78720,   1.78720,   1.78720,   1.78720,   1.78720, &
468          1.78720,   1.78720,   1.78720,   1.78720,   1.78800,            &
469          1.82961,   1.83258,   1.83149,   1.82748,                       &
470          1.82224,   1.81718,   1.81204,   1.80704,   1.80250,   1.79834, &
471          1.79482,   1.79214,   1.78843,   1.78601,   1.78434,   1.78322, &
472          1.78248,   1.78201,   1.78170,   1.78160,   1.78190,   1.78300, &
473          1.78430,   1.78520,   1.78610,   1.78630,   1.78640,   1.78650, &
474          1.78650,   1.78650,   1.78650,   1.78650,   1.78650,   1.78650, &
475          1.78650,   1.78650,   1.78650,   1.78650,   1.78650,   1.78650, &
476          1.78650,   1.78650,   1.78650,   1.78650,   1.78650,   1.78650, &
477          1.78650,   1.78650,   1.78650,   1.78650,   1.78650,   1.78650, &
478          1.78650,   1.78650,   1.78650,   1.78650,   1.78650,   1.78650, &
479          1.78650,   1.78650,   1.78650,   1.78720,                       &
480          1.82961,   1.83258,   1.83149,   1.82748,   1.82224,            &
481          1.81718,   1.81204,   1.80704,   1.80250,   1.79834,   1.79482, &
482          1.79214,   1.78843,   1.78601,   1.78434,   1.78322,   1.78248, &
483          1.78201,   1.78160,   1.78140,   1.78160,   1.78220,   1.78310, &
484          1.78380,   1.78390,   1.78400,   1.78400,   1.78400,   1.78400, &
485          1.78400,   1.78390,   1.78380,   1.78370,   1.78370,   1.78370, &
486          1.78370,   1.78370,   1.78370,   1.78370,   1.78370,   1.78370, &
487          1.78370,   1.78370,   1.78370,   1.78370,   1.78370,   1.78370, &
488          1.78370,   1.78370,   1.78370,   1.78370,   1.78370,   1.78370, &
489          1.78370,   1.78370,   1.78370,   1.78370,   1.78370,   1.78370, &
490          1.78370,   1.78400,   1.78450,                                  &
491          1.82961,   1.83258,   1.83149,   1.82748,   1.82224,   1.81718, &
492          1.81204,   1.80704,   1.80250,   1.79834,   1.79482,   1.79214, &
493          1.78843,   1.78601,   1.78434,   1.78322,   1.78248,   1.78201, &
494          1.78150,   1.78070,   1.78010,   1.77890,   1.77790,   1.77730, &
495          1.77720,   1.77720,   1.77720,   1.77720,   1.77720,   1.77720, &
496          1.77720,   1.77720,   1.77720,   1.77720,   1.77720,   1.77720, &
497          1.77720,   1.77720,   1.77720,   1.77720,   1.77720,   1.77720, &
498          1.77720,   1.77720,   1.77720,   1.77720,   1.77720,   1.77720, &
499          1.77720,   1.77720,   1.77720,   1.77720,   1.77720,   1.77720, &
500          1.77720,   1.77720,   1.77720,   1.77720,   1.77720,   1.77720, &
501          1.77720,   1.77800/),shape=(/nwlt,4/))
502
503    ! #####################################################################
504    ! Defines wavelength dependent complex index of refraction for ice.
505    ! Allowable wavelength range extends from 0.045 microns to 8.6 meter
506    ! temperature dependence only considered beyond 167 microns.
507    !
508    ! interpolation is done     n_r  vs. log(xlam)
509    !                           n_r  vs.        t
510    !                       log(n_i) vs. log(xlam)
511    !                       log(n_i) vs.        t
512    !
513    ! Stephen G. Warren - 1983
514    ! Dept. of Atmospheric Sciences
515    ! University of Washington
516    ! Seattle, Wa  98195
517    !
518    ! Based on
519    !
520    !    Warren,S.G.,1984.
521    !    Optical constants of ice from the ultraviolet to the microwave.
522    !    Applied Optics,23,1206-1225
523    !
524    ! Reference temperatures are -1.0,-5.0,-20.0, and -60.0 deg C
525    ! #####################################################################
526
527    pi  = acos(-1._wp)
528    n_r = 0._wp
529    n_i = 0._wp
530    tk  = t
531   
532    ! Convert frequency to wavelength (um)
533    alam=3E5_wp/freq
534    if((alam < wlmin) .or. (alam > wlmax)) then
535       call errorMessage('FATAL ERROR(optics/optics_lib.f90:m_ice): wavelength out of bounds')
536       return
537    endif
538   
539    if (alam < cutice) then
540       ! Region from 0.045 microns to 167.0 microns - no temperature depend
541       x1  = log(wl(i-1))
542       x2  = log(wl(i))
543       y1  = tabre(i-1)
544       y2  = tabre(i)
545       x   = log(alam)
546       y   = ((x-x1)*(y2-y1)/(x2-x1))+y1
547       n_r = y
548       y1  = log(abs(tabim(i-1)))
549       y2  = log(abs(tabim(i)))
550       y   = ((x-x1)*(y2-y1)/(x2-x1))+y1
551       n_i = exp(y)   
552    else
553       ! Region from 167.0 microns to 8.6 meters - temperature dependence
554       if(tk > temref(1)) tk=temref(1)
555       if(tk < temref(4)) tk=temref(4)
556       do i=2,4
557          if(tk>=temref(i)) go to 12
558       enddo
55912     lt1 = i
560       lt2 = i-1
561       do i=2,nwlt
562          if(alam<=wlt(i)) go to 14
563       enddo
56414     x1  = log(wlt(i-1))
565       x2  = log(wlt(i))
566       y1  = tabret(i-1,lt1)
567       y2  = tabret(i,lt1)
568       x   = log(alam)
569       ylo = ((x-x1)*(y2-y1)/(x2-x1))+y1
570       y1  = tabret(i-1,lt2)
571       y2  = tabret(i,lt2)
572       yhi = ((x-x1)*(y2-y1)/(x2-x1))+y1
573       t1  = temref(lt1)
574       t2  = temref(lt2)
575       y   = ((tk-t1)*(yhi-ylo)/(t2-t1))+ylo
576       n_r = y
577       y1  = log(abs(tabimt(i-1,lt1)))
578       y2  = log(abs(tabimt(i,lt1)))
579       ylo = ((x-x1)*(y2-y1)/(x2-x1))+y1
580       y1  = log(abs(tabimt(i-1,lt2)))
581       y2  = log(abs(tabimt(i,lt2)))
582       yhi = ((x-x1)*(y2-y1)/(x2-x1))+y1
583       y   = ((tk-t1)*(yhi-ylo)/(t2-t1))+ylo
584       n_i = exp(y)
585    endif
586  end subroutine m_ice
587
588  ! ############################################################################
589  ! subroutine MIEINT
590  ! ############################################################################
591  Subroutine MieInt(Dx, SCm, Inp, Dqv, Dqxt, Dqsc, Dbsc, Dg, Xs1, Xs2, DPh, Error)
592    ! ##########################################################################
593    !
594    !     General purpose Mie scattering routine for single particles
595    !     Author: R Grainger 1990
596    !     History:
597    !     G Thomas, March 2005: Added calculation of Phase function and
598    !     code to ensure correct calculation of backscatter coeficient
599    !     Options/Extend_Source
600    !
601    ! ##########################################################################
602    ! INPUTS
603    integer, intent(in) :: &
604         Inp
605    real(wp),intent(in) :: &
606         Dx !
607    real(wp),intent(in),dimension(Inp) :: &
608         Dqv
609    Complex(wp),intent(in) :: &
610         SCm!
611
612    ! OUTPUTS
613    Complex(wp),intent(out),dimension(InP) :: &
614         Xs1,  & !
615         Xs2     !
616    real(wp),intent(out) :: &
617         Dqxt, & !
618         Dqsc, & !
619         Dg,   & !
620         Dbsc    !
621    real(wp),intent(out),dimension(InP) :: &
622         DPh
623    integer :: &
624         Error   !!
625
626    ! PARAMETERS
627    Integer,parameter :: &
628         Imaxx   = 12000, & !
629         Itermax = 30000, & ! Must be large enough to cope with the
630                            ! largest possible nmx = x * abs(scm) + 15
631                            ! or nmx =  Dx + 4.05*Dx**(1./3.) + 2.0
632         Imaxnp = 10000     ! Change this as required
633    Real(wp),parameter :: &
634         RIMax=2.5,       & ! Largest real part of refractive index
635         IRIMax = -2        ! Largest imaginary part of refractive index
636
637    ! Internal variables
638    Integer :: I, NStop, NmX, N, Inp2
639    Real(wp)  :: Chi,Chi0,Chi1,APsi,APsi0,APsi1,Psi,Psi0,Psi1
640    Real(wp),dimension(Imaxnp) :: Pi0,Pi1,Taun
641    Complex(wp) :: Ir,Cm,A,ANM1,APB,B,BNM1,AMB,Xi,Xi0,Xi1,Y
642    Complex(wp),dimension(Itermax) :: D
643    Complex(wp),dimension(Imaxnp) :: Sp,Sm!
644
645    ! ACCELERATOR VARIABLES
646    Integer :: Tnp1,Tnm1
647    Real(wp) :: Dn, Rnx,Turbo,A2
648    real(wp),dimension(Imaxnp) :: S,T
649    Complex(wp) :: A1
650   
651    If ((Dx>Imaxx) .Or. (InP>ImaxNP)) Then
652       Error = 1
653       Return
654    EndIf
655    Cm = SCm
656    Ir = 1 / Cm
657    Y =  Dx * Cm
658    If (Dx<0.02) Then
659       NStop = 2
660    Else
661       If (Dx<=8.0) Then
662          NStop = Dx + 4.00*Dx**(1./3.) + 2.0
663       Else
664          If (Dx< 4200.0) Then
665             NStop = Dx + 4.05*Dx**(1./3.) + 2.0
666          Else
667             NStop = Dx + 4.00*Dx**(1./3.) + 2.0
668          End If
669       End If
670    End If
671    NmX = Max(Real(NStop),Real(Abs(Y))) + 15.
672    If (Nmx > Itermax) then
673       Error = 1
674       Return
675    End If
676    Inp2 = Inp+1
677!ds    D(NmX) = cmplx(0,0,Kind=Kind(0d0))
678    D(NmX) = cmplx(0,0,Kind=wp)
679    Do N = Nmx-1,1,-1
680       A1 = (N+1) / Y
681       D(N) = A1 - 1/(A1+D(N+1))
682    End Do
683    Do I =1,Inp2
684       Sm(I) = cmplx(0,0,Kind=wp)
685!ds       Sm(I) = cmplx(0,0,Kind=Kind(0d0))
686       Sp(I) = cmplx(0,0,Kind=wp)
687!ds       Sp(I) = cmplx(0,0,Kind=Kind(0d0))
688       Pi0(I) = 0
689       Pi1(I) = 1
690    End Do
691    Psi0 = Cos(Dx)
692    Psi1 = Sin(Dx)
693    Chi0 =-Sin(Dx)
694    Chi1 = Cos(Dx)
695    APsi0 = Psi0
696    APsi1 = Psi1
697    Xi0 = cmplx(APsi0,Chi0,Kind=wp)
698!ds    Xi0 = cmplx(APsi0,Chi0,Kind=Kind(0d0))
699    Xi1 = cmplx(APsi1,Chi1,Kind=wp)
700!ds    Xi1 = cmplx(APsi1,Chi1,Kind=Kind(0d0))
701    Dg = 0
702    Dqsc = 0
703    Dqxt = 0
704    Tnp1 = 1
705    Do N = 1,Nstop
706       DN = N
707       Tnp1 = Tnp1 + 2
708       Tnm1 = Tnp1 - 2
709       A2 = Tnp1 / (DN*(DN+1._wp))
710!ds       A2 = Tnp1 / (DN*(DN+1D0))
711       Turbo = (DN+1._wp) / DN
712!ds       Turbo = (DN+1D0) / DN
713       Rnx = DN/Dx
714       Psi = Tnm1*Psi1/Dx - Psi0
715!ds       Psi = Dble(Tnm1)*Psi1/Dx - Psi0
716       APsi = Psi
717       Chi = Tnm1*Chi1/Dx       - Chi0
718       Xi = cmplx(APsi,Chi,Kind=wp)
719!ds       Xi = cmplx(APsi,Chi,Kind=Kind(0d0))
720       A = ((D(N)*Ir+Rnx)*APsi-APsi1) / ((D(N)*Ir+Rnx)*  Xi-  Xi1)
721       B = ((D(N)*Cm+Rnx)*APsi-APsi1) / ((D(N)*Cm+Rnx)*  Xi-  Xi1)
722       Dqxt = Tnp1*(A + B)+ Dqxt
723!ds       Dqxt = Tnp1 *      Dble(A + B)          + Dqxt
724       Dqsc = Tnp1 * (A*Conjg(A) + B*Conjg(B)) + Dqsc
725       If (N>1) then
726          Dg = Dg + (dN*dN - 1) * (ANM1*Conjg(A) + BNM1 * Conjg(B)) / dN + TNM1 *(ANM1*Conjg(BNM1)) / (dN*dN - dN)
727!ds          Dg = Dg + (dN*dN - 1) * Dble(ANM1*Conjg(A) + BNM1 * Conjg(B)) / dN + TNM1 * Dble(ANM1*Conjg(BNM1)) / (dN*dN - dN)
728       End If
729       Anm1 = A
730       Bnm1 = B
731       APB = A2 * (A + B)
732       AMB = A2 * (A - B)
733       Do I = 1,Inp2
734          If (I>Inp) Then
735             S(I) = -Pi1(I)
736          Else
737             S(I) = Dqv(I) * Pi1(I)
738          End If
739          T(I) = S(I) - Pi0(I)
740          Taun(I) = N*T(I) - Pi0(I)
741          Sp(I) = APB * (Pi1(I) + Taun(I)) + Sp(I)
742          Sm(I) = AMB * (Pi1(I) - Taun(I)) + Sm(I)
743          Pi0(I) = Pi1(I)
744          Pi1(I) = S(I) + T(I)*Turbo
745       End Do
746       Psi0 = Psi1
747       Psi1 = Psi
748       Apsi1 = Psi1
749       Chi0 = Chi1
750       Chi1 = Chi
751       Xi1 = cmplx(APsi1,Chi1,Kind=wp)
752!ds       Xi1 = cmplx(APsi1,Chi1,Kind=Kind(0d0))
753    End Do
754
755    If (Dg >0) Dg = 2 * Dg / Dqsc
756    Dqsc =  2 * Dqsc / Dx**2
757    Dqxt =  2 * Dqxt / Dx**2
758    Do I = 1,Inp
759       Xs1(I) = (Sp(I)+Sm(I)) / 2
760       Xs2(I) = (Sp(I)-Sm(I)) / 2
761       Dph(I) = 2 * (Xs1(I)*Conjg(Xs1(I)) + Xs2(I)*Conjg(Xs2(I))) / (Dx**2 * Dqsc)
762!ds       Dph(I) = 2 * Dble(Xs1(I)*Conjg(Xs1(I)) + Xs2(I)*Conjg(Xs2(I))) / (Dx**2 * Dqsc)
763    End Do
764    Dbsc = 4 * Abs(( (Sp(Inp2)+Sm(Inp2))/2 )**2) / Dx**2
765    Error = 0
766    Return
767  End subroutine MieInt
768end module optics_lib
Note: See TracBrowser for help on using the repository browser.