type_inc.F90 Source File


Source Code

!-----------------------------------------------------------------------------------------!
! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany           !
! This file is part of kk-prime@juKKR and available as free software under the conditions !
! of the MIT license as expressed in the LICENSE file in more detail.                     !
!-----------------------------------------------------------------------------------------!


module type_inc

  implicit none

    type :: inc_TYPE

      sequence

      integer :: N = 33

      integer :: lmaxd  = -1
      integer :: lmax   = -1
      integer :: nspd   = -1
      integer :: nspo   = -1
      integer :: nspoh  = -1
      integer :: nrd    = -1
      integer :: nembd  = -1
      integer :: nemb   = -1
      integer :: nclsd  = -1
      integer :: ncls   = -1
      integer :: natypd = -1
      integer :: natyp  = -1
      integer :: naezd  = -1
      integer :: naez   = -1
      integer :: naclsd = -1
      integer :: ielast = -1
      integer :: ins    = -1

      integer :: lmmax  = -1
      integer :: lmmaxso= -1
      integer :: alm    = -1
      integer :: almso  = -1

      integer :: ndegen = -1
      integer :: nBZdim = -1
      integer :: nrootmax = -1

      integer          :: neig   = -1
      double precision :: reig   = 0.0
      logical          :: memopt = .false.
      logical          :: feast  = .false.

      logical :: lrhod = .false.
      logical :: ltorq = .false.
      logical :: lspinflux = .false.
      logical :: lalpha = .false.
!      logical :: simpson = .false.

    end type inc_TYPE

#ifdef CPP_MPI

contains

  subroutine create_mpimask_inc(inc,myMPItype,iout)

    use mpi
    implicit none

    type(inc_type), intent(in)  :: inc
    integer,        intent(out) :: myMPItype, iout

    integer :: N, blocklen(inc%N), etype(inc%N), ierr
    integer(kind=MPI_ADDRESS_KIND) :: disp(inc%N), base

    N = inc%N

    call MPI_Get_address(inc%N,      disp(1), ierr)
    call MPI_Get_address(inc%lmaxd,  disp(2), ierr)
    call MPI_Get_address(inc%lmax,   disp(3), ierr)
    call MPI_Get_address(inc%nspd,   disp(4), ierr)
    call MPI_Get_address(inc%nspo,   disp(5), ierr)
    call MPI_Get_address(inc%nspoh,  disp(6), ierr)
    call MPI_Get_address(inc%nrd,    disp(7), ierr)
    call MPI_Get_address(inc%nembd,  disp(8), ierr)
    call MPI_Get_address(inc%nemb,   disp(9), ierr)
    call MPI_Get_address(inc%nclsd,  disp(10), ierr)
    call MPI_Get_address(inc%ncls,   disp(11), ierr)
    call MPI_Get_address(inc%natypd, disp(12), ierr)
    call MPI_Get_address(inc%natyp,  disp(13), ierr)
    call MPI_Get_address(inc%naezd,  disp(14), ierr)
    call MPI_Get_address(inc%naez,   disp(15), ierr)
    call MPI_Get_address(inc%naclsd, disp(16), ierr)
    call MPI_Get_address(inc%ielast, disp(17), ierr)
    call MPI_Get_address(inc%ins,    disp(18), ierr)
    call MPI_Get_address(inc%lmmax,  disp(19), ierr)
    call MPI_Get_address(inc%lmmaxso,disp(20), ierr)
    call MPI_Get_address(inc%alm,    disp(21), ierr)
    call MPI_Get_address(inc%almso,  disp(22), ierr)
    call MPI_Get_address(inc%ndegen, disp(23), ierr)
    call MPI_Get_address(inc%nBZdim, disp(24), ierr)
    call MPI_Get_address(inc%nrootmax,disp(25), ierr)
    call MPI_Get_address(inc%neig,   disp(26), ierr)
    call MPI_Get_address(inc%reig,   disp(27), ierr)
    call MPI_Get_address(inc%memopt, disp(28), ierr)
    call MPI_Get_address(inc%feast,  disp(29), ierr)
    call MPI_Get_address(inc%lrhod,  disp(30), ierr)
    call MPI_Get_address(inc%ltorq,  disp(31), ierr)
    call MPI_Get_address(inc%lspinflux,  disp(32), ierr)
    call MPI_Get_address(inc%lalpha,  disp(33), ierr)
!    call MPI_Get_address(inc%simpson,  disp(28), ierr)

    base = disp(1)
    disp = disp - base

    blocklen=1

    etype(1:26)  = MPI_INTEGER
    etype(27)    = MPI_DOUBLE_PRECISION
    etype(28:33) = MPI_LOGICAL

    call MPI_Type_create_struct(N, blocklen, disp, etype, myMPItype, iout)

  end subroutine create_mpimask_inc
#endif


end module type_inc