1 | !================================================================== |
---|
2 | module aerosol_mod |
---|
3 | implicit none |
---|
4 | save |
---|
5 | !================================================================== |
---|
6 | |
---|
7 | ! aerosol indexes: these are initialized to be 0 if the |
---|
8 | ! corresponding aerosol was not activated in callphys.def |
---|
9 | ! -- otherwise a value is given in iniaerosol |
---|
10 | integer :: iaero_haze = 0 |
---|
11 | integer :: i_haze = 0 |
---|
12 | |
---|
13 | contains |
---|
14 | |
---|
15 | !================================================================== |
---|
16 | subroutine haze_prof(ngrid,nlayer,zzlay,pplay,pt,reffrad,profmmr) |
---|
17 | !================================================================== |
---|
18 | ! Purpose |
---|
19 | ! ------- |
---|
20 | ! Get fixed haze properties |
---|
21 | ! profile of haze (from txt file) and fixed radius profile |
---|
22 | ! |
---|
23 | !================================================================== |
---|
24 | use radinc_h, only: naerkind |
---|
25 | use datafile_mod |
---|
26 | |
---|
27 | Implicit none |
---|
28 | #include "dimensions.h" |
---|
29 | #include "dimphys.h" |
---|
30 | #include "tracer.h" |
---|
31 | #include "callkeys.h" |
---|
32 | #include "comcstfi.h" |
---|
33 | !----------------------------------------------------------------------- |
---|
34 | ! Arguments |
---|
35 | |
---|
36 | integer,intent(in) :: ngrid |
---|
37 | integer,intent(in) :: nlayer |
---|
38 | real,intent(in) :: zzlay(ngrid,nlayer) |
---|
39 | real,intent(in) :: pplay(ngrid,nlayer) |
---|
40 | real,intent(in) :: pt(ngrid,nlayer) |
---|
41 | real, intent(in) :: reffrad(ngrid,nlayer,naerkind) ! haze particles radii (m) |
---|
42 | |
---|
43 | real, intent(out) :: profmmr(ngrid,nlayer) ! mmr haze kg/kg |
---|
44 | |
---|
45 | ! Local variables |
---|
46 | integer :: iaer,l,ig,ifine |
---|
47 | |
---|
48 | LOGICAL firstcall |
---|
49 | SAVE firstcall |
---|
50 | DATA firstcall/.true./ |
---|
51 | |
---|
52 | !!read altitudes and haze mmrs |
---|
53 | integer Nfine |
---|
54 | !parameter(Nfine=21) |
---|
55 | parameter(Nfine=701) |
---|
56 | character(len=100) :: file_path |
---|
57 | character(len=100) :: file_name |
---|
58 | real,save :: levdat(Nfine),densdat(Nfine) |
---|
59 | |
---|
60 | !---------------- INPUT ------------------------------------------------ |
---|
61 | |
---|
62 | !! Read data |
---|
63 | IF (firstcall) then |
---|
64 | firstcall=.false. |
---|
65 | if (hazemmr_file/='None')then |
---|
66 | file_name = hazemmr_file |
---|
67 | print*, 'Read Haze MMR file: ',hazemmr_file |
---|
68 | else if(hazedens_file/='None')then |
---|
69 | file_name = hazedens_file |
---|
70 | print*, 'Read Haze density: ',hazedens_file |
---|
71 | else |
---|
72 | STOP "No filename given for haze profile. Either set hazemmr_file or hazedens_file" |
---|
73 | endif |
---|
74 | |
---|
75 | file_path=trim(datadir)//'/haze_prop/'//file_name |
---|
76 | open(224,file=file_path,form='formatted') |
---|
77 | do ifine=1,Nfine |
---|
78 | read(224,*) levdat(ifine), densdat(ifine) |
---|
79 | enddo |
---|
80 | close(224) |
---|
81 | print*, 'AF24 read Haze MMR profile ',file_path |
---|
82 | ENDIF |
---|
83 | |
---|
84 | !! Interpolate on the model vertical grid |
---|
85 | do ig=1,ngrid |
---|
86 | CALL interp_line(levdat,densdat,Nfine,zzlay(ig,:)/1000.,profmmr(ig,:),nlayer) |
---|
87 | enddo |
---|
88 | |
---|
89 | !! Get profile Mass mixing ratio from number density: part.cm-3 --> m-3 --> m3 m-3 |
---|
90 | ! --> kg m-3 --> kg/kg |
---|
91 | do iaer=1,naerkind |
---|
92 | if(iaer.eq.iaero_haze.and.hazedens_file/='None') then !AF24 activate/deactivate mmr or part density |
---|
93 | !print*, 'Haze profile is fixed' |
---|
94 | do ig=1,ngrid |
---|
95 | do l=1,nlayer |
---|
96 | !from number density in cm-3 |
---|
97 | profmmr(ig,l)=profmmr(ig,l)*1.e6*4./3.*pi*reffrad(ig,l,iaer)**3*rho_q(i_haze)/(pplay(ig,l)/(r*pt(ig,l))) |
---|
98 | enddo |
---|
99 | enddo |
---|
100 | endif |
---|
101 | enddo |
---|
102 | end subroutine haze_prof |
---|
103 | !================================================================== |
---|
104 | |
---|
105 | !================================================================== |
---|
106 | end module aerosol_mod |
---|
107 | !================================================================== |
---|