SIF file in PIEZO example

General discussion about Elmer
bomastudio
Posts: 36
Joined: 22 Aug 2012, 13:43
Antispam: Yes

Re: SIF file in PIEZO example

Post by bomastudio »

Thanks very much! Now it's clear.......
alberto.lega
Posts: 4
Joined: 27 May 2015, 11:22
Antispam: Yes

Re: SIF file in PIEZO example

Post by alberto.lega »

I am a newbie too to FEM simulation. I need Elmer for simulating a direct piezoelectric effect. I hold to be true that Elemer can sole this kind of problem considering what I read in this thread. Unfortunately I do not understand how to set up sif file for forcing the coupling between electrical and linear elastic equations. Is the following piece of code sufficient for this purpose?

Code: Select all

Body Force 1

  Piezo Material = Logical True
Moreover I do not understand why the Piezo Material Coefficient matrix must be 2x4 in 2D case. I think it should be 2x3 because it relates 3 mechanical displacements to 2 components of electrical displacement vector.

Thank you very much for any help.
Best regards.
Alberto
annier
Posts: 1168
Joined: 27 Aug 2013, 13:51
Antispam: Yes

Re: SIF file in PIEZO example

Post by annier »

alberto.lega wrote:I do not understand how to set up sif file for forcing the coupling between electrical and linear elastic equations. Is the following piece of code sufficient for this purpose?

Code: Select all

Body Force 1

  Piezo Material = Logical True
Hi Alberto,
I am trying to answer as much as i can in relation to the coupling between StatElecSolve and StressSolve for simulation of Piezoelectric Material.
The following code snippet from StatElecSolve couples it hierarchially with the StressSolver.

Code: Select all

 bf_id = ListGetInteger( Model % Bodies(CurrentElement % BodyId) % &
               Values, 'Body Force',gotIt, minv=1, maxv=Model % NumberOfBodyForces )
         Load  = 0.0_dp
         PiezoMaterial = .FALSE.
         IF ( gotIt ) THEN
           Load(1:n) = ListGetReal( Model % BodyForces(bf_id) % Values, &
                 'Charge Density', n, NodeIndexes, GotIt )        
           Load(1:n) = Load(1:n) / PermittivityOfVacuum        
           PiezoMaterial = GetLogical( Model % BodyForces(bf_id) % Values, &
                 'Piezo Material', GotIt ) 
         END IF
...

Code: Select all

 !------------------------------------------------------------------------------
         !      Read piezo material coefficients if applicable
         !------------------------------------------------------------------------------
         IF ( PiezoMaterial ) THEN
           PiezoCoeff = 0.0_dp
           CALL GetRealArray( Model % Materials(k) % Values, Pz_w, &
                 'Piezo Material Coefficients', gotIt, CurrentElement )
           IF ( .NOT. GotIt )  CALL Fatal( 'StatElecSolve', &
                 'No > Piezo Material Coefficients < defined!' )        
           DO i=1, Dim
             DO j=1, 2*Dim
               PiezoCoeff( i,j,1:n ) = Pz_w(i,j,1:n)
             END DO
           END DO
...

Code: Select all

!------------------------------------------------------------------------------
!        The piezo force term
!------------------------------------------------------------------------------

         IF ( PiezoMaterial ) THEN
           ! So far only plane strain in 2D  (LocalStrain(3) = 0)           
           LocalStrain = 0.0_dp
           DO i = 1, Dim
             LocalStrain(i) = SUM( dBasisdx(1:n,i) * Displacement(1:n,i) )
           END DO
           LocalStrain(4) = 0.5_dp * ( SUM( dBasisdx(1:n,1) * Displacement(1:n,2) ) &
               + SUM( dBasisdx(1:n,2) * Displacement(1:n,1) ) )
           IF ( Dim == 3 ) THEN
             LocalStrain(5) = 0.5_dp * ( SUM( dBasisdx(1:n,2) * Displacement(1:n,3) ) &
                 + SUM( dBasisdx(1:n,3) * Displacement(1:n,2) ) )
             LocalStrain(6) = 0.5_dp * ( SUM( dBasisdx(1:n,1) * Displacement(1:n,3) ) &
                 + SUM( dBasisdx(1:n,3) * Displacement(1:n,1) ) )
           END IF
           
           PiezoLoad = 0.0_dp
           DO i = 1, Dim
             DO j = 1, 2*Dim
               PiezoLoad(i) = PiezoLoad(i) + SUM( Basis(1:n) * PiezoCoeff(i,j,1:n) ) * &
                   LocalStrain(j)
             END DO
           END DO
         END IF
         
So, by invoking

Code: Select all

Piezo Material = Logical True 
in SIF can perform the above mentioned task.

Yours Sincerely
Anil Kunwar
Anil Kunwar
Faculty of Mechanical Engineering, Silesian University of Technology, Gliwice
annier
Posts: 1168
Joined: 27 Aug 2013, 13:51
Antispam: Yes

Re: SIF file in PIEZO example

Post by annier »

alberto.lega wrote: Moreover I do not understand why the Piezo Material Coefficient matrix must be 2x4 in 2D case. I think it should be 2x3 because it relates 3 mechanical displacements to 2 components of electrical displacement vector.
Hi Alberto,
This question has been answered in page 1 of this post.

Yours Sincerely
Anil Kunwar
Anil Kunwar
Faculty of Mechanical Engineering, Silesian University of Technology, Gliwice
alberto.lega
Posts: 4
Joined: 27 May 2015, 11:22
Antispam: Yes

Re: SIF file in PIEZO example

Post by alberto.lega »

Hi Anil,
thank you very much for your answer regarding the coupling. I pretty understood it. Unfortunately I still do not undertand why the Piezo Material Coefficient matrix must be 2x4.
raback wrote:Hi

I guess it is the matrix for the direct piezoelectric effect. See
http://en.wikipedia.org/wiki/Piezoelectricity

It is 2x4 because we are working in 2D case. In 3D it would be 3x6.

-Peter
I perfectly agree that in 3D case it would be 3x6, but it should be 2x3 in 2D cases. I think that first three columns belong to what I consider to be direct effect matrix, but I think that the fourth column is needed by Elmer software for some purpose I do not know. If this is the case, what happen if I fill it with 0 like the example in page 1 of this post?
Moreover, do I need to create a 3x7 matrix in 3D case?

Thank you very much.
Alberto
mancf
Posts: 11
Joined: 15 Jul 2015, 18:58
Antispam: Yes

Re: SIF file in PIEZO example

Post by mancf »

Hi,
In the piezo test case, if we remove the 'Stress BodyForce' from the body force section, it doesn't appear any stress from the applied field. I would say that there is some error. Could someone cross-check it?
Regards,
annier
Posts: 1168
Joined: 27 Aug 2013, 13:51
Antispam: Yes

Re: SIF file in PIEZO example

Post by annier »

Hi mancf,
The piezo test case is the illustration of coupling between the three variables in 2D (displacement_x, displacement_y and potential_phi) and the solvers used in Elmer for this multiphysics coupling are
1. Static Conduction Solver
2. Stress Analysis Solver
A good example illustration on piezoelectric material (in Matlab) for PDE formulation is provided in this link here.
So, the output is basically displacement for applied voltage. You can output stress field as well.
Can you elaborate your question more?

Yours Sincerely,
Anil Kunwar
Anil Kunwar
Faculty of Mechanical Engineering, Silesian University of Technology, Gliwice
mancf
Posts: 11
Joined: 15 Jul 2015, 18:58
Antispam: Yes

Re: SIF file in PIEZO example

Post by mancf »

Thanks Annier,
Sorry, probably I did not explain myself properly. In this problem, two types of loads are applied: a voltage difference applied to the piezo and stress body forces. Both loads should cause deformation of the structure. (Correct me if I am wrong...).
If I remove the stress body forces to the problem (I just commented both stress body forces), the structure should still be deformed by the piezoelectric effect. I have tested it and it doesn't appear any deformation. The mechanical simulation generates a trivially zero solution.
Regards,
mancf
annier
Posts: 1168
Joined: 27 Aug 2013, 13:51
Antispam: Yes

Re: SIF file in PIEZO example

Post by annier »

Hi mancf,
I tried the solver run with
commented

Code: Select all

!Stress BodyForce 2 = -1e8
and
uncommented

Code: Select all

Stress BodyForce 2 = -1e8
.
Just as you say, for the commented case (0 stress bodyforce) , the largest magnitude of displacement is in the order of 1e-16 (~0). Whereas this displacement is around 1.0e-7 for uncommented stress bodyforce.
This is a test case for mathematical consistence. Can you try once by reshuffling the magnitudes of coefficients

Code: Select all

Piezo Material Coefficients(2,4) = Real \
	0 10 0 0 \
10 0 0 0
and what effect they make in displacement?
Also, you can try the options of uncommenting

Code: Select all

!  Stress(3) = Variable Electric Field 2
!    Real 
!      0  1 0 0
!      1  1 0 0
! End
when you comment

Code: Select all

Stress BodyForce 2 = -1e8
.

However, the baseline is to see in detail the source code of the above mentioned solvers.

Yours Sincerely,
Anil Kunwar
Anil Kunwar
Faculty of Mechanical Engineering, Silesian University of Technology, Gliwice
mancf
Posts: 11
Joined: 15 Jul 2015, 18:58
Antispam: Yes

Re: SIF file in PIEZO example

Post by mancf »

Hi Annier,
I have tested different options for the piezoelectric coefficients. I have used all these coefficients different than 0 and with very high values. This should generate a large deformation. The problem is that the solver seems to ignore them. It only takes into account the stress body forces (when activated) but not the electric field (and, therefore, the piezoelectric coefficients effect is null).
Uncommenting 'Stress(3)' (with the stress body force commented) also does not seem to work. There is no deformation generated.
Maybe it is not taking the electric field variable properly, or it is taking always a 0 value for the electric field.
Regards,
mancf
Post Reply