# Carotid wall The wall of the `examples/carotid.py` hex mesh, smoothed as a free-standing surface on the example's own tessellation with the open rim frozen, as built or with perturbed input. ```{include} _generated/carotid_wall.viewer.inc ``` ## Key points - **The hard case**: a real, strongly curved, open wall (`hexmesh.boundary_mesh(mesh, "wall")`), smoothed by `examples/smoother/quad/cs_wall_surface.py`. - **The smoother does not touch the hexes**: no interior node follows a moved vertex, so these are not volume-mesh numbers. - **Not every number ends better**: as built, the worst quad can get worse while the mean and the tail improve; perturbed, most of the damage is recovered. The verdict lines under the table say which. - *Perturbed input*: every movable vertex shifted by up to 0.2 of its local edge length, then put back on the surface. ## The numbers ```{include} _generated/carotid_wall.table.inc ``` Run `python examples/smoother/quad/cs_wall_surface.py` to reproduce; it prints these numbers. ## The hexes - `examples/smoother/quad/cs_carotid_hex.py` re-runs the `examples/carotid.py` recipe at order 1 with each station's wall ring replaced by the smoothed wall: **an order-1 rebuild, not a propagation**. Only the wall surface is smoothed; the hexes are regenerated from it (the carotid recipe re-run), not smoothed themselves. Every layer comes from the wall ring; the original's high-order curvature is not carried. - The **shared seam ring** (the last wall ring of every leg, where the three legs meet) is **held fixed**, like the open rim; left free, the last layer of one leg inverts (the seam-ring-free row under *Hex quality*). - *Exterior*: every named face coloured by boundary group, one checkbox each. *Cross-section*: one leg and the trifurcation, by scaled Jacobian or wall layer. Switch original / rebuild; drag to orbit. ```{include} _generated/carotid_hex.viewer.inc ``` ### Hex quality ```{include} _generated/carotid_hex.quality.inc ``` ```{include} _generated/carotid_hex.text.inc ``` ### Layers - Set by the construction's radial fractions (`RADIAL`, top of the script), measured from the wall inward along core-to-wall lines; the rebuild keeps the original's four layers. - A property of the construction, not of the surface, which is why smoothing leaves the first layer as it was. ```{include} _generated/carotid_hex.layers.inc ``` ### Cost - Wall-clock timers around the script's own stages, from reading the tessellation to the rebuilt hexes: **a single run and a rough estimate**, taken with `OMP_NUM_THREADS=1` (without it some parts use several threads and the seconds differ). - Stage 4 builds the original hexes (each station's ring stack and wall fit included); stage 8 is the same build on the smoothed wall's rings. ```{include} _generated/carotid_cost.machine.inc ``` ```{include} _generated/carotid_cost.table.inc ``` ```{include} _generated/carotid_cost.bar.inc ``` ```{include} _generated/carotid_cost.text.inc ``` Run `python examples/smoother/quad/cs_carotid_hex.py` to reproduce; it prints these numbers, the timing table at the end (`TIMING` at the top of the script switches it off).
Notes and caveats - The tessellation is itself an approximation of the vessel, so the normals the metric uses carry its chord error. - Folded or overlapping inputs are a known limitation of the smoother. - The wall is too large for the data to keep a stage history, so the viewer shows only the input and the final state. - The smoothed wall in the rebuild is the one above, held fixed at the open rim and the shared seam ring; the rebuilt hexes' wall faces are that wall. - The tables are regenerated by `docs/_ext/gen_smoother_quad_assets.py` and `docs/_ext/gen_smoother_quad_hexviews_assets.py`; nothing is typed in.