From bab07860e30a3bdc849ad437ceec4f977bf9b86b Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Mon, 23 Nov 2015 10:56:02 -0500 Subject: [PATCH] [Transport] Fix segfault when species transport data is missing Resolves #312. --- src/transport/GasTransport.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/transport/GasTransport.cpp b/src/transport/GasTransport.cpp index c62d8518b..7aa22bb26 100644 --- a/src/transport/GasTransport.cpp +++ b/src/transport/GasTransport.cpp @@ -455,23 +455,28 @@ void GasTransport::getTransportData() { for (size_t k = 0; k < m_thermo->nSpecies(); k++) { shared_ptr s = m_thermo->species(m_thermo->speciesName(k)); - const GasTransportData& sptran = - dynamic_cast(*s->transport.get()); - if (sptran.geometry == "atom") { + const GasTransportData* sptran = + dynamic_cast(s->transport.get()); + if (!sptran) { + throw CanteraError("GasTransport::getTransportData", + "Missing gas-phase transport data for species '{}'.", s->name); + } + + if (sptran->geometry == "atom") { m_crot[k] = 0.0; - } else if (sptran.geometry == "linear") { + } else if (sptran->geometry == "linear") { m_crot[k] = 1.0; - } else if (sptran.geometry == "nonlinear") { + } else if (sptran->geometry == "nonlinear") { m_crot[k] = 1.5; } - m_sigma[k] = sptran.diameter; - m_eps[k] = sptran.well_depth; - m_dipole(k,k) = sptran.dipole; - m_polar[k] = (sptran.dipole > 0); - m_alpha[k] = sptran.polarizability; - m_zrot[k] = sptran.rotational_relaxation; - m_w_ac[k] = sptran.acentric_factor; + m_sigma[k] = sptran->diameter; + m_eps[k] = sptran->well_depth; + m_dipole(k,k) = sptran->dipole; + m_polar[k] = (sptran->dipole > 0); + m_alpha[k] = sptran->polarizability; + m_zrot[k] = sptran->rotational_relaxation; + m_w_ac[k] = sptran->acentric_factor; } }