SURFEX v7.3
General documentation of Surfex
|
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