V3FIT
lsode_quantities.f
1  MODULE lsode_quantities
2  USE stel_kinds, ONLY: rprec
3  USE stel_constants
4  USE spline3d_fit_coefs
5  IMPLICIT NONE
6  INTEGER:: num_eqns, norbs, lrw, liw, itol, itask, iopt,
7  & istate, jt
8  INTEGER, ALLOCATABLE, DIMENSION(:):: iwork
9  REAL(rprec), ALLOCATABLE, DIMENSION(:):: y, f, rwork
10  REAL(rprec), ALLOCATABLE, DIMENSION(:) :: s_nb,
11  & phi_nb, theta_nb, bz_s_nb, br_s_nb, bphi_s_nb, z_s_nb,
12  & r_s_nb, drds_s_nb, dzds_s_nb, drdphi_s_nb, dzdtht_s_nb,
13  & dzdphi_s_nb, drdtht_s_nb
14 
15  CONTAINS
16 
17  SUBROUTINE alloc_lsode
18  IMPLICIT NONE
19  INTEGER:: istat
20 
21  ALLOCATE(y(num_eqns), f(num_eqns), stat=istat)
22  IF (istat .NE. 0) stop 'Allocation error'
23  lrw = 52+9*num_eqns+(num_eqns**2); liw = 50+num_eqns
24  ALLOCATE(iwork(liw), rwork(lrw), stat = istat)
25  IF (istat .NE. 0) stop 'Allocation error'
26  y = zero; f = zero; rwork = zero; iwork = 0
27 
28  ALLOCATE(s_nb(norbs), theta_nb(norbs),
29  & phi_nb(norbs), bz_s_nb(norbs), br_s_nb(norbs),
30  & bphi_s_nb(norbs), r_s_nb(norbs), z_s_nb(norbs),
31  & drds_s_nb(norbs), dzds_s_nb(norbs),
32  & drdtht_s_nb(norbs), dzdtht_s_nb(norbs), drdphi_s_nb(norbs),
33  & dzdphi_s_nb(norbs), stat = istat)
34  IF (istat .NE. 0) stop 'Allocation error'
35  s_nb = zero; theta_nb = zero; phi_nb = zero
36  br_s_nb = zero; bz_s_nb = zero; bphi_s_nb = zero
37  r_s_nb = zero; drds_s_nb = zero; dzds_s_nb = zero
38  drdtht_s_nb = zero; dzdtht_s_nb = zero; z_s_nb = zero
39  drdphi_s_nb = zero; dzdphi_s_nb = zero
40 
41  END SUBROUTINE alloc_lsode
42 
43  SUBROUTINE dealloc_lsode
44  IMPLICIT NONE
45 
46  DEALLOCATE(y, f, iwork, rwork)
47  DEALLOCATE(s_nb, theta_nb, phi_nb, bz_s_nb, br_s_nb,
48  & bphi_s_nb, r_s_nb, drds_s_nb, dzds_s_nb, drdtht_s_nb,
49  & dzdtht_s_nb, drdphi_s_nb, dzdphi_s_nb, z_s_nb)
50 
51  END SUBROUTINE dealloc_lsode
52 
53  END MODULE lsode_quantities