CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM CC Toolkits for Fluid-Structure Interaction (https://www.cfd-online.com/Forums/openfoam-cc-toolkits-fluid-structure-interaction/)
-   -   [solidMechanics] Support thread for "Solid Mechanics Solvers added to OpenFOAM Extend" (https://www.cfd-online.com/Forums/openfoam-cc-toolkits-fluid-structure-interaction/126706-support-thread-solid-mechanics-solvers-added-openfoam-extend.html)

ilhado June 27, 2019 15:38

Quote:

Originally Posted by bigphil (Post 737410)
Hi Iago,

Which compiler are you using? My guess is that these errors are related to you using "too new" a compiler. It should work with gcc 4, 5 and 6 (as well as relatively recent Intel compilers); I have not (yet) checked with later gcc versions.

Best,
Philip

Hey Philip, I am using gcc, version 5.4.0.
I already compiled it before at it worked with this version.
Do you think it could be related to the foam-extend version? I noted this same kind of warning the last time I compiled it.

Bests
Iago

bigphil June 29, 2019 14:44

Quote:

Originally Posted by ilhado (Post 737432)
Hey Philip, I am using gcc, version 5.4.0.
I already compiled it before at it worked with this version.
Do you think it could be related to the foam-extend version? I noted this same kind of warning the last time I compiled it.

Bests
Iago

Hi Iago,

I am not sure about the warnings but I would not worry about them; for the error, it comes from compiler options not available with gcc5 (-Wno-ignored-attributes -Wno-misleading-indentation). I have removed these now and pushed the changes to the development branch. I will merge the changes to the master once I have performed checks.

Philip

ilhado July 2, 2019 21:39

Quote:

Originally Posted by bigphil (Post 737546)
Hi Iago,

I am not sure about the warnings but I would not worry about them; for the error, it comes from compiler options not available with gcc5 (-Wno-ignored-attributes -Wno-misleading-indentation). I have removed these now and pushed the changes to the development branch. I will merge the changes to the master once I have performed checks.

Philip

Hello Philip,

Thank you very much! I will check the development version then!

Iago

Hgholami August 7, 2019 23:26

Quote:

Originally Posted by bigphil (Post 613815)
Hi all,

FYI, a couple of recent papers on solid mechanics in OpenFOAM:
I am in the process of tidying things up and intend to publicly share the main procedures.

PDFs of the accepted articles (pre publishing) can be found at my ResearchGate:
https://www.researchgate.net/profile/Philip_Cardiff


Philip

Hi Philip,
In Article "A Lagrangian Cell-Centred Finite Volume Method for Metal Forming Simulation", Page (5), you mentioned "The relative deformation gradient is given in terms of the displacement increment as f = I + ∇(u)T". But I saw in solid mechanics book that the deformation gradient is f =I+∇(u), without transpose.
In OpenFOAM the code of deformation gradient was
Quote:

volTensorField F = I + gradD_.T();
and I think the strain had this code E=0.5(transpose(F)*F-I)=0.5(gradD_ +gradD_.T()+gradD_ & gradD_.T() )
Quote:

epsilon_ = symm(gradD_); //=0.5(gradD_+gradD_.T())
if(nonLinear == nonLinearGeometry::TOTAL_LAGRANGIAN)
{
epsilon_ += 0.5*symm(gradD_ & gradD_.T());
}
I thinks, the article wrote base on OpenFOAM definition not solid mechanics book, is it OK?
because for grad different in OpenFOAM, I found this
http://uupload.ir/files/56jm_untitled.jpg
is it OK?

DOMaier August 28, 2019 09:09

friction BC without contact model
 
Hey all,


I am working on the poro-elastoplasitc solvers by Tian Tang.
For a multitude if situations concerning geotechnical problems I need to specify a friction boundary condition.


The BC should either specify the displacement or traction (depending on the situation) for the normal component of the DU field.
For the tangential component DU should be 0 as long as the resulting shear stress doesn't exceed the maximum value given by Coulomb's friction law (maxShear proportional to normal traction).
If it does exceed, it should chance to a fixed (tangential) traction BC for that face and iteration.


I was looking at the solidContact Boundary condition, but i think it is a bit overkill for what i need, since i dont need the ability of detachment and re-attachment of the material (yet).


So i was thinking, I should be able to build on the fixedDisplacementZeroShear BC.
However i can not seem to find where the tangential components are specified.
I think the confusion stems from the whole valueFraction-issue that is quite hard to get the head around at the start.


Can someone point me to the right lines in the fixedDisplacementZeroShear to modify?


Greetings
Denis

dewey September 17, 2019 13:30

descomposePar solid problem
 
Hello,


I have a problem, I hope some one can help me.


I am trying to do a FSI simulation. I create a Mesh for the fluid and use the utility extrudeMesh to get the solid Mesh. When I run my case in series I dont have problem.
But when I try to run my case in parallel, and use the decomposePar utility for the solid region I get this error, and when I descompose the fluid region doesnt have problem.







Code:

Decomposing mesh solid

Create time

Time = 0
Create mesh for region solid

Calculating distribution of cells
Selecting decompositionMethod simple

Finished decomposition in 0.02 s

Calculating original mesh data

Distributing cells to processors

Distributing faces to processors

Calculating processor boundary addressing

Distributing points to processors

Constructing processor meshes
Violación de segmento (`core' generado)


Lookid September 17, 2019 15:44

Quote:

Originally Posted by dewey (Post 744895)
Hello,


I have a problem, I hope some one can help me.


I am trying to do a FSI simulation. I create a Mesh for the fluid and use the utility extrudeMesh to get the solid Mesh. When I run my case in series I dont have problem.
But when I try to run my case in parallel, and use the decomposePar utility for the solid region I get this error, and when I descompose the fluid region doesnt have problem.







Code:

Decomposing mesh solid

Create time

Time = 0
Create mesh for region solid

Calculating distribution of cells
Selecting decompositionMethod simple

Finished decomposition in 0.02 s

Calculating original mesh data

Distributing cells to processors

Distributing faces to processors

Calculating processor boundary addressing

Distributing points to processors

Constructing processor meshes
Violación de segmento (`core' generado)


Hello dewey,

I had a similar problem. My 2D mesh was imported from ICEM, but not perfectly 2D, you can check this by running checkMesh -region solid. You'll have warnings if it's not perfectly 2D, and that would most likely be the cause of your problem. However the case can still run in serial for some reasons.
To solve the problem, simply make it properly 2D.

If that is not the problem, I don't know then. Try different decomposition method (scotch method is cool).

Hgholami September 17, 2019 21:28

Quote:

Originally Posted by dewey (Post 744895)
Hello,


I have a problem, I hope some one can help me.


I am trying to do a FSI simulation. I create a Mesh for the fluid and use the utility extrudeMesh to get the solid Mesh. When I run my case in series I dont have problem.
But when I try to run my case in parallel, and use the decomposePar utility for the solid region I get this error, and when I descompose the fluid region doesnt have problem.







Code:

Decomposing mesh solid

Create time

Time = 0
Create mesh for region solid

Calculating distribution of cells
Selecting decompositionMethod simple

Finished decomposition in 0.02 s

Calculating original mesh data

Distributing cells to processors

Distributing faces to processors

Calculating processor boundary addressing

Distributing points to processors

Constructing processor meshes
Violación de segmento (`core' generado)


Dear dewey
maybe you describe your case, we can find your problem.

paulbr November 19, 2019 12:01

fsiFoam&foam-extend4.0: Restart issue
 
Hi to everyone,
I'm working on fsi problems with foam-extend/4.0 and Fsifoam4.0. I'm currently trying to make a restart with initial data from specific time-step. The fluid side is not a problem and I'm sure the issue comes from the solid solver. I tried several possibilities but for now, I'm stuck with this error that I can't understand:
Code:

Create time
 
Create dynamic mesh for time = 0

Selecting dynamicFvMesh dynamicMotionSolverFvMesh
Selecting motion solver: refVelocityLaplacian
--> FOAM Warning :
    From function dlLibraryTable::open(const dictionary& dict, const word& libsEntry, const TablePtr tablePtr)
    in file /soft/foam-extend-4.0/foam/foam-extend-4.0/src/foam/lnInclude/dlLibraryTableTemplates.C at line 67
    library "libfvMotionSolver.so" did not introduce any new entries

Selecting motion diffusion: quadratic
Selecting motion diffusion: inverseDistance
 Reading stress mesh
[9]
[9]
[9] --> FOAM FATAL ERROR:
[9] Cannot find file "points" in directory "constant/solid/polyMesh"
[9]
[9]    From function Time::findInstance(const fileName&, const word&, const IOobject::readOption)
[9]    in file db/Time/findInstance.C at line 148.
[1]
[1]

which doesn't make any sense because constant/solid/polyMesh/points does exists.

My first question is: Did anyone face the same issue ?

Meanwhile, when I post-process my solid results for parallel cases, I'm unable to reconstruct them. (With paraview, I only use Decomposed Case.) It seems that I need meshPhi to reconstruct the solid domain. For now, I have changed the IOobject in unsTotalLagrangianSolid.C with no success because meshPhi is not written.
Code:

       
// meshPhi must be present in order to reconstruction procedure works
        surfaceScalarField meshPhi
        (
            IOobject
            (
                "meshPhi",
                runTime().timeName(),
                mesh(),
                IOobject::READ_IF_PRESENT,           
                IOobject::AUTO_WRITE       
            ),
            mesh(),
            dimensionedScalar("0", dimVolume/dimTime, 0.0)
        );
        meshPhi.write();
    }

Based on any fluid solver from OpenFoam, I need to reconstruct the domain to use it as initial data for another run.
My second question is: How can I nicely reconstruct the solid domain ? (in order to make a restart possible.)

Until today, I'm executing this:
Code:

#!/bin/bash
mkdir tmp
cd fluid
for proc in processor*; do
mkdir ../tmp/$proc
for time in $proc/*; do
ln -s ../../fluid/$time/solid ../tmp/$time
done
done
ln -s ../solid/system ../tmp/system
ln -s ../solid/constant ../tmp/constant
ln -s ../solid/0 ../tmp/0
cd ../tmp
touch solid.foam

which works fine for paraview but not for more...

Thanks in advance,

Paul

bigphil November 19, 2019 12:27

Hi Paul,

Although it will not directly solve your problem, it might be useful to try it out in solids4foam as some of these issues may have been fixed; PM me with your email address if you would like to use it.

Philip

Kellis January 15, 2020 13:32

Good afternoon,


When attempting to start the elasticOrthoNonLinULSolidFoam solver from a time other than zero, it complains of not being able to locate the materialDirections file in the timestep folder. Checking the orthotropicLinearElastic.C file, the materialDirections file is set to NO_WRITE. Is there any reason it shouldn't be changed to write in the saved timestep directories, to allow for the case to restart at a non-zero time?


Thanks,
Kellis

Hgholami January 17, 2020 00:29

Hi
I'm not familiar with this solver, but usually you can change IOobject to writing file in disk, it only increase storage. In general solvers, usually use NO_Write to make less storage.

Quote:

Originally Posted by Kellis (Post 754754)
Good afternoon,


When attempting to start the elasticOrthoNonLinULSolidFoam solver from a time other than zero, it complains of not being able to locate the materialDirections file in the timestep folder. Checking the orthotropicLinearElastic.C file, the materialDirections file is set to NO_WRITE. Is there any reason it shouldn't be changed to write in the saved timestep directories, to allow for the case to restart at a non-zero time?


Thanks,
Kellis


tschenkel January 17, 2020 03:55

Did you solve this?
 
Hi,


if you did solve this, could you let us know, what combination worked?


I have the same errors.



Thanks



Quote:

Originally Posted by treem22 (Post 728918)
Phil,

I pulled from the development branch and can confirm that restarting now works.

I'll play around with the under-relaxation and/or time step from here. Thanks!


erik87 January 17, 2020 05:07

Hi,


i'm currently writing my master thesis with geotechnical background.

For my thesis i'm using the elasticSolidFoam Solver.

Because of pressuretests i'm doing for my testcase models, i need to know what SI Unit foam-extend exactly uses.

So my Boundary Conditions need some pressures. I'm guessing Pa for pressure?

Has the pressure of the BC to be normalized with the density of the material?

It would be very great, if you could help me.




My BC for U looks like:

boundaryField
{
pressureside
{
type solidTraction;
traction uniform (0 0 0);

// I would like to set 80 bar pressure

pressure uniform 8e+06;
value uniform (0 0 0);
}
side with role conditon
{
type symmetryPlane;
}
}


Whats the difference between setting the pressure bc from:


traction uniform (0 0 8e+06) to my current bc setting

pressure uniform 8e+06 ? Or would the result be the same, if my pressure bc has to be set in z-direction?

As i understand traction uniform () you can set different vectors in traction uniform (), right?



Can i set the pressure bc with time variation, too?
So like to set the pressure bc with increasing pressure from 10 to 80 bar?


Sorry for so many questions i have.


Kind regards


Erik

bigphil January 17, 2020 13:00

Quote:

So my Boundary Conditions need some pressures. I'm guessing Pa for pressure?
Yes, Pa.

Quote:

Has the pressure of the BC to be normalized with the density of the material?
No, it is just Pa.

Quote:

pressureside
{
type solidTraction;
traction uniform (0 0 0);

// I would like to set 80 bar pressure

pressure uniform 8e+06;
value uniform (0 0 0);
}
Yep, that's correct, where positive means pushing in on the surface.



Quote:

Whats the difference between setting the pressure bc from:

traction uniform (0 0 8e+06) to my current bc setting

pressure uniform 8e+06 ? Or would the result be the same, if my pressure bc has to be set in z-direction?
If the patch outward-facing normal is in the negative z direction i.e. (0 0 -1), then these are both exactly the same; otherwise, they are not. Also, if you define them both then they are added together before being applied to the patch, so only set one as non-zero.

Quote:

As i understand traction uniform () you can set different vectors in traction uniform (), right?
Yes.

Quote:

Can i set the pressure bc with time variation, too?
So like to set the pressure bc with increasing pressure from 10 to 80 bar?
In solids4foam, yes; example:
Code:

myPatch
{
    type    solidTraction;
    traction  uniform (0 0 0);
    pressureSeries
    {
        fileName    "$FOAM_CASE/constant/timeVsPressure;
        outOfBounds  clamp;
    }
    value  uniform (0 0 0);
}

where for a ramp over 10 seconds, timeVsPressure looks like:
Code:

(
    (0 10e5)
    (10 80e5)
)


Philip

erik87 January 20, 2020 17:28

Thank you very much Philip :)


Is it correct to say, that using only the nonuniform internalField from U volVectorField would be enougth for initial conditon for stress simulation?


I'm using mapFields for getting the nonuniform internalField, but in the first step of my simulations i'm just getting the U Field interpolated to my next mesh.

tschenkel January 20, 2020 18:02

Quote:

Originally Posted by bigphil (Post 754924)
Yes, Pa.


No, it is just Pa.


Yep, that's correct, where positive means pushing in on the surface.

Just to clarify:

The fluid solvers in solids4Foam still use kinematic pressure [m^2/s^2], but the solid solvers do use [Pa]?

paulbr January 21, 2020 06:15

Hello everyone,

While using Solids4foam for my new cases, I need to finish some works with fsifoam (and FE4.0).
I have mainly two situations:
1) I needed to refine my fluid mesh and it doesn't matter the time step value, the number of processors used for the decomposition, etc..., this kind of error appears (while my case was running with larger cells..):
Code:

[1] --> FOAM FATAL ERROR:
[1] face 1268 area does not match neighbour by 0.102887% -- possible face ordering problem.
patch: procBoundary1to2 my area: 2.50158e-05 neighbour area: 2.49901e-05 matching tolerance: 1
Mesh face: 300506 vertices: 4((0.060402 -0.0942063 0.248161) (0.0538921 -0.0941869 0.237484) (0.053892 -0.096 0.238672) (0.060402 -0.0959902 0.250003))
Rerun with processor debug flag set for more information.
[1]
[1]    From function processorPolyPatch::calcGeometry()
[1]    in file meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C at line 230.
[1]
FOAM parallel run exiting

Now, I could increase the tolerance in processorPolyPatch.C, but I'm not sure it will definitively solve my problem. Do you have any idea how to get rid of it ?

2) As I'm not sure where my problem comes from, I tried to use the FE dynamic mesh solver, which I read gives much more robust results. I'm struggling to use it with fsiFoam and foam-extend/4.0. This error appears:
Code:

--> FOAM FATAL ERROR:
Field size: 213 does not match number of points: 979

    From function tmp<Foam::Field<Type> >
tetPolyPatchInterpolation::pointToPointInterpolate
(
    const Field<Type>& ff
) const
    in file /soft/foam-extend-4.0/foam/foam-extend-4.0/src/tetFiniteElement/lnInclude/tetPolyPatchInterpolate.C at line 112.

I had a look to tetPolyPatchInterpolate.C
Code:

    if (ff.size() != patch_.patch().size())
    {
        FatalErrorIn
        (
            "tmp<Foam::Field<Type> >\n"
            "tetPolyPatchInterpolation::faceToPointInterpolate\n"
            "(\n"
            "    const Field<Type>& ff\n"
            ") const"
        )  << "Field size: " << ff.size() << " does not match number of faces: "
          << patch_.patch().size()
          << abort(FatalError);
    }

but... I can't understand this... Do you have any idea where it comes from ? (Btw, there are only fixedValue and slip boundary conditions in my motionU files.)

Could my second question solve the first one ?

Any help is welcome on both situation... :) !

Best,
Paul

Kellis January 21, 2020 18:40

Paul,

Do you have your FSI boundaries declared as global face zones in the decomposeParDict for both fluid and solid? I.e.:

Code:

globalFaceZones ( fsiBoundaryPatchName )
I had a similar error and I think that's what fixed it for me.

Thanks,
Kellis

bigphil January 22, 2020 05:52

Quote:

Originally Posted by tschenkel (Post 755116)
Just to clarify:

The fluid solvers in solids4Foam still use kinematic pressure [m^2/s^2], but the solid solvers do use [Pa]?

Hi tschenkel,

Some fluid solvers (incompressible flow) in OpenFOAM use kinematic pressure and most solid solvers use pressure in Pa. It depends on the specific solver.

However, for the solidTraction solid boundary condition, it assumes Pa regardless of the solid solver using it.

Philip


All times are GMT -4. The time now is 09:50.