[5505] | 1 | MODULE lmdz_spla_nightingale |
---|
[5554] | 2 | |
---|
[5505] | 3 | CONTAINS |
---|
[5554] | 4 | |
---|
[5505] | 5 | SUBROUTINE spla_nightingale(klon,klev,nbsrf,u, v, u_10m, v_10m, paprs, pplay, & |
---|
[5246] | 6 | cdragh, cdragm, t, q, ftsol, tsol, & |
---|
| 7 | pctsrf, lmt_dmsconc, lmt_dms) |
---|
| 8 | ! |
---|
[5554] | 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 |
---|
[5505] | 12 | |
---|
[5554] | 13 | IMPLICIT NONE |
---|
[5246] | 14 | ! |
---|
[5554] | 15 | INTEGER, intent(in) :: klon,klev,nbsrf |
---|
[5246] | 16 | ! |
---|
[5505] | 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 |
---|
[5246] | 29 | ! |
---|
[5505] | 30 | REAL, dimension(klon) :: ustar, obklen |
---|
| 31 | REAL, dimension(klon) :: u10, u10n |
---|
[5246] | 32 | REAL :: tvelocity, schmidt_corr |
---|
| 33 | REAL :: t1, t2, t3, t4, viscosity_kin, diffusivity, schmidt |
---|
| 34 | INTEGER :: i |
---|
| 35 | ! |
---|
[5554] | 36 | CALL spla_bl_for_dms(klon, klev, u, v, paprs, pplay, cdragh, cdragm, & |
---|
[5246] | 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 | ! |
---|
[5554] | 43 | CALL spla_neutral(klon, u10, ustar, obklen, u10n) |
---|
[5246] | 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 |
---|
[2630] | 58 | |
---|
[5246] | 59 | tvelocity = tvelocity / 3600. |
---|
[2630] | 60 | |
---|
[5246] | 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. |
---|
[2630] | 66 | |
---|
[5246] | 67 | IF (ftsol(i,is_oce) .LE. 303.15) THEN |
---|
| 68 | t1 = ftsol(i,is_oce) |
---|
| 69 | ELSE |
---|
| 70 | t1 = 303.15 |
---|
| 71 | ENDIF |
---|
[2630] | 72 | |
---|
[5246] | 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 | ! |
---|
[5505] | 89 | END SUBROUTINE spla_nightingale |
---|
[5554] | 90 | |
---|
[5505] | 91 | END MODULE lmdz_spla_nightingale |
---|