Merge branch 'master' into reconnection

This commit is contained in:
Grzegorz Kowal 2023-02-27 10:07:36 -03:00
commit 2497956114
3 changed files with 56 additions and 27 deletions

View File

@ -1109,7 +1109,7 @@ module evolution
! add forcing contribution ! add forcing contribution
! !
if (forcing_enabled) call update_forcing(dt) if (forcing_enabled) call update_forcing(time, dt)
! check if we need to perform the refinement step ! check if we need to perform the refinement step
! !

View File

@ -35,8 +35,8 @@ module forcing
! interfaces for procedure pointers ! interfaces for procedure pointers
! !
abstract interface abstract interface
subroutine update_forcing_iface(dt) subroutine update_forcing_iface(t, dt)
real(kind=8), intent(in) :: dt real(kind=8), intent(in) :: t, dt
end subroutine end subroutine
end interface end interface
@ -89,6 +89,8 @@ module forcing
real(kind=8), save :: zth = 0.0d+00 real(kind=8), save :: zth = 0.0d+00
real(kind=8), save :: zfc = 1.0d+00 real(kind=8), save :: zfc = 1.0d+00
#endif /* NDIMS == 3 */ #endif /* NDIMS == 3 */
real(kind=8) :: tinj_start = 0.00000d+00
real(kind=8) :: tinj_stop = 9.99999d+99
! Fourier profile parameters ! Fourier profile parameters
! !
@ -244,6 +246,21 @@ module forcing
end if end if
#endif /* NDIMS == 3 */ #endif /* NDIMS == 3 */
! get the injection period
!
call get_parameter("injection_time_start", tinj_start)
call get_parameter("injection_time_stop" , tinj_stop )
if (tinj_start >= tinj_stop) then
if (verbose) then
write(*,*)
write(*,wfmt) "Injection cannot stop before it starts!"
write(*,wfmt) "Please, modify parameter 'injection_time_start'" // &
" or 'injection_time_stop'."
write(*,wfmt) "Resetting 'injection_time_start' to 0.0!"
tinj_start = 0.0d+00
end if
end if
! select the energy injection method ! select the energy injection method
! !
select case(trim(injection)) select case(trim(injection))
@ -929,6 +946,9 @@ module forcing
call print_parameter(verbose, "amplitude threshold", fmin) call print_parameter(verbose, "amplitude threshold", fmin)
end if end if
call print_parameter(verbose, "injection starts at", tinj_start)
call print_parameter(verbose, "injection stops at", tinj_stop)
if (.not. periodic(1)) & if (.not. periodic(1)) &
call print_parameter(verbose, "profile X transition between", xlo, xup) call print_parameter(verbose, "profile X transition between", xlo, xup)
if (.not. periodic(2)) & if (.not. periodic(2)) &
@ -953,18 +973,19 @@ module forcing
! !
! Arguments: ! Arguments:
! !
! dt - time increment; ! t - time;
! dt - time step;
! !
!=============================================================================== !===============================================================================
! !
subroutine update_forcing_eddies(dt) subroutine update_forcing_eddies(t, dt)
use coordinates, only : xmin, ymin, zmin, xlen, ylen, zlen use coordinates, only : xmin, ymin, zmin, xlen, ylen, zlen
use random , only : randuni, randsym use random , only : randuni, randsym
implicit none implicit none
real(kind=8), intent(in) :: dt real(kind=8), intent(in) :: t, dt
integer :: ni, n integer :: ni, n
#if NDIMS == 3 #if NDIMS == 3
@ -974,6 +995,8 @@ module forcing
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
if (t < tinj_start .or. t > tinj_stop) return
! calculate the number of eddies to be injected during this interval ! calculate the number of eddies to be injected during this interval
! !
dinj = dinj + rate * dt dinj = dinj + rate * dt
@ -1029,11 +1052,12 @@ module forcing
! !
! Arguments: ! Arguments:
! !
! dt - time increment; ! t - time;
! dt - time step;
! !
!=============================================================================== !===============================================================================
! !
subroutine update_forcing_oh(dt) subroutine update_forcing_oh(t, dt)
#if NDIMS == 3 #if NDIMS == 3
use constants, only : pi2 use constants, only : pi2
@ -1042,7 +1066,7 @@ module forcing
implicit none implicit none
real(kind=8), intent(in) :: dt real(kind=8), intent(in) :: t, dt
integer :: l integer :: l
real(kind=8) :: acoeff, dcoeff real(kind=8) :: acoeff, dcoeff
@ -1055,6 +1079,8 @@ module forcing
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
if (t < tinj_start .or. t > tinj_stop) return
! calculate drift and diffusion coefficients ! calculate drift and diffusion coefficients
! !
acoeff = exp(- dt / tscale) acoeff = exp(- dt / tscale)
@ -1113,18 +1139,19 @@ module forcing
! !
! Arguments: ! Arguments:
! !
! dt - time increment; ! t - time;
! dt - time step;
! !
!=============================================================================== !===============================================================================
! !
subroutine update_forcing_alvelius(dt) subroutine update_forcing_alvelius(t, dt)
use constants, only : pi2 use constants, only : pi2
use random , only : randuni use random , only : randuni
implicit none implicit none
real(kind=8), intent(in) :: dt real(kind=8), intent(in) :: t, dt
integer :: l integer :: l
real(kind=8) :: th1, dinj, sqdt real(kind=8) :: th1, dinj, sqdt
@ -1139,6 +1166,8 @@ module forcing
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
if (t < tinj_start .or. t > tinj_stop) return
! determine velocify coefficients in Fourier space ! determine velocify coefficients in Fourier space
! !
call get_vcoefs() call get_vcoefs()

View File

@ -4283,7 +4283,7 @@ module interpolations
! The method uses an implicit tri-diagonal solver and its coefficients are ! The method uses an implicit tri-diagonal solver and its coefficients are
! optimized for the maximum value of imaginary part of the scaled modified ! optimized for the maximum value of imaginary part of the scaled modified
! wave number (Im(κ)) to be 2e-6 and the integrated error of compact ! wave number (Im(κ)) to be 2e-6 and the integrated error of compact
! discretization E to be 6.4e-12. ! discretization E to be 6.017e-12 (at local minimum of E/r).
! !
! Arguments are described in subroutine reconstruct(). ! Arguments are described in subroutine reconstruct().
! !
@ -4316,8 +4316,8 @@ module interpolations
real(kind=8), dimension(size(fc)) :: r real(kind=8), dimension(size(fc)) :: r
real(kind=8), dimension(size(fc)) :: u real(kind=8), dimension(size(fc)) :: u
real(kind=8), parameter :: a1 = 5.0148583220385203994203557d-01 real(kind=8), parameter :: a1 = 5.01241562476900742404893381352899d-01
real(kind=8), parameter :: a2 = 2.5452055302783787784904423d-01 real(kind=8), parameter :: a2 = 2.54639102475156530564823003088612d-01
real(kind=8), dimension(3), parameter :: di5 = [ a1, 1.0d+00, a2 ] real(kind=8), dimension(3), parameter :: di5 = [ a1, 1.0d+00, a2 ]
real(kind=8), dimension(5), parameter :: & real(kind=8), dimension(5), parameter :: &
ci5 = [- 3.0d+00 * a1 - 3.0d+00 * a2 + 2.0d+00, & ci5 = [- 3.0d+00 * a1 - 3.0d+00 * a2 + 2.0d+00, &
@ -4415,7 +4415,7 @@ module interpolations
! The method uses an implicit tri-diagonal solver and its coefficients are ! The method uses an implicit tri-diagonal solver and its coefficients are
! optimized for the maximum value of imaginary part of the scaled modified ! optimized for the maximum value of imaginary part of the scaled modified
! wave number (Im(κ)) to be 2e-6 and the integrated error of compact ! wave number (Im(κ)) to be 2e-6 and the integrated error of compact
! discretization E to be 1.0e-11. ! discretization E to be 9.4859e-12 (at local minimum of E/r).
! !
! Arguments are described in subroutine reconstruct(). ! Arguments are described in subroutine reconstruct().
! !
@ -4439,8 +4439,8 @@ module interpolations
real(kind=8), dimension(size(fc)) :: r real(kind=8), dimension(size(fc)) :: r
real(kind=8), dimension(size(fc)) :: u real(kind=8), dimension(size(fc)) :: u
real(kind=8), parameter :: a1 = 5.0119544102147968726471782d-01 real(kind=8), parameter :: a1 = 5.00765434358710549355767793738926d-01
real(kind=8), parameter :: a2 = 3.0649545768561641522180678d-01 real(kind=8), parameter :: a2 = 3.06739643875254943361647028328465d-01
real(kind=8), dimension(3), parameter :: di7 = [ a1, 1.0d+00, a2 ] real(kind=8), dimension(3), parameter :: di7 = [ a1, 1.0d+00, a2 ]
real(kind=8), dimension(7), parameter :: & real(kind=8), dimension(7), parameter :: &
ci7 = [ 4.00d+00 * a1 + 4.00d+00 * a2 - 3.00d+00, & ci7 = [ 4.00d+00 * a1 + 4.00d+00 * a2 - 3.00d+00, &
@ -4544,7 +4544,7 @@ module interpolations
! The method uses an implicit tri-diagonal solver and its coefficients are ! The method uses an implicit tri-diagonal solver and its coefficients are
! optimized for the maximum value of imaginary part of the scaled modified ! optimized for the maximum value of imaginary part of the scaled modified
! wave number (Im(κ)) to be 2e-6 and the integrated error of compact ! wave number (Im(κ)) to be 2e-6 and the integrated error of compact
! discretization E to be 1.32e-11. ! discretization E to be 1.2513e-11 (at local minimum of E/r²).
! !
! Arguments are described in subroutine reconstruct(). ! Arguments are described in subroutine reconstruct().
! !
@ -4568,8 +4568,8 @@ module interpolations
real(kind=8), dimension(size(fc)) :: r real(kind=8), dimension(size(fc)) :: r
real(kind=8), dimension(size(fc)) :: u real(kind=8), dimension(size(fc)) :: u
real(kind=8), parameter :: a1 = 5.0087697436175480833840357d-01 real(kind=8), parameter :: a1 = 5.00415305771646324666320357024935d-01
real(kind=8), parameter :: a2 = 3.4091832657841234002695365d-01 real(kind=8), parameter :: a2 = 3.41203006456869647299948174549092d-01
real(kind=8), dimension(3), parameter :: di9 = [ a1, 1.0d+00, a2 ] real(kind=8), dimension(3), parameter :: di9 = [ a1, 1.0d+00, a2 ]
real(kind=8), dimension(9), parameter :: & real(kind=8), dimension(9), parameter :: &
ci9 = [ - 5.000d+00 * a1 - 5.000d+00 * a2 + 4.000d+00, & ci9 = [ - 5.000d+00 * a1 - 5.000d+00 * a2 + 4.000d+00, &
@ -4679,7 +4679,7 @@ module interpolations
! The method uses an implicit penta-diagonal solver and its coefficients are ! The method uses an implicit penta-diagonal solver and its coefficients are
! optimized for the maximum value of imaginary part of the scaled modified ! optimized for the maximum value of imaginary part of the scaled modified
! wave number (Im(κ)) to be 2e-6 and the integrated error of compact ! wave number (Im(κ)) to be 2e-6 and the integrated error of compact
! discretization E to be 1.38e-11. ! discretization E to be 1.2984e-11 (at local minimum of E/r).
! !
! Arguments are described in subroutine reconstruct(). ! Arguments are described in subroutine reconstruct().
! !
@ -4703,8 +4703,8 @@ module interpolations
real(kind=8), dimension(size(fc)) :: r real(kind=8), dimension(size(fc)) :: r
real(kind=8), dimension(size(fc)) :: u real(kind=8), dimension(size(fc)) :: u
real(kind=8), parameter :: a1 = 6.7100477315625665203995935d-01 real(kind=8), parameter :: a1 = 6.70862177813208397304414380169977d-01
real(kind=8), parameter :: a2 = 3.4097048071278782662422942d-01 real(kind=8), parameter :: a2 = 3.41040434946989987878686778898846d-01
real(kind=8), dimension(5), parameter :: & real(kind=8), dimension(5), parameter :: &
di7 = [ (3.0d+00 * a1 + 2.0d+00 * a2 - 2.0d+00) / 8.0d+00, & di7 = [ (3.0d+00 * a1 + 2.0d+00 * a2 - 2.0d+00) / 8.0d+00, &
a1, 1.0d+00, a2, & a1, 1.0d+00, a2, &
@ -4815,7 +4815,7 @@ module interpolations
! The method uses an implicit penta-diagonal solver and its coefficients are ! The method uses an implicit penta-diagonal solver and its coefficients are
! optimized for the maximum value of imaginary part of the scaled modified ! optimized for the maximum value of imaginary part of the scaled modified
! wave number (Im(κ)) to be 2e-6 and the integrated error of compact ! wave number (Im(κ)) to be 2e-6 and the integrated error of compact
! discretization E to be 1.54e-11. ! discretization E to be 1.4776e-11 (at local minimum of E/r).
! !
! Arguments are described in subroutine reconstruct(). ! Arguments are described in subroutine reconstruct().
! !
@ -4839,8 +4839,8 @@ module interpolations
real(kind=8), dimension(size(fc)) :: r real(kind=8), dimension(size(fc)) :: r
real(kind=8), dimension(size(fc)) :: u real(kind=8), dimension(size(fc)) :: u
real(kind=8), parameter :: a1 = 6.7028117788580347100541103d-01 real(kind=8), parameter :: a1 = 6.69938726201951413971659371944416d-01
real(kind=8), parameter :: a2 = 4.1002518667894543684869155d-01 real(kind=8), parameter :: a2 = 4.10221751253870603082971042746238d-01
real(kind=8), dimension(5), parameter :: & real(kind=8), dimension(5), parameter :: &
di9 = [ (9.0d+00 * a1 + 5.0d+00 * a2 - 6.0d+00) / 2.0d+01, & di9 = [ (9.0d+00 * a1 + 5.0d+00 * a2 - 6.0d+00) / 2.0d+01, &
a1, 1.0d+00, a2, & a1, 1.0d+00, a2, &