1 MODULE lsode_quantities
2 USE stel_kinds,
ONLY: rprec
6 INTEGER:: num_eqns, norbs, lrw, liw, itol, itask, iopt,
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
17 SUBROUTINE alloc_lsode
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
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
41 END SUBROUTINE alloc_lsode
43 SUBROUTINE dealloc_lsode
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)
51 END SUBROUTINE dealloc_lsode
53 END MODULE lsode_quantities