SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/pgd_chemistry_snap.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE PGD_CHEMISTRY_SNAP(HPROGRAM,OCH_EMIS)
00003 !     ##############################################################
00004 !
00005 !!**** *PGD_CHEMISTRY_SNAP* monitor for averaging and interpolations of physiographic fields
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!    METHOD
00011 !!    ------
00012 !!   
00013 !
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!    AUTHOR
00024 !!    ------
00025 !!
00026 !!    S; Queguiner        Meteo-France
00027 !!
00028 !!    MODIFICATION
00029 !!    ------------
00030 !!
00031 !!    Original    09/2011
00032 !!
00033 !----------------------------------------------------------------------------
00034 !
00035 !*    0.     DECLARATION
00036 !            -----------
00037 !
00038 USE MODD_PGDWORK,            ONLY : CATYPE
00039 USE MODD_SURF_PAR,           ONLY : XUNDEF
00040 USE MODD_PGD_GRID,           ONLY : NL
00041 USE MODD_CH_SNAP_n,          ONLY : JPEMISMAX,JPSNAPMAX,                     &
00042                                     NEMIS_SNAP_n=>NEMIS_SNAP,                &
00043                                     NEMIS_NBR_n=>NEMIS_NBR,                  & 
00044                                     CEMIS_NAME_n=>CEMIS_NAME,                &
00045                                     CEMIS_COMMENT_n=>CEMIS_COMMENT,          &
00046                                     XSNAP_MONTHLY,XSNAP_DAILY, XSNAP_HOURLY, &
00047                                     NSNAP_M, NSNAP_D, NSNAP_H,               &
00048                                     XEMIS_FIELDS_SNAP, LEMIS_FIELDS,         &
00049                                     CSNAP_TIME_REF, XDELTA_LEGAL_TIME
00050 USE MODI_GET_LUOUT
00051 USE MODI_OPEN_NAMELIST
00052 USE MODI_CLOSE_NAMELIST
00053 !
00054 USE MODE_POS_SURF
00055 USE MODI_PGD_FIELD
00056 USE MODI_PGD_SNAP_TEMP_PROFILE
00057 USE MODI_GET_LUOUT
00058 USE MODI_ABOR1_SFX
00059 !
00060 !
00061 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00062 USE PARKIND1  ,ONLY : JPRB
00063 !
00064 !
00065 IMPLICIT NONE
00066 !
00067 !*    0.1    Declaration of arguments
00068 !            ------------------------
00069 !
00070  CHARACTER(LEN=6),    INTENT(IN)    :: HPROGRAM     ! Type of program
00071 LOGICAL,             INTENT(OUT)   :: OCH_EMIS     ! emission flag
00072 !
00073 !
00074 !*    0.2    Declaration of local variables
00075 !            ------------------------------
00076 !
00077 INTEGER                           :: ILUOUT    ! output listing logical unit
00078 INTEGER                           :: ILUNAM    ! namelist file logical unit
00079 LOGICAL                           :: GFOUND    ! flag when namelist is present
00080 INTEGER                           :: JSPEC     ! loop counter on emission species
00081 INTEGER                           :: JSNAP     ! loop counter on SNAP categories
00082  CHARACTER(LEN=5)                  :: YSNAP_TIME_REF ! to check if all snaps use
00083 !                                                   ! the same time  reference
00084 !
00085 !*    0.3    Declaration of namelists
00086 !            ------------------------
00087 !
00088 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00089  CHARACTER(LEN=6),  DIMENSION(JPEMISMAX):: CEMIS_NAME
00090  CHARACTER(LEN=40), DIMENSION(JPEMISMAX):: CEMIS_COMMENT
00091  CHARACTER(LEN=28), DIMENSION(JPEMISMAX):: CSNAP_MONTHLY_FILE
00092  CHARACTER(LEN=28), DIMENSION(JPEMISMAX):: CSNAP_DAILY_FILE
00093  CHARACTER(LEN=28), DIMENSION(JPEMISMAX):: CSNAP_HOURLY_FILE
00094  CHARACTER(LEN=50), DIMENSION(JPEMISMAX,JPSNAPMAX):: CSNAP_POTENTIAL_FILE
00095  CHARACTER(LEN=6),  DIMENSION(JPEMISMAX)          :: CSNAP_POTENTIAL_FILETYPE
00096 REAL,              DIMENSION(JPEMISMAX,JPSNAPMAX):: XUNIF_SNAP
00097  CHARACTER(LEN=50)                                :: CDELTA_LEGAL_TIME_FILE
00098  CHARACTER(LEN=6)                                 :: CDELTA_LEGAL_TIME_FILETYPE
00099 REAL                                             :: XUNIF_DELTA_LEGAL_TIME
00100 INTEGER :: NEMIS_NBR
00101 INTEGER :: NEMIS_SNAP
00102 !
00103 !
00104 NAMELIST/NAM_CH_SNAP_EMIS_PGD/ NEMIS_NBR, NEMIS_SNAP, CEMIS_NAME,&
00105                                CEMIS_COMMENT,                    &
00106                                CSNAP_MONTHLY_FILE,               &
00107                                CSNAP_DAILY_FILE,                 &
00108                                CSNAP_HOURLY_FILE,                &
00109                                CSNAP_POTENTIAL_FILE,             &
00110                                CSNAP_POTENTIAL_FILETYPE,         &
00111                                XUNIF_SNAP,                       &
00112                                XUNIF_DELTA_LEGAL_TIME,           &
00113                                CDELTA_LEGAL_TIME_FILE,           &
00114                                CDELTA_LEGAL_TIME_FILETYPE
00115  !-------------------------------------------------------------------------------
00116 !
00117 !*    1.      Initializations of defaults
00118 !             ---------------------------
00119 !
00120 !
00121 IF (LHOOK) CALL DR_HOOK('PGD_CHEMISTRY_SNAP',0,ZHOOK_HANDLE)
00122 NEMIS_NBR  = 0
00123 CEMIS_NAME(:)              = '                           '
00124 CEMIS_COMMENT(:)           = ''
00125 !
00126 NEMIS_SNAP = 0
00127 NSNAP_M   = 12
00128 NSNAP_D   = 7
00129 NSNAP_H   = 24
00130 XUNIF_SNAP             = XUNDEF
00131 XUNIF_DELTA_LEGAL_TIME = XUNDEF
00132 CSNAP_MONTHLY_FILE(:)      = '                           '
00133 CSNAP_DAILY_FILE(:)        = '                           '
00134 CSNAP_HOURLY_FILE(:)       = '                           '
00135 CSNAP_POTENTIAL_FILETYPE(:)= '      '
00136 CSNAP_POTENTIAL_FILE(:,:)  = '                           '
00137 CDELTA_LEGAL_TIME_FILETYPE = '      '
00138 CDELTA_LEGAL_TIME_FILE     = '                           '
00139 !
00140  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00141 !
00142 !-------------------------------------------------------------------------------
00143 !
00144 !*    2.      Reading of namelist
00145 !             -------------------
00146 !
00147 !
00148  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00149 !
00150  CALL POSNAM(ILUNAM,'NAM_CH_SNAP_EMIS_PGD',GFOUND,ILUOUT)
00151 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CH_SNAP_EMIS_PGD)
00152 !
00153  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00154 !
00155 !-------------------------------------------------------------------------------
00156 !
00157 !*    3.      Allocation
00158 !             ----------
00159 !
00160 NEMIS_NBR_n  = NEMIS_NBR
00161 NEMIS_SNAP_n = NEMIS_SNAP
00162 !
00163 ALLOCATE(CEMIS_NAME_n(NEMIS_NBR))
00164 ALLOCATE(CEMIS_COMMENT_n(NEMIS_NBR))
00165 !
00166 ALLOCATE(XSNAP_MONTHLY (NSNAP_M,NEMIS_SNAP,NEMIS_NBR))
00167 ALLOCATE(XSNAP_DAILY   (NSNAP_D,NEMIS_SNAP,NEMIS_NBR))
00168 ALLOCATE(XSNAP_HOURLY  (NSNAP_H,NEMIS_SNAP,NEMIS_NBR))
00169 !
00170 CEMIS_NAME_n         (:) = CEMIS_NAME   (1:NEMIS_NBR)
00171 CEMIS_COMMENT_n      (:) = CEMIS_COMMENT(1:NEMIS_NBR)
00172 !
00173 ALLOCATE(XEMIS_FIELDS_SNAP(NL,NEMIS_SNAP,NEMIS_NBR))
00174 !
00175 LEMIS_FIELDS = .FALSE.
00176 !
00177 !-------------------------------------------------------------------------------
00178 OCH_EMIS = NEMIS_NBR > 0
00179 !-------------------------------------------------------------------------------
00180 !
00181 !*    4.      Computes Potential maps for each snap and reads temporal profiles
00182 !             -----------------------------------------------------------------
00183 !
00184 YSNAP_TIME_REF = '     '
00185 !
00186 DO JSPEC=1,NEMIS_NBR
00187 
00188   CALL PGD_SNAP_TEMP_PROFILE('ASCII  ',CSNAP_MONTHLY_FILE(JSPEC),XSNAP_MONTHLY(:,:,JSPEC),NEMIS_SNAP,NSNAP_M)
00189   CALL PGD_SNAP_TEMP_PROFILE('ASCII  ',CSNAP_DAILY_FILE(JSPEC),  XSNAP_DAILY(:,:,JSPEC),NEMIS_SNAP,NSNAP_D)
00190   CALL PGD_SNAP_TEMP_PROFILE('ASCII  ',CSNAP_HOURLY_FILE(JSPEC), XSNAP_HOURLY(:,:,JSPEC),NEMIS_SNAP,NSNAP_H,CSNAP_TIME_REF)
00191 
00192   IF (JSPEC==1) YSNAP_TIME_REF = CSNAP_TIME_REF
00193   IF (YSNAP_TIME_REF/=CSNAP_TIME_REF) THEN
00194     CALL ABOR1_SFX('ALL SNAP HOURLY PROFILES MUST HAVE THE SAME TIME REFERENCE')
00195   END IF
00196 
00197   DO JSNAP=1,NEMIS_SNAP
00198     CATYPE = 'ARI'
00199     CALL PGD_FIELD(HPROGRAM,'SNAP','ALL',CSNAP_POTENTIAL_FILE(JSPEC,JSNAP), &
00200                    CSNAP_POTENTIAL_FILETYPE(JSPEC),XUNIF_SNAP(JSPEC,JSNAP), &
00201                    XEMIS_FIELDS_SNAP(:,JSNAP,JSPEC)                         )
00202   ENDDO
00203 ENDDO
00204 !
00205 !-------------------------------------------------------------------------------
00206 !
00207 !*    5.      Computes legal time map if legal time option is used
00208 !             ----------------------------------------------------
00209 !
00210 IF (CSNAP_TIME_REF=='LEGAL') THEN
00211   ALLOCATE(XDELTA_LEGAL_TIME(NL))
00212   CALL PGD_FIELD(HPROGRAM,'LEGAL_TIME','ALL', CDELTA_LEGAL_TIME_FILE, &
00213                  CDELTA_LEGAL_TIME_FILETYPE,XUNIF_DELTA_LEGAL_TIME,   &
00214                  XDELTA_LEGAL_TIME(:)                                 )
00215   !* conversion from seconds to hours
00216   !  Beware: 
00217   !  one uses the fact here that no legal hour increment is less more than 24h. 
00218   !  Legal hour is either zero (in which case division has no effect) 
00219   !  or specified unit is second
00220   WHERE(ABS(XDELTA_LEGAL_TIME(:))>=24.) &
00221   XDELTA_LEGAL_TIME(:) = XDELTA_LEGAL_TIME(:) / 3600.
00222 END IF
00223 !
00224 !-------------------------------------------------------------------------------
00225 !
00226 IF (LHOOK) CALL DR_HOOK('PGD_CHEMISTRY_SNAP',1,ZHOOK_HANDLE)
00227 !
00228 END SUBROUTINE PGD_CHEMISTRY_SNAP