You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While 0.4.0 is being finished on the release/0.4.0-rc branch (#114), this roadmap outlines the vision for FEAScript 0.5.0. The primary focus of this release is using the whole machine: multigrid and worker threads, so larger 2D problems stay fast. Version 0.5.0 also opens FEAScript to meshes from other tools, builds meshes from several structured blocks, adds physical units with a dimensional check before solving, and brings the API closer to a stable 1.0, with one config object that describes a whole model as plain JSON.
Numerical Solution & Performance
Algebraic multigrid (AMG): A preconditioner whose iteration count stays nearly constant as the mesh gets finer, built on the PCG solver of 0.4.0.
Worker pool: Parallel assembly and solves on several threads. Data is shared through SharedArrayBuffer on cross-origin isolated pages and passed as messages otherwise. Assembly and the solvers talk to the threads through one small interface, so one thread and many threads run the same code.
One asynchronous solve: await model.solve({ threads: "auto" }) replaces solve() and solveAsync(), in the browser, in Node.js and in FEAScriptWorker. The old forms keep working, with a deprecation warning.
Batch runs: Solve one model for a list of parameter values, sharing the work between threads, for parameter sweeps. Batch runs need no SharedArrayBuffer, so they use every thread on any page, including CodePen.
Meshing
Multi-block meshes: Build a 2D mesh from several structured blocks, each a quadrilateral given by its four corners, with linear or quadratic elements. Blocks meet edge to edge with the same number of elements along a shared edge, and their shared nodes are merged.
Named block boundaries: Each block names its outer edges, e.g. "inlet" or "wall". An edge without a name gets a default one.
Same structure as imported meshes: A generated mesh uses the common mesh structure of the readers, so every model, solver and plot works on it as on an imported mesh.
Single-block shorthand: numElementsX, maxX, numElementsY and maxY keep working as one block with boundaries "0" to "3", so existing scripts and pens run unchanged.
Working with Other Tools
Common mesh structure: Every reader returns the same structure, with nodes, elements, node and element sets, and named boundary groups.
Importer and exporter interface: await importMesh(file, { format: "inp" }). importGmshMesh stays as an alias.
.inp mesh import (Abaqus and CalculiX): Written from the published keyword documentation, with test files that we build ourselves.
VTU import: Read meshes and fields from .vtu files.
CSV export: Nodes and every result field.
Import report: Unsupported keywords and element types are listed in a structured report, never dropped silently.
Units
Unit input: model.setUnits({ length: "mm", temperature: "C", pressure: "Pa" }). Only the quantities that are named change, and anything left out uses its SI default, so a model without units gives the same numbers as today.
Conversion at the edges of the core: Inputs are converted to SI, the model is solved in SI, and results come back in the units of the user. The physics and the solvers do not change. Coefficient functions keep receiving x and y in the units of the user.
Dimensional check: Every unit is reduced to its powers of mass, length, time and temperature, and compared with what the model expects. A mismatch stops the model before solving with a FEAScriptError, e.g. thermalConductivity: "W/m2" has the wrong dimension, expected W/(m*K).
Units in results: result reports the units in use, and plots and exports show them.
Plot grid: The density of the contour plot follows the size of the mesh instead of a fixed number of points per length unit, so a mesh gives the same picture in m and in mm.
Scope: Heat conduction, creeping flow and Euler-Bernoulli beams. The general form PDE and front propagation have no fixed physical units.
API
Config-object model: One object defines a model. The builder methods stay as a shorter way to write it. The object is plain JSON, so a model can be saved, shared as a link and passed to other tools.
Formula coefficients: Coefficients given as text, e.g. "if(x < 2, 10, 1)", evaluated without eval, so models in JSON can still have varying coefficients. JavaScript functions keep working.
One Result shape: The same fields for every model and every solver.
Boundaries by group name: Refer to a boundary by its name, e.g. "inlet", instead of its number, for every importer and for multi-block meshes.
Verification & Benchmarks
Multigrid and threads: Regression tests that check them against the direct solvers, and results that match with one thread and with many.
Scaling benchmarks: Solve time for each thread count, published next to the verification results.
Units: The same model solved in m and in mm gives the same result, and tests cover the dimensional check.
Importers: The same mesh read from .msh, .inp and .vtu gives the same solution.
Multi-block meshes: A rectangle split into several blocks gives the same solution as the same rectangle meshed as one block.
Config objects and formulas: A model written as a config object gives the same result as with the builder methods, and a coefficient given as a formula the same result as the same JavaScript function.
Around the Core
FEAScript-mcp: An MCP server, so AI assistants such as Claude Desktop can set up and solve models with FEAScript on your own machine. It has its own repository and versions, and will use the config object of 0.5.0.
Please feel free to
Propose new features or optimizations
Express interest in contributing to any of the above tasks
Help define priorities for the 0.5.0 release
Share which file formats and units matter most to you
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
While 0.4.0 is being finished on the
release/0.4.0-rcbranch (#114), this roadmap outlines the vision for FEAScript 0.5.0. The primary focus of this release is using the whole machine: multigrid and worker threads, so larger 2D problems stay fast. Version 0.5.0 also opens FEAScript to meshes from other tools, builds meshes from several structured blocks, adds physical units with a dimensional check before solving, and brings the API closer to a stable 1.0, with one config object that describes a whole model as plain JSON.Numerical Solution & Performance
SharedArrayBufferon cross-origin isolated pages and passed as messages otherwise. Assembly and the solvers talk to the threads through one small interface, so one thread and many threads run the same code.await model.solve({ threads: "auto" })replacessolve()andsolveAsync(), in the browser, in Node.js and inFEAScriptWorker. The old forms keep working, with a deprecation warning.SharedArrayBuffer, so they use every thread on any page, including CodePen.Meshing
"inlet"or"wall". An edge without a name gets a default one.numElementsX,maxX,numElementsYandmaxYkeep working as one block with boundaries"0"to"3", so existing scripts and pens run unchanged.Working with Other Tools
await importMesh(file, { format: "inp" }).importGmshMeshstays as an alias..inpmesh import (Abaqus and CalculiX): Written from the published keyword documentation, with test files that we build ourselves..vtufiles.Units
model.setUnits({ length: "mm", temperature: "C", pressure: "Pa" }). Only the quantities that are named change, and anything left out uses its SI default, so a model without units gives the same numbers as today.xandyin the units of the user.FEAScriptError, e.g.thermalConductivity: "W/m2" has the wrong dimension, expected W/(m*K).resultreports the units in use, and plots and exports show them.API
"if(x < 2, 10, 1)", evaluated withouteval, so models in JSON can still have varying coefficients. JavaScript functions keep working.Resultshape: The same fields for every model and every solver."inlet", instead of its number, for every importer and for multi-block meshes.Verification & Benchmarks
.msh,.inpand.vtugives the same solution.Around the Core
Please feel free to
All reactions