module d3d_def
      use machine
      implicit none
!
      REAL(KIND=KIND_RAD) ,ALLOCATABLE :: DT3DT(:,:,:,:,:)
      REAL(KIND=KIND_RAD) ,ALLOCATABLE :: DQ3DT(:,:,:,:,:)
      REAL(KIND=KIND_RAD) ,ALLOCATABLE :: DU3DT(:,:,:,:,:)
      REAL(KIND=KIND_RAD) ,ALLOCATABLE :: DV3DT(:,:,:,:,:)
!     REAL(KIND=KIND_RAD) ,ALLOCATABLE :: CUMFLX(:,:,:,:)
      REAL(KIND=KIND_RAD) ,ALLOCATABLE :: upd_mf(:,:,:,:)
     &,                                   dwn_mf(:,:,:,:)
     &,                                   det_mf(:,:,:,:)
      REAL(KIND=KIND_RAD) ,ALLOCATABLE :: CLDCOV(:,:,:)
!
      contains
!
      subroutine d3d_init(ngptc,nblck,lonr,lats_node_r,levs,pl_coeff)
      implicit none
      integer ngptc,nblck,lonr,lats_node_r,levs,pl_coeff
!
      allocate (DT3DT(NGPTC,LEVS,6,NBLCK,lats_node_r))
      allocate (DQ3DT(NGPTC,LEVS,5+pl_coeff,NBLCK,lats_node_r))
      allocate (DU3DT(NGPTC,LEVS,4,NBLCK,lats_node_r))
      allocate (DV3DT(NGPTC,LEVS,4,NBLCK,lats_node_r))
!     allocate (CUMFLX(NGPTC,LEVS,NBLCK,lats_node_r))
      allocate (upd_mf(NGPTC,LEVS,NBLCK,lats_node_r))
      allocate (dwn_mf(NGPTC,LEVS,NBLCK,lats_node_r))
      allocate (det_mf(NGPTC,LEVS,NBLCK,lats_node_r))
      allocate (CLDCOV(LEVS,LONR,lats_node_r))
!
      end subroutine d3d_init
      subroutine d3d_zero
      implicit none
      real, parameter :: zero=0.0
!
       DT3DT  = zero
       DQ3DT  = zero
       DU3DT  = zero
       DV3DT  = zero
!      CUMFLX = zero
       upd_mf = zero
       dwn_mf = zero
       det_mf = zero
       CLDCOV = zero
!
      end subroutine d3d_zero
      end module d3d_def