FIXME : Add documentation
subroutine finish_init
use integration, only: trapezoidal_integration
implicit none
real, dimension (nbset) :: bset_save
real, dimension (-ntgrid:ntgrid) :: eik_save
! in case nbset changes after gridgen
if (nbset /= size(bset)) then
bset_save = bset(:nbset)
deallocate (bset)
allocate (bset(nbset))
bset = bset_save
end if
! in case ntgrid changes after gridgen
if (ntgrid*2+1 /= size(theta)) then
eik_save = theta(-ntgrid:ntgrid); deallocate (theta)
allocate (theta(-ntgrid:ntgrid)); theta = eik_save
eik_save = bmag(-ntgrid:ntgrid); deallocate (bmag)
allocate (bmag(-ntgrid:ntgrid)); bmag = eik_save
eik_save = gradpar(-ntgrid:ntgrid); deallocate (gradpar)
allocate (gradpar(-ntgrid:ntgrid)); gradpar = eik_save
eik_save = itor_over_B(-ntgrid:ntgrid); deallocate (itor_over_B)
allocate (itor_over_B(-ntgrid:ntgrid)); itor_over_B = eik_save
eik_save = IoB(-ntgrid:ntgrid); deallocate (IoB)
allocate (IoB(-ntgrid:ntgrid)); IoB = eik_save
eik_save = gbdrift(-ntgrid:ntgrid); deallocate (gbdrift)
allocate (gbdrift(-ntgrid:ntgrid)); gbdrift = eik_save
eik_save = gbdrift0(-ntgrid:ntgrid); deallocate (gbdrift0)
allocate (gbdrift0(-ntgrid:ntgrid)); gbdrift0 = eik_save
eik_save = cvdrift(-ntgrid:ntgrid); deallocate (cvdrift)
allocate (cvdrift(-ntgrid:ntgrid)); cvdrift = eik_save
eik_save = cvdrift0(-ntgrid:ntgrid); deallocate (cvdrift0)
allocate (cvdrift0(-ntgrid:ntgrid)); cvdrift0 = eik_save
eik_save = cdrift(-ntgrid:ntgrid); deallocate (cdrift)
allocate (cdrift(-ntgrid:ntgrid)); cdrift = eik_save
eik_save = cdrift0(-ntgrid:ntgrid); deallocate (cdrift0)
allocate (cdrift0(-ntgrid:ntgrid)); cdrift0 = eik_save
eik_save = gds2(-ntgrid:ntgrid); deallocate (gds2)
allocate (gds2(-ntgrid:ntgrid)); gds2 = eik_save
eik_save = gds21(-ntgrid:ntgrid); deallocate (gds21)
allocate (gds21(-ntgrid:ntgrid)); gds21 = eik_save
eik_save = gds22(-ntgrid:ntgrid); deallocate (gds22)
allocate (gds22(-ntgrid:ntgrid)); gds22 = eik_save
eik_save = gds23(-ntgrid:ntgrid); deallocate (gds23)
allocate (gds23(-ntgrid:ntgrid)); gds23 = eik_save
eik_save = gds24(-ntgrid:ntgrid); deallocate (gds24)
allocate (gds24(-ntgrid:ntgrid)); gds24 = eik_save
eik_save = gds24_noq(-ntgrid:ntgrid); deallocate (gds24_noq)
allocate (gds24_noq(-ntgrid:ntgrid)); gds24_noq = eik_save
eik_save = grho(-ntgrid:ntgrid); deallocate (grho)
allocate (grho(-ntgrid:ntgrid)); grho = eik_save
eik_save = jacob(-ntgrid:ntgrid); deallocate (jacob)
allocate (jacob(-ntgrid:ntgrid)); jacob = eik_save
eik_save = Rplot(-ntgrid:ntgrid); deallocate (Rplot)
allocate (Rplot(-ntgrid:ntgrid)); Rplot = eik_save
eik_save = Zplot(-ntgrid:ntgrid); deallocate (Zplot)
allocate (Zplot(-ntgrid:ntgrid)); Zplot = eik_save
eik_save = aplot(-ntgrid:ntgrid); deallocate (aplot)
allocate (aplot(-ntgrid:ntgrid)); aplot = eik_save
eik_save = Rprime(-ntgrid:ntgrid); deallocate (Rprime)
allocate (Rprime(-ntgrid:ntgrid)); Rprime = eik_save
eik_save = Zprime(-ntgrid:ntgrid); deallocate (Zprime)
allocate (Zprime(-ntgrid:ntgrid)); Zprime = eik_save
eik_save = aprime(-ntgrid:ntgrid); deallocate (aprime)
allocate (aprime(-ntgrid:ntgrid)); aprime = eik_save
eik_save = Bpol(-ntgrid:ntgrid); deallocate (Bpol)
allocate (Bpol(-ntgrid:ntgrid)); Bpol = eik_save
end if
bmax = maxval(bmag)
bmin = minval(bmag)
! ?? check Krook collision operator coding which is only place eps is used
! the line with bmin/bmax was the original coding. Changed in 2002-2004 time
! frame to 1.0 - 1.0/bmax , now changed back (8.19.04) BD
! Now only used in le_grids to check if we have any trapped particles
eps_trapped = 1.0 - sqrt(bmin/bmax)
if (.not. allocated(theta2)) allocate (theta2(-ntgrid:ntgrid))
if (.not. allocated(delthet)) allocate (delthet(-ntgrid:ntgrid))
if (.not. allocated(delthet2)) allocate (delthet2(-ntgrid:ntgrid))
theta2 = theta*theta
delthet(:ntgrid-1) = theta(-ntgrid+1:) - theta(:ntgrid-1)
delthet(ntgrid) = 0.!delthet(-ntgrid)
delthet2 = delthet*delthet
! Note here we redefine jacob despite the handling in the above if block
! suggesting this has been defined.
jacob = 1.0/(drhodpsi*gradpar*bmag)
! Calculate the weight used in the field line average routine to save
! repeated calculation of this constant
field_line_average_weight = 1.0/trapezoidal_integration(theta, jacob)
end subroutine finish_init