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