Я хотел бы применить периодическое граничное условие в 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)
да, это пакет, который я добавил и использую. В тестовой папке есть несколько руководств, но ни в одном из них не используются периодические граничные условия. Вот почему я не знаю, как им пользоваться. Также в их первом примере есть ошибка: там сказано [code] u_D = Expression ("1 + x [0] * x [0] + 2 * x [1] * x [1]", степень = 2) [ \ code] должен быть [code] @pyimport fenics u_D = Expression (fenics.Expression ("1 + x [0] * x [0] + 2 * x [1] * x [1]", степень = 2)) [\код]
Я посмотрел на код 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"))
решение не является оптимальным, поскольку оно просто выполняет все функции на Python, но я думаю, что мне придется с этим смириться.
Вы смотрели FEniCS.jl?