scalar stokesFifthProperties::waveNumber() { scalar lower(1.0e-7); scalar upper = Foam::max ( 4.0*PI_/( period_*Foam::sqrt( Foam::mag(G_)*depth_)), 2.0*PI_/( Foam::pow( period_, 2.0)) ); scalar middle(0.5*(lower + upper) ); scalar valLower( eval( lower ) ), valUpper( eval( upper ) ), valMiddle( eval( middle ) ); while (true) { if (Foam::sign( valLower ) == Foam::sign( valMiddle )) { lower = middle; valLower = valMiddle; } else { upper = middle; valUpper = valMiddle; } middle = 0.5*( lower + upper ); valMiddle = eval(middle); if (Foam::mag(valMiddle) < 1.0e-13) { break; } } return middle; }
scalar stokesFirstProperties::linearWaveNumber() const { scalar lower(0.0); scalar upper = Foam::max( 4.0 * PI_ / ( period_ * Foam::sqrt( Foam::mag(G_) * depth_)), 2.0 * PI_ / ( Foam::pow( period_, 2.0) ) ); scalar middle(0.5 * (lower + upper) ); scalar tanhMax(100); scalar valLower( Foam::pow(omega_, 2.0) - Foam::mag(G_) * lower * Foam::tanh( Foam::min(lower * depth_, tanhMax) ) ), valUpper( Foam::pow(omega_, 2.0) - Foam::mag(G_) * upper * Foam::tanh( Foam::min(upper * depth_, tanhMax) ) ), valMiddle( Foam::pow(omega_, 2.0) - Foam::mag(G_) * middle * Foam::tanh( Foam::min(middle * depth_, tanhMax) ) ); while ( true ) { if ( Foam::sign( valLower ) == Foam::sign( valMiddle ) ) { lower = middle; valLower = valMiddle; } else { upper = middle; valUpper = valMiddle; } middle = 0.5 * ( lower + upper ); valMiddle = Foam::pow(omega_, 2.0) - Foam::mag(G_) * middle * Foam::tanh( Foam::min(middle * depth_, tanhMax) ); if ( Foam::mag(valMiddle) < 1.0e-13 || Foam::mag(valLower - valUpper) / middle < 1.0e-13 ) break; } return middle; }