V3FIT
perturbation.f90
1  MODULE perturbation
2  USE v3_utilities, ONLY: assert, assert_eq
3  USE quantities
4  USE descriptor_mod, ONLY: iam
5  USE siesta_state, ONLY: update_state, update_state
9  USE nscalingtools, ONLY: startglobrow, endglobrow
10 
11  IMPLICIT NONE
12 
13  PRIVATE
14 
15  INTEGER :: nsmin
16  INTEGER :: nsmax
17  INTEGER :: irad_scale = 11
18  INTEGER, PUBLIC :: niter_max !width of perturbation (relative to 1)
19  REAL(dp), ALLOCATABLE :: jdotb(:,:,:) !parallel current
20  REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: bmnc_res
21  REAL(dp), ALLOCATABLE, DIMENSION(:,:,:) :: bmns_res !resonant components of JDOTB
22 
23  PUBLIC :: init_data, add_perturb
24 
25  CONTAINS
26 
27 !-------------------------------------------------------------------------------
35 !-------------------------------------------------------------------------------
36  FUNCTION init_data()
37  USE date_and_computer
38  USE siesta_namelist
39 
40  IMPLICIT NONE
41 
42 ! Declare Arguments
43  INTEGER :: init_data
44 
45 ! Local variables
46  INTEGER :: istat
47  INTEGER :: index1
48  INTEGER :: imon
49  INTEGER :: numargs
50  CHARACTER(LEN=10) :: date0
51  CHARACTER(LEN=10) :: time0
52  CHARACTER(LEN=10) :: zone0
53  CHARACTER(LEN=256) :: temp
54  CHARACTER(LEN=100) :: command_arg
55  CHARACTER(LEN=256) :: filename
56 
57 ! Start of executable code
58 
59 ! Read Command line arguments if present.
60  CALL getcarg(1, command_arg, numargs)
61 
62  IF (numargs .GT. 0) THEN
63  IF (len_trim(temp) .NE. 0) THEN
64  IF (command_arg(1:7) .NE. 'siesta_' .AND. &
65  command_arg(1:7) .NE. 'SIESTA_') THEN
66  temp = 'siesta_' // trim(command_arg)
67  END IF
68  istat = len_trim(temp)
69  IF (temp(istat - 3:istat) .NE. '.jcf' .AND. &
70  temp(istat - 3:istat) .NE. '.JCF') THEN
71  temp = trim(temp) // '.jcf'
72  END IF
73  END IF
74  ELSE
75  temp = 'siesta.jcf'
76  END IF
77 
78  CALL siesta_namelist_read(temp)
79  init_data = nprecon
80 
81  irad_scale = min(irad_scale, nsin)
82  ngmres_type = min(2, max(1, ngmres_type))
83  iortho = min(3, max(0, iortho))
84  niter_max = niter
85 
86 ! Separate out the name form the wout file name. Wout files sould have the form
87 ! of wout_name.nc. Remove the leading wout_ and trailing .nc.
88  IF ((wout_file(1:5) .ne. 'WOUT_' .and. &
89  wout_file(1:5) .ne. 'wout_') .or. &
90  wout_file(len_trim(wout_file) - 2:len_trim(wout_file)) .ne. &
91  '.nc') THEN
92  CALL assert(.false., 'ERROR: ' // trim(wout_file) // &
93  & ' is not a valid wout file name.')
94  ELSE
95  temp = wout_file(6:len_trim(wout_file) - 3)
96  END IF
97 
98  istat = 0
99  IF (iam .EQ. 0) THEN
100  WRITE (filename,1000) trim(temp), nsin, mpolin, ntorin
101  OPEN (unit=unit_out, file=filename, iostat=istat)
102  END IF
103  CALL assert_eq(istat, 0, 'ERROR WRITING SIESTA OUTPUT FILE')
104  IF (iam .NE. 0) RETURN
105 
106  IF (lverbose) THEN
107  WRITE (*,1001) '4.0', 100917
108  END IF
109  WRITE (unit_out,1001) '4.0', 100917
110 
111  WRITE (unit_out, 1002) trim(temp)
112  IF (lverbose) THEN
113  WRITE (*,1003) trim(temp)
114  END IF
115 
116 ! Format date and time.
117  CALL date_and_time(date0,time0,zone0)
118  READ (date0(5:6),2000) imon
119  WRITE (unit_out,1004) months(imon), date0(7:8), date0(1:4), &
120  time0(1:2), time0(3:4), time0(5:6)
121 
122  DO istat = 1, SIZE(helpert)
123  IF (helpert(istat).NE.zero .OR. helperta(istat).NE.zero) THEN
124  WRITE (unit_out, 1005) istat, mres(istat), helpert(istat), &
125  helperta(istat)
126  END IF
127  END DO
128 
129  WRITE (unit_out, 1006) ngmres_type, iortho, lcolscale
130  CALL flush(unit_out)
131 
132 1000 FORMAT('output_',a,'_',i4.4,2('X',i3.3),'.txt')
133 1001 FORMAT(62('-'),/, &
134  1x,'SIESTA MHD EQUILIBRIUM CODE v',a,' (',i6,')', /,1x, &
135  'Scalable Island Equilibrium Solver for Toroidal Applications',/, &
136  62('-'),/)
137 1002 FORMAT('CASE: ',a)
138 1003 FORMAT('OUTPUT FILE (SCREEN DUMP): output_',a,'.txt')
139 1004 FORMAT(' DATE = ',a3,' ',a2,',',a4,' ',' TIME = ',2(a2,':'),a2,/)
140 1005 FORMAT(i2,' mres: ',i4,' HelPert: ',1pe9.2,' HelPertA: ',1pe9.2)
141 1006 FORMAT(/,' ngmres_type: ', i4,' iOrtho: ', i4, ' lColScale: ', l2)
142 
143 2000 FORMAT(i2)
144 
145  END FUNCTION
146 
147  SUBROUTINE add_perturb (xc, getwmhd)
148  USE siesta_error
149  USE fourier, ONLY: f_cos, f_sin, f_none
151  USE island_params, ONLY: fourier_context
152 
153 !-----------------------------------------------
154 ! D u m m y A r g u m e n t s
155 !-----------------------------------------------
156  REAL(dp) :: xc(:)
157  REAL(dp), EXTERNAL :: getwmhd
158 !-----------------------------------------------
159 ! L o c a l V a r i a b l e s
160 !-----------------------------------------------
161  INTEGER,PARAMETER :: ipert_sign=2
162  INTEGER :: js, l, iprint, mres0, nres0, isign1, icount, &
163  irscale, imin(2), jstart, istat, jsave
164  REAL(dp) :: w0, w1, wmhd, eta_factor_save, p_width_min
165  REAL(dp) :: normal, HelPert0, HelPert0A, HP, rad, &
166  chip0, phip0
167  LOGICAL :: lresist_save
168  REAL(dp) :: p_width
169 
170 !-----------------------------------------------
171 !
172 ! Add helical RESISTIVE flux perturbation on full mesh
173 ! Approximate nonideal E_sub ~ f(mu+nv) B_sub in update_bfield (E ~ B)
174 !
175  IF (ntor.EQ.0 .OR. (all(helpert.EQ.zero) &
176  .AND. all(helperta.EQ.zero))) RETURN
177 
178 ! INITIAL STATE: allocate buv_res so bsubXijf will be computed in init_state
179  nsmin = max(1,startglobrow - 1)
180  nsmax = min(ns,endglobrow + 1)
181 
182  ALLOCATE (buv_res(ntheta,nzeta,nsmin:nsmax), &
183  jdotb(ntheta,nzeta,nsmin:nsmax), stat=istat)
184  CALL assert(istat.eq.0,'ALLOCATION ERROR IN add_perturbation')
185 
186  lresist_save = lresistive
187  lresistive=.false.
188  eta_factor_save = eta_factor
189  eta_factor=1
190  xc = 0
191  w0 = getwmhd(xc) !Get latest current and bsubXijf
192 
193  IF (iam .EQ. 0) THEN
194  DO iprint = 6, unit_out, unit_out-6
195  IF (.NOT.lverbose .AND. iprint.EQ.6) cycle
196  WRITE (iprint, '(/,a,/,2a)') &
197  ' Adding helical magnetic field perturbations', &
198  ' 10^6 X Del-W mres nres HelPert', &
199  ' rad |m*chip+n*phip| iota radial width'
200  END DO
201  ENDIF
202 
203 #if defined(JDOTB_PERT)
204 ! Compute jdotb to extract resonant components of sqrt(g)*J dot B
205  jdotb = ksupsijf0(:,:,nsmin:nsmax)*bsubsijf(:,:,nsmin:nsmax) &
206  + ksupuijf0(:,:,nsmin:nsmax)*bsubuijf(:,:,nsmin:nsmax) &
207  + ksupvijf0(:,:,nsmin:nsmax)*bsubvijf(:,:,nsmin:nsmax)
208 
209  ALLOCATE (bmnc_res(0:mpol,-ntor:ntor, nsmin:nsmax), &
210  bmns_res(0:mpol,-ntor:ntor, nsmin:nsmax), stat=istat)
211  CALL assert(istat.eq.0,'ISTAT != 0 IN ADD_PERT')
212 
213  bmns_res = 0
214  CALL fourier_context%tomnsp(jdotb, bmnc_res, f_cos)
215  IF (lasym) THEN
216  CALL fourier_context%tomnsp(jdotb, bmns_res, f_sin)
217  END IF
218 #endif
219 
220 ! Compute responses to resonant resistitive perturbations
221  lresistive = .true.
222  normal = hs_i**2
223 
224  res_test: DO icount = 1, SIZE(helpert)
225  helpert0 = abs(helpert(icount)/normal)
226  helpert0a= abs(helperta(icount)/normal)
227  mres0 = abs(mres(icount))
228  IF ((helpert0 .EQ. zero .AND. &
229  helpert0a .EQ. zero) .OR. mres0.GT.mpol) cycle
230 
231 !Scan in radius to determine primary resonance
232 
233  nres_test: DO nres0 = -ntor, ntor
234  jstart = 3 !Avoid 0/0 chip/phip at origin
235  jsurf_test: DO WHILE (jstart .LT. ns-1)
236 
237  IF (.NOT.findresonance(mres0, nres0, rad, jstart)) EXIT
238  w1 = 2*w0
239  imin(1) = 1
240  imin(2) = 1
241 
242  pert_sign: DO isign1 = 1, 2
243 
244 ! NOTE: in update_bfield, where perturbed b-field is computed, this is multiplied
245 ! by eta_prof = rho*(1-rho) so it vanishes at both ends. Multiply again
246 ! here by that factor to assure radial derivatives entering in dB also vanish
247 ! at endpoints s=0,1
248 
249  scale_test: DO irscale = 1, irad_scale
250  CALL getrespert(irscale, isign1, mres0, nres0, rad, &
251  helpert0, helpert0a, chip0, phip0, p_width)
252  xc = 0
253  wmhd = getwmhd(xc)
254  IF (wmhd .LT. w1) THEN
255  imin(1) = irscale
256  imin(2) = isign1
257  w1 = wmhd
258  p_width_min = p_width
259  ENDIF
260  END DO scale_test
261  END DO pert_sign
262 
263 ! Make sure energy decreases
264  wmhd = w1
265 ! recompute perturbation buv_res here
266  irscale = imin(1)
267  isign1 = imin(2)
268 
269  IF (iam .EQ. 0) THEN
270  hp = helpert0
271  IF (isign1 .EQ. 2) hp = -hp
272 
273  DO iprint = 6, unit_out, unit_out-6
274  IF (.NOT.lverbose .AND. iprint.EQ.6) cycle
275  WRITE (iprint, 100) 10**6*(wmhd-w0), mres0, nres0, &
276  hp*normal, rad, abs(mres0*chip0+nres0*nfp*phip0), &
277  chip0/phip0, p_width_min
278  END DO
279  100 FORMAT(1p,e12.3,2(i8),3x,1pe10.2,0p,f8.2,f11.2,4x,2(f11.2))
280  CALL flush(unit_out)
281  END IF
282 
283  CALL getrespert(irscale, isign1, mres0, nres0, rad, &
284  helpert0, helpert0a, chip0, phip0, p_width)
285 
286  wmhd = getwmhd(xc)
287  IF (abs(wmhd-w1) .GT. 1.e-12_dp) THEN
288  CALL siesta_error_set_error(siesta_error_general, &
289  'Error1 in Perturb')
290  END IF
291  xc = 0
292  CALL update_state(.false., zero, zero)
293 !Compute dW relative to perturbed state
294  w0 = wmhd
295 
296  END DO jsurf_test ! Look for multiple resonances
297  END DO nres_test
298  END DO res_test
299 
300  IF (iam .EQ. 0) THEN
301  DO iprint = 6, unit_out, unit_out-6
302  IF (.NOT.lverbose .AND. iprint.EQ.6) cycle
303  WRITE (iprint, *)
304  END DO
305  END IF
306 
307  DEALLOCATE (buv_res, jdotb, bmnc_res, bmns_res, stat=istat)
308  lresistive = lresist_save
309  eta_factor = eta_factor_save
310 
311  END SUBROUTINE add_perturb
312 
313 
314  LOGICAL FUNCTION findresonance(mres0, nres0, resrad, jstart)
315 !-----------------------------------------------
316 ! D u m m y A r g u m e n t s
317 !-----------------------------------------------
318  INTEGER, INTENT(in) :: mres0
319  INTEGER, INTENT(in) :: nres0
320  INTEGER, INTENT(inout) :: jstart
321  REAL(dp), INTENT(out) :: resrad
322 !-----------------------------------------------
323 ! L o c a l V a r i a b l e s
324 !-----------------------------------------------
325  INTEGER :: js, jmin
326  REAL(dp) :: del1, del2, rho1, rho2, delmin
327 !-----------------------------------------------
328 !
329 ! Starting at jstart, find place where mres0*chip+n*nfp*phip is minimum (changes sign)
330 !
331  del2 = 0
332  resrad = 0
333  delmin = -1
334  IF (mres0*nres0 .EQ. 0) THEN
335  findresonance = .false.
336  RETURN
337  END IF
338 ! Check for zero crossing
339  jmin = jstart
340  DO js = jstart, ns - 1
341  del1 = mres0*chipf_i(js) + nres0*nfp*phipf_i(js)
342  del1 = del1/max(abs(mres0*chipf_i(js)),abs(nres0*nfp*phipf_i(js)),1.e-20_dp)
343  IF (delmin .EQ. -1 .OR. abs(del1) .LT. delmin) THEN
344  IF (delmin .EQ. -1) del2 = del1
345  delmin = abs(del1)
346  jmin = js
347  END IF
348 
349  IF (del1*del2 < zero) THEN
350  jstart = js+1
351  rho2 = hs_i*(js-2)
352  rho1 = hs_i*(js-1)
353  resrad = (rho2*abs(del1) + rho1*abs(del2))/(abs(del1) + abs(del2))
354  delmin=0
355  EXIT
356  END IF
357  del2 = del1
358  END DO
359 
360 !IF NO ZERO-CROSSING, RESONANCE MIGHT BE VERY CLOSE
361  IF (delmin .LT. 1.e-3_dp) THEN
362  jstart = jmin+1
363  resrad = hs_i*(jmin-1)
364  findresonance=.true.
365  ELSE
366  jstart=ns-1
367  resrad = 0
368  findresonance=.false.
369  END IF
370 
371  END FUNCTION findresonance
372 
373 
374  SUBROUTINE getrespert(irscale, isign1, mres0, nres0, rad, &
375  HelPert0, HelPert0A, chip0, phip0, p_width)
376  USE fourier, ONLY: f_cos, f_sin, f_sum, f_none
377  USE siesta_namelist, ONLY: mpolin, ntorin
378  USE island_params, ONLY: fourier_context
379 
380  IMPLICIT NONE
381 
382 !-----------------------------------------------
383 ! D u m m y A r g u m e n t s
384 !-----------------------------------------------
385  INTEGER, INTENT(in) :: irscale, isign1
386  INTEGER, INTENT(in) :: mres0, nres0
387  REAL(dp), INTENT(in) :: rad
388  REAL(dp), INTENT(out) :: chip0, phip0
389  REAL(dp), INTENT(in) :: HelPert0, HelPert0A
390  REAL(dp), INTENT(out) :: p_width
391 !-----------------------------------------------
392 ! L o c a l V a r i a b l e s
393 !-----------------------------------------------
394  INTEGER :: js, istat
395  REAL(dp) :: rho, rhores, pert_prof(ns), HelP_local, &
396  helpa_local, locrad
397  REAL(dp), ALLOCATABLE :: bmn_res(:,:)
398  REAL(dp), ALLOCATABLE :: resc(:,:,:), ress(:,:,:)
399 !-----------------------------------------------
400  IF (mres0.GT.mpolin .OR. abs(nres0).GT.ntorin) RETURN
401 
402  help_local = helpert0
403  helpa_local = helpert0a
404  IF (isign1 .EQ. 2) THEN
405  help_local = -helpert0
406  helpa_local = -helpert0a
407  END IF
408 
409 ! Compute radial form factor (window-function)
410  js = int(rad/hs_i) + 1
411  IF (js.LT.1 .OR. js.GT.ns) RETURN
412  chip0 = chipf_i(js)
413  phip0 = phipf_i(js)
414  locrad = real(irscale - 1,dp)/(irad_scale - 1)
415  p_width = 0.1_dp + 0.9_dp*locrad !decay length, ~delta-fcn for irscale=1 to broad (full radius)
416  locrad = one/p_width
417  DO js = 1,ns
418  rho = hs_i*(js-1)
419  rhores = rho-rad
420  rhores = locrad*rhores
421  pert_prof(js) = one/(one + rhores*rhores) !tearing parity; mult by alpha for equal area
422  END DO
423 
424 !THIS DOESN'T SEEM TO WORK AS WELL AS THE SIMPLE FORM FACTOR
425 !SO KEEP JDOTB_PERT UNDEFINED UNTIL WE CAN IMPROVE IT
426 #if defined(JDOTB_PERT)
427  ALLOCATE(resc(0:mpol,-ntor:ntor, nsmin:nsmax), &
428  ress(0:mpol,-ntor:ntor, nsmin:nsmax), stat=istat)
429 
430  rho = max(maxval(abs(bmnc_res(mres0,nres0,:))), &
431  maxval(abs(bmns_res(mres0,nres0,:))))
432 
433  resc = 0
434  ress = 0
435  resc(mres0,nres0,:) = help_local*bmnc_res(mres0,nres0,:)
436 
437  CALL fourier_context%toijsp(resc, buv_res, f_none, f_cos)
438 
439  IF (lasym) THEN
440  ress(mres0,nres0,:) = helpa_local*bmns_res(mres0,nres0,:)
441  CALL fourier_context%toijsp(ress, buv_res, f_sum, f_sin)
442  END IF
443 
444  IF (rho .NE. zero) buv_res = buv_res/rho
445 
446 ! Apply radial form-factor
447  DO js = nsmin, nsmax
448  buv_res(:,:,js) = buv_res(:,:,js)*pert_prof(js)
449  END DO
450 
451  DEALLOCATE (resc, ress, stat=istat)
452 #else
453  ALLOCATE (bmn_res(0:mpol,-ntor:ntor), stat=istat)
454  CALL assert(istat.eq.0,'ISTAT != 0 IN GETRESPERT')
455  bmn_res = 0
456 
457  bmn_res(mres0,nres0) = help_local
458  CALL fourier_context%toijsp(bmn_res, buv_res(:,:,nsmin), f_cos, f_none)
459 
460  IF (lasym) THEN
461  bmn_res(mres0,nres0) = helpa_local
462  CALL fourier_context%toijsp(bmn_res, buv_res(:,:,nsmin), f_sin, f_sum)
463  END IF
464  DO js = nsmin + 1, nsmax
465  buv_res(:,:,js) = buv_res(:,:,nsmin)*pert_prof(js)
466  END DO
467 
468  buv_res(:,:,nsmin) = buv_res(:,:,nsmin)*pert_prof(nsmin)
469 
470  DEALLOCATE (bmn_res, stat=istat)
471 #endif
472 
473  END SUBROUTINE getrespert
474 
475  SUBROUTINE compute_resonant_epar(xc, epar)
476 !-----------------------------------------------
477 ! D u m m y A r g u m e n t s
478 !-----------------------------------------------
479  REAL(dp), INTENT(out) :: epar(ns,ntheta,nzeta)
480  REAL(dp), INTENT(in) :: xc(ns,0:mpol,-ntor:ntor,3)
481 !-----------------------------------------------
482 ! L o c a l V a r i a b l e s
483 !-----------------------------------------------
484  REAL(dp), ALLOCATABLE :: eparmn(:,:,:)
485  REAL(dp) :: rad
486  INTEGER :: mres, nres, istat, jstart
487 !-----------------------------------------------
488 !
489 ! xc(1,...,1) ARE THE RESONANT AMPLITUDES OF E||
490 ! eparmn RESONANT RESPONSE TO xc
491 ! epar IS THE RESULTING E*B/B^2 IN REAL SPACE
492 !
493  ALLOCATE (eparmn(ns,0:mpol,-ntor:ntor), stat=istat)
494  CALL assert(istat.eq.0,'Allocation error in Compute_Resonant_Epar')
495  eparmn = 0
496  epar = 0
497 
498  DO mres=0,mpol
499  DO nres=-ntor,ntor
500  jstart = 2
501  DO WHILE (jstart .lt. ns-1)
502  IF (.NOT.findresonance(mres, nres, rad, jstart)) EXIT
503  CALL assert(.false.,'AddResonantE not implemented')
504 !NOT IMPLEMENTED CALL AddResonantE (eparmn(:,mres,nres), rad, jstart)
505  END DO
506  END DO
507  END DO
508 
509  DEALLOCATE(eparmn)
510 
511  END SUBROUTINE compute_resonant_epar
512 
513 
514  END MODULE perturbation
siesta_namelist::mres
integer, dimension(20) mres
Sizes of the helical perturbation.
Definition: siesta_namelist.f90:154
siesta_namelist::mpolin
integer mpolin
Number of poloidal modes.
Definition: siesta_namelist.f90:166
shared_data::iortho
integer iortho
Orthogonalization in GMRES.
Definition: shared_data.f90:81
siesta_namelist::helperta
real(dp), dimension(20) helperta
Sizes of the helical perturbation.
Definition: siesta_namelist.f90:158
quantities
This file contains subroutines for allocating and initializing curvilinear magnetic covariant and pre...
Definition: quantities.f90:11
siesta_state
This file contains subroutines for aupdating from t to t + delta_t the magnetic field and pressure as...
Definition: siesta_state.f90:12
v3_utilities::assert_eq
Definition: v3_utilities.f:62
shared_data::ngmres_type
integer ngmres_type
GMRES control flag.
Definition: shared_data.f90:74
island_params::fourier_context
type(fourier_class), pointer fourier_context
Fourier transform object.
Definition: island_params.f90:76
siesta_namelist::niter
integer niter
Maximum number of iterations after diagonal prec.
Definition: siesta_namelist.f90:144
fourier
Module contains subroutines for computing FFT on parallel radial intervals. Converts quantities betwe...
Definition: fourier.f90:13
siesta_namelist::ntorin
integer ntorin
Number of toroidal modes.
Definition: siesta_namelist.f90:168
shared_data::lrecon
logical lrecon
Output extra information to the restart file that will be used by V3FIT.
Definition: shared_data.f90:232
v3_utilities::assert
Definition: v3_utilities.f:55
siesta_namelist::siesta_namelist_read
subroutine siesta_namelist_read(namelist_file)
Reads the namelist input file.
Definition: siesta_namelist.f90:230
fourier::f_sin
integer, parameter f_sin
Sine parity.
Definition: fourier.f90:27
shared_data::buv_res
real(dp), dimension(:,:,:), allocatable buv_res
Resonant magnetic field perturbation.
Definition: shared_data.f90:104
siesta_namelist::eta_factor
real(dp) eta_factor
Resistivity value.
Definition: siesta_namelist.f90:148
siesta_namelist::wout_file
character(len=siesta_namelist_name_length) wout_file
Filename of the VMEC woutfile.
Definition: siesta_namelist.f90:189
shared_data::lcolscale
logical lcolscale
Apply column scaling to hessian.
Definition: shared_data.f90:228
island_params
This file contains fix parameters related to the computational grids.
Definition: island_params.f90:10
shared_data::unit_out
integer, parameter unit_out
File output io unit.
Definition: shared_data.f90:39
shared_data::lasym
logical lasym
Use non-stellarator symmetry.
Definition: shared_data.f90:230
siesta_namelist::nsin
integer nsin
Radial size of the plasma grid.
Definition: siesta_namelist.f90:162
siesta_error
This module contains all the code needed to define error.
Definition: siesta_error.f90:10
siesta_namelist::lresistive
logical lresistive
Use resistive perturbaton.
Definition: siesta_namelist.f90:126
fourier::f_sum
integer, parameter f_sum
Sum fouier real space transformed quantity. This is used when a non-stellarator symmetric parity is b...
Definition: fourier.f90:43
siesta_namelist::helpert
real(dp), dimension(20) helpert
Sizes of the helical perturbation.
Definition: siesta_namelist.f90:156
fourier::f_cos
integer, parameter f_cos
Cosine parity.
Definition: fourier.f90:25
siesta_namelist
This file contains all the variables and maximum sizes of the inputs for a SIESTA namelist input file...
Definition: siesta_namelist.f90:103
shared_data
This file contains variables and parameters used by many modules in SIESTA.
Definition: shared_data.f90:10
siesta_namelist::nprecon
integer nprecon
Skip diagonal preconditioner if greater than zero.
Definition: siesta_namelist.f90:150
shared_data::hesspass_test
integer hesspass_test
Dump block and data files for testing.
Definition: shared_data.f90:83
fourier::f_none
integer, parameter f_none
Do not sum fouier real space transformed quantity. This is used when a stellarator symmetric parity i...
Definition: fourier.f90:32