Skip to content

Commit 30302f4

Browse files
committed
Add position (scalar) to irregular waves elevation function
1 parent 42daa76 commit 30302f4

2 files changed

Lines changed: 10 additions & 23 deletions

File tree

include/hydroc/wave_types.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ std::vector<double> FreeSurfaceElevation(const Eigen::VectorXd& freqs_hz,
2323
const Eigen::VectorXd& spectral_densities,
2424
const Eigen::VectorXd& time_array,
2525
const Eigen::VectorXd& wave_phases,
26+
double position,
2627
double water_depth);
2728

2829
enum class WaveMode {

src/wave_types.cpp

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -122,37 +122,22 @@ std::vector<double> FreeSurfaceElevation(const Eigen::VectorXd& freqs_hz,
122122
const Eigen::VectorXd& spectral_densities,
123123
const Eigen::VectorXd& wave_phases,
124124
const Eigen::VectorXd& time_index,
125+
double position,
125126
double water_depth) {
126-
double delta_f = freqs_hz(Eigen::last) / freqs_hz.size();
127-
std::vector<double> omegas(freqs_hz.size());
128-
127+
int nf = freqs_hz.size();
128+
std::vector<double> omegas(nf);
129129
for (size_t i = 0; i < freqs_hz.size(); ++i) {
130130
omegas[i] = 2 * M_PI * freqs_hz[i];
131131
}
132+
double delta_f = freqs_hz(Eigen::last) / nf;
132133

133134
std::vector<double> wave_numbers = ComputeWaveNumbers(omegas, water_depth);
134135

135-
std::vector<double> A(spectral_densities.size());
136-
for (size_t i = 0; i < spectral_densities.size(); ++i) {
137-
A[i] = 2 * spectral_densities[i] * delta_f;
138-
}
139-
140-
std::vector<double> sqrt_A(A.size());
141-
for (size_t i = 0; i < A.size(); ++i) {
142-
sqrt_A[i] = std::sqrt(A[i]);
143-
}
144-
145-
std::vector<std::vector<double>> omegas_t(time_index.size(), std::vector<double>(omegas.size()));
146-
for (size_t i = 0; i < time_index.size(); ++i) {
147-
for (size_t j = 0; j < omegas.size(); ++j) {
148-
omegas_t[i][j] = time_index[i] * omegas[j];
149-
}
150-
}
151-
152136
std::vector<double> eta(time_index.size(), 0.0);
153-
for (size_t i = 0; i < spectral_densities.size(); ++i) {
137+
for (size_t i = 0; i < nf; ++i) {
154138
for (size_t j = 0; j < time_index.size(); ++j) {
155-
eta[j] += sqrt_A[i] * std::cos(omegas_t[j][i] + wave_phases[i]);
139+
eta[j] += std::sqrt(2 * spectral_densities[i] * delta_f) *
140+
std::cos(wave_numbers[i] * position - omegas[i] * time_index[j] + wave_phases[i]);
156141
}
157142
}
158143

@@ -509,8 +494,9 @@ void IrregularWaves::CreateFreeSurfaceElevation() {
509494
<< std::endl;
510495

511496
// Calculate the free surface elevation
497+
double position = 0.0;
512498
free_surface_elevation_sampled_ = FreeSurfaceElevation(spectrum_frequencies_, spectral_densities_, wave_phases_,
513-
time_array, sim_data_.water_depth);
499+
time_array, position, sim_data_.water_depth);
514500

515501
// Apply ramp if ramp_duration is greater than 0
516502
if (params_.ramp_duration_ > 0.0) {

0 commit comments

Comments
 (0)