SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_emis_gr_fieldn.F90
Go to the documentation of this file.
00001 !     ###########################
00002       MODULE MODD_EMIS_GR_FIELD_n
00003 !     ###########################
00004 !
00005 !!****  *MODD_EMIS_GR_FIELD_n* - declaration of chemical emission data arrays
00006 !!                               for model n
00007 !!    PURPOSE
00008 !!    -------
00009 !       The purpose of this declarative module is to specify  the 
00010 !     chemical emission data arrays for model n.
00011 !
00012 !!
00013 !!**  IMPLICIT ARGUMENTS
00014 !!    ------------------
00015 !!      None 
00016 !!
00017 !!    REFERENCE
00018 !!    ---------
00019 !!      Book2 of documentation of Meso-NH (module MODD_EMIS_GR_FIELD)
00020 !!      
00021 !!
00022 !!    AUTHOR
00023 !!    ------
00024 !!      D. Gazen   *L.A.*
00025 !!
00026 !!    MODIFICATIONS
00027 !!    -------------
00028 !!      Original    08/03/2001                      
00029 !!      01/12/03    (D.Gazen) change emissions handling for surf. externalization
00030 !-------------------------------------------------------------------------------
00031 !
00032 !*       0.   DECLARATIONS
00033 !             ------------
00034 !
00035 USE MODD_TYPE_EFUTIL
00036 !
00037 !
00038 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00039 USE PARKIND1  ,ONLY : JPRB
00040 !
00041 IMPLICIT NONE
00042 
00043 TYPE EMIS_GR_FIELD_t
00044 !
00045 !
00046   INTEGER                                     :: NEMIS_GR_NBR
00047 !                          ! number of chemical pgd fields chosen by user
00048   CHARACTER(LEN=3) , DIMENSION(:), POINTER:: CEMIS_GR_AREA
00049 !                          ! areas where chemical pgd fields are defined
00050 !                          ! 'ALL' : everywhere
00051 !                          ! 'SEA' : where sea exists
00052 !                          ! 'LAN' : where land exists
00053 !                          ! 'WAT' : where inland water exists
00054 !                          ! 'NAT' : where natural or agricultural areas exist
00055 !                          ! 'TWN' : where town areas exist
00056 !                          ! 'STR' : where streets are present
00057 !                          ! 'BLD' : where buildings are present
00058 !                          !
00059   CHARACTER(LEN=40), DIMENSION(:), POINTER:: CEMIS_GR_NAME
00060 !                          ! name of the chemical pgd fields (emitted species)
00061 !
00062   INTEGER,       DIMENSION(:),     POINTER:: NEMIS_GR_TIME   ! emission time
00063 !
00064   REAL,          DIMENSION(:,:,:), POINTER:: XEMIS_GR_FIELDS ! emission pgd fields values
00065 !
00066   INTEGER                                          :: NEMISPEC_NBR ! Number of chemical species
00067 !
00068   TYPE(EMISSVAR_T),  DIMENSION(:), POINTER :: TSEMISS      ! Offline emission struct array
00069 !
00070   TYPE(PRONOSVAR_T),               POINTER     :: TSPRONOSLIST ! Head pointer on pronostic
00071 !                                                              variables list
00072 !-------------------------------------------------------------------------------
00073 !
00074 END TYPE EMIS_GR_FIELD_t
00075 
00076 TYPE(EMIS_GR_FIELD_t), ALLOCATABLE, TARGET, SAVE :: EMIS_GR_FIELD_MODEL(:)
00077 
00078 INTEGER, POINTER :: NEMIS_GR_NBR=>NULL()
00079 !$OMP THREADPRIVATE(NEMIS_GR_NBR)
00080  CHARACTER(LEN=3) , DIMENSION(:), POINTER:: CEMIS_GR_AREA=>NULL()
00081 !$OMP THREADPRIVATE(CEMIS_GR_AREA)
00082  CHARACTER(LEN=40), DIMENSION(:), POINTER:: CEMIS_GR_NAME=>NULL()
00083 !$OMP THREADPRIVATE(CEMIS_GR_NAME)
00084 INTEGER,       DIMENSION(:),     POINTER:: NEMIS_GR_TIME=>NULL()
00085 !$OMP THREADPRIVATE(NEMIS_GR_TIME)
00086 REAL,          DIMENSION(:,:,:), POINTER:: XEMIS_GR_FIELDS=>NULL()
00087 !$OMP THREADPRIVATE(XEMIS_GR_FIELDS)
00088 INTEGER, POINTER :: NEMISPEC_NBR=>NULL()
00089 !$OMP THREADPRIVATE(NEMISPEC_NBR)
00090 TYPE(EMISSVAR_T),  DIMENSION(:), POINTER :: TSEMISS=>NULL()
00091 !$OMP THREADPRIVATE(TSEMISS)
00092 TYPE(PRONOSVAR_T),               POINTER     :: TSPRONOSLIST=>NULL()
00093 !$OMP THREADPRIVATE(TSPRONOSLIST)
00094 
00095 CONTAINS
00096 
00097 SUBROUTINE EMIS_GR_FIELD_GOTO_MODEL(KFROM, KTO, LKFROM)
00098 LOGICAL, INTENT(IN) :: LKFROM
00099 INTEGER, INTENT(IN) :: KFROM, KTO
00100 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00101 !
00102 ! Save current state for allocated arrays
00103 IF (LKFROM) THEN
00104 EMIS_GR_FIELD_MODEL(KFROM)%CEMIS_GR_AREA=>CEMIS_GR_AREA
00105 EMIS_GR_FIELD_MODEL(KFROM)%CEMIS_GR_NAME=>CEMIS_GR_NAME
00106 EMIS_GR_FIELD_MODEL(KFROM)%NEMIS_GR_TIME=>NEMIS_GR_TIME
00107 EMIS_GR_FIELD_MODEL(KFROM)%XEMIS_GR_FIELDS=>XEMIS_GR_FIELDS
00108 EMIS_GR_FIELD_MODEL(KFROM)%TSEMISS=>TSEMISS
00109 EMIS_GR_FIELD_MODEL(KFROM)%TSPRONOSLIST=>TSPRONOSLIST
00110 ENDIF
00111 !
00112 ! Current model is set to model KTO
00113 IF (LHOOK) CALL DR_HOOK('MODD_EMIS_GR_FIELD_N:EMIS_GR_FIELD_GOTO_MODEL',0,ZHOOK_HANDLE)
00114 NEMIS_GR_NBR=>EMIS_GR_FIELD_MODEL(KTO)%NEMIS_GR_NBR
00115 CEMIS_GR_AREA=>EMIS_GR_FIELD_MODEL(KTO)%CEMIS_GR_AREA
00116 CEMIS_GR_NAME=>EMIS_GR_FIELD_MODEL(KTO)%CEMIS_GR_NAME
00117 NEMIS_GR_TIME=>EMIS_GR_FIELD_MODEL(KTO)%NEMIS_GR_TIME
00118 XEMIS_GR_FIELDS=>EMIS_GR_FIELD_MODEL(KTO)%XEMIS_GR_FIELDS
00119 NEMISPEC_NBR=>EMIS_GR_FIELD_MODEL(KTO)%NEMISPEC_NBR
00120 TSEMISS=>EMIS_GR_FIELD_MODEL(KTO)%TSEMISS
00121 TSPRONOSLIST=>EMIS_GR_FIELD_MODEL(KTO)%TSPRONOSLIST
00122 IF (LHOOK) CALL DR_HOOK('MODD_EMIS_GR_FIELD_N:EMIS_GR_FIELD_GOTO_MODEL',1,ZHOOK_HANDLE)
00123 
00124 END SUBROUTINE EMIS_GR_FIELD_GOTO_MODEL
00125 
00126 SUBROUTINE EMIS_GR_FIELD_ALLOC(KMODEL)
00127 INTEGER, INTENT(IN) :: KMODEL
00128 INTEGER :: J
00129 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00130 IF (LHOOK) CALL DR_HOOK("MODD_EMIS_GR_FIELD_N:EMIS_GR_FIELD_ALLOC",0,ZHOOK_HANDLE)
00131 ALLOCATE(EMIS_GR_FIELD_MODEL(KMODEL))
00132 DO J=1,KMODEL
00133   NULLIFY(EMIS_GR_FIELD_MODEL(J)%CEMIS_GR_AREA)
00134   NULLIFY(EMIS_GR_FIELD_MODEL(J)%CEMIS_GR_NAME)
00135   NULLIFY(EMIS_GR_FIELD_MODEL(J)%NEMIS_GR_TIME)
00136   NULLIFY(EMIS_GR_FIELD_MODEL(J)%XEMIS_GR_FIELDS)
00137 ENDDO
00138 EMIS_GR_FIELD_MODEL(:)%NEMIS_GR_NBR=0
00139 EMIS_GR_FIELD_MODEL(:)%NEMISPEC_NBR=0
00140 IF (LHOOK) CALL DR_HOOK("MODD_EMIS_GR_FIELD_N:EMIS_GR_FIELD_ALLOC",1,ZHOOK_HANDLE)
00141 END SUBROUTINE EMIS_GR_FIELD_ALLOC
00142 
00143 SUBROUTINE EMIS_GR_FIELD_DEALLO
00144 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00145 IF (LHOOK) CALL DR_HOOK("MODD_EMIS_GR_FIELD_N:EMIS_GR_FIELD_DEALLO",0,ZHOOK_HANDLE)
00146 IF (ALLOCATED(EMIS_GR_FIELD_MODEL)) DEALLOCATE(EMIS_GR_FIELD_MODEL)
00147 IF (LHOOK) CALL DR_HOOK("MODD_EMIS_GR_FIELD_N:EMIS_GR_FIELD_DEALLO",1,ZHOOK_HANDLE)
00148 END SUBROUTINE EMIS_GR_FIELD_DEALLO
00149 
00150 END MODULE MODD_EMIS_GR_FIELD_n