SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_chemicaln.F90
Go to the documentation of this file.
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