function getWavelength( T, h ) { const g = 9.81; const PI = Math.PI; var shallow = T*Math.sqrt(g*h); if ( h/shallow < 0.05) { return shallow; } var deep = T*T*g/2*PI; if ( h/deep > 0.5) { return deep; } var len = deep; var temp = len; var diff = len; while ( Math.abs(diff) > 0.0001) { temp = T*T*tanh(2*PI*h/len)*g/(2*PI); diff = len - temp; len = temp; } return len; } function checkDepth( h, lambda ) { if ( h/lambda > 0.5) { return 'd'; } if ( h/lambda < 0.05 ) { return 's'; } return 'f'; } function waveProfile( zeta, omega, k, t, x ) { return zeta*Math.sin(omega*t - k*x); } function dynamicPressure( type, h, zeta, omega, k, t, x, z) { const g = 9.81; const rho = 1000; var Pd = rho*g*zeta*Math.sin(omega*t - k*x); if (type == 'd') { Pd = Pd*Math.exp(k*z); } else if (type == 'f') { Pd = Pd*cosh(k*(z + h))/cosh(k*h); } return Pd; } function calculateRightingArm(GM, angle) { return GM*Math.sin(angle); }