# solids4Foam: Zero Displacment in one diection, and motions in two other directions

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

 February 1, 2021, 06:03 solids4Foam: Zero Displacment in one diection, and motions in two other directions #1 New Member   Sasan Tavakoli Join Date: Sep 2018 Posts: 12 Rep Power: 7 I am dealing with a solid mechanic problem that I need to physically prevent the solid displacement in one direction at one boundary. I want to do it in x-direction, and let two other directions be free. I've tried to do so, and had a look at fvPatchFields. I reckon that the fixedNormalDisplacement can be helpful in this field. But, I don't have any idea about how to use it. I tried to go through tutorials, but I was not fortunate to find any example for it. Would anyone please kindly let me know how to implement this boundary.

 February 1, 2021, 06:46 #2 Super Moderator     Philip Cardiff Join Date: Mar 2009 Location: Dublin, Ireland Posts: 1,091 Rep Power: 34 Hi Sasan, The fixedDisplacementZeroShear boundary condition will set the patch-normal component of displacement and allow the two tangential directions to be free (aka zero shear/force/traction). This will set the displacement in the patch normal direction and set the two tangential directions to “free” i.e. zero force. Concretely, if your patch has unit normals (1 0 0) then the displacement vector will be (fixed free free). The value of the "fixed" displacement is taken from the "value" in the boundary condition; in this case, the fixed x component will be the x component of the "value" vector. Philip ttsasan likes this.

February 1, 2021, 07:00
#3
New Member

Sasan Tavakoli
Join Date: Sep 2018
Posts: 12
Rep Power: 7
Quote:
 Originally Posted by bigphil Hi Sasan, The fixedDisplacementZeroShear boundary condition will set the patch-normal component of displacement and allow the two tangential directions to be free (aka zero shear/force/traction). This will set the displacement in the patch normal direction and set the two tangential directions to “free” i.e. zero force. Concretely, if your patch has unit normals (1 0 0) then the displacement vector will be (fixed free free). The value of the "fixed" displacement is taken from the "value" in the boundary condition; in this case, the fixed x component will be the x component of the "value" vector. Philip
Hi Philip. Thank you very much. That's so helpful. So, I need to define the BC as
patch name
{
type fixedDisplacementZeroShear;
value uniform (0 0 0);
}

But, what if the patch's normal vector is not the direction in which i want the fixed displacement. Assume that the patch normal vector is (cos(theta), sin(theta), 0). What about this case. Can I again prescribe zero displacement in x-direction?

February 1, 2021, 07:15
#4
Super Moderator

Philip Cardiff
Join Date: Mar 2009
Location: Dublin, Ireland
Posts: 1,091
Rep Power: 34
Quote:
 Originally Posted by ttsasan Hi Philip. Thank you very much. That's so helpful. So, I need to define the BC as patch name { type fixedDisplacementZeroShear; value uniform (0 0 0); }
Yes, that's correct.

Quote:
 Originally Posted by ttsasan But, what if the patch's normal vector is not the direction in which i want fixed displacement. Assume, that the patch normal vector is (cos(theta), sin(theta), 0). What about this case. Can I again prescribe zero displacement in x-direction?
In that case you need another boundary condition: solidDirectionMixed.

The fixedDisplacementZeroShear behaviour is a specific sub-set of solidDirectionMixed behaviour (fixedDisplacementZeroShear derives from solidDirectionMixed).

solidDirectionMixed is just the built-in OpenFOAM directionMixed condition, and solidDirectionMixed/directionMixed is the mother of all boundary conditions: depending on the inputs you can use it for fixed value, fixed gradient or anything in between.
Unfortunately with this great flexibility comes somewhat confusing inputs. In my experience many people struggle with understanding how to correctly use it.

I suggest searching the forum for solidDirectionMixed and directionMixed to get more details, but in short, solidDirectionMixed is specified using three fields:
Code:
```    refGradient    uniform ( 0 0 0 );
refValue       uniform ( 0 0 0 );
valueFraction  uniform ( 0 0 0 0 0 0 );
// Actually, value must also be given as the initial condition```
The value fraction is a symmTensor and allows you to specify the fixed direction(s). To fix one component, set it to symm(n*n) where n is the normal direction you want to fix i.e. for n = (1 0 0), it is (1 0 0 0 0 0).
refValue gives the value (displacement) you want to use for these fixed faces (or components of faces), and refGradient gives the gradient to use on the non-fixed faces or components of faces. If you do want to use this for solid mechanics then you need to iteratively set the refGradient to satisfy the zero-force/traction condition (this probably means writing a derived boundary condition).

See, I told you it wasn't straight-forward

If you like, you can add a request/issue on the solids4foam bitbucket page to request this new boundary condition.

Philip

February 1, 2021, 07:53
#5
New Member

Sasan Tavakoli
Join Date: Sep 2018
Posts: 12
Rep Power: 7
Quote:
 Originally Posted by bigphil Yes, that's correct. Code: ``` refGradient uniform ( 0 0 0 ); refValue uniform ( 0 0 0 ); valueFraction uniform ( 0 0 0 0 0 0 ); // Actually, value must also be given as the initial condition``` Philip
Philip. Thank you very much. I got the point now. The mixed-direction bc gives a combination of Neumann and Dirichlet conditions in different directions. It helps us to prescribe any constant value for any of them, which is really helpful in solid mechanics. If I'm right the first three components of valueFraction are related to the refValue and the next three ones are related to gradient. Since I want the refValue, relative displacmenet, to be zero in the direction (1 0 0), I set the valueFraction to be (1 0 0 0 0 0 ). I can also set the gradient to be zero in any direction I want.

That's very good.

Thank you very much.

February 1, 2021, 10:11
#6
Super Moderator

Philip Cardiff
Join Date: Mar 2009
Location: Dublin, Ireland
Posts: 1,091
Rep Power: 34
Quote:
 Originally Posted by ttsasan If I'm right the first three components of valueFraction are related to the refValue and the next three ones are related to gradient.
Nope, this is not the case (see I told you people often find it confusing!).
See my comments about regarding the value fraction and also search the forum for other posts on solidDirectionMixed/directionMixed.

February 2, 2021, 19:56
#7
New Member

Sasan Tavakoli
Join Date: Sep 2018
Posts: 12
Rep Power: 7
Quote:
 Originally Posted by bigphil Yes, that's correct. In that case you need another boundary condition: solidDirectionMixed. The fixedDisplacementZeroShear behaviour is a specific sub-set of solidDirectionMixed behaviour (fixedDisplacementZeroShear derives from solidDirectionMixed). solidDirectionMixed is just the built-in OpenFOAM directionMixed condition, and solidDirectionMixed/directionMixed is the mother of all boundary conditions: depending on the inputs you can use it for fixed value, fixed gradient or anything in between. Unfortunately with this great flexibility comes somewhat confusing inputs. In my experience many people struggle with understanding how to correctly use it. Philip
Philip, I tried the solidDirectionMixed. It provides the zero motion in the prescribed direction but the point gets really high gradient in that direction as well. But, I solved the problem. I created a baffle and defined an internal patch just next to the boundary. What I did was to force the patch to have the fixedDisplacementZeroShear, which works very well for my case.

March 25, 2022, 09:29
Uni-axial compression BC setup
#8
New Member

Craig Thomas
Join Date: Dec 2019
Location: Leeds, UK
Posts: 12
Rep Power: 6
Hi Philip,

Similarly to Sasan I am dealing with a solid mechanic problem that I want to physically prevent the solid displacement in the x and z direction at one boundary. To give more context, I'm trying to replicate a confined compression test of a cylindrical sample of cartilage.

I'm only modelling a quarter of the sample due to symmetry which is made of o block topology formed of three blocks.

I want to displace the top surface over a certain amount of time (timeVaryingFixedDisplacement) and I want the side wall of my model to deform as a function of the top surface without any 'lateral' displacement on the outer arc side walls.

Currently I had set up something to do this using groovyBC but this is causing stability issues due to high gradients.

Is it possible to use fixedDisplacementzeroshear to stop the displacement in the x and z directions for my side walls. If so how would I Implement this for the Arcs surface? Im also using Foam-Extend 4 is there any way to implement that6 boundary condition there as I know this BC is only in solids 4foam

Craig
Attached Images
 Mesh.jpg (44.3 KB, 12 views)

March 28, 2022, 06:17
#9
Super Moderator

Philip Cardiff
Join Date: Mar 2009
Location: Dublin, Ireland
Posts: 1,091
Rep Power: 34
Quote:
 Originally Posted by mn14cat Hi Philip, Similarly to Sasan I am dealing with a solid mechanic problem that I want to physically prevent the solid displacement in the x and z direction at one boundary. To give more context, I'm trying to replicate a confined compression test of a cylindrical sample of cartilage. I'm only modelling a quarter of the sample due to symmetry which is made of o block topology formed of three blocks. I want to displace the top surface over a certain amount of time (timeVaryingFixedDisplacement) and I want the side wall of my model to deform as a function of the top surface without any 'lateral' displacement on the outer arc side walls. Currently I had set up something to do this using groovyBC but this is causing stability issues due to high gradients. Is it possible to use fixedDisplacementzeroshear to stop the displacement in the x and z directions for my side walls. If so how would I Implement this for the Arcs surface? Im also using Foam-Extend 4 is there any way to implement that6 boundary condition there as I know this BC is only in solids 4foam Thanks in advance Craig
Hi Craig,

It looks like your case axisymmetric (2-D); if so, you could use wedge (or solidWedge) conditions and then use the fixedDisplacementZeroShear condition for the side.

If you do need to simulate the quarter cylinder then fixedDisplacementeroShear should also work as it "fixes" the normal direction on the patch, i.e. the radial displacement would be zero in this case (assuming that's what you want).

January 13, 2024, 12:31
#10
New Member

Manchester
Join Date: Aug 2022
Posts: 27
Rep Power: 4
Quote:
 Originally Posted by bigphil Hi Sasan, The fixedDisplacementZeroShear boundary condition will set the patch-normal component of displacement and allow the two tangential directions to be free (aka zero shear/force/traction). This will set the displacement in the patch normal direction and set the two tangential directions to “free” i.e. zero force. Concretely, if your patch has unit normals (1 0 0) then the displacement vector will be (fixed free free). The value of the "fixed" displacement is taken from the "value" in the boundary condition; in this case, the fixed x component will be the x component of the "value" vector. Philip
Hi Philip,

I plan to set up a FSI case, for the solid domian, which is a top tensioned beam, that is , both ends are fixed, and there is an extra tension load be applied along the beam. I ried solid traction, but this boundary condition can not fix the beam end. I tried fixedDisplacementZeroShear as well, but it doesn't work. Could you please give some ideas how to set it?

Best Regards,
Tian

 January 15, 2024, 04:56 #11 Super Moderator     Philip Cardiff Join Date: Mar 2009 Location: Dublin, Ireland Posts: 1,091 Rep Power: 34 Hi Tian, If both ends are fixed, then you could apply traction to the sides of the beam, or you could apply a body force (like gravity). Philip

January 15, 2024, 10:30
#12
New Member

Manchester
Join Date: Aug 2022
Posts: 27
Rep Power: 4
Quote:
 Originally Posted by bigphil Hi Tian, If both ends are fixed, then you could apply traction to the sides of the beam, or you could apply a body force (like gravity). Philip
Hi Philip,

Many thanks for your reply. My current set up for the solid part is shown below,

FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object D;
}

dimensions [0 1 0 0 0 0 0];

internalField uniform (0 0 0);

boundaryField
{
interface
{
type solidForce;
forceField solidForce;
value uniform (0 0 0);
}
top
{
type fixedDisplacement;
value uniform (0 0 0);
}
bottom
{
type fixedDisplacement;
value uniform (0 0 0);
}
frontAndBack
{
type empty;
}
}

When you said applt traction to the sides of the beam, how to do it? Since I want to apply this traction and keep both ends being fixed at the same time.

Best,
Tian

 January 15, 2024, 11:42 #13 Super Moderator     Philip Cardiff Join Date: Mar 2009 Location: Dublin, Ireland Posts: 1,091 Rep Power: 34 I am not sure what you are trying to simulate. Is it a simple beam? Is there FSI or not? What is the physical problem you are approximating? On a boundary, you can enforce a known displacement or known force, but not both. Maybe a body force (like gravity) will achieve what you want?

January 15, 2024, 11:51
#14
New Member

Manchester
Join Date: Aug 2022
Posts: 27
Rep Power: 4
Quote:
 Originally Posted by bigphil I am not sure what you are trying to simulate. Is it a simple beam? Is there FSI or not? What is the physical problem you are approximating? On a boundary, you can enforce a known displacement or known force, but not both. Maybe a body force (like gravity) will achieve what you want?
Hi Philip,

I'm trying to simulate FIV of the flexible cylinder, like offshore structures (pipeline, cable). The fluid domain is solved by using OpenFOAM with overset mesh, and for the solid domain, I plan to use solids4Foam,, then couplet them via preCICE. From some references, they mentioned both ends of the flexible structures are pinned and are tensioned. Here is one of the reference, https://pdf.sciencedirectassets.com/...498435c5&cc=gb.

To study the effect of the tension of the FIV, and compare against the experimental data, I hope I can add this boundary condition on the cylinder by using solids4Foam.

Best,
Tian

January 15, 2024, 11:57
#15
New Member

Manchester
Join Date: Aug 2022
Posts: 27
Rep Power: 4
Quote:
 Originally Posted by Tianyz Hi Philip, I'm trying to simulate FIV of the flexible cylinder, like offshore structures (pipeline, cable). The fluid domain is solved by using OpenFOAM with overset mesh, and for the solid domain, I plan to use solids4Foam,, then couplet them via preCICE. From some references, they mentioned both ends of the flexible structures are pinned and are tensioned. Here is one of the reference, https://pdf.sciencedirectassets.com/...498435c5&cc=gb. To study the effect of the tension of the FIV, and compare against the experimental data, I hope I can add this boundary condition on the cylinder by using solids4Foam. Best, Tian
Try to make it clear, the top and bottom are the ends of the beam, while the interface is where the fluid force is exerted.

 January 19, 2024, 04:50 #16 Super Moderator     Philip Cardiff Join Date: Mar 2009 Location: Dublin, Ireland Posts: 1,091 Rep Power: 34 One option could be to apply a non-zero displacement to the ends of the beam to elongate the beam, thereby inducing tension. Alternatively, you could use zero displacement conditions but apply an initial stress to the beam. This can be done by supplying a sigma0 field in the 0 directory with the desired initial stress field.

 Tags free motions, solids4foam, zero displacment