From 1acd63e41dd842ad56b86ba8a8fd791979910a58 Mon Sep 17 00:00:00 2001 From: zanig Date: Tue, 5 May 2026 19:41:16 +0200 Subject: [PATCH] CurledWake: full divergence form for delta_u diffusion Replace the Laplacian-only diffusion term nu_T * (d2u/dy2 + d2u/dz2) with the full divergence form d/dy(nu_T du/dy) + d/dz(nu_T du/dz) in CurledWakeWindfield._step. Drops the now-unused second_der import. --- mitwindfarm/CurledWake.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mitwindfarm/CurledWake.py b/mitwindfarm/CurledWake.py index dd82458..d00b72e 100644 --- a/mitwindfarm/CurledWake.py +++ b/mitwindfarm/CurledWake.py @@ -24,7 +24,6 @@ DomainExpansionRequest, ) from UnifiedMomentumModel.Utilities.Geometry import calc_eff_yaw, eff_yaw_rotation, eff_yaw_inv_rotation -from mitwindfarm.utils.differentiate import second_der class CurledWakeWindfield(Windfield): @@ -421,9 +420,11 @@ def _step(x, _state): # gradient fields of \Delta u: dudy = np.gradient(_u, y, axis=0) dudz = np.gradient(_u, z, axis=1) - d2udy2 = second_der(_u, self.dy, axis=0) - d2udz2 = second_der(_u, self.dz, axis=1) - dudx = (-v * dudy - w * dudz + nu_T * (d2udy2 + d2udz2) + self.extra_fx) / u + div_nuu = ( + np.gradient(nu_T * dudy, y, axis=0, edge_order=2) + + np.gradient(nu_T * dudz, z, axis=1, edge_order=2) + ) + dudx = (-v * dudy - w * dudz + div_nuu + self.extra_fx) / u self.extra_fx *= 0 # reset extra forces after they are used - TODO: remove