FIXME : Add documentation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | report_unit |
subroutine nprocs_xxf(report_unit)
use nonlinear_terms, only : nonlin
use species, only : nspec
use kt_grids, only: naky
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, nkyfacs, nsgfacs, nspfacs, ntgfacs
integer, dimension(:,:), allocatable :: facs
integer :: maxfacs
integer, allocatable, dimension(:):: spfacs, efacs, lfacs, sgfacs, tgfacs, kyfacs
integer, dimension(6) :: nfac, sdim
character(3), dimension(6):: sym
if (.not.nonlin) return
write (report_unit, fmt="('xxf sweetspot #proc up to:',i8)") npmax
maxfacs=max(nspec,negrid,nlambda,2,2*ntgrid+1,naky)/2+1
allocate (spfacs(maxfacs),efacs(maxfacs),lfacs(maxfacs),sgfacs(maxfacs),tgfacs(maxfacs),kyfacs(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 (naky, nkyfacs, kyfacs)
select case (layout)
case ('lexys','lxyes','lyxes','yxles','xyles')
sym = (/ "s ","e ","l ","sgn","tg ","y " /)
sdim = (/ nspec, negrid, nlambda, 2, 2*ntgrid+1, naky /)
nfac= (/ nspfacs, nefacs, nlfacs, nsgfacs, ntgfacs, nkyfacs /)
facs(:,1)=spfacs; facs(:,2)=efacs; facs(:,3)=lfacs
facs(:,4)=sgfacs; facs(:,5)=tgfacs; facs(:,6)=kyfacs
call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
case ('yxels')
sym = (/ "s ","l ","e ","sgn","tg ","y " /)
sdim = (/ nspec, nlambda, negrid, 2, 2*ntgrid+1, naky /)
nfac= (/ nspfacs, nlfacs, nefacs, nsgfacs, ntgfacs, nkyfacs /)
facs(:,1)=spfacs; facs(:,2)=lfacs; facs(:,3)=efacs
facs(:,4)=sgfacs; facs(:,5)=tgfacs; facs(:,6)=kyfacs
call wsweetspots(sym,sdim,nfac,facs,npmax,LUN=report_unit)
end select
deallocate (facs,spfacs,efacs,lfacs,sgfacs,tgfacs,kyfacs)
end subroutine nprocs_xxf