1 SUBROUTINE bootsj(aibstot, extension, iunit_in)
32 REAL(rprec) :: aibstot
33 CHARACTER*(*) :: extension
37 INTEGER,
PARAMETER :: nfax = 13
38 INTEGER,
PARAMETER :: indata0 = 7
39 INTEGER,
PARAMETER :: jbs_file=59, ans_file=18, ans_dat_file=19
40 REAL(rprec) :: one = 1, p5 = .5_dp
44 INTEGER,
DIMENSION(nfax) :: ifaxu, ifaxv
45 INTEGER :: ntrigu, ntrigv
46 INTEGER :: irho, irho1, ierr, iunit, ijbs, ians, ians_plot
47 REAL(rprec),
DIMENSION(:),
ALLOCATABLE :: cputimes
48 REAL(rprec) :: time1, timecpu, time2, r, x, al31t, gradbs1,
49 1 gradbs2, gradbs3, gradbs4, al31s
53 REAL(rprec) ,
EXTERNAL :: al31
60 IF (lscreen)
WRITE (*, 4) version_
61 4
FORMAT(/,
' Start BOOTSJ: Version ', a)
66 CALL safe_open(iunit, ierr,
'input.' // trim(extension),
'old',
69 print *,
' Error opening input file: input.', trim(extension)
74 CALL safe_open(ijbs, ierr,
'jBbs.'//trim(extension),
'replace',
78 CALL safe_open(ians, ierr,
'answers.'//trim(extension),
'replace',
81 ians_plot = ans_dat_file
82 CALL safe_open(ians_plot, ierr,
'answers_plot.'//trim(extension),
83 1
'replace',
'formatted')
87 CALL datain(trim(extension), iunit_in, iunit, ians)
90 ntrigu = 3*nthetah/2 + 1
92 ALLOCATE (cputimes(irup))
94 1 dmn(-mbuse:mbuse,0:nbuse), fmn(-mbuse:mbuse,0:nbuse),
95 2 rfmn(-mbuse:mbuse,0:nbuse),alpha1mn(-mbuse:mbuse,0:nbuse),
96 3 trigsv(ntrigv),trigsu(ntrigu), stat=irho)
98 IF (irho .ne. 0) stop
'allocation error in bootsj main'
105 IF (jlist(irho) .gt. 1) jlist_idx(jlist(irho)-1) = 1
106 idx(irho) = idx(irho)*jlist_idx(irho)
116 IF(idx(irho) .eq. 0) l_boot_all = .false.
118 IF(.not.l_boot_all)
THEN
119 IF (lscreen)
WRITE (*,*)
'partial surface evaluation'
120 WRITE (ians,*)
'partial surface evaluation'
124 CALL fftfax (nthetah, ifaxu, trigsu)
125 CALL cftfax (nzetah, ifaxv, trigsv)
135 timecpu = time2 - time1
136 cputimes(irho) = timecpu
140 IF(idx(irho) .eq. 0) cycle
142 r = sqrt(rhoar(irho) + 1.e-36_dp)
148 CALL bongrid(irho, ians)
152 x = fttok(irho)/(fptok(irho)+1.e-36_dp)
154 al31t = al31(x,zeff1,alphae,alphai)
159 CALL grad (gradbs1, gradbs2, gradbs3, gradbs4, irho)
161 bsdenste(irho) = gradbs1*al31t
162 bsdensti(irho) = gradbs2*al31t
163 bstempte(irho) = gradbs3*al31t
164 bstempti(irho) = gradbs4*al31t
166 dibst(irho) = bsdenste(irho) + bsdensti(irho) + bstempte(irho)
170 IF (irho .eq. 1)
THEN
171 aibst(1) = dibst(1)*d_rho(1)
173 aibst(irho) = aibst(irho1)+dibst(irho)*d_rho(irho)
180 CALL denmf (trigsu, trigsv, ifaxu, ifaxv, irho)
188 CALL woflam (trigsu, trigsv, ifaxu, ifaxv, irho)
198 amain(irho) = p5*(one - aiogar(irho)/qsafety(irho)) + p5*(one +
199 1 aiogar(irho)/qsafety(irho))*h2(irho)
201 gbsnorm(irho) = amain(irho) + other1(irho) + aiterm1(irho)
206 x = ftrapped(irho)/(fpassing(irho)+1.e-36_dp)
207 al31s = al31(x,zeff1,alphae,alphai)
208 CALL grad (gradbs1, gradbs2, gradbs3, gradbs4, irho)
211 bsdense(irho) = gbsnorm(irho)*gradbs1*al31s
213 bsdensi(irho) = gbsnorm(irho)*gradbs2*al31s
215 bstempe(irho) = gbsnorm(irho)*gradbs3*al31s
217 bstempi(irho) = gbsnorm(irho)*gradbs4*al31s
219 dibs(irho) = bsdense(irho) + bsdensi(irho) + bstempe(irho) +
226 ajbbs(irho) = (2.0e6_dp)*mu0*dibs(irho)*
227 1 (pres1(irho)/betar(irho))/psimax
230 IF (irho .eq. 1)
THEN
231 aibs(1) = dibs(1)*d_rho(1)
233 aibs(irho) = aibs(irho1) + dibs(irho)*d_rho(irho)
239 bsnorm(irho) = dibs(irho)/(dibst(irho)+1.e-36_dp)
244 timecpu = time2 - time1
245 cputimes(irho) = timecpu
252 CALL output (cputimes, aibstot, ijbs, ians, ians_plot)
258 IF (lscreen)
WRITE (*,400) (cputimes(irup)-cputimes(1))
259 400
FORMAT(1x,
'Finished BOOTSJ, time = ', f8.3,
' sec')
261 DEALLOCATE (cputimes, trigsu, trigsv)
262 DEALLOCATE (dmn, fmn, rfmn, alpha1mn)
264 END SUBROUTINE bootsj