V3FIT
unique_boundary_PG.f
1  SUBROUTINE unique_boundary_pg
2  > (rbc, zbs, rhobc, nmax, mmax, mpol,ntor)
3  USE stel_kinds
4  IMPLICIT NONE
5 !-----------------------------------------------
6 C D u m m y A r g u m e n t s
7 !-----------------------------------------------
8  INTEGER, INTENT(in) :: nmax, mmax, mpol, ntor
9  REAL(rprec), DIMENSION(-nmax:nmax,-mmax:mmax),
10  > INTENT(inout) :: rhobc
11  REAL(rprec), DIMENSION(-nmax:nmax,0:mmax), INTENT(out) ::
12  1 rbc, zbs
13 !-----------------------------------------------
14 ! L o c a l P a r a m e t e r s
15 !-----------------------------------------------
16  INTEGER :: mcount, ncount
17  REAL(rprec), PARAMETER :: zero = 0, one = 1
18  INTEGER :: mb, nb, m_bdyn, m_bdyp, n_bdy
19  REAL(rprec) :: rnorm, r00
20 !-----------------------------------------------
21 
22  rbc(:,0:mpol) = zero
23  zbs(:,0:mpol) = zero
24 
25  m_bdyn = 0
26  m_bdyp = 0
27  n_bdy = 0
28  DO mcount = -mmax, mmax
29  DO ncount = -nmax, nmax
30  IF (rhobc(ncount,mcount) .ne. zero ) THEN
31  m_bdyn = min(m_bdyn,mcount)
32  m_bdyp = max(m_bdyp,mcount)
33  n_bdy = max(n_bdy,abs(ncount))
34  END IF
35  END DO
36  END DO
37 !
38  rnorm = rhobc(0,0)/rhobc(0,1)
39 !
40 ! note: rhobc(0,0)=1.0 in delta representation
41 ! we USE it to temporarily store the
42 ! actual major radius
43 !
44  r00 = rhobc(0,0)
45  rhobc(0,0) = one
46 
47  DO mcount = m_bdyn, 0
48  mb = iabs(mcount) + 1
49  DO ncount = -n_bdy, n_bdy
50  nb = -ncount
51  rbc( nb, mb) = rbc( nb, mb) + rhobc( ncount, mcount)
52  zbs( nb, mb) = zbs( nb, mb) + rhobc( ncount, mcount)
53  END DO
54  END DO
55  DO mcount = 1, m_bdyp
56  mb = mcount - 1
57  DO ncount = -n_bdy, n_bdy
58  nb = ncount
59  rbc( nb, mb) = rbc( nb, mb) + rhobc( ncount, mcount)
60  zbs( nb, mb) = zbs( nb, mb) - rhobc( ncount, mcount)
61  END DO
62  END DO
63  DO ncount = 1, ntor
64  rbc( ncount, 0 ) = rbc( ncount, 0 ) + rbc( -ncount, 0 )
65  rbc( -ncount, 0 ) = zero
66  zbs( ncount, 0 ) = zbs( ncount, 0 ) - zbs( -ncount, 0 )
67  zbs( -ncount, 0 ) = zero
68  END DO
69  zbs( 0, 0 ) = zero
70 
71  DO mcount = 0, mpol
72  DO ncount = -ntor, ntor
73  rbc(ncount,mcount)=rnorm*rbc(ncount,mcount)
74  zbs(ncount,mcount)=rnorm*zbs(ncount,mcount)
75  END DO
76  END DO
77  rbc(0,0) = r00
78  rhobc(0,0) = r00
79 
80 
81  END SUBROUTINE unique_boundary_pg