Laminar Far Wake (aerodynamics/boundary-layer/laminar-far-wake)
Use when you must compute the two-dimensional incompressible laminar far
wake downstream of a thin flat plate at zero incidence, the Goldstein
(1933) similarity wake that the attached laminar boundary layers shed
from the trailing edge, in the form Schlichting Boundary-Layer Theory
(wakes and free-shear-layers chapter, wake behind a flat plate) and
White Viscous Fluid Flow (laminar free shear layers, plane wake defect
solution) present it. This leaf is the eighth member of the
boundary-layer pack and owns the downstream free-shear wake region that
every attached-layer sibling stops short of: boundary-layer-theory
stops at the plate surface quantities and the transition, separation
and unsteady siblings never leave the attached layer. Far downstream of
the trailing edge the small velocity defect u1 = U - u collapses onto a
Gaussian similarity profile whose cross-stream integral conserves the
momentum deficit, and the wake-momentum-integral identity
D = rhoUintegral u1 dy is the closed-form basis of wake-survey drag
measurement. It does not do attached flat-plate boundary-layer
thickness or skin-friction estimation on the surface, transition or
separation traverses, creeping Stokes sphere flow, unsteady plate
Stokes layers, the wind-tunnel solid-blockage and wake-blockage
corrections, or turbulent, axisymmetric, compressible and near-wake
flows: incompressible constant-property laminar flow only, small defect
u1 << U (x/c at least of order ten), two-dimensional thin-plate
small-deficit wakes of a symmetric body at zero incidence.
Domain quick reference
The wake coordinate x is measured downstream from the trailing edge, y
is the cross-stream coordinate, u1 is the positive velocity defect
U - u. Module constants: NU_AIR = 1.46e-5 m2/s, RHO_AIR = 1.225 kg/m3,
U_INF = 5.0 m/s, PLATE_CHORD = 1.0 m, BLASIUS_THETA_COEF = 0.664,
BLASIUS_DRAG_COEF = 1.328, SIDES = 2.
- Trailing-edge state (attached Blasius layer, one side): theta_c =
0.664sqrt(nuc/U) = 0.664c/sqrt(Re_c) with Re_c = Uc/nu the chord
Reynolds number.
- Plate drag per unit span (both sides), the momentum source of the
wake: D = 2rhoU^2theta_c = 1.328rhoU^2sqrt(nuc/U), N/m; the
drag coefficient C_D = D/(0.5rhoU^2c) = 4*theta_c/c =
2.656/sqrt(Re_c), dimensionless.
- Linearized wake defect equation: Udu1/dx = nud2u1/dy2, the
small-defect (u1 << U) form of the boundary-layer equations in the
wake, with the momentum invariant D = rhoUintegral_{-inf}^{+inf}
u1 dy, the wake-momentum-integral drag identity (exact in the
far-wake limit, the closed-form basis of wake-survey drag).
- Gaussian similarity profile (the Goldstein far-wake solution):
u1(x, y) = u_c(x)exp(-B(x)y^2) with spread parameter
B(x) = U/(4nux), 1/m2, which satisfies the linearized equation
identically, hence u_c proportional to x^-1/2.
- Centerline defect from the drag: u_c(x) = (D/(rho*U))sqrt(B/pi),
m/s, collapsing for the two-sided Blasius plate to the closed form
u_c(x) = (0.664U/sqrt(pi))*sqrt(c/x) (coefficient 0.664/sqrt(pi) =
0.3746218835).
- Defect and wake velocity at (x, y): u1 = u_cexp(-By^2) and
u = U - u1, both m/s.
- Widths: half-defect width y_half = sqrt(ln(2)/B) (u1 = u_c/2 there)
and one-over-e width y_e = sqrt(1/B) (u1 = u_c*exp(-1) there), both
m, growing as x^1/2 since B is proportional to 1/x.
- Momentum integral of the Gaussian: integral u1 dy = u_csqrt(pi/B),
m2/s, independent of x and equal to D/(rhoU) = 2Utheta_c at every
station; the wake-survey drag is D = rhoUu_c*sqrt(pi/B), N/m.
- Full (nonlinear) momentum deficit, documented for honesty:
rhointegral u(U - u) dy = rho*(Uintegral u1 dy - integral u1^2 dy)
with integral u1^2 dy = u_c^2sqrt(pi/(2B)) closed form; it lies
below the linearized identity by a relative amount of order u_c/U and
converges to it downstream (ratios 0.94702046516 at x = 25c,
0.97351023258 at x = 100c, 0.98675511629 at x = 400c).
SI units throughout; Goldstein 1933, Schlichting Boundary-Layer Theory
and White Viscous Fluid Flow material cited through NACA TR-824,
summary-only.
Workflow
- Fix the trailing-edge state of the fully laminar plate: chord c,
freestream speed U, rho, nu, then the chord Reynolds number
(reynolds_number) and the trailing-edge momentum thickness
(momentum_thickness_blasius): theta_c = 0.664*c/sqrt(Re_c), the
state the far wake carries downstream.
- Assemble the plate drag, the momentum source of the wake:
plate_drag_per_span(U, rho, nu, c) with the default two-sided plate
(SIDES = 2, one side carrying rhoU^2theta_c), and reduce it with
plate_drag_coefficient, cross-checked against C_D = 2.656/sqrt(Re_c)
and C_D = 4*theta_c/c.
- Choose the downstream traverse station x measured from the trailing
edge (x/c of order ten or more for the linearized far-wake regime)
and evaluate the Gaussian spread parameter with
wake_spread_parameter(U, nu, x): B = U/(4nux).
- Traverse the centerline defect: centerline_defect_from_drag(D, rho,
U, B) is the normalization that conserves the drag exactly, and
centerline_defect_blasius(U, c, x) is its closed-form twin for the
two-sided Blasius plate, giving the x^-1/2 decay law explicitly.
- Traverse the Gaussian defect profile across y with
velocity_defect_gaussian(u_c, B, y) and recover the wake velocity
with wake_velocity(U, u_c, B, y); read the wake widths from
half_defect_width(B) and one_over_e_width(B).
- Check the decay and spreading laws across stations: the invariant
u_c*sqrt(x) is constant (x^-1/2 centerline decay) and the half-defect
width grows as x^1/2, doubling when x quadruples.
- Integrate the momentum deficit: defect_integral(u_c, B) =
u_csqrt(pi/B) is station-independent, and drag_from_wake(u_c, B,
rho, U) = rhoU*integral u1 dy reproduces the plate drag at every
station to float noise, the wake-survey drag identity.
- Run the nonlinear honesty check: full_momentum_deficit(rho, U, u_c,
B) lies a few percent below the linearized drag_from_wake and
converges to it as the wake spreads; report the residual when the
defect is not tiny.
- Report the drag diagnostic: the wake-survey drag per unit span and
the drag coefficient from the traverse, with the profile decay and
spreading numbers as the laminar-wake fingerprint.
- Confirm the deterministic checks: rerun the closed-form identities
and reject non-physical inputs (non-positive U, nu, rho, c, x, D,
B, u_centerline, sides below one) with the contract test
scripts/test_laminar_far_wake.py.
Worked example
Air at standard conditions nu = 1.46e-5 m2/s, rho = 1.225 kg/m3, a flat
plate of chord c = 1.0 m at U = 5.0 m/s, wetted on both sides with
fully laminar Blasius boundary layers to the trailing edge. All values
below are real outputs of the module.
- Trailing-edge state: Re_c = Uc/nu = 342465.7534; momentum thickness
at the trailing edge (one side) theta_c = 0.664sqrt(nuc/U) =
1.1346436974e-3 m (1.135 mm); total drag per unit span, both sides,
D = 1.328rhoU^2sqrt(nuc/U) = 2rhoU^2theta_c = 6.9496926464e-2
N/m; drag coefficient C_D = D/(0.5rhoU^2c) = 0.00453857479,
identical to 2.656/sqrt(Re_c) = 0.00453857479 and to 4theta_c/c =
0.00453857479 (three routes agree).
- Far-wake traverse at x = 100c = 100.0 m downstream of the trailing
edge (centerline defect 3.746 percent of U, solidly small-defect):
spread parameter B = U/(4nux) = 8.5616438356e2 1/m2; centerline
defect u_c = (D/(rhoU))sqrt(B/pi) = 0.18731094174 m/s, identical to
the closed form (0.664U/sqrt(pi))*sqrt(c/x) = 0.18731094174 m/s;
widths y_half = sqrt(ln(2)/B) = 2.8453398864e-2 m (2.845 cm) and
y_e = sqrt(1/B) = 3.4176014981e-2 m, with y_e/y_half =
1.2011224087 = sqrt(1/ln(2)).
- Profile values: u1(y_half) = 9.3655470869e-2 m/s (exactly u_c/2),
u1(y_e) = 6.8907844572e-2 m/s (u_cexp(-1)), and the recovered
wake-axis velocity u(0) = U - u_c = 4.8126890583 m/s; at
y = 6y_half = 0.170720393182 m the wake is indistinguishable from
the freestream, u/U = 0.999999999999455.
- Momentum integral: integral u1 dy = u_csqrt(pi/B) = 1.1346436974e-2
m2/s, equal to D/(rhoU) and to 2Utheta_c at every station; the
wake-survey drag D = rhoUintegral u1 dy = 6.9496926464e-2 N/m
equals the plate drag to float noise (ratio 1.0).
- Decay and spreading across stations: centerline defect
0.37462188348 m/s at x = 25c, 0.18731094174 m/s at x = 100c and
0.093655470869 m/s at x = 400c, so u_c(4x)/u_c(x) = 0.5 exactly and
the invariant u_csqrt(x) = 1.8731094174 m/ssqrt(m) is unchanged
(x^-1/2 decay); half-defect width 1.4226699432e-2 m at x = 25c,
2.8453398864e-2 m at x = 100c and 5.6906797727e-2 m at x = 400c,
so y_half(4x)/y_half(x) = 2 exactly (x^1/2 spreading).
- Nonlinear honesty check: the full deficit rhointegral u(U - u) dy
lies 5.297953 percent below D at x = 25c (ratio 0.94702046516),
2.648977 percent below at x = 100c (ratio 0.97351023258, residual
1.8409574184e-3 N/m) and 1.324488 percent below at x = 400*c (ratio
0.98675511629), converging to the linearized identity downstream.
Read-off: a 1 m fully laminar plate at 5 m/s in air drags 6.95e-2 N
per metre of span; 100 m downstream the wake axis runs 3.75 percent
slow inside a Gaussian defect 2.85 cm wide at half depth, the
integrated momentum deficit of that Gaussian recovers the plate drag
exactly, and quadrupling the downstream distance halves the centerline
defect while the wake doubles in width. A wake-survey traverse at
x/c = 100 integrated with the identity D = rhoUintegral u1 dy reports
the drag without any force balance.
Verification
- Confirm reynolds_number(5.0, 1.0, 1.46e-5) returns 342465.7534 and
momentum_thickness_blasius(5.0, 1.0, 1.46e-5) returns
1.1346436974e-3 m, equal to 0.664/sqrt(Re_c) to float noise.
- Confirm plate_drag_per_span(5.0, 1.225, 1.46e-5, 1.0) returns
6.9496926464e-2 N/m (between 6.5e-2 and 7.5e-2 N/m), the sides = 1
value equals rhoU^2theta_c, and the two-sided value is twice the
one-sided value.
- Confirm plate_drag_coefficient(5.0, 1.225, 1.46e-5, 1.0) returns
4.53857479e-3, equal to 2.656/sqrt(Re_c) and to 4*theta_c/c.
- Confirm wake_spread_parameter(5.0, 1.46e-5, 100.0) returns
8.5616438356e2 1/m2 and is 0.25 of the x = 400.0 value.
- Confirm the centerline defect at x = 100.0 m is 0.18731094174 m/s by
both routes (drag normalization and closed form, agreeing to float
noise), with u_c/U = 0.03746218835 and the invariant u_c*sqrt(x) =
1.8731094174 across x = 25, 100 and 400 m.
- Confirm the decay and spreading laws: u_c(4x)/u_c(x) = 0.5,
u_c(2x)/u_c(x) = 1/sqrt(2), y_half(4x)/y_half(x) = 2 and
B(4x)/B(x) = 0.25, all exact to float noise.
- Confirm the Gaussian shape at x = 100.0 m: y_half = 2.8453398864e-2 m,
y_e = 3.4176014981e-2 m, u1(y_half)/u_c = 0.5, u1(y_e)/u_c = 1/e,
u(0) = 4.8126890583 m/s and u/U = 0.999999999999455 at y = 6*y_half.
- Confirm the momentum identity: defect_integral = 1.1346436974e-2 m2/s
and drag_from_wake = 6.9496926464e-2 N/m at x = 25, 100 and 400 m,
equal to the plate drag to float noise at every station.
- Confirm the nonlinear ratios 0.94702046516, 0.97351023258 and
0.98675511629 (monotone toward one) and the linearized residual
1.8409574184e-3 N/m at x = 100.0 m.
- Confirm every non-positive U, nu, rho, c, x, D, B, every negative
u_centerline and every sides below one raises ValueError, and that
every function is deterministic on repeat calls.
- Run the contract test offline: python3
scripts/test_laminar_far_wake.py (32 tests, deterministic).
Related leaves
- aerodynamics/boundary-layer/boundary-layer-theory: the attached
flat-plate layer owner (Blasius thickness, skin friction, transition
on the surface); this leaf consumes the trailing-edge momentum state
as the source the wake carries and never estimates surface-layer
quantities.
- aerodynamics/boundary-layer/stokes-creeping-flow-drag: the Re << 1
attached-body limit with its no-wake fore-aft symmetric creeping
flow, the regime fence that stays away from the finite-Reynolds wake
profile of this leaf.
- aerodynamics/boundary-layer/boundary-layer-transition and
boundary-layer-separation: the attached-layer traverse leaves that
stop at transition onset and separation, never mapping the downstream
wake state this leaf owns.
- aerodynamics/wind-tunnel/windtunnel-wall-corrections: uses wake
blockage, a scalar tunnel-geometry correction to the dynamic
pressure, not the wake velocity-defect profile or the momentum
integration of this leaf.
- aerodynamics/wind-tunnel/windtunnel-data-reduction: the raw-run
pressure-rake reduction leaf; the wake-survey drag identity of this
leaf is the physics behind its rake traverse.
Pitfalls
- Applying the far-wake Gaussian too close to the trailing edge: the
similarity profile holds for x/c of order ten or more; immediately
behind the trailing edge the near-wake defect follows the Goldstein
error-function solution, not this small-defect Gaussian.
- Treating the linearized identity as exact when the defect is not
small: D = rhoUintegral u1 dy neglects the u1^2 term, which runs a
few percent of the drag at x/c ~ 25 and only converges downstream;
use the full_momentum_deficit diagnostic for honesty.
- Mixing the width conventions: y_half = sqrt(ln(2)/B) (defect halved)
differs from y_e = sqrt(1/B) (defect at 1/e) by the factor
sqrt(1/ln(2)) = 1.2011224087; report which width is meant.
- Forgetting the two-sided plate: the plate drag doubles with SIDES = 2
(each side carries rhoU^2theta_c), and the centerline defect scales
with the square root of the drag, so a one-sided mistake shifts every
downstream profile value.
- Measuring x from the wrong origin: the wake coordinate x runs
downstream from the trailing edge, not from the plate leading edge,
and the chord Reynolds number Re_c still uses the full chord.
- Confusing this leaf with the pack's attached-layer owners: it does
not estimate displacement thickness, momentum thickness or skin
friction on the plate surface, and the wake-blockage scalar of the
wind-tunnel leaves is not a velocity-defect profile.
- Extending the Gaussian beyond its regime: turbulent wakes, jets,
mixing layers, axisymmetric wakes, compressible wakes and the
near-wake error-function layer all lie outside this small-defect
laminar solution.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_laminar_far_wake.py
The test covers the worked-example contract (Reynolds number, momentum
thickness, plate drag with magnitude bound, the three-route drag
coefficient, spread parameter, centerline defect by both routes, widths,
profile values and wake velocities), the decay and spreading laws across
stations (x^-1/2 centerline decay, x^1/2 width growth), the momentum
identity at every station (defect integral and wake-survey drag against
the plate drag), the nonlinear momentum-deficit honesty check with the
linearized residual, deterministic repeat calls, and the input-rejection
traverse of non-physical U, nu, rho, c, x, D, B, u_centerline and sides
arguments.
Compliance
- Standards referenced, not reproduced: NACA TR-824 is the cited
reference for the boundary-layer pack; the laminar wake treatment
follows Goldstein 1933, Schlichting Boundary-Layer Theory (wakes and
free-shear-layers chapter) and White Viscous Fluid Flow (laminar free
shear layers), whose material is cited through the report. Summary-
only methodology per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: laminar-far-wake3description: Use when you must compute the two-dimensional laminar far-wake velocity-defect profile and drag downstream of a thin flat plate or slender body at zero incidence, the Goldstein 1933 similarity wake: evaluate the Gaussian cross-stream velocity-defect profile with the spread parameter U/(4*nu*x), the centerline-defect decay as x^-1/2 and the wake half-width growth as x^1/2 downstream of the trailing edge, integrate the momentum deficit across the wake with the wake-momentum-integral drag identity D = rho*U*integral u1 dy to recover the plate drag, and link the far-wake traverse to the laminar Blasius trailing-edge momentum state with the 0.664 constant. Produces the wake velocity-defect and recovered-velocity profiles, the decay and spreading laws and the wake-survey drag in SI units that anchor laminar wake diagnostics and drag checks. Trigger: laminar-far-wake, far-wake-velocity-defect, wake-momentum-integral, velocity-defect-profile, wake-survey-drag.4license: Apache-2.05---67# Laminar Far Wake (aerodynamics/boundary-layer/laminar-far-wake)89Use when you must compute the two-dimensional incompressible laminar far10wake downstream of a thin flat plate at zero incidence, the Goldstein11(1933) similarity wake that the attached laminar boundary layers shed12from the trailing edge, in the form Schlichting Boundary-Layer Theory13(wakes and free-shear-layers chapter, wake behind a flat plate) and14White Viscous Fluid Flow (laminar free shear layers, plane wake defect15solution) present it. This leaf is the eighth member of the16boundary-layer pack and owns the downstream free-shear wake region that17every attached-layer sibling stops short of: boundary-layer-theory18stops at the plate surface quantities and the transition, separation19and unsteady siblings never leave the attached layer. Far downstream of20the trailing edge the small velocity defect u1 = U - u collapses onto a21Gaussian similarity profile whose cross-stream integral conserves the22momentum deficit, and the wake-momentum-integral identity23D = rho*U*integral u1 dy is the closed-form basis of wake-survey drag24measurement. It does not do attached flat-plate boundary-layer25thickness or skin-friction estimation on the surface, transition or26separation traverses, creeping Stokes sphere flow, unsteady plate27Stokes layers, the wind-tunnel solid-blockage and wake-blockage28corrections, or turbulent, axisymmetric, compressible and near-wake29flows: incompressible constant-property laminar flow only, small defect30u1 << U (x/c at least of order ten), two-dimensional thin-plate31small-deficit wakes of a symmetric body at zero incidence.3233## Domain quick reference3435The wake coordinate x is measured downstream from the trailing edge, y36is the cross-stream coordinate, u1 is the positive velocity defect37U - u. Module constants: NU_AIR = 1.46e-5 m2/s, RHO_AIR = 1.225 kg/m3,38U_INF = 5.0 m/s, PLATE_CHORD = 1.0 m, BLASIUS_THETA_COEF = 0.664,39BLASIUS_DRAG_COEF = 1.328, SIDES = 2.4041- Trailing-edge state (attached Blasius layer, one side): theta_c =42 0.664*sqrt(nu*c/U) = 0.664*c/sqrt(Re_c) with Re_c = U*c/nu the chord43 Reynolds number.44- Plate drag per unit span (both sides), the momentum source of the45 wake: D = 2*rho*U^2*theta_c = 1.328*rho*U^2*sqrt(nu*c/U), N/m; the46 drag coefficient C_D = D/(0.5*rho*U^2*c) = 4*theta_c/c =47 2.656/sqrt(Re_c), dimensionless.48- Linearized wake defect equation: U*du1/dx = nu*d2u1/dy2, the49 small-defect (u1 << U) form of the boundary-layer equations in the50 wake, with the momentum invariant D = rho*U*integral_{-inf}^{+inf}51 u1 dy, the wake-momentum-integral drag identity (exact in the52 far-wake limit, the closed-form basis of wake-survey drag).53- Gaussian similarity profile (the Goldstein far-wake solution):54 u1(x, y) = u_c(x)*exp(-B(x)*y^2) with spread parameter55 B(x) = U/(4*nu*x), 1/m2, which satisfies the linearized equation56 identically, hence u_c proportional to x^-1/2.57- Centerline defect from the drag: u_c(x) = (D/(rho*U))*sqrt(B/pi),58 m/s, collapsing for the two-sided Blasius plate to the closed form59 u_c(x) = (0.664*U/sqrt(pi))*sqrt(c/x) (coefficient 0.664/sqrt(pi) =60 0.3746218835).61- Defect and wake velocity at (x, y): u1 = u_c*exp(-B*y^2) and62 u = U - u1, both m/s.63- Widths: half-defect width y_half = sqrt(ln(2)/B) (u1 = u_c/2 there)64 and one-over-e width y_e = sqrt(1/B) (u1 = u_c*exp(-1) there), both65 m, growing as x^1/2 since B is proportional to 1/x.66- Momentum integral of the Gaussian: integral u1 dy = u_c*sqrt(pi/B),67 m2/s, independent of x and equal to D/(rho*U) = 2*U*theta_c at every68 station; the wake-survey drag is D = rho*U*u_c*sqrt(pi/B), N/m.69- Full (nonlinear) momentum deficit, documented for honesty:70 rho*integral u*(U - u) dy = rho*(U*integral u1 dy - integral u1^2 dy)71 with integral u1^2 dy = u_c^2*sqrt(pi/(2*B)) closed form; it lies72 below the linearized identity by a relative amount of order u_c/U and73 converges to it downstream (ratios 0.94702046516 at x = 25*c,74 0.97351023258 at x = 100*c, 0.98675511629 at x = 400*c).7576SI units throughout; Goldstein 1933, Schlichting Boundary-Layer Theory77and White Viscous Fluid Flow material cited through NACA TR-824,78summary-only.7980## Workflow81821. Fix the trailing-edge state of the fully laminar plate: chord c,83 freestream speed U, rho, nu, then the chord Reynolds number84 (reynolds_number) and the trailing-edge momentum thickness85 (momentum_thickness_blasius): theta_c = 0.664*c/sqrt(Re_c), the86 state the far wake carries downstream.872. Assemble the plate drag, the momentum source of the wake:88 plate_drag_per_span(U, rho, nu, c) with the default two-sided plate89 (SIDES = 2, one side carrying rho*U^2*theta_c), and reduce it with90 plate_drag_coefficient, cross-checked against C_D = 2.656/sqrt(Re_c)91 and C_D = 4*theta_c/c.923. Choose the downstream traverse station x measured from the trailing93 edge (x/c of order ten or more for the linearized far-wake regime)94 and evaluate the Gaussian spread parameter with95 wake_spread_parameter(U, nu, x): B = U/(4*nu*x).964. Traverse the centerline defect: centerline_defect_from_drag(D, rho,97 U, B) is the normalization that conserves the drag exactly, and98 centerline_defect_blasius(U, c, x) is its closed-form twin for the99 two-sided Blasius plate, giving the x^-1/2 decay law explicitly.1005. Traverse the Gaussian defect profile across y with101 velocity_defect_gaussian(u_c, B, y) and recover the wake velocity102 with wake_velocity(U, u_c, B, y); read the wake widths from103 half_defect_width(B) and one_over_e_width(B).1046. Check the decay and spreading laws across stations: the invariant105 u_c*sqrt(x) is constant (x^-1/2 centerline decay) and the half-defect106 width grows as x^1/2, doubling when x quadruples.1077. Integrate the momentum deficit: defect_integral(u_c, B) =108 u_c*sqrt(pi/B) is station-independent, and drag_from_wake(u_c, B,109 rho, U) = rho*U*integral u1 dy reproduces the plate drag at every110 station to float noise, the wake-survey drag identity.1118. Run the nonlinear honesty check: full_momentum_deficit(rho, U, u_c,112 B) lies a few percent below the linearized drag_from_wake and113 converges to it as the wake spreads; report the residual when the114 defect is not tiny.1159. Report the drag diagnostic: the wake-survey drag per unit span and116 the drag coefficient from the traverse, with the profile decay and117 spreading numbers as the laminar-wake fingerprint.11810. Confirm the deterministic checks: rerun the closed-form identities119 and reject non-physical inputs (non-positive U, nu, rho, c, x, D,120 B, u_centerline, sides below one) with the contract test121 scripts/test_laminar_far_wake.py.122123## Worked example124125Air at standard conditions nu = 1.46e-5 m2/s, rho = 1.225 kg/m3, a flat126plate of chord c = 1.0 m at U = 5.0 m/s, wetted on both sides with127fully laminar Blasius boundary layers to the trailing edge. All values128below are real outputs of the module.129130- Trailing-edge state: Re_c = U*c/nu = 342465.7534; momentum thickness131 at the trailing edge (one side) theta_c = 0.664*sqrt(nu*c/U) =132 1.1346436974e-3 m (1.135 mm); total drag per unit span, both sides,133 D = 1.328*rho*U^2*sqrt(nu*c/U) = 2*rho*U^2*theta_c = 6.9496926464e-2134 N/m; drag coefficient C_D = D/(0.5*rho*U^2*c) = 0.00453857479,135 identical to 2.656/sqrt(Re_c) = 0.00453857479 and to 4*theta_c/c =136 0.00453857479 (three routes agree).137- Far-wake traverse at x = 100*c = 100.0 m downstream of the trailing138 edge (centerline defect 3.746 percent of U, solidly small-defect):139 spread parameter B = U/(4*nu*x) = 8.5616438356e2 1/m2; centerline140 defect u_c = (D/(rho*U))*sqrt(B/pi) = 0.18731094174 m/s, identical to141 the closed form (0.664*U/sqrt(pi))*sqrt(c/x) = 0.18731094174 m/s;142 widths y_half = sqrt(ln(2)/B) = 2.8453398864e-2 m (2.845 cm) and143 y_e = sqrt(1/B) = 3.4176014981e-2 m, with y_e/y_half =144 1.2011224087 = sqrt(1/ln(2)).145- Profile values: u1(y_half) = 9.3655470869e-2 m/s (exactly u_c/2),146 u1(y_e) = 6.8907844572e-2 m/s (u_c*exp(-1)), and the recovered147 wake-axis velocity u(0) = U - u_c = 4.8126890583 m/s; at148 y = 6*y_half = 0.170720393182 m the wake is indistinguishable from149 the freestream, u/U = 0.999999999999455.150- Momentum integral: integral u1 dy = u_c*sqrt(pi/B) = 1.1346436974e-2151 m2/s, equal to D/(rho*U) and to 2*U*theta_c at every station; the152 wake-survey drag D = rho*U*integral u1 dy = 6.9496926464e-2 N/m153 equals the plate drag to float noise (ratio 1.0).154- Decay and spreading across stations: centerline defect155 0.37462188348 m/s at x = 25*c, 0.18731094174 m/s at x = 100*c and156 0.093655470869 m/s at x = 400*c, so u_c(4x)/u_c(x) = 0.5 exactly and157 the invariant u_c*sqrt(x) = 1.8731094174 m/s*sqrt(m) is unchanged158 (x^-1/2 decay); half-defect width 1.4226699432e-2 m at x = 25*c,159 2.8453398864e-2 m at x = 100*c and 5.6906797727e-2 m at x = 400*c,160 so y_half(4x)/y_half(x) = 2 exactly (x^1/2 spreading).161- Nonlinear honesty check: the full deficit rho*integral u*(U - u) dy162 lies 5.297953 percent below D at x = 25*c (ratio 0.94702046516),163 2.648977 percent below at x = 100*c (ratio 0.97351023258, residual164 1.8409574184e-3 N/m) and 1.324488 percent below at x = 400*c (ratio165 0.98675511629), converging to the linearized identity downstream.166167Read-off: a 1 m fully laminar plate at 5 m/s in air drags 6.95e-2 N168per metre of span; 100 m downstream the wake axis runs 3.75 percent169slow inside a Gaussian defect 2.85 cm wide at half depth, the170integrated momentum deficit of that Gaussian recovers the plate drag171exactly, and quadrupling the downstream distance halves the centerline172defect while the wake doubles in width. A wake-survey traverse at173x/c = 100 integrated with the identity D = rho*U*integral u1 dy reports174the drag without any force balance.175176## Verification177178- Confirm reynolds_number(5.0, 1.0, 1.46e-5) returns 342465.7534 and179 momentum_thickness_blasius(5.0, 1.0, 1.46e-5) returns180 1.1346436974e-3 m, equal to 0.664/sqrt(Re_c) to float noise.181- Confirm plate_drag_per_span(5.0, 1.225, 1.46e-5, 1.0) returns182 6.9496926464e-2 N/m (between 6.5e-2 and 7.5e-2 N/m), the sides = 1183 value equals rho*U^2*theta_c, and the two-sided value is twice the184 one-sided value.185- Confirm plate_drag_coefficient(5.0, 1.225, 1.46e-5, 1.0) returns186 4.53857479e-3, equal to 2.656/sqrt(Re_c) and to 4*theta_c/c.187- Confirm wake_spread_parameter(5.0, 1.46e-5, 100.0) returns188 8.5616438356e2 1/m2 and is 0.25 of the x = 400.0 value.189- Confirm the centerline defect at x = 100.0 m is 0.18731094174 m/s by190 both routes (drag normalization and closed form, agreeing to float191 noise), with u_c/U = 0.03746218835 and the invariant u_c*sqrt(x) =192 1.8731094174 across x = 25, 100 and 400 m.193- Confirm the decay and spreading laws: u_c(4x)/u_c(x) = 0.5,194 u_c(2x)/u_c(x) = 1/sqrt(2), y_half(4x)/y_half(x) = 2 and195 B(4x)/B(x) = 0.25, all exact to float noise.196- Confirm the Gaussian shape at x = 100.0 m: y_half = 2.8453398864e-2 m,197 y_e = 3.4176014981e-2 m, u1(y_half)/u_c = 0.5, u1(y_e)/u_c = 1/e,198 u(0) = 4.8126890583 m/s and u/U = 0.999999999999455 at y = 6*y_half.199- Confirm the momentum identity: defect_integral = 1.1346436974e-2 m2/s200 and drag_from_wake = 6.9496926464e-2 N/m at x = 25, 100 and 400 m,201 equal to the plate drag to float noise at every station.202- Confirm the nonlinear ratios 0.94702046516, 0.97351023258 and203 0.98675511629 (monotone toward one) and the linearized residual204 1.8409574184e-3 N/m at x = 100.0 m.205- Confirm every non-positive U, nu, rho, c, x, D, B, every negative206 u_centerline and every sides below one raises ValueError, and that207 every function is deterministic on repeat calls.208- Run the contract test offline: python3209 scripts/test_laminar_far_wake.py (32 tests, deterministic).210211## Related leaves212213- aerodynamics/boundary-layer/boundary-layer-theory: the attached214 flat-plate layer owner (Blasius thickness, skin friction, transition215 on the surface); this leaf consumes the trailing-edge momentum state216 as the source the wake carries and never estimates surface-layer217 quantities.218- aerodynamics/boundary-layer/stokes-creeping-flow-drag: the Re << 1219 attached-body limit with its no-wake fore-aft symmetric creeping220 flow, the regime fence that stays away from the finite-Reynolds wake221 profile of this leaf.222- aerodynamics/boundary-layer/boundary-layer-transition and223 boundary-layer-separation: the attached-layer traverse leaves that224 stop at transition onset and separation, never mapping the downstream225 wake state this leaf owns.226- aerodynamics/wind-tunnel/windtunnel-wall-corrections: uses wake227 blockage, a scalar tunnel-geometry correction to the dynamic228 pressure, not the wake velocity-defect profile or the momentum229 integration of this leaf.230- aerodynamics/wind-tunnel/windtunnel-data-reduction: the raw-run231 pressure-rake reduction leaf; the wake-survey drag identity of this232 leaf is the physics behind its rake traverse.233234## Pitfalls235236- Applying the far-wake Gaussian too close to the trailing edge: the237 similarity profile holds for x/c of order ten or more; immediately238 behind the trailing edge the near-wake defect follows the Goldstein239 error-function solution, not this small-defect Gaussian.240- Treating the linearized identity as exact when the defect is not241 small: D = rho*U*integral u1 dy neglects the u1^2 term, which runs a242 few percent of the drag at x/c ~ 25 and only converges downstream;243 use the full_momentum_deficit diagnostic for honesty.244- Mixing the width conventions: y_half = sqrt(ln(2)/B) (defect halved)245 differs from y_e = sqrt(1/B) (defect at 1/e) by the factor246 sqrt(1/ln(2)) = 1.2011224087; report which width is meant.247- Forgetting the two-sided plate: the plate drag doubles with SIDES = 2248 (each side carries rho*U^2*theta_c), and the centerline defect scales249 with the square root of the drag, so a one-sided mistake shifts every250 downstream profile value.251- Measuring x from the wrong origin: the wake coordinate x runs252 downstream from the trailing edge, not from the plate leading edge,253 and the chord Reynolds number Re_c still uses the full chord.254- Confusing this leaf with the pack's attached-layer owners: it does255 not estimate displacement thickness, momentum thickness or skin256 friction on the plate surface, and the wake-blockage scalar of the257 wind-tunnel leaves is not a velocity-defect profile.258- Extending the Gaussian beyond its regime: turbulent wakes, jets,259 mixing layers, axisymmetric wakes, compressible wakes and the260 near-wake error-function layer all lie outside this small-defect261 laminar solution.262263## Behavior contract (gate 3)264265Run the deterministic contract test (stdlib unittest, offline):266267 python3 scripts/test_laminar_far_wake.py268269The test covers the worked-example contract (Reynolds number, momentum270thickness, plate drag with magnitude bound, the three-route drag271coefficient, spread parameter, centerline defect by both routes, widths,272profile values and wake velocities), the decay and spreading laws across273stations (x^-1/2 centerline decay, x^1/2 width growth), the momentum274identity at every station (defect integral and wake-survey drag against275the plate drag), the nonlinear momentum-deficit honesty check with the276linearized residual, deterministic repeat calls, and the input-rejection277traverse of non-physical U, nu, rho, c, x, D, B, u_centerline and sides278arguments.279280## Compliance281282- Standards referenced, not reproduced: NACA TR-824 is the cited283 reference for the boundary-layer pack; the laminar wake treatment284 follows Goldstein 1933, Schlichting Boundary-Layer Theory (wakes and285 free-shear-layers chapter) and White Viscous Fluid Flow (laminar free286 shear layers), whose material is cited through the report. Summary-287 only methodology per standards-map.yaml.288- compliance: STANDARDS-REF, gated: false.