V3FIT
setup_int.f
1  SUBROUTINE setup_int(xknots,smesh,hx,w,w1,u,u1,nk,nots,nmesh)
2  USE stel_kinds
3  USE vparams, ONLY: epstan
4  IMPLICIT NONE
5 C-----------------------------------------------
6 C D u m m y A r g u m e n t s
7 C-----------------------------------------------
8  INTEGER nots, nmesh
9  INTEGER, DIMENSION(nots) :: nk
10  REAL(rprec), DIMENSION(nots) :: xknots
11  REAL(rprec), DIMENSION(nmesh) :: smesh
12  REAL(rprec), DIMENSION(nots) :: hx
13  REAL(rprec), DIMENSION(nmesh) :: w, w1, u, u1
14 C-----------------------------------------------
15 C L o c a l V a r i a b l e s
16 C-----------------------------------------------
17  INTEGER :: ksp1, k, i, k1
18  REAL(rprec) :: smesh1, hk6
19 C-----------------------------------------------
20 !
21 ! FOR THE SPLINED FUNCTIONS CORRESPONDING TO XKNOTS (PRESSURE,
22 ! IOTA), THIS ROUTINE COMPUTES THE A AND B MATRIX ELEMENTS
23 ! (STORED IN W,U,W1,U1) WHICH ARE NEEDED TO EVALUATE THE FUNCTIONS
24 ! IN REAL-SPACE IN TERMS OF THEIR (VARIABLE) SPLINE KNOT VALUES.
25 ! THIS 'UNDOES' WHAT SPLINT ROUTINE DOES. LET Y(I) DENOTE THE
26 ! FUNCTION AT THE POINT SMESH(I) SUCH THAT
27 !
28 ! XKNOTS(K) < SMESH(I) <= XKNOTS(K)
29 !
30 ! THEN, Y(I) = W(I)*YK + U(I)*GK + W1(I)*YK1 + U1(I)*GK1
31 !
32 ! WHERE YK, GK ARE THE SPLINE AND 2ND DERIVATIVES AT KNOT K
33 ! YK1,GK1 ARE THE SAME AT KNOT K+1
34 !
35  ksp1 = nots - 1
36  smesh1 = smesh(1)
37  IF (smesh1 .le. xknots(1)) smesh(1) = xknots(1) + epstan
38 
39  nk = 0
40 
41  k = 1
42  DO i = 1, nmesh
43  140 CONTINUE
44  k1 = k + 1
45 !
46 ! XKNOTS = SQRT(HS*(JS-1)) DEFINED IN STARK,PRESSURE ROUTINE
47 ! (THIS CORRESPONDS TO APPROXIMATELY EQUAL SPACING ALONG MIDPLANE)
48 !
49  IF (smesh(i).gt.xknots(k) .and. smesh(i).le.xknots(k1)) THEN
50  nk(k) = nk(k) + 1
51  hk6 = hx(k)*hx(k)/6.0
52  w1(i) = (smesh(i)-xknots(k))/hx(k)
53  IF (w1(i)<(-epstan) .or. w1(i)>1.0+epstan) stop 'w1(i)'
54  w(i) = 1.0 - w1(i)
55  u(i) = hk6*w(i)*(w(i)*w(i)-1.0)
56  u1(i) = hk6*w1(i)*(w1(i)*w1(i)-1.0)
57  ELSE
58  k = k + 1
59  IF (k .gt. ksp1) stop 'K>KSP1'
60  GOTO 140
61  ENDIF
62  END DO
63 
64  smesh(1) = smesh1
65 
66  END SUBROUTINE setup_int