Metadata-Version: 2.5
Name: PyFEA
Version: 0.0.3
Summary: An intermediate representation system for multi-physics problems.
Project-URL: Homepage, https://github.com/Bowley-Systems/PyFEA
Project-URL: Bug Tracker, https://github.com/Bowley-Systems/PyFEA/issues
Author-email: William Bowley <wgrantbowley@gmail.com>
Maintainer-email: William Bowley <wgrantbowley@gmail.com>
License: MIT License
        
        Copyright (c) 2026 Bowley Systems
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: IR,finite element,physics,solver
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.8
Requires-Dist: numpy
Requires-Dist: picounits
Description-Content-Type: text/markdown

<!--
Color palette:
#219EBC -> cool, mid-tone cerulean blue 
#ffb703 -> warm, golden-amber yellow 

Might seem crazy, but it's because I am building the engine 
for which the next 10–20 years of hardware research for
myself will sit upon.

- William Bowley 11th of August, 2026

P.S: Thanks for downloading the PyFEA repository `▽`ʃ♡
-->

<p align="center">
  <img src="https://raw.githubusercontent.com/Bowley-Systems/PyFEA/refs/heads/main/media/logo.png" alt="pyFea" style="max-width:600px;"> 
</p>
<p align="center">An intermediate representation system for multi-physics problems.</p>
<p align="center">
  Define Topology, Attach Metadata, Solve.
  <br>
  Keep consistent representation across physics.
</p>

--- 

![License](https://img.shields.io/badge/License-MIT-219EBC?style=flat-square)
![Python Version](https://img.shields.io/badge/Python-3.10%2B-ffb703?style=flat-square)
![Status](https://img.shields.io/badge/Status-Active-219EBC?style=flat-square)

> [!IMPORTANT]
> This README contains the architectural and conceptual vision of `PyFEA`. Version `0.1` is intended to be released on `December 11, 2026`.

## Overview

PyFEA is a solver-adaptor engine that functions as an intermediate representation system for computational engineering. 
It creates a consistent representation across domains because continuous problems should use continuous tooling. 

> [!IMPORTANT]
> Objectives:
> - Allow for the same methodology across domains: define, attach, and solve. 
> - Allow for solver-adaptors across `planar`, `axisymmetric`, and `full 3D` solutions using `CSG`.
> - Support integration with solvers across finite element, lumped parameters, and SPICE models.
> - Restrict all inputs and outputs to dimensionally consistent units.

## What is a Solver Adaptor?

An abstract boundary between a solver and `PyFEA`, it allows `PyFEA` to orchestrate the problem while the solver computes the solution.

For example, if you wanted to simulate an axial flux motor, it would require a 3D magnetostatic solver and perhaps a 
circuit solver for the `triple half-bridge` driver.

```
SPICE Circuit Solver
        ↓
3D Magnetostatic Solver
        ↓
Mechanical Integrator
         ↺
```

This is much easier than writing one large solver for `axial flux motors`. However, this isn't the only benefit. 
The main benefit is that a new arbitrary problem becomes a single custom adaptor away from solving.

For example, if you wanted to simulate an `Astrospheric ion engine`, it would require a 3D electromagnetic solver and a 3D fluid dynamics solver. 
But what about ionization? This is where a custom solver-adaptor comes in — you can write your own ionization solver and the pipeline is complete.

```
3D Electromagnetic Solver
          ↓
3D Fluid Dynamics Solver
          ↓
Custom Ionization Solver
          ↺
```

## High-Level Architecture

PyFEA has a series of foundational dependencies that allow the engine itself to stay streamlined.

```
UIV/UT (DSL) → PicoUnits (Runtime Analysis) → PicoMaterials (Material Library) → PyFEA (Solver-Adaptors)
```


Unit-Informed Values (`.uiv`) is the custom domain-specific language for parameter and material files. PicoUnits interprets the `.uiv` 
file format and performs runtime dimensional analysis. Using `.uiv` and PicoUnits, PicoMaterials stores material data and passes material 
assumptions to PyFEA, which orchestrates the solver adaptors to solve the problem and returns the assumption tree.

## Installation

Until release, this only installs the overview page and related files:

```bash
pip install pyfea
```

## Documentation

> [!important]
> `Internal Documentation` refers to engineering logs, problem-solving notes, and unpolished application notes. For polished documentation, refer to `External Documentation`.

All internal documentation can be found within this repo's [issues](https://github.com/Bowley-Systems/PyFEA/issues).