From b9657fe67d955bb6c3d278ddeaa4ad8b9dd40115 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Wed, 11 Dec 2024 11:02:51 -0500 Subject: [PATCH 1/3] Clarification on model ACEc and ACE --- andes/models/area.py | 22 ++++++++++++++++++---- docs/source/release-notes.rst | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/andes/models/area.py b/andes/models/area.py index 4e2958e6f..a9453761b 100644 --- a/andes/models/area.py +++ b/andes/models/area.py @@ -56,7 +56,7 @@ 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', + self.bias = NumParam(default=-1.0, info='bias parameter', tex_name='B', unit='MW/0.1Hz', power=True) self.busf = IdxParam(info='Optional BusFreq device idx', model='BusFreq', @@ -65,12 +65,19 @@ 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`). 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): @@ -106,7 +113,7 @@ def __init__(self, system, config): 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 * (bias * imva) * sys_f * (f - 1) - ace', ) @@ -122,6 +129,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 +154,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..03da6301e 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -46,6 +46,7 @@ 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 v1.9.2 (2024-03-25) ------------------- From c3a4745a90d681631349af9331824303a4bb3f8c Mon Sep 17 00:00:00 2001 From: jinningwang Date: Thu, 12 Dec 2024 18:30:54 -0500 Subject: [PATCH 2/3] Minor fix in model ACEc --- andes/models/area.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/andes/models/area.py b/andes/models/area.py index a9453761b..04d5d5c8c 100644 --- a/andes/models/area.py +++ b/andes/models/area.py @@ -57,7 +57,7 @@ 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='B', - unit='MW/0.1Hz', power=True) + unit='MW/0.1Hz', power=True, non_positive=True) self.busf = IdxParam(info='Optional BusFreq device idx', model='BusFreq', default=None) @@ -66,6 +66,7 @@ def __init__(self): class ACEc(ACEData, 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. @@ -110,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', ) From 23ee2ee49dee296ea15088bd37e681f48ad04cb7 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Thu, 12 Dec 2024 18:38:43 -0500 Subject: [PATCH 3/3] Update release notes --- docs/source/release-notes.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 03da6301e..ac95a7798 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -46,7 +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 +- 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) -------------------