python的有限体积离散化
pyfvm的Python项目详细描述
#PyFvm
[![循环](https://img.shields.io/circleci/project/github/nschloe/pyfvm.svg)(https://circleci.com/gh/nschloe/pyfvm)
[![codecov](https://img.shields.io/codecov/c/github/nschloe/pyfvm.svg)(https://codecov.io/gh/nschloe/pyfvm)
[![代码样式:黑色](https://img.shields.io/badge/code%20style-black-000000.svg)(https://github.com/ambv/black)
[![pypi版本](https://img.shields.io/pypi/v/pyfvm.svg)(https://pypi.org/project/pyfvm)
[![Github之星](https://img.shields.io/github/stars/nschloe/pyfvm.svg?logo=github&;label=stars)(https://github.com/nschloe/pyfvm)
轻松创建有限体积方程系统。
配置文件中指定有限体积公式,pyfvm将为其创建矩阵/右侧或
非线性系统。这个软件包是为每个想快速构造fvm系统的人准备的。
测试
从pyfvm导入pyfvm
语言导入*
从scipy导入meshzoo
稀疏导入linalg
导入meshplex
return[(lambda x:u(x)-0.0,bound界())]
;使用meshzoo创建网格
('out.vtk',point_data={'u':u}
```
此示例使用[meshzoo](https://pypi.org/project/meshzoo)创建
一个简单的网格,但是提供顶点和单元格的任何其他方法都可以正常工作。例如,支持从各种各样的mesh文件中进行读取
(通过[meshio](https://pypi.org/project/meshio)):
```python
mesh,u2;=pyfvm.reader.read('pacman.e')
````
同样,[pyamg](https://github.com/pyamg/pyamg)是一个更快的解决方案
对于这个问题
````
导入pyamg
ml=pyamg.smooted廑aggregation廑u solver(linear廑system.matrix)
u=ml.solve(linear廑system.rhs,tol=1e-10)
```
对于bratu的问题:
`` python,测试
从pyfvm导入pyfvm
从pyfvm.form语言导入*
导入meshzoo
从sympy导入numpy
从sympy导入exp
导入meshplex
bratu类(对象):
def apply(self,u):
返回integrate(lambda x:-n-u-dot-grad(u(x)),集成(lambda x:2.0*exp(u(x)),dv)
def dirichlet(self,u):
return[(u,bound界())]
mesh=meshszoo.矩形(0.0,2.0,0.0,1.0,101,101,51)
mesh=meshplex.meshstri(顶点,单元)
U解算器(U0,rhs):
从scipy.sparse导入linalg
jac=jacobian.get_linear_operator(u0)
返回linalg.spsolve(jac,rhs)
u0=numpy.zeros(len(顶点))
u=pyfvm.newton(f.eval,jacobian_solver,u0)
mesh.write('out.vtk',点“data={'u”:u})
```
请注意,雅可比符号是从“bratu”类中计算出来的。
u0)
```
查看此存储库并键入
```
pytest
```
distribution
以创建新版本
1。点击“版本号”
2。发布到pypi和github:
```
make publish
```
[![循环](https://img.shields.io/circleci/project/github/nschloe/pyfvm.svg)(https://circleci.com/gh/nschloe/pyfvm)
[![codecov](https://img.shields.io/codecov/c/github/nschloe/pyfvm.svg)(https://codecov.io/gh/nschloe/pyfvm)
[![代码样式:黑色](https://img.shields.io/badge/code%20style-black-000000.svg)(https://github.com/ambv/black)
[![pypi版本](https://img.shields.io/pypi/v/pyfvm.svg)(https://pypi.org/project/pyfvm)
[![Github之星](https://img.shields.io/github/stars/nschloe/pyfvm.svg?logo=github&;label=stars)(https://github.com/nschloe/pyfvm)
轻松创建有限体积方程系统。
非线性系统。这个软件包是为每个想快速构造fvm系统的人准备的。
测试
从pyfvm导入pyfvm
语言导入*
从scipy导入meshzoo
稀疏导入linalg
导入meshplex
return[(lambda x:u(x)-0.0,bound界())]
;使用meshzoo创建网格
('out.vtk',point_data={'u':u}
```
此示例使用[meshzoo](https://pypi.org/project/meshzoo)创建
一个简单的网格,但是提供顶点和单元格的任何其他方法都可以正常工作。例如,支持从各种各样的mesh文件中进行读取
(通过[meshio](https://pypi.org/project/meshio)):
```python
mesh,u2;=pyfvm.reader.read('pacman.e')
````
同样,[pyamg](https://github.com/pyamg/pyamg)是一个更快的解决方案
对于这个问题
````
导入pyamg
ml=pyamg.smooted廑aggregation廑u solver(linear廑system.matrix)
u=ml.solve(linear廑system.rhs,tol=1e-10)
```
对于bratu的问题:
`` python,测试
从pyfvm导入pyfvm
从pyfvm.form语言导入*
导入meshzoo
从sympy导入numpy
从sympy导入exp
导入meshplex
bratu类(对象):
def apply(self,u):
返回integrate(lambda x:-n-u-dot-grad(u(x)),集成(lambda x:2.0*exp(u(x)),dv)
def dirichlet(self,u):
return[(u,bound界())]
mesh=meshszoo.矩形(0.0,2.0,0.0,1.0,101,101,51)
mesh=meshplex.meshstri(顶点,单元)
U解算器(U0,rhs):
从scipy.sparse导入linalg
jac=jacobian.get_linear_operator(u0)
返回linalg.spsolve(jac,rhs)
u0=numpy.zeros(len(顶点))
u=pyfvm.newton(f.eval,jacobian_solver,u0)
mesh.write('out.vtk',点“data={'u”:u})
```
请注意,雅可比符号是从“bratu”类中计算出来的。
u0)
```
查看此存储库并键入
```
pytest
```
distribution
以创建新版本
1。点击“版本号”
2。发布到pypi和github:
```
make publish
```