Is it working?

Okay, so after going to Cartesian coordinantes, going back to spherical
coordinates, reviewing Poisson and Vlasov equations in spherical
coordinates (be careful on how you write Vlasov grad.(v f)).
This commit is contained in:
Jorge Gonzalez 2024-10-01 14:51:46 +02:00
commit 9da03ee0ea

View file

@ -395,7 +395,7 @@ program plasmaExpansion
t0 = 0.0_dp
tf = 1.0e-6_dp / t_ref
! tf = 1.0e1_dp * (rf - r0) / c_s
dt = 1.0e-2_dp*dr/(10.0_dp*c_s)
dt = 1.0e-1_dp*dr/(10.0_dp*c_s)
nt = nint((tf - t0) / dt)
dt = (tf - t0) / float(nt)
@ -445,8 +445,8 @@ program plasmaExpansion
diag_high = 0.0_dp
b = 0.0_dp
diag = -2.0_dp / dr**2
diag_low = 1.0_dp / dr**2! * r(1:nr-1) / r(2:nr)
diag_high = 1.0_dp / dr**2! * r(2:nr) / r(1:nr-1)
diag_low = 1.0_dp / dr**2 - 1.0_dp / (r(2:nr) * 2.0_dp * dr)
diag_high = 1.0_dp / dr**2 + 1.0_dp / (r(1:nr-1) * 2.0_dp * dr)
diag(1) = 1.0_dp ! Dirichlet
diag_high(1) = 0.0_dp ! Dirichlet
! diag_high(1) = 2.0_dp / dr**2 ! Neumann
@ -519,13 +519,13 @@ program plasmaExpansion
do i = 1, nr
! Advect negative velocity
if (i < nr) then
f_i(i,1:j0-1) = f_i_old(i,1:j0-1) - v(1:j0-1)*dt/dr*(f_i_old(i+1,1:j0-1) - &
f_i_old(i ,1:j0-1))
f_i(i,1:j0-1) = f_i_old(i,1:j0-1) - v(1:j0-1)*dt/dr/r(i)**2*(r(i+1)**2*f_i_old(i+1,1:j0-1) - &
r(i )**2*f_i_old(i ,1:j0-1))
end if
! Advect positive velocity
if (i > 1) then
f_i(i,j0:nv) = f_i_old(i, j0:nv) - v( j0:nv)*dt/dr*(f_i_old(i , j0:nv) - &
f_i_old(i-1, j0:nv))
f_i(i,j0:nv) = f_i_old(i, j0:nv) - v( j0:nv)*dt/dr/r(i)**2*(r(i )**2*f_i_old(i , j0:nv) - &
r(i-1)**2*f_i_old(i-1, j0:nv))
end if
n_i(i) = sum(f_i(i,:)*dv)
@ -551,8 +551,8 @@ program plasmaExpansion
! Diagonal matrix for Newton integration scheme
diag = -2.0_dp / dr**2 - n_e
diag_low = 1.0_dp / dr**2! * r(1:nr-1) / r(2:nr)
diag_high = 1.0_dp / dr**2! * r(2:nr) / r(1:nr-1)
diag_low = 1.0_dp / dr**2 - 1.0_dp / (r(2:nr) * 2.0_dp * dr)
diag_high = 1.0_dp / dr**2 + 1.0_dp / (r(1:nr-1) * 2.0_dp * dr)
diag(1) = 1.0_dp ! Dirichlet
diag_high(1) = 0.0_dp ! Dirichlet
! diag_high(1) = 2.0_dp / dr**2 - n_e(1) ! Neumann
@ -574,13 +574,14 @@ program plasmaExpansion
! Iterate system
call dgtsv(nr, 1, diag_low, diag, diag_high, Res, nr, info)
phi = phi_old + Res
! phi0=phi(1)
! Calculate distribution of electrons
n_e = Zave(1) * n_i(1) * exp((phi - phi0) / T_i(1))
! Check if the solution has converged
phiConv = maxval(abs(Res),1)
if (phiConv < 1.0e-5_dp) then
if (phiConv < 1.0e-3_dp) then
exit
end if