コード例 #1
0
ファイル: ex04.py プロジェクト: zhang9song/scikit-fem
"""

from skfem import *
from skfem.models.elasticity import linear_elasticity,\
    lame_parameters, linear_stress
from skfem.models.helpers import dot, ddot,\
    prod, sym_grad
import numpy as np
from skfem.io import from_meshio
from skfem.io.json import from_file, to_file
from pathlib import Path

# create meshes
mesh_file = Path(__file__).with_name("ex04_mesh.json")
try:
    m = from_file(mesh_file)
except FileNotFoundError:
    from pygmsh import generate_mesh
    from pygmsh.built_in import Geometry
    geom = Geometry()
    points = []
    lines = []
    points.append(geom.add_point([0., 0., 0.], .1))
    points.append(geom.add_point([0., 1., 0.], .1))
    points.append(geom.add_point([0., -1., 0.], .1))
    lines.append(geom.add_circle_arc(points[2], points[0], points[1]))
    geom.add_physical(lines[-1], 'contact')
    lines.append(geom.add_line(points[1], points[2]))
    geom.add_physical(lines[-1], 'dirichlet')
    geom.add_physical(geom.add_plane_surface(geom.add_line_loop(lines)),
                      'domain')
コード例 #2
0
   C = \\frac{2 E}{V^2}.

"""
from packaging import version
from pathlib import Path

from skfem.mesh import MeshTri
from skfem.assembly import InteriorBasis, FacetBasis
from skfem.utils import solve, asm, condense, projection
from skfem.element import ElementTriP1
from skfem.models.poisson import laplace, unit_load, mass
from skfem.io.json import from_file

import numpy as np

mesh = from_file(Path(__file__).parent / 'meshes' / 'ex35.json')

element = ElementTriP1()

# permeability of vacuum
mu0 = 1.25663706212e-6
# permittivity of vacuum
eps0 = 8.8541878128e-12

# relative permittivity of polytetrafluoroethylene
eps_ptfe = 2.1
# relative permittivity of fluorinated ethylene propylene
eps_fep = 2.1

global_basis = InteriorBasis(mesh, element)
inner_conductor_basis = InteriorBasis(
コード例 #3
0
ファイル: ex17.py プロジェクト: mfkiwl/scikit-fem
"""
from pathlib import Path
from typing import Optional

import numpy as np

from skfem import *
from skfem.helpers import dot, grad
from skfem.models.poisson import mass, unit_load
from skfem.io.json import from_file

joule_heating = 5.
heat_transfer_coefficient = 7.
thermal_conductivity = {'core': 101.,  'annulus': 11.}

mesh = from_file(Path(__file__).parent / 'meshes' / 'disk.json')
radii = sorted([np.linalg.norm(mesh.p[:, mesh.t[:, s]], axis=0).max() for s in mesh.subdomains.values()])


@BilinearForm
def conduction(u, v, w):
    return dot(w['conductivity'] * grad(u), grad(v))


convection = mass

element = ElementQuad1()
basis = InteriorBasis(mesh, element)

conductivity = basis.zero_w()
for subdomain, elements in mesh.subdomains.items():
コード例 #4
0
* Barkley, D., M. G. M. Gomes, & R. D. Henderson (2002). Three-dimensional instability in flow over a backward-facing step. Journal of Fluid Mechanics 473. pp. 167–190. `doi:10.1017/s002211200200232x <http://dx.doi.org/10.1017/s002211200200232x>`_

"""

from pathlib import Path

from matplotlib.pyplot import subplots
import numpy as np
from scipy.sparse import bmat

from skfem import *
from skfem.models.poisson import vector_laplace, laplace
from skfem.models.general import divergence, rot
from skfem.io.json import from_file

mesh = from_file(
    Path(__file__).parent / 'meshes' / 'backward-facing_step.json')

element = {'u': ElementVectorH1(ElementTriP2()), 'p': ElementTriP1()}
basis = {
    variable: InteriorBasis(mesh, e, intorder=3)
    for variable, e in element.items()
}

D = np.concatenate([b.all() for b in basis['u'].find_dofs().values()])

A = asm(vector_laplace, basis['u'])
B = -asm(divergence, basis['u'], basis['p'])

K = bmat([[A, B.T], [B, None]], 'csr')
uvp = np.zeros(K.shape[0])
コード例 #5
0
ファイル: ex24.py プロジェクト: mjziebarth/scikit-fem
* Barkley, D., M. G. M. Gomes, & R. D. Henderson (2002). Three-dimensional instability in flow over a backward-facing step. Journal of Fluid Mechanics 473. pp. 167–190. `doi:10.1017/s002211200200232x <http://dx.doi.org/10.1017/s002211200200232x>`_

"""

from pathlib import Path

from matplotlib.pyplot import subplots
import numpy as np
from scipy.sparse import bmat

from skfem import *
from skfem.models.poisson import vector_laplace, laplace
from skfem.models.general import divergence, rot
from skfem.io.json import from_file

mesh = from_file(Path(__file__).with_name("backward-facing_step.json"))

element = {'u': ElementVectorH1(ElementTriP2()), 'p': ElementTriP1()}
basis = {
    variable: InteriorBasis(mesh, e, intorder=3)
    for variable, e in element.items()
}

D = np.concatenate([b.all() for b in basis['u'].find_dofs().values()])

A = asm(vector_laplace, basis['u'])
B = -asm(divergence, basis['u'], basis['p'])

K = bmat([[A, B.T], [B, None]], 'csr')
uvp = np.zeros(K.shape[0])
        for k in range(basis.Nbfun):
            phi = basis.elem.gbasis(basis.mapping, pts, k,
                                    tind=cells)[0][0].flatten()
            w += u[basis.element_dofs[k, cells]] * phi
        return w

    return interpolator


parser = ArgumentParser()
parser.add_argument("--mesh", type=Path)
args = parser.parse_args()

if args.mesh:

    mesh = from_file(args.mesh)
else:
    try:
        mesh = from_file(Path("cylinder.json"))
    except Exception as e:
        from cylinder_dmsh import CylinderDmsh

        print("Couldn't find cylinder.json; generating in dmsh.")
        mesher = CylinderDmsh()
        mesh = mesher.mesh
        mesher.save()

element = {
    "u": skfem.ElementVectorH1(skfem.ElementTriP2()),
    "p": skfem.ElementTriP1()
}
コード例 #7
0
ファイル: ex17.py プロジェクト: mjziebarth/scikit-fem
"""
from pathlib import Path
from typing import Optional

import numpy as np

from skfem import *
from skfem.helpers import dot, grad
from skfem.models.poisson import mass, unit_load
from skfem.io.json import from_file

joule_heating = 5.
heat_transfer_coefficient = 7.
thermal_conductivity = {'core': 101., 'annulus': 11.}

mesh = from_file(Path(__file__).with_name("disk.json"))
radii = sorted([
    np.linalg.norm(mesh.p[:, mesh.t[:, s]], axis=0).max()
    for s in mesh.subdomains.values()
])


@BilinearForm
def conduction(u, v, w):
    return dot(w['conductivity'] * grad(u), grad(v))


convection = mass

element = ElementQuad1()
basis = InteriorBasis(mesh, element)