addresses issue #615

This commit is contained in:
Ingmar Schoegl 2019-04-27 12:03:40 -05:00 committed by Ray Speth
parent fbe4ce5c1b
commit 751afa3c2b

View file

@ -881,6 +881,12 @@ cdef class Sim1D:
self.sim.solve(loglevel, <cbool>refine_grid)
return
def set_transport(multi):
self.gas.transport_model = multi
for dom in self.domains:
if isinstance(dom, _FlowBase):
dom.set_transport(self.gas)
have_user_tolerances = any(dom.have_user_tolerances for dom in self.domains)
if have_user_tolerances:
# Save the user-specified tolerances
@ -894,16 +900,18 @@ cdef class Sim1D:
# Do initial steps without Soret diffusion
soret_doms = [dom for dom in self.domains if getattr(dom, 'soret_enabled', False)]
for dom in soret_doms:
dom.soret_enabled = False
def set_soret(soret):
for dom in soret_doms:
dom.soret_enabled = soret
set_soret(False)
# Do initial solution steps without multicomponent transport
transport = self.gas.transport_model
solve_multi = self.gas.transport_model == 'Multi'
if solve_multi:
self.gas.transport_model = 'Mix'
for dom in self.domains:
if isinstance(dom, _FlowBase):
dom.set_transport(self.gas)
set_transport('Mix')
def log(msg, *args):
if loglevel:
@ -934,6 +942,11 @@ cdef class Sim1D:
except CanteraError as e:
log(str(e))
solved = False
except Exception as e:
# restore settings before re-raising exception
set_transport(transport)
set_soret(True)
raise e
# If initial solve using energy equation fails, fall back on the
# traditional fixed temperature solve followed by solving the energy
@ -947,6 +960,11 @@ cdef class Sim1D:
except CanteraError as e:
log(str(e))
solved = False
except Exception as e:
# restore settings before re-raising exception
set_transport(transport)
set_soret(True)
raise e
if solved:
log('Solving on {} point grid with energy equation re-enabled', N)
@ -957,6 +975,11 @@ cdef class Sim1D:
except CanteraError as e:
log(str(e))
solved = False
except Exception as e:
# restore settings before re-raising exception
set_transport(transport)
set_soret(True)
raise e
if solved and not self.extinct() and refine_grid:
# Found a non-extinct solution on the fixed grid
@ -967,6 +990,11 @@ cdef class Sim1D:
except CanteraError as e:
log(str(e))
solved = False
except Exception as e:
# restore settings before re-raising exception
set_transport(transport)
set_soret(True)
raise e
if solved and not self.extinct():
# Found a non-extinct solution on the refined grid
@ -983,15 +1011,11 @@ cdef class Sim1D:
if solve_multi:
log('Solving with multicomponent transport')
self.gas.transport_model = 'Multi'
for dom in self.domains:
if isinstance(dom, _FlowBase):
dom.set_transport(self.gas)
set_transport('Multi')
if soret_doms:
log('Solving with Soret diffusion')
for dom in soret_doms:
dom.soret_enabled = True
set_soret(True)
if have_user_tolerances:
log('Solving with user-specifed tolerances')
@ -1005,7 +1029,6 @@ cdef class Sim1D:
if have_user_tolerances or solve_multi or soret_doms:
self.sim.solve(loglevel, <cbool>refine_grid)
def refine(self, loglevel=1):
"""
Refine the grid, adding points where solution is not adequately