SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ch_emission_to_atmn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE ch_emission_to_atm_n (CHN, SV, &
7  psfsv,prhoa)
8 ! ######################################################################
9 !!
10 !!*** *CH_EMISSION_TO_ATM_n* -
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! AUTHOR
20 !! ------
21 !! S. Queguiner
22 !!
23 !! MODIFICATIONS
24 !! -------------
25 !! Original 10/2011
26 !!
27 !! EXTERNAL
28 !! --------
29 !!
30 !!
31 !! IMPLICIT ARGUMENTS
32 !! ------------------
33 !!
34 !
36 USE modd_sv_n, ONLY : sv_t
37 !
40 !
41 USE modi_ch_aer_emission
42 USE modi_abor1_sfx
43 !------------------------------------------------------------------------------
44 !
45 !* 0. DECLARATIONS
46 ! -----------------
47 !
48 USE yomhook ,ONLY : lhook, dr_hook
49 USE parkind1 ,ONLY : jprb
50 !
51 !
52 IMPLICIT NONE
53 !
54 !* 0.1 declaration of arguments
55 !
56 !
57 TYPE(ch_emis_snap_t), INTENT(INOUT) :: chn
58 TYPE(sv_t), INTENT(INOUT) :: sv
59 !
60 REAL, DIMENSION(:,:),INTENT(INOUT):: psfsv ! flux of atmospheric scalar var. (Mol/m2/s)
61 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! Air density (kg/m3)
62 !
63 !* 0.2 declaration of local variables
64 !
65  CHARACTER(LEN=6), DIMENSION(:), POINTER :: cnames
66 TYPE(pronosvar_t),POINTER :: curpronos !Current pronostic variable
67 !
68 INTEGER :: jspec ! Loop counter on aggregated emitted chemical species
69 INTEGER :: jsv ! Loop counter on atmospheric species
70 INTEGER :: isv ! Number of atmospheric species
71 !
72 REAL,DIMENSION(SIZE(PSFSV,1),SIZE(PSFSV,2)) :: zemis ! interpolated in time emission flux
73 REAL,DIMENSION(SIZE(PSFSV,1) ) :: zfco ! CO emission flux
74 
75 !
76 REAL(KIND=JPRB) :: zhook_handle
77 !
78 !------------------------------------------------------------------------------
79 !
80 IF (lhook) CALL dr_hook('CH_EMISSION_TO_ATM_n',0,zhook_handle)
81 !
82 ! 1. Agregation : emissions computation
83 ! ----------------------------------
84 !
85 isv = SIZE(sv%CSV)
86 !
87 zemis(:,:) = 0.
88 !
89 ! Point on head of Pronostic variable list
90 ! to cover the entire list.
91  cnames=>sv%CSV
92  curpronos=>chn%TSPRONOSLIST
93 !
94 DO WHILE(ASSOCIATED(curpronos))
95  IF (curpronos%NAMINDEX > isv) CALL abor1_sfx('CH_EMISSION_FLUXN: FATAL ERROR')
96  !
97  zemis(:,curpronos%NAMINDEX) = 0.
98  !
99  ! Loop on the number of agreg. coeff.
100  DO jspec=1,curpronos%NBCOEFF
101  ! Compute agregated flux
102  zemis(:,curpronos%NAMINDEX) = zemis(:,curpronos%NAMINDEX)+ &
103  curpronos%XCOEFF(jspec)*chn%XEMIS_FIELDS(:,curpronos%NEFINDEX(jspec))
104  END DO
105  !
106  curpronos=>curpronos%NEXT
107  !
108 END DO
109 !
110 !------------------------------------------------------------------------------
111 !
112 ! 2. Primary Aerosol emissions
113 ! -------------------------
114 !
115 IF (lch_aero_flux) THEN
116  zfco(:) = 0.
117  DO jsv=1,isv
118  IF (sv%CSV(jsv)=='CO ') zfco(:) = zemis(:,jsv)
119  END DO
120  !
121  CALL ch_aer_emission(zemis,prhoa,sv%CSV,1,zfco)
122 END IF
123 !
124 !------------------------------------------------------------------------------
125 !
126 ! 3. Adds emissions from inventories to chemical species fluxes
127 ! ----------------------------------------------------------
128 !
129 psfsv(:,:) = psfsv(:,:) + zemis(:,:)
130 !
131 !------------------------------------------------------------------------------
132 !
133 IF (lhook) CALL dr_hook('CH_EMISSION_TO_ATM_n',1,zhook_handle)
134 !
135 !
136 END SUBROUTINE ch_emission_to_atm_n
subroutine ch_emission_to_atm_n(CHN, SV, PSFSV, PRHOA)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine ch_aer_emission(PFLUX, PRHODREF, HSV, KSV_CHSBEG, PFCO)