GRAY.f bugs fixed to avoid NaN when rays do not enter into plasma

GRAY.f "ad-hoc" fix in subroutine contour_psi, that MUST be checked
This commit is contained in:
Daniela Farina 2012-07-13 16:24:03 +00:00
parent 6153060056
commit b7c4630657

View File

@ -208,7 +208,8 @@ c
common/dsds/dst common/dsds/dst
common/index_rt/index_rt common/index_rt/index_rt
common/ipass/ipass common/ipass/ipass
c common/rwallm/rwallm
pabstot=0.0d0 pabstot=0.0d0
currtot=0.0d0 currtot=0.0d0
taumn=1d+30 taumn=1d+30
@ -324,6 +325,9 @@ c print*,' '
if(psimin.gt.1.0d0.and.rrm11.gt.rcen.and.index_rt.gt.1) if(psimin.gt.1.0d0.and.rrm11.gt.rcen.and.index_rt.gt.1)
. istop=1 . istop=1
if(rrm11.lt.rwallm.and.ipass.eq.1) istop=1
if(iovmin.eq.2.and.ipass.eq.1) istop=1
if(iovmin.eq.3) istop=1 if(iovmin.eq.3) istop=1
c print ray positions for j=nray in local reference system c print ray positions for j=nray in local reference system
@ -1389,31 +1393,29 @@ c
end if end if
print*,' ' print*,' '
c
c compute B_toroidal on axis c compute B_toroidal on axis
c
btaxis=fpol(1)/rmaxis btaxis=fpol(1)/rmaxis
btrcen=abs(btrcen)*factb btrcen=abs(btrcen)*factb
print'(a,f8.4)','factb = ',factb print'(a,f8.4)','factb = ',factb
print'(a,f8.4)','|BT_centr|= ',btrcen print'(a,f8.4)','|BT_centr|= ',btrcen
print'(a,f8.4)','|BT_axis| = ',abs(btaxis) print'(a,f8.4)','|BT_axis| = ',abs(btaxis)
c
c compute normalized rho_tor from eqdsk q profile c compute normalized rho_tor from eqdsk q profile
c
call rhotor(nr) call rhotor(nr)
c phitedge=deltapsi*rhotsx*2*pi c phitedge=deltapsi*rhotsx*2*pi
c rrtor=sqrt(phitedge/abs(btrcen)/pi) c rrtor=sqrt(phitedge/abs(btrcen)/pi)
c
c compute flux surface averaged quantities c compute flux surface averaged quantities
c
rup=rmaxis rup=rmaxis
rlw=rmaxis rlw=rmaxis
zup=(zbmax+zmaxis)/2.0d0 zup=zmaxis+(zbmax-zmaxis)/10.0d0
zlw=(zmaxis+zbmin)/2.0d0 zlw=zmaxis-(zmaxis-zbmin)/10.0d0
call flux_average call flux_average
c
c locate psi surface for q=1.5 and q=2 c locate psi surface for q=1.5 and q=2
c
rup=rmaxis rup=rmaxis
rlw=rmaxis rlw=rmaxis
zup=(zbmax+zmaxis)/2.0d0 zup=(zbmax+zmaxis)/2.0d0
@ -1809,7 +1811,7 @@ c
function frhotor_av(psi) function frhotor_av(psi)
implicit real*8(a-h,o-z) implicit real*8(a-h,o-z)
parameter(nnintp=101) parameter(nnintp=41)
dimension rpstab(nnintp),crhotq(nnintp,4) dimension rpstab(nnintp),crhotq(nnintp,4)
common/pstab/rpstab common/pstab/rpstab
common/eqnn/nr,nz,npp,nintp common/eqnn/nr,nz,npp,nintp
@ -2055,18 +2057,17 @@ c
if(ier.gt.0) print*,' profil =',ier if(ier.gt.0) print*,' profil =',ier
val=h+psiaxis0/psia val=h+psiaxis0/psia
call sproota(val,tr,nsr,czc,zeroc,mest,m,ier) call sproota(val,tr,nsr,czc,zeroc,mest,m,ier)
call sort (mest, zeroc)
if (zeroc(1).gt.rwallm) then if (zeroc(1).gt.rwallm) then
rcn(ic)=zeroc(1) iic=1
zcn(ic)=zc
rcn(2*np+2-ic)=zeroc(2)
zcn(2*np+2-ic)=zc
else else
rcn(ic)=zeroc(2) iic=2
zcn(ic)=zc if (zeroc(2).lt.rwallm) iic=3
rcn(2*np+2-ic)=zeroc(3)
zcn(2*np+2-ic)=zc
end if end if
rcn(ic)=zeroc(iic)
zcn(ic)=zc
rcn(2*np+2-ic)=zeroc(iic+1)
zcn(2*np+2-ic)=zc
end do end do
if (ipr.gt.0) then if (ipr.gt.0) then
do ii=1,2*np+1 do ii=1,2*np+1
@ -2077,7 +2078,22 @@ c
end if end if
return return
111 format(i6,12(1x,e12.5)) 111 format(i6,12(1x,e12.5))
99 format(2i6,12(1x,e16.8e3)) 99 format(12(1x,e12.5))
end
subroutine sort(n,a)
implicit none
integer n,i,j
double precision a(n),temp
do i = 2, n
j = i - 1
temp = a(i)
do while (j.ge.1.and.a(j).gt.temp)
a(j+1) = a(j)
j = j - 1
end do
a(j+1) = temp
end do
end end
c c
c c
@ -2086,7 +2102,7 @@ c
implicit real*8 (a-h,o-z) implicit real*8 (a-h,o-z)
real*8 lam real*8 lam
parameter(nnintp=101,ncnt=100,ncntt=2*ncnt+1,nlam=101) parameter(nnintp=41,ncnt=100,ncntt=2*ncnt+1,nlam=41)
parameter(zero=0.0d0,one=1.0d0) parameter(zero=0.0d0,one=1.0d0)
parameter(pi=3.14159265358979d0,ccj=1.0d+7/(4.0d0*pi)) parameter(pi=3.14159265358979d0,ccj=1.0d+7/(4.0d0*pi))
parameter(ksp=3,njest=nnintp+ksp+1,nlest=nlam+ksp+1) parameter(ksp=3,njest=nnintp+ksp+1,nlest=nlam+ksp+1)
@ -2179,10 +2195,10 @@ c computation of flux surface averaged quantities
ffc(1)=fc ffc(1)=fc
rhot2q=0.0d0 rhot2q=0.0d0
rup=rmaxis C rup=rmaxis
rlw=rmaxis C rlw=rmaxis
zup=(zbmax+zmaxis)/2.0d0 C zup=(zbmax+zmaxis)/2.0d0
zlw=(zmaxis+zbmin)/2.0d0 C zlw=(zmaxis+zbmin)/2.0d0
do jp=2,nintp do jp=2,nintp
height=dble(jp-1)/dble(nintp-1) height=dble(jp-1)/dble(nintp-1)
@ -4208,7 +4224,7 @@ c
subroutine valpsispl(rpsi,voli,dervoli,areai,rrii,rbavi, subroutine valpsispl(rpsi,voli,dervoli,areai,rrii,rbavi,
. bmxi,bmni,fci,intp) . bmxi,bmni,fci,intp)
implicit real*8 (a-h,o-z) implicit real*8 (a-h,o-z)
parameter(nnintp=101) parameter(nnintp=41)
dimension rpstab(nnintp),cbmx(nnintp,4),cbmn(nnintp,4) dimension rpstab(nnintp),cbmx(nnintp,4),cbmn(nnintp,4)
dimension cvol(nnintp,4),crri(nnintp,4),crbav(nnintp,4) dimension cvol(nnintp,4),crri(nnintp,4),crbav(nnintp,4)
dimension carea(nnintp,4),cfc(nnintp,4) dimension carea(nnintp,4),cfc(nnintp,4)
@ -4242,7 +4258,7 @@ c
c c
subroutine ratioj(rpsi,ratj1i,ratj2i) subroutine ratioj(rpsi,ratj1i,ratj2i)
implicit real*8 (a-h,o-z) implicit real*8 (a-h,o-z)
parameter(nnintp=101) parameter(nnintp=41)
dimension rpstab(nnintp),cratj1(nnintp,4),cratj2(nnintp,4) dimension rpstab(nnintp),cratj1(nnintp,4),cratj2(nnintp,4)
common/pstab/rpstab common/pstab/rpstab
common/eqnn/nr,nz,npp,nintp common/eqnn/nr,nz,npp,nintp
@ -5550,7 +5566,7 @@ c gg=F(u)/u with F(u) as in Cohen paper
subroutine vlambda(alam,psi,fv,dfv) subroutine vlambda(alam,psi,fv,dfv)
implicit real*8 (a-h,o-z) implicit real*8 (a-h,o-z)
parameter (nnintp=101,nlam=101) parameter (nnintp=41,nlam=41)
parameter(ksp=3,njest=nnintp+ksp+1,nlest=nlam+ksp+1) parameter(ksp=3,njest=nnintp+ksp+1,nlest=nlam+ksp+1)
parameter(lwrk=4*(nnintp+nlam)+11*(njest+nlest)+ parameter(lwrk=4*(nnintp+nlam)+11*(njest+nlest)+
. njest*nnintp+nlest+54) . njest*nnintp+nlest+54)