nprocs_lz Subroutine

private subroutine nprocs_lz(report_unit)

FIXME : Add documentation

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: report_unit

Contents

Source Code


Source Code

  subroutine nprocs_lz(report_unit)
    use species, only : nspec
    use kt_grids, only: naky, ntheta0
    use le_grids, only: negrid
    use theta_grid, only: ntgrid
    use gs2_layouts, only: layout, factors
    implicit none
    integer, intent(in) :: report_unit
    integer :: nefacs, nkxfacs, nkyfacs, nspfacs, ntgfacs
    integer, dimension(:,:), allocatable :: facs
    integer :: maxfacs
    integer, allocatable, dimension(:):: spfacs, efacs, tgfacs, kxfacs, kyfacs
    integer, dimension(5) :: nfac, sdim
    character(3), dimension(5):: sym

    write (report_unit, fmt="('#proc sweetspots for lz_lo, up to:',i8)") npmax

    maxfacs=max(nspec,negrid,2*ntgrid+1,ntheta0,naky)/2+1
    allocate (spfacs(maxfacs),efacs(maxfacs),tgfacs(maxfacs),kxfacs(maxfacs),kyfacs(maxfacs),facs(maxfacs,6))
    call factors (nspec, nspfacs, spfacs)
    call factors (negrid, nefacs, efacs)
    call factors (2*ntgrid+1, ntgfacs, tgfacs)
    call factors (ntheta0, nkxfacs, kxfacs)
    call factors (naky, nkyfacs, kyfacs)

    select case (layout)
    case ('lexys')
       sym = (/ "s  ","y  ","x  ","e  ","tg " /)
       sdim = (/ nspec, naky, ntheta0, negrid, 2*ntgrid+1 /)
       nfac= (/ nspfacs, nkyfacs, nkxfacs, nefacs, ntgfacs /)
       facs(:,1)=spfacs; facs(:,2)=kyfacs; facs(:,3)=kxfacs
       facs(:,4)=efacs; facs(:,5)=tgfacs
       call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
    case ('lyxes','yxles','yxels')
       sym = (/ "s  ","e  ","x  ","y  ","tg " /)
       sdim = (/ nspec, negrid, ntheta0, naky, 2*ntgrid+1 /)
       nfac= (/ nspfacs, nefacs, nkxfacs, nkyfacs, ntgfacs /)
       facs(:,1)=spfacs; facs(:,2)=efacs; facs(:,3)=kxfacs
       facs(:,4)=kyfacs; facs(:,5)=tgfacs
       call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
    case ('xyles','lxyes')
       sym = (/ "s  ","e  ","y  ","x  ","tg " /)
       sdim = (/ nspec, negrid, naky, ntheta0, 2*ntgrid+1 /)
       nfac= (/ nspfacs, nefacs, nkyfacs, nkxfacs, ntgfacs /)
       facs(:,1)=spfacs; facs(:,2)=efacs; facs(:,3)=kyfacs
       facs(:,4)=kxfacs; facs(:,5)=tgfacs
       call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
    end select
    deallocate (spfacs,efacs,tgfacs,kxfacs,kyfacs,facs)
  end subroutine nprocs_lz