STRUCTURAL AI RESEARCH LAB

TPMS Concrete Block Interface

Current ScopeSchwarz P, Gyroid, Diamond, Neovius, Lidinoid, Split P

Six real TPMS families are active in the UI. A separate hybrid family remains outside the current detailed generator path.

Geometry EngineImplicit Fields + Marching Cubes

The app evaluates scalar fields on a 3D grid, converts them into a sheet shell, clips them to an envelope, and extracts a triangle mesh at level zero.

Engineering LayerPhysics-Lite Proxy

The current calculations are designed for interactive exploration. They are useful for comparison and ranking, but they are not a substitute for FEM, code checks, or laboratory tests.

WorkflowGenerate Then Calculate

The system first generates geometry, samples its occupancy, and only afterwards runs material-density and strength estimates using the selected mix design.

SYSTEM GOAL

Project Overview

The application is a design exploration interface for TPMS-inspired concrete blocks. Its purpose is to let a user choose a topology family, adjust geometric parameters such as cell size and fill percentage, generate a visual block or unit-cell mesh, and then compute first-pass engineering indicators such as apparent density and predicted compressive strength.

The key idea is to separate three layers of reasoning. The first layer is geometric: define a triply periodic surface in 3D space and convert it into a shell of finite thickness. The second layer is manufacturing-oriented: trim that shell to a practical block envelope or isolate a single unit cell for quick inspection. The third layer is engineering-oriented: sample the resulting geometry, estimate relative density, convert a mix design into an estimated material density and matrix strength, and then predict block-level strength with a topology-aware proxy law.

This separation matters because not every parameter should affect every stage. In the current interface, geometry generation and engineering calculation are intentionally distinct. Shape parameters change the mesh. Mix-design parameters change the engineering estimate. The user therefore generates the form first and calculates properties afterwards.

GEOMETRIC FOUNDATION

What TPMS Means

TPMS stands for Triply Periodic Minimal Surface. "Triply periodic" means the surface repeats itself in three independent spatial directions. "Minimal surface" refers to a surface with zero mean curvature in its ideal mathematical form. In practical engineering, TPMS fields are attractive because they create continuous, highly connected void and solid networks without the stress concentrations that often appear in sharp-cornered cellular lattices.

A TPMS can be represented implicitly by a scalar field F(x,y,z). Instead of modeling the surface as an explicit patchwork of triangles from the start, the code evaluates a field over space and defines the surface by the level set F(x,y,z) = 0. This is a powerful approach because the same field can later be offset, thickened, clipped, blended, and sampled without rewriting the topology as a new mesh every time the parameters change.

For concrete blocks, TPMS sheets are interesting because they can create a continuous load path through a porous body while preserving a significant void fraction. In architectural or additive-manufacturing settings, that opens a design space involving lower mass, controlled permeability, expressive internal morphology, and potentially improved surface-area-to-volume characteristics.

Why TPMS is useful here

The app is not treating TPMS as decorative geometry only. It uses TPMS as a controllable internal structural language: periodic, continuous, smooth, and compatible with field-based modeling.

TOPOLOGY SET

Implemented TPMS Families

The current modeler exposes six active TPMS families. They share the same numerical shelling pipeline, the same sampling logic, and the same viewer path. What differs between them is the implicit field equation and its gradient, which influences the sheet geometry after the thickness operation is applied.

Schwarz P

A sheet-based TPMS with orthogonal symmetry and a cubic partitioning character that is easy to read visually and useful as a baseline family.

k=2πcellSizeMmFP(x,y,z)=cos(kx)+cos(ky)+cos(kz)Fx=ksin(kx)Fy=ksin(ky)Fz=ksin(kz)FP=(Fx)2+(Fy)2+(Fz)2\begin{aligned} k &= \frac{2\pi}{\mathrm{cellSizeMm}} \\ F_P(x,y,z) &= \cos(kx) + \cos(ky) + \cos(kz) \\ \frac{\partial F}{\partial x} &= -k\sin(kx) \\ \frac{\partial F}{\partial y} &= -k\sin(ky) \\ \frac{\partial F}{\partial z} &= -k\sin(kz) \\ \lVert \nabla F_P \rVert &= \sqrt{\left(\frac{\partial F}{\partial x}\right)^2 + \left(\frac{\partial F}{\partial y}\right)^2 + \left(\frac{\partial F}{\partial z}\right)^2} \end{aligned}

Gyroid

A non-self-intersecting TPMS with continuous twisting channels and no straight planar symmetry planes, often used where isotropic-looking transport paths are desirable.

FG(x,y,z)=sin(kx)cos(ky)+sin(ky)cos(kz)+sin(kz)cos(kx)Fx=k(cos(kx)cos(ky)sin(kz)sin(kx))Fy=k(cos(ky)cos(kz)sin(kx)sin(ky))Fz=k(cos(kz)cos(kx)sin(ky)sin(kz))FG=(Fx)2+(Fy)2+(Fz)2\begin{aligned} F_G(x,y,z) &= \sin(kx)\cos(ky) + \sin(ky)\cos(kz) + \sin(kz)\cos(kx) \\ \frac{\partial F}{\partial x} &= k\bigl(\cos(kx)\cos(ky) - \sin(kz)\sin(kx)\bigr) \\ \frac{\partial F}{\partial y} &= k\bigl(\cos(ky)\cos(kz) - \sin(kx)\sin(ky)\bigr) \\ \frac{\partial F}{\partial z} &= k\bigl(\cos(kz)\cos(kx) - \sin(ky)\sin(kz)\bigr) \\ \lVert \nabla F_G \rVert &= \sqrt{\left(\frac{\partial F}{\partial x}\right)^2 + \left(\frac{\partial F}{\partial y}\right)^2 + \left(\frac{\partial F}{\partial z}\right)^2} \end{aligned}

Diamond

A classic TPMS family with a more angular-looking internal network and a distinct connectivity pattern compared with Schwarz P and Gyroid.

FD(x,y,z)=cos(kx)cos(ky)cos(kz)sin(kx)sin(ky)sin(kz)Fx=k(sin(kx)cos(ky)cos(kz)+cos(kx)sin(ky)sin(kz))Fy=k(cos(kx)sin(ky)cos(kz)+sin(kx)cos(ky)sin(kz))Fz=k(cos(kx)cos(ky)sin(kz)+sin(kx)sin(ky)cos(kz))FD=(Fx)2+(Fy)2+(Fz)2\begin{aligned} F_D(x,y,z) &= \cos(kx)\cos(ky)\cos(kz) - \sin(kx)\sin(ky)\sin(kz) \\ \frac{\partial F}{\partial x} &= -k\bigl(\sin(kx)\cos(ky)\cos(kz) + \cos(kx)\sin(ky)\sin(kz)\bigr) \\ \frac{\partial F}{\partial y} &= -k\bigl(\cos(kx)\sin(ky)\cos(kz) + \sin(kx)\cos(ky)\sin(kz)\bigr) \\ \frac{\partial F}{\partial z} &= -k\bigl(\cos(kx)\cos(ky)\sin(kz) + \sin(kx)\sin(ky)\cos(kz)\bigr) \\ \lVert \nabla F_D \rVert &= \sqrt{\left(\frac{\partial F}{\partial x}\right)^2 + \left(\frac{\partial F}{\partial y}\right)^2 + \left(\frac{\partial F}{\partial z}\right)^2} \end{aligned}

Neovius

A TPMS family with bulb-like chambers connected by narrower necks, giving a more punctured cubic appearance than Schwarz P while staying periodic and sheet-based.

FN(x,y,z)=3(cos(kx)+cos(ky)+cos(kz))+4cos(kx)cos(ky)cos(kz)Fx=ksin(kx)(3+4cos(ky)cos(kz))Fy=ksin(ky)(3+4cos(kx)cos(kz))Fz=ksin(kz)(3+4cos(kx)cos(ky))FN=(Fx)2+(Fy)2+(Fz)2\begin{aligned} F_N(x,y,z) &= 3\bigl(\cos(kx) + \cos(ky) + \cos(kz)\bigr) + 4\cos(kx)\cos(ky)\cos(kz) \\ \frac{\partial F}{\partial x} &= -k\sin(kx)\bigl(3 + 4\cos(ky)\cos(kz)\bigr) \\ \frac{\partial F}{\partial y} &= -k\sin(ky)\bigl(3 + 4\cos(kx)\cos(kz)\bigr) \\ \frac{\partial F}{\partial z} &= -k\sin(kz)\bigl(3 + 4\cos(kx)\cos(ky)\bigr) \\ \lVert \nabla F_N \rVert &= \sqrt{\left(\frac{\partial F}{\partial x}\right)^2 + \left(\frac{\partial F}{\partial y}\right)^2 + \left(\frac{\partial F}{\partial z}\right)^2} \end{aligned}

Lidinoid

A more braided-looking TPMS family with oblique saddle transitions, producing a visibly woven morphology compared with the more cubic Schwarz P and chambered Neovius forms.

FL(x,y,z)=sin(2kx)cos(ky)sin(kz)+sin(2ky)cos(kz)sin(kx)+sin(2kz)cos(kx)sin(ky)Fx=k(2cos(2kx)cos(ky)sin(kz)+sin(2ky)cos(kz)cos(kx)sin(2kz)sin(kx)sin(ky))Fy=k(sin(2kx)sin(ky)sin(kz)+2cos(2ky)cos(kz)sin(kx)+sin(2kz)cos(kx)cos(ky))Fz=k(sin(2kx)cos(ky)cos(kz)sin(2ky)sin(kz)sin(kx)+2cos(2kz)cos(kx)sin(ky))FL=(Fx)2+(Fy)2+(Fz)2\begin{aligned} F_L(x,y,z) &= \sin(2kx)\cos(ky)\sin(kz) + \sin(2ky)\cos(kz)\sin(kx) + \sin(2kz)\cos(kx)\sin(ky) \\ \frac{\partial F}{\partial x} &= k\Bigl(2\cos(2kx)\cos(ky)\sin(kz) + \sin(2ky)\cos(kz)\cos(kx) - \sin(2kz)\sin(kx)\sin(ky)\Bigr) \\ \frac{\partial F}{\partial y} &= k\Bigl(-\sin(2kx)\sin(ky)\sin(kz) + 2\cos(2ky)\cos(kz)\sin(kx) + \sin(2kz)\cos(kx)\cos(ky)\Bigr) \\ \frac{\partial F}{\partial z} &= k\Bigl(\sin(2kx)\cos(ky)\cos(kz) - \sin(2ky)\sin(kz)\sin(kx) + 2\cos(2kz)\cos(kx)\sin(ky)\Bigr) \\ \lVert \nabla F_L \rVert &= \sqrt{\left(\frac{\partial F}{\partial x}\right)^2 + \left(\frac{\partial F}{\partial y}\right)^2 + \left(\frac{\partial F}{\partial z}\right)^2} \end{aligned}

Split P

A TPMS variant with a split-channel morphology that blends second-harmonic trigonometric terms, producing a distinct connected network compared with Lidinoid and Schwarz P.

FSP(x,y,z)=1.1(sin(2kx)sin(kz)cos(ky)+sin(2ky)sin(kx)cos(kz)+sin(2kz)sin(ky)cos(kx))0.2(cos(2kx)cos(2ky)+cos(2ky)cos(2kz)+cos(2kz)cos(2kx))0.4(cos(2kx)+cos(2ky)+cos(2kz))Fx=k(1.1(2cos(2kx)sin(kz)cos(ky)+sin(2ky)cos(kx)cos(kz)sin(2kz)sin(ky)sin(kx))+0.4sin(2kx)(cos(2ky)+cos(2kz)+1))Fy=k(1.1(sin(2kx)sin(kz)sin(ky)+2cos(2ky)sin(kx)cos(kz)+sin(2kz)cos(ky)cos(kx))+0.4sin(2ky)(cos(2kx)+cos(2kz)+1))Fz=k(1.1(sin(2kx)cos(kz)cos(ky)sin(2ky)sin(kx)sin(kz)+2cos(2kz)sin(ky)cos(kx))+0.4sin(2kz)(cos(2kx)+cos(2ky)+1))FSP=(Fx)2+(Fy)2+(Fz)2\begin{aligned} F_{SP}(x,y,z) &= 1.1\Bigl(\sin(2kx)\sin(kz)\cos(ky) + \sin(2ky)\sin(kx)\cos(kz) + \sin(2kz)\sin(ky)\cos(kx)\Bigr) \\ &\quad - 0.2\Bigl(\cos(2kx)\cos(2ky) + \cos(2ky)\cos(2kz) + \cos(2kz)\cos(2kx)\Bigr) \\ &\quad - 0.4\Bigl(\cos(2kx) + \cos(2ky) + \cos(2kz)\Bigr) \\ \frac{\partial F}{\partial x} &= k\Bigl(1.1\bigl(2\cos(2kx)\sin(kz)\cos(ky) + \sin(2ky)\cos(kx)\cos(kz) - \sin(2kz)\sin(ky)\sin(kx)\bigr) \\ &\quad + 0.4\sin(2kx)\bigl(\cos(2ky)+\cos(2kz)+1\bigr)\Bigr) \\ \frac{\partial F}{\partial y} &= k\Bigl(1.1\bigl(-\sin(2kx)\sin(kz)\sin(ky) + 2\cos(2ky)\sin(kx)\cos(kz) + \sin(2kz)\cos(ky)\cos(kx)\bigr) \\ &\quad + 0.4\sin(2ky)\bigl(\cos(2kx)+\cos(2kz)+1\bigr)\Bigr) \\ \frac{\partial F}{\partial z} &= k\Bigl(1.1\bigl(\sin(2kx)\cos(kz)\cos(ky) - \sin(2ky)\sin(kx)\sin(kz) + 2\cos(2kz)\sin(ky)\cos(kx)\bigr) \\ &\quad + 0.4\sin(2kz)\bigl(\cos(2kx)+\cos(2ky)+1\bigr)\Bigr) \\ \lVert \nabla F_{SP} \rVert &= \sqrt{\left(\frac{\partial F}{\partial x}\right)^2 + \left(\frac{\partial F}{\partial y}\right)^2 + \left(\frac{\partial F}{\partial z}\right)^2} \end{aligned}

In each case the wave number is defined by the selected cell size. If the cell size decreases, the oscillation frequency increases, which means more surface periods fit inside the same external block. If the cell size increases, fewer periods fit inside the same block, making the morphology coarser and more legible at the scale of the block envelope.

PIPELINE STRUCTURE

Modeling Workflow

The code follows a compact but meaningful modeling workflow. First the app chooses a topology family. Second it determines the physical envelope: either the full block dimensions or a cubic unit cell. Third it computes a scalar field over a structured 3D grid. Fourth it transforms the zero-thickness TPMS into a finite-thickness shell. Fifth it clips or cases the shell according to the generation mode. Sixth it runs marching cubes to obtain a renderable triangle mesh. Seventh it samples the field occupancy and stores the solid fraction so that engineering calculations can be performed later.

Generation Modes

Full Block uses the selected external block dimensions and applies an outer casing strategy. This mode is meant to represent a practical component-scale block rather than a mathematically pure isolated period.Single Unit Cell instead uses a cubic envelope equal to the current cell size and disables the extra box casing. This makes the morphology easier to inspect as a single TPMS period.

Sheet Construction

The zero set F = 0 is only a surface. A printable or castable block needs a finite wall thickness. The code therefore uses a first-order level-set shell construction based on the field gradient magnitude. Intuitively, the gradient converts a thickness expressed in millimeters into an offset in scalar-field space, so the shell thickness responds more consistently to the local geometry.

outerOffset=Fh2FinnerOffset=F+h2FlatticeField=outerOffsetinnerOffset\begin{aligned} \mathrm{outerOffset} &= F - \frac{h}{2}\lVert \nabla F \rVert \\ \mathrm{innerOffset} &= F + \frac{h}{2}\lVert \nabla F \rVert \\ \mathrm{latticeField} &= \mathrm{outerOffset}\cdot\mathrm{innerOffset} \end{aligned}

The solid shell is represented by latticeField0\mathrm{latticeField}\le 0.

This shelling method is computationally light and works well for interactive previewing. It is not a full exact signed-distance offset, but it is a practical compromise between speed and geometric intelligibility.

NUMERICAL IMPLEMENTATION

Grid And Meshing

The grid resolution is not set directly as a raw voxel count. Instead, the app first computes how many TPMS periods fit along each axis, then multiplies those periods by the requested points per period. This keeps the sampling density tied to the topology wavelength rather than to the absolute block size alone.

periodsx=max(lengthMmcellSizeMm,1)periodsy=max(heightMmcellSizeMm,1)periodsz=max(widthMmcellSizeMm,1)samplesPerPeriod=clamp(generationResolution,10,30)grid=round(periodssamplesPerPeriod)\begin{aligned} \mathrm{periods}_x &= \max\left(\frac{\mathrm{lengthMm}}{\mathrm{cellSizeMm}}, 1\right) \\ \mathrm{periods}_y &= \max\left(\frac{\mathrm{heightMm}}{\mathrm{cellSizeMm}}, 1\right) \\ \mathrm{periods}_z &= \max\left(\frac{\mathrm{widthMm}}{\mathrm{cellSizeMm}}, 1\right) \\ \mathrm{samplesPerPeriod} &= \mathrm{clamp}(\mathrm{generationResolution}, 10, 30) \\ \mathrm{grid} &= \mathrm{round}(\mathrm{periods}\cdot\mathrm{samplesPerPeriod}) \end{aligned}

To prevent the worker from becoming unstable or too expensive, the grid is also clamped to minimum and maximum bounds and finally capped by a global sample budget of 2,400,000 total samples. If the raw grid would exceed this budget, the app rescales all three axes by a cube-root factor so that the total number of samples falls back under the cap.

Once the field is sampled, the project uses marching cubes to extract a triangle mesh at iso-value 0. Marching cubes is a standard level-set meshing method that converts a scalar field into a piecewise-triangular approximation of the zero surface. It is well suited to TPMS geometry because the input is already an implicit field rather than a collection of parametric surfaces.

Envelope Clipping And Casing

The geometry must respect the selected external envelope. The first clipping stage uses a box field that is positive outside the block and non-positive inside it. The lattice field is combined with this box field so that any material outside the block is removed. In full-block mode, an additional internal box field is combined to form a casing shell.

boxField=max(xL2,yH2,zW2)clippedLatticeField=max(latticeField,boxField)innerBoxField=max(xmax(L2tcase,1),ymax(H2tcase,1),zmax(W2tcase,1))boxShellField=boxFieldinnerBoxFieldfullBlockField=min(clippedLatticeField,boxShellField)unitCellField=clippedLatticeField\begin{aligned} \mathrm{boxField} &= \max\left(|x|-\frac{L}{2}, |y|-\frac{H}{2}, |z|-\frac{W}{2}\right) \\ \mathrm{clippedLatticeField} &= \max(\mathrm{latticeField}, \mathrm{boxField}) \\ \mathrm{innerBoxField} &= \max\left(|x|-\max\left(\frac{L}{2}-t_{case},1\right), |y|-\max\left(\frac{H}{2}-t_{case},1\right), |z|-\max\left(\frac{W}{2}-t_{case},1\right)\right) \\ \mathrm{boxShellField} &= \mathrm{boxField}\cdot\mathrm{innerBoxField} \\ \mathrm{fullBlockField} &= \min(\mathrm{clippedLatticeField}, \mathrm{boxShellField}) \\ \mathrm{unitCellField} &= \mathrm{clippedLatticeField} \end{aligned}

The result is a pragmatic distinction between modes: the unit cell stays visually closer to the TPMS sheet itself, while the full block keeps a practical outer shell behavior.

Occupancy Sampling

The worker now evaluates not just the mesh but also the occupancy of the sampled field. Every grid point with field value less than or equal to zero is treated as solid for the purpose of a relative-density estimate. This produces a geometry-aware solid fraction that is later reused by the engineering estimate.

MATERIAL INPUTS

Mix-Design Interpretation

The current interface keeps the mix design simple on purpose. It exposes two ratios: water/cement and sand/cement. These values are used in the engineering layer after geometry generation, not during geometric meshing itself. That design choice reflects the logic that a change in material proportions does not alter the mathematical topology, but it does alter the estimate of density and matrix-level strength.

The current project interprets the mix in an absolute-volume sense. A notional cement mass of 1 is used as the reference mass basis. Water mass is computed from the water/cement ratio, sand mass from the sand/cement ratio, and the resulting total mass is divided by the total absolute volume of the three constituents to obtain an estimated mix density.

mc=1mw=(wc)mcms=(sc)mcρmix=mc+mw+msmc/ρc+mw/ρw+ms/ρs\begin{aligned} m_c &= 1 \\ m_w &= \left(\frac{w}{c}\right)m_c \\ m_s &= \left(\frac{s}{c}\right)m_c \\ \rho_{mix} &= \frac{m_c+m_w+m_s}{m_c/\rho_c + m_w/\rho_w + m_s/\rho_s} \end{aligned}

ρc=3150kg/m3\rho_c=3150\,\mathrm{kg/m^3}, ρw=1000kg/m3\rho_w=1000\,\mathrm{kg/m^3}, ρs=2650kg/m3\rho_s=2650\,\mathrm{kg/m^3}.

This is a reasonable first-pass density model for a mortar-like system, though it does not yet account for entrained air, admixtures, supplementary cementitious materials, grading effects, or curing-dependent shrinkage and porosity evolution.

ENGINEERING PROXY

Density And Strength Calculations

The engineering layer is currently a physics-lite proxy, not a code-compliant design solver. It combines geometry-derived relative density with a mix-design-based material estimate. The goal is to enable interactive comparison across topology families and parameter settings while remaining transparent about what is estimated and what is not.

Relative Density, Apparent Density, And Mass

Once occupancy sampling is complete, the app converts the sampled solid fraction into a relative density. This relative density is then used to estimate the solid volume of the generated block, the block mass, and the apparent density of the porous block.

relativeDensity=solidSampleCounttotalSamplesVblock=lengthMmwidthMmheightMm109Vsolid=VblockrelativeDensitymest=Vsolidρmixρapp=ρmixrelativeDensity\begin{aligned} \mathrm{relativeDensity} &= \frac{\mathrm{solidSampleCount}}{\mathrm{totalSamples}} \\ V_{block} &= \frac{\mathrm{lengthMm}\cdot\mathrm{widthMm}\cdot\mathrm{heightMm}}{10^9} \\ V_{solid} &= V_{block}\cdot\mathrm{relativeDensity} \\ m_{est} &= V_{solid}\cdot\rho_{mix} \\ \rho_{app} &= \rho_{mix}\cdot\mathrm{relativeDensity} \end{aligned}

Matrix Strength From Water/Cement Ratio

The matrix strength is modeled using an Abrams-type inverse relationship with water/cement ratio. The current implementation uses the compact form shown below. It should be interpreted as a proxy for a 28-day-like matrix strength trend, not as a calibrated guarantee for a specific cement or curing protocol.

fmatrix=ABw/cf_{matrix}=\frac{A}{B^{w/c}}

A=96A=96, B=7B=7.

Direct Sand/Cement Influence

The project now also includes a direct sand/cement factor in the strength estimate. The reason is empirical: in the practical mortar range currently explored by the UI, higher sand/cement ratios typically reduce the amount of binder available to wrap and connect the aggregate phase, which in turn tends to reduce compressive strength. The factor is therefore modeled as a monotonic inverse-power term around a reference ratio of 2.5.

ksc=clamp((2.5s/c)0.3,0.84,1.18)k_{sc}=\mathrm{clamp}\left(\left(\frac{2.5}{s/c}\right)^{0.3}, 0.84, 1.18\right)

If s/cs/c decreases, ksck_{sc} increases. If s/cs/c increases, ksck_{sc} decreases.

Topology Factor And Relative-Density Scaling

The final block-level strength estimate multiplies the matrix term by the sand/cement factor, a topology family factor, and a relative-density power law inspired by cellular-solids reasoning. In other words, the model says that the base material matters, topology matters, and the amount of solid material inside the block matters strongly.

fpred=fmatrixkscηtopologyrelativeDensity1.5f_{pred}=f_{matrix}\cdot k_{sc}\cdot \eta_{topology}\cdot \mathrm{relativeDensity}^{1.5}

ηtopology(Schwarz P)=1.00\eta_{topology}(\mathrm{Schwarz\ P})=1.00

ηtopology(Gyroid)=1.04\eta_{topology}(\mathrm{Gyroid})=1.04

ηtopology(Diamond)=1.08\eta_{topology}(\mathrm{Diamond})=1.08

ηtopology(Neovius)=1.00\eta_{topology}(\mathrm{Neovius})=1.00

ηtopology(Lidinoid)=0.98\eta_{topology}(\mathrm{Lidinoid})=0.98

ηtopology(Split P)=1.00\eta_{topology}(\mathrm{Split\ P})=1.00

The exponent 1.5 is a deliberately simple engineering choice consistent with the broader family of Gibson-Ashby-style density-scaling arguments. It is not yet a topology-specific fitted exponent obtained from destructive testing of printed or cast concrete TPMS blocks.

Practical interpretation

The current app is good at answering questions like “Which of these generated blocks is lighter?” or “Which configuration is likely to be stronger than the others under the same assumptions?” It is not yet good enough to answer “What certified compressive strength will this block achieve in production?”

ALL CORE EQUATIONS

Formula Catalog

This section collects the main formulas used by the current implementation in one place. The goal is to make the mathematical assumptions explicit and easy to audit.

Periods Per Axis

periodsx=max(lengthMmcellSizeMm,1)periodsy=max(heightMmcellSizeMm,1)periodsz=max(widthMmcellSizeMm,1)\begin{aligned} \mathrm{periods}_x &= \max\left(\frac{\mathrm{lengthMm}}{\mathrm{cellSizeMm}}, 1\right) \\ \mathrm{periods}_y &= \max\left(\frac{\mathrm{heightMm}}{\mathrm{cellSizeMm}}, 1\right) \\ \mathrm{periods}_z &= \max\left(\frac{\mathrm{widthMm}}{\mathrm{cellSizeMm}}, 1\right) \end{aligned}

Grid Resolution

samplesPerPeriod=clamp(generationResolution,10,30)gridx=clamp(round(periodsxsamplesPerPeriod),64,512)gridy=clamp(round(periodsysamplesPerPeriod),40,320)gridz=clamp(round(periodszsamplesPerPeriod),40,320)\begin{aligned} \mathrm{samplesPerPeriod} &= \mathrm{clamp}(\mathrm{generationResolution}, 10, 30) \\ \mathrm{grid}_x &= \mathrm{clamp}(\mathrm{round}(\mathrm{periods}_x \cdot \mathrm{samplesPerPeriod}), 64, 512) \\ \mathrm{grid}_y &= \mathrm{clamp}(\mathrm{round}(\mathrm{periods}_y \cdot \mathrm{samplesPerPeriod}), 40, 320) \\ \mathrm{grid}_z &= \mathrm{clamp}(\mathrm{round}(\mathrm{periods}_z \cdot \mathrm{samplesPerPeriod}), 40, 320) \end{aligned}

If gridxgridygridz>2,400,000\mathrm{grid}_x \cdot \mathrm{grid}_y \cdot \mathrm{grid}_z > 2{,}400{,}000, all three axes are scaled by a cube-root cap factor.

Implicit TPMS Shell

outerOffset=Fh2FinnerOffset=F+h2FlatticeField=outerOffsetinnerOffset\begin{aligned} \mathrm{outerOffset} &= F - \frac{h}{2}\lVert \nabla F \rVert \\ \mathrm{innerOffset} &= F + \frac{h}{2}\lVert \nabla F \rVert \\ \mathrm{latticeField} &= \mathrm{outerOffset} \cdot \mathrm{innerOffset} \end{aligned}

The iso-surface is extracted at latticeField=0\mathrm{latticeField}=0.

Bounding And Casing

boxField=max(xL2,yH2,zW2)clippedLatticeField=max(latticeField,boxField)innerBoxField=max(xmax(L2tcase,1),ymax(H2tcase,1),zmax(W2tcase,1))boxShellField=boxFieldinnerBoxFieldfullBlockField=min(clippedLatticeField,boxShellField)unitCellField=clippedLatticeField\begin{aligned} \mathrm{boxField} &= \max\left(|x|-\frac{L}{2}, |y|-\frac{H}{2}, |z|-\frac{W}{2}\right) \\ \mathrm{clippedLatticeField} &= \max(\mathrm{latticeField}, \mathrm{boxField}) \\ \mathrm{innerBoxField} &= \max\left(|x|-\max\left(\frac{L}{2}-t_{case},1\right), |y|-\max\left(\frac{H}{2}-t_{case},1\right), |z|-\max\left(\frac{W}{2}-t_{case},1\right)\right) \\ \mathrm{boxShellField} &= \mathrm{boxField} \cdot \mathrm{innerBoxField} \\ \mathrm{fullBlockField} &= \min(\mathrm{clippedLatticeField}, \mathrm{boxShellField}) \\ \mathrm{unitCellField} &= \mathrm{clippedLatticeField} \end{aligned}

Occupancy Sampling

solidFraction=solidSampleCounttotalSamplesrelativeDensity=clamp(solidFraction,0,1)\begin{aligned} \mathrm{solidFraction} &= \frac{\mathrm{solidSampleCount}}{\mathrm{totalSamples}} \\ \mathrm{relativeDensity} &= \mathrm{clamp}(\mathrm{solidFraction}, 0, 1) \end{aligned}

solidSampleCount\mathrm{solidSampleCount} is the number of scalar-field samples where field0\mathrm{field} \le 0.

Mix Density

mc=1mw=(wc)mcms=(sc)mcρmix=mc+mw+msmc/ρc+mw/ρw+ms/ρs\begin{aligned} m_c &= 1 \\ m_w &= \left(\frac{w}{c}\right)m_c \\ m_s &= \left(\frac{s}{c}\right)m_c \\ \rho_{mix} &= \frac{m_c+m_w+m_s}{m_c/\rho_c + m_w/\rho_w + m_s/\rho_s} \end{aligned}

With ρc=3150kg/m3\rho_c=3150\,\mathrm{kg/m^3}, ρw=1000kg/m3\rho_w=1000\,\mathrm{kg/m^3}, and ρs=2650kg/m3\rho_s=2650\,\mathrm{kg/m^3}.

Mass And Apparent Density

Vblock=lengthMmwidthMmheightMm109Vsolid=VblockrelativeDensitymest=Vsolidρmixρapp=ρmixrelativeDensity\begin{aligned} V_{block} &= \frac{\mathrm{lengthMm}\cdot\mathrm{widthMm}\cdot\mathrm{heightMm}}{10^9} \\ V_{solid} &= V_{block}\cdot\mathrm{relativeDensity} \\ m_{est} &= V_{solid}\cdot\rho_{mix} \\ \rho_{app} &= \rho_{mix}\cdot\mathrm{relativeDensity} \end{aligned}

Matrix Strength

fmatrix=ABw/cf_{matrix}=\frac{A}{B^{w/c}}

Current implementation constants: A=96A=96, B=7B=7.

This is an Abrams-type proxy rather than a cement-specific laboratory calibration curve.

Sand/Cement Strength Factor

ksc=clamp((2.5s/c)0.3,0.84,1.18)k_{sc}=\mathrm{clamp}\left(\left(\frac{2.5}{s/c}\right)^{0.3}, 0.84, 1.18\right)

This makes the strength proxy increase as s/cs/c decreases within the current UI range.

Predicted Compressive Strength

fpred=fmatrixkscηtopologyrelativeDensity1.5f_{pred}=f_{matrix}\cdot k_{sc}\cdot \eta_{topology}\cdot \mathrm{relativeDensity}^{1.5}

ηtopology(Schwarz P)=1.00\eta_{topology}(\mathrm{Schwarz\ P})=1.00

ηtopology(Gyroid)=1.04\eta_{topology}(\mathrm{Gyroid})=1.04

ηtopology(Diamond)=1.08\eta_{topology}(\mathrm{Diamond})=1.08

ηtopology(Neovius)=1.00\eta_{topology}(\mathrm{Neovius})=1.00

ηtopology(Lidinoid)=0.98\eta_{topology}(\mathrm{Lidinoid})=0.98

ηtopology(Split P)=1.00\eta_{topology}(\mathrm{Split\ P})=1.00

WHAT THE MODEL DOES NOT DO

Assumptions And Limits

The current implementation deliberately avoids claiming more than it can justify. The geometry engine is real. The occupancy sampling is real. The density calculation is relatively concrete because it follows directly from the mix density and the measured solid fraction. The compressive strength result, however, is still a surrogate estimate layered on top of that geometry.

  • No nonlinear finite-element analysis is solved for the actual generated mesh.
  • No local buckling, crack initiation, crack propagation, or crushing localization is simulated.
  • No layer-by-layer anisotropy model for 3D concrete printing is included yet.
  • No curing-age evolution is modeled beyond the Abrams-type matrix trend.
  • No rheology, segregation, or nozzle-process model is coupled into the geometry engine.
  • No laboratory calibration set has yet been used to fit topology-specific exponents and coefficients for a specific concrete family.

These limits are not bugs in the interface. They are boundaries of scope. The app is intentionally positioned as an exploration and decision-support tool for early-stage morphology and mix-design comparison.

ENGINEERING ROADMAP

Recommended Next Steps

If the project is pushed toward research-grade or product-grade structural prediction, the most valuable next step is calibration. The current formulas provide a rational scaffold, but the coefficients need to be adjusted against physical specimens made with the actual process and material system of interest.

  1. Print or cast a matrix of specimens across topology family, cell size, wall thickness, and mix-design values.
  2. Measure actual mass, density, and 28-day compressive strength for each specimen.
  3. Fit the current proxy coefficients so that prediction error is minimized against laboratory data.
  4. Add uncertainty bands rather than single-point strength outputs.
  5. Introduce topology-specific or process-specific exponents when enough data exists to justify them.
  6. For high-confidence applications, couple the generated geometry to a real solver for top candidates only.

That staged approach preserves what this interface is already good at: fast comparison, visual intuition, and early screening of a large geometry space, while creating a disciplined path toward credible structural forecasting.