[4601] | 1 | ! |
---|
| 2 | ! $Id: stratemit.F90 2022-07-04 mmarchand $ |
---|
| 3 | ! |
---|
| 4 | SUBROUTINE STRATDISTRIB(altLMDz,altemiss,sigma_alt,f_lay_emiss) |
---|
| 5 | ! |
---|
| 6 | USE dimphy, ONLY : klon,klev |
---|
| 7 | USE strataer_local_var_mod |
---|
[5264] | 8 | USE yomcst_mod_h, only : RPI |
---|
[4601] | 9 | |
---|
| 10 | IMPLICIT NONE |
---|
| 11 | |
---|
| 12 | ! Input argument |
---|
| 13 | !--------------- |
---|
| 14 | REAL,DIMENSION(klev+1) :: altLMDz ! altitude of layer interfaces in m |
---|
| 15 | REAL :: sigma_alt |
---|
| 16 | REAL :: altemiss |
---|
| 17 | |
---|
| 18 | ! Local variables |
---|
| 19 | !---------------- |
---|
| 20 | REAL :: f_lay_sum ! sum of layer emission fractions |
---|
| 21 | REAL :: alt |
---|
| 22 | INTEGER :: k,i_int |
---|
| 23 | INTEGER,PARAMETER :: n_int_alt=10 ! subintervals nb for integration over Gaussian emission |
---|
| 24 | |
---|
| 25 | ! Output argument |
---|
| 26 | !---------------- |
---|
| 27 | REAL,DIMENSION(klev) :: f_lay_emiss ! emiss fraction for every emiss for every vertical layer |
---|
| 28 | |
---|
| 29 | |
---|
| 30 | ! Inject distrib |
---|
| 31 | !---------------- |
---|
| 32 | SELECT CASE(flag_emit_distrib) |
---|
| 33 | |
---|
| 34 | CASE(0) ! Gaussian distribution |
---|
| 35 | ! Compute distribution of emission to vertical model layers |
---|
| 36 | ! (based on Gaussian peak in altitude) |
---|
| 37 | f_lay_sum=0.0 |
---|
| 38 | DO k=1, klev |
---|
| 39 | f_lay_emiss(k)=0.0 |
---|
| 40 | DO i_int=1, n_int_alt |
---|
| 41 | alt=altLMDz(k)+float(i_int)*(altLMDz(k+1)-altLMDz(k))/float(n_int_alt) |
---|
| 42 | f_lay_emiss(k)=f_lay_emiss(k)+1./(sqrt(2.*RPI)*sigma_alt)* & |
---|
| 43 | & exp(-0.5*((alt-altemiss)/sigma_alt)**2.)* & |
---|
| 44 | & (altLMDz(k+1)-altLMDz(k))/float(n_int_alt) |
---|
| 45 | ENDDO |
---|
| 46 | f_lay_sum=f_lay_sum+f_lay_emiss(k) |
---|
| 47 | ENDDO |
---|
| 48 | |
---|
| 49 | CASE(1) ! Uniform distribution |
---|
| 50 | ! In this case, parameter sigma_alt is considered |
---|
| 51 | ! to be half the |
---|
| 52 | ! height of the injection, centered around altemiss) |
---|
| 53 | f_lay_sum=0.0 |
---|
| 54 | DO k=1, klev |
---|
| 55 | f_lay_emiss(k)=max(min(altemiss+sigma_alt,altLMDz(k+1))- & |
---|
| 56 | & max(altemiss-sigma_alt, & |
---|
| 57 | & altLMDz(k)),0.)/(2.*sigma_alt) |
---|
| 58 | f_lay_sum=f_lay_sum+f_lay_emiss(k) |
---|
| 59 | ENDDO |
---|
| 60 | |
---|
| 61 | END SELECT ! End CASE over flag_emit_distrib) |
---|
| 62 | |
---|
| 63 | WRITE(*,*) "IN stratdistrib f_lay_emiss=",f_lay_emiss |
---|
| 64 | |
---|
| 65 | !correct for step integration error |
---|
| 66 | f_lay_emiss(:)=f_lay_emiss(:)/f_lay_sum |
---|
| 67 | |
---|
| 68 | END SUBROUTINE STRATDISTRIB |
---|