Macro periodic boundary condition for a elasticity equation

151 views
Skip to first unread message

Lukas Schöller

unread,
Feb 7, 2020, 1:12:38 PM2/7/20
to deal.II User Group
Hi,

I'm trying to implement a periodic boundary condition for a basic elastic equation (almost like step 8, but with the general 4th order stiffness tensor and neuman bcs).
The common way to enforce periodicity in deali.II with GridTools::collect_periodic_faces, or DoFTools::make_periodicity_constraints work so far very well.
But if I want also to impose a macro stress condition to the whole domain the problem gets more complicated:

A far I understood the the constrains for a normal periodic boundary condition are

      [[ u_i ]] = 0,

So the jump of the displacement over the periodic boundary must vanish [1, 2]. This is normally achieved by elimination of the DoFs of one boundary via e.g. AffineConstraints.
But now I get also traction constrains: The tractions in the normal direction must also vanish (often called anti-symmetric boundary condition)

      [[ t_i n_i ]] = 0.

My first thought was to archive the latter (or maybe both) e.g. with a penalty term over the periodic boundary (I guess this approach is called 'weak boundary conditions' ?).
Therefore the basic approach is given by the DG examples or the new C0IP tutorial (even if the resulting penalty term for the elastic problem is somehow still unclear for me)

But the biggest problem is how I can couple the constrains above with a macro problem to enforce a overall strain/stress state.
In the case of a macro strain the traction condition should fulfilled automatically and we get something like [[ u_i ]] = g_i, with a macro displacement g.
Hence I would guess that the DoFTools::make_periodicity_constraints with a transformation matrix can deal with that kind of problem.

If we want a macro stress condition, which is my goal, a common approach is to add a coupled macro problem to the existing PDE to ensure the Hill-Mandel condition.
Now we got a linear system like

      (  K        K1    )  [  U_i  ]   =    [   0  ]
      (  K1^T   K_2  )  [  E_ij  ]         [  S  ]

where E is a macro strain, S a macro stress. K are the coefficients of the normal system.
K_1 should couple the micro with macro problem and is something like 'C_ijkl sym(u_k,l) v_i n_j'  on all the boundaries [2]. This should ensures that the average stress on all boundaries is fulfilled.
And K_2 = <C> is the averages stiffness tensor of the micro problem.

I hope that I summarized the topic correctly. Now to my questions:

Is it possible to archive a macro stress boundary condition with the use of AffineConstraints? Like adding some artificial lines with coefficients that mimics the averaging over the boundaries and thus the macro problem.

If this does not work, which I'm quite sure it will, how can I add the macro problem to the existing or add any additional DoFs to the system of equation?
The only reasonable I found in the doxygen was NonMatching::create_coupling_sparsity_pattern but that is not quite the thing I want, as the macro problem is not a spatial problem (has no mesh, but is connected to the whole boundary).

The papers describing such a macro periodic boundary condition [1,2,3,...] are mainly only for the macro strain case. And none of them gave me an hint how to implement this in a solver.
A open source tool hat implement such a BC for Abqaus is homtools. I already looked into the code of the plugin, but as 'blackbox solver'  that Abqaus is, I did not get any answers.

Maybe there is an elegant way to solve this problem, but I have no clue how to start. I hope that someone can give me a basic idea how I can make this boundary condition work.

Regards,
Lukas Schöller

Lukas Schöller

unread,
Feb 10, 2020, 5:55:07 AM2/10/20
to deal.II User Group
Hi,

I have thought about the problem again and now I have a solution proposal:

      [[ u_i ]] = 0,

would I fulfill by adding entries in the constraint matrix.
E.g. u_i = u_j for each DoF pair on the boundary. I just have to figure out the DoF indices i and j.

The average overall stress state, I want also archive with the constraint matrix:
For the first DoF of the periodic boundary pair I would add  a constrain like

      u_1 = A_1i u_i + A_1j u_j + ... + A_1N u_N + S_kl N_l

      u_1 = sum_i^N ( A_1i u_i ) + S_k N_l

with i=2..N (all DoF indices on the periodic boundary), the prescribed stress tensor S and a global normal vector of the boundary N.
And the coefficients are the the calculated by

      A_ij = C_ijkl sym(u_k,l) n_j  Jwxq

on the corresponding faces by iterating in standard fashion over all cells/faces and evaluating the terms with via FEFaceValues.
[[ t_i n_i ]] = 0 should thereby be indirectly satisfied.

But I'm not sure if the evaluating the coefficients in such a manner, leads in the end to the wanted behavior of the system (stress fluctuations on the boundaries but an average prescribed stress tensor).
Is it a good idea to include coefficients in the constraint matrix that depends on some shape function. I thought those belonged in the system matrix.
Can this still work?

Another issue is how to make this concept work in a parallel context: Which process must know about which DoF?

Regards,
Lukas Schöller


Jean-Paul Pelteret

unread,
Feb 10, 2020, 4:38:50 PM2/10/20
to dea...@googlegroups.com
Hi Lukas,

If I’ve interpreted your emails correctly, you’ve mentioned two distinct things here, namely (1) the imposition of periodic displacement fluctuation field (thereby, in essence, prescribing a macroscopic average deformation gradient, with stress unknown) or (2) the imposition of a macroscopic stress condition through anti-periodic tractions (with deformation gradient unknown). It would seem to me that when you impose the one you implicitly end up imposing the other.

I’ve got a little bit of experience with topic, but only from finite strain mechanics. So I’m going to lay out a few things coming a finite-deformation perspective. There’s a very nice set of papers by Miehe that discusses various methods to impose such conditions for the elasticity problem. The main work of interest might be this one:

C. Miehe. Computational micro-to-macro transitions for discretized micro-structures of hetero- geneous materials at finite strains based on the minimization of averaged incremental energy. Computer Methods in Applied Mechanics and Engineering, 192(5–6):559–591, January 2003. DOI: 10.1016/s0045- 7825(02)00564- 9. 

I’ve implemented a set of functions that, as Miehe describes, sets up a periodicity frame and defines a set of constraints to satisfy (1) by imposing that [[u]] = \bar{\Grad u} [[X]] where \bar{\Grad u} is the macroscopic displacement gradient, and u and X are the microscopic displacement and position vectors, respectively. I’d be happy to share this with you if you’d like. To be honest though, although I rigorously followed Miehe’s approach for this as an educational exercise, one could simply amend our existing DoFTools::make_periodicity_constraints() function to include the necessary inhomogeneity (specifically, \bar{\Grad u} [[X]]) and an additional set of constraints to remove the rigid body motions. Its on my to-do list to add this to the library, but if its something that you’d like to try to add to the library yourself, then I’d be happy to try to help you with that.

As for option (2), I’m afraid that I’ve not been able to give much thought to the details that you laid out in your original email and how it all fits together. I’m sure that it’s possible to do in the way that you’ve expressed (since the stress and strain are linearly related), but it seems like a real pain to have to deal with the additional tensor-valued DoFs. What I can tell you is two methods that myself and one of my colleagues have used to impose such conditions (for non-linear problems, where there are not necessarily such nice ways to express and exploit the stress-strain relation). The first is to solve a global problem that equilibrate the homogenised stress and the (imposed) macroscopic stress. This is relatively straight-forward, but one does need to solve the boundary value problem within some global iterative scheme, and one also needs to compute the (algorithmically consistent) tangent stiffness matrix. The second approach, which my colleague has had a lot of success with, is simply using Lagrange multipliers to impose the anti-periodic tractions. I believe that Miehe also discusses this in that paper that I listed above.

Anyway, maybe this doesn’t give you exactly the answer that you were looking for, but maybe it’ll give you some other ideas on how you want to go about approaching the problem. And, as I said, if you do want a set of functions to (with some small restrictions) implement (1) then I’d be happy to share.

Best,
Jean-Paul

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dealii+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/ad96305f-99d0-4ca4-b37e-b68b0f0f9f93%40googlegroups.com.

Lukas Schöller

unread,
Feb 10, 2020, 6:59:35 PM2/10/20
to deal.II User Group
Hi Jean-Paul,

thanks for you detailed answer. You described excatly what I want to do.  And I guess what is working for a finite deformation framework, works also for the case of small strains.
The main goal for me is still is to apply a prescribed marcoscopic stress tensor.
But it is always better to be able to choose from different boundary condtions. So first I want to add the prescribed strain setting BC. And it should also be much easier to implement.

As I already described my first idea was also to extend/modify the DoFTools::make_periodicity_constraints() functionality by adding some displacement offsets to the constraints. But as I discovered today the documenation is not too comprehensive about the used  parameters (eg. is the matrix a general transformation matrix or only for a rotation? Or what does the first_vector_components parameter?). And also the internal implemtation is not this striaghtforward as I thought. So I would be happy if you can share some working code with me. If I am able to add some feature to the library in the end, I like to give something back to this project by adding some functionality for other users.

The the second problem, the prepresibed stress tensor, I would also solve. But as I wrote, and you confimerd, this seems not to easy. As I hoped you gave me some insight how to solve such a problem. But I was hoping that there is a simple soulution in deal.II...
But from you experience I guess that a Lagrange multipler approach is perhaps a more general  and robust approach, which works also with possible nonlinearity added later.

But first things first, so I try to add a macroscopic strain case, glady with the help of your code, and have a deeper look in Miehe's work (I think I had already a quick look in the referred paper, but was overwhelmed. Often finite deformations look too complicated for small strains)

Regards,
Lukas
To unsubscribe from this group and stop receiving emails from it, send an email to dea...@googlegroups.com.

Masoud Ahmadi

unread,
Nov 15, 2022, 9:09:41 AM11/15/22
to deal.II User Group
Hi Lukas and Jean-Paul,

I have the same exact question. 
Any further achievment with the issue?

Best regards,
Masoud

Reply all
Reply to author
Forward
0 new messages