source: LMDZ6/branches/Amaury_dev/libf/phylmd/StratAer/stratdistrib.F90 @ 5159

Last change on this file since 5159 was 5101, checked in by abarral, 5 months ago

Handle DEBUG_IO in lmdz_cppkeys_wrapper.F90
Transform some files .F -> .[fF]90
[ne compile pas à cause de writefield_u non défini - en attente de réponse Laurent]

File size: 2.1 KB
Line 
1
2! $Id: stratemit.F90  2022-07-04 mmarchand $
3
4SUBROUTINE STRATDISTRIB(altLMDz,altemiss,sigma_alt,f_lay_emiss)
5
6  USE dimphy, ONLY: klon,klev
7  USE strataer_local_var_mod
8  USE lmdz_yomcst, ONLY: RPI
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
68END SUBROUTINE STRATDISTRIB
Note: See TracBrowser for help on using the repository browser.