V3FIT
spline3d_fit_coefs.f
1  MODULE spline3d_fit_coefs ! Includes arrays used in 3D spline fits + geometric par
2  USE stel_kinds
3  USE stel_constants
4  IMPLICIT NONE
5  INTEGER, PARAMETER:: ks = 4, ku = 4, kv = 4 ! KS,KU,KV: spline order
6  INTEGER:: is, iphi, itht ! Spline dimensions: IS(+KS), IPHI(+KU), ITHT(+KV)
7  REAL(rprec):: smin, smax, thmin, thmax, phimin, phimax ! Limits of spline box
8  REAL(rprec), ALLOCATABLE, DIMENSION(:):: s_knots, u_knots,
9  & v_knots ! Knots of the spline in (s, u, v) space
10  REAL(rprec), ALLOCATABLE, DIMENSION(:,:,:):: br_coef, ! Spline coefficients for: BR, BZ, BPHI, R, Z, PHI
11  & bz_coef, bphi_coef, r_coef, z_coef, phi_coef
12  LOGICAL, PARAMETER :: is_uniformx = .true. ! assume uniform spacing in (s, u, v) in supplied data f
13  LOGICAL, PARAMETER :: is_uniformy = .true.
14  LOGICAL, PARAMETER :: is_uniformz = .true.
15  LOGICAL:: l_test_splines = .false. ! =T, computes maximum relative error at center of cell;
16 
17  CONTAINS
18 
19  SUBROUTINE alloc_splines
20  IMPLICIT NONE
21  INTEGER:: istat
22 
23  ALLOCATE(s_knots(is+ks), u_knots(itht+ku),
24  & v_knots(iphi+kv), stat = istat)
25  IF (istat .NE. 0) stop 'Allocation error'
26  s_knots = zero; u_knots = zero; v_knots = zero
27 
28  ALLOCATE(r_coef(is,itht,iphi), z_coef(is,itht,iphi),
29  & phi_coef(is,itht,iphi), br_coef(is,itht,iphi),
30  & bz_coef(is,itht,iphi), bphi_coef(is,itht,iphi),
31  & stat = istat)
32  IF (istat .NE. 0) stop 'Allocation error'
33  r_coef = zero; z_coef = zero; phi_coef = zero
34  br_coef = zero; bz_coef = zero; bphi_coef = zero
35 
36  END SUBROUTINE alloc_splines
37 
38  SUBROUTINE dealloc_splines
39  IMPLICIT NONE
40 
41  DEALLOCATE(s_knots, u_knots, v_knots)
42  DEALLOCATE(r_coef, z_coef, phi_coef, br_coef,
43  & bz_coef, bphi_coef)
44 
45  END SUBROUTINE dealloc_splines
46 
47  END MODULE spline3d_fit_coefs