SURFEX v7.3
General documentation of Surfex
|
00001 !############################################################# 00002 SUBROUTINE INIT_CHEMICAL_n(KLUOUT, KSV, HSV, KBEQ, HSVO, KBAER, & 00003 KSV_CHSBEG, KSV_CHSEND, KSV_AERBEG, KSV_AEREND, & 00004 HCH_NAMES, HAER_NAMES, KDSTEQ, KSV_DSTBEG, & 00005 KSV_DSTEND, KSLTEQ, KSV_SLTBEG, KSV_SLTEND, & 00006 HDSTNAMES, HSLTNAMES ) 00007 !############################################################# 00008 ! 00009 !!**** *INIT_CHEMICAL_n* - routine to initialize CHEMICAL SPECIES 00010 !! 00011 !! PURPOSE 00012 !! ------- 00013 !! 00014 !!** METHOD 00015 !! ------ 00016 !! 00017 !! EXTERNAL 00018 !! -------- 00019 !! 00020 !! 00021 !! IMPLICIT ARGUMENTS 00022 !! ------------------ 00023 !! 00024 !! REFERENCE 00025 !! --------- 00026 !! 00027 !! 00028 !! AUTHOR 00029 !! ------ 00030 !! V. Masson *Meteo France* 00031 !! 00032 !! MODIFICATIONS 00033 !! ------------- 00034 !! Original 08/2011 00035 !! 00036 !------------------------------------------------------------------------------- 00037 ! 00038 !* 0. DECLARATIONS 00039 ! ------------ 00040 ! 00041 USE MODD_CHS_AEROSOL, ONLY: LVARSIGI, LVARSIGJ 00042 USE MODD_DST_SURF, ONLY: LVARSIG_DST, NDSTMDE, NDST_MDEBEG, LRGFIX_DST, JPMODE_DST 00043 USE MODD_SLT_SURF, ONLY: LVARSIG_SLT, NSLTMDE, NSLT_MDEBEG, LRGFIX_SLT, JPMODE_SLT 00044 00045 USE MODD_DST_n 00046 USE MODD_SLT_n 00047 ! 00048 USE MODI_CH_INIT_NAMES 00049 USE MODI_DSLT_INIT_NAMES 00050 USE MODI_DSLT_INIT_MODES 00051 ! 00052 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00053 USE PARKIND1 ,ONLY : JPRB 00054 ! 00055 IMPLICIT NONE 00056 ! 00057 !* 0.1 Declarations of arguments 00058 ! ------------------------- 00059 ! 00060 INTEGER, INTENT(IN) :: KLUOUT 00061 INTEGER, INTENT(IN) :: KSV ! number of scalars 00062 CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables 00063 INTEGER, INTENT(OUT) :: KBEQ ! number of chemical variables 00064 CHARACTER(LEN=6), DIMENSION(:), POINTER :: HSVO ! name of scalar species without # and @ 00065 INTEGER, INTENT(OUT) :: KBAER ! number of aerosol variables 00066 INTEGER, INTENT(OUT) :: KSV_CHSBEG ! first chemical var. 00067 INTEGER, INTENT(OUT) :: KSV_CHSEND ! last chemical var. 00068 INTEGER, INTENT(OUT) :: KSV_AERBEG ! first aerosol var. 00069 INTEGER, INTENT(OUT) :: KSV_AEREND ! last aerosol var. 00070 CHARACTER(LEN=6), DIMENSION(:), POINTER :: HCH_NAMES 00071 CHARACTER(LEN=6), DIMENSION(:), POINTER :: HAER_NAMES 00072 INTEGER, INTENT(OUT) :: KDSTEQ ! number of chemical variables 00073 INTEGER, INTENT(OUT) :: KSV_DSTBEG ! first chemical var. 00074 INTEGER, INTENT(OUT) :: KSV_DSTEND ! last chemical var. 00075 INTEGER, INTENT(OUT) :: KSLTEQ ! number of chemical variables 00076 INTEGER, INTENT(OUT) :: KSV_SLTBEG ! first chemical var. 00077 INTEGER, INTENT(OUT) :: KSV_SLTEND ! last chemical var. 00078 CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: HDSTNAMES 00079 CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: HSLTNAMES 00080 ! 00081 !* 0.2 Declarations of local variables 00082 ! ------------------------------- 00083 ! 00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00085 ! 00086 !------------------------------------------------------------------------------- 00087 ! 00088 ! Initialisation for IO 00089 ! 00090 ! 00091 IF (LHOOK) CALL DR_HOOK('INIT_CHEMICAL_n',0,ZHOOK_HANDLE) 00092 ! 00093 IF (KSV /= 0) THEN 00094 ! 00095 ALLOCATE(HSVO(KSV)) 00096 CALL CH_INIT_NAMES(KLUOUT, HSV, KBEQ, KBAER, HSVO, & 00097 KSV_CHSBEG, KSV_CHSEND, & 00098 KSV_AERBEG, KSV_AEREND, & 00099 LVARSIGI, LVARSIGJ ) 00100 00101 IF (KBEQ > 0 ) THEN 00102 ALLOCATE(HCH_NAMES(KBEQ)) 00103 HCH_NAMES(:) = HSVO(KSV_CHSBEG:KSV_CHSEND) 00104 ELSE 00105 ALLOCATE(HCH_NAMES(0)) 00106 END IF 00107 00108 IF (KBAER > 0 ) THEN 00109 ALLOCATE(HAER_NAMES(KBAER)) 00110 HAER_NAMES(:) = HSVO(KSV_AERBEG:KSV_AEREND) 00111 ELSE 00112 ALLOCATE(HAER_NAMES(0)) 00113 END IF 00114 ! 00115 CALL DSLT_INIT_NAMES( & 00116 KLUOUT, &!I [idx] index of writing unit 00117 'DSTM', & 00118 HSV, &!I [char] list of scalar variables 00119 JPMODE_DST, & 00120 KDSTEQ, &!O [nbr] number of dust related tracers 00121 KSV_DSTBEG, &!O [idx] first dust related scalar variable 00122 KSV_DSTEND, &!O [idx] last dust related scalar variable 00123 LVARSIG_DST, &!O type of standard deviation (fixed or variable) 00124 LRGFIX_DST &!O type of mean radius (fixed or variable) 00125 ) 00126 00127 IF (PRESENT(HDSTNAMES)) THEN 00128 IF (KDSTEQ >=1) THEN 00129 CALL DSLT_INIT_MODES( & 00130 KDSTEQ, &!I [nbr] number of dust related variables in scalar list 00131 KSV_DSTBEG, &!I [idx] index of first dust related variable in scalar list 00132 KSV_DSTEND, &!I [idx] index of last dust related variable in scalar list 00133 LVARSIG_DST, &!I type of standard deviation (fixed or variable) 00134 LRGFIX_DST, &!O type of mean radius (fixed or variable) 00135 NDST_MDEBEG, &!O [idx] index of mass for first mode in scalar list 00136 NDSTMDE &!O [nbr] number of modes to be transported 00137 ) 00138 00139 IF(.NOT. ASSOCIATED(HDSTNAMES)) ALLOCATE (HDSTNAMES(KDSTEQ)) 00140 HDSTNAMES(:) = HSVO(KSV_DSTBEG:KSV_DSTEND) 00141 ENDIF 00142 ENDIF 00143 00144 00145 CALL DSLT_INIT_NAMES( & 00146 KLUOUT, &!I [idx] index of writing unit 00147 'SLTM', & 00148 HSV, &!I [char] list of scalar variables 00149 JPMODE_SLT, & 00150 KSLTEQ, &!O [nbr] number of sea salt related tracers 00151 KSV_SLTBEG, &!O [idx] first sea salt related scalar variable 00152 KSV_SLTEND, &!O [idx] last sea salt related scalar variable 00153 LVARSIG_SLT, &!O type of standard deviation (fixed or variable) 00154 LRGFIX_SLT &!O type of mean radius (fixed or variable) 00155 ) 00156 00157 IF (PRESENT(HSLTNAMES)) THEN 00158 IF (KSLTEQ >=1) THEN 00159 CALL DSLT_INIT_MODES( & 00160 KSLTEQ, &!I [nbr] number of sea salt related variables in scalar list 00161 KSV_SLTBEG, &!I [idx] index of first sea salt related variable in scalar list 00162 KSV_SLTEND, &!I [idx] index of last sea salt related variable in scalar list 00163 LVARSIG_SLT, &!I type of standard deviation (fixed or variable) 00164 LRGFIX_SLT, &!O type of mean radius (fixed or variable) 00165 NSLT_MDEBEG, &!O [idx] index of mass for first mode in scalar list 00166 NSLTMDE &!O [nbr] number of modes to be transported 00167 ) 00168 IF(.NOT. ASSOCIATED(HSLTNAMES)) ALLOCATE (HSLTNAMES(KSLTEQ)) 00169 HSLTNAMES(:) = HSVO(KSV_SLTBEG:KSV_SLTEND) 00170 ENDIF 00171 END IF 00172 00173 ELSE 00174 ALLOCATE(HSVO (0)) 00175 IF (PRESENT(HDSTNAMES)) ALLOCATE(HDSTNAMES(0)) 00176 IF (PRESENT(HSLTNAMES)) ALLOCATE(HSLTNAMES(0)) 00177 ENDIF 00178 ! 00179 IF (LHOOK) CALL DR_HOOK('INIT_CHEMICAL_n',1,ZHOOK_HANDLE) 00180 ! 00181 END SUBROUTINE INIT_CHEMICAL_n