SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_ch_surfn.F90
Go to the documentation of this file.
00001 !     #####################
00002       MODULE MODD_CH_SURF_n
00003 !     #####################
00004 !
00005 !!
00006 !!    PURPOSE
00007 !!    -------
00008 !     
00009 !   
00010 !
00011 !!
00012 !!**  IMPLICIT ARGUMENTS
00013 !!    ------------------
00014 !!      None
00015 !!
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!  P. Tulet   *Meteo France*
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!  16/07/03 (P. Tulet)  restructured for externalization
00024 !!   10/2011 (S. Queguiner) Add CCH_EMIS
00025 !------------------------------------------------------------------------------
00026 !
00027 !*       0.   DECLARATIONS
00028 !             ------------
00029 !
00030 !
00031 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00032 USE PARKIND1  ,ONLY : JPRB
00033 !
00034 IMPLICIT NONE
00035 
00036 TYPE CH_SURF_t
00037 !
00038   CHARACTER(LEN=4)              :: CCH_EMIS            ! Option for chemical emissions
00039                                                        ! 'NONE' : no emission
00040                                                        ! 'AGGR' : one aggregated value
00041                                                        !    for each specie and hour
00042                                                        ! 'SNAP' : from SNAP data using
00043                                                        !    potential emission & temporal profiles
00044   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES ! NAME OF CHEMICAL
00045   CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES ! NAME OF AEROSOL SPECIES
00046                                                        ! SPECIES (FOR DIAG ONLY)
00047   CHARACTER(LEN=28)             :: CCHEM_SURF_FILE     ! name of general 
00048                                                        ! (chemical) purpose
00049                                                        ! ASCII input file
00050   REAL, DIMENSION(:), POINTER   :: XCONVERSION         ! emission unit 
00051                                                        ! conversion factor
00052   LOGICAL  :: LCH_SURF_EMIS                            ! T : chemical emissions
00053                                                        ! are used
00054   LOGICAL  :: LCH_EMIS                                 ! T : chemical emissions
00055                                                        ! are present in the file
00056   LOGICAL  :: LRW_CH_EMIS                              ! flag to call read and
00057                                                        ! write emissions routine
00058 !
00059 END TYPE CH_SURF_t
00060 
00061 TYPE(CH_SURF_t), ALLOCATABLE, TARGET, SAVE :: CH_SURF_MODEL(:)
00062 
00063  CHARACTER(LEN=4),               POINTER :: CCH_EMIS=>NULL()
00064 !$OMP THREADPRIVATE(CCH_EMIS)
00065  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CCH_NAMES=>NULL()
00066 !$OMP THREADPRIVATE(CCH_NAMES)
00067  CHARACTER(LEN=6), DIMENSION(:), POINTER :: CAER_NAMES=>NULL()
00068 !$OMP THREADPRIVATE(CAER_NAMES)
00069  CHARACTER(LEN=28), POINTER :: CCHEM_SURF_FILE=>NULL()
00070 !$OMP THREADPRIVATE(CCHEM_SURF_FILE)
00071 REAL, DIMENSION(:), POINTER   :: XCONVERSION=>NULL()
00072 !$OMP THREADPRIVATE(XCONVERSION)
00073 LOGICAL, POINTER :: LCH_SURF_EMIS=>NULL()
00074 !$OMP THREADPRIVATE(LCH_SURF_EMIS)
00075 LOGICAL, POINTER :: LCH_EMIS=>NULL()
00076 !$OMP THREADPRIVATE(LCH_EMIS)
00077 LOGICAL, POINTER :: LRW_CH_EMIS=>NULL()
00078 !$OMP THREADPRIVATE(LRW_CH_EMIS)
00079 
00080 CONTAINS
00081 
00082 SUBROUTINE CH_SURF_GOTO_MODEL(KFROM, KTO, LKFROM)
00083 LOGICAL, INTENT(IN) :: LKFROM
00084 INTEGER, INTENT(IN) :: KFROM, KTO
00085 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00086 !
00087 ! Save current state for allocated arrays
00088 IF (LKFROM) THEN
00089 CH_SURF_MODEL(KFROM)%CCH_NAMES=>CCH_NAMES
00090 CH_SURF_MODEL(KFROM)%CAER_NAMES=>CAER_NAMES
00091 CH_SURF_MODEL(KFROM)%XCONVERSION=>XCONVERSION
00092 ENDIF
00093 !
00094 ! Current model is set to model KTO
00095 IF (LHOOK) CALL DR_HOOK('MODD_CH_SURF_N:CH_SURF_GOTO_MODEL',0,ZHOOK_HANDLE)
00096 CCH_EMIS=>CH_SURF_MODEL(KTO)%CCH_EMIS
00097 CCH_NAMES=>CH_SURF_MODEL(KTO)%CCH_NAMES
00098 CAER_NAMES=>CH_SURF_MODEL(KTO)%CAER_NAMES
00099 CCHEM_SURF_FILE=>CH_SURF_MODEL(KTO)%CCHEM_SURF_FILE
00100 XCONVERSION=>CH_SURF_MODEL(KTO)%XCONVERSION
00101 LCH_SURF_EMIS=>CH_SURF_MODEL(KTO)%LCH_SURF_EMIS
00102 LCH_EMIS=>CH_SURF_MODEL(KTO)%LCH_EMIS
00103 LRW_CH_EMIS=>CH_SURF_MODEL(KTO)%LRW_CH_EMIS
00104 IF (LHOOK) CALL DR_HOOK('MODD_CH_SURF_N:CH_SURF_GOTO_MODEL',1,ZHOOK_HANDLE)
00105 
00106 END SUBROUTINE CH_SURF_GOTO_MODEL
00107 
00108 SUBROUTINE CH_SURF_ALLOC(KMODEL)
00109 INTEGER, INTENT(IN) :: KMODEL
00110 INTEGER :: J
00111 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00112 IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_ALLOC",0,ZHOOK_HANDLE)
00113 ALLOCATE(CH_SURF_MODEL(KMODEL))
00114 DO J=1,KMODEL
00115   NULLIFY(CH_SURF_MODEL(J)%CCH_NAMES)
00116   NULLIFY(CH_SURF_MODEL(J)%CAER_NAMES)
00117   NULLIFY(CH_SURF_MODEL(J)%XCONVERSION)
00118 ENDDO
00119 CH_SURF_MODEL(:)%CCH_EMIS=' '
00120 CH_SURF_MODEL(:)%CCHEM_SURF_FILE=' '
00121 CH_SURF_MODEL(:)%LCH_SURF_EMIS=.FALSE.
00122 CH_SURF_MODEL(:)%LCH_EMIS=.FALSE.
00123 CH_SURF_MODEL(:)%LRW_CH_EMIS=.FALSE.
00124 IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_ALLOC",1,ZHOOK_HANDLE)
00125 END SUBROUTINE CH_SURF_ALLOC
00126 
00127 SUBROUTINE CH_SURF_DEALLO
00128 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00129 IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_DEALLO",0,ZHOOK_HANDLE)
00130 IF (ALLOCATED(CH_SURF_MODEL)) DEALLOCATE(CH_SURF_MODEL)
00131 IF (LHOOK) CALL DR_HOOK("MODD_CH_SURF_N:CH_SURF_DEALLO",1,ZHOOK_HANDLE)
00132 END SUBROUTINE CH_SURF_DEALLO
00133 
00134 END MODULE MODD_CH_SURF_n