Use Escript to simulate a Cosserat material

Asked by ceguo

Hi everyone,

I notice that in one of your publication Muhlhaus et al, 2010 (The influence of non-coaxiality on shear banding in viscous-plastic materials) that you simulated a Cosserat continuum using escript. I'm very interested to do this, maybe starting from a 2d simulation. In this case we have one more variable phi (rotation) in addition with displacements (dx,dy). I also notice that you suppressed dy, so you still have only 2 variables in your study. I'm wondering is escript capable to handle a fully implemented cosserat mechanics problem in 2d (or even in 3d)?

I've tried a simple implementation myself using Cosserat linear elasticity (but seems failed). Since we have one more variable phi_z, I used 3d domain to simulate the 2d case. After I formulated the equilibrium equations (got three equations), I set corresponding coefficients to the general PDE (besides A, I have to set B and D). But escript failed to solve the PDE with error message: "Paso_SparseMatrix_invMain: non-regular main diagonal block"

Any suggestions are appreciated.

Ning

Question information

Language:
English Edit question
Status:
Solved
For:
esys-escript Edit question
Assignee:
No assignee Edit question
Solved by:
ceguo
Solved:
Last query:
Last reply:
Revision history for this message
Aurelie Papon (a-papon) said :
#1

Hi!

Two suggestions:

- In Escript the number of variables and the number of equations are disconnected. In others words, you do not need to consider a 3D domain to solve your 2D case.

- Use DirectSolver instead of PasoSolver. By doing so, the solver will check the regularity of the whole matrix and
not the regularity of each block (separately).

Aurélie

Revision history for this message
Lutz Gross (l-gross) said :
#2

Would like to add that in the per we actually didn't solve for the full cosserat model but for (omega_c, v_{1,2}).
PS: I guess what Aurélie means is that in escript the number of equations and the number of spatial dimensions are not linked. So you can solve a 2D Cosserat model on a 2D domain.

Revision history for this message
Lutz Gross (l-gross) said :
#3

Would like to add that in the per we actually didn't solve for the full cosserat model but for (omega_c, v_{1,2}).
PS: I guess what Aurélie means is that in escript the number of equations and the number of spatial dimensions are not linked. So you can solve a 2D Cosserat model on a 2D domain.

Revision history for this message
ceguo (hhh-guo) said :
#4

Hi Aurélie,

- Since I have 3 unknowns (u_x, u_y, phi_z) and 3 momentum equations, if I use 2d domain, I will encounter "slice index out of range" error.
- Actually I already used DirectSolver by setting "mypde.getSolverOptions().setSolverMethod(SolverOptions.DIRECT)". But I still get "Paso_SparseMatrix_invMain: non-regular main diagonal block".

Maybe I should solve the problem by solving two coupled PDEs (one for stress equilibrium and one for moment equilibrium) instead of condensing them into one.

Ning

Revision history for this message
Lutz Gross (l-gross) said :
#5

"- Since I have 3 unknowns (u_x, u_y, phi_z) and 3 momentum equations, if I use 2d domain, I will encounter "slice index out of range" error."
Can you clarify where this error occurs?

Revision history for this message
ceguo (hhh-guo) said :
#6

I am solving a unknown vector u which has three components corresponding to u_x, u_y and phi_z respectively. So the coefficients of the general PDE A_ijkL, B_ijk, C_ijk and D_ij all have their subscripts running from 0 to 2. But in dim=2 case, it is not allowed and causes this error. I'm trying to separate the unknown variables to see if I can handle it. Thanks.

Ning

Revision history for this message
Lutz Gross (l-gross) said :
#7

If you solve a system of 3 equations on a 2D domain A_ijkl has the shape (3,2,3,2):

domain=Rectangle(...)
mypde=LinearPDE(domain, numEquations=3, numSolution=3)
print mypde.getShapeOfCoefficient("A")

Revision history for this message
ceguo (hhh-guo) said :
#8

Great!
After taking your advice, I got the code run. I'm trying to benchmark the results.
Thanks!

Ning