General HydroStatics
Ship Stability Software
Command of the Week
(New or interesting aspects of GHS that you may not know about)

Wave Forcing
(Requires GHS version 17.34 or later with SK)

Sometimes we want to estimate the first-order wave induced forces and moments acting on a floating body. We're not talking about quasi-static buoyancy curves -- we're talking actual dynamic wave forcing.

This is actually quite easy to do in GHS, if you recall a little knowledge of linear theory and invoke the SEAKEEPING command.

The "interested student" would obviously have noticed that the wave forcing data file produced by SEAKEEPING /DATA:FO returns total, inertial, and diffraction wave excitation forces and moments, normalized by wave amplitude over the range of sampled wave frequencies. These data can therefore be interpreted as a sort of wave forcing transfer function. The interested student is now even more interested, if not downright excited, because said student remembers the best thing about linear theory: superposition.

Remember from high-school ship dynamics how we obtained response statistics in irregular waves by superimposing the RAO with the wave spectrum and integrating? Sure you do. But if you need some review, see page 74 of the SeaKeeping User's Manual.

We can perform this same type of superposition using the wave forcing "RAOs" in the FORCING data file and the wave spectrum in the WAVES data file to compute a statistical estimate of the wave forcing magnitude in the given seaway in any degree-of-freedom. And we can do it all in a run file with a couple macros:

`... set up condition and run seakeeping

run sk.lib /call /quiet
.sk.getforcingdata "sk-forcing.dat"
.sk.getwavedata "sk-waves.dat"

macro superimpose `%1 is mode
 macro superimpose0 `%1 is wave index
  .sk.makevari "wfs%1_%%91"
  sk.wfs%1_%%91:=sk.Ord_%%91*sk.FTAmp%1_%%91^2
 //
 .superimpose0({sk.nwaves},1)1
/

macro integrate_spectrum `%1 is mode
 .sk.makevari "spwf"
 .sk.makevari "r1" | .sk.makevari "r2"
 .sk.makevari "dw"
 macro integrate_spectrum1 `%1 is moment 0,1,2
  macro integrate_spectrum0 `%1 is wave index
   sk.r1:=sk.EncFreq_{%%%991+1}^%%91*sk.wfs%1_{%%%991+1}
   sk.r2:=sk.EncFreq_%%%991^%%91*sk.wfs%1_%%%991
   sk.spwf:=sk.r1+sk.r2
   sk.dw:=sk.Freq_{%%%991+1}-sk.Freq_{%%%991}
   sk.r1:=0.5*sk.dw*sk.spwf
   sk.m%%91_%1:=sk.m%%91_%1+sk.r1
  ///
  .sk.makevari "m%%91_%1"
  sk.m%%91_%1:=0
  .integrate_spectrum0({{sk.nwaves}-1},1)1
 //
 .integrate_spectrum1 0 `m0
/

macro compute_excitation_variance `%1 is mode
 .superimpose %1
 .integrate_spectrum %1
/

.compute_excitation_variance(6,1)1 `compute for all modes

You'll notice we used SK.LIB to parse the WAVE and FORCING data files produced by SEAKEEPING. When SK.LIB parses these files (or any SEAKEEPING data file for that matter) it always stores the result in indexed SK variables. You can see a list of all SK variables by typing VAR /LIST:SK.* (see COW154 for more).

We then write two macros, superimpose and integrate_spectrum, to superimpose the wave forcing "RAO" and the wave spectrum, both of which are now stored as indexed variables. You can find more about SK variables by typing .sk.libinfo after running SK.LIB.

So what is macro superimpose doing? This is exactly what is going on in equation 264 on page 75 of the SK Manual. In simplified terms, the result of this superposition can be thought of as a "wave forcing spectrum", or the statistical distribution of the wave force amplitude in the given seaway. To derive useful statistical values from this, all we have to do is integrate.

And that's where macro integrate_spectrum comes into play. With a little inspection, you'll see all we are doing is numerically integrating the "wave forcing spectrum" with a little trapezoidal integration. And, we must say, the new SET syntax is fantastic for this type of numerical heavy-lifting (see COW185 and COW186).

Once we've integrated, we can derive any statistic that we desire by simply scaling the square-root of the result:

vari factor=3.85
\ Max1000 Surge Force: {{factor}*({sk.m0_1}^0.5)} lbs \
\ Max1000 Sway Force: {{factor}*({sk.m0_2}^0.5)} lbs \
\ Max1000 Heave Force: {{factor}*({sk.m0_3}^0.5)} lbs \
\ Max1000 Roll Moment: {{factor}*({sk.m0_4}^0.5)} lb-ft \
\ Max1000 Pitch Moment: {{factor}*({sk.m0_5}^0.5)} lb-ft \
\ Max1000 Yaw Moment: {{factor}*({sk.m0_6}^0.5)} lb-ft \

Where does this come from you ask? The interested student will find a description on page 77 of the SeaKeeping Manual.

All of the above may be found in a run file here.

Questions, comments, or requests?
Contact Creative Systems, Inc.

support@ghsport.com

USA phone: 360-385-6212 Fax: 360-385-6213
Office hours: 7:00 am - 4:00 pm Pacific Time, Monday - Friday

Mailing address:
PO Box 1910
Port Townsend, WA 98368 USA

www.ghsport.com

Click here for an index to this and previous COWs