Skip to content

Support zero IEEET1 transducer time constant#439

Open
lukelowry wants to merge 3 commits into
developfrom
lukel/ieeet1-tr-zero-safety
Open

Support zero IEEET1 transducer time constant#439
lukelowry wants to merge 3 commits into
developfrom
lukel/ieeet1-tr-zero-safety

Conversation

@lukelowry

Copy link
Copy Markdown
Collaborator

Description

Support Tr = 0 in the IEEET1 exciter by treating the sensed terminal voltage state as algebraic when the transducer time constant is zero.

This removes the need for small artificial Tr values in validation and example cases.

Proposed changes

  • Tag IEEET1 Vts as algebraic when Tr = 0.
  • Update the IEEET1 README equations to match the implementation and standard notation
  • Update IEEET1 example, validation, and parser-test data so prior tiny Tr placeholders are zero.
  • Add unit-test for the Tr = 0 algebraic behavior.

Checklist

  • All tests pass for the focused coverage listed below.
  • Code compiles cleanly with flags -Wall -Wpedantic -Wconversion -Wextra.
  • The new code follows GridKit™ style guidelines.
  • There are unit tests for the new code.
  • The new code is documented.
  • The feature branch is rebased with respect to the target branch.

Changelog changes N/A

Further comments

Early development known issue that did not matter until detailed validation of the larger models.

@lukelowry lukelowry requested a review from pelesh June 5, 2026 23:17
@lukelowry lukelowry added the enhancement New feature or request label Jun 5, 2026
tag_[6] = false; // y6 - ve - Excit. Cntrl Volt
tag_[7] = false; // y7 - efd - Efd
tag_[8] = false; // y8 - ksat - Saturation
tag_[0] = (Tr_ != 0.0); // y0 - vts - Sensed term volt

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are potential issues with comparing a floating point value to 0 like this.

@lukelowry lukelowry Jun 7, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, so I added the smallest possible inequality using epsilon().

There are many models that use zero-valued parameters to control the model's behavior (e.g., a control block bypass). A good way to describe them would be 'parametrically piecewise'. In the fixed time step solvers like PowerWorld, it doesn't even allow $T_r\leq \Delta t/2$ for numeric stability, but of course, we are not constrained by the time step here. We should probably establish a convention for these 'parametrically piecewise' models as they become more common.

We might actually want a way to wire in the minimum time step for IDA into the algebraic flag $T_r\leq \Delta t$, so if we ever allow the user to set a minimum or fixed time step, this model is still stable. This can probably be done for a lot of the equations in other models that take this form (as Power World does). cc @Steven-Roberts

@lukelowry lukelowry force-pushed the lukel/ieeet1-tr-zero-safety branch 2 times, most recently from c34a018 to 8b4586f Compare June 8, 2026 17:47
@lukelowry

Copy link
Copy Markdown
Collaborator Author

Added a fix to the exciter scaling now that $\sigma(x)$ is fixed

@lukelowry lukelowry force-pushed the lukel/ieeet1-tr-zero-safety branch from b470ff2 to 287b384 Compare June 8, 2026 23:27
@lukelowry lukelowry force-pushed the lukel/ieeet1-tr-zero-safety branch from 287b384 to 99c66a9 Compare June 10, 2026 18:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants