JuliaFEM / JuliaFEM.jl

The JuliaFEM software library is a framework that allows for the distributed processing of large Finite Element Models across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage.
http://juliafem.github.io/JuliaFEM.jl/latest/
MIT License
250 stars 66 forks source link

Examples of academic usage #183

Open ChrisRackauckas opened 6 years ago

ChrisRackauckas commented 6 years ago

I am interested in using this in a more academic case, and in previous discussions it sounds like that's a development target. So I was wondering if there could be examples showing how to do it. Essentially, I would not want any of the physics related parts of the FEM, just the ability to discretize equations. For example, for the Heat Equation

u_t = u_xx + f(t,u)

is there a step-by-step for how to:

a) Discretize space (into a tetrahedral mesh) b) Assemble the stiffness matrix c) Get back a vector for the values at elements and the matrices for the assembled operators so I can then solve the equation in my own ways?

ahojukka5 commented 6 years ago

Hi. I have written some examples to our web page juliafem.org, describing assemble procedure. We are in a middle of process of separating core functionality to own package FEMBase.jl which serves as a basis for implementing own physical models. That's where I'm next putting focus on + improving documentation, so it can be expected to see results in near future.

For that a), if I understand you correctly, we have no plans to implement any kind of meshing functionality. It is assumed that mesh already exists and is done e.g. using SALOME (we have AsterReader.jl) or ABAQUS. For purely academic problems, maybe some unit_square or unit_cube would be good.

ChrisRackauckas commented 6 years ago

Is the format for the mesh documented anywhere?

For purely academic problems, maybe some unit_square or unit_cube would be good.

Yes, for sure. Or at least spawn it out as a package with the intention to mesh some basic shapes.

ChrisRackauckas commented 6 years ago

x

ahojukka5 commented 6 years ago

The mesh format is undocumented, but the object can be located here:

Here, mesh.nodes contains location of vertices and mesh.elements connectivity. mesh.element_types define the topology type, e.g. :Tet10, :Tet4, :Tri3, :Tri6 and so on. Nodes / element can be grouped to sets, so one can easily define properties to the group of set. Say, you have set called :BODY1 and you want to set some property to them, you can call

elements = create_elements(mesh, "BODY1")
update!(elements, "my attribute", 1.0)
TeroFrondelius commented 5 years ago

@ahojukka5 does PDAssembler.jl answer this issue?

ahojukka5 commented 5 years ago

Well..

So I think we answer to all questions?

ahojukka5 commented 5 years ago

Well yeah of course step-by-step howto is missing like always :)