Skip to content

Commit

Permalink
Merge new_flux into doublePulse
Browse files Browse the repository at this point in the history
  • Loading branch information
Hemaditya Malla committed Oct 4, 2023
2 parents 2e29701 + 8e604a0 commit 739b459
Show file tree
Hide file tree
Showing 49 changed files with 2,306 additions and 1,689 deletions.
20 changes: 13 additions & 7 deletions afivo/examples/advection.f90
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ subroutine forward_euler(tree, dt, dt_stiff, dt_lim, time, s_deriv, n_prev, &
integer, intent(in) :: s_out
integer, intent(in) :: i_step, n_steps
integer :: lvl, i, id
real(dp) :: all_dt(1)

select case (flux_method)
case ("generic")
Expand All @@ -245,8 +246,9 @@ subroutine forward_euler(tree, dt, dt_stiff, dt_lim, time, s_deriv, n_prev, &
flux_dummy_conversion, flux_dummy_conversion, af_limiter_koren_t)
case ("upwind")
call flux_upwind_tree(tree, 1, [i_phi], s_deriv, [i_flux], &
dt_lim, flux_upwind, flux_direction, &
1, all_dt, flux_upwind, flux_direction, &
flux_dummy_line_modify, af_limiter_koren_t)
dt_lim = all_dt(1)
case ("custom")
! Ensure ghost cells near refinement boundaries can be properly filled
call af_restrict_ref_boundary(tree, [i_phi+s_deriv])
Expand All @@ -271,8 +273,8 @@ subroutine forward_euler(tree, dt, dt_stiff, dt_lim, time, s_deriv, n_prev, &
error stop "Unknown flux_method, choices: generic, upwind, custom"
end select

call flux_update_densities(tree, dt, 1, [i_phi], [i_flux], &
s_deriv, n_prev, s_prev, w_prev, s_out, flux_dummy_source)
call flux_update_densities(tree, dt, 1, [i_phi], 1, [i_phi], [i_flux], &
s_deriv, n_prev, s_prev, w_prev, s_out, flux_dummy_source, 0, all_dt)

end subroutine forward_euler

Expand Down Expand Up @@ -332,14 +334,17 @@ subroutine get_flux(n_values, n_var, flux_dim, u, flux, box, line_ix, s_deriv)
flux = u * velocity(flux_dim)
end subroutine get_flux

subroutine flux_upwind(nf, n_var, flux_dim, u, flux, cfl_sum, box, line_ix, s_deriv)
subroutine flux_upwind(nf, n_var, flux_dim, u, flux, cfl_sum, &
n_other_dt, other_dt, box, line_ix, s_deriv)
integer, intent(in) :: nf !< Number of cell faces
integer, intent(in) :: n_var !< Number of variables
integer, intent(in) :: flux_dim !< In which dimension fluxes are computed
real(dp), intent(in) :: u(nf, n_var) !< Face values
real(dp), intent(out) :: flux(nf, n_var) !< Computed fluxes
!> Terms per cell-center to be added to CFL sum, see flux_upwind_box
real(dp), intent(out) :: cfl_sum(nf-1)
integer, intent(in) :: n_other_dt !< Number of non-cfl time step restrictions
real(dp), intent(inout) :: other_dt(n_other_dt) !< Non-cfl time step restrictions
type(box_t), intent(in) :: box !< Current box
integer, intent(in) :: line_ix(NDIM-1) !< Index of line for dim /= flux_dim
integer, intent(in) :: s_deriv !< State to compute derivatives from
Expand All @@ -351,15 +356,16 @@ subroutine flux_upwind(nf, n_var, flux_dim, u, flux, cfl_sum, box, line_ix, s_de
cfl_sum = tmp
end subroutine flux_upwind

subroutine flux_direction(box, line_ix, s_deriv, flux_dim, direction_positive)
subroutine flux_direction(box, line_ix, s_deriv, n_var, flux_dim, direction_positive)
type(box_t), intent(in) :: box !< Current box
integer, intent(in) :: line_ix(NDIM-1) !< Index of line for dim /= flux_dim
integer, intent(in) :: s_deriv !< State to compute derivatives from
integer, intent(in) :: n_var !< Number of variables
integer, intent(in) :: flux_dim !< In which dimension fluxes are computed
!> True means positive flow (to the "right"), false to the left
logical, intent(out) :: direction_positive(box%n_cell+1)
logical, intent(out) :: direction_positive(box%n_cell+1, n_var)

direction_positive(:) = (velocity(flux_dim) > 0)
direction_positive(:, 1) = (velocity(flux_dim) > 0)
end subroutine flux_direction

end program
26 changes: 19 additions & 7 deletions afivo/examples/compressible_flow_wall.f90
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,26 @@ subroutine forward_euler(tree, dt, dt_stiff, dt_lim, time, s_deriv, n_prev, &
real(dp), intent(in) :: w_prev(n_prev) !< Weights of previous states
integer, intent(in) :: s_out
integer, intent(in) :: i_step, n_steps
real(dp) :: dummy_dt(0)

call flux_generic_tree(tree, n_vars, variables, s_deriv, fluxes, dt_lim, &
max_wavespeed, get_fluxes, flux_dummy_modify, line_modify, &
to_primitive, to_conservative, af_limiter_vanleer_t)
call flux_update_densities(tree, dt, n_vars, variables, fluxes, &
s_deriv, n_prev, s_prev, w_prev, s_out, flux_dummy_source, i_lsf)
call flux_update_densities(tree, dt, n_vars, variables, n_vars, variables, fluxes, &
s_deriv, n_prev, s_prev, w_prev, s_out, flux_dummy_source, 0, dummy_dt, &
set_box_mask)
end subroutine forward_euler

!> Set a mask to true where the solution should be updated
subroutine set_box_mask(box, mask)
type(box_t), intent(in) :: box
logical, intent(out) :: mask(DTIMES(box%n_cell))
integer :: nc

nc = box%n_cell
mask = (box%cc(DTIMES(1:nc), i_lsf) > 0.0_dp)
end subroutine set_box_mask

subroutine set_init_conds(box)
type(box_t), intent(inout) :: box
integer :: IJK, nc
Expand Down Expand Up @@ -234,18 +246,18 @@ subroutine line_modify(n_cc, n_var, cc_line, flux_dim, box, line_ix, s_deriv)
integer, intent(in) :: line_ix(NDIM-1) !< Index of line for dim /= flux_dim
integer, intent(in) :: s_deriv !< State to compute derivatives from

real(dp) :: lsf(0:box%n_cell+2, 1)
real(dp) :: lsf(0:box%n_cell+1)
integer :: i

! Get level set function along the line of the flux computation
call flux_get_line_cc(box, [i_lsf], flux_dim, line_ix, lsf)
call flux_get_line_1cc(box, i_lsf, flux_dim, line_ix, lsf)

if (all(lsf > 0)) return ! no boundary

do i = 0, box%n_cell
if (lsf(i, 1) * lsf(i+1, 1) <= 0) then
if (lsf(i) * lsf(i+1) <= 0) then
! There is an interface
if (lsf(i, 1) > 0) then
if (lsf(i) > 0) then
cc_line(i+1, :) = cc_line(i, :)
cc_line(i+2, :) = cc_line(i-1, :)
cc_line(i+1, i_mom(flux_dim)) = -cc_line(i, i_mom(flux_dim))
Expand Down Expand Up @@ -377,4 +389,4 @@ real(dp) function get_lsf(rr)

end function get_lsf

end program compressible_flow_wall
end program
5 changes: 3 additions & 2 deletions afivo/examples/euler_gas_dynamics.f90
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,13 @@ subroutine forward_euler(tree, dt, dt_stiff, dt_lim, time, s_deriv, n_prev, &
real(dp), intent(in) :: w_prev(n_prev) !< Weights of previous states
integer, intent(in) :: s_out
integer, intent(in) :: i_step, n_steps
real(dp) :: dummy_dt(0)

call flux_generic_tree(tree, n_vars, variables, s_deriv, fluxes, dt_lim, &
max_wavespeed, get_fluxes, flux_dummy_modify, flux_dummy_line_modify, &
to_primitive, to_conservative, af_limiter_vanleer_t)
call flux_update_densities(tree, dt, n_vars, variables, fluxes, &
s_deriv, n_prev, s_prev, w_prev, s_out, flux_dummy_source)
call flux_update_densities(tree, dt, n_vars, variables, n_vars, variables, fluxes, &
s_deriv, n_prev, s_prev, w_prev, s_out, flux_dummy_source, 0, dummy_dt)
end subroutine forward_euler
!> [forward_euler_gasd]

Expand Down
12 changes: 8 additions & 4 deletions afivo/examples/incompressible_flow.f90
Original file line number Diff line number Diff line change
Expand Up @@ -146,26 +146,30 @@ subroutine forward_euler(tree, dt, dt_stiff, dt_lim, time, s_deriv, n_prev, &
real(dp), intent(in) :: w_prev(n_prev) !< Weights of previous states
integer, intent(in) :: s_out
integer, intent(in) :: i_step, n_steps
real(dp) :: tmp
real(dp) :: dummy_dt(0)

call flux_generic_tree(tree, n_vars, flow_variables, s_deriv, fluxes, dt_lim, &
max_wavespeed, get_flux_lr, flux_add_diffusion, flux_dummy_line_modify, &
flux_dummy_conversion, flux_dummy_conversion, af_limiter_vanleer_t)

call flux_update_densities(tree, dt, n_vars, flow_variables, fluxes, &
s_deriv, n_prev, s_prev, w_prev, s_out, source_term)
call flux_update_densities(tree, dt, n_vars, flow_variables, n_vars, &
flow_variables, fluxes, s_deriv, n_prev, s_prev, w_prev, s_out, &
source_term, 0, dummy_dt)

call remove_velocity_divergence(tree, flow_variables+s_out, dt)

end subroutine forward_euler

subroutine source_term(box, dt, n_vars, i_cc, s_deriv, s_out)
subroutine source_term(box, dt, n_vars, i_cc, s_deriv, s_out, n_dt, dt_lim, mask)
type(box_t), intent(inout) :: box
real(dp), intent(in) :: dt
integer, intent(in) :: n_vars
integer, intent(in) :: i_cc(n_vars)
integer, intent(in) :: s_deriv
integer, intent(in) :: s_out
integer, intent(in) :: n_dt
real(dp), intent(inout) :: dt_lim(n_dt)
logical, intent(in) :: mask(DTIMES(box%n_cell))

integer :: nc
nc = box%n_cell
Expand Down
Loading

0 comments on commit 739b459

Please sign in to comment.