Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
a5459a6
Merge commit 'd3497e352a069470cba8645444e52958a9b4400f'
Mar 16, 2022
dc63ad8
Merge commit '6f11bd30fa0fcde98a0c67ecb41b8407a20fe381'
Mar 23, 2022
4671cde
Merge remote-tracking branch 'upstream/main'
Apr 7, 2022
91bf3e2
Merge commit '7132f8ea404dc5f006b7191164e70794eb767c5f'
Apr 12, 2022
ae4a807
Merge remote-tracking branch 'upstream/main'
Jun 16, 2022
5f36d5b
Merge remote-tracking branch 'upstream/main'
Oct 25, 2022
5dc756d
Merge remote-tracking branch 'upstream/main'
Nov 1, 2022
06b0650
Merge remote-tracking branch 'upstream/main'
Nov 2, 2022
0c043f6
Merge remote-tracking branch 'upstream/main'
Nov 22, 2022
e6e9a5a
Merge remote-tracking branch 'upstream/main'
Nov 23, 2022
f599401
Merge remote-tracking branch 'upstream/main'
Dec 8, 2022
828b26a
Merge remote-tracking branch 'upstream/main'
Dec 16, 2022
d53fefe
Merge commit 'abb2097c910db0aac04e398acd6bc29a240adde6'
Dec 28, 2022
84de794
Merge remote-tracking branch 'upstream/main'
Jan 4, 2023
f11963f
Merge remote-tracking branch 'upstream/main'
Jan 31, 2023
fdbd233
Merge remote-tracking branch 'upstream/main'
Feb 22, 2023
76f1eaa
Merge remote-tracking branch 'upstream/main'
Apr 11, 2023
c83bc45
Merge remote-tracking branch 'upstream/main'
Apr 13, 2023
cdd3aa5
Merge remote-tracking branch 'upstream/main'
May 5, 2023
b48465c
Merge remote-tracking branch 'sandialabs/main'
May 25, 2023
84793cc
Merge remote-tracking branch 'sandialabs/main'
Jul 13, 2023
6c9b852
Merge remote-tracking branch 'upstream/main'
Oct 6, 2023
c36083a
Merge commit 'c74e4fcb1084d1a21c1709aee38005da935194a7'
Oct 19, 2023
0d04f32
Merge commit 'e5e291f848f41589e0b63affe04726d1b49720c5'
Nov 1, 2023
eeed5a9
Merge commit '618d7ebad0166cbc3a62371c3713bba8bc2348e1'
Nov 13, 2023
2ef25f4
Merge remote-tracking branch 'upstream/main'
Feb 5, 2024
4786273
Merge remote-tracking branch 'upstream/main'
Apr 2, 2024
bcbd5cb
Merge remote-tracking branch 'upstream/main'
May 7, 2024
aebf609
Merge remote-tracking branch 'upstream/main'
Jul 3, 2024
d9db3a6
Merge remote-tracking branch 'upstream/main'
Apr 15, 2025
a8715a2
Merge remote-tracking branch 'jtgrasb/main'
May 8, 2025
a6671d6
Merge remote-tracking branch 'upstream/main'
rgcoe Feb 6, 2026
60a1432
64 bit floats
rgcoe Feb 6, 2026
f1810d2
ensures float64 for scale and initialization
jtgrasb Jun 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions wecopttool/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -725,15 +725,21 @@ def solve(self,
scale_x_opt = scale_dofs([scale_x_opt], nstate_opt)

# composite scaling vector
scale = jnp.concatenate([jnp.array(scale_x_wec), jnp.array(scale_x_opt)])
scale = jnp.concatenate([
jnp.array(scale_x_wec, dtype=jnp.float64),
jnp.array(scale_x_opt, dtype=jnp.float64),
])

# decision variable initial guess
key = jax.random.PRNGKey(0) # could add key as input to select same initial guesses?
if x_wec_0 is None:
x_wec_0 = jax.random.normal(key, [self.nstate_wec], dtype=np.float64)
x_wec_0 = jax.random.normal(key, [self.nstate_wec])
if x_opt_0 is None:
x_opt_0 = jax.random.normal(key, [nstate_opt], dtype=np.float64)
x0 = jnp.concatenate([jnp.array(x_wec_0), jnp.array(x_opt_0)])*scale
x_opt_0 = jax.random.normal(key, [nstate_opt])
x0 = jnp.concatenate([
jnp.array(x_wec_0, dtype=jnp.float64),
jnp.array(x_opt_0, dtype=jnp.float64),
]) * scale

# bounds
if (bounds_wec is None) and (bounds_opt is None):
Expand Down Expand Up @@ -2332,7 +2338,8 @@ def wave_excitation(exc_coeff: DataArray, wave: DataArray) -> ndarray:
f"\n Wave direction(s): {(np.rad2deg(dir_w))} (deg)" +
f"\n BEM direction(s): {np.rad2deg(dir_e)} (deg).")

return jnp.sum(wave_elev_fd*exc_coeff[:, sub_ind, :], axis=1)
result = wave_elev_fd.astype(jnp.complex128) * exc_coeff[:, sub_ind, :].astype(jnp.complex128)
return jnp.sum(result, axis=1)


def hydrodynamic_impedance(hydro_data: Dataset) -> Dataset:
Expand Down
13 changes: 9 additions & 4 deletions wecopttool/pto.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,8 @@ def _fkinematics(self,
assert f_wec_td.shape == (wec.nt*nsubsteps, wec.ndof)
f_wec_td = jnp.expand_dims(jnp.transpose(f_wec_td), axis=0)
kinematics_mat = self.kinematics(wec, x_wec, x_opt, wave, nsubsteps)
return jnp.transpose(jnp.sum(kinematics_mat*f_wec_td, axis=1))
result = kinematics_mat.astype(jnp.float64) * f_wec_td.astype(jnp.float64)
return jnp.transpose(jnp.sum(result, axis=1))

def position(self,
wec: TWEC,
Expand Down Expand Up @@ -362,7 +363,9 @@ def force_on_wec(self,
assert force_td.shape == (1, self.ndof, wec.nt*nsubsteps)
kinematics_mat = self.kinematics(wec, x_wec, x_opt, wave, nsubsteps)
kinematics_mat = jnp.transpose(kinematics_mat, (1,0,2))
return jnp.transpose(jnp.sum(kinematics_mat*force_td, axis=1))
# Use float64 for higher precision in the multiplication and sum
result = kinematics_mat.astype(jnp.float64) * force_td.astype(jnp.float64)
return jnp.transpose(jnp.sum(result, axis=1))

def mechanical_power(self,
wec: TWEC,
Expand Down Expand Up @@ -425,7 +428,8 @@ def mechanical_energy(self,
length.
"""
power_td = self.mechanical_power(wec, x_wec, x_opt, wave, nsubsteps)
return jnp.sum(power_td) * wec.dt/nsubsteps
# Use float64 for higher precision in the sum
return jnp.sum(power_td.astype(jnp.float64)) * wec.dt/nsubsteps

def mechanical_average_power(self,
wec: TWEC,
Expand Down Expand Up @@ -572,7 +576,8 @@ def energy(self,
length.
"""
power_td = self.power(wec, x_wec, x_opt, wave, nsubsteps)
return jnp.sum(power_td) * wec.dt/nsubsteps
# Use float64 for higher precision in the sum
return jnp.sum(power_td.astype(jnp.float64)) * wec.dt/nsubsteps

def average_power(self,
wec: TWEC,
Expand Down
6 changes: 3 additions & 3 deletions wecopttool/utilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,9 @@ def calculate_power_flows(wec,
P_e.append((1/4)*(Fe_FD_t@np.conj(U_FD) + U_FD_t@np.conj(Fe_FD)))

power_flows = {
'Optimal Excitation' : -2* np.sum(np.real(P_max)),#eq 6.68
'Radiated': -1*np.sum(np.real(P_r)),
'Actual Excitation': -1*np.sum(np.real(P_e)),
'Optimal Excitation' : -2* np.sum(np.real(P_max), dtype=np.float64),#eq 6.68
'Radiated': -1*np.sum(np.real(P_r), dtype=np.float64),
'Actual Excitation': -1*np.sum(np.real(P_e), dtype=np.float64),
'Electrical (solver)': P_elec,
'Mechanical (solver)': P_mech,
}
Expand Down
Loading