From 9dd8ea86f4e7b41eff20cf8f96ca60abbf187966 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Mon, 21 Sep 2026 13:46:24 -0600 Subject: [PATCH] Fix missing regularization core on mirrored FVW segments (ShearModel=1) In PackPanelsToSegments, the ground-mirror block reflected segment points and negated circulation but never assigned SegEpsilon for the mirrored half. The image segments therefore kept the -999999 sentinel core size from allocation, which silently disabled or corrupted their Biot-Savart contribution (segment/particle kernels collapse to ~0 for a negative core, and the treecode MAC floor degenerates), so ground effect under ShearModel=1 was under-delivered rather than crashing. Copy the regularization core from each real segment to its image (SegEpsilon(iMirror) = SegEpsilon(i)), which is physically exact since an image vortex shares the core size of its source. Co-authored-by: GitHub Copilot Co-authored-by: Claude --- modules/aerodyn/src/FVW_Subs.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/aerodyn/src/FVW_Subs.f90 b/modules/aerodyn/src/FVW_Subs.f90 index 7f295802fd..1c29dfad22 100644 --- a/modules/aerodyn/src/FVW_Subs.f90 +++ b/modules/aerodyn/src/FVW_Subs.f90 @@ -980,6 +980,7 @@ subroutine PackPanelsToSegments(p, x, iDepthStart, bMirror, nNW, nFW, SegConnct, SegConnct(1:2, iMirror) = SegConnct(1:2, i) + nSegP ! Increased point indices SegConnct(3:4, iMirror) = SegConnct(3:4, i) ! Span and age is copied SegGamma(iMirror) = -SegGamma(i) ! Vorticity needs mirroring + SegEpsilon(iMirror) = SegEpsilon(i) ! Regularization (core size) is copied enddo do i=1,nSegP iMirror = i + nSegP