nprocs_yxf Subroutine

private subroutine nprocs_yxf(report_unit)

FIXME : Add documentation

Arguments

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

Contents

Source Code


Source Code

  subroutine nprocs_yxf(report_unit)
    use nonlinear_terms, only : nonlin
    use species, only : nspec
    use kt_grids, only: naky, nx
    use le_grids, only: negrid, nlambda
    use theta_grid, only: ntgrid
    use gs2_layouts, only: layout, factors
    implicit none
    integer, intent(in) :: report_unit
    integer :: nefacs, nlfacs, nkxfacs, nsgfacs, nspfacs, ntgfacs
    integer, dimension(:,:), allocatable :: facs
    integer :: maxfacs
    integer, allocatable, dimension(:):: spfacs, efacs, lfacs, sgfacs, tgfacs, kxfacs
    integer, dimension(6) :: nfac, sdim
    character(3), dimension(6):: sym

    if (.not.nonlin) return
    write (report_unit, fmt="('yxf sweetspot #proc up to:',i8)") npmax 
    maxfacs=max(nspec,negrid,nlambda,2,2*ntgrid+1,naky,nx)/2+1
    allocate (spfacs(maxfacs),efacs(maxfacs),lfacs(maxfacs),sgfacs(maxfacs),tgfacs(maxfacs),kxfacs(maxfacs),facs(maxfacs,6))
    call factors (nspec, nspfacs, spfacs)
    call factors (negrid, nefacs, efacs)
    call factors (nlambda, nlfacs, lfacs)
    call factors (2, nsgfacs, sgfacs)
    call factors (2*ntgrid+1, ntgfacs, tgfacs)
    call factors (nx, nkxfacs, kxfacs)

    select case (layout)
    case ('lexys','lxyes','lyxes','yxles','xyles')
       sym = (/ "s  ","e  ","l  ","sgn","tg ","x  " /)
       sdim = (/ nspec, negrid, nlambda, 2, 2*ntgrid+1, nx /)
       nfac= (/ nspfacs, nefacs, nlfacs, nsgfacs, ntgfacs, nkxfacs /)
       facs(:,1)=spfacs; facs(:,2)=efacs; facs(:,3)=lfacs
       facs(:,4)=sgfacs; facs(:,5)=tgfacs; facs(:,6)=kxfacs
       call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
    case ('yxels')
       sym = (/ "s  ","l  ","e  ","sgn","tg ","x  " /)
       sdim = (/ nspec, nlambda, negrid, 2, 2*ntgrid+1, nx /)
       nfac= (/ nspfacs, nlfacs, nefacs, nsgfacs, ntgfacs, nkxfacs /)
       facs(:,1)=spfacs; facs(:,2)=lfacs; facs(:,3)=efacs
       facs(:,4)=sgfacs; facs(:,5)=tgfacs; facs(:,6)=kxfacs
       call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
    end select
    deallocate (facs,spfacs,efacs,lfacs,sgfacs,tgfacs,kxfacs)
  end subroutine nprocs_yxf