1 | SUBROUTINE aerosol_optic(debut, new_aod, flag_aerosol, rjourvrai, pdtphys, & |
---|
2 | pplay, paprs, t_seri, rhcl, & |
---|
3 | maerosol, maerosol_pi, & |
---|
4 | tau_aero, piz_aero, cg_aero ) |
---|
5 | |
---|
6 | USE dimphy |
---|
7 | IMPLICIT NONE |
---|
8 | |
---|
9 | ! Input arguments |
---|
10 | LOGICAL, INTENT(IN) :: debut |
---|
11 | LOGICAL, INTENT(IN) :: new_aod |
---|
12 | INTEGER, INTENT(IN) :: flag_aerosol |
---|
13 | REAL, INTENT(IN) :: rjourvrai |
---|
14 | REAL, INTENT(IN) :: pdtphys |
---|
15 | REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay |
---|
16 | REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs |
---|
17 | REAL, DIMENSION(klon,klev), INTENT(IN) :: t_seri |
---|
18 | REAL, DIMENSION(klon,klev), INTENT(IN) :: rhcl ! humidite relative ciel clair |
---|
19 | |
---|
20 | ! Output arguments |
---|
21 | REAL, DIMENSION(klon,klev), INTENT(OUT) :: maerosol |
---|
22 | REAL, DIMENSION(klon,klev), INTENT(OUT) :: maerosol_pi |
---|
23 | REAL, DIMENSION(klon,klev,9,2), INTENT(OUT) :: tau_aero |
---|
24 | REAL, DIMENSION(klon,klev,9,2), INTENT(OUT) :: piz_aero |
---|
25 | REAL, DIMENSION(klon,klev,9,2), INTENT(OUT) :: cg_aero |
---|
26 | |
---|
27 | ! Local variables |
---|
28 | REAL, DIMENSION(klon) :: aerindex ! POLDER aerosol index |
---|
29 | REAL, DIMENSION(klon,10) :: fractnat_allaer |
---|
30 | REAL, DIMENSION(klon,klev) :: sulfate ! SO4 aerosol concentration [ug/m3] |
---|
31 | REAL, DIMENSION(klon,klev) :: bcsol ! BC soluble concentration [ug/m3] |
---|
32 | REAL, DIMENSION(klon,klev) :: bcins ! BC insoluble concentration [ug/m3] |
---|
33 | REAL, DIMENSION(klon,klev) :: pomsol ! POM soluble concentration [ug/m3] |
---|
34 | REAL, DIMENSION(klon,klev) :: pomins ! POM insoluble concentration [ug/m3] |
---|
35 | REAL, DIMENSION(klon,klev) :: sulfate_pi |
---|
36 | REAL, DIMENSION(klon,klev) :: bcsol_pi |
---|
37 | REAL, DIMENSION(klon,klev) :: bcins_pi |
---|
38 | REAL, DIMENSION(klon,klev) :: pomsol_pi |
---|
39 | REAL, DIMENSION(klon,klev) :: pomins_pi |
---|
40 | REAL, DIMENSION(klon,klev) :: pdel |
---|
41 | REAL, DIMENSION(klon,klev,8) :: m_allaer |
---|
42 | |
---|
43 | INTEGER :: k |
---|
44 | |
---|
45 | ! |
---|
46 | ! Read aersosols from file |
---|
47 | ! |
---|
48 | maerosol(:,:) = 0. |
---|
49 | maerosol_pi(:,:) = 0. |
---|
50 | |
---|
51 | bcsol(:,:) = 0. |
---|
52 | bcins(:,:) = 0. |
---|
53 | pomsol(:,:) = 0. |
---|
54 | pomins(:,:) = 0. |
---|
55 | sulfate(:,:) = 0. |
---|
56 | |
---|
57 | ! Read sulfate |
---|
58 | IF ( flag_aerosol .EQ. 1 .OR. & |
---|
59 | flag_aerosol .EQ. 4 .OR. & |
---|
60 | flag_aerosol .EQ. 6 ) THEN |
---|
61 | |
---|
62 | CALL readaerosol(5,rjourvrai, debut, sulfate) |
---|
63 | CALL readaerosol_preind(5,rjourvrai, & |
---|
64 | debut, sulfate_pi) |
---|
65 | |
---|
66 | maerosol(:,:) = maerosol(:,:) + sulfate(:,:) |
---|
67 | maerosol_pi(:,:) = maerosol_pi(:,:) + sulfate_pi(:,:) |
---|
68 | ENDIF |
---|
69 | |
---|
70 | |
---|
71 | ! Read bcscol and bcins |
---|
72 | IF ( flag_aerosol .EQ. 2 .OR. & |
---|
73 | flag_aerosol .EQ. 4 .OR. & |
---|
74 | flag_aerosol .EQ. 5 ) THEN |
---|
75 | |
---|
76 | ! Get bc aerosol distribution |
---|
77 | CALL readaerosol(3,rjourvrai, debut,bcsol ) |
---|
78 | CALL readaerosol_preind(3,rjourvrai, debut, bcsol_pi) |
---|
79 | |
---|
80 | CALL readaerosol(7,rjourvrai, debut,bcins ) |
---|
81 | CALL readaerosol_preind(7,rjourvrai, debut, bcins_pi) |
---|
82 | |
---|
83 | maerosol(:,:) = maerosol(:,:) + bcsol(:,:) |
---|
84 | maerosol_pi(:,:) = maerosol_pi(:,:) + bcsol_pi(:,:) |
---|
85 | ENDIF |
---|
86 | |
---|
87 | |
---|
88 | ! Read pomsol and pomins |
---|
89 | IF ( flag_aerosol .EQ. 3 .OR. & |
---|
90 | flag_aerosol .EQ. 4 .OR. & |
---|
91 | flag_aerosol .EQ. 5 .OR. & |
---|
92 | flag_aerosol .EQ. 6 ) THEN |
---|
93 | |
---|
94 | CALL readaerosol(4,rjourvrai, debut,pomsol) |
---|
95 | CALL readaerosol_preind(4,rjourvrai,debut,pomsol_pi ) |
---|
96 | |
---|
97 | CALL readaerosol(8,rjourvrai, debut,pomins) |
---|
98 | CALL readaerosol_preind(8,rjourvrai,debut,pomins_pi ) |
---|
99 | |
---|
100 | maerosol(:,:) = maerosol(:,:) + pomsol |
---|
101 | maerosol_pi(:,:) = maerosol_pi(:,:) + pomsol_pi |
---|
102 | ENDIF |
---|
103 | |
---|
104 | |
---|
105 | ! Save all aerosols in one variable |
---|
106 | ! |
---|
107 | ! ACo pour couplage aerosol offline 07/04/2009 |
---|
108 | ! Tableau contenant les masses pour tous les aerosols |
---|
109 | ! les valeurs a zero seront a remplacer par les bons |
---|
110 | ! tableaux lorsque les routines de lectures seront |
---|
111 | ! ajoutees. |
---|
112 | m_allaer(:,:,1) = 0. ! SSSSM || CSSSM |
---|
113 | m_allaer(:,:,2) = 0. ! ASSSM |
---|
114 | m_allaer(:,:,3) = bcsol(:,:) ! ASBCM |
---|
115 | m_allaer(:,:,4) = pomsol(:,:) ! ASPOMM |
---|
116 | m_allaer(:,:,5) = sulfate(:,:) ! ASSO4M || CSSO4M |
---|
117 | m_allaer(:,:,6) = 0. ! CIDUSTM |
---|
118 | m_allaer(:,:,7) = bcins(:,:) ! AIBCM |
---|
119 | m_allaer(:,:,8) = pomins(:,:) ! AIPOMM |
---|
120 | |
---|
121 | ! |
---|
122 | ! Calculate the optical properties for the aerosols |
---|
123 | ! |
---|
124 | DO k = 1, klev |
---|
125 | pdel(:,k) = paprs(:,k) - paprs (:,k+1) |
---|
126 | END DO |
---|
127 | |
---|
128 | IF (.NOT. new_aod) THEN |
---|
129 | CALL aeropt(pplay, paprs, t_seri, sulfate, rhcl, & |
---|
130 | tau_aero(:,:,5,:), piz_aero(:,:,5,:), cg_aero(:,:,5,:), aerindex) |
---|
131 | ELSE |
---|
132 | fractnat_allaer(:,:) = 0. |
---|
133 | CALL aeropt_2bands( & |
---|
134 | pdel, m_allaer, pdtphys, rhcl, & |
---|
135 | tau_aero, piz_aero, cg_aero, & |
---|
136 | fractnat_allaer, flag_aerosol, & |
---|
137 | pplay, t_seri) |
---|
138 | |
---|
139 | CALL aeropt_5wv( & |
---|
140 | pdel, m_allaer, & |
---|
141 | pdtphys, rhcl, aerindex, & |
---|
142 | flag_aerosol, pplay, t_seri) |
---|
143 | ENDIF |
---|
144 | |
---|
145 | END SUBROUTINE aerosol_optic |
---|