SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE CH_INIT_SNAP_n(HPROGRAM,KLU,HINIT,KCH,PRHOA) 00003 ! ####################################### 00004 ! 00005 !!**** *CH_INIT_EMIISION_TEMP_n* - routine to initialize chemical emissions data structure 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! Allocates and initialize emission surface fields 00010 ! by reading their value in initial file. 00011 ! 00012 !!** METHOD 00013 !! ------ 00014 !! 00015 !! 00016 !! AUTHOR 00017 !! ------ 00018 !! S.QUEGUINER 00019 !! 00020 !! MODIFICATIONS 00021 !! ------------- 00022 !! Original 11/2011 00023 !!----------------------------------------------------------------------------- 00024 ! 00025 !* 0. DECLARATIONS 00026 ! 00027 USE MODD_CSTS, ONLY : XAVOGADRO, XMD 00028 USE MODD_CH_SNAP_n 00029 USE MODI_GET_LUOUT 00030 USE MODI_READ_SURF 00031 USE MODI_ABOR1_SFX 00032 USE MODI_CH_CONVERSION_FACTOR 00033 USE MODI_BUILD_PRONOSLIST_n 00034 ! 00035 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00036 USE PARKIND1 ,ONLY : JPRB 00037 ! 00038 ! 00039 IMPLICIT NONE 00040 ! 00041 !* 0.1 declarations of arguments 00042 ! 00043 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Program name 00044 INTEGER, INTENT(IN) :: KLU ! number of points 00045 CHARACTER(LEN=3), INTENT(IN) :: HINIT ! Flag to know if one initializes: 00046 ! ! 'ALL' : all variables for a run 00047 ! ! 'PRE' : only variables to build 00048 ! ! an initial file 00049 INTEGER, INTENT(IN) :: KCH ! logical unit of input chemistry file 00050 REAL, DIMENSION(:),INTENT(IN) :: PRHOA ! air density 00051 ! 00052 !* 0.2 declarations of local variables 00053 ! 00054 INTEGER :: IRESP ! File 00055 INTEGER :: ILUOUT ! output listing logical unit 00056 CHARACTER (LEN=16) :: YRECFM ! management 00057 CHARACTER (LEN=100) :: YCOMMENT ! variables 00058 INTEGER :: JSPEC ! Loop index for chemical species 00059 INTEGER :: JSNAP ! Loop index for SNAP categories 00060 ! 00061 CHARACTER(LEN=40) :: YSPEC_NAME ! species name 00062 ! 00063 INTEGER :: IVERSION ! version of surfex file being read 00064 INTEGER :: IBUG ! version of SURFEX bugfix 00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00066 !------------------------------------------------------------------------------- 00067 IF (LHOOK) CALL DR_HOOK('CH_INIT_SNAP_N',0,ZHOOK_HANDLE) 00068 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00069 ! 00070 !* ascendant compatibility 00071 YRECFM='VERSION' 00072 CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP) 00073 YRECFM='BUG' 00074 CALL READ_SURF(HPROGRAM,YRECFM,IBUG,IRESP) 00075 ! 00076 !* 1. Chemical Emission snap configuration 00077 ! ------------------------------------ 00078 ! 00079 ! Read the number of emission species and snaps 00080 IF (IVERSION>7 .OR. (IVERSION==7 .AND. IBUG>=3) ) THEN 00081 CALL READ_SURF(HPROGRAM,'EMISPEC_NBR',NEMIS_NBR,IRESP) 00082 CALL READ_SURF(HPROGRAM,'SNAP_NBR',NEMIS_SNAP,IRESP) 00083 CALL READ_SURF(HPROGRAM,'SNAP_TIME',CSNAP_TIME_REF,IRESP) 00084 ELSE 00085 CALL ABOR1_SFX('CH_INIT_SNAPN: NO SNAP EMISSIONS IN SURFEX FILE: FILE TOO OLD') 00086 END IF 00087 ! 00088 ! Number of instants for each temporal profile. 00089 ! For the time being, they are constant (even for the diurnal cycle) 00090 ! 00091 NSNAP_M=12 ! 12 months 00092 NSNAP_D=7 ! 7 day a week 00093 NSNAP_H=24 ! 24 hours a day (=> temporal resolution = 1 hour) 00094 ! 00095 ! 00096 !* 2. Chemical Emission fields 00097 ! ------------------------ 00098 ! 00099 ALLOCATE(CEMIS_NAME ( NEMIS_NBR)) 00100 ALLOCATE(CEMIS_COMMENT ( NEMIS_NBR)) 00101 ALLOCATE(XEMIS_FIELDS_SNAP(KLU,NEMIS_SNAP,NEMIS_NBR)) 00102 ALLOCATE(XEMIS_FIELDS (KLU, NEMIS_NBR)) 00103 LEMIS_FIELDS = .FALSE. 00104 ! 00105 ALLOCATE(XSNAP_MONTHLY(NSNAP_M,NEMIS_SNAP,NEMIS_NBR)) 00106 ALLOCATE(XSNAP_DAILY (NSNAP_D,NEMIS_SNAP,NEMIS_NBR)) 00107 ALLOCATE(XSNAP_HOURLY (NSNAP_H,NEMIS_SNAP,NEMIS_NBR)) 00108 ! 00109 IF (CSNAP_TIME_REF=='LEGAL') THEN 00110 ALLOCATE(XDELTA_LEGAL_TIME(KLU)) 00111 YRECFM='LEGALTIME' 00112 CALL READ_SURF(HPROGRAM,YRECFM,XDELTA_LEGAL_TIME(:),IRESP,YCOMMENT) 00113 END IF 00114 ! 00115 DO JSPEC = 1,NEMIS_NBR ! Loop on the number of species 00116 ! 00117 ! Read the species name 00118 WRITE(YRECFM,'("EMISNAME",I3.3)') JSPEC 00119 CALL READ_SURF(HPROGRAM,YRECFM,YSPEC_NAME,IRESP,YCOMMENT) 00120 CEMIS_COMMENT(JSPEC)=YCOMMENT 00121 IF (IRESP/=0) THEN 00122 CALL ABOR1_SFX('CH_INIT_SNAPN: PROBLEM WHEN READING NAME OF EMITTED CHEMICAL SPECIES') 00123 END IF 00124 WRITE(ILUOUT,*) ' Emission ',JSPEC,' : ',TRIM(YSPEC_NAME) 00125 CEMIS_NAME(JSPEC) = YSPEC_NAME 00126 ! 00127 ! Read the potential emission of species for each snap 00128 DO JSNAP=1,NEMIS_SNAP 00129 WRITE(YRECFM,'("SNAP",I2.2,"_",A3)') JSNAP,CEMIS_NAME(JSPEC) 00130 CALL READ_SURF(HPROGRAM,YRECFM,XEMIS_FIELDS_SNAP(:,JSNAP,JSPEC),IRESP,YCOMMENT) 00131 END DO 00132 ! 00133 ! Read the temporal profiles of all snaps 00134 YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_M" 00135 CALL READ_SURF(HPROGRAM,YRECFM,XSNAP_MONTHLY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') 00136 YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_D" 00137 CALL READ_SURF(HPROGRAM,YRECFM,XSNAP_DAILY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') 00138 YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_H" 00139 CALL READ_SURF(HPROGRAM,YRECFM,XSNAP_HOURLY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') 00140 END DO 00141 ! 00142 !* 3. Conversion factor 00143 ! ----------------- 00144 ! 00145 IF (HINIT=='ALL') THEN 00146 CALL CH_OPEN_INPUTB("EMISUNIT", KCH, ILUOUT) 00147 ! 00148 ! read unit identifier 00149 READ(KCH,'(A3)') CCONVERSION 00150 ! 00151 ALLOCATE (XCONVERSION(KLU)) 00152 ! determine the conversion factor 00153 CALL CH_CONVERSION_FACTOR(CCONVERSION,PRHOA) 00154 ! 00155 !* 4. List of emissions to be aggregated into atm. chemical species 00156 ! ------------------------------------------------------------- 00157 ! 00158 CALL BUILD_PRONOSLIST_n(NEMIS_NBR,CEMIS_NAME,TSPRONOSLIST,KCH,ILUOUT,6) 00159 ! 00160 !------------------------------------------------------------------------------- 00161 END IF 00162 ! 00163 IF (LHOOK) CALL DR_HOOK('CH_INIT_SNAP_N',1,ZHOOK_HANDLE) 00164 !------------------------------------------------------------------------------- 00165 ! 00166 END SUBROUTINE CH_INIT_SNAP_n