Hello fellow Ace Users.
Currently I'm working on a project to implement Peridynamics. This is a discretization technique in the fashion of a meshless particle method. AceGen/AceFEM provides the feature of arbitrary nodes per element which suits my need perfectly as such a peridynamic particle interacts with arbitrary number of neighbour particles. To use the benefits of this method such as modelling discontinuities I'm aiming to utilize an explicit solution procedure.
I appreciate any thoughts on this! I have some code running in AceGen/AceFEM so far, still struggling on some design decisions which lead to the following specific questions:
- Whats exactly prarallelized in AceFEM? My recent experience indicate that SMSStandardModule["Tasks"] is not. Is that correct ? How about SMSStandardModule["Tangent and residual"] (I'm talking about the evaluation of the elements not solving the global equation system in parallel.)?
- Is there any known (maybe approximate) limit to the performance regarding arbitrary nodes per element?
- Does anyone have experiences with explicit simulations in AceFEM/AceGen?
- I expect a lot of data due to the particle discretization. Visualisation in post processing will be a to hard task to do in Mathematica. Does anyone have experiences with exporting the simulation data for use in e.g Paraview? If so, what's most performant way to write these to a file without significantly slowing down the simulation? I'm aware of the SMTPut feature by the way, but to my knowledge this binds me to Mathematica again.
As always You have my kudos in advance and I'm excited for your comments and answers !
Thanks for the response so far.
I'm back with a 'minimal' example that shows my main concerns.
The code is provided in SimpePDImplementation on GitHub:
The element contains a vary basic implementation of explicit peridynamics following two steps for each time step:
- Compute force density for each node (based on its neighbours)
- Integrate in time: acceleration = force density / density (per node)
These two task are implemented twice (using the same code), for once implemented into the SKR subroutine and for once as individual element tasks. !As the code is explicit i do not want or have a system of equation to solve, but i definitely want go over all elements in parallel to gain speedup. The results for both implementations are the same as expected, however the SKR implementation run significantly slower (i guess do to the solution of the linear system which is completely zero in this case).
While performing the analysis, I checked my CPU usage.
My conclusion so far is that the parallelization only works on the solution of the linear system and at least does not parallelize the loop over all elements for tasks.
I would be great if one of you guy can confirm, or even better of course tell me what I made wrong so that I know wether AceFEM works for my purpose at all.