removed dependency on itm-modules. fixed uncorrect use of ipec in pec (ipec=-1). changed dubious assignments (isev, iind) in pec. cleaned dependencies in Makefile. added missing beamdata.f90 file to the repository. added main program to test with standard input files (eqdsk, prf). renamed ei function and dierckx subroutine to avoid conflicts with flush library.
This commit is contained in:
parent
9ca1ccd817
commit
074f331355
12
Makefile
12
Makefile
@ -35,7 +35,7 @@ FC=$(F90)
|
||||
ifeq ("$(DBG)","")
|
||||
FFLAGS= $(AUTO) -O3
|
||||
else
|
||||
FFLAGS= $(AUTO) -O0 -g
|
||||
FFLAGS= $(AUTO) -O0 -g -Minform=inform -Mbounds -Mchkptr
|
||||
endif
|
||||
|
||||
# Set include directories
|
||||
@ -96,13 +96,11 @@ clean:
|
||||
|
||||
# Dependencies
|
||||
# ------------
|
||||
gray_main.o: gray-externals.o itm_types.o
|
||||
gray-externals.o: green_func_p.o reflections.o scatterspl.o beamdata.o
|
||||
gray_main.o: const_and_precisions.o
|
||||
gray-externals.o: green_func_p.o reflections.o beamdata.o
|
||||
green_func_p.o: const_and_precisions.o
|
||||
const_and_precisions.o: itm_types.o itm_constants.o
|
||||
itm_constants.o: itm_types.o
|
||||
scatterspl.o: itm_types.o
|
||||
beamdata.o: itm_types.o
|
||||
scatterspl.o: const_and_precisions.o
|
||||
beamdata.o: const_and_precisions.o
|
||||
|
||||
# Special rule to preprocess source file and include svn revision
|
||||
# ---------------------------------------------------------------
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Executable name
|
||||
EXE=gray
|
||||
EXE=gray-jintrac
|
||||
LIBFILE=lib$(EXE).a
|
||||
|
||||
# Objects list
|
||||
OBJ=gray_main.o gray-externals.o grayl.o reflections.o scatterspl.o \
|
||||
beamdata.o green_func_p.o const_and_precisions.o itm_constants.o itm_types.o
|
||||
beamdata.o green_func_p.o const_and_precisions.o
|
||||
|
||||
# Alternative search paths
|
||||
vpath %.f90 src
|
||||
@ -28,14 +28,12 @@ $(LIBFILE): $(OBJ)
|
||||
ar -rv $@ $^
|
||||
|
||||
# Dependencies on modules
|
||||
main.o: gray_main.o
|
||||
gray_main.o: gray-externals.o itm_types.o
|
||||
gray-externals.o: green_func_p.o reflections.o scatterspl.o beamdata.o
|
||||
main.o: const_and_precisions.o
|
||||
gray_main.o: const_and_precisions.o
|
||||
gray-externals.o: green_func_p.o reflections.o beamdata.o
|
||||
green_func_p.o: const_and_precisions.o
|
||||
const_and_precisions.o: itm_types.o itm_constants.o
|
||||
itm_constants.o: itm_types.o
|
||||
scatterspl.o: itm_types.o
|
||||
beamdata.o: itm_types.o
|
||||
scatterspl.o: const_and_precisions.o
|
||||
beamdata.o: const_and_precisions.o
|
||||
|
||||
# General object compilation command
|
||||
%.o: %.f90
|
||||
|
72
src/beamdata.f90
Normal file
72
src/beamdata.f90
Normal file
@ -0,0 +1,72 @@
|
||||
module beamdata
|
||||
use const_and_precisions, only : r8
|
||||
implicit none
|
||||
|
||||
integer, parameter :: jmx=31,kmx=36,nmx=8000
|
||||
integer, save :: nrayr,nrayth,nstep
|
||||
real(r8), dimension(:,:,:), allocatable, save :: psjki,ppabs,ccci,tauv,alphav
|
||||
real(r8), dimension(:,:,:), allocatable, save :: pdjki,currj,didst
|
||||
integer, dimension(:,:), allocatable, save :: iiv,iop,iow
|
||||
real(r8), dimension(:,:), allocatable, save :: tau1v
|
||||
real(r8), dimension(:), allocatable, save :: q
|
||||
real(r8), dimension(:,:,:), allocatable, save :: yyrfl !(:,:,6)
|
||||
real(r8), dimension(:,:,:), allocatable, save :: ywrk,ypwrk !(6,:,:)
|
||||
real(r8), dimension(:,:,:), allocatable, save :: xc,xco,du1,du1o !(3,:,:)
|
||||
real(r8), dimension(:,:,:), allocatable, save :: gri,dgrad2v !(3,:,:)
|
||||
real(r8), dimension(:,:,:,:), allocatable, save :: ggri !(3,3,:,:)
|
||||
real(r8), dimension(:,:), allocatable, save :: grad2
|
||||
real(r8), dimension(:), allocatable, save :: dffiu,ddffiu
|
||||
|
||||
contains
|
||||
|
||||
subroutine alloc_beam(ierr)
|
||||
implicit none
|
||||
integer, intent(out) :: ierr
|
||||
|
||||
call dealloc_beam
|
||||
allocate(psjki(nrayr,nrayth,nstep), ppabs(nrayr,nrayth,nstep), &
|
||||
pdjki(nrayr,nrayth,nstep), ccci(nrayr,nrayth,nstep), &
|
||||
currj(nrayr,nrayth,nstep), didst(nrayr,nrayth,nstep), &
|
||||
tauv(nrayr,nrayth,nstep), alphav(nrayr,nrayth,nstep), &
|
||||
iiv(nrayr,nrayth), iop(nrayr,nrayth), &
|
||||
iow(nrayr,nrayth), tau1v(nrayr,nrayth), &
|
||||
q(nrayr), yyrfl(nrayr,nrayth,6), &
|
||||
ywrk(6,nrayr,nrayth), ypwrk(6,nrayr,nrayth), &
|
||||
xc(3,nrayr,nrayth), xco(3,nrayr,nrayth), &
|
||||
du1(3,nrayr,nrayth), du1o(3,nrayr,nrayth), &
|
||||
gri(3,nrayr,nrayth), dgrad2v(3,nrayr,nrayth), &
|
||||
ggri(3,3,nrayr,nrayth), grad2(nrayr,nrayth), &
|
||||
dffiu(nrayr), ddffiu(nrayr), stat=ierr)
|
||||
if (ierr/=0) call dealloc_beam
|
||||
end subroutine alloc_beam
|
||||
|
||||
subroutine dealloc_beam
|
||||
implicit none
|
||||
if (allocated(psjki)) deallocate(psjki)
|
||||
if (allocated(ppabs)) deallocate(ppabs)
|
||||
if (allocated(pdjki)) deallocate(pdjki)
|
||||
if (allocated(ccci)) deallocate(ccci)
|
||||
if (allocated(currj)) deallocate(currj)
|
||||
if (allocated(didst)) deallocate(didst)
|
||||
if (allocated(tauv)) deallocate(tauv)
|
||||
if (allocated(alphav)) deallocate(alphav)
|
||||
if (allocated(iiv)) deallocate(iiv)
|
||||
if (allocated(iop)) deallocate(iop)
|
||||
if (allocated(iow)) deallocate(iow)
|
||||
if (allocated(tau1v)) deallocate(tau1v)
|
||||
if (allocated(q)) deallocate(q)
|
||||
if (allocated(yyrfl)) deallocate(yyrfl)
|
||||
if (allocated(ywrk)) deallocate(ywrk)
|
||||
if (allocated(ypwrk)) deallocate(ypwrk)
|
||||
if (allocated(xc)) deallocate(xc)
|
||||
if (allocated(xco)) deallocate(xco)
|
||||
if (allocated(du1)) deallocate(du1)
|
||||
if (allocated(du1o)) deallocate(du1o)
|
||||
if (allocated(gri)) deallocate(gri)
|
||||
if (allocated(dgrad2v)) deallocate(dgrad2v)
|
||||
if (allocated(ggri)) deallocate(ggri)
|
||||
if (allocated(grad2)) deallocate(grad2)
|
||||
if (allocated(dffiu)) deallocate(dffiu)
|
||||
if (allocated(ddffiu)) deallocate(ddffiu)
|
||||
end subroutine dealloc_beam
|
||||
end module beamdata
|
@ -1,18 +1,22 @@
|
||||
!########################################################################!
|
||||
|
||||
MODULE const_and_precisions
|
||||
use itm_types, only : wp_ => r8
|
||||
use itm_constants, only : pi => itm_pi, e_ => itm_qe, me_ => itm_me, c_ => itm_c
|
||||
!########################################################################!
|
||||
IMPLICIT NONE
|
||||
PUBLIC
|
||||
|
||||
!------------------------------------------------------------------------
|
||||
! common precisions
|
||||
!------------------------------------------------------------------------
|
||||
! INTEGER, PARAMETER :: sp_ = 4 ! single precision
|
||||
! INTEGER, PARAMETER :: dp_ = 8 ! double precision
|
||||
! INTEGER, PARAMETER :: wp_ = dp_ ! work-precision
|
||||
! INTEGER, PARAMETER :: odep_ = dp_ ! ODE-solver precision
|
||||
|
||||
! INTEGER, PARAMETER :: I1 = SELECTED_INT_KIND (2) ! Integer*1
|
||||
! INTEGER, PARAMETER :: I2 = SELECTED_INT_KIND (4) ! Integer*2
|
||||
INTEGER, PARAMETER :: I4 = SELECTED_INT_KIND (9) ! Integer*4
|
||||
! INTEGER, PARAMETER :: I8 = SELECTED_INT_KIND (18) ! Integer*8
|
||||
! INTEGER, PARAMETER :: R4 = SELECTED_REAL_KIND (6, 37) ! Real*4
|
||||
INTEGER, PARAMETER :: R8 = SELECTED_REAL_KIND (15, 300) ! Real*8
|
||||
INTEGER, PARAMETER :: wp_ = R8 ! work-precision
|
||||
! INTEGER, PARAMETER :: odep_ = R8 ! ODE-solver precision
|
||||
! INTEGER, PARAMETER :: xp_ = wp_ ! for ext. modules if necessary
|
||||
!------------------------------------------------------------------------
|
||||
! precisions which are in use in CONFIG_yat
|
||||
@ -28,7 +32,7 @@
|
||||
!========================================================================
|
||||
REAL(wp_), PARAMETER :: zero = 0.0_wp_
|
||||
REAL(wp_), PARAMETER :: unit = 1.0_wp_
|
||||
! REAL(wp_), PARAMETER :: pi = 3.141592653589793_wp_
|
||||
real (kind = R8), parameter :: pi = 3.141592653589793238462643383280_R8
|
||||
! REAL(wp_), PARAMETER :: sqrt_pi = 1.772453850905516_wp_
|
||||
! REAL(wp_), PARAMETER :: sqrt_2 = 1.414213562373095_wp_
|
||||
! REAL(wp_), PARAMETER :: rad = pi/180.0_wp_
|
||||
@ -47,7 +51,7 @@
|
||||
!========================================================================
|
||||
! Computer constants
|
||||
!========================================================================
|
||||
REAL(wp_), PARAMETER :: comp_eps = EPSILON(unit)
|
||||
REAL(kind = R8), PARAMETER :: comp_eps = EPSILON(unit)
|
||||
! REAL(wp_), PARAMETER :: comp_eps2 = comp_eps**2
|
||||
! REAL(wp_), PARAMETER :: comp_tiny = TINY(unit)
|
||||
! REAL(wp_), PARAMETER :: comp_huge = HUGE(unit)
|
||||
@ -65,16 +69,24 @@
|
||||
!========================================================================
|
||||
! Physical constants (SI)
|
||||
!========================================================================
|
||||
! REAL(wp_), PARAMETER :: e_ = 1.602176487d-19 ! [C]
|
||||
! REAL(wp_), PARAMETER :: me_ = 9.10938215d-31 ! [kg]
|
||||
! REAL(wp_), PARAMETER :: mp_ = 1.672621637d-27 ! [kg]
|
||||
real (kind = R8), parameter :: e_ = 1.602176487e-19_R8 ! [C]
|
||||
real (kind = R8), parameter :: me_ = 9.10938215e-31_R8 ! electron mass [kg]
|
||||
! real (kind = R8), parameter :: mp_ = 1.672621637e-27_R8 ! proton mass [kg]
|
||||
! REAL(wp_), PARAMETER :: rmpe_ = mp_/me_
|
||||
! REAL(wp_), PARAMETER :: c_ = 2.99792458d+08 ! [m/s]
|
||||
! REAL(wp_), PARAMETER :: eps0_ = 8.854187817d-12 ! [F/m]
|
||||
! real (kind = R8), parameter :: md_ = 3.34358320e-27_R8 ! deuteron mass, kg
|
||||
! real (kind = R8), parameter :: mt_ = 5.00735588e-27_R8 ! triton mass, kg
|
||||
! real (kind = R8), parameter :: ma_ = 6.64465620e-27_R8 ! alpha mass, kg
|
||||
! real (kind = R8), parameter :: amu_ = 1.660538782e-27_R8 ! amu, kg
|
||||
real (kind = R8), parameter :: c_ = 2.99792458e8_R8 ! speed of light [m/s]
|
||||
real (kind = R8), parameter :: mu0_ = 4.0e-7_R8 * pi
|
||||
! real (kind = R8), parameter :: eps0_ = 1.0_R8 / (mu0_ * c_ * c_) ! [F/m]
|
||||
! real (kind = R8), parameter :: avogr_ = 6.02214179e23_R8
|
||||
! real (kind = R8), parameter :: KBolt_ = 1.3806504e-23_R8
|
||||
!------------------------------------------------------------------------
|
||||
! Useful definitions
|
||||
!------------------------------------------------------------------------
|
||||
REAL(wp_), PARAMETER :: keV_ = 1000*e_ ! [J]
|
||||
real (kind = R8), parameter :: ev_ = e_ ! [J]
|
||||
REAL(wp_), PARAMETER :: keV_ = 1000*ev_ ! [J]
|
||||
REAL(wp_), PARAMETER :: mc2_SI = me_*c_**2 ! [J]
|
||||
REAL(wp_), PARAMETER :: mc2_ = mc2_SI/keV_ ! [keV]
|
||||
! REAL(wp_), PARAMETER :: mc_ = me_*c_ ! [kg*m/s]
|
||||
|
@ -103,7 +103,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine after_onestep(i,istop)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : psjki,ppabs,ccci,iiv,tauv,
|
||||
. iop,iow,tau1v,yyrfl,nrayr,nrayth
|
||||
implicit real*8 (a-h,o-z)
|
||||
@ -284,7 +284,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine print_output(i,j,k)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : ywrk,psjki,tauv,alphav,pdjki,
|
||||
. currj,didst,q,tau1v,nrayr!,nrayth
|
||||
implicit real*8 (a-h,o-z)
|
||||
@ -447,7 +447,7 @@ c
|
||||
. rax, zax, nbnd, rbnd, zbnd, nrho, psijet, f, te,
|
||||
. dne, zeff, qsf, powin)
|
||||
use green_func_p, only:Setup_SpitzFunc
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : nrayr,nrayth,nstep
|
||||
implicit real*8 (a-h,o-z)
|
||||
integer ijetto, mr, mz, nrho, nbnd
|
||||
@ -732,10 +732,12 @@ c anz0c=-cos(cvdr*beta0)*sin(cvdr*alpha0)
|
||||
|
||||
anx0c=(anr0c*x00-anphi0c*y00)/r00
|
||||
any0c=(anr0c*y00+anphi0c*x00)/r00
|
||||
c
|
||||
print*,' input file read'
|
||||
! call myflush
|
||||
c
|
||||
c read data for Te , ne , Zeff from file if iprof>0
|
||||
c
|
||||
|
||||
if (iprof.eq.1) then
|
||||
c nprof=98
|
||||
c lprf=length(filenmprf)
|
||||
@ -746,6 +748,8 @@ c read profiles from input arguments
|
||||
call profdata(nrho, psijet, te, dne, zeff)
|
||||
c close(nprof)
|
||||
end if
|
||||
print*,' profiles fitted'
|
||||
! call myflush
|
||||
c
|
||||
c read equilibrium data from file if iequil=2
|
||||
c
|
||||
@ -758,6 +762,8 @@ c . status= 'unknown', unit=neqdsk)
|
||||
call equidata(ijetto, mr, mz, r, z, psin, psiax, psibnd,
|
||||
. rax, zax, nbnd, rbnd, zbnd, nrho, psijet, f, qsf)
|
||||
c close(neqdsk)
|
||||
print*,' equilibrium fitted'
|
||||
! call myflush
|
||||
|
||||
c print density, temperature, safecty factor, toroidal current dens
|
||||
c versus psi, rhop, rhot
|
||||
@ -841,7 +847,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine surf_anal
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
implicit real*8(a-h,o-z)
|
||||
common/parban/b0,rr0m,zr0m,rpam
|
||||
common/parbres/bres
|
||||
@ -994,7 +1000,7 @@ c
|
||||
c
|
||||
subroutine equidata(ijetto,mr,mz,r,z,psin2d,psiaxis,psiedge,
|
||||
. rax,zax,nbnd,rbnd,zbnd,mrho,psijet,fpjet,qjet)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use reflections, only : inside
|
||||
implicit real*8 (a-h,o-z)
|
||||
integer ijetto,mr,mz,nbnd,mrho
|
||||
@ -1100,7 +1106,7 @@ c psi function
|
||||
psia0=psiedge-psiaxis
|
||||
psia=psia0*factb
|
||||
sgniphi=sign(1.0d0,-psia0)
|
||||
c
|
||||
cc
|
||||
c do j=1,nz
|
||||
c do i=1,nr
|
||||
c write(620,2021) rv(i),zv(j),psin(i,j)
|
||||
@ -1120,15 +1126,15 @@ c psi(i,j)=psin(i,j)*psia
|
||||
enddo
|
||||
enddo
|
||||
iopt=0
|
||||
call regrid(iopt,nr,rv,nz,zv,fvpsi,rmnm,rmxm,zmnm,zmxm,
|
||||
call dierckx_regrid(iopt,nr,rv,nz,zv,fvpsi,rmnm,rmxm,zmnm,zmxm,
|
||||
. kspl,kspl,sspl,nrest,nzest,nsr,tr,nsz,tz,cc,fp,
|
||||
. wrk,lwrk,iwrk,liwrk,ier)
|
||||
c if ier=-1 data are fitted using sspl=0
|
||||
if(ier.eq.-1) then
|
||||
sspl=0.0d0
|
||||
call regrid(iopt,nr,rv,nz,zv,fvpsi,rmnm,rmxm,zmnm,zmxm,
|
||||
. kspl,kspl,sspl,nrest,nzest,nsr,tr,nsz,tz,cc,fp,
|
||||
. wrk,lwrk,iwrk,liwrk,ier)
|
||||
call dierckx_regrid(iopt,nr,rv,nz,zv,fvpsi,rmnm,rmxm,zmnm,
|
||||
. zmxm,kspl,kspl,sspl,nrest,nzest,nsr,tr,nsz,tz,cc,
|
||||
. fp,wrk,lwrk,iwrk,liwrk,ier)
|
||||
end if
|
||||
nsrt=nsr
|
||||
nszt=nsz
|
||||
@ -1178,10 +1184,10 @@ c if ier=-1 data are fitted using sspl=0
|
||||
nsrt=nsr
|
||||
nszt=nsz
|
||||
end if
|
||||
c
|
||||
c re-evaluate psi on the grid using the spline (only for debug)
|
||||
c
|
||||
c call bispev(tr,nsr,tz,nsz,cc,kspl,kspl,rv,nr,zv,nz,ffvpsi,
|
||||
cc
|
||||
cc re-evaluate psi on the grid using the spline (only for debug and cniteq)
|
||||
cc
|
||||
c call dierckx_bispev(tr,nsr,tz,nsz,cc,kspl,kspl,rv,nr,zv,nz,ffvpsi,
|
||||
c . wrkbsp,lwrkbsp,iwrkbsp,liwrkbsp,ier)
|
||||
c
|
||||
c do j=1,nz
|
||||
@ -1195,31 +1201,31 @@ c write(619,*) ' '
|
||||
c enddo
|
||||
c
|
||||
c2021 format(5(1x,e16.9))
|
||||
c
|
||||
|
||||
nur=1
|
||||
nuz=0
|
||||
call parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,nz,
|
||||
. ffvpsi,cc10,lw10,iwrkd,ldiwrk,ier)
|
||||
call dierckx_parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,
|
||||
. nz,ffvpsi,cc10,lw10,iwrkd,ldiwrk,ier)
|
||||
c
|
||||
nur=0
|
||||
nuz=1
|
||||
call parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,nz,
|
||||
. ffvpsi,cc01,lw01,iwrkd,ldiwrk,ier)
|
||||
call dierckx_parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,
|
||||
. nz,ffvpsi,cc01,lw01,iwrkd,ldiwrk,ier)
|
||||
c
|
||||
nur=2
|
||||
nuz=0
|
||||
call parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,nz,
|
||||
. ffvpsi,cc20,lw20,iwrkd,ldiwrk,ier)
|
||||
call dierckx_parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,
|
||||
. nz,ffvpsi,cc20,lw20,iwrkd,ldiwrk,ier)
|
||||
c
|
||||
nur=0
|
||||
nuz=2
|
||||
call parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,nz,
|
||||
. ffvpsi,cc02,lw02,iwrkd,ldiwrk,ier)
|
||||
call dierckx_parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,
|
||||
. nz,ffvpsi,cc02,lw02,iwrkd,ldiwrk,ier)
|
||||
c
|
||||
nur=1
|
||||
nuz=1
|
||||
call parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,nz,
|
||||
. ffvpsi,cc11,lw11,iwrkd,ldiwrk,ier)
|
||||
call dierckx_parder(tr,nsr,tz,nsz,cc,kspl,kspl,nur,nuz,rv,nr,zv,
|
||||
. nz,ffvpsi,cc11,lw11,iwrkd,ldiwrk,ier)
|
||||
c
|
||||
c scaling of f_poloidal
|
||||
c
|
||||
@ -1235,10 +1241,10 @@ c
|
||||
xb=0.0d0
|
||||
xe=1.0d0
|
||||
ssfp=0.01d0
|
||||
call curfit(iopt,nrho,psinr,fpol,wf,xb,xe,kspl,ssfp,nrest,nsft,
|
||||
. tfp,cfp,fp,wrkf,lwrkf,iwrkf,ier)
|
||||
call dierckx_curfit(iopt,nrho,psinr,fpol,wf,xb,xe,kspl,ssfp,nrest,
|
||||
. nsft,tfp,cfp,fp,wrkf,lwrkf,iwrkf,ier)
|
||||
c
|
||||
call splev(tfp,nsft,cfp,3,psinr,fpoli,nrho,ier)
|
||||
call dierckx_splev(tfp,nsft,cfp,3,psinr,fpoli,nrho,ier)
|
||||
fpolas=fpoli(nrho)
|
||||
c
|
||||
c no limiter shape provided yet
|
||||
@ -1406,6 +1412,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine points_ox(rz,zz,rf,zf,psinvf,info)
|
||||
use const_and_precisions, only : comp_eps
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(n=2,ldfjac=n,lwa=(n*(n+13))/2)
|
||||
dimension xvec(n),fvec(n),fjac(ldfjac,n),wa(lwa)
|
||||
@ -1413,7 +1420,7 @@ c
|
||||
common/psival/psinv
|
||||
xvec(1)=rz
|
||||
xvec(2)=zz
|
||||
tol = sqrt(dpmpar(1))
|
||||
tol = sqrt(comp_eps)
|
||||
call hybrj1(fcnox,n,xvec,fvec,fjac,ldfjac,tol,info,wa,lwa)
|
||||
if(info.gt.1) then
|
||||
write(*,'(a,i2,a,2f8.4)') ' info subr points_ox =',info,
|
||||
@ -1448,6 +1455,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine points_tgo(rz,zz,rf,zf,psin,info)
|
||||
use const_and_precisions, only : comp_eps
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(n=2,ldfjac=n,lwa=(n*(n+13))/2)
|
||||
dimension xvec(n),fvec(n),fjac(ldfjac,n),wa(lwa)
|
||||
@ -1456,7 +1464,7 @@ c
|
||||
h=psin
|
||||
xvec(1)=rz
|
||||
xvec(2)=zz
|
||||
tol = sqrt(dpmpar(1))
|
||||
tol = sqrt(comp_eps)
|
||||
call hybrj1(fcntgo,n,xvec,fvec,fjac,ldfjac,tol,info,wa,lwa)
|
||||
if(info.gt.1) then
|
||||
end if
|
||||
@ -1611,7 +1619,7 @@ c
|
||||
integer mrho
|
||||
real*8 psijet(mrho), te(mrho), dne(mrho), zeff(mrho)
|
||||
c
|
||||
parameter(npmx=250,npest=npmx+4)
|
||||
parameter(npmx=501,npest=npmx+4)
|
||||
dimension psrad(npmx),terad(npmx),derad(npmx),zfc(npmx)
|
||||
dimension ct(npmx,4),cz(npmx,4)
|
||||
parameter(lwrkf=npmx*4+npest*16)
|
||||
@ -1672,17 +1680,17 @@ c
|
||||
kspl=3
|
||||
sspl=.001d0
|
||||
c
|
||||
call curfit(iopt,npp,psrad,derad,wf,xb,xe,kspl,sspl,npest,nsfd,
|
||||
. tfn,cfn,fp,wrkf,lwrkf,iwrkf,ier)
|
||||
call dierckx_curfit(iopt,npp,psrad,derad,wf,xb,xe,kspl,sspl,npest,
|
||||
. nsfd,tfn,cfn,fp,wrkf,lwrkf,iwrkf,ier)
|
||||
c
|
||||
call splev(tfn,nsfd,cfn,3,psrad,densi,npp,ier)
|
||||
call dierckx_splev(tfn,nsfd,cfn,3,psrad,densi,npp,ier)
|
||||
nu=1
|
||||
call gsplder(tfn,nsfd,cfn,3,nu,psrad,ddensi,npp,wrkfd,ier)
|
||||
call dierckx_splder(tfn,nsfd,cfn,3,nu,psrad,ddensi,npp,wrkfd,ier)
|
||||
dnpp=densi(npp)
|
||||
ddnpp=ddensi(npp)
|
||||
c
|
||||
nu=2
|
||||
call gsplder(tfn,nsfd,cfn,3,nu,psrad,d2densi,npp,wrkfd,ier)
|
||||
call dierckx_splder(tfn,nsfd,cfn,3,nu,psrad,d2densi,npp,wrkfd,ier)
|
||||
d2dnpp=d2densi(npp)
|
||||
|
||||
if(derad(npp).eq.0.0d0) then
|
||||
@ -1823,10 +1831,10 @@ c spline interpolation of rhopol versus rhotor
|
||||
xe=1.0d0
|
||||
ss=0.00001
|
||||
kspl=3
|
||||
call curfit(iopt,nnr,rhot,rhop,wp,xb,xe,kspl,ss,nrest,nsrp,
|
||||
. trp,crp,rp,wrkp,lwrkp,iwrkp,ier)
|
||||
call dierckx_curfit(iopt,nnr,rhot,rhop,wp,xb,xe,kspl,ss,nrest,
|
||||
. nsrp,trp,crp,rp,wrkp,lwrkp,iwrkp,ier)
|
||||
c write(*,*) ier
|
||||
call splev(trp,nsrp,crp,3,rhot,rhopi,nnr,ier)
|
||||
call dierckx_splev(trp,nsrp,crp,3,rhot,rhopi,nnr,ier)
|
||||
do i=1,nnr
|
||||
write(644,*) rhop(i),rhot(i),rhopi(i)
|
||||
end do
|
||||
@ -1842,7 +1850,7 @@ c write(*,*) ier
|
||||
common/coffrn/nsrp
|
||||
common/coffrp/crp
|
||||
rrs(1)=rhot
|
||||
call splev(trp,nsrp,crp,3,rrs,ffspl,1,ier)
|
||||
call dierckx_splev(trp,nsrp,crp,3,rrs,ffspl,1,ier)
|
||||
frhopol=ffspl(1)
|
||||
return
|
||||
end
|
||||
@ -2039,7 +2047,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine contours_psi(h,np,rcn,zcn,ipr)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(mest=4,kspl=3)
|
||||
parameter(nnw=501,nnh=501)
|
||||
@ -2073,10 +2081,11 @@ c
|
||||
do ic=2,np
|
||||
zc=zlw+(zup-zlw)*(1.0d0-cos(th*(ic-1)))/2.0d0
|
||||
iopt=1
|
||||
call sprofil(iopt,tr,nsr,tz,nsz,cc,kspl,kspl,zc,nsr,czc,ier)
|
||||
if(ier.gt.0) write(*,*) ' sprofil =',ier
|
||||
call dierckx_sprofil(iopt,tr,nsr,tz,nsz,cc,kspl,kspl,zc,nsr,czc,
|
||||
. ier)
|
||||
if(ier.gt.0) write(*,*) ' dierckx_sprofil =',ier
|
||||
val=h*psiant+psinop
|
||||
call sproota(val,tr,nsr,czc,zeroc,mest,m,ier)
|
||||
call dierckx_sproota(val,tr,nsr,czc,zeroc,mest,m,ier)
|
||||
if (zeroc(1).gt.rwallm) then
|
||||
rcn(ic)=zeroc(1)
|
||||
zcn(ic)=zc
|
||||
@ -2104,13 +2113,13 @@ c
|
||||
c
|
||||
c
|
||||
subroutine flux_average
|
||||
use itm_constants, only : pi=>itm_pi, itm_mu0
|
||||
use const_and_precisions, only : pi, mu0=>mu0_
|
||||
implicit real*8 (a-h,o-z)
|
||||
real*8 lam
|
||||
|
||||
parameter(nnintp=101,ncnt=100,ncntt=2*ncnt+1,nlam=41)
|
||||
parameter(zero=0.0d0,one=1.0d0)
|
||||
parameter(ccj=1.0d0/itm_mu0)
|
||||
parameter(ccj=1.0d0/mu0)
|
||||
parameter(ksp=3,njest=nnintp+ksp+1,nlest=nlam+ksp+1)
|
||||
parameter(lwrk=4*(nnintp+nlam)+11*(njest+nlest)+
|
||||
. njest*nnintp+nlest+54)
|
||||
@ -2448,7 +2457,7 @@ c spline interpolation of H(lambda,rhop) and dH/dlambda
|
||||
|
||||
iopt=0
|
||||
s=0.0d0
|
||||
call regrid(iopt,nintp,rpstab,nlam,alam,ffhlam,
|
||||
call dierckx_regrid(iopt,nintp,rpstab,nlam,alam,ffhlam,
|
||||
. zero,one,zero,one,ksp,ksp,s,
|
||||
. njest,nlest,njp,tjp,nlm,tlm,ch,fp,wrk,lwrk,iwrk,kwrk,ier)
|
||||
njpt=njp
|
||||
@ -3115,7 +3124,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine plas_deriv(xx,yy,zz)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
implicit real*8 (a-h,o-z)
|
||||
dimension bv(3),derxg(3),deryg(3),derbv(3,3),dbtot(3)
|
||||
dimension bvc(3),dbvcdc(3,3),dbvdc(3,3),dbv(3,3)
|
||||
@ -3464,10 +3473,10 @@ c
|
||||
c
|
||||
if(psinv.le.1.0d0.and.psinv.gt.0.0d0) then
|
||||
rrs(1)=psinv
|
||||
call splev(tfp,nsft,cfp,3,rrs,ffspl,1,ier)
|
||||
call dierckx_splev(tfp,nsft,cfp,3,rrs,ffspl,1,ier)
|
||||
fpolv=ffspl(1)
|
||||
nu=1
|
||||
call gsplder(tfp,nsft,cfp,3,nu,rrs,ffspl,1,wrkfd,ier)
|
||||
call dierckx_splder(tfp,nsft,cfp,3,nu,rrs,ffspl,1,wrkfd,ier)
|
||||
dfpolv=ffspl(1)
|
||||
ffpv=fpolv*dfpolv/psia
|
||||
end if
|
||||
@ -3497,9 +3506,9 @@ c
|
||||
|
||||
c
|
||||
subroutine tor_curr(rpsim,zpsim,ajphi)
|
||||
use itm_constants, only : pi=>itm_pi, itm_mu0
|
||||
use const_and_precisions, only : pi, mu0=>mu0_
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(ccj=1.0d0/itm_mu0)
|
||||
parameter(ccj=1.0d0/mu0)
|
||||
common/derip/dpsidr,dpsidz,ddpsidrr,ddpsidzz,ddpsidrz,fpolv,ffpv
|
||||
call equinum(rpsim,zpsim)
|
||||
bzz= dpsidr/rpsim
|
||||
@ -3525,10 +3534,11 @@ c
|
||||
c
|
||||
iopt=1
|
||||
zc=zmaxis
|
||||
call sprofil(iopt,tr,nsr,tz,nsz,cc,kspl,kspl,zc,nsr,czc,ier)
|
||||
if(ier.gt.0) write(*,*) ' sprofil =',ier
|
||||
call dierckx_sprofil(iopt,tr,nsr,tz,nsz,cc,kspl,kspl,zc,nsr,czc,
|
||||
. ier)
|
||||
if(ier.gt.0) write(*,*) ' dierckx_sprofil =',ier
|
||||
val=h*psiant+psinop
|
||||
call sproota(val,tr,nsr,czc,zeroc,mest,m,ier)
|
||||
call dierckx_sproota(val,tr,nsr,czc,zeroc,mest,m,ier)
|
||||
r1=zeroc(1)
|
||||
r2=zeroc(2)
|
||||
return
|
||||
@ -3558,7 +3568,7 @@ c
|
||||
c
|
||||
subroutine density(arg)
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(npmx=250,npest=npmx+4)
|
||||
parameter(npmx=501,npest=npmx+4)
|
||||
dimension xxs(1),ffs(1)
|
||||
dimension tfn(npest),cfn(npest),wrkfd(npest)
|
||||
c
|
||||
@ -3599,11 +3609,11 @@ c
|
||||
else
|
||||
xxs(1)=arg
|
||||
ier=0
|
||||
call splev(tfn,nsfd,cfn,3,xxs,ffs,1,ier)
|
||||
call dierckx_splev(tfn,nsfd,cfn,3,xxs,ffs,1,ier)
|
||||
dens=ffs(1)
|
||||
nu=1
|
||||
ier=0
|
||||
call gsplder(tfn,nsfd,cfn,3,nu,xxs,ffs,1,wrkfd,ier)
|
||||
call dierckx_splder(tfn,nsfd,cfn,3,nu,xxs,ffs,1,wrkfd,ier)
|
||||
ddens=ffs(1)
|
||||
if(ier.gt.0) write(*,*) ier
|
||||
if(abs(dens).lt.1.0d-10) dens=0.0d0
|
||||
@ -3618,7 +3628,7 @@ c
|
||||
c
|
||||
function temperature(arg)
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(npmx=250)
|
||||
parameter(npmx=501)
|
||||
dimension psrad(npmx),derad(npmx),terad(npmx),zfc(npmx),ct(npmx,4)
|
||||
c
|
||||
common/parqte/te0,dte0,alt1,alt2
|
||||
@ -3646,7 +3656,7 @@ c
|
||||
c
|
||||
function fzeff(arg)
|
||||
implicit real*8 (a-h,o-z)
|
||||
parameter(npmx=250)
|
||||
parameter(npmx=501)
|
||||
dimension psrad(npmx),derad(npmx),terad(npmx),zfc(npmx),cz(npmx,4)
|
||||
c
|
||||
common/iipr/iprof
|
||||
@ -3673,7 +3683,7 @@ c
|
||||
c beam tracing initial conditions igrad=1
|
||||
c
|
||||
subroutine ic_gb
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : nrayr,nrayth,ywrk0=>ywrk,ypwrk0=>ypwrk,
|
||||
. xc0=>xc,du10=>du1,dffiu,ddffiu,grad2,dgrad2v,
|
||||
. gri,ggri
|
||||
@ -3943,7 +3953,7 @@ c
|
||||
c ray tracing initial conditions igrad=0
|
||||
c
|
||||
subroutine ic_rt
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : nrayr,nrayth,ywrk0=>ywrk,ypwrk0=>ypwrk,
|
||||
. xc0=>xc,du10=>du1,dffiu,ddffiu,grad2,dgrad2v,
|
||||
. gri,ggri
|
||||
@ -4088,7 +4098,7 @@ c
|
||||
|
||||
|
||||
subroutine ic_rt2
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : nrayr,nrayth,ywrk0=>ywrk,ypwrk0=>ypwrk,
|
||||
. xc0=>xc,du10=>du1,grad2,dgrad2v,
|
||||
. gri,ggri,yyrfl
|
||||
@ -4266,7 +4276,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine pabs_curr(i,j,k)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : psjki,tauv,alphav,pdjki,ppabs,currj,didst,
|
||||
. ccci,q,tau1v
|
||||
implicit real*8 (a-h,o-z)
|
||||
@ -5845,7 +5855,7 @@ c
|
||||
c
|
||||
c
|
||||
subroutine pec(rhopin,nrho,pabs,currt,dpdvout,ajcdout)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
use beamdata, only : psjki,iiv,ppabs,ccci,pdjki,
|
||||
. nrayr,nrayth,nstep
|
||||
implicit real*8(a-h,o-z)
|
||||
@ -5958,8 +5968,11 @@ c radial coordinate of i-(i+1) interval mid point
|
||||
idecr=-1
|
||||
is=1
|
||||
do i=1,ii
|
||||
if(ipec.eq.0) xxi(i)=abs(psjki(j,k,i))
|
||||
if(ipec.eq.1) xxi(i)=sqrt(abs(psjki(j,k,i)))
|
||||
if(ipec.eq.0) then
|
||||
xxi(i)=abs(psjki(j,k,i))
|
||||
else
|
||||
xxi(i)=sqrt(abs(psjki(j,k,i)))
|
||||
end if
|
||||
if(psjki(j,k,i).ge.0.and.psjki(j,k,i).le.rtbc) then
|
||||
ypt(i)=ppabs(j,k,i)
|
||||
yamp(i)=ccci(j,k,i)
|
||||
@ -5983,15 +5996,16 @@ c radial coordinate of i-(i+1) interval mid point
|
||||
else
|
||||
if(xxi(i).gt.rtbc) exit
|
||||
if(xxi(i).lt.xxi(i-1)) then
|
||||
isev(is)=i !!!!!!!!!! it should be isev(is)=i-1
|
||||
! isev(is)=i !!!!!!!!!! it should be isev(is)=i-1
|
||||
isev(is)=i-1
|
||||
is=is+1
|
||||
idecr=-1
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end do
|
||||
c
|
||||
isev(is)=i-1
|
||||
c
|
||||
ppa1=0.0d0
|
||||
cci1=0.0d0
|
||||
do iis=1,is-1
|
||||
@ -6010,11 +6024,12 @@ c
|
||||
iind=1
|
||||
end if
|
||||
do ind=ind1,ind2,iind !!!!!!!!!! is it safe?
|
||||
iind=ind !!!!!!!!!! iind reused in the loop!
|
||||
if (idecr.eq.-1) iind=ind-1
|
||||
rt1=rtab1(iind)
|
||||
! iind=ind !!!!!!!!!! iind reused in the loop!
|
||||
indi=ind !!!!!!!!!! iind reused in the loop!
|
||||
if (idecr.eq.-1) indi=ind-1
|
||||
rt1=rtab1(indi)
|
||||
call locatex(xxi,iise,iise0,iise,rt1,itb1)
|
||||
if(itb1.gt.iise0.and.itb1.lt.iise) then
|
||||
if(itb1.ge.iise0.and.itb1.lt.iise) then
|
||||
call intlin(xxi(itb1),ypt(itb1),xxi(itb1+1),
|
||||
. ypt(itb1+1),rt1,ppa2)
|
||||
call intlin(xxi(itb1),yamp(itb1),xxi(itb1+1),
|
||||
@ -6370,7 +6385,7 @@ c
|
||||
end
|
||||
|
||||
subroutine pol_limit(qq,uu,vv)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
implicit none
|
||||
integer*4 ipolc
|
||||
real*8 bv(3),anv(3)
|
||||
@ -6468,7 +6483,7 @@ c
|
||||
|
||||
|
||||
subroutine wall_refl(xvrfl,anvrfl,qqtr,uutr,vvtr,irfl)
|
||||
use itm_constants, only : pi=>itm_pi
|
||||
use const_and_precisions, only : pi
|
||||
implicit none
|
||||
integer*4 ivac,irfl
|
||||
real*8 anv(3),xv(3),xvrfl(3)
|
||||
|
@ -2,7 +2,7 @@ subroutine gray_main(ijetto, mr, mz, r, z, psin, psiax, psibnd, &
|
||||
rax, zax, nbnd, rbnd, zbnd, nrho, psijet, f, te, dne, zeff, qsf, &
|
||||
powin, dpdv, jcd, pec, icd, ierr)
|
||||
|
||||
use itm_types, only : r8
|
||||
use const_and_precisions, only : r8
|
||||
implicit none
|
||||
|
||||
integer, intent(in) :: ijetto, mr, mz, nrho, nbnd
|
||||
@ -33,11 +33,21 @@ subroutine gray_main(ijetto, mr, mz, r, z, psin, psiax, psibnd, &
|
||||
|
||||
! read data plus initialization
|
||||
index_rt=1
|
||||
print*,'GRAY started'
|
||||
! call myflush
|
||||
call prfile
|
||||
print*,' file headers written'
|
||||
! call myflush
|
||||
call paraminit
|
||||
print*,' variables initialized'
|
||||
! call myflush
|
||||
call read_data(ijetto, mr, mz, r, z, psin, psiax, psibnd, rax, zax, &
|
||||
nbnd, rbnd, zbnd, nrho, psijet, f, te, dne, zeff, qsf, powin)
|
||||
print*,' spline computed'
|
||||
! call myflush
|
||||
call vectinit
|
||||
print*,' beam arrays allocated'
|
||||
! call myflush
|
||||
if(iercom.eq.0) then
|
||||
if(igrad.eq.0) call ic_rt
|
||||
if(igrad.gt.0) call ic_gb
|
||||
@ -47,6 +57,8 @@ subroutine gray_main(ijetto, mr, mz, r, z, psin, psiax, psibnd, &
|
||||
write(*,*) ' IERR = ', ierr
|
||||
return
|
||||
end if
|
||||
print*,' initial conditions set'
|
||||
! call myflush
|
||||
|
||||
! beam/ray propagation
|
||||
call gray_integration
|
||||
|
277
src/grayl.f
277
src/grayl.f
@ -1660,11 +1660,11 @@ c
|
||||
subroutine calcei(arg,result,int)
|
||||
c----------------------------------------------------------------------
|
||||
c
|
||||
c this fortran 77 packet computes the exponential integrals ei(x),
|
||||
c e1(x), and exp(-x)*ei(x) for real arguments x where
|
||||
c this fortran 77 packet computes the exponential integrals eint(x),
|
||||
c e1(x), and exp(-x)*eint(x) for real arguments x where
|
||||
c
|
||||
c integral (from t=-infinity to t=x) (exp(t)/t), x > 0,
|
||||
c ei(x) =
|
||||
c eint(x) =
|
||||
c -integral (from t=-x to t=infinity) (exp(t)/t), x < 0,
|
||||
c
|
||||
c and where the first integral is a principal value integral.
|
||||
@ -1672,14 +1672,14 @@ c the packet contains three function type subprograms: ei, eone,
|
||||
c and expei; and one subroutine type subprogram: calcei. the
|
||||
c calling statements for the primary entries are
|
||||
c
|
||||
c y = ei(x), where x .ne. 0,
|
||||
c y = eint(x), where x .ne. 0,
|
||||
c
|
||||
c y = eone(x), where x .gt. 0,
|
||||
c and
|
||||
c y = expei(x), where x .ne. 0,
|
||||
c
|
||||
c and where the entry points correspond to the functions ei(x),
|
||||
c e1(x), and exp(-x)*ei(x), respectively. the routine calcei
|
||||
c and where the entry points correspond to the functions eint(x),
|
||||
c e1(x), and exp(-x)*eint(x), respectively. the routine calcei
|
||||
c is intended for internal packet use only, all computations within
|
||||
c the packet being concentrated in this routine. the function
|
||||
c subprograms invoke calcei with the fortran statement
|
||||
@ -1689,9 +1689,9 @@ c
|
||||
c function parameters for calcei
|
||||
c call arg result int
|
||||
c
|
||||
c ei(x) x .ne. 0 ei(x) 1
|
||||
c eone(x) x .gt. 0 -ei(-x) 2
|
||||
c expei(x) x .ne. 0 exp(-x)*ei(x) 3
|
||||
c eint(x) x .ne. 0 eint(x) 1
|
||||
c eone(x) x .gt. 0 -eint(-x) 2
|
||||
c expei(x) x .ne. 0 exp(-x)*eint(x) 3
|
||||
c----------------------------------------------------------------------
|
||||
integer i,int
|
||||
double precision
|
||||
@ -1936,11 +1936,11 @@ c----------------------------------------------------------------------
|
||||
return
|
||||
c---------- last line of calcei ----------
|
||||
end
|
||||
function ei(x)
|
||||
function eint(x)
|
||||
c--------------------------------------------------------------------
|
||||
c
|
||||
c this function program computes approximate values for the
|
||||
c exponential integral ei(x), where x is real.
|
||||
c exponential integral eint(x), where x is real.
|
||||
c
|
||||
c author: w. j. cody
|
||||
c
|
||||
@ -1948,11 +1948,11 @@ c latest modification: january 12, 1988
|
||||
c
|
||||
c--------------------------------------------------------------------
|
||||
integer int
|
||||
double precision ei, x, result
|
||||
double precision eint, x, result
|
||||
c--------------------------------------------------------------------
|
||||
int = 1
|
||||
call calcei(x,result,int)
|
||||
ei = result
|
||||
eint = result
|
||||
return
|
||||
c---------- last line of ei ----------
|
||||
end
|
||||
@ -1960,7 +1960,7 @@ c---------- last line of ei ----------
|
||||
c--------------------------------------------------------------------
|
||||
c
|
||||
c this function program computes approximate values for the
|
||||
c function exp(-x) * ei(x), where ei(x) is the exponential
|
||||
c function exp(-x) * eint(x), where eint(x) is the exponential
|
||||
c integral, and x is real.
|
||||
c
|
||||
c author: w. j. cody
|
||||
@ -2004,11 +2004,11 @@ c
|
||||
subroutine calcei3(arg,result)
|
||||
c----------------------------------------------------------------------
|
||||
c
|
||||
c this fortran 77 packet computes the exponential integrals ei(x),
|
||||
c e1(x), and exp(-x)*ei(x) for real arguments x where
|
||||
c this fortran 77 packet computes the exponential integrals eint(x),
|
||||
c e1(x), and exp(-x)*eint(x) for real arguments x where
|
||||
c
|
||||
c integral (from t=-infinity to t=x) (exp(t)/t), x > 0,
|
||||
c ei(x) =
|
||||
c eint(x) =
|
||||
c -integral (from t=-x to t=infinity) (exp(t)/t), x < 0,
|
||||
c
|
||||
c and where the first integral is a principal value integral.
|
||||
@ -2016,14 +2016,14 @@ c the packet contains three function type subprograms: ei, eone,
|
||||
c and expei; and one subroutine type subprogram: calcei. the
|
||||
c calling statements for the primary entries are
|
||||
c
|
||||
c y = ei(x), where x .ne. 0,
|
||||
c y = eint(x), where x .ne. 0,
|
||||
c
|
||||
c y = eone(x), where x .gt. 0,
|
||||
c and
|
||||
c y = expei(x), where x .ne. 0,
|
||||
c
|
||||
c and where the entry points correspond to the functions ei(x),
|
||||
c e1(x), and exp(-x)*ei(x), respectively. the routine calcei
|
||||
c and where the entry points correspond to the functions eint(x),
|
||||
c e1(x), and exp(-x)*eint(x), respectively. the routine calcei
|
||||
c is intended for internal packet use only, all computations within
|
||||
c the packet being concentrated in this routine. the function
|
||||
c subprograms invoke calcei with the fortran statement
|
||||
@ -2033,9 +2033,9 @@ c
|
||||
c function parameters for calcei
|
||||
c call arg result int
|
||||
c
|
||||
c ei(x) x .ne. 0 ei(x) 1
|
||||
c eone(x) x .gt. 0 -ei(-x) 2
|
||||
c expei(x) x .ne. 0 exp(-x)*ei(x) 3
|
||||
c eint(x) x .ne. 0 eint(x) 1
|
||||
c eone(x) x .gt. 0 -eint(-x) 2
|
||||
c expei(x) x .ne. 0 exp(-x)*eint(x) 3
|
||||
c----------------------------------------------------------------------
|
||||
integer i,int
|
||||
double precision
|
||||
@ -4677,7 +4677,8 @@ c
|
||||
c
|
||||
c
|
||||
c
|
||||
subroutine surfit(iopt,m,x,y,z,w,xb,xe,yb,ye,kx,ky,s,nxest,nyest,
|
||||
subroutine dierckx_surfit(iopt,m,x,y,z,w,xb,xe,yb,ye,kx,ky,s,
|
||||
* nxest,nyest,
|
||||
* nmax,eps,nx,tx,ny,ty,c,fp,wrk1,lwrk1,wrk2,lwrk2,iwrk,kwrk,ier)
|
||||
c given the set of data points (x(i),y(i),z(i)) and the set of positive
|
||||
c numbers w(i),i=1,...,m, subroutine surfit determines a smooth bivar-
|
||||
@ -5072,8 +5073,8 @@ c we partition the working space and determine the spline approximation
|
||||
lby = lbx+nek
|
||||
lsx = lby+nek
|
||||
lsy = lsx+m*km1
|
||||
call fpsurf(iopt,m,x,y,z,w,xb,xe,yb,ye,kx,ky,s,nxest,nyest,
|
||||
* eps,tol,maxit,nest,km1,km2,ib1,ib3,ncest,nrint,nreg,nx,tx,
|
||||
call dierckx_fpsurf(iopt,m,x,y,z,w,xb,xe,yb,ye,kx,ky,s,nxest,
|
||||
* nyest,eps,tol,maxit,nest,km1,km2,ib1,ib3,ncest,nrint,nreg,nx,tx,
|
||||
* ny,ty,c,fp,wrk1(1),wrk1(lfp),wrk1(lco),wrk1(lf),wrk1(lff),
|
||||
* wrk1(la),wrk1(lq),wrk1(lbx),wrk1(lby),wrk1(lsx),wrk1(lsy),
|
||||
* wrk1(lh),iwrk(ki),iwrk(kn),wrk2,lwrk2,ier)
|
||||
@ -5081,8 +5082,8 @@ c we partition the working space and determine the spline approximation
|
||||
end
|
||||
|
||||
|
||||
subroutine fpsurf(iopt,m,x,y,z,w,xb,xe,yb,ye,kxx,kyy,s,nxest,
|
||||
* nyest,eta,tol,maxit,nmax,km1,km2,ib1,ib3,nc,intest,nrest,
|
||||
subroutine dierckx_fpsurf(iopt,m,x,y,z,w,xb,xe,yb,ye,kxx,kyy,s,
|
||||
* nxest,nyest,eta,tol,maxit,nmax,km1,km2,ib1,ib3,nc,intest,nrest,
|
||||
* nx0,tx,ny0,ty,c,fp,fp0,fpint,coord,f,ff,a,q,bx,by,spx,spy,h,
|
||||
* index,nummer,wrk,lwrk,ier)
|
||||
c ..
|
||||
@ -5106,7 +5107,7 @@ c ..local scalars..
|
||||
c ..local arrays..
|
||||
real*8 hx(6),hy(6)
|
||||
c ..function references..
|
||||
real*8 abs,fprati,sqrt
|
||||
real*8 abs,dierckx_fprati,sqrt
|
||||
integer min0
|
||||
c ..subroutine references..
|
||||
c fpback,fpbspl,fpgivs,fpdisc,fporde,fprank,fprota
|
||||
@ -5242,7 +5243,7 @@ c a minimal bandwidth.
|
||||
ky1 = ky+1
|
||||
130 iband = iband1+1
|
||||
c arrange the data points according to the panel they belong to.
|
||||
call fporde(x,y,m,kx,ky,tx,nx,ty,ny,nummer,index,nreg)
|
||||
call dierckx_fporde(x,y,m,kx,ky,tx,nx,ty,ny,nummer,index,nreg)
|
||||
c find ncof, the number of b-spline coefficients.
|
||||
nk1x = nx-kx1
|
||||
nk1y = ny-ky1
|
||||
@ -5274,9 +5275,9 @@ c fetch a new data point.
|
||||
wi = w(in)
|
||||
zi = z(in)*wi
|
||||
c evaluate for the x-direction, the (kx+1) non-zero b-splines at x(in).
|
||||
call fpbspl(tx,nx,kx,x(in),l1,hx)
|
||||
call dierckx_fpbspl(tx,nx,kx,x(in),l1,hx)
|
||||
c evaluate for the y-direction, the (ky+1) non-zero b-splines at y(in).
|
||||
call fpbspl(ty,ny,ky,y(in),l2,hy)
|
||||
call dierckx_fpbspl(ty,ny,ky,y(in),l2,hy)
|
||||
c store the value of these b-splines in spx and spy respectively.
|
||||
do 160 i=1,kx1
|
||||
spx(in,i) = hx(i)
|
||||
@ -5307,16 +5308,16 @@ c rotate the row into triangle by givens transformations .
|
||||
piv = h(i)
|
||||
if(piv.eq.0.) go to 220
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,a(irot,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,a(irot,1),cos,sin)
|
||||
c apply that transformation to the right hand side.
|
||||
call fprota(cos,sin,zi,f(irot))
|
||||
call dierckx_fprota(cos,sin,zi,f(irot))
|
||||
if(i.eq.iband) go to 230
|
||||
c apply that transformation to the left hand side.
|
||||
i2 = 1
|
||||
i3 = i+1
|
||||
do 210 j=i3,iband
|
||||
i2 = i2+1
|
||||
call fprota(cos,sin,h(j),a(irot,i2))
|
||||
call dierckx_fprota(cos,sin,h(j),a(irot,i2))
|
||||
210 continue
|
||||
220 continue
|
||||
c add the contribution of the row to the sum of squares of residual
|
||||
@ -5339,7 +5340,7 @@ c check whether the observation matrix is rank deficient.
|
||||
if(a(i,1).le.sigma) go to 280
|
||||
270 continue
|
||||
c backward substitution in case of full rank.
|
||||
call fpback(a,f,ncof,iband,c,nc)
|
||||
call dierckx_fpback(a,f,ncof,iband,c,nc)
|
||||
rank = ncof
|
||||
do 275 i=1,ncof
|
||||
q(i,1) = a(i,1)/dmax
|
||||
@ -5357,7 +5358,7 @@ c check whether there is sufficient working space
|
||||
lf =1
|
||||
lh = lf+ncof
|
||||
la = lh+iband
|
||||
call fprank(q,ff,ncof,iband,nc,sigma,c,sq,rank,wrk(la),
|
||||
call dierckx_fprank(q,ff,ncof,iband,nc,sigma,c,sq,rank,wrk(la),
|
||||
* wrk(lf),wrk(lh))
|
||||
do 295 i=1,ncof
|
||||
q(i,1) = q(i,1)/dmax
|
||||
@ -5489,13 +5490,13 @@ c test whether there are interior knots in the x-direction.
|
||||
if(nk1x.eq.kx1) go to 440
|
||||
c evaluate the discotinuity jumps of the kx-th order derivative of
|
||||
c the b-splines at the knots tx(l),l=kx+2,...,nx-kx-1.
|
||||
call fpdisc(tx,nx,kx2,bx,nmax)
|
||||
call dierckx_fpdisc(tx,nx,kx2,bx,nmax)
|
||||
440 ky2 = ky1 + 1
|
||||
c test whether there are interior knots in the y-direction.
|
||||
if(nk1y.eq.ky1) go to 450
|
||||
c evaluate the discontinuity jumps of the ky-th order derivative of
|
||||
c the b-splines at the knots ty(l),l=ky+2,...,ny-ky-1.
|
||||
call fpdisc(ty,ny,ky2,by,nmax)
|
||||
call dierckx_fpdisc(ty,ny,ky2,by,nmax)
|
||||
c initial value for p.
|
||||
450 p1 = 0.
|
||||
f1 = fp0-s
|
||||
@ -5549,14 +5550,14 @@ c square roots.
|
||||
i2 = min0(iband1,ncof-irot)
|
||||
if(piv.eq.0.) if(i2) 550,550,520
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,q(irot,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,q(irot,1),cos,sin)
|
||||
c apply that givens transformation to the right hand side.
|
||||
call fprota(cos,sin,zi,ff(irot))
|
||||
call dierckx_fprota(cos,sin,zi,ff(irot))
|
||||
if(i2.eq.0) go to 550
|
||||
c apply that givens transformation to the left hand side.
|
||||
do 510 l=1,i2
|
||||
l1 = l+1
|
||||
call fprota(cos,sin,h(l1),q(irot,l1))
|
||||
call dierckx_fprota(cos,sin,h(l1),q(irot,l1))
|
||||
510 continue
|
||||
520 do 530 l=1,i2
|
||||
h(l) = h(l+1)
|
||||
@ -5589,14 +5590,14 @@ c rotate the new row into triangle by givens transformations .
|
||||
i2 = min0(iband3,ncof-irot)
|
||||
if(piv.eq.0.) if(i2) 630,630,600
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,q(irot,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,q(irot,1),cos,sin)
|
||||
c apply that givens transformation to the right hand side.
|
||||
call fprota(cos,sin,zi,ff(irot))
|
||||
call dierckx_fprota(cos,sin,zi,ff(irot))
|
||||
if(i2.eq.0) go to 630
|
||||
c apply that givens transformation to the left hand side.
|
||||
do 590 l=1,i2
|
||||
l1 = l+1
|
||||
call fprota(cos,sin,h(l1),q(irot,l1))
|
||||
call dierckx_fprota(cos,sin,h(l1),q(irot,l1))
|
||||
590 continue
|
||||
600 do 610 l=1,i2
|
||||
h(l) = h(l+1)
|
||||
@ -5617,7 +5618,7 @@ c check whether the matrix is rank deficient.
|
||||
if(q(i,1).le.sigma) go to 670
|
||||
660 continue
|
||||
c backward substitution in case of full rank.
|
||||
call fpback(q,ff,ncof,iband4,c,nc)
|
||||
call dierckx_fpback(q,ff,ncof,iband4,c,nc)
|
||||
rank = ncof
|
||||
go to 675
|
||||
c in case of rank deficiency, find the minimum norm solution.
|
||||
@ -5626,7 +5627,7 @@ c in case of rank deficiency, find the minimum norm solution.
|
||||
lf = 1
|
||||
lh = lf+ncof
|
||||
la = lh+iband4
|
||||
call fprank(q,ff,ncof,iband4,nc,sigma,c,sq,rank,wrk(la),
|
||||
call dierckx_fprank(q,ff,ncof,iband4,nc,sigma,c,sq,rank,wrk(la),
|
||||
* wrk(lf),wrk(lh))
|
||||
675 do 680 i=1,ncof
|
||||
q(i,1) = q(i,1)/dmax
|
||||
@ -5687,7 +5688,7 @@ c test whether the iteration process proceeds as theoretically
|
||||
c expected.
|
||||
760 if(f2.ge.f1 .or. f2.le.f3) go to 800
|
||||
c find the new value of p.
|
||||
p = fprati(p1,f1,p2,f2,p3,f3)
|
||||
p = dierckx_fprati(p1,f1,p2,f2,p3,f3)
|
||||
770 continue
|
||||
c error codes and messages.
|
||||
780 ier = lwest
|
||||
@ -5748,7 +5749,7 @@ c if not, interchange x and y once more.
|
||||
940 return
|
||||
end
|
||||
|
||||
subroutine fprank(a,f,n,m,na,tol,c,sq,rank,aa,ff,h)
|
||||
subroutine dierckx_fprank(a,f,n,m,na,tol,c,sq,rank,aa,ff,h)
|
||||
c subroutine fprank finds the minimum norm solution of a least-
|
||||
c squares problem in case of rank deficiency.
|
||||
c
|
||||
@ -5803,12 +5804,12 @@ c the rank deficiency is increased by one.
|
||||
i2 = min0(n-ii,m1)
|
||||
piv = h(1)
|
||||
if(piv.eq.0.) go to 30
|
||||
call fpgivs(piv,a(ii,1),cos,sin)
|
||||
call fprota(cos,sin,yi,f(ii))
|
||||
call dierckx_fpgivs(piv,a(ii,1),cos,sin)
|
||||
call dierckx_fprota(cos,sin,yi,f(ii))
|
||||
if(i2.eq.0) go to 70
|
||||
do 20 j=1,i2
|
||||
j1 = j+1
|
||||
call fprota(cos,sin,h(j1),a(ii,j1))
|
||||
call dierckx_fprota(cos,sin,h(j1),a(ii,j1))
|
||||
h(j) = h(j1)
|
||||
20 continue
|
||||
go to 50
|
||||
@ -5894,13 +5895,13 @@ c rotate this column into aa by givens transformations.
|
||||
h(j2) = h(j3)
|
||||
150 continue
|
||||
go to 180
|
||||
160 call fpgivs(piv,aa(jj,1),cos,sin)
|
||||
160 call dierckx_fpgivs(piv,aa(jj,1),cos,sin)
|
||||
if(j1.eq.0) go to 200
|
||||
kk = jj
|
||||
do 170 j2=1,j1
|
||||
j3 = j2+1
|
||||
kk = kk-1
|
||||
call fprota(cos,sin,h(j3),aa(kk,j3))
|
||||
call dierckx_fprota(cos,sin,h(j3),aa(kk,j3))
|
||||
h(j2) = h(j3)
|
||||
170 continue
|
||||
180 jj = jj-1
|
||||
@ -5984,7 +5985,8 @@ c to zero the small diagonal elements of matrix (a).
|
||||
return
|
||||
end
|
||||
|
||||
subroutine fporde(x,y,m,kx,ky,tx,nx,ty,ny,nummer,index,nreg)
|
||||
subroutine dierckx_fporde(x,y,m,kx,ky,tx,nx,ty,ny,nummer,index,
|
||||
* nreg)
|
||||
c subroutine fporde sorts the data points (x(i),y(i)),i=1,2,...,m
|
||||
c according to the panel tx(l)<=x<tx(l+1),ty(k)<=y<ty(k+1), they belong
|
||||
c to. for each panel a stack is constructed containing the numbers
|
||||
@ -6033,8 +6035,8 @@ c ..
|
||||
|
||||
|
||||
|
||||
subroutine bispev(tx,nx,ty,ny,c,kx,ky,x,mx,y,my,z,wrk,lwrk,
|
||||
* iwrk,kwrk,ier)
|
||||
subroutine dierckx_bispev(tx,nx,ty,ny,c,kx,ky,x,mx,y,my,z,wrk,
|
||||
* lwrk,iwrk,kwrk,ier)
|
||||
c subroutine bispev evaluates on a grid (x(i),y(j)),i=1,...,mx; j=1,...
|
||||
c ,my a bivariate spline s(x,y) of degrees kx and ky, given in the
|
||||
c b-spline representation.
|
||||
@ -6128,12 +6130,12 @@ c are invalid control is immediately repassed to the calling program.
|
||||
50 continue
|
||||
60 ier = 0
|
||||
iw = mx*(kx+1)+1
|
||||
call fpbisp(tx,nx,ty,ny,c,kx,ky,x,mx,y,my,z,wrk(1),wrk(iw),
|
||||
* iwrk(1),iwrk(mx+1))
|
||||
call dierckx_fpbisp(tx,nx,ty,ny,c,kx,ky,x,mx,y,my,z,wrk(1),
|
||||
* wrk(iw),iwrk(1),iwrk(mx+1))
|
||||
100 return
|
||||
end
|
||||
c
|
||||
subroutine fpback(a,z,n,k,c,nest)
|
||||
subroutine dierckx_fpback(a,z,n,k,c,nest)
|
||||
c subroutine fpback calculates the solution of the system of
|
||||
c equations a*c = z with a a n x n upper triangular matrix
|
||||
c of bandwidth k.
|
||||
@ -6166,7 +6168,8 @@ c ..
|
||||
end
|
||||
c
|
||||
|
||||
subroutine fpbisp(tx,nx,ty,ny,c,kx,ky,x,mx,y,my,z,wx,wy,lx,ly)
|
||||
subroutine dierckx_fpbisp(tx,nx,ty,ny,c,kx,ky,x,mx,y,my,z,wx,wy,
|
||||
* lx,ly)
|
||||
c ..scalar arguments..
|
||||
integer nx,ny,kx,ky,mx,my
|
||||
c ..array arguments..
|
||||
@ -6195,7 +6198,7 @@ c ..
|
||||
l = l1
|
||||
l1 = l+1
|
||||
go to 10
|
||||
20 call fpbspl(tx,nx,kx,arg,l,h)
|
||||
20 call dierckx_fpbspl(tx,nx,kx,arg,l,h)
|
||||
lx(i) = l-kx1
|
||||
do 30 j=1,kx1
|
||||
wx(i,j) = h(j)
|
||||
@ -6215,7 +6218,7 @@ c ..
|
||||
l = l1
|
||||
l1 = l+1
|
||||
go to 50
|
||||
60 call fpbspl(ty,ny,ky,arg,l,h)
|
||||
60 call dierckx_fpbspl(ty,ny,ky,arg,l,h)
|
||||
ly(i) = l-ky1
|
||||
do 70 j=1,ky1
|
||||
wy(i,j) = h(j)
|
||||
@ -6245,7 +6248,7 @@ c ..
|
||||
return
|
||||
end
|
||||
|
||||
subroutine fpbspl(t,n,k,x,l,h)
|
||||
subroutine dierckx_fpbspl(t,n,k,x,l,h)
|
||||
c subroutine fpbspl evaluates the (k+1) non-zero b-splines of
|
||||
c degree k at t(l) <= x < t(l+1) using the stable recurrence
|
||||
c relation of de boor and cox.
|
||||
@ -6279,7 +6282,7 @@ c ..
|
||||
end
|
||||
c
|
||||
|
||||
subroutine fpchec(x,m,t,n,k,ier)
|
||||
subroutine dierckx_fpchec(x,m,t,n,k,ier)
|
||||
c subroutine fpchec verifies the number and the position of the knots
|
||||
c t(j),j=1,2,...,n of a spline of degree k, in relation to the number
|
||||
c and the position of the data points x(i),i=1,2,...,m. if all of the
|
||||
@ -6342,7 +6345,7 @@ c check condition no 5
|
||||
80 return
|
||||
end
|
||||
c
|
||||
subroutine fpdisc(t,n,k2,b,nest)
|
||||
subroutine dierckx_fpdisc(t,n,k2,b,nest)
|
||||
c subroutine fpdisc calculates the discontinuity jumps of the kth
|
||||
c derivative of the b-splines of degree k at the knots t(k+2)..t(n-k-1)
|
||||
c ..scalar arguments..
|
||||
@ -6387,7 +6390,7 @@ c ..
|
||||
end
|
||||
c
|
||||
|
||||
subroutine fpgivs(piv,ww,cos,sin)
|
||||
subroutine dierckx_fpgivs(piv,ww,cos,sin)
|
||||
c subroutine fpgivs calculates the parameters of a givens
|
||||
c transformation .
|
||||
c ..
|
||||
@ -6405,9 +6408,9 @@ c ..
|
||||
ww = dd
|
||||
return
|
||||
end
|
||||
subroutine fpgrre(ifsx,ifsy,ifbx,ifby,x,mx,y,my,z,mz,kx,ky,tx,nx,
|
||||
* ty,ny,p,c,nc,fp,fpx,fpy,mm,mynx,kx1,kx2,ky1,ky2,spx,spy,right,q,
|
||||
* ax,ay,bx,by,nrx,nry)
|
||||
subroutine dierckx_fpgrre(ifsx,ifsy,ifbx,ifby,x,mx,y,my,z,mz,kx,
|
||||
* ky,tx,nx,ty,ny,p,c,nc,fp,fpx,fpy,mm,mynx,kx1,kx2,ky1,ky2,spx,spy,
|
||||
* right,q,ax,ay,bx,by,nrx,nry)
|
||||
c ..
|
||||
c ..scalar arguments..
|
||||
real*8 p,fp
|
||||
@ -6470,7 +6473,7 @@ c ion problem in the x-direction.
|
||||
l1 = l+1
|
||||
number = number+1
|
||||
go to 10
|
||||
20 call fpbspl(tx,nx,kx,arg,l,h)
|
||||
20 call dierckx_fpbspl(tx,nx,kx,arg,l,h)
|
||||
do 30 i=1,kx1
|
||||
spx(it,i) = h(i)
|
||||
30 continue
|
||||
@ -6491,7 +6494,7 @@ c ion problem in the y-direction.
|
||||
l1 = l+1
|
||||
number = number+1
|
||||
go to 60
|
||||
70 call fpbspl(ty,ny,ky,arg,l,h)
|
||||
70 call dierckx_fpbspl(ty,ny,ky,arg,l,h)
|
||||
do 80 i=1,ky1
|
||||
spy(it,i) = h(i)
|
||||
80 continue
|
||||
@ -6501,11 +6504,11 @@ c ion problem in the y-direction.
|
||||
100 if(p.le.0.0d0) go to 120
|
||||
c calculate the non-zero elements of the matrix (bx).
|
||||
if(ifbx.ne.0 .or. nx.eq.2*kx1) go to 110
|
||||
call fpdisc(tx,nx,kx2,bx,nx)
|
||||
call dierckx_fpdisc(tx,nx,kx2,bx,nx)
|
||||
ifbx = 1
|
||||
c calculate the non-zero elements of the matrix (by).
|
||||
110 if(ifby.ne.0 .or. ny.eq.2*ky1) go to 120
|
||||
call fpdisc(ty,ny,ky2,by,ny)
|
||||
call dierckx_fpdisc(ty,ny,ky2,by,ny)
|
||||
ifby = 1
|
||||
c reduce the matrix (ax) to upper triangular form (rx) using givens
|
||||
c rotations. apply the same transformations to the rows of matrix q
|
||||
@ -6557,12 +6560,12 @@ c rotate the new row of matrix (ax) into triangle.
|
||||
piv = h(i)
|
||||
if(piv.eq.0.0d0) go to 240
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,ax(irot,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,ax(irot,1),cos,sin)
|
||||
c apply that transformation to the rows of matrix q.
|
||||
iq = (irot-1)*my
|
||||
do 220 j=1,my
|
||||
iq = iq+1
|
||||
call fprota(cos,sin,right(j),q(iq))
|
||||
call dierckx_fprota(cos,sin,right(j),q(iq))
|
||||
220 continue
|
||||
c apply that transformation to the columns of (ax).
|
||||
if(i.eq.ibandx) go to 250
|
||||
@ -6570,7 +6573,7 @@ c apply that transformation to the columns of (ax).
|
||||
i3 = i+1
|
||||
do 230 j=i3,ibandx
|
||||
i2 = i2+1
|
||||
call fprota(cos,sin,h(j),ax(irot,i2))
|
||||
call dierckx_fprota(cos,sin,h(j),ax(irot,i2))
|
||||
230 continue
|
||||
240 continue
|
||||
250 if(nrold.eq.number) go to 270
|
||||
@ -6627,11 +6630,11 @@ c rotate the new row of matrix (ay) into triangle.
|
||||
piv = h(i)
|
||||
if(piv.eq.0.0d0) go to 390
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,ay(irot,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,ay(irot,1),cos,sin)
|
||||
c apply that transformation to the colums of matrix g.
|
||||
ic = irot
|
||||
do 370 j=1,nk1x
|
||||
call fprota(cos,sin,right(j),c(ic))
|
||||
call dierckx_fprota(cos,sin,right(j),c(ic))
|
||||
ic = ic+nk1y
|
||||
370 continue
|
||||
c apply that transformation to the columns of matrix (ay).
|
||||
@ -6640,7 +6643,7 @@ c apply that transformation to the columns of matrix (ay).
|
||||
i3 = i+1
|
||||
do 380 j=i3,ibandy
|
||||
i2 = i2+1
|
||||
call fprota(cos,sin,h(j),ay(irot,i2))
|
||||
call dierckx_fprota(cos,sin,h(j),ay(irot,i2))
|
||||
380 continue
|
||||
390 continue
|
||||
400 if(nrold.eq.number) go to 420
|
||||
@ -6652,7 +6655,7 @@ c solution of the linear system (ry) c (rx)' = h.
|
||||
c first step: solve the system (ry) (c1) = h.
|
||||
k = 1
|
||||
do 450 i=1,nk1x
|
||||
call fpback(ay,c(k),nk1y,ibandy,c(k),ny)
|
||||
call dierckx_fpback(ay,c(k),nk1y,ibandy,c(k),ny)
|
||||
k = k+nk1y
|
||||
450 continue
|
||||
c second step: solve the system c (rx)' = (c1).
|
||||
@ -6664,7 +6667,7 @@ c second step: solve the system c (rx)' = (c1).
|
||||
right(i) = c(l)
|
||||
l = l+nk1y
|
||||
460 continue
|
||||
call fpback(ax,right,nk1x,ibandx,right,nx)
|
||||
call dierckx_fpback(ax,right,nk1x,ibandx,right,nx)
|
||||
l = k
|
||||
do 470 i=1,nk1x
|
||||
c(l) = right(i)
|
||||
@ -6731,7 +6734,7 @@ c adjust the different parameters.
|
||||
return
|
||||
end
|
||||
c
|
||||
subroutine fpknot(x,m,t,n,fpint,nrdata,nrint,nest,istart)
|
||||
subroutine dierckx_fpknot(x,m,t,n,fpint,nrdata,nrint,nest,istart)
|
||||
c subroutine fpknot locates an additional knot for a spline of degree
|
||||
c k and adjusts the corresponding parameters,i.e.
|
||||
c t : the position of the knots.
|
||||
@ -6797,7 +6800,7 @@ c adjust the different parameters.
|
||||
end
|
||||
c
|
||||
|
||||
subroutine fpregr(iopt,x,mx,y,my,z,mz,xb,xe,yb,ye,kx,ky,s,
|
||||
subroutine dierckx_fpregr(iopt,x,mx,y,my,z,mz,xb,xe,yb,ye,kx,ky,s,
|
||||
* nxest,nyest,tol,maxit,nc,nx,tx,ny,ty,c,fp,fp0,fpold,reducx,
|
||||
* reducy,fpintx,fpinty,lastdi,nplusx,nplusy,nrx,nry,nrdatx,nrdaty,
|
||||
* wrk,lwrk,ier)
|
||||
@ -6817,7 +6820,7 @@ c ..local scalars
|
||||
* nk1x,nk1y,nmaxx,nmaxy,nminx,nminy,nplx,nply,npl1,nrintx,
|
||||
* nrinty,nxe,nxk,nye
|
||||
c
|
||||
real*8 fprati
|
||||
real*8 dierckx_fprati
|
||||
|
||||
c ..subroutine references..
|
||||
c fpgrre,fpknot
|
||||
@ -7006,10 +7009,10 @@ c of squared residuals fpintx(j),j=1,2,...,nx-2*kx-1 (fpinty(j),j=1,2,
|
||||
c ...,ny-2*ky-1) for the data points having their absciss (ordinate)-
|
||||
c value belonging to that interval.
|
||||
c fp gives the total sum of squared residuals.
|
||||
call fpgrre(ifsx,ifsy,ifbx,ifby,x,mx,y,my,z,mz,kx,ky,tx,nx,ty,
|
||||
* ny,p,c,nc,fp,fpintx,fpinty,mm,mynx,kx1,kx2,ky1,ky2,wrk(lsx),
|
||||
* wrk(lsy),wrk(lri),wrk(lq),wrk(lax),wrk(lay),wrk(lbx),wrk(lby),
|
||||
* nrx,nry)
|
||||
call dierckx_fpgrre(ifsx,ifsy,ifbx,ifby,x,mx,y,my,z,mz,kx,ky,tx,
|
||||
* nx,ty,ny,p,c,nc,fp,fpintx,fpinty,mm,mynx,kx1,kx2,ky1,ky2,
|
||||
* wrk(lsx),wrk(lsy),wrk(lri),wrk(lq),wrk(lax),wrk(lay),wrk(lbx),
|
||||
* wrk(lby),nrx,nry)
|
||||
if(ier.eq.(-2)) fp0 = fp
|
||||
c test whether the least-squares spline is an acceptable solution.
|
||||
if(iopt.lt.0) go to 440
|
||||
@ -7055,7 +7058,7 @@ c addition in the x-direction.
|
||||
ifsx = 0
|
||||
do 220 l=1,nplusx
|
||||
c add a new knot in the x-direction
|
||||
call fpknot(x,mx,tx,nx,fpintx,nrdatx,nrintx,nxest,1)
|
||||
call dierckx_fpknot(x,mx,tx,nx,fpintx,nrdatx,nrintx,nxest,1)
|
||||
c test whether we cannot further increase the number of knots in the
|
||||
c x-direction.
|
||||
if(nx.eq.nxe) go to 250
|
||||
@ -7068,7 +7071,7 @@ c addition in the y-direction.
|
||||
ifsy = 0
|
||||
do 240 l=1,nplusy
|
||||
c add a new knot in the y-direction.
|
||||
call fpknot(y,my,ty,ny,fpinty,nrdaty,nrinty,nyest,1)
|
||||
call dierckx_fpknot(y,my,ty,ny,fpinty,nrdaty,nrinty,nyest,1)
|
||||
c test whether we cannot further increase the number of knots in the
|
||||
c y-direction.
|
||||
if(ny.eq.nye) go to 250
|
||||
@ -7107,10 +7110,10 @@ c iteration process to find the root of f(p)=s.
|
||||
do 350 iter = 1,maxit
|
||||
c find the smoothing spline sp(x,y) and the corresponding sum of
|
||||
c squared residuals fp.
|
||||
call fpgrre(ifsx,ifsy,ifbx,ifby,x,mx,y,my,z,mz,kx,ky,tx,nx,ty,
|
||||
* ny,p,c,nc,fp,fpintx,fpinty,mm,mynx,kx1,kx2,ky1,ky2,wrk(lsx),
|
||||
* wrk(lsy),wrk(lri),wrk(lq),wrk(lax),wrk(lay),wrk(lbx),wrk(lby),
|
||||
* nrx,nry)
|
||||
call dierckx_fpgrre(ifsx,ifsy,ifbx,ifby,x,mx,y,my,z,mz,kx,ky,tx,
|
||||
* nx,ty,ny,p,c,nc,fp,fpintx,fpinty,mm,mynx,kx1,kx2,ky1,ky2,
|
||||
* wrk(lsx),wrk(lsy),wrk(lri),wrk(lq),wrk(lax),wrk(lay),wrk(lbx),
|
||||
* wrk(lby),nrx,nry)
|
||||
c test whether the approximation sp(x,y) is an acceptable solution.
|
||||
fpms = fp-s
|
||||
if(abs(fpms).lt.acc) go to 440
|
||||
@ -7143,7 +7146,7 @@ c expected.
|
||||
330 if(f2.gt.0.0d0) ich1 = 1
|
||||
340 if(f2.ge.f1 .or. f2.le.f3) go to 410
|
||||
c find the new value of p.
|
||||
p = fprati(p1,f1,p2,f2,p3,f3)
|
||||
p = dierckx_fprati(p1,f1,p2,f2,p3,f3)
|
||||
350 continue
|
||||
c error codes and messages.
|
||||
400 ier = 3
|
||||
@ -7157,7 +7160,7 @@ c error codes and messages.
|
||||
440 return
|
||||
end
|
||||
c
|
||||
subroutine fprota(cos,sin,a,b)
|
||||
subroutine dierckx_fprota(cos,sin,a,b)
|
||||
c subroutine fprota applies a givens rotation to a and b.
|
||||
c ..
|
||||
c ..scalar arguments..
|
||||
@ -7174,7 +7177,7 @@ c ..
|
||||
c
|
||||
c
|
||||
c
|
||||
double precision function fprati(p1,f1,p2,f2,p3,f3)
|
||||
double precision function dierckx_fprati(p1,f1,p2,f2,p3,f3)
|
||||
c given three points (p1,f1),(p2,f2) and (p3,f3), function fprati
|
||||
c gives the value of p such that the rational interpolating function
|
||||
c of the form r(p) = (u*p+v)/(p+w) equals zero at p.
|
||||
@ -7200,11 +7203,11 @@ c adjust the value of p1,f1,p3 and f3 such that f1 > 0 and f3 < 0.
|
||||
go to 40
|
||||
30 p3 = p2
|
||||
f3 = f2
|
||||
40 fprati = p
|
||||
40 dierckx_fprati = p
|
||||
return
|
||||
end
|
||||
c
|
||||
subroutine regrid(iopt,mx,x,my,y,z,xb,xe,yb,ye,kx,ky,s,
|
||||
subroutine dierckx_regrid(iopt,mx,x,my,y,z,xb,xe,yb,ye,kx,ky,s,
|
||||
* nxest,nyest,nx,tx,ny,ty,c,fp,wrk,lwrk,iwrk,kwrk,ier)
|
||||
c given the set of values z(i,j) on the rectangular grid (x(i),y(j)),
|
||||
c i=1,...,mx;j=1,...,my, subroutine regrid determines a smooth bivar-
|
||||
@ -7523,7 +7526,7 @@ c are invalid, control is immediately repassed to the calling program.
|
||||
tx(j) = xe
|
||||
j = j-1
|
||||
30 continue
|
||||
call fpchec(x,mx,tx,nx,kx,ier)
|
||||
call dierckx_fpchec(x,mx,tx,nx,kx,ier)
|
||||
if(ier.ne.0) go to 70
|
||||
if(ny.lt.nminy .or. ny.gt.nyest) go to 70
|
||||
j = ny
|
||||
@ -7532,7 +7535,7 @@ c are invalid, control is immediately repassed to the calling program.
|
||||
ty(j) = ye
|
||||
j = j-1
|
||||
40 continue
|
||||
call fpchec(y,my,ty,ny,ky,ier)
|
||||
call dierckx_fpchec(y,my,ty,ny,ky,ier)
|
||||
if(ier) 70,60,70
|
||||
50 if(s.lt.0.0d0) go to 70
|
||||
if(s.eq.0.0d0 .and. (nxest.lt.(mx+kx1) .or. nyest.lt.(my+ky1)) )
|
||||
@ -7547,14 +7550,14 @@ c we partition the working space and determine the spline approximation
|
||||
knry = knrx+mx
|
||||
kndx = knry+my
|
||||
kndy = kndx+nxest
|
||||
call fpregr(iopt,x,mx,y,my,z,mz,xb,xe,yb,ye,kx,ky,s,nxest,nyest,
|
||||
* tol,maxit,nc,nx,tx,ny,ty,c,fp,wrk(1),wrk(2),wrk(3),wrk(4),
|
||||
call dierckx_fpregr(iopt,x,mx,y,my,z,mz,xb,xe,yb,ye,kx,ky,s,nxest,
|
||||
* nyest,tol,maxit,nc,nx,tx,ny,ty,c,fp,wrk(1),wrk(2),wrk(3),wrk(4),
|
||||
* wrk(lfpx),wrk(lfpy),iwrk(1),iwrk(2),iwrk(3),iwrk(knrx),
|
||||
* iwrk(knry),iwrk(kndx),iwrk(kndy),wrk(lww),jwrk,ier)
|
||||
70 return
|
||||
end
|
||||
c
|
||||
subroutine parder(tx,nx,ty,ny,c,kx,ky,nux,nuy,x,mx,y,my,z,
|
||||
subroutine dierckx_parder(tx,nx,ty,ny,c,kx,ky,nux,nuy,x,mx,y,my,z,
|
||||
* wrk,lwrk,iwrk,kwrk,ier)
|
||||
c subroutine parder evaluates on a grid (x(i),y(j)),i=1,...,mx; j=1,...
|
||||
c ,my the partial derivative ( order nux,nuy) of a bivariate spline
|
||||
@ -7724,13 +7727,13 @@ c we calculate the b-spline coefficients of this spline
|
||||
c we partition the working space and evaluate the partial derivative
|
||||
300 iwx = 1+nxx*nyy
|
||||
iwy = iwx+mx*(kx1-nux)
|
||||
call fpbisp(tx(nux+1),nx-2*nux,ty(nuy+1),ny-2*nuy,wrk,kkx,kky,
|
||||
* x,mx,y,my,z,wrk(iwx),wrk(iwy),iwrk(1),iwrk(mx+1))
|
||||
call dierckx_fpbisp(tx(nux+1),nx-2*nux,ty(nuy+1),ny-2*nuy,wrk,kkx,
|
||||
* kky,x,mx,y,my,z,wrk(iwx),wrk(iwy),iwrk(1),iwrk(mx+1))
|
||||
400 return
|
||||
end
|
||||
|
||||
|
||||
subroutine coeff_parder(tx,nx,ty,ny,c,kx,ky,nux,nuy,
|
||||
subroutine dierckx_coeff_parder(tx,nx,ty,ny,c,kx,ky,nux,nuy,
|
||||
* wrk,lwrk,ier)
|
||||
c subroutine parder evaluates on a grid (x(i),y(j)),i=1,...,mx; j=1,...
|
||||
c ,my the partial derivative ( order nux,nuy) of a bivariate spline
|
||||
@ -7882,7 +7885,7 @@ c we calculate the b-spline coefficients of this spline
|
||||
c
|
||||
c
|
||||
c
|
||||
subroutine curfit(iopt,m,x,y,w,xb,xe,k,s,nest,n,t,c,fp,
|
||||
subroutine dierckx_curfit(iopt,m,x,y,w,xb,xe,k,s,nest,n,t,c,fp,
|
||||
* wrk,lwrk,iwrk,ier)
|
||||
c given the set of data points (x(i),y(i)) and the set of positive
|
||||
c numbers w(i),i=1,2,...,m,subroutine curfit determines a smooth spline
|
||||
@ -8126,7 +8129,7 @@ c are invalid, control is immediately repassed to the calling program.
|
||||
t(j) = xe
|
||||
j = j-1
|
||||
20 continue
|
||||
call fpchec(x,m,t,n,k,ier)
|
||||
call dierckx_fpchec(x,m,t,n,k,ier)
|
||||
if(ier) 50,40,50
|
||||
30 if(s.lt.0.0d0) go to 50
|
||||
if(s.eq.0.0d0 .and. nest.lt.(m+k1)) go to 50
|
||||
@ -8138,15 +8141,15 @@ c we partition the working space and determine the spline approximation.
|
||||
ib = ia+nest*k1
|
||||
ig = ib+nest*k2
|
||||
iq = ig+nest*k2
|
||||
call fpcurf(iopt,x,y,w,m,xb,xe,k,s,nest,tol,maxit,k1,k2,n,t,c,fp,
|
||||
* wrk(ifp),wrk(iz),wrk(ia),wrk(ib),wrk(ig),wrk(iq),iwrk,ier)
|
||||
call dierckx_fpcurf(iopt,x,y,w,m,xb,xe,k,s,nest,tol,maxit,k1,k2,n,
|
||||
* t,c,fp,wrk(ifp),wrk(iz),wrk(ia),wrk(ib),wrk(ig),wrk(iq),iwrk,ier)
|
||||
50 return
|
||||
end
|
||||
c
|
||||
c
|
||||
c
|
||||
subroutine fpcurf(iopt,x,y,w,m,xb,xe,k,s,nest,tol,maxit,k1,k2,
|
||||
* n,t,c,fp,fpint,z,a,b,g,q,nrdata,ier)
|
||||
subroutine dierckx_fpcurf(iopt,x,y,w,m,xb,xe,k,s,nest,tol,maxit,
|
||||
* k1,k2,n,t,c,fp,fpint,z,a,b,g,q,nrdata,ier)
|
||||
c ..
|
||||
c ..scalar arguments..
|
||||
real*8 xb,xe,s,tol,fp
|
||||
@ -8163,7 +8166,7 @@ c ..local scalars..
|
||||
c ..local arrays..
|
||||
real*8 h(7)
|
||||
c ..function references
|
||||
real*8 abs,fprati
|
||||
real*8 abs,dierckx_fprati
|
||||
integer max0,min0
|
||||
c ..subroutine references..
|
||||
c fpback,fpbspl,fpgivs,fpdisc,fpknot,fprota
|
||||
@ -8274,7 +8277,7 @@ c search for knot interval t(l) <= xi < t(l+1).
|
||||
l = l+1
|
||||
go to 85
|
||||
c evaluate the (k+1) non-zero b-splines at xi and store them in q.
|
||||
90 call fpbspl(t,n,k,xi,l,h)
|
||||
90 call dierckx_fpbspl(t,n,k,xi,l,h)
|
||||
do 95 i=1,k1
|
||||
q(it,i) = h(i)
|
||||
h(i) = h(i)*wi
|
||||
@ -8286,16 +8289,16 @@ c rotate the new row of the observation matrix into triangle.
|
||||
piv = h(i)
|
||||
if(piv.eq.0.0d0) go to 110
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,a(j,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,a(j,1),cos,sin)
|
||||
c transformations to right hand side.
|
||||
call fprota(cos,sin,yi,z(j))
|
||||
call dierckx_fprota(cos,sin,yi,z(j))
|
||||
if(i.eq.k1) go to 120
|
||||
i2 = 1
|
||||
i3 = i+1
|
||||
do 100 i1 = i3,k1
|
||||
i2 = i2+1
|
||||
c transformations to left hand side.
|
||||
call fprota(cos,sin,h(i1),a(j,i2))
|
||||
call dierckx_fprota(cos,sin,h(i1),a(j,i2))
|
||||
100 continue
|
||||
110 continue
|
||||
c add contribution of this row to the sum of squares of residual
|
||||
@ -8307,7 +8310,7 @@ c right hand sides.
|
||||
fpint(n-1) = fpold
|
||||
nrdata(n) = nplus
|
||||
c backward substitution to obtain the b-spline coefficients.
|
||||
call fpback(a,z,nk1,k1,c,nest)
|
||||
call dierckx_fpback(a,z,nk1,k1,c,nest)
|
||||
c test whether the approximation sinf(x) is an acceptable solution.
|
||||
if(iopt.lt.0) go to 440
|
||||
fpms = fp-s
|
||||
@ -8358,7 +8361,7 @@ c t(j+k) <= x(i) <= t(j+k+1) and store it in fpint(j),j=1,2,...nrint.
|
||||
fpint(nrint) = fpart
|
||||
do 190 l=1,nplus
|
||||
c add a new knot.
|
||||
call fpknot(x,m,t,n,fpint,nrdata,nrint,nest,1)
|
||||
call dierckx_fpknot(x,m,t,n,fpint,nrdata,nrint,nest,1)
|
||||
c if n=nmax we locate the knots as for interpolation.
|
||||
if(n.eq.nmax) go to 10
|
||||
c test whether we cannot further increase the number of knots.
|
||||
@ -8392,7 +8395,7 @@ c guaranteed by taking f1>0 and f3<0. c
|
||||
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
|
||||
c evaluate the discontinuity jump of the kth derivative of the
|
||||
c b-splines at the knots t(l),l=k+2,...n-k-1 and store in b.
|
||||
call fpdisc(t,n,k2,b,nest)
|
||||
call dierckx_fpdisc(t,n,k2,b,nest)
|
||||
c initial value for p.
|
||||
p1 = 0.0d0
|
||||
f1 = fp0-s
|
||||
@ -8427,23 +8430,23 @@ c the row of matrix b is rotated into triangle by givens transformation
|
||||
do 290 j=it,nk1
|
||||
piv = h(1)
|
||||
c calculate the parameters of the givens transformation.
|
||||
call fpgivs(piv,g(j,1),cos,sin)
|
||||
call dierckx_fpgivs(piv,g(j,1),cos,sin)
|
||||
c transformations to right hand side.
|
||||
call fprota(cos,sin,yi,c(j))
|
||||
call dierckx_fprota(cos,sin,yi,c(j))
|
||||
if(j.eq.nk1) go to 300
|
||||
i2 = k1
|
||||
if(j.gt.n8) i2 = nk1-j
|
||||
do 280 i=1,i2
|
||||
c transformations to left hand side.
|
||||
i1 = i+1
|
||||
call fprota(cos,sin,h(i1),g(j,i1))
|
||||
call dierckx_fprota(cos,sin,h(i1),g(j,i1))
|
||||
h(i) = h(i1)
|
||||
280 continue
|
||||
h(i2+1) = 0.0d0
|
||||
290 continue
|
||||
300 continue
|
||||
c backward substitution to obtain the b-spline coefficients.
|
||||
call fpback(g,c,nk1,k2,c,nest)
|
||||
call dierckx_fpback(g,c,nk1,k2,c,nest)
|
||||
c computation of f(p).
|
||||
fp = 0.0d0
|
||||
l = k2
|
||||
@ -8489,7 +8492,7 @@ c test whether the iteration process proceeds as theoretically
|
||||
c expected.
|
||||
350 if(f2.ge.f1 .or. f2.le.f3) go to 410
|
||||
c find the new value for p.
|
||||
p = fprati(p1,f1,p2,f2,p3,f3)
|
||||
p = dierckx_fprati(p1,f1,p2,f2,p3,f3)
|
||||
360 continue
|
||||
c error codes and messages.
|
||||
400 ier = 3
|
||||
@ -8504,7 +8507,7 @@ c error codes and messages.
|
||||
c
|
||||
c
|
||||
c
|
||||
subroutine gsplder(t,n,c,k,nu,x,y,m,wrk,ier)
|
||||
subroutine dierckx_splder(t,n,c,k,nu,x,y,m,wrk,ier)
|
||||
c subroutine gsplder evaluates in a number of points x(i),i=1,2,...,m
|
||||
c the derivative of order nu of a spline s(x) of degree k,given in
|
||||
c its b-spline representation.
|
||||
@ -8629,7 +8632,7 @@ c search for knot interval t(l) <= arg < t(l+1)
|
||||
l1 = l+1
|
||||
go to 140
|
||||
c evaluate the non-zero b-splines of degree k-nu at arg.
|
||||
150 call fpbspl(t,n,kk,arg,l,h)
|
||||
150 call dierckx_fpbspl(t,n,kk,arg,l,h)
|
||||
c find the value of the derivative at x=arg.
|
||||
sp = 0.0d0
|
||||
ll = l-k1
|
||||
@ -8644,7 +8647,7 @@ c find the value of the derivative at x=arg.
|
||||
c
|
||||
c
|
||||
c
|
||||
subroutine splev(t,n,c,k,x,y,m,ier)
|
||||
subroutine dierckx_splev(t,n,c,k,x,y,m,ier)
|
||||
c subroutine splev evaluates in a number of points x(i),i=1,2,...,m
|
||||
c a spline s(x) of degree k, given in its b-spline representation.
|
||||
c
|
||||
@ -8727,7 +8730,7 @@ c search for knot interval t(l) <= arg < t(l+1)
|
||||
l1 = l+1
|
||||
go to 40
|
||||
c evaluate the non-zero b-splines at arg.
|
||||
50 call fpbspl(t,n,k,arg,l,h)
|
||||
50 call dierckx_fpbspl(t,n,k,arg,l,h)
|
||||
c find the value of s(x) at x=arg.
|
||||
sp = 0.0d0
|
||||
ll = l-k1
|
||||
@ -8742,7 +8745,7 @@ c find the value of s(x) at x=arg.
|
||||
c
|
||||
c
|
||||
c
|
||||
subroutine sproota(val,t,n,c,zero,mest,m,ier)
|
||||
subroutine dierckx_sproota(val,t,n,c,zero,mest,m,ier)
|
||||
c subroutine sproot finds the zeros of a cubic spline s(x),which is
|
||||
c given in its normalized b-spline representation.
|
||||
c
|
||||
@ -8885,7 +8888,7 @@ c t(l) <= x <= t(l+1).
|
||||
* z3.and.z4).or.nz0.and.(z1.and.(nz3.or.nz2.and.z4).or.z2.and.
|
||||
* nz3.and.nz4))))go to 200
|
||||
c find the zeros of ql(y).
|
||||
100 call fpcuro(a3,a2,a1,a0,y,j)
|
||||
100 call dierckx_fpcuro(a3,a2,a1,a0,y,j)
|
||||
if(j.eq.0) go to 200
|
||||
c find which zeros of pl(x) are zeros of s(x).
|
||||
do 150 i=1,j
|
||||
@ -8926,7 +8929,7 @@ c the zeros of s(x) are arranged in increasing order.
|
||||
end
|
||||
|
||||
c
|
||||
subroutine sprofil(iopt,tx,nx,ty,ny,c,kx,ky,u,nu,cu,ier)
|
||||
subroutine dierckx_sprofil(iopt,tx,nx,ty,ny,c,kx,ky,u,nu,cu,ier)
|
||||
c if iopt=0 subroutine sprofil calculates the b-spline coefficients of
|
||||
c the univariate spline f(y) = s(u,y) with s(x,y) a bivariate spline of
|
||||
c degrees kx and ky, given in the b-spline representation.
|
||||
@ -9005,7 +9008,7 @@ c the b-splinecoefficients of f(y) = s(u,y).
|
||||
l = l1
|
||||
l1 = l+1
|
||||
go to 110
|
||||
120 call fpbspl(tx,nx,kx,u,l,h)
|
||||
120 call dierckx_fpbspl(tx,nx,kx,u,l,h)
|
||||
m0 = (l-kx1)*nky1+1
|
||||
do 140 i=1,nky1
|
||||
m = m0
|
||||
@ -9028,7 +9031,7 @@ c the b-splinecoefficients of g(x) = s(x,u).
|
||||
l = l1
|
||||
l1 = l+1
|
||||
go to 210
|
||||
220 call fpbspl(ty,ny,ky,u,l,h)
|
||||
220 call dierckx_fpbspl(ty,ny,ky,u,l,h)
|
||||
m0 = l-ky
|
||||
do 240 i=1,nkx1
|
||||
m = m0
|
||||
@ -9043,7 +9046,7 @@ c the b-splinecoefficients of g(x) = s(x,u).
|
||||
300 return
|
||||
end
|
||||
c
|
||||
subroutine fpcuro(a,b,c,d,x,n)
|
||||
subroutine dierckx_fpcuro(a,b,c,d,x,n)
|
||||
c subroutine fpcuro finds the real zeros of a cubic polynomial
|
||||
c p(x) = a*x**3+b*x**2+c*x+d.
|
||||
c
|
||||
|
@ -1,32 +0,0 @@
|
||||
!> Module implementing the ITM physics constants
|
||||
!>
|
||||
!> Source:
|
||||
!> based on SOLPS b2mod_constants.F
|
||||
!> '09/12/07 xpb : source CODATA 2006 (http://www.nist.gov/)'
|
||||
!> pulled from ets r100
|
||||
!>
|
||||
!> \author David Coster
|
||||
!>
|
||||
!> \version "$Id: itm_constants.f90 37 2009-08-17 17:15:00Z coster $"
|
||||
|
||||
module itm_constants
|
||||
|
||||
use itm_types
|
||||
|
||||
real (kind = R8), parameter :: itm_pi = 3.141592653589793238462643383280_R8
|
||||
real (kind = R8), parameter :: itm_c = 2.99792458e8_R8 ! speed of light, m/s
|
||||
real (kind = R8), parameter :: itm_me = 9.10938215e-31_R8 ! electron mass, kg
|
||||
real (kind = R8), parameter :: itm_mp = 1.672621637e-27_R8 ! proton mass, kg
|
||||
real (kind = R8), parameter :: itm_md = 3.34358320e-27_R8 ! deuteron mass, kg
|
||||
real (kind = R8), parameter :: itm_mt = 5.00735588e-27_R8 ! triton mass, kg
|
||||
real (kind = R8), parameter :: itm_ma = 6.64465620e-27_R8 ! alpha mass, kg
|
||||
real (kind = R8), parameter :: itm_amu = 1.660538782e-27_R8 ! amu, kg
|
||||
real (kind = R8), parameter :: itm_ev = 1.602176487e-19_R8
|
||||
real (kind = R8), parameter :: itm_qe = itm_ev
|
||||
real (kind = R8), parameter :: itm_mu0 = 4.0e-7_R8 * itm_pi
|
||||
real (kind = R8), parameter :: itm_eps0 = 1.0_R8 / (itm_mu0 * itm_c * itm_c)
|
||||
real (kind = R8), parameter :: itm_avogr = 6.02214179e23_R8
|
||||
real (kind = R8), parameter :: itm_KBolt = 1.3806504e-23_R8
|
||||
character (len=64), parameter :: itm_constants_version = '$Id: itm_constants.f90 37 2009-08-17 17:15:00Z coster $'
|
||||
|
||||
end module itm_constants
|
@ -1,50 +0,0 @@
|
||||
!> Module implementing the ITM basic types
|
||||
!>
|
||||
!> Source:
|
||||
!> based on SOLPS b2mod_types.F
|
||||
!> pulled from ets r100 and extended with input from C. Konz, T. Ribeiro & B. Scott
|
||||
!>
|
||||
!> \author David Coster
|
||||
!>
|
||||
!> \version "$Id: itm_types.f90 144 2010-10-07 09:26:24Z konz $"
|
||||
|
||||
module itm_types
|
||||
|
||||
INTEGER, PARAMETER :: ITM_I1 = SELECTED_INT_KIND (2) ! Integer*1
|
||||
INTEGER, PARAMETER :: ITM_I2 = SELECTED_INT_KIND (4) ! Integer*2
|
||||
INTEGER, PARAMETER :: ITM_I4 = SELECTED_INT_KIND (9) ! Integer*4
|
||||
INTEGER, PARAMETER :: ITM_I8 = SELECTED_INT_KIND (18) ! Integer*8
|
||||
INTEGER, PARAMETER :: R4 = SELECTED_REAL_KIND (6, 37) ! Real*4
|
||||
INTEGER, PARAMETER :: R8 = SELECTED_REAL_KIND (15, 300) ! Real*8
|
||||
|
||||
INTEGER, PARAMETER :: itm_int_invalid = -999999999
|
||||
REAL(R8), PARAMETER :: itm_r8_invalid = -9.0D40
|
||||
|
||||
interface itm_is_valid
|
||||
module procedure itm_is_valid_int4, itm_is_valid_int8, itm_is_valid_real8
|
||||
end interface
|
||||
|
||||
contains
|
||||
|
||||
logical function itm_is_valid_int4(in_int)
|
||||
implicit none
|
||||
integer(ITM_I4) in_int
|
||||
itm_is_valid_int4 = in_int .ne. itm_int_invalid
|
||||
return
|
||||
end function itm_is_valid_int4
|
||||
|
||||
logical function itm_is_valid_int8(in_int)
|
||||
implicit none
|
||||
integer(ITM_I8) in_int
|
||||
itm_is_valid_int8 = in_int .ne. itm_int_invalid
|
||||
return
|
||||
end function itm_is_valid_int8
|
||||
|
||||
logical function itm_is_valid_real8(in_real)
|
||||
implicit none
|
||||
real(R8) in_real
|
||||
itm_is_valid_real8 = abs(in_real - itm_r8_invalid) .gt. abs(itm_r8_invalid) * 1.0e-15_R8
|
||||
return
|
||||
end function itm_is_valid_real8
|
||||
|
||||
end module itm_types
|
286
src/main.f90
Normal file
286
src/main.f90
Normal file
@ -0,0 +1,286 @@
|
||||
program main
|
||||
use const_and_precisions, only : r8, pi
|
||||
implicit none
|
||||
integer, parameter :: cocosout=3
|
||||
integer :: u, ierr, cocos, exp2pi, exp2piout, idum, i, j, ipsinorm
|
||||
logical :: ispsinorm
|
||||
logical :: phiccw, psiincr, qpos, phiccwout, psiincrout, qposout
|
||||
character(len=255) :: desc, eqdskfile, prffile
|
||||
character(len=*), parameter :: fmt2000='(a48,3i4)',fmt2020='(5e16.9)',fmt2022='(2i5)'
|
||||
integer :: nr, nz, nbnd, nprf
|
||||
real(r8) :: deltar, deltaz, r0, r1, zmid, rax, zax, psiax, psib, bref, ipla, &
|
||||
dummy, z1, dr, dz, dpsin, bref0, ipla0, qb0, psifact, psii, powin, pec, icd
|
||||
real(r8), dimension(:,:), allocatable :: psi2d
|
||||
real(r8), dimension(:), allocatable :: r, z, psi1d, q, fdia, rbnd, zbnd, &
|
||||
psiprf, te, dne, zeff, cte, cne, czeff, teeq, dneeq, zeffeq, dpdv, jcd
|
||||
real(r8), external :: fspli
|
||||
|
||||
! === read filenames and input power from gray.data ===
|
||||
u = get_free_unit()
|
||||
open(u,file='gray.data',status= 'unknown')
|
||||
read(u,*)
|
||||
read(u,*)
|
||||
read(u,*) powin
|
||||
do i=1,13
|
||||
read(u,*)
|
||||
end do
|
||||
read(u,*) desc
|
||||
eqdskfile=trim(desc)//'.eqdsk'
|
||||
read(u,*) ipsinorm
|
||||
ispsinorm=(ipsinorm==1)
|
||||
read(u,*)
|
||||
read(u,*) desc
|
||||
prffile=trim(desc)//'.prf'
|
||||
read(u,*)
|
||||
read(u,*) dummy,dummy,cocos
|
||||
close(u)
|
||||
|
||||
! === read EQDSK ===
|
||||
u = get_free_unit()
|
||||
open(unit=u,file=eqdskfile,status='OLD',action='READ',iostat=ierr)
|
||||
if(ierr/=0) then
|
||||
write(*,*) 'Cannot open file '//trim(eqdskfile)
|
||||
stop
|
||||
end if
|
||||
|
||||
! read grid size and allocate arrays
|
||||
read (u,fmt2000) desc,idum,nr,nz
|
||||
allocate(psi2d(nr,nz), r(nr), z(nz), psi1d(nr), q(nr), fdia(nr), stat=ierr)
|
||||
if (ierr/=0) then
|
||||
close(u)
|
||||
call free_allocs
|
||||
write(*,*) 'cannot allocate arrays for equilibrium data'
|
||||
stop
|
||||
end if
|
||||
! read 0D fields
|
||||
read (u,fmt2020) deltar, deltaz, r0, r1, zmid
|
||||
read (u,fmt2020) rax, zax, psiax, psib, bref
|
||||
read (u,fmt2020) ipla, (dummy,i=1,4)
|
||||
read (u,fmt2020) (dummy,i=1,5)
|
||||
! read 1D-2D fields
|
||||
read (u,fmt2020) (fdia(i),i=1,nr)
|
||||
read (u,fmt2020) (dummy,i=1,nr)
|
||||
read (u,fmt2020) (dummy,i=1,nr)
|
||||
read (u,fmt2020) (dummy,i=1,nr)
|
||||
read (u,fmt2020) ((psi2d(i,j),i=1,nr),j=1,nz)
|
||||
read (u,fmt2020) (q(i),i=1,nr)
|
||||
! read boundary size and allocate arrays
|
||||
read (u,fmt2022) nbnd
|
||||
if (nbnd>0) then
|
||||
allocate(rbnd(nbnd), zbnd(nbnd), stat=ierr)
|
||||
if (ierr/=0) then
|
||||
close(u)
|
||||
call free_allocs
|
||||
write(*,*) 'cannot allocate arrays for boundary data'
|
||||
stop
|
||||
end if
|
||||
! read boundary shape
|
||||
read (u,fmt2020) (rbnd(i), zbnd(i),i=1,nbnd)
|
||||
end if
|
||||
close(u)
|
||||
|
||||
! normalize psi2d
|
||||
if (.not.ispsinorm) psi2d = (psi2d - psiax)/(psib - psiax)
|
||||
|
||||
! interpret cocos numbers
|
||||
call decode_cocos(cocos,exp2pi,phiccw,psiincr,qpos)
|
||||
call decode_cocos(cocosout,exp2piout,phiccwout,psiincrout,qposout)
|
||||
|
||||
! check sign consistency
|
||||
ipla0=ipla
|
||||
bref0=bref
|
||||
if (psiincr) then
|
||||
ipla=sign(ipla,psib - psiax)
|
||||
else
|
||||
ipla=sign(ipla,psiax - psib)
|
||||
end if
|
||||
bref=sign(bref,fdia(nr))
|
||||
if (ipla/ipla0<0 .or. bref/bref0<0) then
|
||||
write(*,*) 'Warning: sign inconsistency in Ipla/psi or Bref/Fdia'
|
||||
end if
|
||||
qb0=q(nr)
|
||||
if (qpos) then
|
||||
q=sign(q,ipla*bref)
|
||||
else
|
||||
q=sign(q,-ipla*bref)
|
||||
end if
|
||||
if (q(nr)/qb0<0) then
|
||||
write(*,*) 'Warning: sign inconsistency found among q, Ipla and Bref'
|
||||
end if
|
||||
|
||||
! convert cocosin to cocosout
|
||||
if (phiccw.neqv.phiccwout) then
|
||||
! opposite direction of toroidal angle phi in cocosin and cocosout
|
||||
bref=-bref
|
||||
ipla=-ipla
|
||||
fdia=-fdia
|
||||
end if
|
||||
if ((phiccw.eqv.phiccwout) .neqv. (psiincr.eqv.psiincrout)) then
|
||||
! psi and Ip signs don't change accordingly
|
||||
psib=-psib
|
||||
psiax=-psiax
|
||||
end if
|
||||
if (qpos .neqv. qposout) q=-q
|
||||
! q has opposite sign for given sign of Bphi*Ip
|
||||
if (exp2pi/=exp2piout) then
|
||||
! convert Wb to Wb/rad or viceversa
|
||||
psifact=(2._r8*pi)**(exp2piout-exp2pi)
|
||||
psib=psib*psifact
|
||||
psiax=psiax*psifact
|
||||
end if
|
||||
|
||||
! fill equi-spaced R, z, psi arrays
|
||||
z1 = zmid - deltaz/2._r8
|
||||
dr = deltar/(nr-1)
|
||||
dz = deltaz/(nz-1)
|
||||
dpsin = 1._r8/(nr-1)
|
||||
do i=1,nr
|
||||
r(i) = r1 + (i-1)*dr
|
||||
psi1d(i) = (i-1)*dpsin
|
||||
end do
|
||||
do j=1,nz
|
||||
z(j) = z1 + (j-1)*dz
|
||||
end do
|
||||
|
||||
! === read profiles ===
|
||||
u = get_free_unit()
|
||||
open(unit=u,file=prffile,status='OLD',action='READ',iostat=ierr)
|
||||
if(ierr/=0) then
|
||||
write(*,*) 'Cannot open file '//trim(prffile)
|
||||
stop
|
||||
end if
|
||||
read(u,*) nprf
|
||||
if (nprf>0) then
|
||||
allocate(psiprf(nprf),te(nprf),dne(nprf),zeff(nprf), stat=ierr)
|
||||
if (ierr==0) allocate(cte(4*nprf),cne(4*nprf),czeff(4*nprf), stat=ierr)
|
||||
if (ierr/=0) then
|
||||
close(u)
|
||||
call free_allocs
|
||||
write(*,*) 'cannot allocate arrays for input 1d profiles'
|
||||
stop
|
||||
end if
|
||||
do i=1,nprf
|
||||
read(u,*) psiprf(i),te(i),dne(i),zeff(i)
|
||||
end do
|
||||
else
|
||||
write(*,*) 'no data for 1d profiles'
|
||||
stop
|
||||
end if
|
||||
close(u)
|
||||
|
||||
! spline interpolation for resampling on uniform grid
|
||||
call difcsg(psiprf,te ,nprf,0,cte ,ierr)
|
||||
if (ierr==0) call difcsg(psiprf,dne ,nprf,0,cne ,ierr)
|
||||
if (ierr==0) call difcsg(psiprf,zeff,nprf,0,czeff,ierr)
|
||||
if (ierr/=0) then
|
||||
call free_allocs
|
||||
write(*,*) 'error in input 1d profiles interpolation'
|
||||
stop
|
||||
end if
|
||||
allocate(teeq(nr),dneeq(nr),zeffeq(nr),dpdv(nr),jcd(nr), stat=ierr)
|
||||
if (ierr/=0) then
|
||||
call free_allocs
|
||||
write(*,*) 'cannot allocate arrays for resampled and output 1d profiles'
|
||||
stop
|
||||
end if
|
||||
do i=1,nr
|
||||
psii=psi1d(i)
|
||||
call vlocate(psiprf,nprf,psii,j)
|
||||
j=max(1,min(j,nprf-1))
|
||||
dpsin=psii-psiprf(j)
|
||||
teeq(i) =fspli(cte, nprf,j,dpsin)
|
||||
dneeq(i) =fspli(cne, nprf,j,dpsin)
|
||||
zeffeq(i)=fspli(czeff,nprf,j,dpsin)
|
||||
end do
|
||||
|
||||
! convert keV to eV, 10^19 m^-3 to m^-3, and MW to W
|
||||
teeq=teeq*1.e3_r8
|
||||
dneeq=dneeq*1.e19_r8
|
||||
powin=powin*1.e6_r8
|
||||
|
||||
! === call GRAY subroutine ===
|
||||
call gray_main(1, nr, nz, r, z, psi2d, psiax, psib, &
|
||||
rax, zax, nbnd, rbnd, zbnd, nr, psi1d, fdia, teeq, dneeq, zeffeq, q, &
|
||||
powin, dpdv, jcd, pec, icd, ierr)
|
||||
|
||||
call free_allocs
|
||||
|
||||
contains
|
||||
|
||||
function get_free_unit(umin,umax) result(i)
|
||||
implicit none
|
||||
integer :: i
|
||||
integer, intent(in), optional :: umin, umax
|
||||
integer, parameter :: max_allowed = 99
|
||||
integer :: ierr, iend
|
||||
logical :: ex, op
|
||||
|
||||
if (present(umin)) then
|
||||
i = max(0,umin) ! start searching from unit min
|
||||
else
|
||||
i = 0
|
||||
end if
|
||||
if (present(umax)) then
|
||||
iend = min(max(0,umax),max_allowed)
|
||||
else
|
||||
iend = max_allowed
|
||||
end if
|
||||
do
|
||||
if (i>iend) then
|
||||
i=-1 ! no free units found
|
||||
exit
|
||||
end if
|
||||
inquire(unit=i,exist=ex,opened=op,iostat=ierr)
|
||||
if (ierr/=0) then
|
||||
i=-2 ! cannot inquire unit i
|
||||
exit
|
||||
end if
|
||||
if (ex.and..not.op) exit ! unit i exists and is not open
|
||||
i = i + 1
|
||||
end do
|
||||
end function get_free_unit
|
||||
|
||||
subroutine decode_cocos(cocos,exp2pi,phiccw,psiincr,qpos)
|
||||
implicit none
|
||||
integer, intent(in) :: cocos
|
||||
integer, intent(out) :: exp2pi
|
||||
logical, intent(out) :: phiccw,psiincr,qpos
|
||||
integer :: cocosm10,cocosm4
|
||||
|
||||
cocosm10=mod(cocos,10)
|
||||
cocosm4=mod(cocosm10,4)
|
||||
! cocos>10 psi in Wb, cocos<10 psi in Wb/rad
|
||||
exp2pi=(cocos-cocosm10)/10
|
||||
! cocos mod 10 = 1,3,5,7: toroidal angle phi increasing CCW
|
||||
phiccw=(mod(cocosm10,2)==1)
|
||||
! cocos mod 10 = 1,2,5,6: psi increasing with positive Ip
|
||||
psiincr=(cocosm4==1 .or. cocosm4==2)
|
||||
! cocos mod 10 = 1,2,7,8: q positive for positive Bphi*Ip
|
||||
qpos=(cocosm10<3 .or. cocosm10>6)
|
||||
end subroutine decode_cocos
|
||||
|
||||
subroutine free_allocs
|
||||
implicit none
|
||||
if(allocated(psi2d)) deallocate(psi2d)
|
||||
if(allocated(r)) deallocate(r)
|
||||
if(allocated(z)) deallocate(z)
|
||||
if(allocated(psi1d)) deallocate(psi1d)
|
||||
if(allocated(q)) deallocate(q)
|
||||
if(allocated(fdia)) deallocate(fdia)
|
||||
if(allocated(rbnd)) deallocate(rbnd)
|
||||
if(allocated(zbnd)) deallocate(zbnd)
|
||||
if(allocated(psiprf)) deallocate(psiprf)
|
||||
if(allocated(te)) deallocate(te)
|
||||
if(allocated(dne)) deallocate(dne)
|
||||
if(allocated(zeff)) deallocate(zeff)
|
||||
if(allocated(cte)) deallocate(cte)
|
||||
if(allocated(cne)) deallocate(cne)
|
||||
if(allocated(czeff)) deallocate(czeff)
|
||||
if(allocated(teeq)) deallocate(teeq)
|
||||
if(allocated(dneeq)) deallocate(dneeq)
|
||||
if(allocated(zeffeq)) deallocate(zeffeq)
|
||||
if(allocated(dpdv)) deallocate(dpdv)
|
||||
if(allocated(jcd)) deallocate(jcd)
|
||||
end subroutine free_allocs
|
||||
|
||||
end program main
|
@ -1,6 +1,6 @@
|
||||
subroutine scatterspl(x,y,z,w,n,kspl,sspl,xmin,xmax,ymin,ymax, &
|
||||
tx,nknt_x,ty,nknt_y,coeff,ierr)
|
||||
use itm_types, only : r8
|
||||
use const_and_precisions, only : r8, comp_eps
|
||||
implicit none
|
||||
integer :: n
|
||||
real(r8), dimension(n) :: x, y, z
|
||||
@ -15,7 +15,6 @@ subroutine scatterspl(x,y,z,w,n,kspl,sspl,xmin,xmax,ymin,ymax, &
|
||||
integer :: ierr
|
||||
|
||||
integer :: iopt
|
||||
real(r8), parameter :: eps_r8=epsilon(1._r8)
|
||||
real(r8) :: resid
|
||||
integer :: u,v,km,ne,b1,b2,lwrk1,lwrk2,kwrk,nxest,nyest
|
||||
real(r8), dimension(:), allocatable :: tx_tmp,ty_tmp
|
||||
@ -38,8 +37,8 @@ subroutine scatterspl(x,y,z,w,n,kspl,sspl,xmin,xmax,ymin,ymax, &
|
||||
allocate(wrk1(lwrk1),wrk2(lwrk2),iwrk(kwrk))
|
||||
|
||||
iopt=0
|
||||
call surfit(iopt,n,x,y,z,w,xmin,xmax,ymin,ymax,kspl,kspl,sspl, &
|
||||
nxest,nyest,ne,eps_r8,nknt_x,tx_tmp,nknt_y,ty_tmp, &
|
||||
call dierckx_surfit(iopt,n,x,y,z,w,xmin,xmax,ymin,ymax,kspl,kspl, &
|
||||
sspl,nxest,nyest,ne,comp_eps,nknt_x,tx_tmp,nknt_y,ty_tmp, &
|
||||
coeff,resid,wrk1,lwrk1,wrk2,lwrk2,iwrk,kwrk,ierr)
|
||||
tx(1:nknt_x)=tx_tmp(1:nknt_x)
|
||||
ty(1:nknt_y)=ty_tmp(1:nknt_y)
|
||||
|
Loading…
Reference in New Issue
Block a user