modd_dstn.F90 Source File


Contents

Source Code


Source Code

!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!SFX_LIC This is part of the SURFEX software governed by the CeCILL version 2.1
!SFX_LIC version 1. See LICENSE, Licence_CeCILL_V2.1-en.txt and Licence_CeCILL_V2.1-fr.txt  
!SFX_LIC for details. version 1.
MODULE MODD_DST_n

!Purpose: 
!Declare variables and constants necessary to do the dust calculations
!Here are only the variables which depend on the grid!

!Author: Alf Grini <alf.grini@cnrm.meteo.fr>

!
USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
USE PARKIND1  ,ONLY : JPRB
!
IMPLICIT NONE

TYPE DST_t
  !
  INTEGER, DIMENSION(:), POINTER     :: NVT_DST           !MASK: dust vegetation number to vegetation number
  INTEGER, DIMENSION(:), POINTER   :: NSIZE_PATCH_DST   !Number of points for a patch and a vegetation class
  INTEGER, DIMENSION(:,:), POINTER :: NR_PATCH_DST      !Mask from patch-points to dust-points
  REAL,DIMENSION(:), POINTER         :: Z0_EROD_DST       !Roughness length momentum over erodible dust emitter sfc
  CHARACTER(LEN=6), DIMENSION(:), POINTER  :: CSV_DST     !Name of scalar variables 
  REAL, DIMENSION(:,:),POINTER    :: XSFDST             !Dust variables to be send to output
  REAL, DIMENSION(:,:),POINTER    :: XSFDSTM            !Dust variables to be send to output
  REAL,DIMENSION(:), POINTER   :: XEMISRADIUS_DST         !Number median radius for each source mode
  REAL,DIMENSION(:), POINTER   :: XEMISSIG_DST            !sigma for each source mode
  REAL,DIMENSION(:), POINTER   :: XMSS_FRC_SRC            !Mass fraction of each source mode  
  !
END TYPE DST_t
!
TYPE DST_NP_t
!
TYPE(DST_t), DIMENSION(:), POINTER :: AL=>NULL()
!
END TYPE DST_NP_t
!
CONTAINS
!
SUBROUTINE DST_INIT(YDST)
TYPE(DST_t), INTENT(INOUT) :: YDST
REAL(KIND=JPRB) :: ZHOOK_HANDLE
IF (LHOOK) CALL DR_HOOK("MODD_DST_N:DST_INIT",0,ZHOOK_HANDLE)
  NULLIFY(YDST%NVT_DST)
  NULLIFY(YDST%NSIZE_PATCH_DST)
  NULLIFY(YDST%NR_PATCH_DST)
  NULLIFY(YDST%Z0_EROD_DST)
  NULLIFY(YDST%CSV_DST)
  NULLIFY(YDST%XSFDST)
  NULLIFY(YDST%XSFDSTM)
  NULLIFY(YDST%XEMISRADIUS_DST)
  NULLIFY(YDST%XEMISSIG_DST)
  NULLIFY(YDST%XMSS_FRC_SRC)
IF (LHOOK) CALL DR_HOOK("MODD_DST_N:DST_INIT",1,ZHOOK_HANDLE)
END SUBROUTINE DST_INIT
!
SUBROUTINE DST_NP_INIT(YDST_NP,KPATCH)
TYPE(DST_NP_t), INTENT(INOUT) :: YDST_NP
INTEGER, INTENT(IN) :: KPATCH
INTEGER :: JP
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
IF (LHOOK) CALL DR_HOOK("MODD_DST_N:DST_NP_INIT",0,ZHOOK_HANDLE)
!
IF (ASSOCIATED(YDST_NP%AL)) THEN
  DO JP = 1,KPATCH
    CALL DST_INIT(YDST_NP%AL(JP))
  ENDDO
  DEALLOCATE(YDST_NP%AL)
ELSE
  ALLOCATE(YDST_NP%AL(KPATCH))
  DO JP = 1,KPATCH
    CALL DST_INIT(YDST_NP%AL(JP))
  ENDDO
ENDIF
!
IF (LHOOK) CALL DR_HOOK("MODD_DST_N:DST_NP_INIT",1,ZHOOK_HANDLE)
!
END SUBROUTINE DST_NP_INIT
!
END MODULE MODD_DST_n