Периодическое граничное условие языка Джулии FEniCS

Я хотел бы применить периодическое граничное условие в FEniCS для языка Julia, но все примеры, которые я нашел, относятся либо к C++, либо к Python. Как создать периодическое граничное условие с помощью Джулии? Это кажется трудным, потому что у Джулии нет занятий. вот минимальный пример:

using FEniCS

using PyCall

length=2.2

height=0.41

channel = Rectangle(Point([0.0, 0.0]), Point([length, height]))

domain = channel

mesh = generate_mesh(domain, 64)

# insert function here for PeriodicBoundarycondition

Q = FunctionSpace(mesh, "P", 1,constrained_domain=#the function that i am looking for)

person maxsieg    schedule 29.10.2018    source источник
comment
Вы просмотрели FEniCS.jl?   -  person crstnbr    schedule 29.10.2018
comment
да, это пакет, который я добавил и использую. В тестовой папке есть несколько руководств, но ни одно из них не использует периодическое граничное условие. Вот почему я не уверен, как его использовать. Также в их первом примере есть ошибка: там сказано [code]u_D = Expression(1+x[0]*x[0]+2*x[1]*x[1], degree=2)[\code ] должно быть [code]@pyimport fenics u_D = Expression(fenics.Expression(1+x[0]*x[0]+2*x[1]*x[1], степень=2))[\code]   -  person maxsieg    schedule 29.10.2018


Ответы (1)


Я посмотрел на код julia, который составляет FEniCS, пример периодического граничного условия на странице fenics и некоторые из моих старых кодов python для fenics, и это вдохновило меня написать это:

    using FEniCS
using PyCall
@pyimport fenics
py"""
from dolfin import *
from mshr import *
length=2.2

height=0.41
channel = Rectangle(Point([0.0, 0.0]), Point([length, height]))

domain = channel

mesh = generate_mesh(domain, 64)
subdomains = MeshFunction("size_t", mesh, 1)
subdomains.set_all(0)
class Wall(SubDomain):
    def inside(self,x,on_boundary):
        return (near(x[1],height) or near(x[1],height)) and on_boundary
wall=Wall()
class PeriodicBoundary(SubDomain):

    # Left boundary is "target domain" G
    def inside(self, x, on_boundary):
        return bool(x[0] < DOLFIN_EPS and x[0] > -DOLFIN_EPS and on_boundary)

    # Map right boundary (H) to left boundary (G)
    def map(self, x, y):
        y[0] = x[0] - length
        y[1] = x[1]
pbc=PeriodicBoundary()
"""
Q=FunctionSpace(fenics.VectorFunctionSpace(py"mesh", "P", 1,constrained_domain=py"pbc"))

решение не является оптимальным, поскольку оно просто делает все это на питоне, но я думаю, что мне придется с этим смириться.

person maxsieg    schedule 29.10.2018