Skip to content

Commit

Permalink
[1D] Fix invalid unchecked cast to StFlow
Browse files Browse the repository at this point in the history
The domain between two boundaries isn't necessarily an StFlow object,
as exemplified by the Blasius BVP sample code.

Fixes #1224
  • Loading branch information
speth committed Mar 21, 2022
1 parent 5f94a85 commit f5dea59
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions src/oneD/Boundary1D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,19 @@ void Boundary1D::_init(size_t n)
// check for left and right flow objects
if (m_index > 0) {
Domain1D& r = container().domain(m_index-1);
if (!r.isConnector()) { // flow domain
m_flow_left = (StFlow*)&r;
m_left_nv = m_flow_left->nComponents();
m_left_points = m_flow_left->nPoints();
if (!r.isConnector()) { // multi-point domain
m_left_nv = r.nComponents();
if (m_left_nv > c_offset_Y) {
m_left_nsp = m_left_nv - c_offset_Y;
} else {
m_left_nsp = 0;
}
m_left_loc = container().start(m_index-1);
m_left_nsp = m_left_nv - c_offset_Y;
m_phase_left = &m_flow_left->phase();
m_left_points = r.nPoints();
m_flow_left = dynamic_cast<StFlow*>(&r);
if (m_flow_left != nullptr) {
m_phase_left = &m_flow_left->phase();
}
} else {
throw CanteraError("Boundary1D::_init",
"Boundary domains can only be connected on the left to flow "
Expand All @@ -60,11 +66,17 @@ void Boundary1D::_init(size_t n)
if (m_index + 1 < container().nDomains()) {
Domain1D& r = container().domain(m_index+1);
if (!r.isConnector()) { // flow domain
m_flow_right = (StFlow*)&r;
m_right_nv = m_flow_right->nComponents();
m_right_nv = r.nComponents();
if (m_right_nv > c_offset_Y) {
m_right_nsp = m_right_nv - c_offset_Y;
} else {
m_right_nsp = 0;
}
m_right_loc = container().start(m_index+1);
m_right_nsp = m_right_nv - c_offset_Y;
m_phase_right = &m_flow_right->phase();
m_flow_right = dynamic_cast<StFlow*>(&r);
if (m_flow_right != nullptr) {
m_phase_right = &m_flow_right->phase();
}
} else {
throw CanteraError("Boundary1D::_init",
"Boundary domains can only be connected on the right to flow "
Expand Down

0 comments on commit f5dea59

Please sign in to comment.