Corrections to tag v2.5
Small set of corrections to the tag v2.5. Includes changes to python scripts to plot data. Includes new 'fast' setup conditions that allow to output cases in an hour or so with still a good CFL condition and grid resolution.
This commit is contained in:
parent
deebbae229
commit
052a4dc05e
20 changed files with 790 additions and 107 deletions
60
vlaplex.f90
60
vlaplex.f90
|
|
@ -37,6 +37,7 @@ program VlaPlEx
|
|||
real(dp), parameter:: gamma_e = 4.0_dp / 3.0_dp ! Adiabatic coefficient for electrons
|
||||
real(dp), parameter:: gamma_e_exp = 1.0_dp /(gamma_e - 1.0_dp) ! Exponent for polytropic electrons
|
||||
real(dp), parameter:: gamma_e_dexp = (2.0_dp - gamma_e)/(gamma_e - 1.0_dp) ! Exponent for polytropic db_dphi
|
||||
real(dp), parameter:: n_epsilon = 1.0e-16_dp
|
||||
|
||||
real(dp):: r0, rf
|
||||
real(dp), allocatable, dimension(:):: r
|
||||
|
|
@ -46,6 +47,7 @@ program VlaPlEx
|
|||
real(dp):: time
|
||||
real(dp):: dr, dv, dt
|
||||
integer:: nr, nv, nt, nz
|
||||
integer:: nzMin, nzMax
|
||||
integer:: i, iz, j, t, z_inj
|
||||
integer:: j0 ! First integer of positive velocity
|
||||
|
||||
|
|
@ -89,7 +91,7 @@ program VlaPlEx
|
|||
integer:: rCum_index
|
||||
|
||||
! Set number of threads
|
||||
call omp_set_num_threads(8)
|
||||
call omp_set_num_threads(16)
|
||||
|
||||
! Set reference numbers (in SI units)
|
||||
Temp_ref = 30.0_dp * eV_to_K
|
||||
|
|
@ -126,9 +128,9 @@ program VlaPlEx
|
|||
! Index for cumulative sum
|
||||
rCum_index = minloc(abs(r - rCum), 1)
|
||||
|
||||
v0 =-1.0e1_dp*c_s
|
||||
vf = 2.0e1_dp*c_s
|
||||
dv = 1.0e-1_dp
|
||||
v0 =-0.5e1_dp*c_s
|
||||
vf = 1.0e1_dp*c_s
|
||||
dv = 2.0e-1_dp
|
||||
nv = nint((vf - v0) / dv) + 1
|
||||
dv = (vf - v0) / float(nv-1)
|
||||
|
||||
|
|
@ -146,7 +148,7 @@ program VlaPlEx
|
|||
t0 = 0.0_dp
|
||||
tf = 2.0e-7_dp / t_ref
|
||||
! tf = 1.0e1_dp * (rf - r0) / c_s
|
||||
dt = 1.0e-2_dp*dr/c_s
|
||||
dt = 5.0e-2_dp*dr/c_s
|
||||
nt = nint((tf - t0) / dt)
|
||||
dt = (tf - t0) / float(nt)
|
||||
|
||||
|
|
@ -164,7 +166,10 @@ program VlaPlEx
|
|||
|
||||
write(*, '(A,ES0.4e3)') 'CFL: ', dt*vf/dr
|
||||
|
||||
nz = 2
|
||||
nzMin = 3
|
||||
nzMax = 14
|
||||
nz = nzMax - nzMin + 1
|
||||
nz = nz + 1 ! Add bin for low Z plasma
|
||||
! Allocate vectors
|
||||
allocate(f_i(1:nz,1:nr,1:nv), f_i_old(1:nz,1:nr,1:nv))
|
||||
allocate(n_i(1:nz,1:nr))
|
||||
|
|
@ -178,14 +183,17 @@ program VlaPlEx
|
|||
f_i = 0.0_dp
|
||||
f_i_old = 0.0_dp
|
||||
n_i = 0.0_dp
|
||||
sum_ni = 0.0_dp
|
||||
sum_ni = 0.0_dp
|
||||
u_i = 0.0_dp
|
||||
E_i = 0.0_dp
|
||||
T_i = 0.0_dp
|
||||
n_e = 0.0_dp
|
||||
T_e = 0.0_dp
|
||||
Zave = 0.0_dp
|
||||
Z_list = (/ 6.0, 12.0 /)
|
||||
Z_list(1) = 1.0_dp ! Low Z bin
|
||||
do iz = nzMin, nzMax
|
||||
Z_list(iz-nzMin+1+1) = float(iz)
|
||||
end do
|
||||
Zave_bc_old = 0.0_dp
|
||||
phi = 0.0_dp
|
||||
phi_old = 0.0_dp
|
||||
|
|
@ -247,18 +255,24 @@ program VlaPlEx
|
|||
! Main loop
|
||||
do t = 1, nt
|
||||
time = t * dt + t0
|
||||
|
||||
! Find new \bar{Z}_i based on T and density
|
||||
call boundaryConditions%get(time, n_bc, u_bc, Temp_bc)
|
||||
! Reset previous value
|
||||
Zave_bc_old = 0.0_dp
|
||||
! Initial guess based on average table
|
||||
call TtoZ%get(Temp_bc, Zave_bc)
|
||||
z_inj = minloc(abs(Z_list - Zave_bc),1)
|
||||
Zave_bc = Z_list(z_inj)
|
||||
Zave_bc = Z_list(z_inj)
|
||||
! Start iterative process based on T, n_e table
|
||||
do while (Zave_bc - Zave_bc_old > 0.1_dp)
|
||||
Zave_bc_old = Zave_bc
|
||||
call TtoZne%get(Temp_bc, Zave_bc * n_bc, Zave_bc)
|
||||
z_inj = minloc(abs(Z_list - Zave_bc),1)
|
||||
Zave_bc = Z_list(z_inj)
|
||||
Zave_bc = Z_list(z_inj)
|
||||
end do
|
||||
call writeOutputBoundary(t, dt, Zave_bc*n_bc, u_bc, Temp_bc, Zave_bc, Zave_bc)
|
||||
u_bc = sqrt(Zave_bc * Temp_bc)
|
||||
call writeOutputBoundary(t, dt, n_bc, u_bc, Temp_bc, Zave_bc)
|
||||
|
||||
! f0(j0:nv) = v(j0:nv)**2 / sqrt(PI*Temp_bc**3) * exp(-(v(j0:nv) - u_bc)**2 / Temp_bc)
|
||||
f0(j0:nv) = 1.0_dp / sqrt(PI*Temp_bc) * exp(-(v(j0:nv) - u_bc)**2 / Temp_bc)
|
||||
|
|
@ -279,7 +293,7 @@ program VlaPlEx
|
|||
sum_ni = 0.0_dp
|
||||
! Advect in the r direction
|
||||
do iz = 1, nz
|
||||
if (all(n_i(iz,:) < 1.0e-16_dp) .and. iz .NE. z_inj) then
|
||||
if (all(n_i(iz,:) < n_epsilon) .and. iz .ne. z_inj) then
|
||||
cycle
|
||||
end if
|
||||
!$omp parallel do
|
||||
|
|
@ -296,13 +310,15 @@ program VlaPlEx
|
|||
end if
|
||||
|
||||
n_i(iz,i) = sum(f_i(iz,i,:))*dv
|
||||
if (n_i(iz,i) > 1.0e-10_dp) then
|
||||
u_i(iz,i) = sum(v(:) *f_i(iz,i,:))*dv / n_i(iz,i)
|
||||
E_i(i) = sum(v(:)**2*f_i(iz,i,:))*dv / n_i(iz,i)
|
||||
T_i(iz,i) = 2.0_dp*E_i(i) - 2.0_dp*u_i(iz,i)**2
|
||||
if (n_i(iz,i) > n_epsilon) then
|
||||
u_i(iz,i) = sum(v(:) *f_i(iz,i,:))*dv / n_i(iz,i)
|
||||
E_i(i) = sum(v(:)**2*f_i(iz,i,:))*dv / n_i(iz,i)
|
||||
T_i(iz,i) = 2.0_dp*E_i(i) - 2.0_dp*u_i(iz,i)**2
|
||||
else
|
||||
u_i(iz,i) = 0.0_dp
|
||||
T_i(iz,i) = 0.0_dp
|
||||
f_i(iz,i,:) = 0.0_dp
|
||||
n_i(iz,i) = 0.0_dp
|
||||
u_i(iz,i) = 0.0_dp
|
||||
T_i(iz,i) = 0.0_dp
|
||||
end if
|
||||
|
||||
end do
|
||||
|
|
@ -360,7 +376,7 @@ program VlaPlEx
|
|||
end if
|
||||
|
||||
! ! Calculate new potential to ensure 0 current at the edge
|
||||
! if (n_i(nr) > 1.0e-10_dp) then
|
||||
! if (n_i(nr) > n_epsilon) then
|
||||
! phiF = phi0 + T_e * log((2.0_dp*sqrt(pi)*Zave(nr)*n_i(nr)*u_i(nr)) / (Zave(1)*n_i(1)*sqrt(m_i*T_e/m_e)))
|
||||
!
|
||||
! else
|
||||
|
|
@ -386,7 +402,7 @@ program VlaPlEx
|
|||
f_i_old = f_i
|
||||
|
||||
do iz = 1, nz
|
||||
if (all(n_i(iz,:) < 1.0e-16_dp) .and. iz .NE. z_inj) then
|
||||
if (all(n_i(iz,:) < n_epsilon) .and. iz .ne. z_inj) then
|
||||
cycle
|
||||
end if
|
||||
! Advect in the v direction
|
||||
|
|
@ -423,14 +439,14 @@ program VlaPlEx
|
|||
! Reset values for next iteration
|
||||
f_i_old = f_i
|
||||
do iz = 1, nz
|
||||
if (all(n_i(iz,:) < 1.0e-16_dp) .and. iz .NE. z_inj) then
|
||||
if (all(n_i(iz,:) < n_epsilon) .and. iz .ne. z_inj) then
|
||||
cycle
|
||||
end if
|
||||
fCum_i(iz,:) = fCum_i(iz,:) + f_i_old(iz,rCum_index,:)
|
||||
end do
|
||||
! Write output
|
||||
if (mod(t,everyOutput) == 0 .or. t == nt) then
|
||||
call writeOutputF(t, dt, nz, nr, r, nv, v, f_i_old, Z_list)
|
||||
! call writeOutputF(t, dt, nz, nr, r, nv, v, f_i_old, Z_list)
|
||||
call writeOutputPhi(t, dt, nr, r, phi, E, n_e)
|
||||
call writeOutputMom(t, dt, nz, nr, r, n_i, u_i, T_i, Z_list)
|
||||
call writeOutputFCum(t, dt, nz, r(rCum_index), nv, v, fCum_i, Z_list)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue