FV3 Bundle
CRTM_Fastem1.f90
Go to the documentation of this file.
1 !
2 !-------------------------------------------------------------------------------------------------------------
3 !M+
4 ! NAME:
5 ! CRTM_FASTEM1
6 !
7 ! PURPOSE:
8 ! This module computes ocean emissivity and its jacobian over water. The code is adopted
9 ! from RTTOV Fastem version 1.
10 !
11 ! Method:
12 ! FASTEM-1 English and Hewison 1998.
13 ! http://www.metoffice.com/research/interproj/nwpsaf/rtm/evalfastems.pdf
14 !
15 ! History:
16 !
17 ! CATEGORY:
18 ! CRTM : Surface : MW OPEN OCEAN EM
19 !
20 ! LANGUAGE:
21 ! Fortran-95
22 !
23 ! CREATION HISTORY:
24 !
25 ! 1998-02-20 treadon - gather all emissivity calculations from
26 ! setuprad and move into this subroutine
27 ! 2004-07-23 weng,yan,okamoto - incorporate MW land and snow/ice emissivity
28 ! models for AMSU-A/B and SSM/I
29 ! 2004-08-02 treadon - add only to module use, add intent in/out
30 ! 2004-11-22 derber - modify for openMP
31 ! 2005-01-20 okamoto- add preprocessing for ocean MW emissivity jacobian
32 ! 2005-03-05 derber- add adjoint of surface emissivity to this routine
33 ! 2005-07-15 derber- include mhs
34 ! 2005-09-28 derber - modify to handle percent surface type and mixed conditions
35 !
36 ! 2005-12-15 Modified for CRTM
37 ! by: Quanhua Liu, QSS Group Inc., Quanhua.Liu@noaa.gov
38 ! Yong Han, NOAA/NESDIS; Yong.Han@noaa.gov
39 ! Paul van Delst, CIMSS/SSEC; paul.vandelst@ssec.wisc.edu
40 !
41 !------------------------------------------------------------------------------------------------------------
42 
44 
45  ! ----------
46  ! Module use
47  ! ----------
48 
49  USE type_kinds
50 
51  ! -- CRTM modules
52  USE crtm_parameters
53  ! -----------------------
54  ! Disable implicit typing
55  ! -----------------------
56 
57  IMPLICIT NONE
58 
59  PRIVATE
60 
61  PUBLIC :: fastem1
62 
63 
64 ! Explanation for Fastem1_Coef :
65 ! emc(59): Emissivity model data
66 ! Permittivity model data (Lamkaouchi model)
67 ! [1-3]: Temperature polynomial coefficients for Tau1 - Lamkaouchi (1996)
68 ! [4-7]: Temperature polynomial coefficients for Tau2 - Lamkaouchi (1996)
69 ! [8-11]: Temperature polynomial coefficients for Del1 - Lamkaouchi (1996)
70 ! [12-15]: Temperature polynomial coefficients for Del2 - Lamkaouchi (1996)
71 ! [16-17]: Temperature polynomial coefficients for static permittivity - Lamkaouchi (1996)
72 ! [18-19]: Temperature polynomial coefficients for infinite freq. permittivity - Lamkaouchi (1996)
73 ! Pi is stored for good measure
74 ! [20]: Stored value of Pi
75 ! Bragg scattering correction coefficients
76 ! [21]: Scaling factor for small scale correction - see English (1997)
77 ! Foam model coefficients for Monahan model
78 ! [22]: First coefficient in Monahan foam model (neutral stability) - see English (1997)
79 ! [23]: Second coefficient in Monahan foam model (neutral stability) - see English (1997)
80 ! Alternative permittivity model (Liebe)
81 ! [30]: a1 in Liebe's dielectric model - see Liebe (1989)
82 ! [31]: b1 in Liebe's dielectric model - see Liebe (1989)
83 ! [32]: c1 in Liebe's dielectric model - see Liebe (1989)
84 ! [33]: c2 in Liebe's dielectric model - see Liebe (1989)
85 ! [34]: d1 in Liebe's dielectric model - see Liebe (1989)
86 ! [35]: d2 in Liebe's dielectric model - see Liebe (1989)
87 ! [36]: d3 in Liebe's dielectric model - see Liebe (1989)
88 ! [37]: e1 in Liebe's dielectric model - see Liebe (1989)
89 ! [38]: e2 in Liebe's dielectric model - see Liebe (1989)
90 ! Version 2 of large scale correction which *DOES»* take account of
91 ! hemispherical scattering.
92 ! 1.) Vertical polarisation mode
93 ! [24]: Term a00 in vertical pol of large scale correction model
94 ! [25]: Term a01 in vertical pol mode of large scale correction model
95 ! [26]: Term a02 in vertical pol mode of large scale correction model
96 ! [27]: Term a10 in vertical pol mode of large scale correction model
97 ! [28]: Term a11 in vertical pol mode of large scale correction model
98 ! [29]: Term a12 in vertical pol mode of large scale correction model
99 ! [30]: Term a20 in vertical pol mode of large scale correction model
100 ! [31]: Term a21 in vertical pol mode of large scale correction model
101 ! [32]: Term a22 in vertical pol mode of large scale correction model
102 ! [33]: Term a30 in vertical pol mode of large scale correction model
103 ! [34]: Term a31 in vertical pol mode of large scale correction model
104 ! [35]: Term a32 in vertical pol mode of large scale correction model
105 ! [36]: Term a40 in vertical pol mode of large scale correction model
106 ! [37]: Term a41 in vertical pol mode of large scale correction model
107 ! [38]: Term a42 in vertical pol mode of large scale correction model
108 ! [39]: Term a50 in vertical pol mode of large scale correction model
109 ! [40]: Term a51 in vertical pol mode of large scale correction model
110 ! [41]: Term a52 in vertical pol mode of large scale correction model
111 ! 2. ) Horizontal polarisation mode
112 ! [42]: Term a00 in horizontal pol mode of large scale correction model
113 ! [43]: Term a01 in horizontal pol mode of large scale correction model
114 ! [44]: Term a02 in horizontal pol mode of large scale correction model
115 ! [45]: Term a10 in horizontal pol mode of large scale correction model
116 ! [46]: Term a11 in horizontal pol mode of large scale correction model
117 ! [47]: Term a12 in horizontal pol mode of large scale correction model
118 ! [48]: Term a20 in horizontal pol mode of large scale correction model
119 ! [49]: Term a21 in horizontal pol mode of large scale correction model
120 ! [50]: Term a22 in horizontal pol mode of large scale correction model
121 ! [51]: Term a30 in horizontal pol mode of large scale correction model
122 ! [52]: Term a31 in horizontal pol mode of large scale correction model
123 ! [53]: Term a32 in horizontal pol mode of large scale correction model
124 ! [54]: Term a40 in horizontal pol mode of large scale correction model
125 ! [55]: Term a41 in horizontal pol mode of large scale correction model
126 ! [56]: Term a42 in horizontal pol mode of large scale correction model
127 ! [57]: Term a50 in horizontal pol mode of large scale correction model
128 ! [58]: Term a51 in horizontal pol mode of large scale correction model
129 ! [59]: Term a52 in horizontal pol mode of large scale correction model
130  REAL( fp ), PARAMETER :: emc(59) = reshape( &
131  & (/0.175350e+02_fp, -.617670e+00_fp, .894800e-02_fp, .318420e+01_fp,&
132  0.191890e-01_fp, -.108730e-01_fp, .258180e-03_fp, .683960e+02_fp,&
133  -.406430e+00_fp, .228320e-01_fp, -.530610e-03_fp, .476290e+01_fp,&
134  0.154100e+00_fp, -.337170e-01_fp, .844280e-03_fp, .782870e+02_fp,&
135  -.434630e-02_fp, .531250e+01_fp, -.114770e-01_fp, .314159e+01_fp,&
136  -.100000e+01_fp, .195000e-04_fp, .255000e+01_fp, -.637182e+01_fp,&
137  0.253918e-01_fp, .357569e-04_fp, .942928e+01_fp, -.332839e-01_fp,&
138  -.647724e-04_fp, -.329282e+01_fp, .965450e-02_fp, .281588e-04_fp,&
139  0.252676e+00_fp, .343867e-02_fp, -.156362e-04_fp, -.156669e-03_fp,&
140  0.139485e-04_fp, -.407633e-07_fp, -.141316e+00_fp, -.356556e-02_fp,&
141  0.142869e-04_fp, -.240701e+01_fp, -.563888e-01_fp, .325227e-03_fp,&
142  0.296005e+01_fp, .704675e-01_fp, -.426440e-03_fp, -.751252e+00_fp,&
143  -.191934e-01_fp, .125937e-03_fp, -.288253e+00_fp, -.102655e-02_fp,&
144  0.226701e-05_fp, -.119072e-02_fp, -.263165e-04_fp, .114597e-06_fp,&
145  0.406300e+00_fp, .200031e-02_fp, -.781635e-05_fp/), (/59/) )
146 
147 
148 CONTAINS
149 
150 
151 !-------------------------------------------------------------------------------------------------------------
152 !M+
153 ! NAME:
154 ! FASTEM1
155 !
156 ! PURPOSE:
157 ! Subroutine to compute ocean emissivity and its derivative to wind speed. This code is adopted from
158 ! RTTOV Fastem version 1.
159 !
160 ! CATEGORY:
161 ! CRTM : Surface : MW OPEN OCEAN EM
162 !
163 ! LANGUAGE:
164 ! Fortran-95
165 !
166 ! CALLING SEQUENCE:
167 ! CALL NESDIS_OCeanEM
168 !
169 ! INPUT ARGUMENTS:
170 !
171 ! Frequency Frequency User defines
172 ! This is the "I" dimension
173 ! UNITS: GHz
174 ! TYPE: REAL( fp )
175 ! DIMENSION: Scalar
176 !
177 !
178 ! Sat_Zenith_Angle The angle values in degree
179 ! ** NOTE: THIS IS A MANDATORY MEMBER **
180 ! ** OF THIS STRUCTURE **
181 ! UNITS: Degrees
182 ! TYPE: REAL( fp )
183 ! DIMENSION: Rank-1, (I)
184 !
185 ! SST Ocean surface temperature
186 ! UNITS: Kelvin, K
187 ! TYPE: REAL( fp )
188 ! DIMENSION: Scalar
189 !
190 ! Wind_Speed Ocean surface wind speed
191 ! UNITS: m/s
192 ! TYPE: REAL( fp )
193 ! DIMENSION: Scalar
194 !
195 !
196 ! OUTPUT ARGUMENTS:
197 !
198 ! Emissivity: The surface emissivity at vertical and horizontal polarizations.
199 ! ** NOTE: THIS IS A MANDATORY MEMBER **
200 ! ** OF THIS STRUCTURE **
201 ! UNITS: N/A
202 ! TYPE: REAL( fp )
203 ! DIMENSION: ONE
204 !
205 ! dEH_dWindSpeed: The surface horizontally polarized emissivity derivative to wind speed.
206 ! ** NOTE: THIS IS A MANDATORY MEMBER **
207 ! ** OF THIS STRUCTURE **
208 ! UNITS: N/A
209 ! TYPE: REAL( fp )
210 ! DIMENSION: Scalar
211 !
212 ! dEV_dWindSpeed: The surface vertically polarized emissivity derivative to wind speed.
213 ! ** NOTE: THIS IS A MANDATORY MEMBER **
214 ! ** OF THIS STRUCTURE **
215 ! UNITS: N/A
216 ! TYPE: REAL( fp )
217 ! DIMENSION: Scalar
218 !
219 !
220 ! CALLS:
221 ! None
222 !
223 ! SIDE EFFECTS:
224 ! None.
225 !
226 ! RESTRICTIONS:
227 ! None.
228 !
229 !M-
230 !------------------------------------------------------------------------------------------------------------
231 
232  SUBROUTINE fastem1(Frequency, & ! INPUT
233  Sat_Zenith_Angle, & ! INPUT
234  SST, & ! INPUT
235  Wind_Speed, & ! INPUT
236  Emissivity, & ! OUTPUT
237  dEH_dWindSpeed, & ! OUTPUT)
238  dev_dwindspeed) ! OUTPUT)
239 ! ---------------------------------------------------------------------------------------------------
240 !
241  REAL( fp ), INTENT( IN ) :: frequency, sat_zenith_angle
242  REAL( fp ), INTENT( IN ) :: sst, wind_speed
243  REAL( fp ), INTENT( IN OUT ) :: emissivity(:), deh_dwindspeed, dev_dwindspeed
244 
245 !
246 
247 ! Declare passed variables.
248 
249 ! Declare local variables
250  real(fp) zch4,xcorr2v,evertr,ehorzr,xcorr2h,ffoam,zcv2,zcv3
251  real(fp) xcorr1,zcv1,zcv4,zch1,zch2,zcv5,zcv6,tau2
252  real(fp) wind,ehorz,evert,sec,sec2,freqghz2
253  real(fp) u10mps2,usec,tccub,tau1,tc,tcsq,freqghz
254  real(fp) u10mps,ps2,pc2,pcc,pss,rvertsi,rverts,rvertsr
255  real(fp) rverts5,rhorzs5,xcorr15,ffoam5,evertr5,ehorzr5
256  real(fp) perm_real,perm_imag,rhorzsr,zch5,zch6,zch3,rhorzsi
257  real(fp) rhorzs,perm_imag2,einf,fen,del2,del1,fen2,perm_real2
258  real(fp) perm_imag1,perm_real1,den1,den2
259  real(fp) ffoamv,ffoamh,xcorr1h,xcorr1v
260  complex(fp) perm1,perm2,rvth,rhth,xperm
261 
262 !
263 ! First set constants. Then perform the calculation.
264  wind = wind_speed
265  u10mps = wind
266  pcc=cos(sat_zenith_angle * degrees_to_radians)
267  pss=sin(sat_zenith_angle * degrees_to_radians)
268  ps2=pss*pss
269  pc2=pcc*pcc
270  freqghz = frequency
271  freqghz2=freqghz*freqghz
272  u10mps2=u10mps*u10mps
273  sec=one/pcc
274  sec2=sec*sec
275  usec=u10mps*sec
276 
277 ! calculate piom (ellison et al.) xperm
278 ! to calculate xperm of saline water based on piom model.
279 ! convert from kelvin to centigrate and define quadratic and
280 ! cubic functions for later polynomials
281  tc=sst-273.15_fp
282  tcsq=tc*tc
283  tccub=tcsq*tc
284 
285 ! define two relaxation frequencies, tau1 and tau2
286  tau1=emc(1)+emc(2)*tc+emc(3)*tcsq
287  tau2=emc(4)+emc(5)*tc+emc(6)*tcsq+emc(7)*tccub
288 
289 ! static xperm estatic=del1+del2+einf
290  del1=emc(8)+emc(9)*tc+emc(10)*tcsq+emc(11)*tccub
291  del2=emc(12)+emc(13)*tc+emc(14)*tcsq+emc(15)*tccub
292  einf=emc(18)+emc(19)*tc
293 
294 ! calculate xperm using double-debye formula
295  fen=two*pi*freqghz*0.001_fp
296  fen2=fen**two
297  den1=one+fen2*tau1*tau1
298  den2=one+fen2*tau2*tau2
299  perm_real1=del1/den1
300  perm_real2=del2/den2
301  perm_imag1=del1*fen*tau1/den1
302  perm_imag2=del2*fen*tau2/den2
303  perm_real=perm_real1+perm_real2+einf
304  perm_imag=perm_imag1+perm_imag2
305  xperm=cmplx(perm_real,perm_imag,fp)
306 
307 ! calculate complex fresnel reflection coefficients
308 ! to calculate vertical and horizontal polarised reflectivities
309 ! given xperm at local incidencence angle for all channels
310 ! and profiles
311  perm1 = sqrt(xperm - cmplx(ps2,zero,fp))
312  perm2 = xperm*pcc
313  rhth = (pcc - perm1)/(pcc + perm1)
314  rvth = (perm2 - perm1)/(perm2 + perm1)
315  rvertsr=real(rvth,fp)
316 ! rvertsi=dimag(rvth)
317  rvertsi=aimag(rvth)
318  rverts=rvertsr*rvertsr+rvertsi*rvertsi
319  rhorzsr=real(rhth,fp)
320 ! rhorzsi=dimag(rhth)
321  rhorzsi=aimag(rhth)
322  rhorzs=rhorzsr*rhorzsr+rhorzsi*rhorzsi
323 
324 ! calculate small scale xcorr to reflection coefficients
325  xcorr1=exp(emc(21)*u10mps*pc2/freqghz2)
326 
327 ! calculate large scale geometric correction
328 ! to calculate a correction to the fresnel reflection coefficients
329 ! allowing for the presence of large scale roughness
330 
331 ! jc: six coefficients (constant, u, u^2, sec, sec^2, u*sec)
332  zcv1=emc(24)+emc(25)*freqghz+emc(26)*freqghz2
333  zcv2=(emc(27)+emc(28)*freqghz+emc(29)*freqghz2)*sec
334  zcv3=(emc(30)+emc(31)*freqghz+emc(32)*freqghz2)*sec2
335  zcv4=(emc(33)+emc(34)*freqghz+emc(35)*freqghz2)*u10mps
336  zcv5=(emc(36)+emc(37)*freqghz+emc(38)*freqghz2)*u10mps2
337  zcv6=(emc(39)+emc(40)*freqghz+emc(41)*freqghz2)*usec
338  zch1=emc(42)+emc(43)*freqghz+emc(44)*freqghz2
339  zch2=(emc(45)+emc(46)*freqghz+emc(47)*freqghz2)*sec
340  zch3=(emc(48)+emc(49)*freqghz+emc(50)*freqghz2)*sec2
341  zch4=(emc(51)+emc(52)*freqghz+emc(53)*freqghz2)*u10mps
342  zch5=(emc(54)+emc(55)*freqghz+emc(56)*freqghz2)*u10mps2
343  zch6=(emc(57)+emc(58)*freqghz+emc(59)*freqghz2)*usec
344 
345 ! calculate correction for this polarisation
346  xcorr2v=.01_fp*(zcv1+zcv2+zcv3+zcv4+zcv5+zcv6)
347  xcorr2h=.01_fp*(zch1+zch2+zch3+zch4+zch5+zch6)
348 
349  evertr=one-rverts*xcorr1+xcorr2v
350  ehorzr=one-rhorzs*xcorr1+xcorr2h
351 
352 ! write(769,'(6f12.6)') xcorr1,xcorr2v,xcorr2h,usec,u10mps,evertr
353 ! calculate foam emissivity correction
354  ffoam=emc(22)*(u10mps**emc(23))
355  evert=evertr - ffoam*evertr+ ffoam
356  ehorz=ehorzr - ffoam*ehorzr + ffoam
357 
358 ! write(769,'(6f12.6)') ffoam,evertr,ehorzr,evert,ehorz
359  rverts5 = rverts
360  rhorzs5 = rhorzs
361  xcorr15 = xcorr1
362  ffoam5 = ffoam
363  evertr5 = evert
364  ehorzr5 = ehorz
365  emissivity(1) = evertr5
366  emissivity(2) = ehorzr5
367 
368 ! write(769,'(5E15.6)') SST,Wind_Speed,Sat_Zenith_Angle,Emissivity(1),Emissivity(2)
369 !
370 ! Begin K matrix calculation
371 
372 ! Combine horizontal and vertical polarizations.
373  ehorz = one
374  evert = one
375 ! calculate corrected emissivity from corrected refectivity
376  ehorzr=ehorz - ffoam5*ehorz
377  ffoamh =-ehorz*ehorzr5 + ehorz
378  evertr=evert - ffoam5*evert
379  ffoamv =-evert*evertr5 + evert
380 
381 ! calculate corrected emissivity from corrected refectivity
382  rhorzs = -ehorzr*xcorr15
383  xcorr1h = -rhorzs5*ehorzr
384  xcorr2h = ehorzr
385  rverts = -evertr*xcorr15
386  xcorr1v = -rverts5*evertr
387  xcorr2v = evertr
388 
389 ! calculate foam emissivity correction
390 ! calculate correction for this polarisation
391  zch4=.01_fp*xcorr2h
392  zch5=.01_fp*xcorr2h
393  zch6=.01_fp*xcorr2h
394  zcv4=.01_fp*xcorr2v
395  zcv5=.01_fp*xcorr2v
396  zcv6=.01_fp*xcorr2v
397 
398 ! calculate large scale geometric correction
399 ! to calculate a correction to the fresnel reflection coefficients
400 ! allowing for the presence of large scale roughness
401 
402  deh_dwindspeed = emc(23)*ffoam5/wind*ffoamh + &
403  zch4*(emc(51)+emc(52)*freqghz+emc(53)*freqghz2) + &
404  xcorr1h*emc(21)*pc2/freqghz2*xcorr15 + &
405  zch6*(emc(57)+emc(58)*freqghz+emc(59)*freqghz2)*sec + &
406  zch5*(emc(54)+emc(55)*freqghz+emc(56)*freqghz2)*two*wind
407 
408 
409  dev_dwindspeed = emc(23)*ffoam5/wind*ffoamv + &
410  zcv4*(emc(33)+emc(34)*freqghz+emc(35)*freqghz2) + &
411  xcorr1v*emc(21)*pc2/freqghz2*xcorr15 + &
412  zcv6*(emc(39)+emc(40)*freqghz+emc(41)*freqghz2)*sec + &
413  zcv5*(emc(36)+emc(37)*freqghz+emc(38)*freqghz2)*two*wind
414 
415  END SUBROUTINE fastem1
416 
417 END MODULE crtm_fastem1
real(fp), dimension(59), parameter emc
real(fp), parameter, public zero
integer, parameter, public fp
Definition: Type_Kinds.f90:124
subroutine, public fastem1(Frequency, Sat_Zenith_Angle, SST, Wind_Speed, Emissivity, dEH_dWindSpeed, dEV_dWindSpeed)
real(fp), parameter, public one
real(fp), parameter, public two
real(fp), parameter, public degrees_to_radians
real(fp), parameter, public pi