From 159f9643543b8c3e9ce827a9d690f59368dd298e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 00:25:56 -0400 Subject: [PATCH 01/25] Skip InitChecker logging for offline devices --- andes/core/service.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/andes/core/service.py b/andes/core/service.py index 4adad09bf..042a1d693 100644 --- a/andes/core/service.py +++ b/andes/core/service.py @@ -1237,9 +1237,18 @@ def check(self): if limit is None: continue + # Determine the operational status of devices, use ue when applicable + ue = self.owner.services.get('ue', self.owner.params.get('u', np.ones(self.owner.n))).v + + # Identify online devices + online_devices = np.where(ue == 1)[0] + + # Update the flag for devices violating the condition self.v[:] = np.logical_or(self.v, func(self.u.v, limit.v)) - pos = np.argwhere(func(self.u.v, limit.v)).ravel() + # Find positions of online devices violating the condition + violating_devices = np.argwhere(func(self.u.v, limit.v)).ravel() + pos = np.intersect1d(violating_devices, online_devices) if len(pos) == 0: continue From 07b5677d1a2c99d1087829c08987296a438cd490 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 00:49:13 -0400 Subject: [PATCH 02/25] Skip limiter upper and lower adjust for offline devices --- andes/core/discrete.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/andes/core/discrete.py b/andes/core/discrete.py index bcb0feea3..f45eaca96 100644 --- a/andes/core/discrete.py +++ b/andes/core/discrete.py @@ -494,8 +494,8 @@ def do_adjust_lower(self, val, lower, allow_adjust=True, adjust_lower=False): """ if allow_adjust: - mask = (val < lower) - + ue = self.owner.services.get('ue', self.owner.params.get('u', np.ones(self.owner.n))).v + mask = np.logical_and(val < lower, ue) if sum(mask) == 0: return @@ -540,7 +540,8 @@ def do_adjust_upper(self, val, upper, allow_adjust=True, adjust_upper=False): """ if allow_adjust: - mask = (val > upper) + ue = self.owner.services.get('ue', self.owner.params.get('u', np.ones(self.owner.n))).v + mask = (val >= ue * upper) if sum(mask) == 0: return From 855f1cf482051ca13f00f655e548adb6ae87ea0e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 00:50:59 -0400 Subject: [PATCH 03/25] Update release notes --- docs/source/release-notes.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 5a10ff474..120b8453c 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -15,6 +15,7 @@ v1.9.4 (2025-xx-xx) list. - Fix a bug in line model that causes incorrect admittance matrix. - Correct a typo in the PSSE DYR parser, changing "Tprod" to "Tpord". +- Skip InitChecker logging and limiter adjust for offline devices. v1.9.3 (2025-01-05) ------------------- From 2143ca277bddf2b58d75dc295aa7b5d56ad3edd8 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 10:02:07 -0400 Subject: [PATCH 04/25] In one model, issue a warning only once for NumParam value checks --- andes/core/param.py | 21 +++++++++++++++------ docs/source/release-notes.rst | 1 + 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/andes/core/param.py b/andes/core/param.py index eb3ba9716..23049559e 100644 --- a/andes/core/param.py +++ b/andes/core/param.py @@ -435,6 +435,9 @@ def __init__(self, self.vin = None # values from input self.vrange = vrange self.vtype = vtype + self._non_zero_warning_issued = False + self._non_positive_warning_issued = False + self._non_negative_warning_issued = False def add(self, value=None): """ @@ -465,20 +468,26 @@ def add(self, value=None): if isinstance(value, float): # check for non-zero if value == 0.0 and self.get_property('non_zero'): - logger.warning('Non-zero parameter %s.%s corrected to %s', - self.owner.class_name, self.name, self.default) + if not self._non_zero_warning_issued: + logger.warning('Non-zero parameter %s.%s corrected to %s', + self.owner.class_name, self.name, self.default) + self._non_zero_warning_issued = True value = self.default # check for non-positive if value > 0.0 and self.get_property('non_positive'): - logger.warning('Non-Positive parameter %s.%s corrected to %s', - self.owner.class_name, self.name, self.default) + if not self._non_positive_warning_issued: + logger.warning('Non-Positive parameter %s.%s corrected to %s', + self.owner.class_name, self.name, self.default) + self._non_positive_warning_issued = True value = self.default # check for non-negative if value < 0.0 and self.get_property('non_negative'): - logger.warning('Non-negative parameter %s.%s corrected to %s', - self.owner.class_name, self.name, self.default) + if not self._non_negative_warning_issued: + logger.warning('Non-negative parameter %s.%s corrected to %s', + self.owner.class_name, self.name, self.default) + self._non_negative_warning_issued = True value = self.default super(NumParam, self).add(value) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 120b8453c..4c3949462 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -16,6 +16,7 @@ v1.9.4 (2025-xx-xx) - Fix a bug in line model that causes incorrect admittance matrix. - Correct a typo in the PSSE DYR parser, changing "Tprod" to "Tpord". - Skip InitChecker logging and limiter adjust for offline devices. +- In one model, issue a warning only once for NumParam value checks. v1.9.3 (2025-01-05) ------------------- From 153e9a3bc197ad5f82e4f52e3909177d6bb899d5 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 10:13:35 -0400 Subject: [PATCH 05/25] Wording --- andes/core/param.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/andes/core/param.py b/andes/core/param.py index 23049559e..ce6548b80 100644 --- a/andes/core/param.py +++ b/andes/core/param.py @@ -469,7 +469,8 @@ def add(self, value=None): # check for non-zero if value == 0.0 and self.get_property('non_zero'): if not self._non_zero_warning_issued: - logger.warning('Non-zero parameter %s.%s corrected to %s', + logger.warning('Non-zero parameter %s.%s corrected to %s. ' + 'This warning will be shown only once.', self.owner.class_name, self.name, self.default) self._non_zero_warning_issued = True value = self.default @@ -478,6 +479,7 @@ def add(self, value=None): if value > 0.0 and self.get_property('non_positive'): if not self._non_positive_warning_issued: logger.warning('Non-Positive parameter %s.%s corrected to %s', + 'This warning will be shown only once.', self.owner.class_name, self.name, self.default) self._non_positive_warning_issued = True value = self.default @@ -486,6 +488,7 @@ def add(self, value=None): if value < 0.0 and self.get_property('non_negative'): if not self._non_negative_warning_issued: logger.warning('Non-negative parameter %s.%s corrected to %s', + 'This warning will be shown only once.', self.owner.class_name, self.name, self.default) self._non_negative_warning_issued = True value = self.default From 701b131082cf150e2114ef05b56069a7370bc016 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 11:10:01 -0400 Subject: [PATCH 06/25] Add tests for InitChecker logging --- tests/test_services.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/tests/test_services.py b/tests/test_services.py index 8fab6d9ef..91cd00d36 100644 --- a/tests/test_services.py +++ b/tests/test_services.py @@ -100,3 +100,37 @@ def test_no_find_or_add(self): # test if the flag for `am` is set to 0 to disable `am` measurement self.assertEqual(ss.REGCP1.zam.v[0], 0) + + +def test_init_checker_online(caplog): + """ + Test the initialization checker for online devices. + + This test ensures that the initialization checker raises a warning + when a device's parameters are out of the typical range during TDS + initialization process. + """ + ss = andes.run(andes.get_case("npcc/npcc.xlsx"), + setup=True, + default_config=True, + no_output=True) + with caplog.at_level("WARNING"): + ss.TDS.init() + assert "GENCLS (vf range) out of typical lower limit." in caplog.text + + +def test_init_checker_offline(caplog): + """ + Test the initialization checker for offline devices. + + This test ensures that the initialization checker does not raise warnings + for devices that are offline. + """ + ss = andes.run(andes.get_case("npcc/npcc.xlsx"), + setup=True, + default_config=True, + no_output=True) + ss.GENCLS.set(src='u', attr='v', idx=['GENCLS_3', 'GENCLS_4', 'GENCLS_16'], value=0) + with caplog.at_level("WARNING"): + ss.TDS.init() + assert "GENCLS (vf range) out of typical lower limit." not in caplog.text From b7fbce67b432b3b97e1a0ad4bc1b491916f33b0e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 11:35:59 -0400 Subject: [PATCH 07/25] Add test for correction warning only show up once for one model param --- tests/test_numparam.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/test_numparam.py diff --git a/tests/test_numparam.py b/tests/test_numparam.py new file mode 100644 index 000000000..539c971d7 --- /dev/null +++ b/tests/test_numparam.py @@ -0,0 +1,16 @@ +import andes + + +def test_numparam_online(caplog): + """ + Ensure In one model, issue a warning only once for NumParam value checks. + """ + case = andes.get_case("GBnetwork/GBnetwork.m") + mpc = andes.io.matpower.m2mpc(case) + + mpc['branch'][2:5, 3] = 0 + + ss = andes.system.System() + with caplog.at_level("WARNING"): + andes.io.matpower.mpc2system(mpc, ss) + assert caplog.text.count("Non-zero parameter Line.x corrected to 1e-08.") == 1 From 11cedc12a7405501fe17b7f9785c3b0bb8a15ea1 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 12:01:09 -0400 Subject: [PATCH 08/25] Minor fix --- andes/core/param.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/andes/core/param.py b/andes/core/param.py index ce6548b80..1f3e024af 100644 --- a/andes/core/param.py +++ b/andes/core/param.py @@ -478,7 +478,7 @@ def add(self, value=None): # check for non-positive if value > 0.0 and self.get_property('non_positive'): if not self._non_positive_warning_issued: - logger.warning('Non-Positive parameter %s.%s corrected to %s', + logger.warning('Non-Positive parameter %s.%s corrected to %s. ' 'This warning will be shown only once.', self.owner.class_name, self.name, self.default) self._non_positive_warning_issued = True @@ -487,7 +487,7 @@ def add(self, value=None): # check for non-negative if value < 0.0 and self.get_property('non_negative'): if not self._non_negative_warning_issued: - logger.warning('Non-negative parameter %s.%s corrected to %s', + logger.warning('Non-negative parameter %s.%s corrected to %s. ' 'This warning will be shown only once.', self.owner.class_name, self.name, self.default) self._non_negative_warning_issued = True From c7a6ed30814565b8c73358f6279d6e138c395e66 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 12:15:09 -0400 Subject: [PATCH 09/25] Ensure ue type --- andes/core/service.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/andes/core/service.py b/andes/core/service.py index 042a1d693..a41e0ef0b 100644 --- a/andes/core/service.py +++ b/andes/core/service.py @@ -1238,10 +1238,10 @@ def check(self): continue # Determine the operational status of devices, use ue when applicable - ue = self.owner.services.get('ue', self.owner.params.get('u', np.ones(self.owner.n))).v - + ue = np.asarray(self.owner.services.get( + 'ue', self.owner.params.get('u', np.ones(self.owner.n))).v).astype(bool) # Identify online devices - online_devices = np.where(ue == 1)[0] + online_devices = np.where(ue)[0] # Update the flag for devices violating the condition self.v[:] = np.logical_or(self.v, func(self.u.v, limit.v)) From 07087a0eae569df650e9f0e8dec9fe2bd249c578 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 12:18:55 -0400 Subject: [PATCH 10/25] Remove the setuptools in RTD config --- .readthedocs.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 87c5221ea..aecedb7f1 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -19,5 +19,3 @@ python: path: . extra_requirements: - doc - - method: setuptools - path: . From 7815ff3c11a964b04690df8d340148f3fc8be36b Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 22:43:46 -0400 Subject: [PATCH 11/25] Issue warning only once for unused data --- andes/core/model/modeldata.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/andes/core/model/modeldata.py b/andes/core/model/modeldata.py index 47811c5df..7c3c59048 100644 --- a/andes/core/model/modeldata.py +++ b/andes/core/model/modeldata.py @@ -106,6 +106,8 @@ def __init__(self, *args, three_params=True, **kwargs): self.index_bases.append(self.idx) + self._unused_data_warning_issued = False + def __len__(self): return self.n @@ -162,7 +164,10 @@ def add(self, **kwargs): value = kwargs.pop(name, None) instance.add(value) if len(kwargs) > 0: - logger.warning("%s: unused data %s", self.class_name, str(kwargs)) + if not self._unused_data_warning_issued: + logger.warning("%s: unused data %s. This warning will be shown only once.", + self.class_name, str(kwargs)) + self._unused_data_warning_issued = True def as_dict(self, vin=False): """ From 30adfd1361eec0d79b8528c97bc7091bb1587cfc Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 22:48:57 -0400 Subject: [PATCH 12/25] Add tests on modeldata add warning trigger --- tests/test_numparam.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/test_numparam.py b/tests/test_numparam.py index 539c971d7..d03489d32 100644 --- a/tests/test_numparam.py +++ b/tests/test_numparam.py @@ -3,7 +3,7 @@ def test_numparam_online(caplog): """ - Ensure In one model, issue a warning only once for NumParam value checks. + Ensure in one model, issue a warning only once for NumParam value checks. """ case = andes.get_case("GBnetwork/GBnetwork.m") mpc = andes.io.matpower.m2mpc(case) @@ -14,3 +14,14 @@ def test_numparam_online(caplog): with caplog.at_level("WARNING"): andes.io.matpower.mpc2system(mpc, ss) assert caplog.text.count("Non-zero parameter Line.x corrected to 1e-08.") == 1 + + +def test_modeldata_add(caplog): + """ + Ensure in ModelData add, issue a warning only once for unused data. + """ + with caplog.at_level("WARNING"): + _ = andes.load(andes.get_case('kundur/kundur_wtds.xlsx'), + default_config=True, + no_output=True) + assert caplog.text.count("WTDS: unused data {'fn': 60}.") == 1 From 49dd376d2d8b08cee5e2dea8d58a805912751240 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 28 Apr 2025 22:49:10 -0400 Subject: [PATCH 13/25] 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 4c3949462..4cff43267 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -16,7 +16,8 @@ v1.9.4 (2025-xx-xx) - Fix a bug in line model that causes incorrect admittance matrix. - Correct a typo in the PSSE DYR parser, changing "Tprod" to "Tpord". - Skip InitChecker logging and limiter adjust for offline devices. -- In one model, issue a warning only once for NumParam value checks. +- When reading files, issue a warning only once per model for the following cases: 1) a NumParam value + does not meet the expected criteria, or 2) unused data is detected. v1.9.3 (2025-01-05) ------------------- From 3704089661816adf3c1dfc02cdb5c19434b44a5f Mon Sep 17 00:00:00 2001 From: jinningwang Date: Sun, 4 May 2025 17:13:32 -0400 Subject: [PATCH 14/25] Reverse logging only once for out of range numparam --- andes/core/model/modeldata.py | 7 +------ andes/core/param.py | 24 ++++++------------------ 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/andes/core/model/modeldata.py b/andes/core/model/modeldata.py index 7c3c59048..fec7b3e24 100644 --- a/andes/core/model/modeldata.py +++ b/andes/core/model/modeldata.py @@ -106,8 +106,6 @@ def __init__(self, *args, three_params=True, **kwargs): self.index_bases.append(self.idx) - self._unused_data_warning_issued = False - def __len__(self): return self.n @@ -164,10 +162,7 @@ def add(self, **kwargs): value = kwargs.pop(name, None) instance.add(value) if len(kwargs) > 0: - if not self._unused_data_warning_issued: - logger.warning("%s: unused data %s. This warning will be shown only once.", - self.class_name, str(kwargs)) - self._unused_data_warning_issued = True + logger.warning("%s: unused data %s.", self.class_name, str(kwargs)) def as_dict(self, vin=False): """ diff --git a/andes/core/param.py b/andes/core/param.py index 1f3e024af..e3d5b7cfb 100644 --- a/andes/core/param.py +++ b/andes/core/param.py @@ -435,9 +435,6 @@ def __init__(self, self.vin = None # values from input self.vrange = vrange self.vtype = vtype - self._non_zero_warning_issued = False - self._non_positive_warning_issued = False - self._non_negative_warning_issued = False def add(self, value=None): """ @@ -468,29 +465,20 @@ def add(self, value=None): if isinstance(value, float): # check for non-zero if value == 0.0 and self.get_property('non_zero'): - if not self._non_zero_warning_issued: - logger.warning('Non-zero parameter %s.%s corrected to %s. ' - 'This warning will be shown only once.', - self.owner.class_name, self.name, self.default) - self._non_zero_warning_issued = True + logger.warning('Non-zero parameter %s.%s corrected to %s.', + self.owner.class_name, self.name, self.default) value = self.default # check for non-positive if value > 0.0 and self.get_property('non_positive'): - if not self._non_positive_warning_issued: - logger.warning('Non-Positive parameter %s.%s corrected to %s. ' - 'This warning will be shown only once.', - self.owner.class_name, self.name, self.default) - self._non_positive_warning_issued = True + logger.warning('Non-Positive parameter %s.%s corrected to %s. ', + self.owner.class_name, self.name, self.default) value = self.default # check for non-negative if value < 0.0 and self.get_property('non_negative'): - if not self._non_negative_warning_issued: - logger.warning('Non-negative parameter %s.%s corrected to %s. ' - 'This warning will be shown only once.', - self.owner.class_name, self.name, self.default) - self._non_negative_warning_issued = True + logger.warning('Non-negative parameter %s.%s corrected to %s. ', + self.owner.class_name, self.name, self.default) value = self.default super(NumParam, self).add(value) From 0c33a7c08cc1266af7808002beff1574068afcad Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 12 May 2025 10:54:30 -0400 Subject: [PATCH 15/25] Update release notes --- docs/source/release-notes.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 4cff43267..120b8453c 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -16,8 +16,6 @@ v1.9.4 (2025-xx-xx) - Fix a bug in line model that causes incorrect admittance matrix. - Correct a typo in the PSSE DYR parser, changing "Tprod" to "Tpord". - Skip InitChecker logging and limiter adjust for offline devices. -- When reading files, issue a warning only once per model for the following cases: 1) a NumParam value - does not meet the expected criteria, or 2) unused data is detected. v1.9.3 (2025-01-05) ------------------- From 87b50d6c15b940337d8bb25e76aa20422a90f1dc Mon Sep 17 00:00:00 2001 From: jinningwang Date: Mon, 12 May 2025 11:40:22 -0400 Subject: [PATCH 16/25] Remove tests on numparam logging --- tests/test_numparam.py | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 tests/test_numparam.py diff --git a/tests/test_numparam.py b/tests/test_numparam.py deleted file mode 100644 index d03489d32..000000000 --- a/tests/test_numparam.py +++ /dev/null @@ -1,27 +0,0 @@ -import andes - - -def test_numparam_online(caplog): - """ - Ensure in one model, issue a warning only once for NumParam value checks. - """ - case = andes.get_case("GBnetwork/GBnetwork.m") - mpc = andes.io.matpower.m2mpc(case) - - mpc['branch'][2:5, 3] = 0 - - ss = andes.system.System() - with caplog.at_level("WARNING"): - andes.io.matpower.mpc2system(mpc, ss) - assert caplog.text.count("Non-zero parameter Line.x corrected to 1e-08.") == 1 - - -def test_modeldata_add(caplog): - """ - Ensure in ModelData add, issue a warning only once for unused data. - """ - with caplog.at_level("WARNING"): - _ = andes.load(andes.get_case('kundur/kundur_wtds.xlsx'), - default_config=True, - no_output=True) - assert caplog.text.count("WTDS: unused data {'fn': 60}.") == 1 From c82c32802c112b8d04237f208eab61039ddade8e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:49:37 -0400 Subject: [PATCH 17/25] Extend group RenPlant with common param ree --- andes/models/group.py | 1 + 1 file changed, 1 insertion(+) diff --git a/andes/models/group.py b/andes/models/group.py index 49c3dba9c..4fb655ad9 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -808,6 +808,7 @@ class RenPlant(GroupBase): def __init__(self): super().__init__() + self.common_params.extend(('ree',)) class RenGovernor(GroupBase): From 4d934a5ff03c68b4ecb68fd12bfbd53e36b305cb Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:51:43 -0400 Subject: [PATCH 18/25] Extend group TurbineGov with common param syn --- andes/models/group.py | 1 + 1 file changed, 1 insertion(+) diff --git a/andes/models/group.py b/andes/models/group.py index 4fb655ad9..73305137a 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -881,6 +881,7 @@ class TurbineGov(GroupBase): def __init__(self): super().__init__() + self.common_params.extend(('syn',)) self.common_vars.extend(('pout',)) From 2721e9bfc4bd47381d67b206e2790388933f04b5 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:52:16 -0400 Subject: [PATCH 19/25] Extend group VoltComp with common param avr --- andes/models/group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/andes/models/group.py b/andes/models/group.py index 73305137a..fdcd2025d 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -906,7 +906,7 @@ class VoltComp(GroupBase): def __init__(self): super().__init__() - self.common_params.extend(('rc', 'xc',)) + self.common_params.extend(('rc', 'xc', 'avr',)) self.common_vars.extend(('vcomp',)) From 757f8f37ee2f45ed72987c348ed4c37b630b8368 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:53:25 -0400 Subject: [PATCH 20/25] Extend group PSS with common param avr --- andes/models/group.py | 1 + 1 file changed, 1 insertion(+) diff --git a/andes/models/group.py b/andes/models/group.py index fdcd2025d..ada89d82e 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -915,6 +915,7 @@ class PSS(GroupBase): def __init__(self): super().__init__() + self.common_params.extend(('rc', 'xc', 'avr',)) self.common_vars.extend(('vsout',)) From 8f1124e3836a74dab8457c0bbf01d03c3375743c Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:55:12 -0400 Subject: [PATCH 21/25] Extend groups FreqMeasurement and PhasorMeasurement with common param bus --- andes/models/group.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/andes/models/group.py b/andes/models/group.py index ada89d82e..92de517c3 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -944,6 +944,7 @@ class FreqMeasurement(GroupBase): def __init__(self): super().__init__() + self.common_params.extend(('bus',)) self.common_vars.extend(('f',)) @@ -952,6 +953,7 @@ class PhasorMeasurement(GroupBase): def __init__(self): super().__init__() + self.common_params.extend(('bus',)) self.common_vars.extend(('am', 'vm')) From 7a15c62f1433bd90780e9e7286d1857e0564cd9e Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:56:02 -0400 Subject: [PATCH 22/25] Extend group PLLwith common param bus --- andes/models/group.py | 1 + 1 file changed, 1 insertion(+) diff --git a/andes/models/group.py b/andes/models/group.py index 92de517c3..637fc6d35 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -962,6 +962,7 @@ class PLL(GroupBase): def __init__(self): super().__init__() + self.common_params.extend(('bus',)) self.common_vars.extend(('am',)) From 1264a140d2d3e8f2acc91184ab34e2e886f94cb4 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:57:17 -0400 Subject: [PATCH 23/25] Extend group Motor with common param bus --- andes/models/group.py | 1 + 1 file changed, 1 insertion(+) diff --git a/andes/models/group.py b/andes/models/group.py index 637fc6d35..289787a07 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -971,6 +971,7 @@ class Motor(GroupBase): """ def __init__(self): + self.common_params.extend(('bus',)) super().__init__() From 404931740f956bb230c2a191c631cc55d124ec76 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:57:55 -0400 Subject: [PATCH 24/25] Minor fix --- andes/models/group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/andes/models/group.py b/andes/models/group.py index 289787a07..793003bf2 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -971,8 +971,8 @@ class Motor(GroupBase): """ def __init__(self): - self.common_params.extend(('bus',)) super().__init__() + self.common_params.extend(('bus',)) class Information(GroupBase): From ddc308cb2157aec3c1286adf14a1dbbec968add9 Mon Sep 17 00:00:00 2001 From: jinningwang Date: Tue, 13 May 2025 18:59:09 -0400 Subject: [PATCH 25/25] Minor fix --- andes/models/group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/andes/models/group.py b/andes/models/group.py index 793003bf2..b7cd142a9 100644 --- a/andes/models/group.py +++ b/andes/models/group.py @@ -915,7 +915,7 @@ class PSS(GroupBase): def __init__(self): super().__init__() - self.common_params.extend(('rc', 'xc', 'avr',)) + self.common_params.extend(('avr',)) self.common_vars.extend(('vsout',))