From 2984fa2d6b2563459198ffe72be2c90c6ebe07b9 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 29 Sep 2026 12:09:14 -0600 Subject: [PATCH 1/2] Change the default setting for RegFunctionPart to 2 in OLAF --- .../user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat | 2 +- docs/source/user/aerodyn-olaf/InputFiles.rst | 2 +- docs/source/user/aerodyn-olaf/OLAFTheory.rst | 4 ++-- docs/source/user/api_change.rst | 4 ++-- modules/aerodyn/src/FVW_IO.f90 | 2 +- openfast_io/openfast_io/FAST_writer.py | 2 +- reg_tests/r-test | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat b/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat index 2763378554..5a055310cc 100644 --- a/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat +++ b/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat @@ -23,7 +23,7 @@ default FWShedVorticity - Include shed vorticity in the far wake {default: fa default DiffusionMethod - Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0} 2 RegDeterMethod - Method to determine the regularization parameters {0: Constant, 1: Optimized, 2: Chord-scaled, 3: dr-scaled, default: 0 } default RegFunction - Segment regularization function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch) -default RegFunctionPart - Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 1} [only if VelocityMethod=2,3] (switch) +default RegFunctionPart - Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 2} [only if VelocityMethod=2,3] (switch) default WakeRegMethod - Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch) 0.25 WakeRegFactor - Wake regularization factor (m or -) 0.25 WingRegFactor - Wing regularization factor (m or -) diff --git a/docs/source/user/aerodyn-olaf/InputFiles.rst b/docs/source/user/aerodyn-olaf/InputFiles.rst index ee2bdff4be..c312615c4f 100644 --- a/docs/source/user/aerodyn-olaf/InputFiles.rst +++ b/docs/source/user/aerodyn-olaf/InputFiles.rst @@ -199,7 +199,7 @@ faster than the exponential option depending on the case (wake size, particle count, and regularization parameter). The compact-support kernel is also purely polynomial and avoids evaluating a transcendental (exponential) function, which can further reduce cost. -The default option is *[1]*. +The default option is *[2]*. **WakeRegMethod** [switch] specifies the method of determining viscous core radius (i.e., the regularization parameter). There are three options: 1) diff --git a/docs/source/user/aerodyn-olaf/OLAFTheory.rst b/docs/source/user/aerodyn-olaf/OLAFTheory.rst index 1379f4e626..82b6d618ee 100644 --- a/docs/source/user/aerodyn-olaf/OLAFTheory.rst +++ b/docs/source/user/aerodyn-olaf/OLAFTheory.rst @@ -625,7 +625,7 @@ point-vortex kernel is recovered. Exponential ^^^^^^^^^^^ -If the exponential method is used (**RegFunctionPart=[1]**, the default), the +If the exponential method is used (**RegFunctionPart=[1]**), the regularization factor is .. math:: @@ -638,7 +638,7 @@ negligible and :math:`g` is set to :math:`1`. Compact support ^^^^^^^^^^^^^^^^ -If the compact-support method is used (**RegFunctionPart=[2]**), the kernel is +If the compact-support method is used (**RegFunctionPart=[2]**, the default), the kernel is *exactly* singular (:math:`g=1`) beyond a finite support radius :math:`r_c'=1.6\,r_c`, and inside the support it is given by a polynomial mollifier diff --git a/docs/source/user/api_change.rst b/docs/source/user/api_change.rst index 97040f95bd..0ce1225f0d 100644 --- a/docs/source/user/api_change.rst +++ b/docs/source/user/api_change.rst @@ -16,7 +16,7 @@ Under-relaxation is introduced for the tight-coupling iterative solver to improv The generalized support-structure (GS) influence model was added to AeroDyn. This introduces three new switches (``GSPotent``, ``GSShadow``, ``GSAero``) after ``TwrAero`` in the AeroDyn primary input file, and two new sections (``General support structure joints`` and ``General support structure members``) after the ``Tower Influence and Aerodynamics`` section. The two new sections are required even when the GS model is disabled (set ``NumGSJoints`` and ``NumGSMembers`` to 0, keeping the table header lines). -OLAF now selects the regularization function for the vortex particles separately from the vortex segments. The new ``RegFunctionPart`` input on line 26 of the OLAF input file controls the particle kernel, and ``RegFunction`` now applies only to the segments. Previously the particle kernel was inferred from ``RegFunction``: any regularized value gave an exponential particle kernel, while ``RegFunction=0`` gave an unregularized one. The default ``RegFunctionPart=1`` reproduces the exponential kernel, so results are unchanged for decks with ``RegFunction`` greater than 0. Decks with ``RegFunction=0`` will change: the particles are now regularized with the exponential kernel unless ``RegFunctionPart=0`` is also set. Setting ``RegFunctionPart=0`` restores an unregularized particle kernel, but with ``VelocityMethod=2`` the results will still differ from previous versions because the particle-tree far-field cutoff is no longer padded by the particle core radius when the particle kernel is unregularized. +OLAF now selects the regularization function for the vortex particles separately from the vortex segments. The new ``RegFunctionPart`` input on line 26 of the OLAF input file controls the particle kernel, and ``RegFunction`` now applies only to the segments. Setting ``RegFunctionPart=1`` reproduces the exponential kernel previously used with ``RegFunction`` greater than 0. Setting ``RegFunctionPart=0`` restores an unregularized particle kernel previously used with ``RegFunction=0``. The newly added default compact particle regularization (``RegFunctionPart=2``) provides significant speed up compared to the exponential kernel (``RegFunctionPart=1``). ============================================= ======== ==================== ========================================================================================================================================================================================================================================================================================================== Added in OpenFAST `5.1.0` @@ -38,7 +38,7 @@ AeroDyn \* ==== AeroDyn \* NumGSMembers 0 NumGSMembers - Number of general support members (-) AeroDyn \* GSMemberID GSMJointID1 GSMJointID2 GSMDia1 GSMDia2 GSMCd1 GSMCd2 GSMTI1 GSMTI2 GSMDiv AeroDyn \* (-) (-) (-) (m) (m) (-) (-) (-) (-) (m) -OLAF 26 RegFunctionPart 2 RegFunctionPart - Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 1} [only if VelocityMethod=2,3] (switch) +OLAF 26 RegFunctionPart default RegFunctionPart - Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 2} [only if VelocityMethod=2,3] (switch) ============================================= ======== ==================== ========================================================================================================================================================================================================================================================================================================== OpenFAST v4.2.x to OpenFAST v5.0.0 diff --git a/modules/aerodyn/src/FVW_IO.f90 b/modules/aerodyn/src/FVW_IO.f90 index b540c7067b..05a9886353 100644 --- a/modules/aerodyn/src/FVW_IO.f90 +++ b/modules/aerodyn/src/FVW_IO.f90 @@ -60,7 +60,7 @@ SUBROUTINE FVW_ReadInputFile( FileName, p, m, Inp, ErrStat, ErrMsg ) CALL ReadVarWDefault(UnIn,FileName,Inp%DiffusionMethod ,'DiffusionMethod' ,'',idDiffusionNone , ErrStat2,ErrMsg2); if(Failed())return CALL ReadVarWDefault(UnIn,FileName,Inp%RegDeterMethod ,'RegDeterMethod' ,'',idRegDeterConstant, ErrStat2,ErrMsg2); if(Failed())return CALL ReadVarWDefault(UnIn,FileName,Inp%RegFunction ,'RegFunction' ,'',idRegVatistas , ErrStat2,ErrMsg2); if(Failed())return - CALL ReadVarWDefault(UnIn,FileName,Inp%RegFunctionPart ,'RegFunctionPart' ,'',idRegExp , ErrStat2,ErrMsg2); if(Failed())return + CALL ReadVarWDefault(UnIn,FileName,Inp%RegFunctionPart ,'RegFunctionPart' ,'',idRegCompact , ErrStat2,ErrMsg2); if(Failed())return CALL ReadVarWDefault(UnIn,FileName,Inp%WakeRegMethod ,'WakeRegMethod' ,'',idRegAge , ErrStat2,ErrMsg2); if(Failed())return CALL ReadVar (UnIn,FileName,Inp%WakeRegParam ,'WakeRegParam' ,'' , ErrStat2,ErrMsg2); if(Failed())return CALL ReadVar (UnIn,FileName,Inp%WingRegParam ,'WingRegParam' ,'' , ErrStat2,ErrMsg2); if(Failed())return diff --git a/openfast_io/openfast_io/FAST_writer.py b/openfast_io/openfast_io/FAST_writer.py index 477593306e..41db0e39dd 100644 --- a/openfast_io/openfast_io/FAST_writer.py +++ b/openfast_io/openfast_io/FAST_writer.py @@ -1360,7 +1360,7 @@ def write_OLAF(self): f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['DiffusionMethod'], 'DiffusionMethod','- Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0}\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['RegDeterMethod'], 'RegDeterMethod','- Method to determine the regularization parameters {0: Manual, 1: Optimized, 2: Chord, 3: Span, default: 0 }\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['RegFunction'], 'RegFunction','- Segment regularization function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch)\n')) - f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['RegFunctionPart'], 'RegFunctionPart','- Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 1} [only if VelocityMethod=2,3] (switch)\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['RegFunctionPart'], 'RegFunctionPart','- Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 2} [only if VelocityMethod=2,3] (switch)\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['WakeRegMethod'], 'WakeRegMethod','- Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 3} (switch)\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['WakeRegFactor'], 'WakeRegFactor','- Wake regularization factor (m)\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn']['OLAF']['WingRegFactor'], 'WingRegFactor','- Wing regularization factor (m)\n')) diff --git a/reg_tests/r-test b/reg_tests/r-test index e773db8bbf..ec08e4859d 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit e773db8bbf04208641791de8171a4607d1997a2a +Subproject commit ec08e4859db6a97bae4726f61b143c26e72d396f From 147b8c3ac8b1c8476aefbe67a1397728d00fa3c8 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 30 Sep 2026 16:11:07 -0600 Subject: [PATCH 2/2] Correct the default setting of WakeRegMethod to 3 (Age) in ExampleFile--OLAF.dat. Also updated r-test pointer. --- .../source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat | 2 +- reg_tests/r-test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat b/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat index 5a055310cc..19898130ea 100644 --- a/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat +++ b/docs/source/user/aerodyn-olaf/ExampleFiles/ExampleFile--OLAF.dat @@ -24,7 +24,7 @@ default DiffusionMethod - Diffusion method to account for viscous effects {0: 2 RegDeterMethod - Method to determine the regularization parameters {0: Constant, 1: Optimized, 2: Chord-scaled, 3: dr-scaled, default: 0 } default RegFunction - Segment regularization function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch) default RegFunctionPart - Particle regularization function {0: None, 1: Exponential, 2: Compact, "default": 2} [only if VelocityMethod=2,3] (switch) -default WakeRegMethod - Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch) +default WakeRegMethod - Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 3} (switch) 0.25 WakeRegFactor - Wake regularization factor (m or -) 0.25 WingRegFactor - Wing regularization factor (m or -) 1000 CoreSpreadEddyVisc - Eddy viscosity in core spreading methods, typical values 1-1000 diff --git a/reg_tests/r-test b/reg_tests/r-test index ec08e4859d..ff02ef305e 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit ec08e4859db6a97bae4726f61b143c26e72d396f +Subproject commit ff02ef305e3908b47e26006150ea6e9f572f733d