V3FIT
set_dual.f
1  SUBROUTINE set_dual(data1, hi, yi, yi2, hp, yp, yp2, wten, alsq,
2  1 niota, npres, nots)
3  USE vspline
4  USE vmec_input, ONLY: tensi, tensi2, tensp, fpolyi
5  USE vparams, ONLY: zero
6  IMPLICIT NONE
7 C-----------------------------------------------
8 C D u m m y A r g u m e n t s
9 C-----------------------------------------------
10  INTEGER :: niota, npres, nots, info
11  REAL(rprec), DIMENSION(nots) :: data1
12  REAL(rprec), DIMENSION(niota) :: hi, yi, yi2
13  REAL(rprec), DIMENSION(npres) :: hp, yp, yp2
14  REAL(rprec), DIMENSION(nots) :: wten
15  REAL(rprec), DIMENSION(nots,nots) :: alsq
16 C-----------------------------------------------
17 C L o c a l V a r i a b l e s
18 C-----------------------------------------------
19  INTEGER nb, ioff
20 C-----------------------------------------------
21 !
22 ! ADD TENSION TO DIAGONAL BLOCKS
23 !
24  nb = ideriv
25  ioff = 0
26  CALL add_tension (alsq, wten, hi, tensi, tensi2, fpolyi, niota, nb
27  1 , ioff, nots)
28  CALL add_tension (alsq, wten, hp, tensp, zero, zero, npres, nb,
29  1 niota, nots)
30 
31 !
32 ! FREEZE EDGE PRESSURE IF NO PRESSURE SPECIED
33 ! COMPUTE SOLUTION FOR SPLINES
34 !
35  CALL solver (alsq, data1, nots, 1, info)
36  yi(:niota) = data1(:niota)
37  yp(:npres) = data1(1+niota:npres+niota)
38 
39 !
40 ! COMPUTE SECOND DERIVATIVES
41 !
42  CALL gety2 (yi, yi2, hi, niota, nb)
43  CALL gety2 (yp, yp2, hp, npres, nb)
44 
45  END SUBROUTINE set_dual