SURFEX v7.3
General documentation of Surfex
|
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