diff --git a/andes/models/area.py b/andes/models/area.py index 4e2958e6f..04d5d5c8c 100644 --- a/andes/models/area.py +++ b/andes/models/area.py @@ -56,8 +56,8 @@ class ACEData(ModelData): def __init__(self): ModelData.__init__(self) self.bus = IdxParam(model='Bus', info="bus idx for freq. measurement", mandatory=True) - self.bias = NumParam(default=1.0, info='bias parameter', tex_name=r'\beta', - unit='MW/0.1Hz', power=True) + self.bias = NumParam(default=-1.0, info='bias parameter', tex_name='B', + unit='MW/0.1Hz', power=True, non_positive=True) self.busf = IdxParam(info='Optional BusFreq device idx', model='BusFreq', default=None) @@ -65,12 +65,20 @@ def __init__(self): class ACEc(ACEData, Model): """ - Area Control Error model. + Area Control Error model, where bias (B) is an approximation of the actual frequency response (:math:`\\beta`). + Given NERC's definition, the bias should be a negative number. Continuous frequency sampling. System base frequency from ``system.config.freq`` is used. Note: area idx is automatically retrieved from `bus`. + + Reference: + + NERC, "Balancing and Frequency Control Reference Document, Chapter 1 Balancing Fundamentals: Bias + (B) vs. Frequency Response (Beta)", 2021. Available: + + https://www.nerc.com/comm/RSTC_Reliability_Guidelines/Reference_Document_NERC_Balancing_and_Frequency_Control.pdf """ def __init__(self, system, config): @@ -103,10 +111,12 @@ def __init__(self, system, config): info='Bus frequency', unit='p.u. (Hz)' ) + # NOTE: here, we use -abs(bias) to ensure that bias is negative to ensure compatibility + # with previous versions self.ace = Algeb(info='area control error', unit='p.u. (MW)', tex_name='ace', - e_str='10 * (bias * imva) * sys_f * (f - 1) - ace', + e_str='- 10 * (-abs(bias) * imva) * sys_f * (f - 1) - ace', ) @@ -122,6 +132,13 @@ class ACE(ACEc): can be specified in ``ACE.config.offset``. Note: area idx is automatically retrieved from `bus`. + + Reference: + + NERC, "Balancing and Frequency Control Reference Document, Chapter 1 Balancing Fundamentals: ACE Review", + 2021. Available: + + https://www.nerc.com/comm/RSTC_Reliability_Guidelines/Reference_Document_NERC_Balancing_and_Frequency_Control.pdf """ def __init__(self, system, config): @@ -140,4 +157,4 @@ def __init__(self, system, config): info='Sampled freq.', ) - self.ace.e_str = '10 * (bias * imva) * sys_f * (fs_v - 1) - ace' + self.ace.e_str = '- 10 * (bias * imva) * sys_f * (fs_v - 1) - ace' diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 3f4a1e22d..ac95a7798 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -46,6 +46,8 @@ Other changes: - Enhanced three-winding transformer parsing in PSS/E raw files by assigning the equivalent star bus ``area``, ``owner``, and ``zone`` using the high-voltage bus values. - Minor fix on model ``TGOV1NDB`` +- Clarification on models ``ACEc`` and ``ACE`` given NERC's definition, as NERC suggesst that both bias and beta + should be nevative v1.9.2 (2024-03-25) -------------------