source: LMDZ6/trunk/libf/phylmd/Dust/lmdz_spla_nightingale.f90 @ 5555

Last change on this file since 5555 was 5554, checked in by asima, 2 days ago

Encapsulating in modules 3 Dust (SPLA) subroutines with identical names in INCA
(see also r5505);
Related changes in other files, especially some cleaning of chem_mod_f.90.
Everything cf the new coding conventions bien sûr !

File size: 3.0 KB
Line 
1MODULE lmdz_spla_nightingale
2
3CONTAINS
4
5SUBROUTINE spla_nightingale(klon,klev,nbsrf,u, v, u_10m, v_10m, paprs, pplay, &
6        cdragh, cdragm, t, q, ftsol, tsol, &
7        pctsrf, lmt_dmsconc, lmt_dms)
8  !
9  USE lmdz_spla_ini, ONLY: is_oce, RNAVO
10  USE lmdz_spla_bl_for_dms, ONLY: spla_bl_for_dms
11  USE lmdz_spla_neutral, ONLY: spla_neutral
12
13  IMPLICIT NONE
14  !
15  INTEGER, intent(in) :: klon,klev,nbsrf
16  !
17  REAL, dimension(klon,klev), intent(in) :: u, v
18  REAL, dimension(klon), intent(in):: u_10m, v_10m
19  REAL, dimension(klon,nbsrf), intent(in):: ftsol
20  REAL, dimension(klon), intent(in) :: tsol
21  REAL, dimension(klon,klev+1), intent(in) :: paprs
22  REAL, dimension(klon,klev), intent(in) :: pplay
23  REAL, dimension(klon,klev), intent(in) :: t
24  REAL, dimension(klon,klev), intent(in) :: q
25  REAL, dimension(klon), intent(in) :: cdragh, cdragm
26  REAL, dimension(klon,nbsrf), intent(in) :: pctsrf
27  REAL, dimension(klon), intent(out) :: lmt_dmsconc  ! concentration oceanique DMS
28  REAL, dimension(klon), intent(out) :: lmt_dms      ! flux de DMS
29  !
30  REAL, dimension(klon) :: ustar, obklen
31  REAL, dimension(klon) :: u10, u10n
32  REAL :: tvelocity, schmidt_corr
33  REAL :: t1, t2, t3, t4, viscosity_kin, diffusivity, schmidt
34  INTEGER :: i
35  !
36  CALL spla_bl_for_dms(klon, klev, u, v, paprs, pplay, cdragh, cdragm, &
37        t, q, tsol, ustar, obklen)
38  !
39  DO i=1,klon
40    u10(i)=SQRT(u_10m(i)**2+v_10m(i)**2)
41  ENDDO
42  !
43  CALL spla_neutral(klon, u10, ustar, obklen, u10n)
44  !
45  DO i=1,klon
46  !
47  ! tvelocity - transfer velocity, also known as kw (cm/s)
48  ! schmidt_corr - Schmidt number correction factor (dimensionless)
49  ! Reference:  Nightingale, P.D., G. Malin, C. S. Law, J. J. Watson, P.S. Liss
50  !  M. I. Liddicoat, J. Boutin, R.C. Upstill-Goddard. 'In situ evaluation
51  !  of air-sea gas exchange parameterizations using conservative and
52  !  volatile tracers.'  Glob. Biogeochem. Cycles, 14:373-387, 2000.
53  ! compute transfer velocity using u10neutral
54  !
55  tvelocity = 0.222*u10n(i)*u10n(i) + 0.333*u10n(i)
56  !
57  ! above expression gives tvelocity in cm/hr. convert to cm/s. 1hr =3600 sec
58
59  tvelocity = tvelocity / 3600.
60
61  ! compute the correction factor, which for Nightingale parameterization is
62  ! based on how different the schmidt number is from 600.
63  ! correction factor based on temperature in Kelvin. good
64  ! only for t<=30 deg C.  for temperatures above that, set correction factor
65  ! equal to value at 30 deg C.
66
67  IF (ftsol(i,is_oce) .LE. 303.15) THEN
68     t1 = ftsol(i,is_oce)
69  ELSE
70     t1 = 303.15
71  ENDIF
72
73  t2 = t1 * t1
74  t3 = t2 * t1
75  t4 = t3 * t1
76  viscosity_kin = 3.0363e-9*t4 - 3.655198e-6*t3 + 1.65333e-3*t2 &
77        - 3.332083e-1*t1 + 25.26819
78  diffusivity = 0.01922 * exp(-2177.1/t1)
79  schmidt = viscosity_kin / diffusivity
80  schmidt_corr = (schmidt/600.)**(-.5)
81  !
82  lmt_dms(i) = tvelocity  *  pctsrf(i,is_oce) &
83        * lmt_dmsconc(i)/1.0e12 * schmidt_corr * RNAVO
84  !
85  IF (lmt_dmsconc(i).LE.1.e-20) lmt_dms(i)=0.0
86  !
87  ENDDO
88  !
89END SUBROUTINE spla_nightingale
90
91END MODULE lmdz_spla_nightingale
Note: See TracBrowser for help on using the repository browser.