SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_ch_snapn.F90
Go to the documentation of this file.
00001 !     ###########################
00002       MODULE MODD_CH_SNAP_n
00003 !     ###########################
00004 !
00005 !!****  *MODD_CH_SNAP_n* - declaration of chemical emission data arrays
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !       The purpose of this declarative module is to specify  the 
00010 !     chemical emission data arrays.
00011 !
00012 !!
00013 !!**  IMPLICIT ARGUMENTS
00014 !!    ------------------
00015 !!      None 
00016 !!
00017 !!    REFERENCE
00018 !!    ---------
00019 !!      
00020 !!
00021 !!    AUTHOR
00022 !!    ------
00023 !!      D. Gazen   *L.A.*
00024 !!
00025 !!    MODIFICATIONS
00026 !!    -------------
00027 !!      Original    08/03/2001                      
00028 !!      01/12/03    (D.Gazen) change emissions handling for surf. externalization
00029 !-------------------------------------------------------------------------------
00030 !
00031 !*       0.   DECLARATIONS
00032 !             ------------
00033 !
00034 USE MODD_TYPE_EFUTIL
00035 !
00036 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00037 USE PARKIND1  ,ONLY : JPRB
00038 !
00039 IMPLICIT NONE
00040 
00041 INTEGER,PARAMETER :: JPEMISMAX = 1000
00042 INTEGER,PARAMETER :: JPSNAPMAX = 50
00043 TYPE CH_EMIS_SNAP_t
00044 !
00045   INTEGER            :: NEMIS_NBR
00046 !                          ! number of chemical pgd fields chosen by user
00047   CHARACTER(LEN=3)                         :: CCONVERSION
00048 !                          ! Unit conversion code
00049   CHARACTER(LEN=5)                         :: CSNAP_TIME_REF
00050 !                          ! Reference time for Snap temporal profiles
00051 !                          !  'UTC  ' : UTC   time
00052 !                          !  'SOLAR' : SOLAR time
00053 !                          !  'LEGAL' : LEGAL time
00054 !                          !
00055 
00056   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CEMIS_NAME
00057 !                          ! name of the chemical fields (emitted species)
00058   CHARACTER(LEN=40), DIMENSION(:), POINTER :: CEMIS_COMMENT
00059 !                          ! comment on the chemical fields (emitted species)
00060 !
00061   REAL,     DIMENSION(:,:,:), POINTER:: XEMIS_FIELDS_SNAP ! Emission factor for
00062 !                                                         ! each chemical specie and
00063 !                                                         ! each snap
00064   REAL,     DIMENSION(:,:),   POINTER:: XEMIS_FIELDS      ! Emission for each specie
00065 !                                                         ! (at a given time taking into 
00066 !                                                         ! account all snaps)
00067   REAL,     DIMENSION(:),     POINTER:: XDELTA_LEGAL_TIME ! Difference (in hours)) between
00068 !                                                         ! Legal time and UTC time
00069   INTEGER            :: NEMIS_SNAP                        ! number of snaps
00070   INTEGER            :: NSNAP_M                           ! number of months
00071   INTEGER            :: NSNAP_D                           ! number of days
00072   INTEGER            :: NSNAP_H                           ! number of hours
00073   REAL,              DIMENSION(:,:,:), POINTER:: XSNAP_MONTHLY
00074   REAL,              DIMENSION(:,:,:), POINTER:: XSNAP_DAILY
00075   REAL,              DIMENSION(:,:,:), POINTER:: XSNAP_HOURLY
00076   REAL,              DIMENSION(:),     POINTER:: XCONVERSION ! conversion factor
00077 !
00078   TYPE(PRONOSVAR_T),               POINTER     :: TSPRONOSLIST ! Head pointer on pronostic
00079 !                                                              variables list
00080 LOGICAL  :: LEMIS_FIELDS ! Flag to know if emissions have been computed
00081 !-------------------------------------------------------------------------------
00082 !
00083 END TYPE CH_EMIS_SNAP_t
00084 
00085 TYPE(CH_EMIS_SNAP_t), ALLOCATABLE, TARGET, SAVE :: CH_EMIS_SNAP_MODEL(:)
00086 
00087 INTEGER, POINTER :: NEMIS_NBR=>NULL()
00088 !$OMP THREADPRIVATE(NEMIS_NBR)
00089  CHARACTER(LEN=3) ,               POINTER :: CCONVERSION=>NULL()
00090 !$OMP THREADPRIVATE(CCONVERSION)
00091  CHARACTER(LEN=5) ,               POINTER :: CSNAP_TIME_REF=>NULL()
00092 !$OMP THREADPRIVATE(CSNAP_TIME_REF)
00093  CHARACTER(LEN=40), DIMENSION(:), POINTER :: CEMIS_COMMENT=>NULL()
00094 !$OMP THREADPRIVATE(CEMIS_COMMENT)
00095  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CEMIS_NAME=>NULL()
00096 !$OMP THREADPRIVATE(CEMIS_NAME)
00097 REAL,              DIMENSION(:,:), POINTER:: XEMIS_FIELDS=>NULL()
00098 !$OMP THREADPRIVATE(XEMIS_FIELDS)
00099 REAL,              DIMENSION(:),   POINTER:: XDELTA_LEGAL_TIME=>NULL()
00100 !$OMP THREADPRIVATE(XDELTA_LEGAL_TIME)
00101 REAL,              DIMENSION(:,:,:), POINTER:: XEMIS_FIELDS_SNAP=>NULL()
00102 !$OMP THREADPRIVATE(XEMIS_FIELDS_SNAP)
00103 REAL,              DIMENSION(:,:,:), POINTER:: XSNAP_DAILY=>NULL()
00104 !$OMP THREADPRIVATE(XSNAP_DAILY)
00105 REAL,              DIMENSION(:,:,:), POINTER:: XSNAP_HOURLY=>NULL()
00106 !$OMP THREADPRIVATE(XSNAP_HOURLY)
00107 REAL,              DIMENSION(:,:,:), POINTER:: XSNAP_MONTHLY=>NULL()
00108 !$OMP THREADPRIVATE(XSNAP_MONTHLY)
00109 REAL,              DIMENSION(:), POINTER:: XCONVERSION=>NULL()
00110 !$OMP THREADPRIVATE(XCONVERSION)
00111 INTEGER, POINTER :: NEMIS_SNAP=>NULL()
00112 !$OMP THREADPRIVATE(NEMIS_SNAP)
00113 INTEGER, POINTER :: NSNAP_M=>NULL()
00114 !$OMP THREADPRIVATE(NSNAP_M)
00115 INTEGER, POINTER :: NSNAP_D=>NULL()
00116 !$OMP THREADPRIVATE(NSNAP_D)
00117 INTEGER, POINTER :: NSNAP_H=>NULL()
00118 !$OMP THREADPRIVATE(NSNAP_H)
00119 TYPE(PRONOSVAR_T),               POINTER     :: TSPRONOSLIST=>NULL()
00120 !$OMP THREADPRIVATE(TSPRONOSLIST)
00121 LOGICAL, POINTER :: LEMIS_FIELDS
00122 !$OMP THREADPRIVATE(LEMIS_FIELDS)
00123 
00124 
00125 CONTAINS
00126 
00127 SUBROUTINE CH_EMIS_SNAP_GOTO_MODEL(KFROM, KTO, LKFROM)
00128 LOGICAL, INTENT(IN) :: LKFROM
00129 INTEGER, INTENT(IN) :: KFROM, KTO
00130 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00131 !
00132 ! Save current state for allocated arrays
00133 IF (LKFROM) THEN
00134 CH_EMIS_SNAP_MODEL(KFROM)%CEMIS_COMMENT=>CEMIS_COMMENT
00135 CH_EMIS_SNAP_MODEL(KFROM)%CEMIS_NAME=>CEMIS_NAME
00136 CH_EMIS_SNAP_MODEL(KFROM)%XDELTA_LEGAL_TIME=>XDELTA_LEGAL_TIME
00137 CH_EMIS_SNAP_MODEL(KFROM)%XEMIS_FIELDS=>XEMIS_FIELDS
00138 CH_EMIS_SNAP_MODEL(KFROM)%XEMIS_FIELDS_SNAP=>XEMIS_FIELDS_SNAP
00139 CH_EMIS_SNAP_MODEL(KFROM)%XSNAP_DAILY=>XSNAP_DAILY
00140 CH_EMIS_SNAP_MODEL(KFROM)%XSNAP_HOURLY=>XSNAP_HOURLY
00141 CH_EMIS_SNAP_MODEL(KFROM)%XSNAP_MONTHLY=>XSNAP_MONTHLY
00142 CH_EMIS_SNAP_MODEL(KFROM)%XCONVERSION=>XCONVERSION
00143 CH_EMIS_SNAP_MODEL(KFROM)%TSPRONOSLIST=>TSPRONOSLIST
00144 
00145 ENDIF
00146 !
00147 ! Current model is set to model KTO
00148 IF (LHOOK) CALL DR_HOOK('MODD_CH_SNAP_n:CH_EMIS_SNAP_GOTO_MODEL',0,ZHOOK_HANDLE)
00149 
00150 NEMIS_NBR=>CH_EMIS_SNAP_MODEL(KTO)%NEMIS_NBR
00151 CCONVERSION=>CH_EMIS_SNAP_MODEL(KTO)%CCONVERSION
00152 CSNAP_TIME_REF=>CH_EMIS_SNAP_MODEL(KTO)%CSNAP_TIME_REF
00153 CEMIS_COMMENT=>CH_EMIS_SNAP_MODEL(KTO)%CEMIS_COMMENT
00154 CEMIS_NAME=>CH_EMIS_SNAP_MODEL(KTO)%CEMIS_NAME
00155 XDELTA_LEGAL_TIME=>CH_EMIS_SNAP_MODEL(KTO)%XDELTA_LEGAL_TIME
00156 XEMIS_FIELDS=>CH_EMIS_SNAP_MODEL(KTO)%XEMIS_FIELDS
00157 XEMIS_FIELDS_SNAP=>CH_EMIS_SNAP_MODEL(KTO)%XEMIS_FIELDS_SNAP
00158 XSNAP_DAILY=>CH_EMIS_SNAP_MODEL(KTO)%XSNAP_DAILY
00159 XSNAP_HOURLY=>CH_EMIS_SNAP_MODEL(KTO)%XSNAP_HOURLY
00160 XSNAP_MONTHLY=>CH_EMIS_SNAP_MODEL(KTO)%XSNAP_MONTHLY
00161 XCONVERSION=>CH_EMIS_SNAP_MODEL(KTO)%XCONVERSION
00162 TSPRONOSLIST=>CH_EMIS_SNAP_MODEL(KTO)%TSPRONOSLIST
00163 NEMIS_SNAP=>CH_EMIS_SNAP_MODEL(KTO)%NEMIS_SNAP
00164 NSNAP_M=>CH_EMIS_SNAP_MODEL(KTO)%NSNAP_M
00165 NSNAP_D=>CH_EMIS_SNAP_MODEL(KTO)%NSNAP_D
00166 NSNAP_H=>CH_EMIS_SNAP_MODEL(KTO)%NSNAP_H
00167 LEMIS_FIELDS=>CH_EMIS_SNAP_MODEL(KTO)%LEMIS_FIELDS
00168 
00169 IF (LHOOK) CALL DR_HOOK('MODD_CH_SNAP_n:CH_EMIS_SNAP_GOTO_MODEL',1,ZHOOK_HANDLE)
00170 
00171 END SUBROUTINE CH_EMIS_SNAP_GOTO_MODEL
00172 
00173 SUBROUTINE CH_EMIS_SNAP_ALLOC(KMODEL)
00174 INTEGER, INTENT(IN) :: KMODEL
00175 INTEGER :: J
00176 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00177 IF (LHOOK) CALL DR_HOOK("MODD_CH_SNAP_n:CH_EMIS_FIELD_ALLOC",0,ZHOOK_HANDLE)
00178 ALLOCATE(CH_EMIS_SNAP_MODEL(KMODEL))
00179 DO J=1,KMODEL
00180   NULLIFY(CH_EMIS_SNAP_MODEL(J)%CEMIS_COMMENT)
00181   NULLIFY(CH_EMIS_SNAP_MODEL(J)%CEMIS_NAME)
00182   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XDELTA_LEGAL_TIME)
00183   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XEMIS_FIELDS)
00184   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XEMIS_FIELDS_SNAP)
00185   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XSNAP_DAILY)
00186   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XSNAP_HOURLY)
00187   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XSNAP_MONTHLY)
00188   NULLIFY(CH_EMIS_SNAP_MODEL(J)%XCONVERSION)
00189 ENDDO
00190 CH_EMIS_SNAP_MODEL(:)%CCONVERSION=' '
00191 CH_EMIS_SNAP_MODEL(:)%CSNAP_TIME_REF=' '
00192 CH_EMIS_SNAP_MODEL(:)%NEMIS_NBR=0
00193 CH_EMIS_SNAP_MODEL(:)%NEMIS_SNAP=0
00194 CH_EMIS_SNAP_MODEL(:)%NSNAP_M=0
00195 CH_EMIS_SNAP_MODEL(:)%NSNAP_D=0
00196 CH_EMIS_SNAP_MODEL(:)%NSNAP_H=0
00197 CH_EMIS_SNAP_MODEL(:)%LEMIS_FIELDS=.FALSE.
00198 IF (LHOOK) CALL DR_HOOK("MODD_CH_SNAP_n:CH_EMIS_FIELD_ALLOC",1,ZHOOK_HANDLE)
00199 END SUBROUTINE CH_EMIS_SNAP_ALLOC
00200 
00201 SUBROUTINE CH_EMIS_SNAP_DEALLO
00202 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00203 IF (LHOOK) CALL DR_HOOK("MODD_CH_SNAP_n:CH_EMIS_FIELD_DEALLO",0,ZHOOK_HANDLE)
00204 IF (ALLOCATED(CH_EMIS_SNAP_MODEL)) DEALLOCATE(CH_EMIS_SNAP_MODEL)
00205 IF (LHOOK) CALL DR_HOOK("MODD_CH_SNAP_n:CH_EMIS_FIELD_DEALLO",1,ZHOOK_HANDLE)
00206 END SUBROUTINE CH_EMIS_SNAP_DEALLO
00207 
00208 END MODULE MODD_CH_SNAP_n
00209