SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE CH_INIT_NAMES (KLUOUT,HSV,KBEQ,KBAER,HSVO,& 00003 KSV_CHSBEG,KSV_CHSEND, KSV_AERBEG, KSV_AEREND,& 00004 OVARSIGI, OVARSIGJ) 00005 !! ########################################### 00006 !! 00007 !!*** *CH_INIT_NAMES* 00008 !! 00009 !! PURPOSE 00010 !! ------- 00011 !! Read and filter all chemical species into the CSV array 00012 !! initialize NSV_CHSBEG and NSV_CHSEND index for the begin and the ending chemical index 00013 !! 00014 !! 00015 !! REFERENCE 00016 !! --------- 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! P. Tulet *Meteo France* 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 16/10/01 00025 !! 01/12/03 (D.Gazen) change emissions handling for surf. externalization 00026 !! 01/06/05 (P.Tulet) add aerosols list 00027 !! 00028 !! EXTERNAL 00029 !! -------- 00030 !! 00031 !! IMPLICIT ARGUMENTS 00032 !! ------------------ 00033 USE MODD_CHS_AEROSOL 00034 !------------------------------------------------------------------------------- 00035 ! 00036 !* 0. DECLARATIONS 00037 ! ------------ 00038 ! 00039 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00040 USE PARKIND1 ,ONLY : JPRB 00041 ! 00042 IMPLICIT NONE 00043 ! 00044 !* 0.1 declarations of arguments 00045 ! 00046 00047 INTEGER, INTENT(IN) :: KLUOUT ! output listing channel 00048 CHARACTER(LEN=6), DIMENSION(:), INTENT(IN) :: HSV ! name of chemical species 00049 ! with character # (gas chemistry ) 00050 ! and character @ (aerosols) 00051 INTEGER, INTENT(OUT) :: KBEQ ! number of chemical variables 00052 INTEGER, INTENT(OUT) :: KBAER ! number of aerosol variables 00053 CHARACTER(LEN=6), DIMENSION(:), POINTER :: HSVO ! name of scalar species without # and @ 00054 INTEGER, INTENT(OUT) :: KSV_CHSBEG ! first chemical var. 00055 INTEGER, INTENT(OUT) :: KSV_CHSEND ! last chemical var. 00056 INTEGER, INTENT(OUT) :: KSV_AERBEG ! first aerosol var. 00057 INTEGER, INTENT(OUT) :: KSV_AEREND ! last aerosol var. 00058 LOGICAL, INTENT(OUT) :: OVARSIGI, OVARSIGJ ! type of standard deviation 00059 ! 00060 !* 0.2 declarations of local variables 00061 INTEGER :: JSV !! loop NBEQ 00062 CHARACTER :: YRC1 00063 CHARACTER(LEN=5) :: YRC2 00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00065 ! 00066 !------------------------------------------------------------------------------- 00067 00068 IF (LHOOK) CALL DR_HOOK('CH_INIT_NAMES',0,ZHOOK_HANDLE) 00069 KBEQ = 0 00070 KBAER = 0 00071 KSV_CHSBEG = 0 00072 KSV_AERBEG = 0 00073 KSV_CHSEND = 0 00074 KSV_AEREND = 0 00075 OVARSIGI = .FALSE. 00076 OVARSIGJ = .FALSE. 00077 NSOA = 0 00078 00079 00080 DO JSV=1, SIZE(HSV) 00081 00082 HSVO(JSV) = HSV(JSV) 00083 YRC1= HSV(JSV)(1:1) 00084 YRC2 = HSV(JSV)(2:) 00085 00086 IF (YRC1 == '#') THEN 00087 HSVO(JSV) = TRIM(YRC2) 00088 KBEQ = KBEQ + 1 00089 IF (KBEQ == 1) KSV_CHSBEG=JSV 00090 ELSE IF (YRC1 == '@') THEN 00091 HSVO(JSV) = TRIM(YRC2) 00092 KBAER = KBAER + 1 00093 IF (KBAER == 1) KSV_AERBEG=JSV 00094 IF (HSVO(JSV) == "M6I") OVARSIGI = .TRUE. 00095 IF (HSVO(JSV) == "M6J") OVARSIGJ = .TRUE. 00096 IF (HSVO(JSV) == "SOA1I") NSOA = 10 00097 ENDIF 00098 00099 ENDDO 00100 00101 KSV_CHSEND = KSV_CHSBEG + KBEQ -1 00102 KSV_AEREND = KSV_AERBEG + KBAER -1 00103 00104 IF (KBAER .GT. 0) THEN 00105 DO JSV=1, size(HSVO) 00106 IF (TRIM(HSVO(JSV)) == "M0I") JP_CH_M0i=JSV-KSV_CHSEND 00107 IF (TRIM(HSVO(JSV)) == "M0J") JP_CH_M0j=JSV-KSV_CHSEND 00108 IF (TRIM(HSVO(JSV)) == "M6I") JP_CH_M6i=JSV-KSV_CHSEND 00109 IF (TRIM(HSVO(JSV)) == "M6J") JP_CH_M6j=JSV-KSV_CHSEND 00110 IF (TRIM(HSVO(JSV)) == "H2OI") JP_CH_H2Oi=JSV-KSV_CHSEND 00111 IF (TRIM(HSVO(JSV)) == "H2OJ") JP_CH_H2Oj=JSV-KSV_CHSEND 00112 IF (TRIM(HSVO(JSV)) == "SO4I") JP_CH_SO4i=JSV-KSV_CHSEND 00113 IF (TRIM(HSVO(JSV)) == "SO4J") JP_CH_SO4j=JSV-KSV_CHSEND 00114 IF (TRIM(HSVO(JSV)) == "NO3I") JP_CH_NO3i=JSV-KSV_CHSEND 00115 IF (TRIM(HSVO(JSV)) == "NO3J") JP_CH_NO3j=JSV-KSV_CHSEND 00116 IF (TRIM(HSVO(JSV)) == "NH3I") JP_CH_NH3i=JSV-KSV_CHSEND 00117 IF (TRIM(HSVO(JSV)) == "NH3J") JP_CH_NH3j=JSV-KSV_CHSEND 00118 IF (TRIM(HSVO(JSV)) == "OCI") JP_CH_OCi=JSV-KSV_CHSEND 00119 IF (TRIM(HSVO(JSV)) == "OCJ") JP_CH_OCj=JSV-KSV_CHSEND 00120 IF (TRIM(HSVO(JSV)) == "BCI") JP_CH_BCi=JSV-KSV_CHSEND 00121 IF (TRIM(HSVO(JSV)) == "BCJ") JP_CH_BCj=JSV-KSV_CHSEND 00122 END DO 00123 00124 END IF 00125 IF (LHOOK) CALL DR_HOOK('CH_INIT_NAMES',1,ZHOOK_HANDLE) 00126 00127 ! 00128 END SUBROUTINE CH_INIT_NAMES