Use when you must estimate the turbulent skin-friction on a rough flat plate: it computes the smooth-wall turbulent baseline Cf from the local Reynolds number, the friction velocity and the sand-roughness reynolds number k+; classifies the k-plus-regime as smooth, transitional or fully rough; evaluates the Schlichting fully-rough-cf correlation for the fetch; and selects the operative coefficient without iteration, the direct fully-rough value or a log-linear blend. Produces the regime class,...
Scanned 9/27/2026
Install to Claude Code
npx -y skills add ashfordeOU/aero-agent-skills --skill rough-wall-skin-friction --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Rough Wall Skin Friction?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/ashfordeou-rough-wall-skin-friction)More formats (shields.io, HTML) on the badges page.
---
name: rough-wall-skin-friction
description: "Use when you must estimate the turbulent skin-friction on a rough flat plate: it computes the smooth-wall turbulent baseline Cf from the local Reynolds number, the friction velocity and the sand-roughness reynolds number k+; classifies the k-plus-regime as smooth, transitional or fully rough; evaluates the Schlichting fully-rough-cf correlation for the fetch; and selects the operative coefficient without iteration, the direct fully-rough value or a log-linear blend. Produces the regime class, k+ value, smooth baseline, rough or blended coefficient, operative coefficient with treatment note, and the trip-criterion verdict for roughness and trip-strip sizing on aerodynamic surfaces. Trigger: rough-wall-skin-friction, sand-roughness-height, equivalent-sand-roughness, roughness-reynolds-number, k-plus-regime, fully-rough-cf, trip-criterion, trip-strip-sizing."
license: Apache-2.0
compliance: STANDARDS-REF
standards:
- id: naca-tr-824
reference-only: true
gated: false
domain: aerodynamics
pack: boundary-layer
compatibility: "agentskills.io SKILL.md; any SKILL.md host (Claude Code, Hermes, OpenClaw)"
metadata:
domain: aerodynamics
subdomain: boundary-layer
tags: [rough-wall-skin-friction, sand-roughness, fully-rough-cf, k-plus-regime, trip-criterion]
version: 0.1.0
author: AeroSkills
---
# Rough Wall Skin Friction (aerodynamics/boundary-layer/rough-wall-skin-friction)
Use when the task is estimating the turbulent skin-friction coefficient
of a rough flat plate in incompressible flow from the equivalent
sand-roughness height: smooth-wall turbulent baseline, friction velocity,
roughness Reynolds number k+, surface regime classification, the
fully-rough-cf correlation and a non-iterative coefficient selection with
a documented log-linear blend, plus the trip-criterion test for a
roughness element or trip strip. This leaf implements the classical
roughness band model in pure Python, stdlib only, with the module
constants from the leaf spec (SMOOTH_K_PLUS = 5.0, FULLY_ROUGH_K_PLUS =
70.0, ROUGH_MIN_X_OVER_KS = 100.0, TRIP_RE_K = 600.0). It pairs with
aerodynamics/boundary-layer/boundary-layer-theory, whose smooth-plate
correlations supply the smooth-wall baseline anchor, and with
aerodynamics/drag-polars/parasite-drag, whose buildup can consume the
rough coefficient as the component Cf.
## Domain quick reference
- Smooth-wall turbulent baseline (1/7 power law):
cf_smooth = 0.0592 / re_x**0.2, with re_x = rho * u_inf * x / mu the
local Reynolds number at the fetch station x. The rough surface can
only raise friction above this baseline.
- Friction velocity: u_tau = u_inf * sqrt(cf / 2), the shear velocity
that scales the roughness.
- Roughness Reynolds number: k+ = rho * u_tau * k_s / mu, formed on the
equivalent sand-roughness height k_s.
- Regime bands on k+ (classic thresholds): smooth below 5.0,
transitional from 5.0 through 70.0, fully rough above 70.0. A
hydraulically smooth surface keeps the smooth-wall coefficient; only a
transitional or fully-rough surface needs a roughness correction.
- Fully-rough correlation (Schlichting, long-fetch form):
cf_rough = (2.87 + 1.58 * log10(x / k_s))**(-2.5). Calibrated for long
fetches, so x / k_s must reach the 100.0 validity floor; the value
falls as the fetch grows.
- Transitional blend: log-linear in ln(k+) between cf_smooth at k+ 5.0
and cf_rough at k+ 70.0, frac = (ln k+ - ln 5.0) / (ln 70.0 - ln 5.0)
and cf = exp(ln cf_smooth + frac * (ln cf_rough - ln cf_smooth)),
continuous and monotone in k+. The blend is a documented engineering
approximation across the transitional band.
- Trip test: re_k = u * k / nu for an element of height k; trip is
expected when re_k >= 600.0, the classical critical roughness
Reynolds value (paraphrase of standard trip-sizing guidance).
- Units are SI throughout: kg/m3, m/s, Pa s, m.
- NACA-TR-824 frames the classical boundary-layer context; the relations
above are standard engineering methodology, summary-only.
## Workflow
1. Fix the flow state and the fetch station: density rho, speed u_inf,
dynamic viscosity mu (nu = mu / rho), the station x from the leading
edge and the sand-roughness height k_s. Form re_x = rho * u_inf * x /
mu.
2. Compute the smooth-wall turbulent baseline with
smooth_turbulent_cf(re_x), the 1/7 power-law local friction that the
roughness correction departs from.
3. Convert the baseline into a friction velocity with
friction_velocity(u_inf, cf_smooth) = u_inf * sqrt(cf / 2).
4. Form the roughness Reynolds number with
sand_roughness_reynolds(rho, u_tau, k_s, mu) = rho * u_tau * k_s / mu.
5. Classify the surface regime with classify_regime(k_s_plus): smooth,
transitional or fully-rough on the 5.0 and 70.0 thresholds.
6. Evaluate the fully-rough correlation for the fetch with
rough_wall_cf(x, k_s), valid only when x / k_s >= 100.0.
7. Select the operative coefficient without iteration:
cf_with_roughness(re_x, x, k_s, rho, u_inf, mu) chains steps 2 through
6 and returns the dict {regime, k_s_plus, cf_smooth,
cf_rough_or_iterated, cf_used, note}. The smooth regime keeps
cf_smooth (roughness hydraulically inactive), the fully-rough regime
uses cf_rough directly, and the transitional regime takes the
log-linear blend; cf_rough_or_iterated holds whatever the roughness
treatment produces and cf_used equals it by construction. The note is
the fixed treatment string for the regime.
8. Run the trip test on the roughness element with trip_criterion(u_inf,
k, nu), comparing re_k = u_inf * k / nu against the 600.0 critical
value (inclusive). This gates roughness and trip-strip sizing on
aerodynamic surfaces.
9. Confirm the deterministic checks with the contract test
scripts/test_rough_wall_skin_friction.py.
## Worked example
Standard air rho = 1.225 kg/m3, u_inf = 60 m/s, mu = 1.81e-5 Pa s
(nu = 1.47755e-5 m2/s), station x = 2.0 m. re_x = rho * u_inf * x / mu =
8.12155e6, baseline cf_smooth = 0.0592 * re_x**-0.2 = 2.45694e-3 and the
friction velocity u_tau = 2.10297 m/s.
- k_s = 0.3 mm: x / k_s = 6666.67, k+ = rho * u_tau * k_s / mu = 42.6984,
so the k-plus-regime is transitional. The fully-rough-cf correlation
value is 4.21783e-3 and the log-linear blend gives cf_used =
3.81178e-3, between the smooth baseline and the fully rough value.
trip_criterion: re_k = 1218.23, above 600, trip_expected True.
- k_s = 3 mm: x / k_s = 666.67, k+ = 426.984, fully-rough, and cf_used =
cf_rough = 6.87032e-3, about 2.8 times the smooth baseline, the
expected penalty for a heavily sanded surface at this short fetch.
trip_criterion: re_k = 12182.3, trip_expected True. Fetch sensitivity
of the same 3 mm roughness: at x = 6 m (x / k_s = 2000) the
fully-rough-cf value drops to 5.37918e-3 and at x = 20 m (x / k_s =
6666.67) to 4.21783e-3, the correlation falling as the fetch grows.
- Smooth reference: k_s = 1e-5 m gives k+ = 1.42328 (smooth) and cf_used
= cf_smooth = 2.45694e-3; a small element k = 3e-5 m gives re_k =
121.823, trip_expected False.
- Regime boundary checks: k+ = 4.999 smooth, k+ = 5.0 transitional, k+ =
70.0 transitional, k+ = 70.001 fully-rough.
## Verification
- Confirm smooth_turbulent_cf(8.12155e6) = 2.45694e-3 within 1e-8 and
that it rejects re_x <= 0.
- Confirm classify_regime boundaries: 4.999 smooth, 5.0 transitional,
70.0 transitional, 70.001 fully-rough, and ValueError below zero.
- Confirm friction_velocity(60.0, 2.45694e-3) = 2.10297 within 1e-5 and
the sqrt closed form.
- Confirm sand_roughness_reynolds returns k+ 42.6984 (0.3 mm) and
426.984 (3 mm) within 1e-3, and the linearity identity: 10x k_s gives
10x k+.
- Confirm rough_wall_cf(2.0, 3e-3) = 6.87032e-3, (2.0, 3e-4) =
4.21783e-3, (6.0, 3e-3) = 5.37918e-3 and (20.0, 3e-3) = 4.21783e-3
within 1e-7, monotone in x / k_s, with ValueError below the x / k_s =
100.0 floor and on zero inputs.
- Confirm the cf_with_roughness report dicts for the transitional,
fully-rough and smooth cases above, with exactly the six documented
keys and fixed per-regime note strings.
- Confirm the blend endpoints: k+ 5.0 returns cf_smooth and k+ 70.0
returns cf_rough exactly (within 1e-15), monotone between.
- Confirm the trip verdicts: re_k 1218.23 True, 121.823 False and the
inclusive boundary at re_k = 600.0 True.
- Confirm every non-physical input raises ValueError: non-positive re_x,
k_s_plus, u_inf, cf, rho, u_tau, mu, x, u, k, nu and re_k_crit.
- Run the contract test offline: python3
scripts/test_rough_wall_skin_friction.py (30 tests, deterministic).
## Related leaves
- aerodynamics/boundary-layer/boundary-layer-theory: the smooth flat
plate thickness and friction correlations that supply the smooth-wall
baseline anchor of step 2; it takes no roughness-height input.
- aerodynamics/boundary-layer/boundary-layer-transition: natural
transition prediction on a clean surface, the complementary question
to the trip test when the surface is smooth.
- aerodynamics/boundary-layer/boundary-layer-separation: Thwaites and
Stratford separation criteria for the same boundary-layer family, no
friction coefficient.
- aerodynamics/high-speed/flat-plate-skin-friction-heating: the
high-speed smooth-wall friction and heating counterpart; use it when
the flow is compressible.
- aerodynamics/drag-polars/parasite-drag: the smooth-surface drag
buildup that can consume the rough coefficient as the component Cf in
a full-aircraft buildup.
## Pitfalls
- Calling a surface smooth from the sand-roughness height alone: the
regime depends on k+, not on k_s; at the worked example the 0.3 mm
grain is transitional (k+ 42.7) while the same grain at low speed or
short fetch can be hydraulically smooth.
- Applying the fully-rough-cf correlation at a short fetch: below x / k_s
= 100.0 the correlation saturates to unphysical values and the module
rejects the input.
- Reading cf_used as the converged rough value when the baseline is
smooth: the single-pass sequence never iterates, so in the smooth
regime cf_rough_or_iterated is simply the smooth-wall baseline with
the roughness hydraulically inactive.
- Treating the trip test as an onset location: the trip criterion is a
threshold verdict on re_k, not a transition-onset distance; scatter in
the actual onset is out of scope for this deterministic core.
- Mixing the regime thresholds: the transitional band is inclusive at
both ends, k+ 5.0 and 70.0, and the blend is anchored exactly there.
- Sizing a trip strip with the roughness Reynolds of the surface grain
instead of the element: the trip test uses the element height k in
u * k / nu against the 600 critical value.
## Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_rough_wall_skin_friction.py
The test covers the module constants, the step-2 smooth-wall baseline
anchor and its monotone Reynolds scaling, the step-3 friction velocity
anchor and closed form, the step-4 sand-roughness reynolds anchors and
the 10x height linearity identity, the step-5 k-plus-regime boundary
classifications, the step-6 fully-rough-cf anchors across three fetches
and the fetch-ratio floor, the step-7 transitional, fully-rough and
smooth report dicts with the exact six keys, determinism and fixed note
strings, the blend endpoint identities at k+ 5.0 and 70.0 with monotone
mid-band behavior, the step-8 trip-criterion anchors with the inclusive
600 boundary and the default critical constant, and ValueError rejection
of every non-physical input class. 30 tests, deterministic, exits 0.
## Compliance
- Standards referenced, not reproduced: NACA-TR-824 provides the
classical boundary-layer context for the skin-friction and roughness
correlations; the relations above are standard engineering
methodology, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!