V3FIT
initpsi.f
1  SUBROUTINE initpsi(psic,psiv,xval,chipsi,chipsipsi,dpsi
2  $ ,npsi,alpsi,dchi,itype)
3 c------------------------------------------------------------------------
4 c SUBROUTINE which determines psi coordinate variables
5 c CALLed by init and by wrtcamino
6 c itype=0 gives equally spaced psic
7 c itype=1 gives equally spaced psiv
8 c note that not ALL quantities are calculated for itype=1
9 c------------------------------------------------------------------------
10  USE precision
11  IMPLICIT NONE
12  REAL(rprec) :: psic(*),psiv(*),xval(*),chipsi(*),chipsipsi(*)
13  REAL(rprec) :: alpsi, dchi, dpsi
14  INTEGER :: npsi, itype, i
15  REAL :: fpi, xend, pi
16  pi=acos(-1._dbl)
17  IF(itype.eq.0) THEN
18  dpsi=1./(npsi-1.)
19  DO i=1,npsi
20  psic(i)=(i-1)*dpsi
21  IF(alpsi.ge.0.) THEN
22  xval(i)=(1.+alpsi)*psic(i)**2/(1.+alpsi*psic(i))
23  chipsi(i)=dchi*(1.+alpsi)*(2.+alpsi*psic(i))*
24  $ psic(i)/(1.+alpsi*psic(i))**2
25  chipsipsi(i)=dchi*2.*(1.+alpsi)
26  $ /(1.+alpsi*psic(i))**3
27  ELSE
28  IF(alpsi.lt.(-1.)) THEN
29  print *,"error in alpsi"
30  stop
31  ENDIF
32  fpi=-alpsi*pi
33  xend=sin(fpi*0.5)**2
34  xval(i)=(sin(psic(i)*fpi*0.5))**2/xend
35  chipsi(i)=dchi*fpi*sin(psic(i)*fpi)*0.5/xend
36  chipsipsi(i)=dchi*fpi**2*cos(psic(i)*fpi)*0.5/xend
37  END IF
38  psiv(i)=xval(i)*dchi
39  END DO
40  xval(npsi)=1.0
41  psic(npsi)=1.
42  psiv(npsi)=dchi
43  ELSE
44  dpsi=1./(npsi-1.)
45  DO i=2,npsi
46  xval(i)=(i-1)*dpsi
47  IF(alpsi.ge.0.) THEN
48  psic(i)=(alpsi*xval(i)+sqrt((alpsi*xval(i))**2+
49  $ 4.*(1+alpsi)*xval(i)))/(2.*(1.+alpsi))
50  ELSE
51  IF(alpsi.lt.(-1.)) THEN
52  print *,"error in alpsi"
53  stop
54  ENDIF
55  fpi=-alpsi*pi
56  xend=sin(fpi*0.5)**2
57  psic(i)=asin(sqrt(xval(i)*xend))*2./fpi
58  END IF
59  psiv(i)=xval(i)*dchi
60  END DO
61  xval(1)=0.
62  psic(1)=0.
63  psiv(1)=0.
64  xval(npsi)=1.0
65  psic(npsi)=1.
66  psiv(npsi)=dchi
67  END IF
68  RETURN
69  END SUBROUTINE initpsi