QUAD4_PLANE — 4-node bilinear plane quad ======================================== The 2D bilinear quadrilateral, used for plane-stress and plane-strain analysis. Four corner nodes × 2 in-plane translations = 8 DOFs per element. * **Spec:** ``ELEMENTS.QUAD4_PLANE`` Shape functions --------------- Bilinear Lagrange on the reference square :math:`\hat\Omega = [-1, +1]^{2}` with corner-node sign vector :math:`(\xi_i, \eta_i) \in \{-1, +1\}^{2}`: .. math:: N_i(\xi, \eta) = \tfrac{1}{4}(1 + \xi_i\, \xi)(1 + \eta_i\, \eta). These satisfy Kronecker-delta interpolation at the four corners and partition-of-unity on :math:`\hat\Omega`. See :ref:`sphx_glr_gallery_elements_plane182_example_quad4_shape_functions.py` for contour plots and a verified basis-matrix identity at every corner. Integration ----------- * **2 × 2 Gauss-Legendre** for both stiffness and mass. Exact for the bilinear strain-displacement product on a regular quad — see :doc:`../theory/quadrature`. Constitutive ------------ Plane-stress vs plane-strain selected by ``ELEMENTS.QUAD4_PLANE(mode=...)``: * ``"stress"`` (default) — out-of-plane normal stress :math:`\sigma_{zz} = 0`. 3 × 3 elastic matrix: .. math:: \mathbf{C}^{(\sigma)} = \frac{E}{1 - \nu^{2}} \begin{bmatrix} 1 & \nu & 0 \\ \nu & 1 & 0 \\ 0 & 0 & (1 - \nu)/2 \end{bmatrix}. * ``"strain"`` — out-of-plane strain :math:`\varepsilon_{zz} = 0`. 3 × 3 elastic matrix: .. math:: \mathbf{C}^{(\varepsilon)} = \frac{E}{(1 + \nu)(1 - 2\nu)} \begin{bmatrix} 1 - \nu & \nu & 0 \\ \nu & 1 - \nu & 0 \\ 0 & 0 & (1 - 2\nu)/2 \end{bmatrix}. Real constants -------------- * ``REAL[0]`` — :math:`t`, out-of-plane thickness (used to scale the plane-stress integral; ignored under plane strain). Stress recovery --------------- The strain-displacement matrix evaluated at each Gauss / node point gives 3-component Voigt strain :math:`(\varepsilon_{xx}, \varepsilon_{yy}, \gamma_{xy})`; :func:`compute_nodal_stress ` applies the 3 × 3 :math:`\mathbf{C}` matrix above to recover in-plane stress. Issue #262 wired the plane-element strain extraction into the canonical recovery path (``eel_batch`` returns 3-component strain, padded to 6-Voigt for the global stress-averaging machinery). Verification cross-references ----------------------------- * :ref:`sphx_glr_gallery_elements_plane182_example_plane182.py` — single-quad uniaxial-tension test. * :ref:`sphx_glr_gallery_verification_example_verify_nafems_le1.py` — NAFEMS LE1 elliptic membrane (stress-concentration benchmark, σ_yy(D) = 92.7 MPa). Implementation: :mod:`femorph_solver.elements.quad4_plane`. References ---------- * Hughes, T. J. R. (2000) *The Finite Element Method — Linear Static and Dynamic Finite Element Analysis*, Dover, §3.5 + §3.6 (bilinear quad). * Zienkiewicz, O. C. and Taylor, R. L. (2013) *The Finite Element Method: Its Basis and Fundamentals*, 7th ed., §6.3.2 + §6.4. * Cook, R. D., Malkus, D. S., Plesha, M. E., Witt, R. J. (2002) *Concepts and Applications of Finite Element Analysis*, 4th ed., Wiley, §3.5 (plane stress), §3.6 (plane strain).