PROGRAM mie IMPLICIT NONE C C-------Mie computations for a size distribution C of homogeneous spheres. c C========================================================== C--Ref : Toon and Ackerman, Applied Optics, 1981 C Stephens, CSIRO, 1979 C Attention : surdimensionement des tableaux C to be compiled with double precision option (-r8 on Sun) C AUTHOR: Olivier Boucher C-------SIZE distribution properties---------------- C--sigma_g : geometric standard deviation C--r_0 : geometric number mean dry radius (um)=modal dry radius C--rho : density in kg/m3 C--Ntot : total concentration in m-3 (does not matter) c REAL rmin, rmax !----integral bounds in m PARAMETER (rmin=0.002E-6, rmax=30.E-6) c INTEGER Ndis, dis PARAMETER (Ndis=1) REAL sigma_g(Ndis), r_0(Ndis), Ntot(Ndis) DATA r_0 /0.1E-6/ DATA sigma_g/1.8/ DATA Ntot /1.0/ c INTEGER irh,Nrh PARAMETER(Nrh=12) REAL RH_tab(Nrh),RH DATA RH_tab/0.,10.,20.,30.,40.,50.,60.,70.,80.,85.,90.,95./ REAL rh_growth(Nrh), rho_SUL(Nrh), rhgrowth c REAL nombre, masse, massebc, massesul, volume,rho, rho_BC c PARAMETER (rho_BC=1.8E3) !--dry density kg/m3 c c--growth factor for radius for sulfate (=non-BC) aerosols c--output from exact calculations as a function of RH DATA rh_growth/1.000, 1.000, 1.000, 1.000, 1.169, 1.220, . 1.282, 1.363, 1.485, 1.580, 1.735, 2.085 / c c--density for sulfate (=non-BC) aerosols c--output from exact calculations as a function of RH DATA rho_SUL/ 1769., 1769., 1769., 1769., 1430., 1390., . 1349., 1302., 1245., 1210., 1165., 1101./ !--kg/m3 c INTEGER class,Nclass PARAMETER (Nclass=7) c c--dry mass content of BC REAL bc_content(Nclass) DATA bc_content/0.0, 0.001, 0.01, 0.02, 0.05, 0.1, 0.2/ c REAL bccontentbymass, sulcontentbymass, drycontentbymass REAL bccontentbyvol, sulcontentbyvol c c------------------------------------- c COMPLEX m !----refractive index m=n_r-i*n_i c--the following is added by Rong Wang COMPLEX zmax1, zmax2, zmax3 c--end INTEGER Nmax,Nstart !--number of iterations COMPLEX k2, k3, z1, z2 COMPLEX u1,u5,u6,u8 COMPLEX a(1:21000), b(1:21000) COMPLEX I INTEGER n !--loop index REAL pi, nnn COMPLEX nn REAL Q_ext, Q_abs, Q_sca, g, omega !--parameters for radius r REAL x !--size parameter REAL r !--radius REAL sigma_sca, sigma_ext, sigma_abs REAL omegatot, gtot !--averaged parameters COMPLEX ksiz2(-1:21000), psiz2(1:21000) COMPLEX nu1z1(1:21010), nu1z2(1:21010) COMPLEX nu3z2(0:21000) REAL dnumber, deltar INTEGER bin, Nbin, k PARAMETER (Nbin=700) c C---wavelengths STREAMER INTEGER Nwv, NwvmaxSW PARAMETER (NwvmaxSW=25) REAL lambda(1:NwvmaxSW) DATA lambda/0.28E-6, 0.30E-6, 0.33E-6, 0.36E-6, 0.40E-6, . 0.44E-6, 0.48E-6, 0.52E-6, 0.57E-6, 0.64E-6, . 0.69E-6, 0.75E-6, 0.78E-6, 0.87E-6, 1.00E-6, . 1.10E-6, 1.19E-6, 1.28E-6, 1.53E-6, 1.64E-6, . 2.13E-6, 2.38E-6, 2.91E-6, 3.42E-6, 4.00E-6/ c INTEGER nb, nb_lambda PARAMETER (nb_lambda=5) REAL lambda_ref(nb_lambda) DATA lambda_ref /0.443E-6,0.550E-6,0.670E-6,0.765E-6,0.865E-6/ c C---BOA fluxes from typical STREAMER run - Tad REAL weight(1:NwvmaxSW-1) DATA weight/ 0.01, 4.05, 9.51, 15.99, 26.07, 33.10, 33.07, . 39.91, 52.67, 27.89, 43.60, 13.67, 42.22, 40.12, . 32.70, 14.44, 19.48, 14.23, 13.43, 16.42, 8.33, . 0.95, 0.65, 2.76/ c REAL lambda_int(1:NwvmaxSW-1+nb_lambda) c REAL n_r_BC(1:NwvmaxSW-1+nb_lambda) REAL n_i_BC(1:NwvmaxSW-1+nb_lambda) c REAL n_r_SUL(1:Nrh,1:NwvmaxSW-1+nb_lambda) REAL n_i_SUL(1:Nrh,1:NwvmaxSW-1+nb_lambda) c REAL final_a(1:NwvmaxSW-1+nb_lambda) REAL final_g(1:NwvmaxSW-1+nb_lambda) REAL final_w(1:NwvmaxSW-1+nb_lambda) c INTEGER band, NbandSW PARAMETER (NbandSW=6) c REAL gcm_a(NbandSW) REAL gcm_g(NbandSW) REAL gcm_w(NbandSW) REAL gcm_weight_a(NbandSW) REAL gcm_weight_g(NbandSW) REAL gcm_weight_w(NbandSW) c REAL ss_a(Nclass,Nrh,NbandSW+nb_lambda) REAL ss_w(Nclass,Nrh,NbandSW+nb_lambda) REAL ss_g(Nclass,Nrh,NbandSW+nb_lambda) c REAL ss_a_bc(Nclass,Nrh,NbandSW+nb_lambda) REAL ss_w_bc(Nclass,Nrh,NbandSW+nb_lambda) REAL ss_g_bc(Nclass,Nrh,NbandSW+nb_lambda) c INTEGER wv, nb_wv_BCr, nb_wv_BCi, nb_wv_SUL REAL count_n_r, count_n_i c REAL n_r, n_i c c--refractive index for soluble stuff other than BC PARAMETER (nb_wv_SUL=100) REAL wv_SUL(1:nb_wv_SUL) REAL index_r_SUL(1:Nrh,1:nb_wv_SUL) REAL index_i_SUL(1:Nrh,1:nb_wv_SUL) c--refractive index for BC c--Greg Schuster data c PARAMETER (nb_wv_BCr=21, nb_wv_BCi=21) c--Sheffield PARAMETER (nb_wv_BCr=61, nb_wv_BCi=61) REAL wv_BCr(1:nb_wv_BCr), wv_BCi(1:nb_wv_BCi) REAL index_r_BC(1:nb_wv_BCr), index_i_BC(1:nb_wv_BCi) REAL dummy c--this is used by Rong Wang to test the square root c zmax1=CMPLX(0,2) c zmax1=zmax1**(1./2.) c n_r=REAL(zmax1) c n_i=AIMAG(zmax1) c print *, n_r,n_i c c zmax1=CMPLX(-3,4) c zmax1=zmax1**(1./2.) c n_r=REAL(zmax1) c n_i=AIMAG(zmax1) c print *, n_r,n_i c--end c--reading real part of refractive index c OPEN(unit=10,file='r_bc_greg.dat') OPEN(unit=10,file='r_bcsoot_she.dat') DO wv=1, nb_wv_BCr READ (10,*) wv_BCr(wv), index_r_BC(wv) ENDDO CLOSE(10) c c--reading imaginary part of refractive index c OPEN(unit=10,file='i_bc_greg.dat') OPEN(unit=10,file='i_bcsoot_she.dat') DO wv=1, nb_wv_BCi READ (10,*) wv_BCi(wv), index_i_BC(wv) ENDDO CLOSE(10) c c--reading imaginary part of refractive index c--for sulfate (=non-BC) aerosols OPEN(unit=10,file='ri_sul_v2') DO irh=1, Nrh DO wv=1, nb_wv_SUL READ (10,*) dummy, wv_SUL(wv), . index_r_SUL(irh,wv), index_i_SUL(irh,wv) ENDDO ENDDO CLOSE(10) c c------------------------------------------------------------ c--initialising BC refractice indices before interpolation DO Nwv=1, NwvmaxSW-1+nb_lambda n_r_BC(Nwv)=0.0 n_i_BC(Nwv)=0.0 ENDDO c c--interpolating on our wavelengths DO Nwv=1, NwvmaxSW-1 c lambda_int(Nwv)=( lambda(Nwv)+lambda(Nwv+1) ) /2. c c--first real part count_n_r=0.0 DO wv=1, nb_wv_BCr IF (wv_BCr(wv)/1.e9.GT.lambda(Nwv).AND. . wv_BCr(wv)/1.e9.LT.lambda(Nwv+1)) THEN n_r_BC(Nwv)=n_r_BC(Nwv)+index_r_BC(wv) count_n_r=count_n_r+1.0 ENDIF ENDDO c IF (count_n_r.GT.0.5) THEN c--averaging n_r_BC(Nwv)=n_r_BC(Nwv)/count_n_r ELSE c--otherwise closest neighbour DO wv=1, nb_wv_BCr IF (wv_BCr(wv)/1.e9.LT.lambda_int(Nwv)) THEN n_r_BC(Nwv)=index_r_BC(wv) ENDIF ENDDO ENDIF c c--then imaginary part count_n_i=0.0 DO wv=1, nb_wv_BCi IF (wv_BCi(wv)/1.e9.GT.lambda(Nwv).AND. . wv_BCi(wv)/1.e9.LT.lambda(Nwv+1)) THEN n_i_BC(Nwv)=n_i_BC(Nwv)+index_i_BC(wv) count_n_i=count_n_i+1.0 ENDIF ENDDO c IF (count_n_i.GT.0.5) THEN c--averaging n_i_BC(Nwv)=n_i_BC(Nwv)/count_n_i ELSE c--otherwise closest neighbour DO wv=1, nb_wv_BCi IF (wv_BCi(wv)/1.e9.LT.lambda_int(Nwv)) THEN n_i_BC(Nwv)=index_i_BC(wv) ENDIF ENDDO ENDIF c ENDDO c c------------------------------------------------------------ c--initialising SUL refractice indices before interpolation DO irh=1, Nrh c DO Nwv=1, NwvmaxSW-1+nb_lambda n_r_SUL(irh,Nwv)=0.0 n_i_SUL(irh,Nwv)=0.0 ENDDO c c--interpolating on our wavelengths c DO Nwv=1, NwvmaxSW-1 c lambda_int(Nwv)=( lambda(Nwv)+lambda(Nwv+1) ) /2. c c--first real part count_n_r=0.0 DO wv=1, nb_wv_SUL IF (wv_SUL(wv).GT.lambda(Nwv).AND. . wv_SUL(wv).LT.lambda(Nwv+1)) THEN n_r_SUL(irh,Nwv)=n_r_SUL(irh,Nwv)+index_r_SUL(irh,wv) count_n_r=count_n_r+1.0 ENDIF ENDDO c IF (count_n_r.GT.0.5) THEN c--averaging n_r_SUL(irh,Nwv)=n_r_SUL(irh,Nwv)/count_n_r ELSE c--otherwise closest neighbour DO wv=1, nb_wv_SUL IF (wv_SUL(wv).LT.lambda_int(Nwv)) THEN n_r_SUL(irh,Nwv)=index_r_SUL(irh,wv) ENDIF ENDDO ENDIF c c--then imaginary part count_n_i=0.0 DO wv=1, nb_wv_SUL IF (wv_SUL(wv).GT.lambda(Nwv).AND. . wv_SUL(wv).LT.lambda(Nwv+1)) THEN n_i_SUL(irh,Nwv)=n_i_SUL(irh,Nwv)+index_i_SUL(irh,wv) count_n_i=count_n_i+1.0 ENDIF ENDDO c IF (count_n_i.GT.0.5) THEN c--averaging n_i_SUL(irh,Nwv)=n_i_SUL(irh,Nwv)/count_n_i ELSE c--otherwise closest neighbour DO wv=1, nb_wv_SUL IF (wv_SUL(wv).LT.lambda_int(Nwv)) THEN n_i_SUL(irh,Nwv)=index_i_SUL(irh,wv) ENDIF ENDDO ENDIF c ENDDO c ENDDO c c----------------------------------------------------------- c c--now defining nr and ni for my set of reference wavelengths DO nb=1, nb_lambda c lambda_int(NwvmaxSW-1+nb)=lambda_ref(nb) c c--for BC DO wv=1, nb_wv_BCr IF (wv_BCr(wv)/1.e9.LT.lambda_ref(nb)) THEN n_r_BC(NwvmaxSW-1+nb)=index_r_BC(wv) ENDIF ENDDO DO wv=1, nb_wv_BCi IF (wv_BCi(wv)/1.e9.LT.lambda_ref(nb)) THEN n_i_BC(NwvmaxSW-1+nb)=index_i_BC(wv) ENDIF ENDDO c c--for SUL DO irh=1,Nrh DO wv=1, nb_wv_SUL IF (wv_SUL(wv).LT.lambda_ref(nb)) THEN n_r_SUL(irh,NwvmaxSW-1+nb)=index_r_SUL(irh,wv) n_i_SUL(irh,NwvmaxSW-1+nb)=index_i_SUL(irh,wv) ENDIF ENDDO ENDDO c ENDDO c c--n_r and n_i are defined manually for first band n_r_BC(1)=index_r_BC(1) n_i_BC(1)=index_i_BC(1) c c--here check that n_r and n_i are fine after interpolation scheme c PRINT *,'n_r_BC=', n_r_BC c PRINT *,'n_i_BC=', n_i_BC c PRINT *,'n_r_SUL=', n_r_SUL c PRINT *,'n_i_SUL=', n_i_SUL c c c--------------------------------------------------------------------- c------MASTER LOOPS c DO class=1, Nclass c DO irh=1, Nrh c c print *,'class=', class, ' irh=', irh c c--Mie calculation starts here DO Nwv=1, NwvmaxSW-1+nb_lambda c c--BC and non-BC mass fraction c--for the dry aerosol bccontentbymass=bc_content(class) !--dry mass fraction sulcontentbymass=1.0-bccontentbymass !--dry mass fraction c--rhgrowth for the mixed particle rhgrowth=(( bccontentbymass/rho_BC + . sulcontentbymass/rho_SUL(1)*rh_growth(irh)**3.) / . ( bccontentbymass/rho_BC + . sulcontentbymass/rho_SUL(1) ))**(1./3.) c--added by Rong Wang to compute dry mass content drycontentbymass= ( bccontentbymass + sulcontentbymass ) / . (bccontentbymass + . sulcontentbymass*rh_growth(irh)**3.0* . rho_SUL(irh)/rho_SUL(1) ) !--wet mass fraction c--BC and non-BC mass fraction c--correcting for the wet aerosol c--sulcontent is for sulfate + water bccontentbymass=bccontentbymass / ( bccontentbymass + . sulcontentbymass*rh_growth(irh)**3.0* . rho_SUL(irh)/rho_SUL(1) ) !--wet mass fraction sulcontentbymass=1.0-bccontentbymass !--wet mass fraction c--BC and non-BC volume fraction c--for the wet aerosol bccontentbyvol=(bccontentbymass/rho_BC) / . (bccontentbymass/rho_BC + . sulcontentbymass/rho_SUL(irh)) !--wet vol fraction sulcontentbyvol=1.0-bccontentbyvol !--wet vol fraction c c c print *, rhgrowth, rh_growth(irh) c print *,'BC=',bc_content(class), bccontentbymass, bccontentbyvol c c--density of mixture rho = (Mbc+Msul)/(Vbc+Vsul) c = (Mbc+Msul)/Msul*Msul/Vsul*Vsul/(Vbc+Vsul) c = rhoSUL*sulcontentbyvol/sulcontentbymass rho=rho_SUL(irh)*sulcontentbyvol/sulcontentbymass c print *,'rho=',rho_BC, rho_SUL(irh), rho, c c--volume weighed refractive index c--the following is modified by Rong Wang c n_r=n_r_BC(Nwv)*bccontentbyvol+n_r_SUL(irh,Nwv)*sulcontentbyvol c n_i=n_i_BC(Nwv)*bccontentbyvol+n_i_SUL(irh,Nwv)*sulcontentbyvol zmax1=CMPLX(n_r_BC(Nwv),-n_i_BC(Nwv)) zmax2=CMPLX(n_r_SUL(irh,Nwv),-n_i_SUL(irh,Nwv)) zmax3=(zmax2**2) * . (zmax1**2+2.*zmax2**2+2.*bccontentbyvol*(zmax1**2 . -zmax2**2)) / . (zmax1**2+2.*zmax2**2-bccontentbyvol*(zmax1**2 . -zmax2**2)) zmax3=zmax3**(1./2.) n_r=REAL(zmax3) n_i=-AIMAG(zmax3) c c----test print 550 nm refractive index c if (Nwv.eq.NwvmaxSW-1+2) then c print *, 'n_r=',n_r, n_r_BC(Nwv), n_r_SUL(irh,Nwv) c print *, 'n_i=',n_i, n_i_BC(Nwv), n_i_SUL(irh,Nwv) c endif c m=CMPLX(n_r,-n_i) c pi=4.*ATAN(1.) c I=CMPLX(0.,1.) c sigma_sca=0.0 sigma_ext=0.0 sigma_abs=0.0 gtot=0.0 omegatot=0.0 masse = 0.0 massebc = 0.0 massesul = 0.0 volume=0.0 nombre=0.0 c DO bin=0, Nbin !---loop on size bins c--this radius is the wet aerosol radius r=exp(log(rmin)+FLOAT(bin)/FLOAT(Nbin)*(log(rmax)-log(rmin))) x=2.*pi*r/lambda_int(Nwv) deltar=1./FLOAT(Nbin)*(log(rmax)-log(rmin)) c c--computing number concentration using log-normal for the dry aerosols dnumber=0 DO dis=1, Ndis dnumber=dnumber+Ntot(dis)/SQRT(2.*pi)/log(sigma_g(dis))* . exp(-0.5*(log(r/(r_0(dis)*rhgrowth)) . /log(sigma_g(dis)))**2) ENDDO c--be careful here we compute the mass of BC in the mixed particle c--using the rho of the mixed particle gives total mass c--then multiply by bc content by mass for the wet aerosol massebc = massebc +4./3.*pi*(r**3)*dnumber* . deltar*rho*1.E3*bccontentbymass !--g/m3 c--added by Rong Wang masse = masse + 4./3.*pi*(r**3)*dnumber* . deltar*rho*1.E3*drycontentbymass !--g/m3 massesul = massesul + 4./3.*pi*(r**3)*dnumber* . deltar*rho*1.E3*(drycontentbymass - bccontentbymass) !--g/m3 c--be careful here we compute the volume of BC in the mixed particle volume=volume+4./3.*pi*(r**3)*dnumber*deltar*bccontentbyvol c--total number nombre=nombre+dnumber*deltar c k2=m k3=CMPLX(1.0,0.0) z2=CMPLX(x,0.0) z1=m*z2 IF (0.0.LE.x.AND.x.LE.8.) THEN Nmax=INT(x+4*x**(1./3.)+1.)+2 ELSEIF (8..LT.x.AND.x.LT.4200.) THEN Nmax=INT(x+4.05*x**(1./3.)+2.)+1 ELSEIF (4200..LE.x.AND.x.LE.20000.) THEN Nmax=INT(x+4*x**(1./3.)+2.)+1 ELSE WRITE(10,*) 'x out of bound, x=', x STOP ENDIF Nstart=Nmax+10 C-----------loop for nu1z1, nu1z2 nu1z1(Nstart)=CMPLX(0.0,0.0) nu1z2(Nstart)=CMPLX(0.0,0.0) DO n=Nstart-1, 1 , -1 nn=CMPLX(FLOAT(n),0.0) nu1z1(n)=(nn+1.)/z1 - 1./( (nn+1.)/z1 + nu1z1(n+1) ) nu1z2(n)=(nn+1.)/z2 - 1./( (nn+1.)/z2 + nu1z2(n+1) ) ENDDO C------------loop for nu3z2 nu3z2(0)=-I DO n=1, Nmax nn=CMPLX(FLOAT(n),0.0) nu3z2(n)=-nn/z2 + 1./ (nn/z2 - nu3z2(n-1) ) ENDDO C-----------loop for psiz2 and ksiz2 (z2) ksiz2(-1)=COS(REAL(z2))-I*SIN(REAL(z2)) ksiz2(0)=SIN(REAL(z2))+I*COS(REAL(z2)) DO n=1,Nmax nn=CMPLX(FLOAT(n),0.0) ksiz2(n)=(2.*nn-1.)/z2 * ksiz2(n-1) - ksiz2(n-2) psiz2(n)=CMPLX(REAL(ksiz2(n)),0.0) ENDDO C-----------loop for a(n) and b(n) DO n=1, Nmax u1=k3*nu1z1(n) - k2*nu1z2(n) u5=k3*nu1z1(n) - k2*nu3z2(n) u6=k2*nu1z1(n) - k3*nu1z2(n) u8=k2*nu1z1(n) - k3*nu3z2(n) a(n)=psiz2(n)/ksiz2(n) * u1/u5 b(n)=psiz2(n)/ksiz2(n) * u6/u8 ENDDO C-----------------final loop-------------- Q_ext=0.0 Q_sca=0.0 g=0.0 DO n=Nmax-1,1,-1 nnn=FLOAT(n) Q_ext=Q_ext+ (2.*nnn+1.) * REAL( a(n)+b(n) ) Q_sca=Q_sca+ (2.*nnn+1.) * . REAL( a(n)*CONJG(a(n)) + b(n)*CONJG(b(n)) ) g=g + nnn*(nnn+2.)/(nnn+1.) * . REAL( a(n)*CONJG(a(n+1))+b(n)*CONJG(b(n+1)) ) + . (2.*nnn+1.)/nnn/(nnn+1.) * REAL(a(n)*CONJG(b(n))) ENDDO Q_ext=2./x**2 * Q_ext Q_sca=2./x**2 * Q_sca Q_abs=Q_ext-Q_sca IF (AIMAG(m).EQ.0.0) Q_abs=0.0 omega=Q_sca/Q_ext g=g*4./x**2/Q_sca c sigma_sca=sigma_sca+r**2*Q_sca*dnumber*deltar sigma_abs=sigma_abs+r**2*Q_abs*dnumber*deltar sigma_ext=sigma_ext+r**2*Q_ext*dnumber*deltar omegatot=omegatot+r**2*Q_ext*omega*dnumber*deltar gtot =gtot+r**2*Q_sca*g*dnumber*deltar c ENDDO !---bin C------------------------------------------------------------------ sigma_sca=pi*sigma_sca sigma_abs=pi*sigma_abs sigma_ext=pi*sigma_ext gtot=pi*gtot/sigma_sca omegatot=pi*omegatot/sigma_ext c final_g(Nwv)=gtot final_w(Nwv)=min(1.,omegatot) c-- Rong Wang modify this to compute the alpha based on the dry mass of c-- whole mixture (black carbon + sulfate) final_a(Nwv)=sigma_ext/masse c ENDDO !--loop on wavelength c c---averaging over LMDZ wavebands c c print *, final_a(6), final_a(NwvmaxSW), final_a(NwvmaxSW+1) DO band=1, NbandSW gcm_a(band)=0.0 gcm_g(band)=0.0 gcm_w(band)=0.0 gcm_weight_a(band)=0.0 gcm_weight_g(band)=0.0 gcm_weight_w(band)=0.0 ENDDO c c---band 1 is now in the UV, so we take the first wavelength as being representative c---it doesn't matter anyway because all radiation is absorbed in the stratosphere DO Nwv=1,1 band=1 gcm_a(band)=gcm_a(band)+final_a(Nwv)*weight(Nwv) gcm_weight_a(band)=gcm_weight_a(band)+weight(Nwv) gcm_w(band)=gcm_w(band)+ . final_w(Nwv)*final_a(Nwv)*weight(Nwv) gcm_weight_w(band)=gcm_weight_w(band)+ . final_a(Nwv)*weight(Nwv) gcm_g(band)=gcm_g(band)+ . final_g(Nwv)*final_a(Nwv)*final_w(Nwv)*weight(Nwv) gcm_weight_g(band)=gcm_weight_g(band)+ . final_a(Nwv)*final_w(Nwv)*weight(Nwv) ENDDO c DO Nwv=1,NwvmaxSW-1 c IF (Nwv.LE.5) THEN !--RRTM spectral interval 2 band=2 ELSEIF (Nwv.LE.10) THEN !--RRTM spectral interval 3 band=3 ELSEIF (Nwv.LE.16) THEN !--RRTM spectral interval 4 band=4 ELSEIF (Nwv.LE.21) THEN !--RRTM spectral interval 5 band=5 ELSE !--RRTM spectral interval 6 band=6 ENDIF c gcm_a(band)=gcm_a(band)+final_a(Nwv)*weight(Nwv) gcm_weight_a(band)=gcm_weight_a(band)+weight(Nwv) gcm_w(band)=gcm_w(band)+ . final_w(Nwv)*final_a(Nwv)*weight(Nwv) gcm_weight_w(band)=gcm_weight_w(band)+ . final_a(Nwv)*weight(Nwv) gcm_g(band)=gcm_g(band)+ . final_g(Nwv)*final_a(Nwv)*final_w(Nwv)*weight(Nwv) gcm_weight_g(band)=gcm_weight_g(band)+ . final_a(Nwv)*final_w(Nwv)*weight(Nwv) ENDDO c DO band=1, NbandSW gcm_a(band)=gcm_a(band)/gcm_weight_a(band) gcm_w(band)=gcm_w(band)/gcm_weight_w(band) gcm_g(band)=gcm_g(band)/gcm_weight_g(band) ss_a(class,irh,band)=gcm_a(band) ss_w(class,irh,band)=gcm_w(band) ss_g(class,irh,band)=gcm_g(band) ENDDO c DO nb=NbandSW+1, NbandSW+nb_lambda ss_a(class,irh,nb)=final_a(NwvmaxSW-1+nb-NbandSW) ss_w(class,irh,nb)=final_w(NwvmaxSW-1+nb-NbandSW) ss_g(class,irh,nb)=final_g(NwvmaxSW-1+nb-NbandSW) ENDDO c c-- Rong Wang (July 7, 2016)) c-- From this line, it should be very careful c-- Here, I compute the ext, abs, sca for dry BC mass c-- I have checked these variables for mass: c-- masse, dry total mass; massebc, dry BC; massesul, dry sulfate c-- masse = massebc + massesul c-- c-- I derive the ext, abs, sca for dry sulfate mass by setting class=1 c-- where BCcontent=0 c-- So, I compute the ext since class=2 here IF (class.EQ.1) THEN ! For class=1, we do nothing (no BC) DO nb=1, NbandSW+nb_lambda ss_a_bc(class,irh,nb) = 0.0 ss_w_bc(class,irh,nb) = 1.0 ss_g_bc(class,irh,nb) = 0.0 ENDDO ELSE c--here we compute the properties for an equivalent BC that would be in c--external mixture. The properties do not make sense as such but have c--to be recombined with that of SUL (classe=1) to be those of the mixed c--particle DO nb=1, NbandSW+nb_lambda ! this ss_a is for dry BC only hereafter ss_a_bc(class,irh,nb) = ( ss_a(class,irh,nb)*masse - . ss_a(1,irh,nb)*massesul ) / massebc ! this ss_w is for dry BC only hereafter ss_w_bc(class,irh,nb) = (ss_w(class,irh,nb)* . ss_a(class,irh,nb)*masse - . ss_w(1,irh,nb)*ss_a(1,irh,nb)*massesul ) / . (ss_a_bc(class,irh,nb)*massebc) ! this ss_g is for dry BC only hereafter ss_g_bc(class,irh,nb) = ( ss_g(class,irh,nb)* . ss_w(class,irh,nb)*ss_a(class,irh,nb)*masse - . ss_g(1,irh,nb)*ss_w(1,irh,nb)*ss_a(1,irh,nb)*massesul) / . (ss_w_bc(class,irh,nb)*ss_a_bc(class,irh,nb)*massebc) ENDDO ENDIF c-- End (Rong Wang) ENDDO !--irh c ENDDO !--Nclass c c--saving MEC, g and SSA for SUL for the model two bands OPEN (unit=14,file='SEXT_sulfate_internal_mixture_6bands.txt') WRITE(14,*) ' !-- Sulfate Accumulation (BC content=0)' DO k=1,NbandSW WRITE(14,950) (ss_a(1,irh,k),irh=1, Nrh) ENDDO CLOSE(14) OPEN (unit=14,file='SSA_sulfate_internal_mixture_6bands.txt') WRITE(14,*) ' !-- Sulfate Accumulation (BC content=0)' DO k=1,NbandSW WRITE(14,950) (ss_w(1,irh,k),irh=1, Nrh) ENDDO CLOSE(14) OPEN (unit=14,file='G_sulfate_internal_mixture_6bands.txt') WRITE(14,*) ' !-- Sulfate Accumulation (BC content=0)' DO k=1,NbandSW WRITE(14,950) (ss_g(1,irh,k),irh=1, Nrh) ENDDO CLOSE(14) OPEN . (unit=14,file='SEXT_sulfate+2%bc_internal_mixture_6bands.txt') WRITE(14,*) ' !-- Sulfate Accumulation (BC content=2%)' DO k=1,NbandSW WRITE(14,950) (ss_a(4,irh,k),irh=1, Nrh) ENDDO CLOSE(14) OPEN . (unit=14,file='SSA_sulfate+2%bc_internal_mixture_6bands.txt') WRITE(14,*) ' !-- Sulfate Accumulation (BC content=2%)' DO k=1,NbandSW WRITE(14,950) (ss_w(4,irh,k),irh=1, Nrh) ENDDO CLOSE(14) OPEN . (unit=14,file='G_sulfate+2%bc_internal_mixture_6bands.txt') WRITE(14,*) ' !-- Sulfate Accumulation (BC content=2%)' DO k=1,NbandSW WRITE(14,950) (ss_g(4,irh,k),irh=1, Nrh) ENDDO CLOSE(14) c--saving MEC, g and SSA for equivalent BC the model two bands OPEN (unit=14,file='DATA_BC_internal_mixture_6bands.txt') WRITE(14,*) ' DATA alpha_MG_6bands/ &' DO class=2, Nclass WRITE(14,900) bc_content(class) DO k=1,NbandSW WRITE(14,951) (ss_a_bc(class,irh,k),irh=1, Nrh) ENDDO ENDDO WRITE(14,*) ' ' WRITE(14,*) ' DATA piz_MG_6bands/ &' DO class=2, Nclass WRITE(14,900) bc_content(class) DO k=1,NbandSW WRITE(14,951) (ss_w_bc(class,irh,k),irh=1,Nrh) ENDDO ENDDO WRITE(14,*) ' ' WRITE(14,*) ' DATA cg_MG_6bands/ &' DO class=2, Nclass WRITE(14,900) bc_content(class) DO k=1,NbandSW WRITE(14,951) (ss_g_bc(class,irh,k),irh=1,Nrh) ENDDO ENDDO CLOSE(14) c c--saving MEC and MAC for SUL for our reference wavelengths OPEN (unit=14, file='SEXT_sulfate_internal_mixture_5wave.txt') WRITE(14,*) . ' !-- Extinction Sulfate Accumulation (BC content=0)' DO k=NbandSW+1,NbandSW+nb_lambda WRITE(14,950) (ss_a(1,irh,k), irh=1,Nrh) ENDDO CLOSE(14) OPEN (unit=14, file='SABS_sulfate_internal_mixture_5wave.txt') WRITE(14,*) . ' !-- Absorption Sulfate Accumulation (BC content=0)' DO k=NbandSW+1,NbandSW+nb_lambda WRITE(14,950) ((1.0-ss_w(1,irh,k))*ss_a(1,irh,k), irh=1,Nrh) ENDDO CLOSE(14) OPEN . (unit=14, file='SEXT_sulfate+2%bc_internal_mixture_5wave.txt') WRITE(14,*) . ' !-- Extinction Sulfate Accumulation (BC content=2%)' DO k=NbandSW+1,NbandSW+nb_lambda WRITE(14,950) (ss_a(4,irh,k), irh=1,Nrh) ENDDO CLOSE(14) OPEN . (unit=14, file='SABS_sulfate+2%bc_internal_mixture_5wave.txt') WRITE(14,*) . ' !-- Absorption Sulfate Accumulation (BC content=2%)' DO k=NbandSW+1,NbandSW+nb_lambda WRITE(14,950) ((1.0-ss_w(4,irh,k))*ss_a(4,irh,k), irh=1,Nrh) ENDDO CLOSE(14) c OPEN (unit=14, file='SSA_sulfate_internal_mixture_5wave.txt') c WRITE(14,*) ' !-- Sulfate Accumulation (BC content=0)' c DO k=NbandSW+1,NbandSW+nb_lambda c WRITE(14,951) (ss_w(1,irh,k), irh=1,Nrh) c ENDDO c CLOSE(14) c c OPEN (unit=14, file='CG_sulfate_internal_mixture_5wave.txt') c WRITE(14,*) ' !-- Sulfate Accumulation (BC content=0)' c DO k=NbandSW+1,NbandSW+nb_lambda c WRITE(14,951) (ss_g(1,irh,k), irh=1,Nrh) c ENDDO c CLOSE(14) c c--saving MEC and MAC for equivalent BC for our reference wavelengths OPEN (unit=14, file='DATA_BC_internal_mixture_5wave.txt') WRITE(14,*) ' DATA alpha_MG_5wv/ &' DO class=2, Nclass WRITE(14,900) bc_content(class) DO k=NbandSW+1,NbandSW+nb_lambda WRITE(14,951) (ss_a_bc(class,irh,k),irh=1,Nrh) ENDDO ENDDO WRITE(14,*) ' ' WRITE(14,*) ' DATA abs_MG_5wv/ &' DO class=2, Nclass WRITE(14,900) bc_content(class) DO k=NbandSW+1,NbandSW+nb_lambda WRITE(14,951) . ((1.0-ss_w_bc(class,irh,k))*ss_a_bc(class,irh,k),irh=1,Nrh) ENDDO ENDDO CLOSE(14) c OPEN (unit=14, file='SSA_BC_internal_mixture_5wave.txt') c WRITE(14,*) ' DATA piz_MG_5wv/ &' c DO class=2, Nclass c WRITE(14,900) bc_content(class) c DO k=NbandSW+1,NbandSW+nb_lambda c WRITE(14,951) (ss_w_bc(class,irh,k),irh=1,Nrh) c ENDDO c ENDDO c CLOSE(14) c c OPEN (unit=14, file='G_BC_internal_mixture_5wave.txt') c WRITE(14,*) ' DATA cg_MG_5wv/ &' c DO class=2, Nclass c WRITE(14,900) bc_content(class) c DO k=NbandSW+1,NbandSW+nb_lambda c WRITE(14,951) (ss_g_bc(class,irh,k),irh=1,Nrh) c ENDDO c ENDDO c CLOSE(14) c 900 FORMAT(1X,'!--BC content=',F5.3) 950 FORMAT(1X,12(F6.3,','),' &') 951 FORMAT(1X,12(F7.3,','),' &') c END