Overview

Solidification Front Propagation in a 2D Domain Tutorial (Multi-threaded)

This page demonstrates solving the solidification front propagation problem using FEAScript in a web worker for improved browser responsiveness. For the mathematical formulation and theory, see the basic tutorial.

Web Worker implementation

The code below shows how to use FEAScript with a web worker to solve the eikonal equation for front propagation. This approach moves the computation to a separate thread, preventing the UI from freezing during complex calculations. The solution is plotted as a 2D contour.

<body>
  <!-- ...body region... -->
  <script type="module">
    import {
      FEAScriptWorker,
      plotSolution,
      printVersion,
    } from "https://core.feascript.com/src/index.js";

    window.addEventListener("DOMContentLoaded", async () => {
      console.log("FEAScript version:", printVersion);

      // 1. Create the model in a web worker and select the physics
      const model = new FEAScriptWorker();
      await model.ping(); // Wait until the worker is ready
      await model.setModelConfig("frontPropagationScript");

      // 2. Define the mesh
      await model.setMeshConfig({
        meshDimension: "2D",
        elementOrder: "quadratic",
        numElementsX: 12,
        numElementsY: 8,
        maxX: 4,
        maxY: 2,
      });

      // 3. Apply the boundary conditions
      await model.addBoundaryCondition("0", ["constantValue", 0]); // Bottom: initial front
      await model.addBoundaryCondition("1", ["constantValue", 0]); // Left: initial front
      await model.addBoundaryCondition("2", ["zeroGradient"]);     // Top
      await model.addBoundaryCondition("3", ["constantValue", 0]); // Right: initial front

      // 4. Solve
      await model.setSolverMethod("lusolve");
      const result = await model.solve();

      // 5. Plot the results
      const modelInfo = await model.getModelInfo();
      plotSolution(modelInfo, result, "contour", "resultsCanvas");

      // 6. Terminate the worker
      model.terminate();
    });
  </script>
  <!-- ...rest of body region... -->
</body>

Results

Below is the 2D contour plot of the computed front propagation. The contour values represent the arrival time of the front at each position. This plot is generated in real time using FEAScript.

Solving...