Смена поддоменов fenics во время шагов
Я пытаюсь смоделировать трехмерную симуляцию теплопередачи в кубе с порошком внизу и воздухом сверху. Я знаю, что мы можем определить эти субдомены с помощью маркера "Выражение" или "MeshFunction". До сих пор все работает отлично. Следующий шаг - добавить еще один слой порошка поверх первого. Работает с "Выражением", но не с "MeshFuction". Итак, мой вопрос, как изменить поддоменов с помощью "MeshFunction"??
def Material_property(mesh,powder_height):
# define a meshfunction for numbering subdomains
subdomains = MeshFunction("size_t",mesh,3)
# define the subdomains
class Air(SubDomain):
def inside(self, x,on_boundary):
return (x[2] >= powder_height)
class Powder(SubDomain):
def inside(self, x,on_boundary):
return (x[2] <= powder_height)
# mark the subdomains with numbers
subdomain_air = Air()
subdomain_powder= Powder()
subdomains.set_all(1)
subdomain_air.mark(subdomains,0)
V0 = FunctionSpace(mesh, "DG", 0)
kappa = Function(V0)
density = Function(V0)
help = numpy.asarray(subdomains.array(), dtype=numpy.int64)
kappa.vector()[:] = numpy.choose(help, kappa_values)
density.vector()[:] = numpy.choose(help, density_values)
return(kappa,density)