Смена поддоменов 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)

0 ответов

Другие вопросы по тегам