Case with Diko's peak
So I'd to make some changes to the Newton iterative method, but it's working now. It's not giving noise, it converges, and with these conditions the case reproduces the Diko's peak.
This commit is contained in:
parent
7ffdf8e65c
commit
0cfbdd2d07
1 changed files with 14 additions and 7 deletions
|
|
@ -307,6 +307,8 @@ program plasmaExpansion
|
||||||
|
|
||||||
real(dp):: Temp_bc ! Temperature
|
real(dp):: Temp_bc ! Temperature
|
||||||
real(dp):: Temp0, TempF
|
real(dp):: Temp0, TempF
|
||||||
|
real(dp):: Zave_bc ! Average charge state
|
||||||
|
real(dp):: Zave0, ZaveF
|
||||||
real(dp):: n_ecr ! Electron critical density for the laser
|
real(dp):: n_ecr ! Electron critical density for the laser
|
||||||
real(dp):: c_s ! Ion sound speed
|
real(dp):: c_s ! Ion sound speed
|
||||||
real(dp):: u_bc ! Injection velocity
|
real(dp):: u_bc ! Injection velocity
|
||||||
|
|
@ -352,12 +354,14 @@ program plasmaExpansion
|
||||||
! Set input parameters (remember these have to be in non-dimensional units)
|
! Set input parameters (remember these have to be in non-dimensional units)
|
||||||
Temp0 = 60.0_dp * eV_to_K / Temp_ref
|
Temp0 = 60.0_dp * eV_to_K / Temp_ref
|
||||||
TempF = 10.0_dp * eV_to_K / Temp_ref
|
TempF = 10.0_dp * eV_to_K / Temp_ref
|
||||||
|
Zave0 = 12.0_dp
|
||||||
|
ZaveF = 3.0_dp
|
||||||
n_ecr = 1.0e19_dp * cm3_to_m3 / n_ref
|
n_ecr = 1.0e19_dp * cm3_to_m3 / n_ref
|
||||||
c_s = sqrt(T_to_Z(Temp0) * gam * Temp0)
|
c_s = sqrt(Zave0 * gam * Temp0)
|
||||||
u_bc0 = c_s!sqrt(Temp0)
|
u_bc0 = c_s!sqrt(Temp0)
|
||||||
u_bcF = sqrt(TempF)
|
u_bcF = sqrt(TempF)
|
||||||
n_bc0 = n_ecr / T_to_Z(Temp0)
|
n_bc0 = n_ecr / Zave0
|
||||||
n_bcF = n_bc0!n_ecr*1.0e-1 / T_to_Z(Temp0)
|
n_bcF = 1.0e-1*n_bc0!n_ecr*1.0e-1 / T_to_Z(Temp0)
|
||||||
|
|
||||||
! Set domain boundaries (non-dimensional units)
|
! Set domain boundaries (non-dimensional units)
|
||||||
r0 = 200.0e-6_dp / L_ref
|
r0 = 200.0e-6_dp / L_ref
|
||||||
|
|
@ -487,19 +491,22 @@ program plasmaExpansion
|
||||||
|
|
||||||
! Main loop
|
! Main loop
|
||||||
Temp_bc = Temp0
|
Temp_bc = Temp0
|
||||||
|
Zave_bc = Zave0
|
||||||
u_bc = u_bc0
|
u_bc = u_bc0
|
||||||
n_bc = n_bc0
|
n_bc = n_bc0
|
||||||
do t = 1, nt
|
do t = 1, nt
|
||||||
if (t > t_bc0 .and. t <= t_bcF) then
|
if (t > t_bc0 .and. t <= t_bcF) then
|
||||||
Temp_bc = (TempF - Temp0) / float(t_bcF - t_bc0)*(t - t_bc0) + Temp0
|
Temp_bc = (TempF - Temp0) / float(t_bcF - t_bc0)*(t - t_bc0) + Temp0
|
||||||
|
Zave_bc = (ZaveF - Zave0) / float(t_bcF - t_bc0)*(t - t_bc0) + Zave0
|
||||||
u_bc = (u_bcF - u_bc0) / float(t_bcF - t_bc0)*(t - t_bc0) + u_bc0
|
u_bc = (u_bcF - u_bc0) / float(t_bcF - t_bc0)*(t - t_bc0) + u_bc0
|
||||||
n_bc = (n_bcF - n_bc0) / float(t_bcF - t_bc0)*(t - t_bc0) + n_bc0
|
n_bc = (n_bcF - n_bc0) / float(t_bcF - t_bc0)*(t - t_bc0) + n_bc0
|
||||||
else if (t > t_bcF) then
|
else if (t > t_bcF) then
|
||||||
Temp_bc = TempF
|
Temp_bc = TempF
|
||||||
|
Zave_bc = ZaveF
|
||||||
u_bc = u_bcF
|
u_bc = u_bcF
|
||||||
n_bc = n_bcF
|
n_bc = n_bcF
|
||||||
end if
|
end if
|
||||||
call writeOutputBoundary(t, dt, n_bc, u_bc, Temp_bc, T_to_Z(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) = v(j0:nv)**2 / sqrt(PI*Temp_bc**3) * exp(-(v(j0:nv) - u_bc)**2 / Temp_bc)
|
||||||
f0 = f0 * n_bc / (sum(f0)*dv)
|
f0 = f0 * n_bc / (sum(f0)*dv)
|
||||||
|
|
||||||
|
|
@ -508,7 +515,7 @@ program plasmaExpansion
|
||||||
f_i_old(1,j0:nv) = f0
|
f_i_old(1,j0:nv) = f0
|
||||||
f_i(1,j0:nv) = f_i_old(1,j0:nv)
|
f_i(1,j0:nv) = f_i_old(1,j0:nv)
|
||||||
T_i(1) = Temp_bc
|
T_i(1) = Temp_bc
|
||||||
Zave(1) = T_to_Z(Temp_bc)
|
Zave(1) = Zave_bc
|
||||||
! r = rf, v<0
|
! r = rf, v<0
|
||||||
f_i_old(nr,1:j0-1) = 0.0_dp
|
f_i_old(nr,1:j0-1) = 0.0_dp
|
||||||
f_i(nr,1:j0-1) = f_i_old(nr,1:j0-1)
|
f_i(nr,1:j0-1) = f_i_old(nr,1:j0-1)
|
||||||
|
|
@ -534,7 +541,7 @@ program plasmaExpansion
|
||||||
u_i(i) = sum(v(:) *f_i(i,:))*dv / n_i(i)
|
u_i(i) = sum(v(:) *f_i(i,:))*dv / n_i(i)
|
||||||
E_i(i) = sum(v(:)**2*f_i(i,:))*dv / n_i(i)
|
E_i(i) = sum(v(:)**2*f_i(i,:))*dv / n_i(i)
|
||||||
T_i(i) = 2.0_dp*E_i(i) - 2.0_dp*u_i(i)**2
|
T_i(i) = 2.0_dp*E_i(i) - 2.0_dp*u_i(i)**2
|
||||||
Zave(i) = T_to_Z(T_i(i))
|
Zave(i) = Zave_bc
|
||||||
|
|
||||||
else
|
else
|
||||||
u_i(i) = 0.0_dp
|
u_i(i) = 0.0_dp
|
||||||
|
|
@ -574,7 +581,7 @@ program plasmaExpansion
|
||||||
|
|
||||||
! Iterate system
|
! Iterate system
|
||||||
call dgtsv(nr, 1, diag_low, diag, diag_high, Res, nr, info)
|
call dgtsv(nr, 1, diag_low, diag, diag_high, Res, nr, info)
|
||||||
phi = phi_old + Res
|
phi = phi_old + 1.0e-1_dp*Res
|
||||||
! phi0=phi(1)
|
! phi0=phi(1)
|
||||||
|
|
||||||
! Calculate distribution of electrons
|
! Calculate distribution of electrons
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue