complex op• Data kinds: कोई नहीं → cimage (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.potential_flow_joukowski(alpha_deg=5.0, speed=1.0, chord_b=1.0, centre_offset=(-0.09+0.09j), centre=0j, half_width=3.0, shape=(256, 256)) (implementation को सीधे call करना हो तो import mathops; mathops.potential_flow_joukowski(alpha_deg=5.0, speed=1.0, chord_b=1.0, centre_offset=(-0.09+0.09j), centre=0j, half_width=3.0, shape=(256, 256)), registry से लेना हो तो opsmath.get("potential_flow_joukowski"))
Joukowski aerofoil के पास से inviscid flow, complex velocity field के रूप में।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
Returns the complex velocity w(z) = dW/dz = u - i*v sampled over a window of the physical plane. Inside the solid body the field is set to exactly 0 (there is no flow there), so field == 0 is the body mask and nothing is silently nan.
The construction is the classical one: flow past a circle of radius a = |chord_b - centre_offset| centred at centre_offset, plus the circulation the Kutta condition demands, pushed through the Joukowski map z = zeta + chord_b**2 / zeta. The window is inverted back to the circle plane by choosing, of the two preimages, the one outside the circle.
★What makes this checkable rather than merely plotted:
• The field is holomorphic outside the body, so this family's own cplx_cr_residual must read ~0 on it — an existing operator is the oracle, and it is not the formula used to build the field.
• The Kutta condition is the whole point: dW/dzeta vanishes at the trailing edge exactly where dz/dzeta does, so the velocity there stays finite. Perturb the circulation by any amount and the trailing-edge velocity diverges — the gate has a control group.
• Re(closed integral of w dz) around the body is the circulation, and it is path independent (Cauchy) — a big rectangle and a small one must agree.
• Far from the body w -> speed * exp(-i*alpha), decaying like 1/|z|.
• The zeroed region is the aerofoil, whose area the shoelace formula on cplx_joukowski of the circle gives independently.
alpha_deg : float
Angle of attack in degrees.
speed : float > 0
Free-stream speed.
chord_b : float > 0
Half the flat-plate chord; the map is zeta + chord_b**2/zeta.
centre_offset : complex
Circle centre. Negative real part thickens, positive imaginary part
cambers. The default is a thin cambered section.
centre, half_width, shape :
The window in the physical plane, as in cplx_plane_grid.
Raises ValueError: speed <= 0; non-finite angle; a circle that does not enclose -chord_b (the image would fold over itself) or whose centre is at or beyond +chord_b; degenerate window.
HALCON: no operator.
mathops के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• complex input से ValueError — float64 में ज़बरदस्ती बदलने पर imaginary part चुपचाप छूट जाता है (numpy केवल ComplexWarning देता है और "सही दिखने वाला पर गलत" real number लौटाता है)। .real/.imag/abs() स्पष्ट रूप से लिखें, या complex data संभालने वाले complexops का उपयोग करें।
• masked array (masked elements वाला) से ValueError — mask हटाकर नीचे के raw values इस्तेमाल करने वाला implicit conversion अस्वीकार है। भरना है या हटाना है, यह स्पष्ट रूप से बताएँ।
• हर input पर NaN/Inf से ValueError (गिनती बताकर अस्वीकार — क्योंकि यह पूरे परिणाम में फैल जाता है)।
• Shape सख़्त है: 1-D और 2-D को implicit रूप से promote या broadcast नहीं किया जाता (vector slot में matrix या matrix slot में vector देने पर ValueError; reshape स्पष्ट रूप से करें)।
• Size की सीमा: matrix लेने वाले ops और stat_histogram के bins, mathops.MAX_ELEMENTS (2^26 ≈ 6.7 करोड़ elements) से अधिक होने पर ValueError देते हैं।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• poc_complex_plane_fields — py -3.11 examples/poc_complex_plane_fields.py
cimage को input के रूप में लेते हैं)cplx_cr_residual · cplx_domain_colour · mandelbrot_interior
complex)cplx_contour_circle · cplx_poly_eval · cplx_contour_integral · cplx_winding_number · cplx_cauchy_value · cplx_argument_principle · cplx_laurent_coeffs · cplx_joukowski
*Provenance: mathops.py — MATH operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.