source: LMDZ4/branches/LMDZ4-dev/libf/phylmd/aerosol_optic.F90 @ 1160

Last change on this file since 1160 was 1150, checked in by jghattas, 15 years ago

Ajoute possiblilite de forcer avec d'autre aersols avec le meme principe que pour les so4.

Par default la convergence est rempu avec flag_aersosol=1 + ok_ade=ok_aie=y. Exactement les memes resultats peuvent etre retrouver avec new_aod=n. Les resultats sont exactement les memes sans prise en compte aucun aerosol, avec ok_ade=ok_aie=n.

  • flag_aerosol indique quel aersosol ou combinasion a utiliser (=1 uniquement les SO4 comme avant)
  • les fichiers d'entree so4.runXXXX.cdf change du nom pour majescule SO4.runXXXX.cdf
  • readsulfate change du nom pour readaerosol qui trait tous les aerosols
  • radlwsw change du nom pour radlwsw_aero.
  • aeropt_2bands.F90 et aeropt_5wv.F90 correspond a un reecriture de aeropt.F (premier et deuxieme moitie respectivement)
  • aeropt.F est gardé pour retrouver la convergence si demande avec new_aod=false (=true default)
  • sw_aero est un version evolue de sw_lmdar4 (dans fichier radiation_ar4.F)

ACo + JG

File size: 4.7 KB
Line 
1SUBROUTINE 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
145END SUBROUTINE aerosol_optic
Note: See TracBrowser for help on using the repository browser.