Skip to main content

1D Finite-Difference/Volume Split Newton Solver

Project description

SplitFXM

Downloads Coverage DOI

img

1D Finite-Difference or Finite-Volume using asymmetric stencils with adaptive mesh refinement and steady-state solver using Newton and Split-Newton approach

What does 'split' mean?

The system is divided into two and for ease of communication, let's refer to first set of variables as "outer" and the second as "inner".

  • Holding the outer variables fixed, Newton iteration is performed till convergence using the sub-Jacobian

  • One Newton step is performed for the outer variables with inner held fixed (using its sub-Jacobian)

  • This process is repeated till convergence criterion is met for the full system (same as in Newton)

How to install and execute?

Just run

pip install splitfxm

There is an examples folder that contains a test model - Advection-Diffusion

You can define your own equations by simply creating a derived class from Model and adding to the _equations using existing or custom equations!

A basic driver program is as follows

from splitfxm.domain import Domain
from splitfxm.simulation import Simulation
from splitfxm.schemes import default_scheme
from splitfxm.visualize import draw

# Define the problem
method = 'FDM'
m = AdvectionDiffusion(c=0.2, nu=0.001, method=method)
d = Domain.from_size(20, 1, 1, ["u", "v", "w"]) # nx, nb_left, nb_right, variables
ics = {"u": "gaussian", "v": "rarefaction", "w": "tophat"}
bcs = {
    "u": {
        "left": "periodic",
        "right": "periodic"
    },
    "v": {
        "left": {"dirichlet": 3},
        "right": {"dirichlet": 4}
    },
    "w": {
        "left": {"dirichlet": 2},
        "right": "periodic"
    }
}
s = Simulation(d, m, ics, bcs, default_scheme(method))


# Advance in time or to steady state
s.evolve(t_diff=0.1)
bounds = [[-1., -2., 0.], [5., 4., 3.]]
iter = s.steady_state(split=True, split_loc=1, bounds=bounds)

# Visualize
draw(d, "label")

How to build from source?

Since v0.4.0, SplitFXM utilizes Cython for accelerated computation. To build from source, you will need to install Cython and run the following command:

python setup.py build_ext --inplace

Run benchmark

There is a benchmark that is included, which compares the time it takes to generate both a sparse and dense Jacobian. The results are as follows:

For N=250,

Method Time
Dense 20 seconds
Sparse ~0.6 seconds

The benchmark can be executed from the parent folder using the command

python -m pytest -s benchmark

How to run tests?

To run the tests, execute the following command from the parent folder:

python -m pytest tests

You can use the -s flag to show print outputs of the tests

How to get coverage?

To get coverage, execute the following command from the parent folder:

python -m pytest --cov=splitfxm --cov-report <option> tests

The option can be related to showing covered/missed lines or specifying the output format of the report. For example, to get a line-by-line report, use the following command:

python -m pytest --cov=splitfxm --cov-report term-missing tests

Whom to contact?

Please direct your queries to gpavanb1 for any questions.

Acknowledgements

Special thanks to Cantera and WENO-Scalar for serving as an inspiration for code architecture.

Citing

If you are using SplitFXM in any scientific work, please make sure to cite as follows

@software{pavan_b_govindaraju_2024_13882261,
  author       = {Pavan B Govindaraju},
  title        = {gpavanb1/SplitFXM: v0.4.0},
  month        = oct,
  year         = 2024,
  publisher    = {Zenodo},
  version      = {v0.4.0},
  doi          = {10.5281/zenodo.13882261},
  url          = {https://doi.org/10.5281/zenodo.13882261}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

SplitFXM-0.4.6.tar.gz (349.8 kB view details)

Uploaded Source

File details

Details for the file SplitFXM-0.4.6.tar.gz.

File metadata

  • Download URL: SplitFXM-0.4.6.tar.gz
  • Upload date:
  • Size: 349.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.1

File hashes

Hashes for SplitFXM-0.4.6.tar.gz
Algorithm Hash digest
SHA256 40845ac95df289d65c15b534d085ddc0668faf846bf7599da0452954276f04e1
MD5 45db43a89832d72bb923e27228691eac
BLAKE2b-256 80d4a86367083e72115d5dc4e2312619630639fd4f408ea0e4fd85c6f3cb1317

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page