Skip to content

Commit 55513bd

Browse files
committed
Loads: Be explicit about how column vs row vectors are handled/validated
1 parent 4f4e4e0 commit 55513bd

1 file changed

Lines changed: 17 additions & 12 deletions

File tree

mhkit/loads/extreme/mler_coefficients.m

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,21 @@
3434
error('ERROR: response_desired must be an int or double')
3535
end
3636

37+
% validate all inputs have same length
38+
N = length(RAO);
39+
if length(wave_spectrum.frequency) ~= N || length(wave_spectrum.spectrum) ~= N
40+
error('MHKiT:loads:mler_coefficients: RAO, frequency, and spectrum must have same length');
41+
end
42+
3743
% convert from Hz to rad/s
38-
freq = wave_spectrum.frequency * (2*pi);
39-
freq_hz = wave_spectrum.frequency;
40-
wave_spectrum = wave_spectrum.spectrum / (2*pi);
41-
dw = (2*pi - 0) / (length(freq)-1);
44+
freq_rad = wave_spectrum.frequency * (2*pi);
45+
wave_spectrum_rad = wave_spectrum.spectrum / (2*pi);
46+
dw = (2*pi - 0) / (N-1);
4247

4348
% response spectrum
44-
R.spectrum = abs(RAO).^2 .* (2*wave_spectrum);
49+
R.spectrum = abs(RAO).^2 .* (2*wave_spectrum_rad);
4550
R.type = 'response';
46-
R.frequency = freq;
51+
R.frequency = freq_rad;
4752

4853
% spectral moment calculations
4954
m0 = frequency_moment(R, 0);
@@ -52,16 +57,16 @@
5257
wBar = m1/m0;
5358

5459
% calculate coefficient_a from Quon2016 Eqn.8
55-
coeff_a_rn = abs(RAO) .* sqrt(2*dw.*wave_spectrum) .* ((m2 - freq.*m1) + wBar.*(freq.*m0 - m1)) ./ (m0*m2 - m1^2);
60+
coeff_a_rn = abs(RAO) .* sqrt(2*dw.*wave_spectrum_rad) .* ((m2 - freq_rad.*m1) + wBar.*(freq_rad.*m0 - m1)) ./ (m0*m2 - m1^2);
5661
% phase delay should be positive number
57-
phase = unwrap(angle(RAO));
62+
phase = -unwrap(angle(RAO));
5863
% for negative values of Amp, add pi phase shift, flip sign
5964
phase(coeff_a_rn < 0) = phase(coeff_a_rn < 0) - pi;
6065
coeff_a_rn(coeff_a_rn < 0) = coeff_a_rn(coeff_a_rn < 0) * -1;
6166

6267
% calculate conditioned spectrum [m^2-s/rad]
63-
S = wave_spectrum .* coeff_a_rn.^2 .* response_desired^2;
64-
S(isnan(S)) = 0; % replace nans with zero
68+
conditioned_spectrum = wave_spectrum_rad .* coeff_a_rn.^2 .* response_desired^2;
69+
conditioned_spectrum(isnan(conditioned_spectrum)) = 0; % replace nans with zero
6570
% if the response amplitude we ask for is negative, we will add
6671
% a pi phase shift to the phase information. This is because
6772
% the sign of response_desired is lost in the squaring above.
@@ -73,8 +78,8 @@
7378
end
7479

7580
% outputs
76-
mler.conditioned_spectrum = S;
81+
mler.conditioned_spectrum = conditioned_spectrum;
7782
mler.phase = phase;
78-
mler.frequency = freq_hz;
83+
mler.frequency = wave_spectrum.frequency;
7984

8085
end

0 commit comments

Comments
 (0)