| Line |
Branch |
Exec |
Source |
| 1 |
|
|
|
| 2 |
|
|
! $Id: aeropt.F90 2346 2015-08-21 15:13:46Z emillour $ |
| 3 |
|
|
|
| 4 |
|
✗ |
SUBROUTINE aeropt(pplay, paprs, t_seri, msulfate, rhcl, tau_ae, piz_ae, & |
| 5 |
|
✗ |
cg_ae, ai) |
| 6 |
|
|
|
| 7 |
|
|
USE dimphy |
| 8 |
|
|
IMPLICIT NONE |
| 9 |
|
|
|
| 10 |
|
|
|
| 11 |
|
|
|
| 12 |
|
|
include "YOMCST.h" |
| 13 |
|
|
|
| 14 |
|
|
! Arguments: |
| 15 |
|
|
|
| 16 |
|
|
REAL, INTENT (IN) :: paprs(klon, klev+1) |
| 17 |
|
|
REAL, INTENT (IN) :: pplay(klon, klev), t_seri(klon, klev) |
| 18 |
|
|
REAL, INTENT (IN) :: msulfate(klon, klev) ! masse sulfate ug SO4/m3 [ug/m^3] |
| 19 |
|
|
REAL, INTENT (IN) :: rhcl(klon, klev) ! humidite relative ciel clair |
| 20 |
|
|
REAL, INTENT (OUT) :: tau_ae(klon, klev, 2) ! epaisseur optique aerosol |
| 21 |
|
|
REAL, INTENT (OUT) :: piz_ae(klon, klev, 2) ! single scattering albedo aerosol |
| 22 |
|
|
REAL, INTENT (OUT) :: cg_ae(klon, klev, 2) ! asymmetry parameter aerosol |
| 23 |
|
|
REAL, INTENT (OUT) :: ai(klon) ! POLDER aerosol index |
| 24 |
|
|
|
| 25 |
|
|
! Local |
| 26 |
|
|
|
| 27 |
|
|
INTEGER i, k, inu |
| 28 |
|
|
INTEGER rh_num, nbre_rh |
| 29 |
|
|
PARAMETER (nbre_rh=12) |
| 30 |
|
|
REAL rh_tab(nbre_rh) |
| 31 |
|
|
REAL rh_max, delta, rh |
| 32 |
|
|
PARAMETER (rh_max=95.) |
| 33 |
|
|
DATA rh_tab/0., 10., 20., 30., 40., 50., 60., 70., 80., 85., 90., 95./ |
| 34 |
|
|
REAL zrho, zdz |
| 35 |
|
✗ |
REAL taue670(klon) ! epaisseur optique aerosol absorption 550 nm |
| 36 |
|
✗ |
REAL taue865(klon) ! epaisseur optique aerosol extinction 865 nm |
| 37 |
|
|
REAL alpha_aer_sulfate(nbre_rh, 5) !--unit m2/g SO4 |
| 38 |
|
|
REAL alphasulfate |
| 39 |
|
|
|
| 40 |
|
|
CHARACTER (LEN=20) :: modname = 'aeropt' |
| 41 |
|
|
CHARACTER (LEN=80) :: abort_message |
| 42 |
|
|
|
| 43 |
|
|
|
| 44 |
|
|
! Proprietes optiques |
| 45 |
|
|
|
| 46 |
|
|
REAL alpha_aer(nbre_rh, 2) !--unit m2/g SO4 |
| 47 |
|
|
REAL cg_aer(nbre_rh, 2) |
| 48 |
|
|
DATA alpha_aer/.500130E+01, .500130E+01, .500130E+01, .500130E+01, & |
| 49 |
|
|
.500130E+01, .616710E+01, .826850E+01, .107687E+02, .136976E+02, & |
| 50 |
|
|
.162972E+02, .211690E+02, .354833E+02, .139460E+01, .139460E+01, & |
| 51 |
|
|
.139460E+01, .139460E+01, .139460E+01, .173910E+01, .244380E+01, & |
| 52 |
|
|
.332320E+01, .440120E+01, .539570E+01, .734580E+01, .136038E+02/ |
| 53 |
|
|
DATA cg_aer/.619800E+00, .619800E+00, .619800E+00, .619800E+00, & |
| 54 |
|
|
.619800E+00, .662700E+00, .682100E+00, .698500E+00, .712500E+00, & |
| 55 |
|
|
.721800E+00, .734600E+00, .755800E+00, .545600E+00, .545600E+00, & |
| 56 |
|
|
.545600E+00, .545600E+00, .545600E+00, .583700E+00, .607100E+00, & |
| 57 |
|
|
.627700E+00, .645800E+00, .658400E+00, .676500E+00, .708500E+00/ |
| 58 |
|
|
DATA alpha_aer_sulfate/4.910, 4.910, 4.910, 4.910, 6.547, 7.373, 8.373, & |
| 59 |
|
|
9.788, 12.167, 14.256, 17.924, 28.433, 1.453, 1.453, 1.453, 1.453, 2.003, & |
| 60 |
|
|
2.321, 2.711, 3.282, 4.287, 5.210, 6.914, 12.305, 4.308, 4.308, 4.308, & |
| 61 |
|
|
4.308, 5.753, 6.521, 7.449, 8.772, 11.014, 12.999, 16.518, 26.772, 3.265, & |
| 62 |
|
|
3.265, 3.265, 3.265, 4.388, 5.016, 5.775, 6.868, 8.745, 10.429, 13.457, & |
| 63 |
|
|
22.538, 2.116, 2.116, 2.116, 2.116, 2.882, 3.330, 3.876, 4.670, 6.059, & |
| 64 |
|
|
7.327, 9.650, 16.883/ |
| 65 |
|
|
|
| 66 |
|
✗ |
DO i = 1, klon |
| 67 |
|
✗ |
taue670(i) = 0.0 |
| 68 |
|
✗ |
taue865(i) = 0.0 |
| 69 |
|
|
END DO |
| 70 |
|
|
|
| 71 |
|
✗ |
DO k = 1, klev |
| 72 |
|
✗ |
DO i = 1, klon |
| 73 |
|
✗ |
IF (t_seri(i,k)==0) WRITE (*, *) 'aeropt T ', i, k, t_seri(i, k) |
| 74 |
|
✗ |
IF (pplay(i,k)==0) WRITE (*, *) 'aeropt p ', i, k, pplay(i, k) |
| 75 |
|
✗ |
zrho = pplay(i, k)/t_seri(i, k)/rd ! kg/m3 |
| 76 |
|
✗ |
zdz = (paprs(i,k)-paprs(i,k+1))/zrho/rg ! m |
| 77 |
|
✗ |
rh = min(rhcl(i,k)*100., rh_max) |
| 78 |
|
✗ |
rh_num = int(rh/10.+1.) |
| 79 |
|
✗ |
IF (rh<0.) THEN |
| 80 |
|
✗ |
abort_message = 'aeropt: RH < 0 not possible' |
| 81 |
|
✗ |
CALL abort_physic(modname, abort_message, 1) |
| 82 |
|
|
END IF |
| 83 |
|
✗ |
IF (rh>85.) rh_num = 10 |
| 84 |
|
✗ |
IF (rh>90.) rh_num = 11 |
| 85 |
|
✗ |
delta = (rh-rh_tab(rh_num))/(rh_tab(rh_num+1)-rh_tab(rh_num)) |
| 86 |
|
|
|
| 87 |
|
|
inu = 1 |
| 88 |
|
|
tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, & |
| 89 |
|
✗ |
inu)-alpha_aer(rh_num,inu)) |
| 90 |
|
✗ |
tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.E-6 |
| 91 |
|
✗ |
piz_ae(i, k, inu) = 1.0 |
| 92 |
|
|
cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- & |
| 93 |
|
✗ |
cg_aer(rh_num,inu)) |
| 94 |
|
|
|
| 95 |
|
|
inu = 2 |
| 96 |
|
|
tau_ae(i, k, inu) = alpha_aer(rh_num, inu) + delta*(alpha_aer(rh_num+1, & |
| 97 |
|
✗ |
inu)-alpha_aer(rh_num,inu)) |
| 98 |
|
✗ |
tau_ae(i, k, inu) = tau_ae(i, k, inu)*msulfate(i, k)*zdz*1.E-6 |
| 99 |
|
✗ |
piz_ae(i, k, inu) = 1.0 |
| 100 |
|
|
cg_ae(i, k, inu) = cg_aer(rh_num, inu) + delta*(cg_aer(rh_num+1,inu)- & |
| 101 |
|
✗ |
cg_aer(rh_num,inu)) |
| 102 |
|
|
! jq |
| 103 |
|
|
! jq for aerosol index |
| 104 |
|
|
|
| 105 |
|
|
alphasulfate = alpha_aer_sulfate(rh_num, 4) + & |
| 106 |
|
✗ |
delta*(alpha_aer_sulfate(rh_num+1,4)-alpha_aer_sulfate(rh_num,4)) !--m2/g |
| 107 |
|
|
|
| 108 |
|
✗ |
taue670(i) = taue670(i) + alphasulfate*msulfate(i, k)*zdz*1.E-6 |
| 109 |
|
|
|
| 110 |
|
|
alphasulfate = alpha_aer_sulfate(rh_num, 5) + & |
| 111 |
|
✗ |
delta*(alpha_aer_sulfate(rh_num+1,5)-alpha_aer_sulfate(rh_num,5)) !--m2/g |
| 112 |
|
|
|
| 113 |
|
✗ |
taue865(i) = taue865(i) + alphasulfate*msulfate(i, k)*zdz*1.E-6 |
| 114 |
|
|
|
| 115 |
|
|
END DO |
| 116 |
|
|
END DO |
| 117 |
|
|
|
| 118 |
|
✗ |
DO i = 1, klon |
| 119 |
|
|
ai(i) = (-log(max(taue670(i),0.0001)/max(taue865(i), & |
| 120 |
|
✗ |
0.0001))/log(670./865.))*taue865(i) |
| 121 |
|
|
END DO |
| 122 |
|
|
|
| 123 |
|
✗ |
RETURN |
| 124 |
|
|
END SUBROUTINE aeropt |
| 125 |
|
|
|