MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_ibm Module Reference

Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients, and corrects the flow state. More...

Functions/Subroutines

impure subroutine, public s_initialize_ibm_module ()
 Allocates memory for the variables in the IBM module.
impure subroutine, public s_ibm_setup ()
 Initializes the values of various IBM variables, such as ghost points and image points.
subroutine, private s_compute_ghost_point_pressure (gp, gp_patch_id, rho, pres_ip, pres_gp)
 Pressure correction for a moving IB, accounting for the acceleration of the boundary surface. Clamped both ways: the linearization it comes from holds only while the correction is order one, and an unbounded one drives the ghost state to vacuum.
subroutine, private s_compute_ghost_point_velocity (gp, gp_patch_id, radial_vector, vel_ip, pres_ip, vel_gp)
subroutine, public s_ibm_correct_state (q_cons_vf, q_prim_vf, pb_in, mv_in)
 Update the conservative variables at the ghost points.
impure subroutine, public s_report_ibm_surface
 One line at the end of a run if the reacting surface ever failed to solve. Silence means every ghost point on every step reached the surface-balance tolerance, i.e. the surface chemistry was actually applied everywhere it was asked for.
impure subroutine, private s_compute_image_points ()
 Compute the image points for each ghost point.
subroutine, private s_find_num_ghost_points (num_gps_out)
 Count the number of ghost points for memory allocation.
subroutine, private s_find_ghost_points ()
 Locate all ghost points in the domain.
subroutine, private s_compute_interpolation_coeffs ()
 Compute the interpolation coefficients for image points.
subroutine, private s_interpolate_image_point (q_prim_vf, gp, alpha_rho_ip, alpha_ip, pres_ip, vel_ip, c_ip, r_ip, v_ip, pb_ip, mv_ip, nmom_ip, pb_in, mv_in, presb_ip, massv_ip, ys_ip)
 Interpolate primitive variables to a ghost point's image point using bilinear or trilinear interpolation.
impure subroutine s_update_mib (num_ibs)
 Resets the current indexes of immersed boundaries and replaces them after updating the position of each moving immersed boundary.
pure real(wp) function f_log_cosh (x)
 log(cosh(x)) without overflow for large |x|
subroutine s_prescribed_kinematics (i, t)
 Prescribed kinematics for patch i at time t: hinged flapping (kin_model = 1) or the Eldredge pitch ramp (kin_model = 2). Flapping rolls phi about the lab x axis through the hinge and pitches theta about the body spanwise (y) axis through it; the ramp holds phi at zero and drives theta alone. Both compose as R = Rx(phi) Ry(theta) (MFC's angle convention) and set the angles, centroid, velocity and lab-frame angular velocity; nothing is integrated, so restarts are exact.
subroutine s_compute_ib_forces (q_prim_vf, fluid_pp)
 Compute pressure and viscous forces and torques on immersed bodies via volume integration.
subroutine s_compute_centroid_offset (gid, ib_marker)
 Computes the center of mass for IB patch types where we are unable to determine their center of mass analytically. These patches include things like NACA airfoils and STL models Move a moving airfoil/STL patch's centroid to its centre of mass, keeping the difference in centroid_offset. Collective: every rank calls it for every global id, contributing zeros for patches it does not hold.
pure logical function f_needs_centroid_offset (patch)
 A moving airfoil or STL (geometries 4, 5, 11, 12) moves its centroid to the centre of mass and keeps a centroid_offset.
impure subroutine s_restore_centroid_offsets (t_init)
 On restart, replace the re-measured centroid offsets with the ones the run was using (restart_data/ib_offset_<step>.dat, written with each checkpoint), and re-place kinematics-driven bodies about them. No file: the measured offsets stand.
subroutine s_compute_moment_of_inertia (patch, axis, moment)
 Computes the moment of inertia for an immersed boundary.
subroutine s_wrap_periodic_ibs ()
 Wrap immersed boundary positions across periodic domain boundaries.
impure subroutine s_setup_ib_force_comm ()
 Builds the ascending list of distinct neighborhood ranks used by s_communicate_ib_forces and allocates its buffers once. The ascending order is the fixed order in which an owner adds its neighbors' contributions.
integer function f_ib_nbr_slot (rank)
 Position of rank in ib_nbrs.
subroutine s_communicate_ib_forces (forces, torques)
 Reduces forces and torques so every rank holding an IB ends with bit-identical values. Each IB has one owner, the rank whose subdomain holds its centroid (patch_ibowner_rank, stamped at handoff). Phase 1: each rank sends its nonzero partials to the owner, which adds them to its own partial in ascending source-rank order once all have arrived. Phase 2: each owner sends its totals to every neighborhood rank, which overwrite their partials. One nonblocking message per neighbor per phase.
subroutine s_handoff_ib_ownership ()
 Swaps ownership of IBs and passes ownership of IBs to neighbor processors.
impure subroutine s_check_every_patch_marked ()
 Abort if any namelist immersed boundary marks no cell anywhere. The owning rank is chosen by the patch centroid, so an STL placed with model_translate while its centroid is left elsewhere is handed to ranks that do not hold it, and it vanishes silently. Cloud particles are skipped: a particle's centroid is its body, so it cannot vanish this way.
impure subroutine, public s_finalize_ibm_module ()
 Finalize the IBM module.
subroutine s_surface_species_residual (pres, t_s, d, ys_ip, ys_s, w_species, r_species, omega_s, mdot_s)
 Species flux residual at a heterogeneous reacting surface.
subroutine s_surface_energy_residual (pres, t_ip, t_s, d, ys_s, r_energy)
 Surface energy residual: gas-side conduction balances heterogeneous reaction heat. Radiation and solid-side conduction are omitted.
subroutine s_surface_residual (pres, t_ip, t_s, d, ys_ip, ys_s, w_species, k_bath, solve_temperature, flux_scale, energy_scale, r, r_species, omega_s, mdot_s)
 Assemble the Newton residual for Ns species, with temperature appended only when it is solved. k_bath selects which species balance the sum constraint displaces; see s_solve_surface for why it must be the most abundant one.
subroutine s_blend_ghost_state (t_ip, t_s, ys_ip, ys_s, t_g, ys_g)
 Ghost state for an immersed surface, from the image-point state and the surface state.
subroutine s_pick_bath_species (ys_s, k_bath)
 Index of the most abundant species, i.e. the balance the sum constraint displaces.
subroutine s_solve_surface (pres, t_ip, t_wall, d, ys_ip, w_species, thermal_bc, ys_s, t_s, mdot_s, converged)
 Newton solve for a reacting surface. thermal_bc=0: zero-normal-gradient T; 1: prescribed T; 2: energy balance.
subroutine s_solve_surface_linear_system (a, b, x, nsolve, success)
 Small dense linear solve with partial pivoting for the local surface Newton system.

Variables

integer n_surface_not_converged = 0
 Ghost points at which the reacting-surface Newton solve did not reach its tolerance, so the point fell back to a chemically inert wall (keeping a prescribed Twall). Counted because that fallback is otherwise indistinguishable from a surface mechanism that simply does nothing, and a run can look converged while the surface chemistry never engaged.
integer n_surface_ill_posed = 0
 Ghost points whose levelset distance was not positive, leaving the surface gradient (X_IP - X_s)/d undefined. Separate from the counter above because this is a grid/geometry degeneracy, not a kinetics failure.
type(integer_field), public ib_markers
type(integer_field) corrected_gps
 1 at ghost points whose image point reaches the fluid, 0 elsewhere. Ghost points with a buried image point average over these neighbors, and never over each other.
type(ghost_point), dimension(:), allocatable ghost_points
integer num_gps
 Number of ghost points.
logical moving_immersed_boundary_flag
logical centroid_offsets_active = .false.
 some patch is a moving airfoil or STL, which carries a centroid_offset
integer, parameter, private ib_rec_len = 7
 gbl_patch_id, force(1:3), torque(1:3)
integer, private n_ib_nbrs = 0
integer, dimension(:), allocatable, private ib_nbrs
integer, dimension(:), allocatable, private ib_send_counts
integer, dimension(:), allocatable, private ib_reqs
integer, dimension(:,:), allocatable, private ib_stats
real(wp), dimension(:,:), allocatable, private ib_send_bufs
real(wp), dimension(:,:), allocatable, private ib_recv_bufs

Detailed Description

Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients, and corrects the flow state.

Function/Subroutine Documentation

◆ f_ib_nbr_slot()

integer function m_ibm::f_ib_nbr_slot ( integer, intent(in) rank)

Position of rank in ib_nbrs.

Definition at line 3430 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ f_log_cosh()

pure real(wp) function m_ibm::f_log_cosh ( real(wp), intent(in) x)

log(cosh(x)) without overflow for large |x|

Definition at line 2711 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ f_needs_centroid_offset()

pure logical function m_ibm::f_needs_centroid_offset ( type(ib_patch_parameters), intent(in) patch)

A moving airfoil or STL (geometries 4, 5, 11, 12) moves its centroid to the centre of mass and keeps a centroid_offset.

Definition at line 3140 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_blend_ghost_state()

subroutine m_ibm::s_blend_ghost_state ( real(wp), intent(in) t_ip,
real(wp), intent(in) t_s,
real(wp), dimension(num_species), intent(in) ys_ip,
real(wp), dimension(num_species), intent(in) ys_s,
real(wp), intent(out) t_g,
real(wp), dimension(num_species), intent(out) ys_g )

Ghost state for an immersed surface, from the image-point state and the surface state.

The natural closure is the linear mirror phi_g = 2*phi_s - phi_IP, which is what makes the midpoint of the ghost/image pair reproduce the surface value. Its -1 coefficient on phi_IP is unconditional, though, so it drives strictly positive quantities negative whenever the surface value sits far below the image-point value: a cold wall in hot gas gives a negative ghost temperature and hence a negative ghost density, and a species the surface consumes faster than half the free-stream value gives a negative mass fraction. Rather than clamp the result – which would break sum(Y) = 1 and hide the excursion – the ghost state is the largest convex blend of the mirror back toward the surface value that stays physical:

phi_g(theta) = phi_s + theta*(phi_s - phi_IP),   theta in [0, 1]

theta = 1 is the full second-order mirror; theta = 0 is the first-order Dirichlet ghost phi_g = phi_s, which is Gibou et al. (JCP 176:205, 2002) Eq. 17 and is what they likewise fall back to where the linear form is ill-behaved. One theta is shared by every species, so since both endpoints satisfy sum(Y) = 1, so does every blend between them – exactly, with no renormalization. Temperature gets its own theta: nothing couples it to the composition, and sharing would let a trace radical the surface consumes to ~1e-9 (O and OH at a burning carbon wall) drag the thermal mirror down with it, turning a 2100 K ghost into 1205 K over a species whose own excursion was 1e-9. The cost of limiting is small: the mirror already delivers only first-order wall flux (Ezra et al., Int. J. Heat Mass Transfer, 2025), and a boundary closure one order below the interior scheme retains the interior convergence rate (Gustafsson, Math. Comp. 29:396, 1975).

This bounds the ghost state; it does not make the boundary strictly conservative. Baskaya et al. (Computers & Fluids 270:106134, 2024) trace the same cold-wall, large-gradient regime in ablation to ghost-cell mass conservation error that surfaces as spurious blowing, and resolve it only by moving to a flux-based cut-cell boundary – a different discretization from this one, not a tuning of it.

Definition at line 4172 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_check_every_patch_marked()

impure subroutine m_ibm::s_check_every_patch_marked

Abort if any namelist immersed boundary marks no cell anywhere. The owning rank is chosen by the patch centroid, so an STL placed with model_translate while its centroid is left elsewhere is handed to ranks that do not hold it, and it vanishes silently. Cloud particles are skipped: a particle's centroid is its body, so it cannot vanish this way.

Definition at line 3765 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_communicate_ib_forces()

subroutine m_ibm::s_communicate_ib_forces ( real(wp), dimension(num_ibs, 3), intent(inout) forces,
real(wp), dimension(num_ibs, 3), intent(inout) torques )

Reduces forces and torques so every rank holding an IB ends with bit-identical values. Each IB has one owner, the rank whose subdomain holds its centroid (patch_ibowner_rank, stamped at handoff). Phase 1: each rank sends its nonzero partials to the owner, which adds them to its own partial in ascending source-rank order once all have arrived. Phase 2: each owner sends its totals to every neighborhood rank, which overwrite their partials. One nonblocking message per neighbor per phase.

Definition at line 3446 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_compute_centroid_offset()

subroutine m_ibm::s_compute_centroid_offset ( integer, intent(in) gid,
integer, intent(in) ib_marker )

Computes the center of mass for IB patch types where we are unable to determine their center of mass analytically. These patches include things like NACA airfoils and STL models Move a moving airfoil/STL patch's centroid to its centre of mass, keeping the difference in centroid_offset. Collective: every rank calls it for every global id, contributing zeros for patches it does not hold.

Parameters
[in]gidglobal patch id
[in]ib_markerlocal index on this rank; <= 0 if not held

Definition at line 3075 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_compute_ghost_point_pressure()

subroutine, private m_ibm::s_compute_ghost_point_pressure ( type(ghost_point), intent(in) gp,
integer, intent(in) gp_patch_id,
real(wp), intent(in) rho,
real(wp), intent(in) pres_ip,
real(wp), intent(out) pres_gp )
private

Pressure correction for a moving IB, accounting for the acceleration of the boundary surface. Clamped both ways: the linearization it comes from holds only while the correction is order one, and an unbounded one drives the ghost state to vacuum.

Definition at line 1007 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_compute_ghost_point_velocity()

subroutine, private m_ibm::s_compute_ghost_point_velocity ( type(ghost_point), intent(in) gp,
integer, intent(in) gp_patch_id,
real(wp), dimension(3), intent(in) radial_vector,
real(wp), dimension(3), intent(in) vel_ip,
real(wp), intent(in) pres_ip,
real(wp), dimension(3), intent(out) vel_gp )
private

Definition at line 1037 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_compute_ib_forces()

subroutine m_ibm::s_compute_ib_forces ( type(scalar_field), dimension(1:sys_size), intent(in) q_prim_vf,
type(physical_parameters), dimension(1:num_fluids), intent(in) fluid_pp )

Compute pressure and viscous forces and torques on immersed bodies via volume integration.

Definition at line 2824 of file m_ibm.fpp.f90.

Here is the call graph for this function:

◆ s_compute_image_points()

impure subroutine, private m_ibm::s_compute_image_points
private

Compute the image points for each ghost point.

Definition at line 1820 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_compute_interpolation_coeffs()

subroutine, private m_ibm::s_compute_interpolation_coeffs
private

Compute the interpolation coefficients for image points.

Definition at line 2228 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_compute_moment_of_inertia()

subroutine m_ibm::s_compute_moment_of_inertia ( type(ib_patch_parameters), intent(in) patch,
real(wp), dimension(3), intent(in) axis,
real(wp), intent(out) moment )

Computes the moment of inertia for an immersed boundary.

Definition at line 3180 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_finalize_ibm_module()

impure subroutine, public m_ibm::s_finalize_ibm_module

Finalize the IBM module.

Definition at line 3796 of file m_ibm.fpp.f90.

◆ s_find_ghost_points()

subroutine, private m_ibm::s_find_ghost_points
private

Locate all ghost points in the domain.

Definition at line 2054 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_find_num_ghost_points()

subroutine, private m_ibm::s_find_num_ghost_points ( integer, intent(out) num_gps_out)
private

Count the number of ghost points for memory allocation.

Definition at line 1965 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_handoff_ib_ownership()

subroutine m_ibm::s_handoff_ib_ownership

Swaps ownership of IBs and passes ownership of IBs to neighbor processors.

Definition at line 3549 of file m_ibm.fpp.f90.

◆ s_ibm_correct_state()

subroutine, public m_ibm::s_ibm_correct_state ( type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf,
type(scalar_field), dimension(sys_size), intent(inout) q_prim_vf,
real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(inout) pb_in,
real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(inout) mv_in )

Update the conservative variables at the ghost points.

Parameters
[in,out]q_cons_vfPrimitive Variables
[in,out]q_prim_vfPrimitive Variables

Definition at line 1113 of file m_ibm.fpp.f90.

Here is the call graph for this function:

◆ s_ibm_setup()

impure subroutine, public m_ibm::s_ibm_setup

Initializes the values of various IBM variables, such as ghost points and image points.

Definition at line 750 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_initialize_ibm_module()

impure subroutine, public m_ibm::s_initialize_ibm_module

Allocates memory for the variables in the IBM module.

Definition at line 477 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_interpolate_image_point()

subroutine, private m_ibm::s_interpolate_image_point ( type(scalar_field), dimension(sys_size), intent(in) q_prim_vf,
type(ghost_point), intent(in) gp,
real(wp), dimension(num_fluids), intent(inout) alpha_rho_ip,
real(wp), dimension(num_fluids), intent(inout) alpha_ip,
real(wp), intent(inout) pres_ip,
real(wp), dimension(3), intent(inout) vel_ip,
real(wp), intent(inout) c_ip,
real(wp), dimension(:), intent(inout), optional r_ip,
real(wp), dimension(:), intent(inout), optional v_ip,
real(wp), dimension(:), intent(inout), optional pb_ip,
real(wp), dimension(:), intent(inout), optional mv_ip,
real(wp), dimension(:), intent(inout), optional nmom_ip,
real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(in), optional pb_in,
real(stp), dimension(idwbuff(1)%beg:,idwbuff(2)%beg:,idwbuff(3)%beg:,1:,1:), intent(in), optional mv_in,
real(wp), dimension(:), intent(inout), optional presb_ip,
real(wp), dimension(:), intent(inout), optional massv_ip,
real(wp), dimension(:), intent(inout), optional ys_ip )
private

Interpolate primitive variables to a ghost point's image point using bilinear or trilinear interpolation.

Parameters
[in]q_prim_vfPrimitive Variables
[in,out]ys_ipInterpolated species mass fractions (chemistry)

Definition at line 2359 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_pick_bath_species()

subroutine m_ibm::s_pick_bath_species ( real(wp), dimension(num_species), intent(in) ys_s,
integer, intent(out) k_bath )

Index of the most abundant species, i.e. the balance the sum constraint displaces.

Closing sum(Y) = 1 by dropping one species' flux balance is standard (Surface CHEMKIN), but the dropped species absorbs the roundoff of every other balance, so it must be the bath gas. Dropping a fixed index instead – the last species in the mechanism – lands that error on whatever the mechanism happens to list last, which for the reduced GRI mechanism shipped with the reacting-surface example is H2O2, a trace radical whose own surface balance then goes unenforced. Cantera's solveSP re-scans for the largest species each iteration (evalSurfLarge) for this reason.

Definition at line 4229 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_prescribed_kinematics()

subroutine m_ibm::s_prescribed_kinematics ( integer, intent(in) i,
real(wp), intent(in) t )

Prescribed kinematics for patch i at time t: hinged flapping (kin_model = 1) or the Eldredge pitch ramp (kin_model = 2). Flapping rolls phi about the lab x axis through the hinge and pitches theta about the body spanwise (y) axis through it; the ramp holds phi at zero and drives theta alone. Both compose as R = Rx(phi) Ry(theta) (MFC's angle convention) and set the angles, centroid, velocity and lab-frame angular velocity; nothing is integrated, so restarts are exact.

Definition at line 2739 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_report_ibm_surface()

impure subroutine, public m_ibm::s_report_ibm_surface

One line at the end of a run if the reacting surface ever failed to solve. Silence means every ghost point on every step reached the surface-balance tolerance, i.e. the surface chemistry was actually applied everywhere it was asked for.

Definition at line 1795 of file m_ibm.fpp.f90.

◆ s_restore_centroid_offsets()

impure subroutine m_ibm::s_restore_centroid_offsets ( real(wp), intent(in) t_init)

On restart, replace the re-measured centroid offsets with the ones the run was using (restart_data/ib_offset_<step>.dat, written with each checkpoint), and re-place kinematics-driven bodies about them. No file: the measured offsets stand.

Definition at line 3150 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_setup_ib_force_comm()

impure subroutine m_ibm::s_setup_ib_force_comm

Builds the ascending list of distinct neighborhood ranks used by s_communicate_ib_forces and allocates its buffers once. The ascending order is the fixed order in which an owner adds its neighbors' contributions.

Definition at line 3388 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_solve_surface()

subroutine m_ibm::s_solve_surface ( real(wp), intent(in) pres,
real(wp), intent(in) t_ip,
real(wp), intent(in) t_wall,
real(wp), intent(in) d,
real(wp), dimension(num_species), intent(in) ys_ip,
real(wp), dimension(num_species), intent(in) w_species,
integer, intent(in) thermal_bc,
real(wp), dimension(num_species), intent(out) ys_s,
real(wp), intent(out) t_s,
real(wp), intent(out) mdot_s,
logical, intent(out) converged )

Newton solve for a reacting surface. thermal_bc=0: zero-normal-gradient T; 1: prescribed T; 2: energy balance.

Definition at line 4260 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_solve_surface_linear_system()

subroutine m_ibm::s_solve_surface_linear_system ( real(wp), dimension(num_species + 1, num_species + 1), intent(inout) a,
real(wp), dimension(num_species + 1), intent(inout) b,
real(wp), dimension(num_species + 1), intent(out) x,
integer, intent(in) nsolve,
logical, intent(out) success )

Small dense linear solve with partial pivoting for the local surface Newton system.

Definition at line 4428 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_surface_energy_residual()

subroutine m_ibm::s_surface_energy_residual ( real(wp), intent(in) pres,
real(wp), intent(in) t_ip,
real(wp), intent(in) t_s,
real(wp), intent(in) d,
real(wp), dimension(num_species), intent(in) ys_s,
real(wp), intent(out) r_energy )

Surface energy residual: gas-side conduction balances heterogeneous reaction heat. Radiation and solid-side conduction are omitted.

Definition at line 4067 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_surface_residual()

subroutine m_ibm::s_surface_residual ( real(wp), intent(in) pres,
real(wp), intent(in) t_ip,
real(wp), intent(in) t_s,
real(wp), intent(in) d,
real(wp), dimension(num_species), intent(in) ys_ip,
real(wp), dimension(num_species), intent(in) ys_s,
real(wp), dimension(num_species), intent(in) w_species,
integer, intent(in) k_bath,
logical, intent(in) solve_temperature,
real(wp), intent(in) flux_scale,
real(wp), intent(in) energy_scale,
real(wp), dimension(num_species + 1), intent(out) r,
real(wp), dimension(num_species), intent(out) r_species,
real(wp), dimension(num_species), intent(out) omega_s,
real(wp), intent(out) mdot_s )

Assemble the Newton residual for Ns species, with temperature appended only when it is solved. k_bath selects which species balance the sum constraint displaces; see s_solve_surface for why it must be the most abundant one.

Definition at line 4103 of file m_ibm.fpp.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ s_surface_species_residual()

subroutine m_ibm::s_surface_species_residual ( real(wp), intent(in) pres,
real(wp), intent(in) t_s,
real(wp), intent(in) d,
real(wp), dimension(num_species), intent(in) ys_ip,
real(wp), dimension(num_species), intent(in) ys_s,
real(wp), dimension(num_species), intent(in) w_species,
real(wp), dimension(num_species), intent(out) r_species,
real(wp), dimension(num_species), intent(out) omega_s,
real(wp), intent(out) mdot_s )

Species flux residual at a heterogeneous reacting surface.

Definition at line 4008 of file m_ibm.fpp.f90.

Here is the caller graph for this function:

◆ s_update_mib()

impure subroutine m_ibm::s_update_mib ( integer, intent(in) num_ibs)

Resets the current indexes of immersed boundaries and replaces them after updating the position of each moving immersed boundary.

Definition at line 2577 of file m_ibm.fpp.f90.

Here is the call graph for this function:

◆ s_wrap_periodic_ibs()

subroutine m_ibm::s_wrap_periodic_ibs

Wrap immersed boundary positions across periodic domain boundaries.

Definition at line 3269 of file m_ibm.fpp.f90.

Variable Documentation

◆ centroid_offsets_active

logical m_ibm::centroid_offsets_active = .false.

some patch is a moving airfoil or STL, which carries a centroid_offset

Definition at line 465 of file m_ibm.fpp.f90.

◆ corrected_gps

type(integer_field) m_ibm::corrected_gps

1 at ghost points whose image point reaches the fluid, 0 elsewhere. Ghost points with a buried image point average over these neighbors, and never over each other.

Definition at line 408 of file m_ibm.fpp.f90.

◆ ghost_points

type(ghost_point), dimension(:), allocatable m_ibm::ghost_points

Definition at line 422 of file m_ibm.fpp.f90.

◆ ib_markers

type(integer_field), public m_ibm::ib_markers

Definition at line 392 of file m_ibm.fpp.f90.

◆ ib_nbrs

integer, dimension(:), allocatable, private m_ibm::ib_nbrs
private

Definition at line 470 of file m_ibm.fpp.f90.

◆ ib_rec_len

integer, parameter, private m_ibm::ib_rec_len = 7
private

gbl_patch_id, force(1:3), torque(1:3)

Definition at line 468 of file m_ibm.fpp.f90.

◆ ib_recv_bufs

real(wp), dimension(:,:), allocatable, private m_ibm::ib_recv_bufs
private

Definition at line 471 of file m_ibm.fpp.f90.

◆ ib_reqs

integer, dimension(:), allocatable, private m_ibm::ib_reqs
private

Definition at line 470 of file m_ibm.fpp.f90.

◆ ib_send_bufs

real(wp), dimension(:,:), allocatable, private m_ibm::ib_send_bufs
private

Definition at line 471 of file m_ibm.fpp.f90.

◆ ib_send_counts

integer, dimension(:), allocatable, private m_ibm::ib_send_counts
private

Definition at line 470 of file m_ibm.fpp.f90.

◆ ib_stats

integer, dimension(:,:), allocatable, private m_ibm::ib_stats
private

Definition at line 470 of file m_ibm.fpp.f90.

◆ moving_immersed_boundary_flag

logical m_ibm::moving_immersed_boundary_flag

Definition at line 464 of file m_ibm.fpp.f90.

◆ n_ib_nbrs

integer, private m_ibm::n_ib_nbrs = 0
private

Definition at line 469 of file m_ibm.fpp.f90.

◆ n_surface_ill_posed

integer m_ibm::n_surface_ill_posed = 0

Ghost points whose levelset distance was not positive, leaving the surface gradient (X_IP - X_s)/d undefined. Separate from the counter above because this is a grid/geometry degeneracy, not a kinetics failure.

Definition at line 391 of file m_ibm.fpp.f90.

◆ n_surface_not_converged

integer m_ibm::n_surface_not_converged = 0

Ghost points at which the reacting-surface Newton solve did not reach its tolerance, so the point fell back to a chemically inert wall (keeping a prescribed Twall). Counted because that fallback is otherwise indistinguishable from a surface mechanism that simply does nothing, and a run can look converged while the surface chemistry never engaged.

Definition at line 387 of file m_ibm.fpp.f90.

◆ num_gps

integer m_ibm::num_gps

Number of ghost points.

Definition at line 436 of file m_ibm.fpp.f90.