Skip to content

Commit 0ad4c7d

Browse files
author
OJ Robertson
committed
The GKE equation and Poissons Equation should be correct to Delta^1 delta^1 in the local limit, assuming rare collisions in the equilibrium solution. This hasn't been thoroughly tested yet. Further corrections are needed when the rare collisions assumption is lifted. Should be able to account for this by passing the g_neo distribution to all operators on the LHS of the GKE, rather than just the time derivative which is currently the case.
1 parent 4238546 commit 0ad4c7d

22 files changed

+1915
-601
lines changed

STELLA_CODE/arrays/arrays.f90

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module arrays
2828
public :: initialised_wstar1
2929
public :: initialised_wpol
3030
public :: initialised_neo_curv_drift
31+
public :: initialised_neo_mag_drift
3132

3233
!----------------------------------------------------------------------------
3334
! For the Gyrokinetic Equation
@@ -75,6 +76,8 @@ module arrays
7576
public :: wpol
7677
public :: neocurvx
7778
public :: neocurvy
79+
public :: neomagx
80+
public :: neomagy
7881

7982
!----------------------------------------------------------------------------
8083
! For the Field Equations
@@ -83,8 +86,6 @@ module arrays
8386
! Arrays used to calculate the fields for electrostatic simulations
8487
public :: denominator_fields
8588
public :: denominator_fields_h
86-
! For NEO's higher order corrections.
87-
public :: denominator_fields_neo_adiab
8889

8990
! Arrays used to calculate the fields for electrostatic simulations
9091
! considering a Modified Boltzmann Response for the electrons
@@ -120,6 +121,7 @@ module arrays
120121
logical :: initialised_wstar1
121122
logical :: initialised_wpol
122123
logical :: initialised_neo_curv_drift
124+
logical :: initialised_neo_mag_drift
123125

124126
!----------------------------------------------------------------------------
125127
! For the Gyrokinetic Equation
@@ -159,6 +161,7 @@ module arrays
159161
real, dimension(:, :, :), allocatable :: neo_dchidz_coeff
160162
real, dimension(:, :, :), allocatable :: wstar1, wpol
161163
real, dimension(:, :, :), allocatable :: neocurvx, neocurvy
164+
real, dimension(:, :, :), allocatable :: neomagx, neomagy
162165

163166
!----------------------------------------------------------------------------
164167
! For the Field Equations

STELLA_CODE/calculations/calculations_timestep.f90

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ subroutine init_cfl
6464
use arrays, only: neo_chi_coeff, neo_apar_coeff, neo_dchidz_coeff
6565
use arrays, only: wstar1, wpol
6666
use arrays, only: neocurvx, neocurvy
67+
use arrays, only: neomagx, neomagy
6768

6869
! Collisions
6970
use dissipation_and_collisions, only: include_collisions, collisions_implicit
@@ -90,10 +91,11 @@ subroutine init_cfl
9091
real :: cfl_dt_neo_chi_coeff, cfl_dt_neo_apar_coeff, cfl_dt_neo_dchidz_coeff
9192
real :: cfl_dt_wstar1, cfl_dt_wpol
9293
real :: cfl_dt_neocurvx, cfl_dt_neocurvy
94+
real :: cfl_dt_neomagx, cfl_dt_neomagy
9395
real :: neo_chi_coeff_max, neo_apar_coeff_max, neo_dchidz_coeff_max
9496
real :: wstar1_max, wpol_max
9597
real :: neocurvx_max, neocurvy_max
96-
98+
real :: neomagx_max, neomagy_max
9799

98100
!-------------------------------------------------------------------------
99101

@@ -236,7 +238,7 @@ subroutine init_cfl
236238

237239
! Check that the introduction of the neoclassical wpol drive doesn't break the CFL condition.
238240
if (neoclassical_is_enabled()) then
239-
! Only calculate the CFL constaint if there are non-zero akx present.
241+
! Only calculate the CFL constaint if there are non-zero akx present.
240242
if (maxval(abs(akx)) > epsilon(0.0)) then
241243
wpol_max = maxval(abs(wpol))
242244
if (nproc > 1) then
@@ -273,6 +275,33 @@ subroutine init_cfl
273275
end if
274276
end if
275277

278+
279+
! Check that the introduction of the neoclassical neomagy doesn't break the CFL condition.
280+
if (neoclassical_is_enabled()) then
281+
neomagy_max = maxval(abs(neomagy))
282+
if (nproc > 1) then
283+
call max_allreduce(neomagy_max)
284+
end if
285+
286+
cfl_dt_neomagy = abs(code_dt) / max(maxval(abs(aky)) * neomagy_max, zero)
287+
cfl_dt_linear = min(cfl_dt_linear, cfl_dt_neomagy)
288+
end if
289+
290+
! Check that the introduction of the neoclassical neocurvx drive doesn't break the CFL condition.
291+
if (neoclassical_is_enabled()) then
292+
! Only calculate the CFL constaint if there are non-zero akx present.
293+
if (maxval(abs(akx)) > epsilon(0.0)) then
294+
neomagx_max = maxval(abs(neomagx))
295+
if (nproc > 1) then
296+
call max_allreduce(neomagx_max)
297+
end if
298+
299+
cfl_dt_neomagx = abs(code_dt) / max(maxval(abs(akx)) * neomagx_max, zero)
300+
cfl_dt_linear = min(cfl_dt_linear, cfl_dt_neomagx)
301+
end if
302+
end if
303+
304+
276305
! Get the minimum value of <cfl_dt_linear> on all processors
277306
if (runtype_option_switch == runtype_multibox) call scope(allprocs)
278307
call min_allreduce(cfl_dt_linear)
@@ -295,7 +324,9 @@ subroutine init_cfl
295324
if (neoclassical_is_enabled()) write (*, '(A12,ES12.4)') 'wstar1: ', cfl_dt_wstar1
296325
if (neoclassical_is_enabled() .and. maxval(abs(akx)) > epsilon(0.0)) write (*, '(A12,ES12.4)') 'wpol: ', cfl_dt_wpol
297326
if (neoclassical_is_enabled()) write (*, '(A12,ES12.4)') 'neocurvy: ', cfl_dt_neocurvy
298-
if (neoclassical_is_enabled() .and. maxval(abs(akx)) > epsilon(0.0)) write (*, '(A12,ES12.4)') 'neocurvx: ', cfl_dt_neocurvx
327+
if (neoclassical_is_enabled() .and. maxval(abs(akx)) > epsilon(0.0)) write (*, '(A12,ES12.4)') 'neocurvx: ', cfl_dt_neocurvx
328+
if (neoclassical_is_enabled()) write (*, '(A12,ES12.4)') 'neomagy: ', cfl_dt_neomagy
329+
if (neoclassical_is_enabled() .and. maxval(abs(akx)) > epsilon(0.0)) write (*, '(A12,ES12.4)') 'neomagx: ', cfl_dt_neomagx
299330
write (*, '(A12,ES12.4)') ' total: ', cfl_dt_linear
300331
write (*, *)
301332
end if

STELLA_CODE/calculations/calculations_tofrom_ghf.f90

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -846,14 +846,17 @@ subroutine g_or_gbar_to_gbarneo_kxkyz(g0, phi, apar, bpar, facchi)
846846
! Calculate the phi contribution to gyoraveraged fields.
847847

848848
field = fphi * facchi * spec(is)%zt * phi(iky, ikx, iz, it) * spread(maxwell_vpa(:, is), 2, nmu) &
849-
* spread(maxwell_mu(ia, iz, :, is), 1, nvpa) * maxwell_fac(is)
849+
* spread(maxwell_mu(ia, iz, :, is), 1, nvpa)
850850

851851
! If apar is present, we must account for this.
852852
if (include_apar) then
853853
field = field - 2.0 * facchi * spec(is)%zt * apar(iky, ikx, iz, it) * spread(vpa, 2, nmu) * spread(maxwell_vpa(:, is), 2, nmu) &
854-
* spread(maxwell_mu(ia, iz, :, is), 1, nvpa) * maxwell_fac(is) * spec(is)%stm_psi0
854+
* spread(maxwell_mu(ia, iz, :, is), 1, nvpa) * spec(is)%stm_psi0
855855
end if
856856

857+
! Multiply by the neoclassical distribution factor.
858+
! field = field * ( ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) - ( neo_h(iz, ivmu, 1) - spec(is)%z * neo_phi(iz) ) )
859+
857860
! Gyroaverage.
858861
call gyro_average(field, ikxkyz, gyro_averaged_field)
859862

@@ -872,8 +875,11 @@ subroutine g_or_gbar_to_gbarneo_kxkyz(g0, phi, apar, bpar, facchi)
872875
is = is_idx(kxkyz_lo, ikxkyz)
873876

874877
field = 4.0 * facchi * spread(mu, 1, nvpa) * bpar(iky, ikx, iz, it) * spread(maxwell_vpa(:, is), 2, nmu) &
875-
* spread(maxwell_mu(ia, iz, :, is), 1, nvpa) * maxwell_fac(is)
878+
* spread(maxwell_mu(ia, iz, :, is), 1, nvpa)
876879

880+
! Multiply by the neoclassical distribution factor.
881+
! field = field * ( ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) - ( neo_h(iz, ivmu, 1) - spec(is)%z * neo_phi(iz) ) )
882+
877883
! Gyroaverage the J_1 contribution.
878884
call gyro_average_j1(field, ikxkyz, gyro_averaged_field)
879885

@@ -975,7 +981,8 @@ subroutine g_or_gbar_to_gbarneo_vmu_single(ivmu, g0, phi, apar, bpar, facchi)
975981
! First calculate the gyroaveraged field being used, <>.
976982
! Calculate the phi contribution to gyoraveraged fields.
977983

978-
field = spec(is)%zt * facchi * phi (:, :, iz, it) * maxwell_vpa(iv, is) * maxwell_mu(ia, iz, imu, is) * maxwell_fac(is)
984+
field = spec(is)%zt * facchi * phi (:, :, iz, it) * maxwell_vpa(iv, is) * maxwell_mu(ia, iz, imu, is) &
985+
* maxwell_fac(is)
979986

980987
! If apar is present, we must account for this.
981988
if (include_apar) then
@@ -985,8 +992,7 @@ subroutine g_or_gbar_to_gbarneo_vmu_single(ivmu, g0, phi, apar, bpar, facchi)
985992

986993
! Mutliply by the neoclassical distribution factor.
987994

988-
field = field * ( ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) - ( neo_h(iz, ivmu, 1) - spec(is)%z * neo_phi(iz, 1) ) )
989-
995+
field = field * ( ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) - ( neo_h(iz, ivmu, 1) - spec(is)%z * neo_phi(iz) ) )
990996
! Gyroaverage the J₀ contribution.
991997
call gyro_average(field, iz, ivmu, gyro_averaged_field)
992998

@@ -1002,8 +1008,11 @@ subroutine g_or_gbar_to_gbarneo_vmu_single(ivmu, g0, phi, apar, bpar, facchi)
10021008
do it = 1, ntubes
10031009
do iz = -nzgrid, nzgrid
10041010

1005-
field = 4.0 * facchi * mu(imu) * bpar(:, :, iz, it) * maxwell_vpa(iv, is) * maxwell_mu(ia, iz, imu, is) * maxwell_fac(is)
1011+
field = 4.0 * facchi * mu(imu) * bpar(:, :, iz, it) * maxwell_vpa(iv, is) * maxwell_mu(ia, iz, imu, is) &
1012+
* maxwell_fac(is)
10061013

1014+
field = field * ( ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) - ( neo_h(iz, ivmu, 1) - spec(is)%z * neo_phi(iz) ) )
1015+
10071016
! Gyroaverage the J_1 contribution.
10081017
call gyro_average_j1(field, iz, ivmu, gyro_averaged_field)
10091018

STELLA_CODE/field_equations/field_equations_fluxtube.f90

Lines changed: 24 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ subroutine init_field_equations_fluxtube
628628
use parallelisation_layouts, only: iz_idx, it_idx, ikx_idx, iky_idx, is_idx
629629
use parallelisation_layouts, only: iv_idx, imu_idx
630630
! Arrays
631-
use arrays, only: denominator_fields, denominator_fields_neo_adiab, denominator_fields_MBR
631+
use arrays, only: denominator_fields, denominator_fields_MBR
632632
use arrays, only: denominator_fields_h, denominator_fields_MBR_h, efac, efacp
633633
use arrays_gyro_averages, only: aj0v
634634

@@ -659,15 +659,15 @@ subroutine init_field_equations_fluxtube
659659
! NEO data for higher order corrections.
660660
use neoclassical_terms_neo, only: neoclassical_is_enabled
661661
use neoclassical_terms_neo, only: neo_phi, neo_h, neo_phi, dneo_h_dmu
662+
use neoclassical_terms_neo, only: neo_dens
662663

663664
implicit none
664665

665666
! Local variables
666667
integer :: ikxkyz, iz, it, ikx, iky, ia, iv, imu, ivmu
667668
integer :: is, is_inner, is_outer
668-
real :: tmp, tmp_neo_adiab, wgt
669+
real :: tmp, wgt
669670
real, dimension(:, :), allocatable :: g0
670-
real, dimension(:, :), allocatable :: g0_neo_adiab
671671

672672
!-------------------------------------------------------------------------
673673

@@ -696,9 +696,9 @@ subroutine init_field_equations_fluxtube
696696
! ============================================================================================================= !
697697
!
698698
! If NEO's corrections are enabled, the denominator for phi calculations picks up a correction.
699-
! This is given by:
699+
! This is given by: ...
700700
!
701-
! sum_s Z_s n_s [ (2B/sqrt(pi)) int dvpa int dmu J_0 * g ]
701+
!
702702
!
703703
!
704704
! ============================================================================================================= !
@@ -724,7 +724,7 @@ subroutine init_field_equations_fluxtube
724724
imu = imu_idx(vmu_lo, ivmu)
725725
iv = iv_idx(vmu_lo, ivmu)
726726

727-
g0(iv, imu) = g0(iv, imu) * ( 1 + neo_h(iz, ivmu, 1) - spec(is_inner)%z * neo_phi(iz, 1) - ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) )
727+
g0(iv, imu) = g0(iv, imu) * ( 1 + neo_h(iz, ivmu, 1) - spec(is_inner)%z * neo_phi(iz) - ( 0.5/bmag(ia, iz) ) * dneo_h_dmu(iz, ivmu, 1) )
728728
end do
729729
end if
730730

@@ -892,56 +892,26 @@ subroutine init_field_equations_fluxtube
892892

893893
! If NEO's corrections are enabled, compute the higher order correction to the denominator.
894894
if(neoclassical_is_enabled()) then
895-
allocate(g0_neo_adiab(nvpa, nmu))
896-
allocate(denominator_fields_neo_adiab(nakx, naky, -nzgrid:nzgrid))
897-
denominator_fields_neo_adiab = 0.0
898-
899-
do ikxkyz = kxkyz_lo%llim_proc, kxkyz_lo%ulim_proc
900-
it = it_idx(kxkyz_lo, ikxkyz)
901-
if (it /= 1) cycle
902-
iky = iky_idx(kxkyz_lo, ikxkyz)
903-
ikx = ikx_idx(kxkyz_lo, ikxkyz)
904-
iz = iz_idx(kxkyz_lo, ikxkyz)
905-
is_outer = is_idx(kxkyz_lo, ikxkyz)
906-
if (is_outer /= 2) cycle
907-
908-
! Calculate exp(v²) for each (kx,ky,z).
909-
g0_neo_adiab = spread(maxwell_vpa(:, is_outer), 2, nmu) * spread(maxwell_mu(ia, iz, :, is_outer), 1, nvpa) * maxwell_fac(is_outer)
910-
911-
! Iterate over velocity space.
912-
do ivmu = vmu_lo%llim_proc, vmu_lo%ulim_proc
913-
is_inner = is_idx(vmu_lo, ivmu)
914-
if (is_inner /= is_outer) cycle
915-
imu = imu_idx(vmu_lo, ivmu)
916-
iv = iv_idx(vmu_lo, ivmu)
917-
918-
g0_neo_adiab(iv, imu) = g0_neo_adiab(iv, imu) * ( neo_h(iz, ivmu, 1) - spec(is_inner)%z * neo_phi(iz, 1) )
919-
end do
920-
921-
! Calculate denominator_fields_neo_adiab[iky,ikz,iz].
922-
call integrate_vmu(g0_neo_adiab, iz, tmp_neo_adiab)
923-
denominator_fields_neo_adiab(ikx, iky, iz) = denominator_fields_neo_adiab(ikx, iky, iz) + tmp_neo_adiab
924-
end do
925-
926-
! Sum the values on all processors and send them to <proc0>.
927-
call sum_allreduce(denominator_fields_neo_adiab)
928-
929-
! Calculate the approproate denominators for g and h in the presence of the higher order equilibriu.
930-
denominator_fields = denominator_fields + efac * ( 1 + denominator_fields_neo_adiab )
931-
! denominator_fields_h = denominator_fields_h + efac * ( 1 + denominator_fields_neo_adiab )
932-
else
933-
! Otherwise, calculate the approporiate denominators for g and h in the presence of the Maxwellian equilbirium.
934-
efacp = efac * (spec(ion_species)%tprim - spec(ion_species)%fprim)
895+
! Calculate the approproate denominators for g and h in the presence of the higher order equilibrium.
896+
do iz = -nzgrid, nzgrid
897+
efacp = efac * (spec(ion_species)%tprim - spec(ion_species)%fprim)
898+
899+
denominator_fields(:, :, iz) = denominator_fields(:, :, iz) + efac * ( 1 + neo_dens(iz, 2) )
900+
! denominator_fields_h(:, :, iz) = denominator_fields_h(:, :, iz) + efac * ( 1 + neo_dens(iz, 2) )
901+
end do
902+
else
903+
! Otherwise, calculate the approporiate denominators for g and h in the presence of the Maxwellian equilbirium.
904+
efacp = efac * (spec(ion_species)%tprim - spec(ion_species)%fprim)
935905

936-
! Add the contribution of adiabatic electrons to <denominator_fields>
937-
! Calculate denominator_fields = sum_(s not e) (Z_s² n_s/T_s) (1 - Gamma0) + (n_e/T_e)
938-
! This is the factor that multiplies phi in the final expression.
939-
denominator_fields = denominator_fields + efac
906+
! Add the contribution of adiabatic electrons to <denominator_fields>
907+
! Calculate denominator_fields = sum_(s not e) (Z_s² n_s/T_s) (1 - Gamma0) + (n_e/T_e)
908+
! This is the factor that multiplies phi in the final expression.
909+
denominator_fields = denominator_fields + efac
940910

941-
! Add the contribution of adiabatic electrons to <denominator_fields_h>
942-
! Calculate denominator_fields_h = sum_(s not e) (Z_s² n_s/T_s) + (n_e/T_e)
943-
denominator_fields_h = denominator_fields_h + efac
944-
end if
911+
! Add the contribution of adiabatic electrons to <denominator_fields_h>
912+
! Calculate denominator_fields_h = sum_(s not e) (Z_s² n_s/T_s) + (n_e/T_e)
913+
denominator_fields_h = denominator_fields_h + efac
914+
end if
945915

946916
!---------------------------------------------------------------------
947917
! Modified Boltzmann Response (MBR)
@@ -978,8 +948,6 @@ subroutine init_field_equations_fluxtube
978948

979949
! Deallocate temporary arrays.
980950
if (allocated(g0)) deallocate (g0)
981-
if (allocated(g0_neo_adiab)) deallocate (g0_neo_adiab)
982-
983951
end if
984952

985953
end subroutine init_field_equations_fluxtube

STELLA_CODE/geometry/geometry.f90

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ module geometry
8686
public :: aref, bref, twist_and_shift_geo_fac
8787
public :: q_as_x, get_x_to_rho, gfac
8888
public :: dVolume, grad_x_grad_y_end
89+
90+
! For NEO's neoclassical calculations, we need b_dot_gradtheta.
91+
public :: b_dot_gradtheta
8992

9093
! Flux tube only needs b_dot_gradz_avg(z)
9194
public :: b_dot_gradz_avg
@@ -142,6 +145,9 @@ module geometry
142145
! Geometric quantities for full flux surface
143146
real, dimension(:, :), allocatable :: b_dot_gradz
144147

148+
! Geometric quantites for NEO's higher order corrections.
149+
real, dimension(:, :), allocatable :: b_dot_gradtheta
150+
145151
! Geometric quantities for the momentum flux
146152
real, dimension(:, :), allocatable :: gradzeta_gradx_R2overB2
147153
real, dimension(:, :), allocatable :: gradzeta_grady_R2overB2
@@ -402,6 +408,9 @@ subroutine get_geometry_arrays_from_VMEC(nalpha, naky)
402408
real, dimension(:, :), allocatable :: grad_x_grad_x, grad_y_grad_y, grad_y_grad_x
403409
real, dimension(:, :), allocatable :: gradzeta_gradpsit_R2overB2, gradzeta_gradalpha_R2overB2
404410

411+
! For NEO's neoclassical corrections.
412+
real, dimension(:, :), allocatable :: b_dot_gradtheta_arr
413+
405414
! Local variables
406415
real :: rho, shat, iota, field_period_ratio
407416
real :: dpsidpsit, dpsidx, dpsitdx, dxdpsit
@@ -1449,6 +1458,9 @@ subroutine finish_geometry
14491458
if (allocated(gradzeta_grady_R2overB2)) deallocate (gradzeta_grady_R2overB2)
14501459
if (allocated(b_dot_gradzeta_RR)) deallocate (b_dot_gradzeta_RR)
14511460

1461+
! Needed for NEO's higher order corrections.
1462+
! if (allocated(b_dot_gradtheta_arr)) deallocate (b_dot_gradtheta_arr)
1463+
14521464
! Only initialise once
14531465
initialised_geometry = .false.
14541466

STELLA_CODE/geometry/geometry_miller.f90

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,8 @@ subroutine get_miller_geometry(nzgrid, zed_in, zed_equal_arc, &
620620

621621
! Calculate <b_dot_gradtheta> = b . ∇θ (formerly <gradpar>)
622622
b_dot_gradtheta = dpsip_drho / (bmag * jacrho)
623-
623+
624+
624625
! Calculate <b_dot_gradB> = b . ∇B (formerly <gradparB>)
625626
b_dot_gradB = b_dot_gradtheta * dB_dtheta
626627

@@ -798,7 +799,7 @@ subroutine interpolate_functions
798799
call geo_spline(theta, d_gradxdotgrady_drho, zed_arc, d_gradxdotgrady_drho_out)
799800
call geo_spline(theta, d_gradxdotgradx_drho, zed_arc, d_gradxdotgradx_drho_out)
800801
call geo_spline(theta, djac_drho / dpsip_drho, zed_arc, djac_drho_out)
801-
802+
802803
deallocate (zed_arc)
803804
else
804805
if (debug) write (*, *) 'geometry_miller::zed_equal_arc=.false.'
@@ -945,7 +946,7 @@ subroutine allocate_arrays(nr, nz)
945946
! For the neoclassical terms
946947
allocate (gds23(-nz:nz)); gds23 = 0.0
947948
allocate (gds24(-nz:nz)); gds24 = 0.0
948-
949+
949950
! The R(r, θ) and Z(r, θ) positions of a Miller equilibrium
950951
! Here we have nr = 3 for the radial derivatives
951952
allocate (Rr(nr, -nz:nz)); Rr = 0.0
@@ -1135,7 +1136,7 @@ subroutine deallocate_arrays
11351136
if (allocated(delta_theta)) deallocate (delta_theta)
11361137
if (allocated(bmag_psi0)) deallocate (bmag_psi0)
11371138
if (allocated(gradrho_psi0)) deallocate (gradrho_psi0)
1138-
1139+
11391140
end subroutine deallocate_arrays
11401141

11411142
end subroutine finish_miller_geometry

0 commit comments

Comments
 (0)