12 INTEGER :: ipestg, limitr, mbdry
13 REAL(rprec) :: xdim,zdim,rc,redge,zmid
15 REAL(rprec) :: totcur,psimx(2),xax(2)
16 REAL(rprec) :: zax(2),psisep,xsep,zsep
23 open (neqdsk,file=filename,status=
'old', iostat=isave)
25 print*,
"iostat=",isave,
" opening file=",trim(filename),
30 write(6,
'("begin read eqdsk")')
31 READ(neqdsk,200,err=211)(ntitle(i),i=1,5),dat,ipestg,nx,nz
33 211 print*,
' READ ERROR :ipestg,nx,nz=',ipestg,nx,nz
37 call eqdsk_allocate(nx,nz)
38 read(neqdsk,300)xdim,zdim,rc,redge,zmid
39 read(neqdsk,300)xaxis,zaxis,psiaxis,psilim,btor
40 read(neqdsk,300)totcur,psimx(1),psimx(2),xax(1),xax(2)
41 read(neqdsk,300)zax(1),zax(2),psisep,xsep,zsep
42 read(neqdsk,300)(sf(i),i=1,nx)
43 read(neqdsk,300)(sp(i),i=1,nx)
44 read(neqdsk,300)(sffp(i),i=1,nx)
45 read(neqdsk,300)(spp(i),i=1,nx)
46 read(neqdsk,300)((psixz(i,j),i=1,nx),j=1,nz)
50 read(neqdsk,300,
end=500) (qpsi(i),i=1,nx)
51 read(neqdsk,
'(2i5)') nbndry,nlim
52 limitr=nlim; mbdry=nbndry
53 allocate(xbndry(nbndry),zbndry(nbndry))
54 read(neqdsk,300) (xbndry(i),zbndry(i),i=1,nbndry)
55 allocate(xlim(nlim),zlim(nlim))
56 read(neqdsk,300) (xlim(i),zlim(i),i=1,nlim)
57 write(6,
'("finished eqdsk")')
59 read(neqdsk,
'(i5,e16.9,i5)',
end=500,err=500) kvtor,rvtor,nmass
61 read(neqdsk,300) (pressw(i),i=1,nx)
62 read(neqdsk,300) (pwprim(i),i=1,nx)
66 if(pressw(i).le.0.)
then
74 pressw(i)=pressw(isave-1)+(i-isave)/(nx-isave)*
75 $ (1.-pressw(isave-1))
76 pwprim(i)=(pressw(isave-1)-1.)/
77 $ (psilim-psiaxis)*(nx-isave)/(nx-1)
82 read(neqdsk,300) (rho0(i),i=1,nx)
83 dpsiv=(psilim-psiaxis)/(nx-1.)
85 rho0p(i)=(rho0(i+1)-rho0(i-1))/(2.*dpsiv)
87 rho0p(1)=(-3.*rho0(1)+4.*rho0(2)-rho0(3))/(2.*dpsiv)
88 rho0p(nx)=(3.*rho0(nx)-4.*rho0(nx-1)+rho0(nx-2))/(2.*dpsiv)
96 xgrid(i + 1)=redge + dx*i
100 zmin = zmid - zdim/2.0
102 zgrid(i + 1) = zmin + dz*i
107 if(sf(nx).lt.0.)
then
113 call getbpsq(psixz,nxd,nzd,xgrid,dx,dz,nx,nz,bpsq)
115 write(6,
'("begin loading geqdsk")')
116 call gfile_allocate(nx,nz,mbdry,limitr,g1)
117 read(ntitle(4)(3:8),fmt=
'(i10)')i
119 read(ntitle(5)(1:6),fmt=
'(i10)')j
121 g1%source=trim(filename)
139 g1%psirz=psixz(1:nx,1:nz)
143 g1%rbdry(1:mbdry)=xbndry(1:mbdry)
144 g1%zbdry(1:mbdry)=zbndry(1:mbdry)
145 g1%xlim(1:limitr)=xlim(1:limitr)
146 g1%ylim(1:limitr)=zlim(1:limitr)
147 write(6,
'("end loading geqdsk")')
148 end subroutine rdeqdsk
150 subroutine eqdsk_allocate(mw,mh)
152 INTEGER,
INTENT(IN) :: mw,mh
153 IF(
ALLOCATED(psixz))stop
'allocation error in reqdsk'
154 ALLOCATE(psixz(mw,mh),bpsq(mw,mh),stat=istat)
155 if(istat.ne.0)print*,
"STAT=",istat
156 ALLOCATE(sp(mw),spp(mw),sf(mw),sffp(mw),qpsi(mw)
158 if(istat.ne.0)print*,
"STAT=",istat
159 ALLOCATE(xgrid(mw),zgrid(mw))
160 ALLOCATE(pressw(mw),pwprim(mw),rho0(mw),rho0p(mw),stat=istat)
161 if(istat.ne.0)print*,
"STAT=",istat
165 nxd=mw; nzd=mh;nxzd=2000;nh2=2*nzd;nwk=2*nxd*nzd+nh2
167 ALLOCATE(csplpsi(4,nxd,nzd),stat=istat)
168 if(istat.ne.0)print*,
"STAT=",istat
170 pressw=0;pwprim=0;rho0=0;rho0p=0;csplpsi=0;xgrid=0;zgrid=0
171 psixz=0;bpsq=0;sp=0;spp=0;sf=0;sffp=0;qpsi=0
172 end subroutine eqdsk_allocate