# Magnitude of a tensor

 Register Blogs Members List Search Today's Posts Mark Forums Read

 February 19, 2013, 09:06 Magnitude of a tensor #1 Member   M Mallikarjuna Reddy Join Date: Jul 2012 Posts: 91 Rep Power: 11 Dear all, I would like to share your opinion on my doubt. - The rate of strain tensor is written as(if i have not understand wrongly): E=symm(grad(U))=1/2[grad(U)+grad(U)^T].......................(1) - According to linear algebra the magnitude of any tensor S is: |S|=sqrt(2S:S) .........................(2) - According to Eq. (2) the magnitude of rate of strain tensor is: |E| = sqrt(2E:E). ..............................(3) = sqrt(2*(E_ij*E_ij))...................... (4) - In OpenFOAM notation the magnitude of rate of strain tensor can be written as: |E|=sqrt(2*symm(grad(U))).......................(5) But for the testing purpose i defined a Tensor Q as [1 0 0 0 0.8 0 0 0 0.5]. According to Eq. (2), it's magnitude is 1.944222. But the OpenFOAM is giving 1.3747727. So the definition of the magnitude of tensor according to OpenFOAM is: |S| = sqrt(S:S)=sqrt(S_ij*S_ij)...........................(6) Which contradicts Eq. (2). Can any one clarify my doubt and how to write rate of strain tensor in OpenFOAM notation. Thanks in advance. yours Mallikarjuna Reddy

 February 20, 2013, 09:54 #2 Senior Member     Fumiya Nozaki Join Date: Jun 2010 Location: Yokohama, Japan Posts: 266 Blog Entries: 1 Rep Power: 16 Hi, As you wrote, the magnitude of a tensor is defined in OpenFOAM as eq.(6). This is also described in the programmer's guide p-16. Fumiya

 February 20, 2013, 11:17 #3 Member   M Mallikarjuna Reddy Join Date: Jul 2012 Posts: 91 Rep Power: 11 Hi Fumiya Thanks for quick response. But in most of the books the shear rate is written as |E| = sqrt(2E:E) where rate of strain tensor is: E=symm(grad(U))=1/2[grad(U)+grad(U)^T] So according to OpenFOAM notation, the shear rate will be |E| = sqrt(E:E) = sqrt(magSqr(symm(fvc::grad(U)))) Could you please clarify whether this notation is correct or not. Thanks Mallikarjuna Reddy

 February 20, 2013, 16:32 #4 Senior Member   Mahdi Hosseinali Join Date: Apr 2009 Location: NB, Canada Posts: 272 Rep Power: 15 I don't understand why the magnitude of tensor should be twice its double contraction? As a simple oppose example I can name vectors which are first order tensor and its magnitude would be sqrt(Ux^2+Uy^2+Uz^2). Still you may have shear stress right as: |E| = sqrt(E:E) = sqrt(2*magSqr(symm(fvc::grad(U))))

 February 9, 2015, 09:06 #5 Member   Rudolf Hellmuth Join Date: Sep 2012 Location: Dundee, Scotland Posts: 40 Rep Power: 11 I have the same question here. In viscosityModel.C, strain rate is defined as Code: Foam::tmp Foam::viscosityModel::strainRate() const { return sqrt(2.0)*mag(symm(fvc::grad(U_))); } In TensorI.H, symmetric part is defined as Code: template inline SymmTensor symm(const Tensor& t) { return SymmTensor ( t.xx(), 0.5*(t.xy() + t.yx()), 0.5*(t.xz() + t.zx()), t.yy(), 0.5*(t.yz() + t.zy()), t.zz() ); } Unfortunately, I couldn't find where mag(symmTensor T) is defined. However, the programmer's guide (v2.3.1) defines tensor magnitude as mag(T) = sqrt(T : T) .By trusting the programmer's guide, shouldn't the strain rate be defined as E = mag(symm(grad(U))) ,instead of E = sqrt(2.0)*mag(symm(grad(U))) ?Why is this sqrt(2) there?

August 14, 2015, 18:36
Sqrt(2)
#6
Member

Ken
Join Date: Aug 2012
Posts: 66
Blog Entries: 1
Rep Power: 11
Quote:
 Originally Posted by rudolf.hellmuth Why is this sqrt(2) there?
Greetings, Rudolf.

I'm a few months late here, but I think you have asked an important question. I worked this out once before but forgot my conclusion, so it's worth revisiting.

First, consider the definition of the (scalar) strain rate in 2D:
gamma_dot = U/y

Now, we would like a way to calculate the scalar strain rate in 3D tensor notation which will give us the same result. For instance, imagine a Couette flow, where:
Code:
grad(U) =
0    U/y    0
0    0      0
0    0      0
Therefore, the strain rate tensor is equal to:
Code:
E = 1/2[grad(U)+grad(U)^T]
E =
0            0.5 * U/y    0
0.5 * U/y    0            0
0            0            0
If we compute sqrt(E:E), we get:
Code:
sqrt(E:E)
= sqrt( (0.5 * U/y)^2 + (0.5 * U/y)^2)
= sqrt( 0.5 * (U/y)^2)
= sqrt(2)/2 * U/y
That's not right, because it doesn't agree with the 2D result (U/y). What we want is sqrt(2 E:E):
Code:
gamma_dot = sqrt(2 E:E)
= sqrt( 2 * ((0.5 * U/y)^2 + (0.5 * U/y)^2) )
= sqrt( (U/y)^2)
= U/y

So, at least based on this sanity check, it looks like the OpenFOAM definition for the scalar strain rate is correct. Does that make sense?

Does anyone else have references that provide further comments on the definition of the scalar strain rate in 3D tensor notation? Is it common to define the magnitude of a tensor A as |A| = sqrt(2 A:A)?
Thanks,
-Nuc

http://www.cfd-online.com/Forums/ope...1-vs-15-a.html

 August 16, 2015, 08:57 #7 Member   Rudolf Hellmuth Join Date: Sep 2012 Location: Dundee, Scotland Posts: 40 Rep Power: 11 This is still a mystery for me. I've got to the same point as you have. I cannot prove the equality in a reasonable way, just by the sanity check. I've got to these relations with Einstein's notation: mag(grad(u)) = sqrt( (du_i/dx_j)^2 ) mag(grad(E)) = 0.5 * sqrt( (du_i/dx_j + du_j/dx_i)^2 ) mag(grad(E)) = 0.5 * sqrt( (du_i/dx_j) ^2 + 2*(du_i/dx_j)*(du_j/dx_i) + (du_j/dx_i)^2 ) There is another thing, the more rational way of normalizing the shear rate at any reference frame is to use the second invariant of the strain rate tensor II = tr(E·E) = tr(E²) = E:E Last edited by rudolf.hellmuth; August 17, 2015 at 14:09.

 August 21, 2015, 12:52 #8 Member   Rudolf Hellmuth Join Date: Sep 2012 Location: Dundee, Scotland Posts: 40 Rep Power: 11 I think that I might have figure out the confusion here. The magnitude of a tensor is: mag(T) = sqrt(T:T) = sqrt(tr(T·T)) In the case of the strain rate, that is valid as well. However, the strain rate tensor is used for obtaining a scalar named absolute shear rate G, which is used as an analogy to the unidimensional shear rate \dot{\gamma} = dv/dx used in viscosity tests. This is done because viscosity tests are always unidimensional, but the rheological properties are extrapolated to 3D cases. This is done from the energy dissipation function phi = tau : grad(v) where tau = 2*mu*E In simple shear flow phi = mu*grad(v):grad(v) = mu*\dot{\gamma}*\dot{\gamma} I have done the derivation of E:grad(v). It is lengthy, but it resulted in E:grad(v) = E:E - 1/3*div(v)*div(v) The second part of the right had side accounts the compressibility. It is zero in incompressible cases. I think that they consider phi = mu * (2*E:E) = mu * G*G which yields G = sqrt(2*E:E) = sqrt(2) * mag(symm(grad(v))) I might be wrong in some of my statements. I haven't found any literature directly comparing G and E. Rudolf

December 12, 2018, 13:49
#9
Senior Member

Guilherme
Join Date: Apr 2017
Posts: 181
Rep Power: 6
Hi,

I think I learned a lot from this post. However, my algorithm has not given good results and I do not know if it is because of the way I wrote the magnitude of my strain rate tensor.

I need to write S², where S is the magnitude of my strain rate tensor.

I wrote in this form:

Quote:
Did I write in the correct way?

Because the magnitude result is a scalar and unfortunately I can not go with a scalar in a system of symmetric matrix operations. Ex: tmp<fvSymmTensorMatrix> tauEqn
I only get this operation if I multiply by a symmetric identity matrix, or have another form?