Block decomposition: bugfix with temporary terms when mfs=3
In an “evaluate” block, the LHS of a renormalized equation (such as “log(x)=…”) could be associated to a temporary term that would then be incorrectly computed: that temporary term would be evaluated *before* (and not after) the evaluation of the associated variable (“x” in the example).master
parent
e153353365
commit
627dd92c64
|
@ -988,7 +988,16 @@ ModelTree::computeBlockTemporaryTerms()
|
||||||
blocks_temporary_terms[blk].resize(blocks[blk].size + 1);
|
blocks_temporary_terms[blk].resize(blocks[blk].size + 1);
|
||||||
for (int eq = 0; eq < blocks[blk].size; eq++)
|
for (int eq = 0; eq < blocks[blk].size; eq++)
|
||||||
{
|
{
|
||||||
if (eq < blocks[blk].getRecursiveSize() && isBlockEquationRenormalized(blk, eq))
|
/* It is important to compute temporary terms of the renormalized
|
||||||
|
equation if the latter is going to be used in the output files.
|
||||||
|
Otherwise, for an equation of the form log(x) = RHS, a temporary
|
||||||
|
term could be associated to log(x), and since it would be
|
||||||
|
associated to this equation, it would be printed and thus computed
|
||||||
|
*before* x is actually evaluated, and thus would be incorrect. */
|
||||||
|
if ((blocks[blk].simulation_type == BlockSimulationType::evaluateBackward
|
||||||
|
|| blocks[blk].simulation_type == BlockSimulationType::evaluateForward
|
||||||
|
|| eq < blocks[blk].getRecursiveSize())
|
||||||
|
&& isBlockEquationRenormalized(blk, eq))
|
||||||
getBlockEquationRenormalizedExpr(blk, eq)->computeBlockTemporaryTerms(blk, eq, blocks_temporary_terms, reference_count);
|
getBlockEquationRenormalizedExpr(blk, eq)->computeBlockTemporaryTerms(blk, eq, blocks_temporary_terms, reference_count);
|
||||||
else
|
else
|
||||||
getBlockEquationExpr(blk, eq)->computeBlockTemporaryTerms(blk, eq, blocks_temporary_terms, reference_count);
|
getBlockEquationExpr(blk, eq)->computeBlockTemporaryTerms(blk, eq, blocks_temporary_terms, reference_count);
|
||||||
|
|
Loading…
Reference in New Issue