FIXME : Add documentation
subroutine generate_grids
implicit none
integer :: i, iter, nin
real :: d, deltaw_ok
if (.not. auto_width) then
ntheta = nthetaout
nlambda = nlambdaout
call gridgen4_1 (iperiod,nthetain+1,thetain,bmagsm, npadd, &
alknob,epsknob,bpknob,extrknob,thetamax,deltaw,widthw,tension, &
ntheta,nlambda,thetaout,bmagout,alambdaout)
return
end if
widthw = pi
do i = 0, nthetain/2
if (cvdrift(i) < 0.0) then
widthw = thetagrid(i)
exit
end if
end do
print *, "widthw: ", widthw
deltaw_ok = 0.0
do iter = 1, max_autoiter
ntheta = nthetaout
nlambda = nlambdaout
call gridgen4_1 (iperiod,nthetain+1,thetain,bmagsm, npadd, &
alknob,epsknob,bpknob,extrknob,thetamax,deltaw,widthw,tension, &
ntheta,nlambda,thetaout,bmagout,alambdaout)
print *, "iter: ", iter
d = maxval(thetaout(2:ntheta) - thetaout(1:ntheta-1))
print *, "max deltheta: ", d
nin = count(abs(thetaout(1:ntheta) - thetamax) < widthw &
.or. abs(thetaout(1:ntheta) + thetamax) < widthw)
print *, "count in +ve cvdrift: ", nin
print *, "fraction in +ve cvdrift: ", real(nin)/real(ntheta)
print *, "deltaw: ", deltaw
if (d > delth_max) then
if (deltaw_ok /= 0.0) then
deltaw = sqrt(deltaw*deltaw_ok)
else
deltaw = 0.5*deltaw
end if
print *, "max deltheta too large: ", d
if (deltaw < deltaw_ok) exit
else if (real(nin)/real(ntheta) < cv_fraction) then
print *, "fraction in +ve cvdrift too small: ", &
real(nin)/real(ntheta)
deltaw_ok = deltaw
deltaw = deltaw*(cv_fraction/(real(nin)/real(ntheta)))**2
end if
end do
if (deltaw_ok /= 0.0 .and. d > delth_max) then
deltaw = deltaw_ok
ntheta = nthetaout
nlambda = nlambdaout
call gridgen4_1 (iperiod,nthetain+1,thetain,bmagsm, npadd, &
alknob,epsknob,bpknob,extrknob,thetamax,deltaw,widthw,tension, &
ntheta,nlambda,thetaout,bmagout,alambdaout)
d = maxval(thetaout(2:ntheta) - thetaout(1:ntheta-1))
print *, "max deltheta: ", d
nin = count(abs(thetaout(1:ntheta) - thetamax) < widthw &
.or. abs(thetaout(1:ntheta) + thetamax) < widthw)
print *, "count in +ve cvdrift: ", nin
print *, "fraction in +ve cvdrift: ", real(nin)/real(ntheta)
print *, "deltaw: ", deltaw
end if
end subroutine generate_grids