further cleaning of eccd routines
This commit is contained in:
parent
2333f83914
commit
464af38310
494
src/gray.f
494
src/gray.f
@ -5686,7 +5686,11 @@ c local constants
|
|||||||
c local variables
|
c local variables
|
||||||
integer :: lrm,ithn
|
integer :: lrm,ithn
|
||||||
real(wp_) :: amu,ratiovgr,rbn,rbx,zeff
|
real(wp_) :: amu,ratiovgr,rbn,rbx,zeff
|
||||||
|
integer :: npar
|
||||||
|
real(wp_) :: cst2
|
||||||
|
real(wp_), dimension(:), allocatable :: eccdpar
|
||||||
c common/external functions/variables
|
c common/external functions/variables
|
||||||
|
real(wp_), external :: fjch,fjncl,fjch0
|
||||||
integer :: nhmin,nhmax,iokhawa,ierr
|
integer :: nhmin,nhmax,iokhawa,ierr
|
||||||
real(wp_) :: xg,yg,anpl,anpr,vgm,derdnm,ak0,akinv,fhz,sox,
|
real(wp_) :: xg,yg,anpl,anpr,vgm,derdnm,ak0,akinv,fhz,sox,
|
||||||
. anprre,anprim,alpha,effjcd,akim,tau,psinv,tekev,dens,ddens,
|
. anprre,anprim,alpha,effjcd,akim,tau,psinv,tekev,dens,ddens,
|
||||||
@ -5712,6 +5716,16 @@ c
|
|||||||
common/btot/btot
|
common/btot/btot
|
||||||
common/bmxmn/bmax,bmin
|
common/bmxmn/bmax,bmin
|
||||||
common/fc/fc
|
common/fc/fc
|
||||||
|
c
|
||||||
|
interface
|
||||||
|
subroutine setcdcoeff(amu,zeff,rbn,rbx,fc,psinv,ieccd,
|
||||||
|
. cst2,eccdpar,npar)
|
||||||
|
use const_and_precisions, only : wp_
|
||||||
|
integer :: ieccd,npar
|
||||||
|
real(wp_) :: amu,Zeff,rbn,rbx,fc,psinv,cst2
|
||||||
|
real(wp_), dimension(:), allocatable :: eccdpar
|
||||||
|
end subroutine setcdcoeff
|
||||||
|
end interface
|
||||||
c
|
c
|
||||||
c absorption computation
|
c absorption computation
|
||||||
c
|
c
|
||||||
@ -5746,52 +5760,56 @@ c
|
|||||||
zeff=fzeff(psinv)
|
zeff=fzeff(psinv)
|
||||||
rbn=btot/bmin
|
rbn=btot/bmin
|
||||||
rbx=btot/bmax
|
rbx=btot/bmax
|
||||||
call eccd(yg,anpl,anprre,amu,zeff,rbn,rbx,fc,ex,ey,ez,
|
|
||||||
* dens,psinv,ieccd,nhmin,nhmax,ithn,effjcd,iokhawa,ierr)
|
|
||||||
end if
|
|
||||||
|
|
||||||
|
call setcdcoeff(amu,zeff,rbn,rbx,fc,psinv,ieccd,cst2,
|
||||||
|
. eccdpar,npar)
|
||||||
|
select case(ieccd)
|
||||||
|
case(1)
|
||||||
|
c cohen model
|
||||||
|
call eccdeff(yg,anpl,anprre,dens,amu,ex,ey,ez,nhmin,nhmax,
|
||||||
|
. ithn,cst2,fjch,eccdpar(1:npar),npar,effjcd,iokhawa,ierr)
|
||||||
|
case(2:9)
|
||||||
|
c no trapping
|
||||||
|
call eccdeff(yg,anpl,anprre,dens,amu,ex,ey,ez,nhmin,nhmax,
|
||||||
|
. ithn,cst2,fjch0,eccdpar(1:npar),npar,effjcd,iokhawa,ierr)
|
||||||
|
case(10:11)
|
||||||
|
c neoclassical model
|
||||||
|
call eccdeff(yg,anpl,anprre,dens,amu,ex,ey,ez,nhmin,nhmax,
|
||||||
|
. ithn,cst2,fjncl,eccdpar(1:npar),npar,effjcd,iokhawa,ierr)
|
||||||
|
CASE DEFAULT
|
||||||
|
effjcd=0.0_wp_
|
||||||
|
print*,'ieccd undefined'
|
||||||
|
ierr=89
|
||||||
|
return
|
||||||
|
end select
|
||||||
|
c
|
||||||
|
deallocate(eccdpar)
|
||||||
|
end if
|
||||||
|
c
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
c
|
c
|
||||||
c
|
c
|
||||||
c
|
c
|
||||||
subroutine eccd(yg,anpl,anprre,amu,zeff,rbn,rbx,fc,ex,ey,ez,
|
|
||||||
. dens,psinv,ieccd,nhmn,nhmx,ithn,effjcd,iokhawa,ierr)
|
subroutine setcdcoeff(amu,zeff,rbn,rbx,fc,psinv,ieccd,
|
||||||
use const_and_precisions, only : wp_,pi,qesi=>e_,mesi=>me_,
|
. cst2,eccdpar,npar)
|
||||||
. vcsi=>c_,qe=>ecgs_,me=>mecgs_,vc=>ccgs_,mc2=>mc2_
|
use const_and_precisions, only : wp_
|
||||||
use green_func_p, only: SpitzFuncCoeff
|
use green_func_p, only: SpitzFuncCoeff
|
||||||
use conical, only : fconic
|
use conical, only : fconic
|
||||||
use magsurf_data, only : ch,tjp,tlm,njpt,nlmt
|
use magsurf_data, only : ch,tjp,tlm,njpt,nlmt
|
||||||
use dierckx, only : profil
|
use dierckx, only : profil
|
||||||
implicit none
|
|
||||||
c local constants
|
c local constants
|
||||||
real(wp_), parameter :: mc2m2=1.0_wp_/mc2**2,
|
real(wp_), parameter :: cst2min=1.0e-6_wp_
|
||||||
. canucc=2.0e13_wp_*pi*qe**4/(me**2*vc**3),ceff=qesi/(mesi*vcsi)
|
|
||||||
integer, parameter :: ksp=3
|
integer, parameter :: ksp=3
|
||||||
c arguments
|
c arguments
|
||||||
integer :: ieccd,nhmn,nhmx,ithn,iokhawa,ierr
|
integer :: ieccd,npar
|
||||||
real(wp_) :: yg,anpl,anprre,amu,Zeff,rbn,rbx,
|
real(wp_) :: amu,Zeff,rbn,rbx,fc,psinv,cst2
|
||||||
. fc,dens,psinv,effjcd
|
real(wp_), dimension(:), allocatable :: eccdpar ! dimension(max(5,3+nlmt))
|
||||||
complex(wp_) :: ex,ey,ez
|
|
||||||
c local variables
|
c local variables
|
||||||
integer :: nhn,njp,nlm,npar
|
integer :: njp,nlm
|
||||||
real(wp_) :: anum,denom,resp,resj,coullog,anucc,alams,
|
real(wp_) :: alams,fp0s,pa
|
||||||
. fp0s,pa,cst2
|
|
||||||
real(wp_) :: chlm(nlmt)
|
real(wp_) :: chlm(nlmt)
|
||||||
real(wp_), dimension(3+2*nlmt) :: eccdpar ! dimension(max(5,3+nlmt))
|
|
||||||
c common/external functions/variables
|
|
||||||
real(wp_), external :: fjch,fjncl,fjch0
|
|
||||||
c
|
|
||||||
anum=0.0_wp_
|
|
||||||
denom=0.0_wp_
|
|
||||||
effjcd=0.0_wp_
|
|
||||||
c
|
|
||||||
coullog=48.0_wp_-log(1.0e7_wp_*dens*mc2m2*amu**2)
|
|
||||||
anucc=canucc*dens*coullog
|
|
||||||
c
|
|
||||||
c nhmx=nhmn
|
|
||||||
c
|
|
||||||
eccdpar(1)=zeff
|
|
||||||
c
|
c
|
||||||
select case(ieccd)
|
select case(ieccd)
|
||||||
c
|
c
|
||||||
@ -5802,114 +5820,115 @@ c rbx=B/B_max
|
|||||||
c cst2=1.0_wp_-B/B_max
|
c cst2=1.0_wp_-B/B_max
|
||||||
c alams=sqrt(1-B_min/B_max)
|
c alams=sqrt(1-B_min/B_max)
|
||||||
c Zeff < 31 !!!
|
c Zeff < 31 !!!
|
||||||
c fp0s= P_a (alams)
|
c fp0s= P_a (alams)
|
||||||
cst2=1.0_wp_-rbx
|
cst2=1.0_wp_-rbx
|
||||||
if(cst2.lt.1.0e-6_wp_) cst2=0.0_wp_
|
if(cst2.lt.cst2min) cst2=0.0_wp_
|
||||||
alams=sqrt(1.0_wp_-rbx/rbn)
|
alams=sqrt(1.0_wp_-rbx/rbn)
|
||||||
pa=sqrt(32.0_wp_/(Zeff+1.0_wp_)-1.0_wp_)/2.0_wp_
|
pa=sqrt(32.0_wp_/(Zeff+1.0_wp_)-1.0_wp_)/2.0_wp_
|
||||||
fp0s=fconic(alams,pa,0)
|
fp0s=fconic(alams,pa,0)
|
||||||
|
npar=5
|
||||||
|
allocate(eccdpar(npar))
|
||||||
|
eccdpar(1)=zeff
|
||||||
eccdpar(2)=rbn
|
eccdpar(2)=rbn
|
||||||
eccdpar(3)=alams
|
eccdpar(3)=alams
|
||||||
eccdpar(4)=pa
|
eccdpar(4)=pa
|
||||||
eccdpar(5)=fp0s
|
eccdpar(5)=fp0s
|
||||||
do nhn=nhmn,nhmx
|
c
|
||||||
call curr_int(yg,anpl,anprre,amu,ex,ey,ez,nhn,ithn,cst2,
|
|
||||||
. fjch,eccdpar,5,resj,resp,iokhawa,ierr)
|
|
||||||
anum=anum+resj
|
|
||||||
denom=denom+resp
|
|
||||||
end do
|
|
||||||
|
|
||||||
case(2:9)
|
case(2:9)
|
||||||
cst2=0.0_wp_
|
cst2=0.0_wp_
|
||||||
do nhn=nhmn,nhmx
|
npar=1
|
||||||
call curr_int(yg,anpl,anprre,amu,ex,ey,ez,nhn,ithn,cst2,
|
allocate(eccdpar(npar))
|
||||||
. fjch0,eccdpar,1,resj,resp,iokhawa,ierr)
|
eccdpar(1)=zeff
|
||||||
anum=anum+resj
|
c
|
||||||
denom=denom+resp
|
|
||||||
end do
|
|
||||||
|
|
||||||
case(10:11)
|
case(10:11)
|
||||||
c neoclassical model:
|
c neoclassical model:
|
||||||
c ft=1-fc trapped particle fraction
|
c ft=1-fc trapped particle fraction
|
||||||
c rzfc=(1+Zeff)/fc
|
c rzfc=(1+Zeff)/fc
|
||||||
cst2=1.0_wp_-rbx
|
cst2=1.0_wp_-rbx
|
||||||
if(cst2.lt.1.0e-6_wp_) cst2=0.0_wp_
|
if(cst2.lt.cst2min) cst2=0.0_wp_
|
||||||
call SpitzFuncCoeff(amu,Zeff,fc)
|
call SpitzFuncCoeff(amu,Zeff,fc)
|
||||||
eccdpar(2) = fc
|
|
||||||
eccdpar(3) = rbx
|
|
||||||
|
|
||||||
njp=njpt
|
njp=njpt
|
||||||
nlm=nlmt
|
nlm=nlmt
|
||||||
call profil(0,tjp,njp,tlm,nlm,ch,ksp,ksp,sqrt(psinv),nlm,chlm,
|
call profil(0,tjp,njp,tlm,nlm,ch,ksp,ksp,sqrt(psinv),nlm,chlm,
|
||||||
. ierr)
|
. ierr)
|
||||||
if(ierr.gt.0) print*,' Hlambda profil =',ierr
|
if(ierr.gt.0) print*,' Hlambda profil =',ierr
|
||||||
npar=3+2*nlm
|
npar=3+2*nlm
|
||||||
|
allocate(eccdpar(npar))
|
||||||
|
eccdpar(1)=zeff
|
||||||
|
eccdpar(2) = fc
|
||||||
|
eccdpar(3) = rbx
|
||||||
eccdpar(4:3+nlm) = tlm
|
eccdpar(4:3+nlm) = tlm
|
||||||
eccdpar(4+nlm:npar) = chlm
|
eccdpar(4+nlm:npar) = chlm
|
||||||
do nhn=nhmn,nhmx
|
c
|
||||||
call curr_int(yg,anpl,anprre,amu,ex,ey,ez,nhn,ithn,cst2,
|
|
||||||
. fjncl,eccdpar,npar,resj,resp,iokhawa,ierr)
|
|
||||||
anum=anum+resj
|
|
||||||
denom=denom+resp
|
|
||||||
end do
|
|
||||||
|
|
||||||
CASE DEFAULT
|
|
||||||
print*,'ieccd undefined'
|
|
||||||
|
|
||||||
end select
|
end select
|
||||||
c
|
c
|
||||||
c effjpl = <J_parallel>/<p_d> /(B_min/<B>) [A m /W]
|
|
||||||
c
|
|
||||||
if(denom.gt.0.0_wp_) effjcd=-ceff*anum/(anucc*denom)
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
c
|
c
|
||||||
c
|
c
|
||||||
c
|
c
|
||||||
subroutine curr_int(yg,anpl,anprre,amu,ex,ey,ez,nhn,ithn,cst2,
|
subroutine eccdeff(yg,anpl,anprre,dens,amu,ex,ey,ez,nhmn,nhmx,
|
||||||
* fcur,eccdpar,necp,resj,resp,iokhawa,ierr)
|
* ithn,cst2,fcur,eccdpar,necp,effjcd,iokhawa,ierr)
|
||||||
use const_and_precisions, only : wp_
|
use const_and_precisions, only : wp_,pi,qesi=>e_,mesi=>me_,
|
||||||
|
. vcsi=>c_,qe=>ecgs_,me=>mecgs_,vc=>ccgs_,mc2=>mc2_
|
||||||
use quadpack, only : dqagsmv
|
use quadpack, only : dqagsmv
|
||||||
implicit none
|
implicit none
|
||||||
c local constants
|
c local constants
|
||||||
|
real(wp_), parameter :: mc2m2=1.0_wp_/mc2**2,
|
||||||
|
. canucc=2.0e13_wp_*pi*qe**4/(me**2*vc**3),ceff=qesi/(mesi*vcsi)
|
||||||
real(wp_), parameter :: epsa=0.0_wp_,epsr=1.0e-2_wp_,xxcr=16.0_wp_
|
real(wp_), parameter :: epsa=0.0_wp_,epsr=1.0e-2_wp_,xxcr=16.0_wp_
|
||||||
integer, parameter :: lw=5000,liw=lw/4,nfpp=15
|
real(wp_), parameter :: dumin=1.0e-6_wp_
|
||||||
|
integer, parameter :: lw=5000,liw=lw/4,nfpp=13
|
||||||
c arguments
|
c arguments
|
||||||
integer :: i,nhn,ithn,necp,iokhawa,ierr
|
integer :: i,nhmn,nhmx,ithn,necp,iokhawa,ierr
|
||||||
real(wp_) :: yg,anpl,anprre,amu,cst2,resj,resp
|
real(wp_) :: yg,anpl,anprre,dens,amu,cst2,effjcd
|
||||||
real(wp_), dimension(necp) :: eccdpar
|
real(wp_), dimension(necp) :: eccdpar
|
||||||
complex(wp_) :: ex,ey,ez
|
complex(wp_) :: ex,ey,ez
|
||||||
c local variables
|
c local variables
|
||||||
integer :: neval,ier,last,npar
|
integer :: nhn,neval,ier,last,npar
|
||||||
integer, dimension(liw) :: iw
|
integer, dimension(liw) :: iw
|
||||||
real(wp_) :: anpl2,dnl,ygn,ygn2,resj1,resj2,rdu2,upltp,upltm,
|
real(wp_) :: anpl2,dnl,ygn,ygn2,resji,rdu2,upltp,upltm,uplp,uplm,
|
||||||
. rdu,rdut,rdu2t,duu,uu1,uu2,xx1,xx2,ej,ej1,ej2,epp,uplp,uplm,
|
. rdu,rdu2t,duu,uu1,uu2,xx1,xx2,resj,resp,eji,epp,anum,denom,
|
||||||
. cst
|
. cstrdut,anucc
|
||||||
real(wp_), dimension(lw) :: w
|
real(wp_), dimension(lw) :: w
|
||||||
real(wp_), dimension(nfpp+necp) :: apar
|
real(wp_), dimension(nfpp+necp) :: apar
|
||||||
|
real(wp_), dimension(0:1) :: uleft,uright
|
||||||
c common/external functions/variables
|
c common/external functions/variables
|
||||||
real(wp_), external :: fcur,fpp
|
real(wp_), external :: fcur,fpp
|
||||||
c
|
c
|
||||||
c EC power and current densities
|
c effjpl = <J_parallel>/<p_d> /(B_min/<B>) [A m /W]
|
||||||
|
c
|
||||||
|
apar(1) = yg
|
||||||
|
apar(2) = anpl
|
||||||
|
apar(3) = amu
|
||||||
|
apar(4) = anprre
|
||||||
|
apar(5) = dble(ex)
|
||||||
|
apar(6) = dimag(ex)
|
||||||
|
apar(7) = dble(ey)
|
||||||
|
apar(8) = dimag(ey)
|
||||||
|
apar(9) = dble(ez)
|
||||||
|
apar(10) = dimag(ez)
|
||||||
|
apar(11) = dble(ithn)
|
||||||
|
c
|
||||||
|
npar=nfpp+necp
|
||||||
|
apar(nfpp+1:npar) = eccdpar(1:necp)
|
||||||
c
|
c
|
||||||
anpl2=anpl*anpl
|
anpl2=anpl*anpl
|
||||||
dnl=1.0_wp_-anpl2
|
|
||||||
ygn=nhn*yg
|
|
||||||
ygn2=ygn*ygn
|
|
||||||
|
|
||||||
resj=0.0_wp_
|
|
||||||
resj1=0.0_wp_
|
|
||||||
resj2=0.0_wp_
|
|
||||||
resp=0.0_wp_
|
|
||||||
c
|
c
|
||||||
rdu2=anpl2+ygn2-1.0_wp_
|
effjcd=0.0_wp_
|
||||||
uplp=0.0_wp_
|
anum=0.0_wp_
|
||||||
uplm=0.0_wp_
|
denom=0.0_wp_
|
||||||
upltp=0.0_wp_
|
iokhawa=0
|
||||||
upltm=0.0_wp_
|
ierr=0
|
||||||
|
do nhn=nhmn,nhmx
|
||||||
|
ygn=nhn*yg
|
||||||
|
ygn2=ygn*ygn
|
||||||
c
|
c
|
||||||
if (rdu2.ge.0.0_wp_) then
|
rdu2=anpl2+ygn2-1.0_wp_
|
||||||
|
c
|
||||||
|
if (rdu2.lt.0.0_wp_) cycle
|
||||||
rdu=sqrt(rdu2)
|
rdu=sqrt(rdu2)
|
||||||
|
dnl=1.0_wp_-anpl2
|
||||||
uplp=(anpl*ygn+rdu)/dnl
|
uplp=(anpl*ygn+rdu)/dnl
|
||||||
uplm=(anpl*ygn-rdu)/dnl
|
uplm=(anpl*ygn-rdu)/dnl
|
||||||
c
|
c
|
||||||
@ -5922,92 +5941,72 @@ c
|
|||||||
if(xx1.gt.xxcr) uu1=(xxcr/amu-ygn+1.0_wp_)/anpl
|
if(xx1.gt.xxcr) uu1=(xxcr/amu-ygn+1.0_wp_)/anpl
|
||||||
duu=abs(uu1-uu2)
|
duu=abs(uu1-uu2)
|
||||||
c
|
c
|
||||||
apar(1) = yg
|
if(duu.le.dumin) cycle
|
||||||
apar(2) = anpl
|
c
|
||||||
apar(3) = amu
|
|
||||||
apar(4) = anprre
|
|
||||||
apar(5) = dble(ex)
|
|
||||||
apar(6) = dimag(ex)
|
|
||||||
apar(7) = dble(ey)
|
|
||||||
apar(8) = dimag(ey)
|
|
||||||
apar(9) = dble(ez)
|
|
||||||
apar(10) = dimag(ez)
|
|
||||||
apar(11) = dble(ithn)
|
|
||||||
apar(12) = dble(nhn)
|
apar(12) = dble(nhn)
|
||||||
apar(13) = uplp
|
apar(13) = ygn
|
||||||
apar(14) = uplm
|
|
||||||
apar(15) = ygn
|
|
||||||
c
|
c
|
||||||
npar=nfpp+necp
|
call dqagsmv(fpp,uu1,uu2,apar(1:nfpp),nfpp,epsa,epsr,resp,
|
||||||
apar(nfpp+1:npar) = eccdpar(1:necp)
|
. epp,neval,ier,liw,lw,last,iw,w)
|
||||||
c
|
if (ier.gt.0) then
|
||||||
if(duu.gt.1.0e-6_wp_) then
|
ierr=90
|
||||||
call dqagsmv(fpp,uu1,uu2,apar(1:nfpp),nfpp,epsa,epsr,resp,
|
return
|
||||||
. epp,neval,ier,liw,lw,last,iw,w)
|
|
||||||
if (ier.gt.0) ierr=90
|
|
||||||
end if
|
end if
|
||||||
c
|
c
|
||||||
rdu2t=cst2*anpl2+ygn2-1.0_wp_
|
rdu2t=cst2*anpl2+ygn2-1.0_wp_
|
||||||
c
|
c
|
||||||
if (rdu2t.lt.0.0_wp_.or.cst2.eq.0.0_wp_) then
|
if (rdu2t.gt.0.0_wp_.and.cst2.gt.0.0_wp_) then
|
||||||
c
|
|
||||||
c resonance curve does not cross the trapping region
|
|
||||||
c
|
|
||||||
iokhawa=0
|
|
||||||
if(duu.gt.1.0e-4_wp_) then
|
|
||||||
call dqagsmv(fcur,uu1,uu2,apar,npar,epsa,epsr,
|
|
||||||
. resj,ej,neval,ier,liw,lw,last,iw,w)
|
|
||||||
if (ier.gt.0) ierr=91
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
c
|
c
|
||||||
c resonance curve crosses the trapping region
|
c resonance curve crosses the trapping region
|
||||||
c
|
c
|
||||||
iokhawa=1
|
iokhawa=1
|
||||||
rdut=sqrt(rdu2t)
|
cstrdut=sqrt(cst2*rdu2t)
|
||||||
cst=sqrt(cst2)
|
upltm=(cst2*anpl*ygn-cstrdut)/(1.0_wp_-cst2*anpl2)
|
||||||
upltm=(cst2*anpl*ygn-cst*rdut)/(1.0_wp_-cst2*anpl2)
|
upltp=(cst2*anpl*ygn+cstrdut)/(1.0_wp_-cst2*anpl2)
|
||||||
upltp=(cst2*anpl*ygn+cst*rdut)/(1.0_wp_-cst2*anpl2)
|
uleft(0)=uplm
|
||||||
|
uright(0)=upltm
|
||||||
|
uleft(1)=upltp
|
||||||
|
uright(1)=uplp
|
||||||
|
else
|
||||||
c
|
c
|
||||||
uu1=uplm
|
c resonance curve does not cross the trapping region
|
||||||
uu2=upltm
|
|
||||||
xx1=amu*(anpl*uu1+ygn-1.0_wp_)
|
|
||||||
xx2=amu*(anpl*uu2+ygn-1.0_wp_)
|
|
||||||
if(xx1.lt.xxcr.or.xx2.lt.xxcr) then
|
|
||||||
if(xx2.gt.xxcr) uu2=(xxcr/amu-ygn+1.0_wp_)/anpl
|
|
||||||
if(xx1.gt.xxcr) uu1=(xxcr/amu-ygn+1.0_wp_)/anpl
|
|
||||||
duu=abs(uu1-uu2)
|
|
||||||
if(duu.gt.1.0e-6_wp_) then
|
|
||||||
call dqagsmv(fcur,uu1,uu2,apar,npar,epsa,epsr,
|
|
||||||
. resj1,ej1,neval,ier,liw,lw,last,iw,w)
|
|
||||||
if (ier.gt.0) then
|
|
||||||
if (abs(resj1).lt.1.0e-10_wp_) then
|
|
||||||
resj1=0.0_wp_
|
|
||||||
else
|
|
||||||
ierr=92
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
c
|
c
|
||||||
uu1=upltp
|
iokhawa=0
|
||||||
uu2=uplp
|
uleft(0)=uplm
|
||||||
xx1=amu*(anpl*uu1+ygn-1.0_wp_)
|
uright(0)=uplp
|
||||||
xx2=amu*(anpl*uu2+ygn-1.0_wp_)
|
|
||||||
if(xx1.lt.xxcr.or.xx2.lt.xxcr) then
|
|
||||||
if(xx2.gt.xxcr) uu2=(xxcr/amu-ygn+1.0_wp_)/anpl
|
|
||||||
if(xx1.gt.xxcr) uu1=(xxcr/amu-ygn+1.0_wp_)/anpl
|
|
||||||
duu=abs(uu1-uu2)
|
|
||||||
if(duu.gt.1.0e-6_wp_) then
|
|
||||||
call dqagsmv(fcur,uu1,uu2,apar,npar,epsa,epsr,
|
|
||||||
. resj2,ej2,neval,ier,liw,lw,last,iw,w)
|
|
||||||
if (ier.gt.0) then
|
|
||||||
if(ier.ne.2) ierr=93
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
resj=resj1+resj2
|
|
||||||
end if
|
end if
|
||||||
|
c
|
||||||
|
resj=0.0_wp_
|
||||||
|
do i=0,1
|
||||||
|
xx1=amu*(anpl*uleft(i)+ygn-1.0_wp_)
|
||||||
|
xx2=amu*(anpl*uright(i)+ygn-1.0_wp_)
|
||||||
|
if(xx1.lt.xxcr.or.xx2.lt.xxcr) then
|
||||||
|
if(xx2.gt.xxcr) uright(i)=(xxcr/amu-ygn+1.0_wp_)/anpl
|
||||||
|
if(xx1.gt.xxcr) uleft(i)=(xxcr/amu-ygn+1.0_wp_)/anpl
|
||||||
|
duu=abs(uleft(i)-uright(i))
|
||||||
|
if(duu.gt.dumin) then
|
||||||
|
call dqagsmv(fcur,uleft(i),uright(i),apar,npar,epsa,epsr,
|
||||||
|
. resji,eji,neval,ier,liw,lw,last,iw,w)
|
||||||
|
if (ier.gt.0) then
|
||||||
|
if (abs(resji).lt.1.0e-10_wp_) then
|
||||||
|
resji=0.0_wp_
|
||||||
|
else
|
||||||
|
ierr=91+iokhawa+i
|
||||||
|
return
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
resj=resj+resji
|
||||||
|
if(iokhawa.eq.0) exit
|
||||||
|
end do
|
||||||
|
anum=anum+resj
|
||||||
|
denom=denom+resp
|
||||||
|
end do
|
||||||
|
c
|
||||||
|
if(denom.gt.0.0_wp_) then
|
||||||
|
anucc=canucc*dens*(48.0_wp_-log(1.0e7_wp_*dens*mc2m2*amu**2))
|
||||||
|
effjcd=-ceff*anum/(anucc*denom)
|
||||||
end if
|
end if
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -6035,9 +6034,7 @@ c extrapar(9) = Re(ez)
|
|||||||
c extrapar(10) = Im(ez)
|
c extrapar(10) = Im(ez)
|
||||||
c extrapar(11) = double(ithn)
|
c extrapar(11) = double(ithn)
|
||||||
c extrapar(12) = double(nhn)
|
c extrapar(12) = double(nhn)
|
||||||
c extrapar(13) = uplp
|
c extrapar(13) = ygn
|
||||||
c extrapar(14) = uplm
|
|
||||||
c extrapar(15) = ygn
|
|
||||||
c
|
c
|
||||||
use const_and_precisions, only : wp_,ui=>im
|
use const_and_precisions, only : wp_,ui=>im
|
||||||
use math, only : fact
|
use math, only : fact
|
||||||
@ -6048,7 +6045,7 @@ c arguments
|
|||||||
real(wp_), dimension(npar) :: extrapar
|
real(wp_), dimension(npar) :: extrapar
|
||||||
c local variables
|
c local variables
|
||||||
integer :: ithn,nhn,nm,np
|
integer :: ithn,nhn,nm,np
|
||||||
real(wp_) :: yg,anpl,amu,anprre,uplp,uplm,ygn,upr,upr2,gam,ee,
|
real(wp_) :: yg,anpl,amu,anprre,ygn,upr,upr2,gam,ee,
|
||||||
. thn2,thn2u,bb,cth,ajbnm,ajbnp,ajbn
|
. thn2,thn2u,bb,cth,ajbnm,ajbnp,ajbn
|
||||||
complex(wp_) :: ex,ey,ez,emxy,epxy
|
complex(wp_) :: ex,ey,ez,emxy,epxy
|
||||||
c
|
c
|
||||||
@ -6061,23 +6058,21 @@ c
|
|||||||
ez=cmplx(extrapar(9),extrapar(10),wp_)
|
ez=cmplx(extrapar(9),extrapar(10),wp_)
|
||||||
ithn=int(extrapar(11))
|
ithn=int(extrapar(11))
|
||||||
nhn=int(extrapar(12))
|
nhn=int(extrapar(12))
|
||||||
uplp=extrapar(13)
|
ygn=extrapar(13)
|
||||||
uplm=extrapar(14)
|
|
||||||
ygn=extrapar(15)
|
|
||||||
|
|
||||||
upr2=(1.0_wp_-anpl**2)*(uplp-upl)*(upl-uplm)
|
|
||||||
gam=anpl*upl+ygn
|
gam=anpl*upl+ygn
|
||||||
|
upr2=gam*gam-1.0_wp_-upl*upl
|
||||||
ee=exp(-amu*(gam-1))
|
ee=exp(-amu*(gam-1))
|
||||||
|
|
||||||
thn2=1.0_wp_
|
! thn2=1.0_wp_
|
||||||
thn2u=upr2*thn2
|
thn2u=upr2 !*thn2
|
||||||
if(ithn.gt.0) then
|
if(ithn.gt.0) then
|
||||||
emxy=ex-ui*ey
|
emxy=ex-ui*ey
|
||||||
epxy=ex+ui*ey
|
epxy=ex+ui*ey
|
||||||
if(upr2.gt.0.0_wp_) then
|
if(upr2.gt.0.0_wp_) then
|
||||||
upr=sqrt(upr2)
|
upr=sqrt(upr2)
|
||||||
bb=anprre*upr/yg
|
bb=anprre*upr/yg
|
||||||
if(ithn.eq.1) then
|
if(ithn.eq.1) then
|
||||||
c Larmor radius expansion polarization term at lowest order
|
c Larmor radius expansion polarization term at lowest order
|
||||||
cth=1.0_wp_
|
cth=1.0_wp_
|
||||||
if(nhn.gt.1) cth=(0.5_wp_*bb)**(nhn-1)*nhn/fact(nhn)
|
if(nhn.gt.1) cth=(0.5_wp_*bb)**(nhn-1)*nhn/fact(nhn)
|
||||||
@ -6110,31 +6105,19 @@ c
|
|||||||
function fjch(upl,extrapar,npar)
|
function fjch(upl,extrapar,npar)
|
||||||
c integration variable upl passed explicitly. Other variables passed
|
c integration variable upl passed explicitly. Other variables passed
|
||||||
c as array of extra parameters of length npar=size(extrapar).
|
c as array of extra parameters of length npar=size(extrapar).
|
||||||
c variables with index 1..15 must be passed to fpp
|
c variables with index 1..13 must be passed to fpp
|
||||||
c variable with index 16 is zeff
|
c variable with index 14 is zeff
|
||||||
c variables with index gt 16 are specific of the cd model
|
c variables with index gt 14 are specific of the cd model
|
||||||
c
|
c
|
||||||
c extrapar(1) = yg
|
|
||||||
c extrapar(2) = anpl
|
c extrapar(2) = anpl
|
||||||
c extrapar(3) = amu
|
|
||||||
c extrapar(4) = Re(anprw)
|
c extrapar(4) = Re(anprw)
|
||||||
c extrapar(5) = Re(ex)
|
c extrapar(13) = ygn
|
||||||
c extrapar(6) = Im(ex)
|
|
||||||
c extrapar(7) = Re(ey)
|
|
||||||
c extrapar(8) = Im(ey)
|
|
||||||
c extrapar(9) = Re(ez)
|
|
||||||
c extrapar(10) = Im(ez)
|
|
||||||
c extrapar(11) = double(ithn)
|
|
||||||
c extrapar(12) = double(nhn)
|
|
||||||
c extrapar(13) = uplp
|
|
||||||
c extrapar(14) = uplm
|
|
||||||
c extrapar(15) = ygn
|
|
||||||
c
|
c
|
||||||
c extrapar(16) = zeff
|
c extrapar(14) = zeff
|
||||||
c extrapar(17) = rb
|
c extrapar(15) = rb
|
||||||
c extrapar(18) = alams
|
c extrapar(16) = alams
|
||||||
c extrapar(19) = pa
|
c extrapar(17) = pa
|
||||||
c extrapar(20) = fp0s
|
c extrapar(18) = fp0s
|
||||||
c
|
c
|
||||||
use const_and_precisions, only : wp_
|
use const_and_precisions, only : wp_
|
||||||
use conical, only : fconic
|
use conical, only : fconic
|
||||||
@ -6145,25 +6128,23 @@ c arguments
|
|||||||
real(wp_), dimension(npar) :: extrapar
|
real(wp_), dimension(npar) :: extrapar
|
||||||
c local variables
|
c local variables
|
||||||
integer :: nhn
|
integer :: nhn
|
||||||
real(wp_) :: anpl,anprre,uplp,uplm,ygn,zeff,rb,alams,pa,fp0s,
|
real(wp_) :: anpl,anprre,ygn,zeff,rb,alams,pa,fp0s,
|
||||||
. upr2,gam,u2,u,z5,xi,xib,xibi,fu2b,fu2,gu,gg,dgg,alam,fp0,
|
. upr2,gam,u2,u,z5,xi,xib,xibi,fu2b,fu2,gu,gg,dgg,alam,fp0,
|
||||||
. dfp0,fh,dfhl,eta,fpp
|
. dfp0,fh,dfhl,eta,fpp
|
||||||
complex(wp_) :: ex,ey,ez
|
complex(wp_) :: ex,ey,ez
|
||||||
c
|
c
|
||||||
anpl=extrapar(2)
|
anpl=extrapar(2)
|
||||||
anprre=extrapar(4)
|
anprre=extrapar(4)
|
||||||
uplp=extrapar(13)
|
ygn=extrapar(13)
|
||||||
uplm=extrapar(14)
|
zeff=extrapar(14)
|
||||||
ygn=extrapar(15)
|
rb=extrapar(15)
|
||||||
zeff=extrapar(16)
|
alams=extrapar(16)
|
||||||
rb=extrapar(17)
|
pa=extrapar(17)
|
||||||
alams=extrapar(18)
|
fp0s=extrapar(18)
|
||||||
pa=extrapar(19)
|
|
||||||
fp0s=extrapar(20)
|
|
||||||
|
|
||||||
upr2=(1.0_wp_-anpl**2)*(uplp-upl)*(upl-uplm)
|
|
||||||
gam=anpl*upl+ygn
|
gam=anpl*upl+ygn
|
||||||
u2=gam*gam-1.0_wp_
|
u2=gam*gam-1.0_wp_
|
||||||
|
upr2=u2-upl*upl
|
||||||
u=sqrt(u2)
|
u=sqrt(u2)
|
||||||
z5=Zeff+5.0_wp_
|
z5=Zeff+5.0_wp_
|
||||||
xi=1.0_wp_/z5**2
|
xi=1.0_wp_/z5**2
|
||||||
@ -6187,7 +6168,7 @@ c
|
|||||||
eta=gam*fh*(gg/u+dgg)+upl*(anpl*u2-upl*gam)*gg*dfhl/(u2*u*rb*alam)
|
eta=gam*fh*(gg/u+dgg)+upl*(anpl*u2-upl*gam)*gg*dfhl/(u2*u*rb*alam)
|
||||||
|
|
||||||
if(upl.lt.0.0_wp_) eta=-eta
|
if(upl.lt.0.0_wp_) eta=-eta
|
||||||
fjch=eta*fpp(upl,extrapar,npar)
|
fjch=eta*fpp(upl,extrapar(1:13),13)
|
||||||
c
|
c
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -6201,23 +6182,10 @@ c variables with index 1..15 must be passed to fpp
|
|||||||
c variable with index 16 is zeff
|
c variable with index 16 is zeff
|
||||||
c variables with index gt 16 are specific of the cd model
|
c variables with index gt 16 are specific of the cd model
|
||||||
c
|
c
|
||||||
c extrapar(1) = yg
|
|
||||||
c extrapar(2) = anpl
|
c extrapar(2) = anpl
|
||||||
c extrapar(3) = amu
|
c extrapar(13) = ygn
|
||||||
c extrapar(4) = Re(anprw)
|
|
||||||
c extrapar(5) = Re(ex)
|
|
||||||
c extrapar(6) = Im(ex)
|
|
||||||
c extrapar(7) = Re(ey)
|
|
||||||
c extrapar(8) = Im(ey)
|
|
||||||
c extrapar(9) = Re(ez)
|
|
||||||
c extrapar(10) = Im(ez)
|
|
||||||
c extrapar(11) = double(ithn)
|
|
||||||
c extrapar(12) = double(nhn)
|
|
||||||
c extrapar(13) = uplp
|
|
||||||
c extrapar(14) = uplm
|
|
||||||
c extrapar(15) = ygn
|
|
||||||
c
|
c
|
||||||
c extrapar(16) = zeff
|
c extrapar(14) = zeff
|
||||||
c
|
c
|
||||||
use const_and_precisions, only : wp_
|
use const_and_precisions, only : wp_
|
||||||
implicit none
|
implicit none
|
||||||
@ -6232,8 +6200,8 @@ c local variables
|
|||||||
complex(wp_) :: ex,ey,ez
|
complex(wp_) :: ex,ey,ez
|
||||||
c
|
c
|
||||||
anpl=extrapar(2)
|
anpl=extrapar(2)
|
||||||
ygn=extrapar(15)
|
ygn=extrapar(13)
|
||||||
zeff=extrapar(16)
|
zeff=extrapar(14)
|
||||||
|
|
||||||
gam=anpl*upl+ygn
|
gam=anpl*upl+ygn
|
||||||
u2=gam*gam-1.0_wp_
|
u2=gam*gam-1.0_wp_
|
||||||
@ -6248,7 +6216,7 @@ c
|
|||||||
gg=u*gu/z5
|
gg=u*gu/z5
|
||||||
dgg=(gu+u2*(2.0_wp_/fu2b**(1.0_wp_+xibi)/sqrt(fu2)-xi*gu/fu2))/z5
|
dgg=(gu+u2*(2.0_wp_/fu2b**(1.0_wp_+xibi)/sqrt(fu2)-xi*gu/fu2))/z5
|
||||||
eta=anpl*gg+gam*upl*dgg/u
|
eta=anpl*gg+gam*upl*dgg/u
|
||||||
fjch0=eta*fpp(upl,extrapar,npar)
|
fjch0=eta*fpp(upl,extrapar(1:13),13)
|
||||||
c
|
c
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -6258,31 +6226,19 @@ c
|
|||||||
function fjncl(upl,extrapar,npar)
|
function fjncl(upl,extrapar,npar)
|
||||||
c integration variable upl passed explicitly. Other variables passed
|
c integration variable upl passed explicitly. Other variables passed
|
||||||
c as array of extra parameters of length npar=size(extrapar).
|
c as array of extra parameters of length npar=size(extrapar).
|
||||||
c variables with index 1..15 must be passed to fpp
|
c variables with index 1..13 must be passed to fpp
|
||||||
c variable with index 16 is zeff
|
c variable with index 14 is zeff
|
||||||
c variables with index gt 16 are specific of the cd model
|
c variables with index gt 14 are specific of the cd model
|
||||||
c
|
c
|
||||||
c extrapar(1) = yg
|
|
||||||
c extrapar(2) = anpl
|
c extrapar(2) = anpl
|
||||||
c extrapar(3) = amu
|
c extrapar(3) = amu
|
||||||
c extrapar(4) = Re(anprw)
|
c extrapar(13) = ygn
|
||||||
c extrapar(5) = Re(ex)
|
|
||||||
c extrapar(6) = Im(ex)
|
|
||||||
c extrapar(7) = Re(ey)
|
|
||||||
c extrapar(8) = Im(ey)
|
|
||||||
c extrapar(9) = Re(ez)
|
|
||||||
c extrapar(10) = Im(ez)
|
|
||||||
c extrapar(11) = double(ithn)
|
|
||||||
c extrapar(12) = double(nhn)
|
|
||||||
c extrapar(13) = uplp
|
|
||||||
c extrapar(14) = uplm
|
|
||||||
c extrapar(15) = ygn
|
|
||||||
c
|
c
|
||||||
c extrapar(16) = zeff
|
c extrapar(14) = zeff
|
||||||
c extrapar(17) = fc
|
c extrapar(15) = fc
|
||||||
c extrapar(18) = rbx
|
c extrapar(16) = rbx
|
||||||
c extrapar(19:18+(npar-18)/2) = tlm
|
c extrapar(17:16+(npar-16)/2) = tlm
|
||||||
c extrapar(19+(npar-18)/2:npar) = chlm
|
c extrapar(17+(npar-16)/2:npar) = chlm
|
||||||
c
|
c
|
||||||
use const_and_precisions, only : wp_
|
use const_and_precisions, only : wp_
|
||||||
use green_func_p, only: GenSpitzFunc
|
use green_func_p, only: GenSpitzFunc
|
||||||
@ -6300,15 +6256,15 @@ c local variables
|
|||||||
. bth,uth,fk,dfk,alam,fu,dfu,eta,fpp
|
. bth,uth,fk,dfk,alam,fu,dfu,eta,fpp
|
||||||
c local variables
|
c local variables
|
||||||
integer :: ier
|
integer :: ier
|
||||||
real(wp_), dimension((npar-18)/2) :: wrk
|
real(wp_), dimension((npar-16)/2) :: wrk
|
||||||
real(wp_), dimension(1) :: xs,ys
|
real(wp_), dimension(1) :: xs,ys
|
||||||
c
|
c
|
||||||
anpl=extrapar(2)
|
anpl=extrapar(2)
|
||||||
amu=extrapar(3)
|
amu=extrapar(3)
|
||||||
ygn=extrapar(15)
|
ygn=extrapar(13)
|
||||||
zeff=extrapar(16)
|
zeff=extrapar(14)
|
||||||
fc=extrapar(17)
|
fc=extrapar(15)
|
||||||
rbx=extrapar(18)
|
rbx=extrapar(16)
|
||||||
|
|
||||||
gam=anpl*upl+ygn
|
gam=anpl*upl+ygn
|
||||||
u2=gam*gam-1.0_wp_
|
u2=gam*gam-1.0_wp_
|
||||||
@ -6321,52 +6277,26 @@ c
|
|||||||
dfk=dfk*(2.0_wp_/amu)*bth
|
dfk=dfk*(2.0_wp_/amu)*bth
|
||||||
|
|
||||||
alam=upr2/u2/rbx
|
alam=upr2/u2/rbx
|
||||||
nlm=(npar-18)/2
|
|
||||||
xs(1)=alam
|
xs(1)=alam
|
||||||
|
nlm=(npar-16)/2
|
||||||
c
|
c
|
||||||
call splev(extrapar(19:18+nlm),nlm,extrapar(19+nlm:npar),3,
|
c extrapar(17:16+(npar-16)/2) = tlm
|
||||||
|
c extrapar(17+(npar-16)/2:npar) = chlm
|
||||||
|
c
|
||||||
|
call splev(extrapar(17:16+nlm),nlm,extrapar(17+nlm:npar),3,
|
||||||
. xs(1),ys(1),1,ier)
|
. xs(1),ys(1),1,ier)
|
||||||
fu=ys(1)
|
fu=ys(1)
|
||||||
call splder(extrapar(19:18+nlm),nlm,extrapar(19+nlm:npar),3,1,
|
call splder(extrapar(17:16+nlm),nlm,extrapar(17+nlm:npar),3,1,
|
||||||
. xs(1),ys(1),1,wrk,ier)
|
. xs(1),ys(1),1,wrk,ier)
|
||||||
dfu=ys(1)
|
dfu=ys(1)
|
||||||
|
|
||||||
eta=gam*fu*dfk/u-2.0_wp_*(anpl-gam*upl/u2)*fk*dfu*upl/u2/rbx
|
eta=gam*fu*dfk/u-2.0_wp_*(anpl-gam*upl/u2)*fk*dfu*upl/u2/rbx
|
||||||
if(upl.lt.0) eta=-eta
|
if(upl.lt.0) eta=-eta
|
||||||
fjncl=eta*fpp(upl,extrapar,npar)
|
fjncl=eta*fpp(upl,extrapar(1:13),13)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
c
|
c
|
||||||
c
|
c
|
||||||
c
|
|
||||||
C subroutine vlambda(alam,tlm,chlm,nlmt,fv,dfv)
|
|
||||||
C use const_and_precisions, only : wp_
|
|
||||||
C use dierckx, only : splev,splder
|
|
||||||
C implicit none
|
|
||||||
Cc local constants
|
|
||||||
C integer, parameter :: ksp=3
|
|
||||||
Cc arguments
|
|
||||||
C integer :: nlmt
|
|
||||||
C real(wp_) :: alam,fv,dfv
|
|
||||||
C real(wp_), dimension(nlmt) :: tlm,chlm
|
|
||||||
Cc local variables
|
|
||||||
C integer :: nlm,ier
|
|
||||||
C real(wp_), dimension(nlmt) :: wrk
|
|
||||||
C real(wp_), dimension(1) :: xxs,ffs
|
|
||||||
Cc
|
|
||||||
C nlm=nlmt
|
|
||||||
C xxs(1)=alam
|
|
||||||
Cc
|
|
||||||
C call splev(tlm,nlm,chlm,ksp,xxs(1),ffs(1),1,ier)
|
|
||||||
C fv=ffs(1)
|
|
||||||
Cc
|
|
||||||
C call splder(tlm,nlm,chlm,ksp,1,xxs(1),ffs(1),1,wrk,ier)
|
|
||||||
C dfv=ffs(1)
|
|
||||||
Cc
|
|
||||||
C return
|
|
||||||
C end
|
|
||||||
c
|
|
||||||
c
|
|
||||||
c
|
c
|
||||||
subroutine projxyzt(iproj,nfile)
|
subroutine projxyzt(iproj,nfile)
|
||||||
use const_and_precisions, only : wp_
|
use const_and_precisions, only : wp_
|
||||||
|
Loading…
Reference in New Issue
Block a user