Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,12 @@ Thank you for your interest in contributing! FEAScript is in early development,
## Variable & File Naming

- Use [camelCase](https://en.wikipedia.org/wiki/Camel_case) formatting for variable names throughout the code
- All JavaScript source files in FEAScript end with the suffix `Script` before the `.js` extension (e.g., `loggingScript.js`, `meshGenerationScript.js`, `newtonRaphsonScript.js`). This is an explicit, project‑level stylistic choice to:
- Visually distinguish internal FEAScript modules from third‑party or external library files
- Keep historical and stylistic consistency across the codebase
- JavaScript source file names use camelCase (e.g., `logging.js`, `meshGeneration.js`, `newtonRaphson.js`)

### Exceptions

- Public entry file: `index.js` (standard entry point convention)
- Core model file: `FEAScript.js` (matches the library name; appending "Script" would be redundant)
- Core model file: `FEAScript.js` (matches the library name)

## File Structure

Expand Down Expand Up @@ -54,7 +52,7 @@ Example:
import { mathLibrary } from "math-package";

// Internal imports
import { relatedFunction } from "../utilities/helperScript.js";
import { relatedFunction } from "../utilities/helper.js";

/**
* Class to handle specific functionality
Expand Down
4 changes: 2 additions & 2 deletions dist/feascript.cjs.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/feascript.cjs.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/feascript.esm.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/feascript.esm.js.map

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/feascript.umd.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/feascript.umd.js.map

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import * as math from "mathjs";
global.math = math;

// Import FEAScript library
import { FEAScriptModel, importGmshQuadTri, printVersion } from "feascript";
import { FEAScriptModel, importGmshMesh, printVersion } from "feascript";

console.log("FEAScript Version:", printVersion);

Expand All @@ -42,7 +42,7 @@ async function main() {
};

// Parse the mesh data
const result = await importGmshQuadTri(mockFile);
const result = await importGmshMesh(mockFile);

// Define mesh configuration with the parsed result
model.setMeshConfig({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import * as math from "mathjs";
global.math = math;

// Import FEAScript library
import { FEAScriptModel, importGmshQuadTri, printVersion } from "feascript";
import { FEAScriptModel, importGmshMesh, printVersion } from "feascript";

console.log("FEAScript Version:", printVersion);

Expand All @@ -42,7 +42,7 @@ async function main() {
};

// Parse the mesh data
const result = await importGmshQuadTri(mockFile);
const result = await importGmshMesh(mockFile);

// Define mesh configuration with the parsed result
model.setMeshConfig({
Expand Down
20 changes: 10 additions & 10 deletions src/FEAScript.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@
*/

// Internal imports
import { newtonRaphson } from "./methods/newtonRaphsonScript.js";
import { solveLinearSystem } from "./methods/linearSystemSolverScript.js";
import { solveLinearSystemAsync } from "./methods/linearSystemSolverScript.js";
import { prepareMesh } from "./mesh/meshUtilsScript.js";
import { assembleFrontPropagationMat } from "./models/frontPropagationScript.js";
import { assembleGeneralFormPDEMat, assembleGeneralFormPDEFront } from "./models/generalFormPDEScript.js";
import { assembleHeatConductionMat, assembleHeatConductionFront } from "./models/heatConductionScript.js";
import { assembleCreepingFlowMatrix } from "./models/creepingFlowScript.js";
import { runFrontalSolver } from "./methods/frontalSolverScript.js";
import { basicLog, debugLog, warnLog, errorLog } from "./utilities/loggingScript.js";
import { newtonRaphson } from "./methods/newtonRaphson.js";
import { solveLinearSystem } from "./methods/linearSystemSolver.js";
import { solveLinearSystemAsync } from "./methods/linearSystemSolver.js";
import { prepareMesh } from "./mesh/meshUtils.js";
import { assembleFrontPropagationMat } from "./models/frontPropagation.js";
import { assembleGeneralFormPDEMat, assembleGeneralFormPDEFront } from "./models/generalFormPDE.js";
import { assembleHeatConductionMat, assembleHeatConductionFront } from "./models/heatConduction.js";
import { assembleCreepingFlowMatrix } from "./models/creepingFlow.js";
import { runFrontalSolver } from "./methods/frontalSolver.js";
import { basicLog, debugLog, warnLog, errorLog } from "./utilities/logging.js";

/**
* Class to implement finite element analysis in JavaScript
Expand Down
10 changes: 5 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
*/

export { FEAScriptModel } from "./FEAScript.js";
export { importGmshQuadTri } from "./readers/gmshReaderScript.js"; //TODO rename importGmshQuadTri to importGmsh
export { logSystem } from "./utilities/loggingScript.js";
export { plotSolution, plotInterpolatedSolution } from "./visualization/plotlyPlotScript.js";
export { importGmshMesh } from "./readers/gmshReader.js";
export { logSystem } from "./utilities/logging.js";
export { plotSolution, plotInterpolatedSolution } from "./visualization/plotlyPlot.js";
export {
plotSolutionVtk,
plotInterpolatedSolutionVtk,
Expand All @@ -19,6 +19,6 @@ export {
transformSolverOutputToVtkData,
transformSolverOutputToVTP,
transformSolverOutputToMLBuffers,
} from "./visualization/vtkPlotScript.js";
export { FEAScriptWorker } from "./workers/workerScript.js";
} from "./visualization/vtkPlot.js";
export { FEAScriptWorker } from "./workers/worker.js";
export const printVersion = "0.3.0 (RC)";
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

// Internal imports
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Class to handle basis functions and their derivatives based on element configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

// Internal imports
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Basic structure for the mesh
Expand Down
8 changes: 4 additions & 4 deletions src/mesh/meshUtilsScript.js → src/mesh/meshUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
*/

// Internal imports
import { BasisFunctions } from "./basisFunctionsScript.js";
import { Mesh1D, Mesh2D } from "./meshGenerationScript.js";
import { NumericalIntegration } from "../methods/numericalIntegrationScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { BasisFunctions } from "./basisFunctions.js";
import { Mesh1D, Mesh2D } from "./meshGeneration.js";
import { NumericalIntegration } from "../methods/numericalIntegration.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Function to prepare the mesh for finite element analysis
Expand Down
File renamed without changes.
20 changes: 10 additions & 10 deletions src/methods/frontalSolverScript.js → src/methods/frontalSolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
*/

// Internal imports
import { BasisFunctions } from "../mesh/basisFunctionsScript.js";
import { initializeFEA } from "../mesh/meshUtilsScript.js";
import { assembleHeatConductionFront } from "../models/heatConductionScript.js";
import { ThermalBoundaryConditions } from "../models/thermalBoundaryConditionsScript.js";
import { assembleFrontPropagationFront } from "../models/frontPropagationScript.js";
import { GenericBoundaryConditions } from "../models/genericBoundaryConditionsScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { BasisFunctions } from "../mesh/basisFunctions.js";
import { initializeFEA } from "../mesh/meshUtils.js";
import { assembleHeatConductionFront } from "../models/heatConduction.js";
import { ThermalBoundaryConditions } from "../models/thermalBoundaryConditions.js";
import { assembleFrontPropagationFront } from "../models/frontPropagation.js";
import { GenericBoundaryConditions } from "../models/genericBoundaryConditions.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

// Create object templates
const frontalData = {};
Expand Down Expand Up @@ -67,7 +67,7 @@ export function runFrontalSolver(assembleFront, meshData, boundaryConditions, op

// Handle Dirichlet-type boundary conditions differently based on which solver is being used
let dirichletBoundaryConditionsHandler;
// Solid heat transfer model (heatConductionScript solver)
// Solid heat transfer model (heatConduction solver)
if (assembleFront === assembleHeatConductionFront) {
dirichletBoundaryConditionsHandler = new ThermalBoundaryConditions(
boundaryConditions,
Expand All @@ -81,7 +81,7 @@ export function runFrontalSolver(assembleFront, meshData, boundaryConditions, op
frontalData.nodeConstraintCode,
frontalData.boundaryValues,
);
// Front propagation model (frontPropagationScript solver)
// Front propagation model (frontPropagation solver)
} else if (assembleFront === assembleFrontPropagationFront) {
dirichletBoundaryConditionsHandler = new GenericBoundaryConditions(
boundaryConditions,
Expand Down Expand Up @@ -252,7 +252,7 @@ function assembleElementContribution(meshData, FEAData, thermalBoundaryCondition
.map(() => Array(FEAData.nodesPerElement).fill(0));
let boundaryResidualVector = Array(FEAData.nodesPerElement).fill(0);

// heatConductionScript solver
// heatConduction solver
if (assembleFront === assembleHeatConductionFront) {
// Check if this element is on a Robin-type boundary
let isOnRobinTypeBoundary = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export function jacobiSolver(A, b, x0, options = {}) {

const n = A.length;
let x = [...x0];
let xNew = new Array(n);
let xNew = new Array(n).fill(0);

// Jacobi update: xNew[i] = (b[i] - sum(A[i][j] * x[j] for j != i)) / A[i][i]
for (let iter = 0; iter < maxIterations; iter++) {
Expand All @@ -44,8 +44,8 @@ export function jacobiSolver(A, b, x0, options = {}) {
maxDiff = Math.max(maxDiff, Math.abs(xNew[i] - x[i]));
}

// Copy new solution for the next iteration
x = [...xNew];
// Swap buffers to avoid allocating/copying every iteration
[x, xNew] = [xNew, x];

if (maxDiff < tolerance) {
return { solutionVector: x, iterations: iter + 1, converged: true };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
*/

// Internal imports
import { jacobiSolver } from "./jacobiSolverScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { jacobiSolver } from "./jacobiSolver.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";
import * as Comlink from "../vendor/comlink.mjs";

/**
Expand Down Expand Up @@ -72,7 +72,7 @@ export function solveLinearSystem(solverMethod, jacobianMatrix, residualVector,

// Helper to lazily create a default WebGPU compute engine (Comlink + worker)
async function createDefaultComputeEngine() {
const worker = new Worker(new URL("../workers/webgpuWorkerScript.js", import.meta.url), {
const worker = new Worker(new URL("../workers/webgpuWorker.js", import.meta.url), {
type: "module",
});
const computeEngine = Comlink.wrap(worker);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
*/

// Internal imports
import { euclideanNorm } from "../methods/euclideanNormScript.js";
import { solveLinearSystem } from "./linearSystemSolverScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { runFrontalSolver } from "./frontalSolverScript.js";
import { assembleFrontPropagationFront } from "../models/frontPropagationScript.js";
import { euclideanNorm } from "../methods/euclideanNorm.js";
import { solveLinearSystem } from "./linearSystemSolver.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";
import { runFrontalSolver } from "./frontalSolver.js";
import { assembleFrontPropagationFront } from "../models/frontPropagation.js";

/**
* Function to solve a system of non-linear equations using the Newton-Raphson method
Expand Down Expand Up @@ -53,7 +53,7 @@ export function newtonRaphson(assembleMat, context = {}) {
while (iterations < maxIterations && !converged) {
// Update solution
for (let i = 0; i < solutionVector.length; i++) {
solutionVector[i] = Number(solutionVector[i]) + Number(deltaX[i]);
solutionVector[i] = solutionVector[i] + deltaX[i];
}

// Check if using frontal solver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import * as ti from "../vendor/taichi.esm.js";

// Internal imports
import { debugLog, errorLog } from "../utilities/loggingScript.js";
import { debugLog, errorLog } from "../utilities/logging.js";

/**
* Class to provide GPU-accelerated Jacobi solver using Taichi.js/WebGPU
Expand Down
10 changes: 5 additions & 5 deletions src/models/creepingFlowScript.js → src/models/creepingFlow.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
*/

// Internal imports
import { performIsoparametricMapping2D } from "../mesh/meshUtilsScript.js";
import { BasisFunctions } from "../mesh/basisFunctionsScript.js";
import { NumericalIntegration } from "../methods/numericalIntegrationScript.js";
import { FlowBoundaryConditions } from "./flowBoundaryConditionsScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { performIsoparametricMapping2D } from "../mesh/meshUtils.js";
import { BasisFunctions } from "../mesh/basisFunctions.js";
import { NumericalIntegration } from "../methods/numericalIntegration.js";
import { FlowBoundaryConditions } from "./flowBoundaryConditions.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Function to assemble the Jacobian matrix and residual vector for the steady creeping flow (Stokes) model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

// Internal imports
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Class to handle flow boundary conditions application for Stokes and Navier-Stokes models
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
*/

// Internal imports
import { GenericBoundaryConditions } from "./genericBoundaryConditionsScript.js";
import { GenericBoundaryConditions } from "./genericBoundaryConditions.js";
import {
initializeFEA,
performIsoparametricMapping1D,
performIsoparametricMapping2D,
} from "../mesh/meshUtilsScript.js";
import { basicLog, debugLog } from "../utilities/loggingScript.js";
} from "../mesh/meshUtils.js";
import { basicLog, debugLog } from "../utilities/logging.js";

// Base viscous term that remains when eikonal equation is fully activated
const baseEikonalViscousTerm = 1e-2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
*/

// Internal imports
import { initializeFEA, performIsoparametricMapping1D } from "../mesh/meshUtilsScript.js";
import { GenericBoundaryConditions } from "./genericBoundaryConditionsScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { initializeFEA, performIsoparametricMapping1D } from "../mesh/meshUtils.js";
import { GenericBoundaryConditions } from "./genericBoundaryConditions.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Function to assemble the Jacobian matrix and residuals vector for the general form PDE model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

// Internal imports
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Class to handle generic boundary conditions application
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import {
initializeFEA,
performIsoparametricMapping1D,
performIsoparametricMapping2D,
} from "../mesh/meshUtilsScript.js";
import { ThermalBoundaryConditions } from "./thermalBoundaryConditionsScript.js";
import { basicLog, debugLog } from "../utilities/loggingScript.js";
} from "../mesh/meshUtils.js";
import { ThermalBoundaryConditions } from "./thermalBoundaryConditions.js";
import { basicLog, debugLog } from "../utilities/logging.js";

/**
* Function to assemble the Jacobian matrix and residuals vector for the solid heat transfer model
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

// Internal imports
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Class to handle thermal boundary conditions application
Expand Down
6 changes: 3 additions & 3 deletions src/readers/gmshReaderScript.js → src/readers/gmshReader.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
*/

// Internal imports
import { basicLog, debugLog, errorLog } from "../utilities/loggingScript.js";
import { basicLog, debugLog, errorLog } from "../utilities/logging.js";

/**
* Function to import mesh data from Gmsh (.msh v4.1) containing quadrilateral and triangular elements
* @param {File} file
* @returns {object}
*/
const importGmshQuadTri = async (file) => {
const importGmshMesh = async (file) => {
let result = {
nodesXCoordinates: [],
nodesYCoordinates: [],
Expand Down Expand Up @@ -283,4 +283,4 @@ const importGmshQuadTri = async (file) => {
return result;
};

export { importGmshQuadTri };
export { importGmshMesh };
Loading
Loading