Viscous face geometry contracts
Shares inverse-distance face weights with Green-Gauss (UGradPolicy).
Viscous reconstruction (VisGradGeom) no longer re-implements the weight
formula; it calls the same pure function.
Pipeline (geometry side)
cell/face centers
|
+--> InverseDistanceFaceWeights -> fw1, fw2 (blend cell grads)
+--> FaceSkewAngleDegrees -> angle1/2 (skew validity gates)
+--> UnitizeDisplacement -> unit L->R and 1/|LR|
Skew angle
\[\theta^{\circ} = \frac{180}{\pi}
\arcsin\Big(\mathrm{clamp}\big(\tfrac{p}{|\mathbf{d}|}, -1, 1\big)\Big)\]
where \(p\) is the signed projection length used by the legacy vis path
(d1/d2 along the face normal).
Unit cell-to-cell direction
\[\mathbf{u}_{LR} = \frac{\mathbf{x}_{cR}-\mathbf{x}_{cL}}{|\mathbf{x}_{cR}-\mathbf{x}_{cL}|},
\quad
o_{ds} = \frac{1}{|\mathbf{x}_{cR}-\mathbf{x}_{cL}|}\]
Pure APIs live in UGradPolicy.h (@doc-algorithm vis-face-geometry and
green-gauss-gradient). Tests: grad_policy_test.