SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/ch_init_snapn.F90
Go to the documentation of this file.
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