CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Running, Solving & CFD

Simulate the movement of boats

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

Reply
 
LinkBack Thread Tools Display Modes
Old   June 19, 2008, 05:08
Default Hi Alexandre Take a look at
  #21
ngj
Senior Member
 
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Deltares, Delft, The Netherlands
Posts: 1,620
Rep Power: 25
ngj will become famous soon enoughngj will become famous soon enough
Hi Alexandre

Take a look at this (advertising own product):

http://www.cfd-online.com/OpenFOAM_D...es/1/6919.html

Download path has been changed, i.e. s001581 to be replaced by ngja.

Have fun,

Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request.
ngj is offline   Reply With Quote

Old   June 19, 2008, 05:13
Default Hi All, Eric, I saw some of
  #22
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Hi All,

Eric, I saw some of your Wigley hull results somewhere else in this forum. I will have a look at your case files. Very curious about how you did it. Have you implemented corrections for trim/sinkage?

Alex,
I did use a single inlet patch and created a simple utility which sets gamma 1 based on z coordinate. I posted the files somewhere else in this forum (setBoundarygamma). If you get it running, funkysetfields can do exactly the same (and a lot more).
Regarding 6 dof solvers: I am not sure if I get you right but you need this especially for dynamic simulations, right? Though this is surely a target, for this moment I am focusing on calm water, which for me is quiet challenging already. Having the results as shown, one now should integrate the displaced water volume. The difference with this volume (x rho) should be compared with ships weight and hull shall be moved in domain, both in z translation and y rotation. This integration needs to be performed anyway, both for dynamic and steady state simulations. I think I will be able to write some routine which is able to do this, based on gamma > 0.5 e.g. However, due to mesh fineness/coarseness, the water-air interface may be several decimeters thick, so integrating hull volume might be rather inaccurate. Therefore I am thinking about using movingmesh to let the initial water-air interface follow a certain gamma value, e.g. 0.5. Or possibly it is a better idea to make it follow a pressure value (pd=0)? The strategy to follow here may also depend on the ultimate target. If you are only interested in steady state, you may assume that water stays connected. However if you ultimately intend to perform dynamic simulations, breaking waves may occur, making it more challenging to apply movingmesh.

My mesh is generated using GiD, some commercial mesher which works well but has limited possiblities. I also succesfully used gmsh. With Salome (which has netgen implemented) I was less lucky.

Stiffness: my first guess is that the order of magnitudes are the same for static velocity and roll/trim. Roll period of this 16m boat will be something like 4-6 sec.

Thanks all for your input,

Brgds,

Mark
markc is offline   Reply With Quote

Old   June 19, 2008, 05:21
Default Alex, Your question regardi
  #23
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Alex,

Your question regarding wave models: frankly, I have no idea. However I will discuss this with a colleague who is specialized in seakeeping behavior.

Brgds,

Mark
markc is offline   Reply With Quote

Old   June 19, 2008, 05:46
Default Eric, I had an initial glan
  #24
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Eric,

I had an initial glance at your model, one first question: how did you create your mesh? Do you think the method is suitable to generate mesh using any kind of hull shape, supplied e.g. in iges format?
I suspect that using a hex mesh like you did is really the key to stability, especially at the boundaries.

Brgds,

Mark
markc is offline   Reply With Quote

Old   June 19, 2008, 06:40
Default Mark/Alex, Grid: grid was
  #25
egp
Senior Member
 
egp's Avatar
 
Eric Paterson
Join Date: Mar 2009
Location: Blacksburg, VA
Posts: 197
Blog Entries: 1
Rep Power: 9
egp is on a distinguished road
Mark/Alex,

Grid: grid was generated using Gridgen from Pointwise, Inc, which directly reads geometry in IGES format (plus a number of other CAD formats). My experience is that to get good boundary layer and free-surface resolution, you need to minimally use structured hex mesh in these regions. Of course, I wouldn't be doing this if the approach wasn't extensible beyond the Wigley Hull!

Sinkage & Trim: We have a 6DOF version of rasInterFOAM running and are going through the validation process. We've done free-roll, and roll in beam seas, and comparisons with data are quite good. With this code, sinkage and trim should be trivial, however, we haven't done it yet. I'm planning to report on our free-surface hydrodynamics work at the Milan workshop next month.

Wave BC: We've been successfully creating waves, and there are some threads here on that topic. However, I don't like our implementation, and was working with Hrv last month when he visited Wash DC to clean it up. Unfortunately, I've been too busy to finish the coding to a level where I could push it back to the SVN repository.

Eric
egp is offline   Reply With Quote

Old   June 20, 2008, 08:29
Default Hi Mark, I know this is a b
  #26
Senior Member
 
Alexandre Pereira
Join Date: Mar 2009
Posts: 155
Rep Power: 8
alexandrepereira is on a distinguished road
Hi Mark,

I know this is a bit marginal to this forum, but could you give me some advice on good references on Ship Design methodology ?

There are very good and complete books on Aicraft design from Thorenbeek, Raymer, and Roskham for instance, but i have never found such complete references on Ship design : Design synthesis and sizing, structure, Hydrostatic analysis, Hydrodynamic behaviour and seakeeping, propulsion, reliability...

Can You pls geve me some hint here... ?

Brgds

Alex
alexandrepereira is offline   Reply With Quote

Old   June 20, 2008, 08:30
Default Ok, lets try the buoyancy calc
  #27
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Ok, lets try the buoyancy calculation. I will make use of the patchIntegrate utility and modify it in order to calculate submerged volume of the hull.
For reference onlt, the piece of code in patchIntegrate which sums the scalar field variable over a certain patch is:
sum
(
mesh.Sf().boundaryField()[patchi]
*field.boundaryField()[patchi]
)
I am thinking about a setup as sketched below:


So: Sf is a cell-surface along the boat's hull. The projected surface on the x-z plane (normal to the y-vector) times the average y distance to centreplane gives dV. Summing dV for the entire hull for all cells having gamma > (e.g.) 0.5 should give displaced volume, right?
Now, can anyone give me some advice how to implement this in proper C code, making use of existing OF class/methods?
Looking at the patchIntegrate code, it seems that it is possible to perform this integration with some really simple code.

Thanks in advance,

Mark
markc is offline   Reply With Quote

Old   June 20, 2008, 09:04
Default Hi Eric, I have run your w
  #28
Senior Member
 
Alexandre Pereira
Join Date: Mar 2009
Posts: 155
Rep Power: 8
alexandrepereira is on a distinguished road
Hi Eric,

I have run your wigley.tar.gz case, ant it behaves physically until approx. t=4.35...

Courant number strarts shrinking way before, at say 4.3 to avoid divergence...

Time = 4.05
Reading U
Calculating magU
mag(U): max: 2.71141 min: 0.000114998

Time = 4.1
Reading U
Calculating magU
mag(U): max: 3.24376 min: 0.000174194

Time = 4.15
Reading U
Calculating magU
mag(U): max: 5.3944 min: 0.000138052

Time = 4.2
Reading U
Calculating magU
mag(U): max: 4.60657 min: 5.476e-05

Time = 4.25
Reading U
Calculating magU
mag(U): max: 4.34207 min: 0.000132352

Time = 4.3
Reading U
Calculating magU
mag(U): max: 4.98272 min: 0.00060542

Time = 4.35
Reading U
Calculating magU
mag(U): max: 50.7562 min: 0.000439034

End


50 m/s is just non physical here...

as for the iteration history, dt is below 10^-6 at 4.36...

Can this odd behaviour be related to face skewness...?


root@iskandhar:/home/alex/Desktop/Boat# checkMesh . wigley
/*---------------------------------------------------------------------------*\
| ========= | |
| \ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \ / O peration | Version: 1.4.1 |
| \ / A nd | Web: http://www.openfoam.org |
| \/ M anipulation | |
\*---------------------------------------------------------------------------*/

Exec : checkMesh . wigley
Date : Jun 20 2008
Time : 13:53:18
Host : iskandhar
PID : 7289
Root : /home/alex/Desktop/Boat
Case : wigley
Nprocs : 1
Create time

Create polyMesh for time = constant

Time = constant

Mesh stats
points: 300135
edges: 886258
faces: 872324
internal faces: 844876
cells: 286200
boundary patches: 7
point zones: 0
face zones: 0
cell zones: 0

Number of cells of each type:
hexahedra: 286200
prisms: 0
wedges: 0
pyramids: 0
tet wedges: 0
tetrahedra: 0
polyhedra: 0

Checking topology...
Boundary definition OK.
Point usage OK.
Upper triangular ordering OK.
Topological cell zip-up check OK.
Face vertices OK.
Face-face connectivity OK.
Number of regions: 1 (OK).

Checking patch topology for multiply connected surfaces ...
Patch Faces Points Surface
outflow-4 2700 2805 ok (not multiply connected)
symmetry-5 8524 8785 ok (not multiply connected)
Atmosphere-6 5724 5885 ok (not multiply connected)
Airinlet-7 1080 1155 ok (not multiply connected)
waterInlet-8 1620 1705 ok (not multiply connected)
wall-9 2500 2601 ok (not multiply connected)
freeStream-10 5300 5457 ok (not multiply connected)

Checking geometry...
Domain bounding box: (-1 -3.63555e-18 -1.99986) (2 1.95493 0.05)
Boundary openness (-4.0462e-16 2.87496e-15 7.73935e-16) OK.
Max cell openness = 3.67678e-16 OK.
Max aspect ratio = 236.795 OK.
Minumum face area = 6.66382e-07. Maximum face area = 0.0755204. Face area magnitudes OK.
Min volume = 3.28498e-09. Max volume = 0.00247106. Total volume = 9.57195. Cell volumes OK.
Mesh non-orthogonality Max: 62.4377 average: 12.4339
Non-orthogonality check OK.
Face pyramids OK.
***Max skewness = 5.37638, 62 highly skew faces detected which may impair the quality of the results
<<Writing 62 skew faces to set skewFaces
Min/max edge length = 0.000496028 0.36044 OK.
All angles in faces OK.
Face flatness (1 = flat, 0 = butterfly) : average = 0.999996 min = 0.967851
All face flatness OK.

Failed 1 mesh checks.

End

Using a finer mesh maybe, I don't know how to use gridgen, but is this a structured or a hybrid mesh...?

Best regards

Alex
alexandrepereira is offline   Reply With Quote

Old   June 20, 2008, 09:15
Default Mark, I think that the pro
  #29
Senior Member
 
Alexandre Pereira
Join Date: Mar 2009
Posts: 155
Rep Power: 8
alexandrepereira is on a distinguished road
Mark,

I think that the proper selection of the gamma limit on the above integral is critical on the accuracy of the calculated displacement volume, why using 0.5 is more accurate than, say gamma>0.8 ? isn't that limit "mesh coarseness" dependent ? or has an even more complex relation to surface tension of gamma phase...?

But yes, i think this is the right approach for calculating displacement volume...sorry for not being able to answer you specific question,


Best regards

Alex
alexandrepereira is offline   Reply With Quote

Old   June 20, 2008, 10:34
Default Hi Mark Try if this works.
  #30
ngj
Senior Member
 
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Deltares, Delft, The Netherlands
Posts: 1,620
Rep Power: 25
ngj will become famous soon enoughngj will become famous soon enough
Hi Mark

Try if this works.

label patchI = mesh.boundaryMesh().findPatchID("hull");
scalar gammaLim(0.5);
scalar yCenter(0);

sum
(
mag(mesh.Sf().boundaryField()[patchI] & vector(0,1,0)) *
(mesh.Cf().boundaryField()[patchI].component(1) - yCenter) *
pos(gamma.boundaryField()[patchI].boundaryInternalField() - gammaLim)
);

First line: Projects the surface normal vector onto the y-axis, i.e. x-y-plane area.
Second line: Defines distance between centerline and face-center.
Third line: Returns 1 if gamma - 0.5 > 0 else 0 is returned.

Hope this can help you,

Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request.
ngj is offline   Reply With Quote

Old   June 20, 2008, 12:04
Default Hi All, Niels, Thanks for
  #31
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Hi All,

Niels,
Thanks for your advice. I am going to try as soon as time allows.
Alex,
Some very good readings:
Principles of Naval Architecture. Comes in 3 volumes. Quiet expensive tough.
Furthermore: Rawson, Tupper, basic ship design, Vol 1 and 2. Or: Watson, practical ship design.

Brgds,

Mark
markc is offline   Reply With Quote

Old   June 20, 2008, 12:44
Default Thanks Mark Alex
  #32
Senior Member
 
Alexandre Pereira
Join Date: Mar 2009
Posts: 155
Rep Power: 8
alexandrepereira is on a distinguished road
Thanks Mark

Alex
alexandrepereira is offline   Reply With Quote

Old   June 23, 2008, 15:00
Default Hi Niels, others, I tried y
  #33
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Hi Niels, others,

I tried your code snippet. I got the following error during compiling on your 3rd line with wmake:
>>>
request for member 'boundaryField' in 'gamma', which is of non-class type 'double ()(double)throw ()'
<<<
I understand what the error is about but do not really know how to solve it. Hopefully you can help me a bit further.

For reference, the line with the error is given below:
>>>
pos(gamma.boundaryField()[patchi].boundaryInternalField() - gammaLim)
<<<


Thanks in advance,

Mark
markc is offline   Reply With Quote

Old   June 24, 2008, 02:50
Default Hi Mark Yes, I have just tr
  #34
ngj
Senior Member
 
Niels Gjoel Jacobsen
Join Date: Mar 2009
Location: Deltares, Delft, The Netherlands
Posts: 1,620
Rep Power: 25
ngj will become famous soon enoughngj will become famous soon enough
Hi Mark

Yes, I have just tried to compile it, and I am told that boundaryField does not have a member boundaryInternalField. I was a little bit in doubt about that specific point, but if you remove boundaryInternalField() and just use the boundaryField-values, you should get the same, as you probably has zeroGradient for gamma at your hull.
If I remove that part it compiles.

/ Niels
__________________
Please note that I do not use the Friend-feature, so do not be offended, if I do not accept a request.
ngj is offline   Reply With Quote

Old   June 28, 2008, 08:26
Default Hello All, Based on code sn
  #35
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Hello All,

Based on code snippet of Niels I succeeded in calculating the buoyancy of a hull. Also added lines which multiply dV with X coordinate in order to calculate trimming moment.
Attached the complete utility folder, named "buoyancy".
buoyancy.zip

Next step is to implement this utility in interFoam and use the results to deform mesh (move Hull in the domain according buoyancy force and trimming moment). Therefore any examples with moving/deforming mesh would be of great help. I studied the icoDyMFoam tutorial "MovingCone". However some other examples or explanation on the tutorial would be very helpfull. By the way, is it possible to apply movingMesh on unstructured tet meshes anyway?

Thanks for any input,

Mark
markc is offline   Reply With Quote

Old   June 28, 2008, 09:20
Default Hi Mark, Are you coming to
  #36
Senior Member
 
Hrvoje Jasak
Join Date: Mar 2009
Location: London, England
Posts: 1,763
Rep Power: 21
hjasak will become famous soon enough
Hi Mark,

Are you coming to Milan for the Workshop? From what I hear, Eric will do a tutorial on this subject, and the code and case will be made available (if I understand things correctly).

Re mesh motion, all polyhedral cell shapes, including tets, can be moved using automatic mesh motion routines with no trouble.

Hrv
__________________
Hrvoje Jasak
Providing commercial FOAM/OpenFOAM and CFD Consulting: http://wikki.co.uk
hjasak is offline   Reply With Quote

Old   June 28, 2008, 12:19
Default Unfortunately I can not attend
  #37
Senior Member
 
Mark Couwenberg
Join Date: Mar 2009
Location: Netherlands
Posts: 130
Rep Power: 8
markc is on a distinguished road
Unfortunately I can not attend the Milan Workshop (seatrials on real ship). Waiting for the next opportunity...
I will keep an eye on Eric's case.

Mark
markc is offline   Reply With Quote

Old   June 28, 2008, 18:29
Default Hi Mark Tried to compile th
  #38
Senior Member
 
Alexandre Pereira
Join Date: Mar 2009
Posts: 155
Rep Power: 8
alexandrepereira is on a distinguished road
Hi Mark

Tried to compile the buoyancy app, and i did, but it segfaults...

root@iskandhar:~/OpenFOAM/root-1.4.1/run# cd /home/alex/Desktop/buoyancy


root@iskandhar:/home/alex/Desktop/buoyancy# wmake
root@iskandhar:/home/alex/Desktop/buoyancy# wclean
root@iskandhar:/home/alex/Desktop/buoyancy# run
root@iskandhar:~/OpenFOAM/root-1.4.1/run# buoyancy . wigley

/*---------------------------------------------------------------------------*\
| ========= | |
| \ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \ / O peration | Version: 1.4.1 |
| \ / A nd | Web: http://www.openfoam.org |
| \/ M anipulation | |
\*---------------------------------------------------------------------------*/

Exec : buoyancy . wigley
Date : Jun 28 2008
Time : 23:24:41
Host : iskandhar
PID : 6767
Root : /root/OpenFOAM/root-1.4.1/run
Case : wigley
Nprocs : 1
Create time

Create mesh for time = 0

Time = 0
Reading field gamma

#0 Foam::error::printStack(Foam:stream&) in "/root/OpenFOAM/OpenFOAM-1.4.1/lib/linuxGccDPOpt/libOpenFOAM.so"
#1 Foam::sigSegv::sigSegvHandler(int) in "/root/OpenFOAM/OpenFOAM-1.4.1/lib/linuxGccDPOpt/libOpenFOAM.so"
#2 Uninterpreted: [0xffffe420]
#3 Foam::operator-(Foam::UList<double> const&, double const&) in "/root/OpenFOAM/OpenFOAM-1.4.1/lib/linuxGccDPOpt/libOpenFOAM.so"
#4 main in "/root/OpenFOAM/OpenFOAM-1.4.1/applications/bin/linuxGccDPOpt/buoyancy"
#5 __libc_start_main in "/lib/tls/i686/cmov/libc.so.6"
#6 Foam::regIOobject::readIfModified() in "/root/OpenFOAM/OpenFOAM-1.4.1/applications/bin/linuxGccDPOpt/buoyancy"
Segmentation fault (core dumped)
root@iskandhar:~/OpenFOAM/root-1.4.1/run# ls wigley
0 0.15 0.3 0.45 0.6 0.75 0.9 1.05 1.2 1.35 1.5 1.65 1.8 1.95 2.1 2.25 2.4 2.55 2.7 2.85 3 3.15 3.3 3.45 3.6 3.75 3.9 4.05 4.2 4.35 VTK
0.05 0.2 0.35 0.5 0.65 0.8 0.95 1.1 1.25 1.4 1.55 1.7 1.85 2 2.15 2.3 2.45 2.6 2.75 2.9 3.05 3.2 3.35 3.5 3.65 3.8 3.95 4.1 4.25 constant
0.1 0.25 0.4 0.55 0.7 0.85 1 1.15 1.3 1.45 1.6 1.75 1.9 2.05 2.2 2.35 2.5 2.65 2.8 2.95 3.1 3.25 3.4 3.55 3.7 3.85 4 4.15 4.3 system

and the folders definitely have information on gamma, since this is an interFoam case...

root@iskandhar:~/OpenFOAM/root-1.4.1/run# ls wigley/0
divU enstrophy epsilon flowType gamma gamma.org k Lambda2 magGradU magU magVorticity nut nuTilda pd Q R U uprime vorticity wallGradU

can you tell me what went wrong here...?

brgds

Alex
alexandrepereira is offline   Reply With Quote

Old   June 29, 2008, 18:06
Default ....Ok... Dumbass question
  #39
Senior Member
 
Alexandre Pereira
Join Date: Mar 2009
Posts: 155
Rep Power: 8
alexandrepereira is on a distinguished road
....Ok...

Dumbass question my last one... :-)

The patch name is supposed to be "Hull"...

It works allright...

Alex
alexandrepereira is offline   Reply With Quote

Old   July 18, 2008, 13:04
Default Hello, Reading the above
  #40
Member
 
nicolas
Join Date: Mar 2009
Location: Glasgow
Posts: 42
Rep Power: 8
nico765 is on a distinguished road
Hello,

Reading the above posts, the approach is to couple a VOF solver (interFoam) with a dynamic meshing. I have seen that this has been included into v1.5.
In the industry i do believe that the most common approach is to apply a motion to the whole mesh (no deformation). (this works fine because sinkage and trim are small).
Is this possible with one of the Openfoam solvers? My concerns are about boundary conditions (inlet/outlet) when the mesh is moving.

Regards,

Nicolas
nico765 is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
simulate the movement of boats Francesco B. Main CFD Forum 0 January 7, 2008 05:00
Do small boats slow big boats? Richard Scott Main CFD Forum 13 August 3, 2004 03:51
Performance Boats and CFD BoatDesigner Main CFD Forum 0 April 16, 2004 15:24
movement stk Phoenics 0 March 19, 2004 11:53
Sun Movement Leon Mills Phoenics 2 July 24, 2003 03:50


All times are GMT -4. The time now is 00:01.