SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/ch_emission_to_atmn.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE CH_EMISSION_TO_ATM_n(PSFSV,PRHOA)
00003 !     ######################################################################
00004 !!
00005 !!***  *CH_EMISSION_TO_ATM_n* - 
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!      
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    AUTHOR
00015 !!    ------
00016 !!    S. Queguiner
00017 !!
00018 !!    MODIFICATIONS
00019 !!    -------------
00020 !!    Original 10/2011
00021 !!
00022 !!    EXTERNAL
00023 !!    --------
00024 !!
00025 !!
00026 !!    IMPLICIT ARGUMENTS
00027 !!    ------------------
00028 !!
00029 USE MODD_TYPE_EFUTIL
00030 USE MODD_CH_SNAP_n,   ONLY: XEMIS_FIELDS, TSPRONOSLIST
00031 USE MODD_SV_n,        ONLY: CSV
00032 USE MODD_CHS_AEROSOL
00033 !
00034 USE MODI_CH_AER_EMISSION
00035 USE MODI_ABOR1_SFX
00036 !------------------------------------------------------------------------------
00037 !
00038 !*       0.   DECLARATIONS
00039 !        -----------------
00040 !
00041 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00042 USE PARKIND1  ,ONLY : JPRB
00043 !
00044 !
00045 IMPLICIT NONE
00046 !
00047 !*       0.1  declaration of arguments
00048 !
00049 REAL,             DIMENSION(:,:),INTENT(INOUT):: PSFSV  ! flux of     atmospheric scalar var.   (Mol/m2/s)
00050 REAL,             DIMENSION(:),  INTENT(IN)   :: PRHOA  ! Air density (kg/m3)
00051 !
00052 !*       0.2  declaration of local variables
00053 !
00054  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CNAMES
00055 TYPE(PRONOSVAR_T),POINTER :: CURPRONOS !Current pronostic variable
00056 !
00057 INTEGER :: JSPEC ! Loop counter on aggregated emitted chemical species
00058 INTEGER :: JSV   ! Loop counter on atmospheric species
00059 INTEGER :: ISV   ! Number       of atmospheric species
00060 !
00061 REAL,DIMENSION(SIZE(PSFSV,1),SIZE(PSFSV,2)) :: ZEMIS ! interpolated in time emission flux
00062 REAL,DIMENSION(SIZE(PSFSV,1)              ) :: ZFCO  ! CO emission flux
00063 
00064 !
00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00066 !
00067 !------------------------------------------------------------------------------
00068 !
00069 IF (LHOOK) CALL DR_HOOK('CH_EMISSION_TO_ATM_n',0,ZHOOK_HANDLE)
00070 !
00071 !      1.     Agregation : emissions computation
00072 !             ----------------------------------
00073 !
00074 ISV = SIZE(CSV)
00075 !
00076 ZEMIS(:,:) = 0.
00077 !
00078 ! Point on head of Pronostic variable list
00079 ! to cover the entire list.
00080 CNAMES=>CSV
00081 CURPRONOS=>TSPRONOSLIST
00082 !
00083 DO WHILE(ASSOCIATED(CURPRONOS))
00084   IF (CURPRONOS%NAMINDEX > ISV) CALL ABOR1_SFX('CH_EMISSION_FLUXN: FATAL ERROR')
00085   !  
00086   ZEMIS(:,CURPRONOS%NAMINDEX) = 0.
00087   !
00088   ! Loop on the number of agreg. coeff.
00089   DO JSPEC=1,CURPRONOS%NBCOEFF
00090     !   Compute agregated flux    
00091     ZEMIS(:,CURPRONOS%NAMINDEX) = ZEMIS(:,CURPRONOS%NAMINDEX)+ &
00092             CURPRONOS%XCOEFF(JSPEC)*XEMIS_FIELDS(:,CURPRONOS%NEFINDEX(JSPEC))
00093   END DO
00094   !
00095   CURPRONOS=>CURPRONOS%NEXT
00096   !
00097 END DO
00098 !
00099 !------------------------------------------------------------------------------
00100 !
00101 !      2.     Primary Aerosol emissions
00102 !             -------------------------
00103 !
00104 IF (LCH_AERO_FLUX) THEN
00105   ZFCO(:) = 0.
00106   DO JSV=1,ISV
00107     IF (CSV(JSV)=='CO    ') ZFCO(:) = ZEMIS(:,JSV)
00108   END DO
00109   !
00110   CALL CH_AER_EMISSION(ZEMIS,PRHOA,CSV,1,ZFCO)
00111 END IF
00112 !
00113 !------------------------------------------------------------------------------
00114 !
00115 !      3.     Adds emissions from inventories to chemical species fluxes
00116 !             ----------------------------------------------------------
00117 !
00118 PSFSV(:,:) = PSFSV(:,:) + ZEMIS(:,:)
00119 !
00120 !------------------------------------------------------------------------------
00121 !
00122 IF (LHOOK) CALL DR_HOOK('CH_EMISSION_TO_ATM_n',1,ZHOOK_HANDLE)
00123 !
00124 !
00125 END SUBROUTINE CH_EMISSION_TO_ATM_n