Name | PyCCX JSON |
Version |
0.2.0
JSON |
| download |
home_page | None |
Summary | Simulation and FEA environment for Python built upon Calculix and GMSH |
upload_time | 2025-08-17 20:30:49 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | Copyright (c) 2025, Luke Parry
Copyright (c) 2025, Luktug Ltd.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
keywords |
calculix
fea
finite element analysis
gmsh
simulation
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
PyCCX - Python Library for Calculix
=======================================
.. image:: https://github.com/drlukeparry/pyccx/workflows/Python%20application/badge.svg
:target: https://github.com/drlukeparry/pyccx/actions
.. image:: https://readthedocs.org/projects/pyccx/badge/?version=latest
:target: https://pyccx.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
.. image:: https://badge.fury.io/py/PyCCX.svg
:target: https://badge.fury.io
.. image:: https://img.shields.io/badge/Made%20with-Python-1f425f.svg
:target: https://www.python.org/
.. image:: https://img.shields.io/pypi/l/pyccx.svg
:target: https://pypi.python.org/pypi/pyccx/
.. image:: https://img.shields.io/pypi/pyversions/pyccx.svg
:target: https://pypi.python.org/pypi/pyccx/
PyCCX - a library for creating and running 3D FEA simulations using the opensource Calculix FEA Package.
The aim of this project was to provide a framework for implemented 3D FEA Analysis using the opensource
`Calculix <http://www.calculix.de>`_ solver. The analysis is complimented by use of the recent introduction of the
`GMSH-SDK <http://https://gitlab.onelab.info/gmsh/gmsh/api>`_ , an extension to `GMSH <http://gmsh.info/>`_ to provide
API bindings for different programming languages by the project authors to provide sophisticated 3D FEA mesh
generation outside of the GUI implementation.
This project aims to provide an integrated approach for generating full
2D and 3D structural and thermal FEA analysis for use in research, development and prototyping all inside a
Python environment. The functionality targets the delivery of automated scripted approaches for performing FEA simulations,
in particular for use assessing the sensitivity of design and material inputs on the response of a system structure, that
can be used as part of parametric optimisation studies.
This intends to remove requirement to setup each analysis manually using a GUI such as prepromax or GMSH.
Along with setting up and processing the analysis, numerous convenience functions are included to consistently interface
between both the Calculix and GMSH functionality within a single python environment.
Structure
##############
PyCCX framework consists of classes for specifying common components on the pre-processing stage, including the following
common FE workflow for performing a simulation:
* Generation of both 2D and 3D compatible analysis meshes for use with Calculix via GMSH
* Creation and assignment of thermal and mechanical boundary conditions for use in analyses
* Creation of multiple time (in)-dependent load cases
* Creation and assignment of multiple material models and element types through a single analysis
* Control and monitoring the Calculix simulation execution
* Processing and extraction of results obtained from Calculix
A meshing infrastructure provides an interface with GMSH for performing the meshing routines and for associating
physical boundary conditions with the elements/faces generated from geometrical entities obtained from CAD models,
typically by importing .step files.
The simulation class assembles the mesh and corresponding mesh identifier sets (Element, Nodal and Surfaces)
in conjunction with the applied boundary conditions for each specified load-case within an analysis. The analysis
is then exported as a Calculix input deck, and then performs the execution to the Calculix solver. The simulation
can be additionally monitored within the Python environment.
The results obtained upon completion of the analysis can be processes, to extract individual nodal and elemental quantities
predicted in the analysis output. The results can also be exported to an unstructured VTK format for visualisation in
Paraview.
Currently the analysis is unit-less, therefore the user should ensure that all constant, material parameters, boundary
conditions, and geometric lengths are consistent - by default GMSH assumes 'mm' units when importing BRep CAD models.
Current Features
******************
Meshing:
---------
Meshing is performed using the GMSH-SDK, which provides a Python interface to the GMSH meshing library. The features
within pyccx provided higher-level functionality building across existing GMSH functionality. The library mainly
facilitates setting up the analysis consistently within a single environment, such as mapping geometrical FE elements
into compatible Calculix types with consistent nodal ordering. Additional features available for meshing include:
* Integration with GMSH for generation 3D FEA Meshes
* Cleaning and merging of CAD assemblies using internal functionality provided by GMSH
* Creation and assignment of NodeSet, ElementSet, SurfaceSet from mesh features applied for boundary conditions
* Attachment of boundary conditions to geometrical CAD entities via GMSH (native .step import supported via OCC)
FEA Capabilities:
-------------------
* **Boundary Conditions**: (Acceleration, Convection, Fixed Displacements, Forces, Fluxes, Pressure, Radiation)
* **Loadcase Types** (Structural Static, Thermal, Coupled Thermo-Mechanical)
* **Materials** (Non-linear Elasto-Plastic Material) with user defined stress-strain curves and physical properties
* **Results** (Selection of exported results for nodal and element data per loadcase)
* **Analysis Types** configurable solver control (:auto-incrementing timestep, non-linear analysis)
Results Processing:
----------------------
* Element and Nodal Results can be obtained across each timesteps
* Results can be processed and visualised using the `pyccx.results` module
* Extraction of node and element results directly from the Calculix .frd and datafile
* Export of results to VTK file format for visualisation directly in Paraview
Installation
*************
PyCCX is multi-platform as a source based pythonpackage. This can be installed along with dependencies for GMSH automatically
using the following commands:
.. code:: bash
pip install gmsh
pip install pyccx
alternatively, the package can be installed using the uv library:
.. code:: bash
uv pip install gmsh
uv pip install pyccx
Calculix Solver
*****************
Depending on your environment, you will need to install the latest version of Calculix. This can be done through
conda-forge `calculix package <https://anaconda.org/conda-forge/calculix>`_ in the Anaconda distribution,
.. code:: bash
conda install -c conda-forge calculix
However, it is suggested that the most reliable mode is downloading the latest distribution of Calculix directly.
**Windows:**
The solver be separately obtained from within the distribution of `prepromax <https://prepomax.fs.um.si>`_
**Linux:**
The latest version of Calculix can be installed from the packages available within your linux distribution
**Mac OS X:**
Calculix can be installed using the `Homebrew <https://brew.sh/>`_ package manager. This requires the appropriate XCode
compiler environment to be installed. Once this is done, Calculix can be installed using the following command:
.. code:: bash
brew tap costerwi/homebrew-calculix
brew install calculix-ccx
The path of the installed Calculix solver executable should be obtained, which is dependent on the configuration of the
brew installation.
Usage
*************
The Calculix solver executable needs to be available in the system path, or the path to the executable needs to be manually
specified. Across all platforms the direct path of the calculix solver executable needs to be initialised before any
further use.
.. code:: python
from pyccx.core import Simulation
# Set the path for Calculix in Windows
Simulation.setCalculixPath('Path')
The following code excerpt shows part of an example for creating and running a steady state thermal analysis of model
using PyCCX of an existing mesh generated using the `pyccx.mesh.mesher` class.
.. code:: python
from pyccx.core import DOF, ElementSet, NodeSet, SurfaceSet, Simulation
from pyccx.results import ElementResult, NodalResult, ResultProcessor
from pyccx.loadcase import LoadCase, LoadCaseType
from pyccx.material import ElastoPlasticMaterial
# Set the path for Calculix in Windows
Simulation.setCalculixPath('Path')
# Create a Simulation object based on the supplied mesh model (defined separately)
analysis = Simulation(myMeshModel)
# Optionally set the working the base working directory
analysis.setWorkingDirectory('.')
# Create an ElementSet and NodeSet for the entire volume of named model ('PartA')
myMeshModel.setEntityName((Ent.Volume, 1), 'PartA') # Set the name of the GMSH volume to 'PartA'
volElSet = ElementSet('volElSet', myMeshModel.getElementIds((Ent.Volume,1)))
volNodeSet = NodeSet('VolumeNodeSet', myMeshModel.getNodesFromVolumeByName('PartA'))
analysis.initialConditions.append({'type': 'temperature', 'set': 'VolumeNodeSet', 'value': 0.0})
# Create a thermal load case and set the timesettings
thermalLoadCase = LoadCase('Thermal_Load_Case')
# Set the loadcase type to thermal - eventually this will be individual analysis classes with defaults
thermalLoadCase.setLoadCaseType(LoadCaseType.THERMAL)
# Set the thermal analysis to be a steady state simulation
thermalLoadCase.isSteadyState = True
thermalLoadCase.setTimeStep(0.5, 0.5, 5.0)
# Attach the nodal and element result options to each loadcase
# Set the nodal and element variables to record in the results (.frd) file
nodeThermalPostResult = NodalResult('volNodeSet')
nodeThermalPostResult.temperature = True
elThermalPostResult = ElementResult('Volume1')
elThermalPostResult.heatFlux = True
# Add the result configurations to the loadcase
thermalLoadCase.resultSet = [nodeThermalPostResult, elThermalPostResult]
# Set thermal boundary conditions for the loadcase using specific NodeSets
thermalLoadCase.boundaryConditions.append(
{'type': 'fixed', 'nodes': 'surfaceNodesA', 'dof': [DOF.T], 'value': [60]})
thermalLoadCase.boundaryConditions.append(
{'type': 'fixed', 'nodes': 'surfaceNodesB', 'dof': [DOF.T], 'value': [20]})
# Material
# Add a elastic material and assign it to the volume.
# Note ensure that the units correctly correspond with the geometry length scales
steelMat = ElastoPlasticMaterial('Steel')
steelMat.E = 210000. # [MPa] Young's Modulus
steelMat.alpha_CTE = [25e-6, 23e-6, 24e-6] # Thermal Expansion Coefficient
steelMat.density = 1.0 # Density
steelMat.cp = 1.0 # Specific Heat
steelMat.k = 1.0 # Thermal Conductivity
# The material and material type is assigned to the elements across the part
analysis.materialAssignments = [
SolidMaterialAssignment("solid_material", elementSet=volElSet, material=steelMat)
]
# Set the loadcases used in sequential order
analysis.loadCases = [thermalLoadCase]
# Run the analysis #
analysis.run()
# Open the results file ('input') is currently the file that is generated by PyCCX
results = analysis.results()
results.load()
# Export the results to VTK format as a significant timestep for post-processing
import pyccx.utils.exporters as exporters
exporters.exportToVTK('result.vtu', results, inc=-1)
The basic usage is split between the meshing facilities provided by GMSH and analysing a problem using the Calculix
Solver. Further documented examples are provided in `examples <https://github.com/drlukeparry/pyccx/tree/master/examples>`_ .
The current changelog is found in the `CHANGELOG <https://github.com/drlukeparry/pyccx/tree/dev/CHANGELOG.md'>`_ .
Raw data
{
"_id": null,
"home_page": null,
"name": "PyCCX",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "Calculix, FEA, Finite Element Analysis, GMSH, Simulation",
"author": null,
"author_email": "Luke Parry <dev@lukeparry.uk>, Luktug <contact@luktug.co.uk>",
"download_url": "https://files.pythonhosted.org/packages/bc/f9/a0804301091222ccdee5c5a363e5dfa9f6d59cb546e2127c95249fad258e/pyccx-0.2.0.tar.gz",
"platform": null,
"description": "PyCCX - Python Library for Calculix\n=======================================\n\n.. image:: https://github.com/drlukeparry/pyccx/workflows/Python%20application/badge.svg\n :target: https://github.com/drlukeparry/pyccx/actions\n.. image:: https://readthedocs.org/projects/pyccx/badge/?version=latest\n :target: https://pyccx.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n.. image:: https://badge.fury.io/py/PyCCX.svg\n :target: https://badge.fury.io\n.. image:: https://img.shields.io/badge/Made%20with-Python-1f425f.svg\n :target: https://www.python.org/\n.. image:: https://img.shields.io/pypi/l/pyccx.svg\n :target: https://pypi.python.org/pypi/pyccx/\n.. image:: https://img.shields.io/pypi/pyversions/pyccx.svg\n :target: https://pypi.python.org/pypi/pyccx/\n\nPyCCX - a library for creating and running 3D FEA simulations using the opensource Calculix FEA Package.\n\nThe aim of this project was to provide a framework for implemented 3D FEA Analysis using the opensource\n`Calculix <http://www.calculix.de>`_ solver. The analysis is complimented by use of the recent introduction of the\n`GMSH-SDK <http://https://gitlab.onelab.info/gmsh/gmsh/api>`_ , an extension to `GMSH <http://gmsh.info/>`_ to provide\nAPI bindings for different programming languages by the project authors to provide sophisticated 3D FEA mesh\ngeneration outside of the GUI implementation.\n\nThis project aims to provide an integrated approach for generating full\n2D and 3D structural and thermal FEA analysis for use in research, development and prototyping all inside a\nPython environment. The functionality targets the delivery of automated scripted approaches for performing FEA simulations,\nin particular for use assessing the sensitivity of design and material inputs on the response of a system structure, that\ncan be used as part of parametric optimisation studies.\n\nThis intends to remove requirement to setup each analysis manually using a GUI such as prepromax or GMSH.\n\nAlong with setting up and processing the analysis, numerous convenience functions are included to consistently interface\nbetween both the Calculix and GMSH functionality within a single python environment.\n\nStructure\n##############\n\nPyCCX framework consists of classes for specifying common components on the pre-processing stage, including the following\ncommon FE workflow for performing a simulation:\n\n* Generation of both 2D and 3D compatible analysis meshes for use with Calculix via GMSH\n* Creation and assignment of thermal and mechanical boundary conditions for use in analyses\n* Creation of multiple time (in)-dependent load cases\n* Creation and assignment of multiple material models and element types through a single analysis\n* Control and monitoring the Calculix simulation execution\n* Processing and extraction of results obtained from Calculix\n\nA meshing infrastructure provides an interface with GMSH for performing the meshing routines and for associating\nphysical boundary conditions with the elements/faces generated from geometrical entities obtained from CAD models,\ntypically by importing .step files.\n\nThe simulation class assembles the mesh and corresponding mesh identifier sets (Element, Nodal and Surfaces)\nin conjunction with the applied boundary conditions for each specified load-case within an analysis. The analysis\nis then exported as a Calculix input deck, and then performs the execution to the Calculix solver. The simulation\ncan be additionally monitored within the Python environment.\n\nThe results obtained upon completion of the analysis can be processes, to extract individual nodal and elemental quantities\npredicted in the analysis output. The results can also be exported to an unstructured VTK format for visualisation in\nParaview.\n\nCurrently the analysis is unit-less, therefore the user should ensure that all constant, material parameters, boundary\nconditions, and geometric lengths are consistent - by default GMSH assumes 'mm' units when importing BRep CAD models.\n\nCurrent Features\n******************\n\nMeshing:\n---------\nMeshing is performed using the GMSH-SDK, which provides a Python interface to the GMSH meshing library. The features\nwithin pyccx provided higher-level functionality building across existing GMSH functionality. The library mainly\nfacilitates setting up the analysis consistently within a single environment, such as mapping geometrical FE elements\ninto compatible Calculix types with consistent nodal ordering. Additional features available for meshing include:\n\n* Integration with GMSH for generation 3D FEA Meshes\n* Cleaning and merging of CAD assemblies using internal functionality provided by GMSH\n* Creation and assignment of NodeSet, ElementSet, SurfaceSet from mesh features applied for boundary conditions\n* Attachment of boundary conditions to geometrical CAD entities via GMSH (native .step import supported via OCC)\n\nFEA Capabilities:\n-------------------\n\n* **Boundary Conditions**: (Acceleration, Convection, Fixed Displacements, Forces, Fluxes, Pressure, Radiation)\n* **Loadcase Types** (Structural Static, Thermal, Coupled Thermo-Mechanical)\n* **Materials** (Non-linear Elasto-Plastic Material) with user defined stress-strain curves and physical properties\n* **Results** (Selection of exported results for nodal and element data per loadcase)\n* **Analysis Types** configurable solver control (:auto-incrementing timestep, non-linear analysis)\n\nResults Processing:\n----------------------\n* Element and Nodal Results can be obtained across each timesteps\n* Results can be processed and visualised using the `pyccx.results` module\n* Extraction of node and element results directly from the Calculix .frd and datafile\n* Export of results to VTK file format for visualisation directly in Paraview\n\n\nInstallation\n*************\nPyCCX is multi-platform as a source based pythonpackage. This can be installed along with dependencies for GMSH automatically\nusing the following commands:\n\n.. code:: bash\n\n pip install gmsh\n pip install pyccx\n\nalternatively, the package can be installed using the uv library:\n\n.. code:: bash\n\n uv pip install gmsh\n uv pip install pyccx\n\nCalculix Solver\n*****************\n\nDepending on your environment, you will need to install the latest version of Calculix. This can be done through\nconda-forge `calculix package <https://anaconda.org/conda-forge/calculix>`_ in the Anaconda distribution,\n\n.. code:: bash\n\n conda install -c conda-forge calculix\n\nHowever, it is suggested that the most reliable mode is downloading the latest distribution of Calculix directly.\n\n**Windows:**\n\nThe solver be separately obtained from within the distribution of `prepromax <https://prepomax.fs.um.si>`_\n\n**Linux:**\n\nThe latest version of Calculix can be installed from the packages available within your linux distribution\n\n**Mac OS X:**\n\nCalculix can be installed using the `Homebrew <https://brew.sh/>`_ package manager. This requires the appropriate XCode\ncompiler environment to be installed. Once this is done, Calculix can be installed using the following command:\n\n.. code:: bash\n\n brew tap costerwi/homebrew-calculix\n brew install calculix-ccx\n\nThe path of the installed Calculix solver executable should be obtained, which is dependent on the configuration of the\nbrew installation.\n\nUsage\n*************\n\nThe Calculix solver executable needs to be available in the system path, or the path to the executable needs to be manually\nspecified. Across all platforms the direct path of the calculix solver executable needs to be initialised before any\nfurther use.\n\n.. code:: python\n\n from pyccx.core import Simulation\n\n # Set the path for Calculix in Windows\n Simulation.setCalculixPath('Path')\n\n\nThe following code excerpt shows part of an example for creating and running a steady state thermal analysis of model\nusing PyCCX of an existing mesh generated using the `pyccx.mesh.mesher` class.\n\n.. code:: python\n\n from pyccx.core import DOF, ElementSet, NodeSet, SurfaceSet, Simulation\n from pyccx.results import ElementResult, NodalResult, ResultProcessor\n from pyccx.loadcase import LoadCase, LoadCaseType\n from pyccx.material import ElastoPlasticMaterial\n\n # Set the path for Calculix in Windows\n Simulation.setCalculixPath('Path')\n\n # Create a Simulation object based on the supplied mesh model (defined separately)\n analysis = Simulation(myMeshModel)\n\n # Optionally set the working the base working directory\n analysis.setWorkingDirectory('.')\n\n\n # Create an ElementSet and NodeSet for the entire volume of named model ('PartA')\n myMeshModel.setEntityName((Ent.Volume, 1), 'PartA') # Set the name of the GMSH volume to 'PartA'\n volElSet = ElementSet('volElSet', myMeshModel.getElementIds((Ent.Volume,1)))\n volNodeSet = NodeSet('VolumeNodeSet', myMeshModel.getNodesFromVolumeByName('PartA'))\n\n analysis.initialConditions.append({'type': 'temperature', 'set': 'VolumeNodeSet', 'value': 0.0})\n\n # Create a thermal load case and set the timesettings\n thermalLoadCase = LoadCase('Thermal_Load_Case')\n\n # Set the loadcase type to thermal - eventually this will be individual analysis classes with defaults\n thermalLoadCase.setLoadCaseType(LoadCaseType.THERMAL)\n\n # Set the thermal analysis to be a steady state simulation\n thermalLoadCase.isSteadyState = True\n thermalLoadCase.setTimeStep(0.5, 0.5, 5.0)\n\n # Attach the nodal and element result options to each loadcase\n # Set the nodal and element variables to record in the results (.frd) file\n nodeThermalPostResult = NodalResult('volNodeSet')\n nodeThermalPostResult.temperature = True\n\n elThermalPostResult = ElementResult('Volume1')\n elThermalPostResult.heatFlux = True\n\n # Add the result configurations to the loadcase\n thermalLoadCase.resultSet = [nodeThermalPostResult, elThermalPostResult]\n\n # Set thermal boundary conditions for the loadcase using specific NodeSets\n thermalLoadCase.boundaryConditions.append(\n {'type': 'fixed', 'nodes': 'surfaceNodesA', 'dof': [DOF.T], 'value': [60]})\n\n thermalLoadCase.boundaryConditions.append(\n {'type': 'fixed', 'nodes': 'surfaceNodesB', 'dof': [DOF.T], 'value': [20]})\n\n # Material\n # Add a elastic material and assign it to the volume.\n # Note ensure that the units correctly correspond with the geometry length scales\n steelMat = ElastoPlasticMaterial('Steel')\n steelMat.E = 210000. # [MPa] Young's Modulus\n steelMat.alpha_CTE = [25e-6, 23e-6, 24e-6] # Thermal Expansion Coefficient\n steelMat.density = 1.0 # Density\n steelMat.cp = 1.0 # Specific Heat\n steelMat.k = 1.0 # Thermal Conductivity\n\n\n # The material and material type is assigned to the elements across the part\n analysis.materialAssignments = [\n SolidMaterialAssignment(\"solid_material\", elementSet=volElSet, material=steelMat)\n ]\n\n # Set the loadcases used in sequential order\n analysis.loadCases = [thermalLoadCase]\n\n # Run the analysis #\n analysis.run()\n\n # Open the results file ('input') is currently the file that is generated by PyCCX\n results = analysis.results()\n results.load()\n\n # Export the results to VTK format as a significant timestep for post-processing\n import pyccx.utils.exporters as exporters\n exporters.exportToVTK('result.vtu', results, inc=-1)\n\n\nThe basic usage is split between the meshing facilities provided by GMSH and analysing a problem using the Calculix\nSolver. Further documented examples are provided in `examples <https://github.com/drlukeparry/pyccx/tree/master/examples>`_ .\n\nThe current changelog is found in the `CHANGELOG <https://github.com/drlukeparry/pyccx/tree/dev/CHANGELOG.md'>`_ .",
"bugtrack_url": null,
"license": "Copyright (c) 2025, Luke Parry\n Copyright (c) 2025, Luktug Ltd.\n \n All rights reserved.\n \n Redistribution and use in source and binary forms, with or without modification, are permitted provided that the\n following conditions are met:\n \n Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials provided with the distribution.\n \n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
"summary": "Simulation and FEA environment for Python built upon Calculix and GMSH",
"version": "0.2.0",
"project_urls": {
"Documentation": "https://pyccx.readthedocs.io/en/latest/",
"Homepage": "https://github.com/drlukeparry/pyccx",
"Source": "https://github.com/drlukeparry/pyccx/",
"Tracker": "https://github.com/drlukeparry/pyccx/issues"
},
"split_keywords": [
"calculix",
" fea",
" finite element analysis",
" gmsh",
" simulation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e158802f749e68fb19ae9a5e1d15212fb0eaa75d005f814ba40f9e749727c8bd",
"md5": "b014bed1686550b12aac8fb29ffb2271",
"sha256": "2732e933703a11a8df2c9ebd562cc8856108af09463807bc3389f35fde7f9350"
},
"downloads": -1,
"filename": "pyccx-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b014bed1686550b12aac8fb29ffb2271",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 63839,
"upload_time": "2025-08-17T20:30:48",
"upload_time_iso_8601": "2025-08-17T20:30:48.688308Z",
"url": "https://files.pythonhosted.org/packages/e1/58/802f749e68fb19ae9a5e1d15212fb0eaa75d005f814ba40f9e749727c8bd/pyccx-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bcf9a0804301091222ccdee5c5a363e5dfa9f6d59cb546e2127c95249fad258e",
"md5": "735bf3a2e2eb9b2dca5ce97d5af0d67a",
"sha256": "383ef55ec14b5bf3b6c5645800e2284958a60cf680cac341f4421d210a2ffa72"
},
"downloads": -1,
"filename": "pyccx-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "735bf3a2e2eb9b2dca5ce97d5af0d67a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 54223,
"upload_time": "2025-08-17T20:30:49",
"upload_time_iso_8601": "2025-08-17T20:30:49.926396Z",
"url": "https://files.pythonhosted.org/packages/bc/f9/a0804301091222ccdee5c5a363e5dfa9f6d59cb546e2127c95249fad258e/pyccx-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-17 20:30:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "drlukeparry",
"github_project": "pyccx",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pyccx"
}