Merge branch 'master' into reconnection
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This commit is contained in:
commit
c098ae663a
@ -5333,8 +5333,8 @@ module boundaries
|
|||||||
use equations , only : csnd2
|
use equations , only : csnd2
|
||||||
use gravity , only : gravitational_acceleration
|
use gravity , only : gravitational_acceleration
|
||||||
use iso_fortran_env, only : error_unit
|
use iso_fortran_env, only : error_unit
|
||||||
use user_problem , only : boundary_user_x, boundary_user_y &
|
use user_problem , only : user_boundary_x, user_boundary_y &
|
||||||
, boundary_user_z
|
, user_boundary_z
|
||||||
|
|
||||||
! local variables are not implicit by default
|
! local variables are not implicit by default
|
||||||
!
|
!
|
||||||
@ -5535,7 +5535,7 @@ module boundaries
|
|||||||
!
|
!
|
||||||
case(bnd_user)
|
case(bnd_user)
|
||||||
|
|
||||||
call boundary_user_x(side(1), jl, ju, kl, ku &
|
call user_boundary_x(side(1), jl, ju, kl, ku &
|
||||||
, t, dt, x(:), y(:), z(:), qn(:,:,:,:))
|
, t, dt, x(:), y(:), z(:), qn(:,:,:,:))
|
||||||
|
|
||||||
! wrong boundary conditions
|
! wrong boundary conditions
|
||||||
@ -5713,7 +5713,7 @@ module boundaries
|
|||||||
!
|
!
|
||||||
case(bnd_user)
|
case(bnd_user)
|
||||||
|
|
||||||
call boundary_user_y(side(2), il, iu, kl, ku &
|
call user_boundary_y(side(2), il, iu, kl, ku &
|
||||||
, t, dt, x(:), y(:), z(:), qn(:,:,:,:))
|
, t, dt, x(:), y(:), z(:), qn(:,:,:,:))
|
||||||
|
|
||||||
! wrong boundary conditions
|
! wrong boundary conditions
|
||||||
@ -5887,7 +5887,7 @@ module boundaries
|
|||||||
!
|
!
|
||||||
case(bnd_user)
|
case(bnd_user)
|
||||||
|
|
||||||
call boundary_user_z(side(3), il, iu, jl, ju &
|
call user_boundary_z(side(3), il, iu, jl, ju &
|
||||||
, t, dt, x(:), y(:), z(:), qn(:,:,:,:))
|
, t, dt, x(:), y(:), z(:), qn(:,:,:,:))
|
||||||
|
|
||||||
! wrong boundary conditions
|
! wrong boundary conditions
|
||||||
|
@ -86,6 +86,7 @@ program amun
|
|||||||
use timers , only : start_timer, stop_timer, set_timer, get_timer
|
use timers , only : start_timer, stop_timer, set_timer, get_timer
|
||||||
use timers , only : get_timer_total, timer_enabled, timer_description
|
use timers , only : get_timer_total, timer_enabled, timer_description
|
||||||
use timers , only : get_count, ntimers
|
use timers , only : get_count, ntimers
|
||||||
|
use user_problem , only : user_time_statistics
|
||||||
|
|
||||||
! module variables are not implicit by default
|
! module variables are not implicit by default
|
||||||
!
|
!
|
||||||
@ -564,6 +565,7 @@ program amun
|
|||||||
if (.not. restart_from_snapshot()) then
|
if (.not. restart_from_snapshot()) then
|
||||||
|
|
||||||
call store_integrals()
|
call store_integrals()
|
||||||
|
call user_time_statistics()
|
||||||
call write_snapshot()
|
call write_snapshot()
|
||||||
|
|
||||||
end if
|
end if
|
||||||
@ -655,9 +657,10 @@ program amun
|
|||||||
!
|
!
|
||||||
call store_mesh_stats(step, time)
|
call store_mesh_stats(step, time)
|
||||||
|
|
||||||
! store integrals
|
! store time statistics
|
||||||
!
|
!
|
||||||
call store_integrals()
|
call store_integrals()
|
||||||
|
call user_time_statistics()
|
||||||
|
|
||||||
! write down the restart snapshot
|
! write down the restart snapshot
|
||||||
!
|
!
|
||||||
|
@ -350,12 +350,13 @@ module evolution
|
|||||||
cfl = 2.5d+00 * cfl
|
cfl = 2.5d+00 * cfl
|
||||||
name_int = "Optimized 3ʳᵈ-order 5-step embedded RK3(2)5"
|
name_int = "Optimized 3ʳᵈ-order 5-step embedded RK3(2)5"
|
||||||
|
|
||||||
allocate(c(stages), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
allocate(c(stages+1), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
||||||
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
||||||
2.300285062878154351930669430512780706d-01, &
|
2.300285062878154351930669430512780706d-01, &
|
||||||
4.050049049262914975700372321130661410d-01, &
|
4.050049049262914975700372321130661410d-01, &
|
||||||
8.947823877926760224705450466361360720d-01, &
|
8.947823877926760224705450466361360720d-01, &
|
||||||
7.235108137218888081489570284485201518d-01 ]
|
7.235108137218888081489570284485201518d-01, &
|
||||||
|
1.000000000000000000000000000000000000d+00 ]
|
||||||
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
||||||
3.407687209321455242558804921815861422d-01, &
|
3.407687209321455242558804921815861422d-01, &
|
||||||
3.414399280584625023244387687873774697d-01, &
|
3.414399280584625023244387687873774697d-01, &
|
||||||
@ -415,12 +416,13 @@ module evolution
|
|||||||
cfl = 2.5d+00 * cfl
|
cfl = 2.5d+00 * cfl
|
||||||
name_int = "Optimized 3ʳᵈ-order 5-step embedded RK3(2)5 FSAL"
|
name_int = "Optimized 3ʳᵈ-order 5-step embedded RK3(2)5 FSAL"
|
||||||
|
|
||||||
allocate(c(stages), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
allocate(c(stages+1), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
||||||
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
||||||
2.300298624518076223899418286314123354d-01, &
|
2.300298624518076223899418286314123354d-01, &
|
||||||
4.050046072094990912268498160116125481d-01, &
|
4.050046072094990912268498160116125481d-01, &
|
||||||
8.947822893693433545220710894560512805d-01, &
|
8.947822893693433545220710894560512805d-01, &
|
||||||
7.235136928826589010272834603680114769d-01 ]
|
7.235136928826589010272834603680114769d-01, &
|
||||||
|
1.000000000000000000000000000000000000d+00 ]
|
||||||
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
||||||
3.407655879334525365094815965895763636d-01, &
|
3.407655879334525365094815965895763636d-01, &
|
||||||
3.414382655003386206551709871126405331d-01, &
|
3.414382655003386206551709871126405331d-01, &
|
||||||
@ -479,7 +481,7 @@ module evolution
|
|||||||
cfl = 3.5d+00 * cfl
|
cfl = 3.5d+00 * cfl
|
||||||
name_int = "Optimized 4ᵗʰ-order 9-step embedded RK4(3)9"
|
name_int = "Optimized 4ᵗʰ-order 9-step embedded RK4(3)9"
|
||||||
|
|
||||||
allocate(c(stages), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
allocate(c(stages+1), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
||||||
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
||||||
2.836343531977826022543660465926414772d-01, &
|
2.836343531977826022543660465926414772d-01, &
|
||||||
5.484073767552486705240014599676811834d-01, &
|
5.484073767552486705240014599676811834d-01, &
|
||||||
@ -488,7 +490,8 @@ module evolution
|
|||||||
3.518526451892056368706593492732753284d-01, &
|
3.518526451892056368706593492732753284d-01, &
|
||||||
1.665941920204672094647868254892387293d+00, &
|
1.665941920204672094647868254892387293d+00, &
|
||||||
9.715276989307335935187466054546761665d-01, &
|
9.715276989307335935187466054546761665d-01, &
|
||||||
9.051569554420045339601721625247585643d-01 ]
|
9.051569554420045339601721625247585643d-01, &
|
||||||
|
1.000000000000000000000000000000000000d+00 ]
|
||||||
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
||||||
1.262923854387806460989545005598562667d+00, &
|
1.262923854387806460989545005598562667d+00, &
|
||||||
7.574967177560872438940839460448329992d-01, &
|
7.574967177560872438940839460448329992d-01, &
|
||||||
@ -572,7 +575,7 @@ module evolution
|
|||||||
cfl = 3.5d+00 * cfl
|
cfl = 3.5d+00 * cfl
|
||||||
name_int = "Optimized 4ᵗʰ-order 9-step embedded RK4(3)9 FSAL"
|
name_int = "Optimized 4ᵗʰ-order 9-step embedded RK4(3)9 FSAL"
|
||||||
|
|
||||||
allocate(c(stages), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
allocate(c(stages+1), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
||||||
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
||||||
2.836343005184365275160654678626695428d-01, &
|
2.836343005184365275160654678626695428d-01, &
|
||||||
5.484076570002894365286665352032296535d-01, &
|
5.484076570002894365286665352032296535d-01, &
|
||||||
@ -581,7 +584,8 @@ module evolution
|
|||||||
3.518526124230705801739919476290327750d-01, &
|
3.518526124230705801739919476290327750d-01, &
|
||||||
1.665941994879593315477304663913129942d+00, &
|
1.665941994879593315477304663913129942d+00, &
|
||||||
9.715279295934715835299192116436237065d-01, &
|
9.715279295934715835299192116436237065d-01, &
|
||||||
9.051569840159589594903399929316959062d-01 ]
|
9.051569840159589594903399929316959062d-01, &
|
||||||
|
1.000000000000000000000000000000000000d+00 ]
|
||||||
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
||||||
1.262923876648114432874834923838556100d+00, &
|
1.262923876648114432874834923838556100d+00, &
|
||||||
7.574967189685911558308119415539596711d-01, &
|
7.574967189685911558308119415539596711d-01, &
|
||||||
@ -664,7 +668,7 @@ module evolution
|
|||||||
cfl = 4.2d+00 * cfl
|
cfl = 4.2d+00 * cfl
|
||||||
name_int = "Optimized 5ᵗʰ-order 10-step embedded RK5(4)10"
|
name_int = "Optimized 5ᵗʰ-order 10-step embedded RK5(4)10"
|
||||||
|
|
||||||
allocate(c(stages), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
allocate(c(stages+1), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
||||||
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
||||||
2.597883575710995826783320802193635406d-01, &
|
2.597883575710995826783320802193635406d-01, &
|
||||||
9.904573115730917688557891428202061598d-02, &
|
9.904573115730917688557891428202061598d-02, &
|
||||||
@ -674,7 +678,8 @@ module evolution
|
|||||||
5.449986973408778242805929551952000165d-01, &
|
5.449986973408778242805929551952000165d-01, &
|
||||||
7.615224662599497796472095353126697300d-01, &
|
7.615224662599497796472095353126697300d-01, &
|
||||||
8.427062083059167761623893618875787414d-01, &
|
8.427062083059167761623893618875787414d-01, &
|
||||||
9.152209807185253394871325258038753352d-01 ]
|
9.152209807185253394871325258038753352d-01, &
|
||||||
|
1.000000000000000000000000000000000000d+00 ]
|
||||||
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
||||||
-1.331778409133849616712007380176762548d-01, &
|
-1.331778409133849616712007380176762548d-01, &
|
||||||
8.260422785246030254485064732649153253d-01, &
|
8.260422785246030254485064732649153253d-01, &
|
||||||
@ -764,7 +769,7 @@ module evolution
|
|||||||
cfl = 4.2d+00 * cfl
|
cfl = 4.2d+00 * cfl
|
||||||
name_int = "Optimized 5ᵗʰ-order 10-step embedded RK5(4)10 FSAL"
|
name_int = "Optimized 5ᵗʰ-order 10-step embedded RK5(4)10 FSAL"
|
||||||
|
|
||||||
allocate(c(stages), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
allocate(c(stages+1), dl(stages), bt(stages), bh(stages+1), gm(3,stages))
|
||||||
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
c (:) = [ 0.000000000000000000000000000000000000d+00, &
|
||||||
2.597883554788674084039539165398464630d-01, &
|
2.597883554788674084039539165398464630d-01, &
|
||||||
9.904573247592460887087003212056568980d-02, &
|
9.904573247592460887087003212056568980d-02, &
|
||||||
@ -774,7 +779,8 @@ module evolution
|
|||||||
5.449986978853637084972622392134732553d-01, &
|
5.449986978853637084972622392134732553d-01, &
|
||||||
7.615224694532590139829150720490417596d-01, &
|
7.615224694532590139829150720490417596d-01, &
|
||||||
8.427062083267360939805493320684741215d-01, &
|
8.427062083267360939805493320684741215d-01, &
|
||||||
9.152209805057669959657927210873423883d-01 ]
|
9.152209805057669959657927210873423883d-01, &
|
||||||
|
1.000000000000000000000000000000000000d+00 ]
|
||||||
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
dl(:) = [ 1.000000000000000000000000000000000000d+00, &
|
||||||
-1.331778419508803397033287009506932673d-01, &
|
-1.331778419508803397033287009506932673d-01, &
|
||||||
8.260422814750207498262063505871077303d-01, &
|
8.260422814750207498262063505871077303d-01, &
|
||||||
@ -3217,14 +3223,15 @@ module evolution
|
|||||||
pdata => pdata%next
|
pdata => pdata%next
|
||||||
end do
|
end do
|
||||||
|
|
||||||
call update_variables(tm, dtm)
|
dtm = c(2) * dt
|
||||||
|
call update_variables(time, dtm)
|
||||||
|
|
||||||
!= remaining stages
|
!= remaining stages
|
||||||
!
|
!
|
||||||
do i = 2, stages
|
do i = 2, stages
|
||||||
|
|
||||||
tm = time + c(i) * dt
|
dtm = c(i) * dt
|
||||||
dtm = (c(i) - c(i-1)) * dt
|
tm = time + dtm
|
||||||
|
|
||||||
pdata => list_data
|
pdata => list_data
|
||||||
do while (associated(pdata))
|
do while (associated(pdata))
|
||||||
@ -3252,6 +3259,7 @@ module evolution
|
|||||||
pdata => pdata%next
|
pdata => pdata%next
|
||||||
end do
|
end do
|
||||||
|
|
||||||
|
dtm = c(i+1) * dt
|
||||||
call update_variables(tm, dtm)
|
call update_variables(tm, dtm)
|
||||||
|
|
||||||
end do ! i = 2, stages
|
end do ! i = 2, stages
|
||||||
@ -3348,9 +3356,6 @@ module evolution
|
|||||||
|
|
||||||
!= final step: U(n+1) = U(1)
|
!= final step: U(n+1) = U(1)
|
||||||
!
|
!
|
||||||
dtm = dt
|
|
||||||
tm = time + dt
|
|
||||||
|
|
||||||
pdata => list_data
|
pdata => list_data
|
||||||
do while (associated(pdata))
|
do while (associated(pdata))
|
||||||
|
|
||||||
@ -3361,7 +3366,8 @@ module evolution
|
|||||||
pdata => pdata%next
|
pdata => pdata%next
|
||||||
end do
|
end do
|
||||||
|
|
||||||
call update_variables(tm, dtm)
|
tm = time + dt
|
||||||
|
call update_variables(tm, dt)
|
||||||
|
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
call stop_timer(imu)
|
call stop_timer(imu)
|
||||||
|
@ -103,8 +103,8 @@ module gravity
|
|||||||
! include external procedures and variables
|
! include external procedures and variables
|
||||||
!
|
!
|
||||||
use parameters , only : get_parameter
|
use parameters , only : get_parameter
|
||||||
use user_problem , only : gravitational_acceleration_user &
|
use user_problem , only : user_gravitational_acceleration &
|
||||||
, gravity_enabled_user
|
, user_gravity_enabled
|
||||||
|
|
||||||
! local variables are not implicit by default
|
! local variables are not implicit by default
|
||||||
!
|
!
|
||||||
@ -152,8 +152,8 @@ module gravity
|
|||||||
|
|
||||||
! in case of other problems, gravity is calculated by user
|
! in case of other problems, gravity is calculated by user
|
||||||
!
|
!
|
||||||
gravitational_acceleration => gravitational_acceleration_user
|
gravitational_acceleration => user_gravitational_acceleration
|
||||||
gravity_enabled = gravity_enabled_user
|
gravity_enabled = user_gravity_enabled
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ module problems
|
|||||||
subroutine initialize_problems(problem, verbose, status)
|
subroutine initialize_problems(problem, verbose, status)
|
||||||
|
|
||||||
use parameters , only : get_parameter
|
use parameters , only : get_parameter
|
||||||
use user_problem, only : initialize_user_problem, setup_problem_user
|
use user_problem, only : initialize_user_problem, setup_user_problem
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ module problems
|
|||||||
setup_problem => setup_problem_tearing
|
setup_problem => setup_problem_tearing
|
||||||
|
|
||||||
case default
|
case default
|
||||||
setup_problem => setup_problem_user
|
setup_problem => setup_user_problem
|
||||||
|
|
||||||
call initialize_user_problem(problem, verbose, status)
|
call initialize_user_problem(problem, verbose, status)
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ module shapes
|
|||||||
! include external procedures and variables
|
! include external procedures and variables
|
||||||
!
|
!
|
||||||
use parameters , only : get_parameter
|
use parameters , only : get_parameter
|
||||||
use user_problem, only : update_shapes_user
|
use user_problem, only : update_user_shapes
|
||||||
|
|
||||||
! local variables are not implicit by default
|
! local variables are not implicit by default
|
||||||
!
|
!
|
||||||
@ -160,7 +160,7 @@ module shapes
|
|||||||
! no shape update
|
! no shape update
|
||||||
!
|
!
|
||||||
case default
|
case default
|
||||||
update_shapes => update_shapes_user
|
update_shapes => update_user_shapes
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ module sources
|
|||||||
use equations , only : ibx, iby, ibz, ibp
|
use equations , only : ibx, iby, ibz, ibp
|
||||||
use gravity , only : gravity_enabled, gravitational_acceleration
|
use gravity , only : gravity_enabled, gravitational_acceleration
|
||||||
use operators , only : divergence, gradient, laplace, curl
|
use operators , only : divergence, gradient, laplace, curl
|
||||||
use user_problem , only : update_sources_user
|
use user_problem , only : update_user_sources
|
||||||
|
|
||||||
! local variables are not implicit by default
|
! local variables are not implicit by default
|
||||||
!
|
!
|
||||||
@ -750,7 +750,7 @@ module sources
|
|||||||
|
|
||||||
! add user defined source terms
|
! add user defined source terms
|
||||||
!
|
!
|
||||||
call update_sources_user(pdata, t, dt, du(:,:,:,:))
|
call update_user_sources(pdata, t, dt, du(:,:,:,:))
|
||||||
|
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
! stop accounting time for source terms
|
! stop accounting time for source terms
|
||||||
|
@ -76,12 +76,21 @@ module user_problem
|
|||||||
|
|
||||||
! flag indicating if the gravitational source term is enabled
|
! flag indicating if the gravitational source term is enabled
|
||||||
!
|
!
|
||||||
logical, save :: gravity_enabled_user = .false.
|
logical, save :: user_gravity_enabled = .false.
|
||||||
|
|
||||||
! allocatable arrays for velocity perturbation
|
! allocatable arrays for velocity perturbation
|
||||||
!
|
!
|
||||||
real(kind=8), dimension(:), allocatable :: kx, ky, kz, ux, uy, uz, ph
|
real(kind=8), dimension(:), allocatable :: kx, ky, kz, ux, uy, uz, ph
|
||||||
|
|
||||||
|
! export subroutines
|
||||||
|
!
|
||||||
|
private
|
||||||
|
public :: initialize_user_problem, finalize_user_problem
|
||||||
|
public :: setup_user_problem, update_user_sources, update_user_shapes
|
||||||
|
public :: user_gravitational_acceleration, user_gravity_enabled
|
||||||
|
public :: user_boundary_x, user_boundary_y, user_boundary_z
|
||||||
|
public :: user_time_statistics
|
||||||
|
|
||||||
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
!
|
!
|
||||||
contains
|
contains
|
||||||
@ -134,7 +143,7 @@ module user_problem
|
|||||||
#if NDIMS == 3
|
#if NDIMS == 3
|
||||||
real(kind=8) :: thv, tx, ty, tz, tt
|
real(kind=8) :: thv, tx, ty, tz, tt
|
||||||
#endif /* NDIMS == 3 */
|
#endif /* NDIMS == 3 */
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -411,7 +420,7 @@ module user_problem
|
|||||||
! subroutine arguments
|
! subroutine arguments
|
||||||
!
|
!
|
||||||
integer, intent(out) :: status
|
integer, intent(out) :: status
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -442,7 +451,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
! subroutine SETUP_PROBLEM_USER:
|
! subroutine SETUP_USER_PROBLEM:
|
||||||
! -----------------------------
|
! -----------------------------
|
||||||
!
|
!
|
||||||
! Subroutine sets the initial conditions for the user specific problem.
|
! Subroutine sets the initial conditions for the user specific problem.
|
||||||
@ -454,7 +463,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
subroutine setup_problem_user(pdata)
|
subroutine setup_user_problem(pdata)
|
||||||
|
|
||||||
! include external procedures and variables
|
! include external procedures and variables
|
||||||
!
|
!
|
||||||
@ -512,7 +521,7 @@ module user_problem
|
|||||||
real(kind=8), dimension(nn) :: zc
|
real(kind=8), dimension(nn) :: zc
|
||||||
#endif /* NDIMS == 3 */
|
#endif /* NDIMS == 3 */
|
||||||
real(kind=8), dimension(3) :: dh
|
real(kind=8), dimension(3) :: dh
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -878,104 +887,11 @@ module user_problem
|
|||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
end subroutine setup_problem_user
|
end subroutine setup_user_problem
|
||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
! subroutine LOG_COSH:
|
! subroutine UPDATE_USER_SOURCES:
|
||||||
! -------------------
|
|
||||||
!
|
|
||||||
! Function calculates the logarithm of the hyperbolic cosine, which is
|
|
||||||
! the result of the integration of tanh(x). Direct calculation using
|
|
||||||
! Fortran intrinsic subroutines fails for large values of x, therefore
|
|
||||||
! the logarithm of cosh is approximated as |x| + log(1/2) for
|
|
||||||
! |x| > threshold.
|
|
||||||
!
|
|
||||||
! Arguments:
|
|
||||||
!
|
|
||||||
! x - function argument;
|
|
||||||
!
|
|
||||||
!===============================================================================
|
|
||||||
!
|
|
||||||
function log_cosh(x) result(y)
|
|
||||||
|
|
||||||
! local variables are not implicit by default
|
|
||||||
!
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
! function arguments
|
|
||||||
!
|
|
||||||
real(kind=8), intent(in) :: x
|
|
||||||
real(kind=8) :: y
|
|
||||||
|
|
||||||
! local parameters
|
|
||||||
!
|
|
||||||
real(kind=8), parameter :: th = acosh(huge(x)), lh = log(0.5d+00)
|
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
|
||||||
!
|
|
||||||
if (abs(x) < th) then
|
|
||||||
y = log(cosh(x))
|
|
||||||
else
|
|
||||||
y = abs(x) + lh
|
|
||||||
end if
|
|
||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
|
||||||
!
|
|
||||||
end function log_cosh
|
|
||||||
!
|
|
||||||
!===============================================================================
|
|
||||||
!
|
|
||||||
! subroutine UPDATE_SHAPES_USER:
|
|
||||||
! -----------------------------
|
|
||||||
!
|
|
||||||
! Subroutine defines the regions updated by user.
|
|
||||||
!
|
|
||||||
! Arguments:
|
|
||||||
!
|
|
||||||
! pdata - pointer to the data block structure of the currently initialized
|
|
||||||
! block;
|
|
||||||
! time - time at the moment of update;
|
|
||||||
! dt - time step since the last update;
|
|
||||||
!
|
|
||||||
!===============================================================================
|
|
||||||
!
|
|
||||||
subroutine update_shapes_user(pdata, time, dt)
|
|
||||||
|
|
||||||
! include external procedures and variables
|
|
||||||
!
|
|
||||||
use blocks, only : block_data
|
|
||||||
|
|
||||||
! local variables are not implicit by default
|
|
||||||
!
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
! subroutine arguments
|
|
||||||
!
|
|
||||||
type(block_data), pointer, intent(inout) :: pdata
|
|
||||||
real(kind=8) , intent(in) :: time, dt
|
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
|
||||||
!
|
|
||||||
#ifdef PROFILE
|
|
||||||
! start accounting time for the shape update
|
|
||||||
!
|
|
||||||
call start_timer(ims)
|
|
||||||
#endif /* PROFILE */
|
|
||||||
|
|
||||||
#ifdef PROFILE
|
|
||||||
! stop accounting time for the shape update
|
|
||||||
!
|
|
||||||
call stop_timer(ims)
|
|
||||||
#endif /* PROFILE */
|
|
||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
|
||||||
!
|
|
||||||
end subroutine update_shapes_user
|
|
||||||
!
|
|
||||||
!===============================================================================
|
|
||||||
!
|
|
||||||
! subroutine UPDATE_SOURCES_USER:
|
|
||||||
! ------------------------------
|
! ------------------------------
|
||||||
!
|
!
|
||||||
! Subroutine adds the user defined source terms.
|
! Subroutine adds the user defined source terms.
|
||||||
@ -988,7 +904,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
subroutine update_sources_user(pdata, t, dt, du)
|
subroutine update_user_sources(pdata, t, dt, du)
|
||||||
|
|
||||||
! include external variables
|
! include external variables
|
||||||
!
|
!
|
||||||
@ -1003,7 +919,7 @@ module user_problem
|
|||||||
type(block_data), pointer , intent(inout) :: pdata
|
type(block_data), pointer , intent(inout) :: pdata
|
||||||
real(kind=8) , intent(in) :: t, dt
|
real(kind=8) , intent(in) :: t, dt
|
||||||
real(kind=8), dimension(:,:,:,:), intent(inout) :: du
|
real(kind=8), dimension(:,:,:,:), intent(inout) :: du
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -1020,11 +936,60 @@ module user_problem
|
|||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
end subroutine update_sources_user
|
end subroutine update_user_sources
|
||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
! subroutine GRAVITATIONAL_ACCELERATION_USER:
|
! subroutine UPDATE_USER_SHAPES:
|
||||||
|
! -----------------------------
|
||||||
|
!
|
||||||
|
! Subroutine defines the regions updated by user.
|
||||||
|
!
|
||||||
|
! Arguments:
|
||||||
|
!
|
||||||
|
! pdata - pointer to the data block structure of the currently initialized
|
||||||
|
! block;
|
||||||
|
! time - time at the moment of update;
|
||||||
|
! dt - time step since the last update;
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
subroutine update_user_shapes(pdata, time, dt)
|
||||||
|
|
||||||
|
! include external procedures and variables
|
||||||
|
!
|
||||||
|
use blocks, only : block_data
|
||||||
|
|
||||||
|
! local variables are not implicit by default
|
||||||
|
!
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! subroutine arguments
|
||||||
|
!
|
||||||
|
type(block_data), pointer, intent(inout) :: pdata
|
||||||
|
real(kind=8) , intent(in) :: time, dt
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
#ifdef PROFILE
|
||||||
|
! start accounting time for the shape update
|
||||||
|
!
|
||||||
|
call start_timer(ims)
|
||||||
|
#endif /* PROFILE */
|
||||||
|
|
||||||
|
#ifdef PROFILE
|
||||||
|
! stop accounting time for the shape update
|
||||||
|
!
|
||||||
|
call stop_timer(ims)
|
||||||
|
#endif /* PROFILE */
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
end subroutine update_user_shapes
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
! subroutine USER_GRAVITATIONAL_ACCELERATION:
|
||||||
! ------------------------------------------
|
! ------------------------------------------
|
||||||
!
|
!
|
||||||
! Subroutine returns the user defined gravitational acceleration.
|
! Subroutine returns the user defined gravitational acceleration.
|
||||||
@ -1037,7 +1002,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
subroutine gravitational_acceleration_user(t, dt, x, y, z, acc)
|
subroutine user_gravitational_acceleration(t, dt, x, y, z, acc)
|
||||||
|
|
||||||
! include external procedures and variables
|
! include external procedures and variables
|
||||||
!
|
!
|
||||||
@ -1052,7 +1017,7 @@ module user_problem
|
|||||||
real(kind=8) , intent(in) :: t, dt
|
real(kind=8) , intent(in) :: t, dt
|
||||||
real(kind=8) , intent(in) :: x, y, z
|
real(kind=8) , intent(in) :: x, y, z
|
||||||
real(kind=8), dimension(3), intent(out) :: acc
|
real(kind=8), dimension(3), intent(out) :: acc
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -1073,11 +1038,11 @@ module user_problem
|
|||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
end subroutine gravitational_acceleration_user
|
end subroutine user_gravitational_acceleration
|
||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
! subroutine BOUNDARY_USER_X:
|
! subroutine USER_BOUNDARY_X:
|
||||||
! --------------------------
|
! --------------------------
|
||||||
!
|
!
|
||||||
! Subroutine updates ghost zones within the specific region along
|
! Subroutine updates ghost zones within the specific region along
|
||||||
@ -1094,7 +1059,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
subroutine boundary_user_x(ic, jl, ju, kl, ku, t, dt, x, y, z, qn)
|
subroutine user_boundary_x(ic, jl, ju, kl, ku, t, dt, x, y, z, qn)
|
||||||
|
|
||||||
! import external procedures and variables
|
! import external procedures and variables
|
||||||
!
|
!
|
||||||
@ -1131,7 +1096,7 @@ module user_problem
|
|||||||
#if NDIMS == 3
|
#if NDIMS == 3
|
||||||
real(kind=8) :: dz, dxz
|
real(kind=8) :: dz, dxz
|
||||||
#endif /* NDIMS == 3 */
|
#endif /* NDIMS == 3 */
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -1288,11 +1253,11 @@ module user_problem
|
|||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
end subroutine boundary_user_x
|
end subroutine user_boundary_x
|
||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
! subroutine BOUNDARY_USER_Y:
|
! subroutine USER_BOUNDARY_Y:
|
||||||
! --------------------------
|
! --------------------------
|
||||||
!
|
!
|
||||||
! Subroutine updates ghost zones within the specific region along
|
! Subroutine updates ghost zones within the specific region along
|
||||||
@ -1309,7 +1274,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
subroutine boundary_user_y(jc, il, iu, kl, ku, t, dt, x, y, z, qn)
|
subroutine user_boundary_y(jc, il, iu, kl, ku, t, dt, x, y, z, qn)
|
||||||
|
|
||||||
! import external procedures and variables
|
! import external procedures and variables
|
||||||
!
|
!
|
||||||
@ -1345,7 +1310,7 @@ module user_problem
|
|||||||
real(kind=8) :: dz, dyz
|
real(kind=8) :: dz, dyz
|
||||||
#endif /* NDIMS == 3 */
|
#endif /* NDIMS == 3 */
|
||||||
real(kind=8) :: fl, fr
|
real(kind=8) :: fl, fr
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -1515,11 +1480,11 @@ module user_problem
|
|||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
end subroutine boundary_user_y
|
end subroutine user_boundary_y
|
||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
! subroutine BOUNDARY_USER_Z:
|
! subroutine USER_BOUNDARY_Z:
|
||||||
! --------------------------
|
! --------------------------
|
||||||
!
|
!
|
||||||
! Subroutine updates ghost zones within the specific region along
|
! Subroutine updates ghost zones within the specific region along
|
||||||
@ -1536,7 +1501,7 @@ module user_problem
|
|||||||
!
|
!
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
subroutine boundary_user_z(kc, il, iu, jl, ju, t, dt, x, y, z, qn)
|
subroutine user_boundary_z(kc, il, iu, jl, ju, t, dt, x, y, z, qn)
|
||||||
|
|
||||||
! local variables are not implicit by default
|
! local variables are not implicit by default
|
||||||
!
|
!
|
||||||
@ -1552,7 +1517,7 @@ module user_problem
|
|||||||
real(kind=8), dimension(:) , intent(in) :: y
|
real(kind=8), dimension(:) , intent(in) :: y
|
||||||
real(kind=8), dimension(:) , intent(in) :: z
|
real(kind=8), dimension(:) , intent(in) :: z
|
||||||
real(kind=8), dimension(:,:,:,:), intent(inout) :: qn
|
real(kind=8), dimension(:,:,:,:), intent(inout) :: qn
|
||||||
!
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -1569,7 +1534,80 @@ module user_problem
|
|||||||
|
|
||||||
!-------------------------------------------------------------------------------
|
!-------------------------------------------------------------------------------
|
||||||
!
|
!
|
||||||
end subroutine boundary_user_z
|
end subroutine user_boundary_z
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
! subroutine USER_TIME_STATISTICS:
|
||||||
|
! -------------------------------
|
||||||
|
!
|
||||||
|
! Subroutine can be use to store user defined time statistics. The file to
|
||||||
|
! store these statistics should be properly created in subroutine
|
||||||
|
! initialize_user_problem() and closed in finalize_user_problem().
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
subroutine user_time_statistics()
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
#ifdef PROFILE
|
||||||
|
call start_timer(imt)
|
||||||
|
#endif /* PROFILE */
|
||||||
|
|
||||||
|
#ifdef PROFILE
|
||||||
|
call stop_timer(imt)
|
||||||
|
#endif /* PROFILE */
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
end subroutine user_time_statistics
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
! subroutine LOG_COSH:
|
||||||
|
! -------------------
|
||||||
|
!
|
||||||
|
! Function calculates the logarithm of the hyperbolic cosine, which is
|
||||||
|
! the result of the integration of tanh(x). Direct calculation using
|
||||||
|
! Fortran intrinsic subroutines fails for large values of x, therefore
|
||||||
|
! the logarithm of cosh is approximated as |x| + log(1/2) for
|
||||||
|
! |x| > threshold.
|
||||||
|
!
|
||||||
|
! Arguments:
|
||||||
|
!
|
||||||
|
! x - function argument;
|
||||||
|
!
|
||||||
|
!===============================================================================
|
||||||
|
!
|
||||||
|
function log_cosh(x) result(y)
|
||||||
|
|
||||||
|
! local variables are not implicit by default
|
||||||
|
!
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! function arguments
|
||||||
|
!
|
||||||
|
real(kind=8), intent(in) :: x
|
||||||
|
real(kind=8) :: y
|
||||||
|
|
||||||
|
! local parameters
|
||||||
|
!
|
||||||
|
real(kind=8), parameter :: th = acosh(huge(x)), lh = log(0.5d+00)
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
if (abs(x) < th) then
|
||||||
|
y = log(cosh(x))
|
||||||
|
else
|
||||||
|
y = abs(x) + lh
|
||||||
|
end if
|
||||||
|
|
||||||
|
!-------------------------------------------------------------------------------
|
||||||
|
!
|
||||||
|
end function log_cosh
|
||||||
|
|
||||||
!===============================================================================
|
!===============================================================================
|
||||||
!
|
!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user