CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM (http://www.cfd-online.com/Forums/openfoam/)
-   -   Implementation of traction BC in tractionDisplacementFvPatchVectorField.C (http://www.cfd-online.com/Forums/openfoam/90504-implementation-traction-bc-tractiondisplacementfvpatchvectorfield-c.html)

roenby July 12, 2011 12:58

Implementation of traction BC in tractionDisplacementFvPatchVectorField.C
 
Hello,

I am trying to understand how the implementation of the traction boundary condition in tractionDisplacementFvPatchVectorField.C works.

On line 176-180, it says:
--------------------------------
gradient() =
(
(traction_ + pressure_*n)/rho.value()
+ twoMuLambda*fvPatchField<vector>::snGrad() - (n & sigmaD)
)/twoMuLambda;
--------------------------------

When we apply this to a displacement field, D, the code sets the value of the normal gradient, n.grad(D), on the relevant boundary (right?).

What I don't understand is why n.grad(D) is set to the value appearing on the right hand side in the code.

As I understand it

fvPatchField<vector>::snGrad()

means n.grad(), and so if we mutliply by twoMuLambda on both sides of the equation above, we get something like

(2*mu + lambda) n.grad(D) = (t + p*n)/rho + (2*mu + lambda) n.grad(D) - n.sigma

Then the left hand side and the second term on the right hand side cancel out, and we are left with

(t + p*n)/rho = n.sigma

Which is physically sound... but I am still puzzled about how this is used to set n.grad(D) on the boundary, since the n.grad(D)-terms apparenly cancel out.

Can anyone give a hint as to how this works?

Cheers,

Johan

Hisham July 31, 2011 19:21

Hi Johan

I'm trying to understand this BC as well. I'm not really sure but I think this calculation is called for each time (or iteration) the governing equation is to be solved, and therefore, the current normal gradient fvPatchField<vector>::snGrad() is cancelled with the current stress sigmaD and the relation is more like:

gradient() = (traction + p * n) / (rho (2mu+lamda))

which is also sound if you can consider the strain=grad(u)

I don't know if that is 100% correct. But thanks for the post (saved me some time while going through the code)

Best regards,
Hisham


All times are GMT -4. The time now is 22:24.