FEAScript: Heat Conduction in a Two-Dimensional Fin Example

by nikoscham

HTML

<!doctype html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>FEAScript: Heat Conduction in a Two-Dimensional Fin Example</title>

    <!-- Load Math.js and Plotly.js libraries -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.0.0/math.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/plotly.js/2.27.0/plotly.min.js"></script>

    <!-- Link to the CSS files -->
    <link
      href="https://feascript.com/FEAScript-website.css"
      rel="stylesheet"
      type="text/css"
    />
    <link
      href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"
      rel="stylesheet"
    />
  </head>

  <body>
    <h1>Heat Conduction in a Two-Dimensional Fin Example</h1>
    <p>
      This example demonstrates solving a steady-state heat transfer problem in
      a 2D rectangular domain (in case of using a phone please turn it to
      horizontal position to see the results)
    </p>
    <div id="solutionPlot"></div>
    <p>
      The mesh configuration and boundary conditions are defined directly within
      the JavaScript code in this example. Detailed instructions for this
      example can be found in the corresponding
      <a
        href="https://feascript.com/tutorials/HeatConduction2DFin.html"
        target="_blank"
        >FEAScript tutorial</a
      >.
    </p>
  </body>
</html>

JavaScript

// Load FEAScript library
import {
  FEAScriptModel,
  plotSolution,
} from "https://feascript.github.io/FEAScript-core/src/index.js"

const solutionPlot = document.getElementById("solutionPlot")

// Create a new FEAScript model
const model = new FEAScriptModel()

// Set solver configuration
model.setSolverConfig("solidHeatTransferScript")

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

// Define boundary conditions
model.addBoundaryCondition("0", ["constantTemp", 200])
model.addBoundaryCondition("1", ["symmetry"])
model.addBoundaryCondition("2", ["convection", 1, 20])
model.addBoundaryCondition("3", ["constantTemp", 200])

// Solve the problem and get the solution
const { solutionVector, nodesCoordinates } = model.solve()

// Plot the solution as a 2D contour plot
plotSolution(
  solutionVector,
  nodesCoordinates,
  model.solverConfig,
  model.meshConfig.meshDimension,
  "contour",
  "solutionPlot",
)