BUG: ISQP crashing with the ShermanMorrison preconditiooner (fixes #3077)
ISQP crashed during the first update of the design variables, if the latter had no bounds and the ShermanMorrison preconditiooner was used.
This commit is contained in:
parent
ad85b684bb
commit
f6ec5c676e
@ -429,12 +429,12 @@ Foam::tmp<Foam::scalarField> Foam::ISQP::ShermanMorrisonPrecon
|
|||||||
// process, the diagonal matrix related to bound constraints is treated as
|
// process, the diagonal matrix related to bound constraints is treated as
|
||||||
// the initial matrix of the L-BFGS update.
|
// the initial matrix of the L-BFGS update.
|
||||||
|
|
||||||
// Constribution from bound constraints, treated as the seed of the
|
// Contribution from bound constraints, treated as the seed of the
|
||||||
// L-BFGS inverse
|
// L-BFGS inverse
|
||||||
tmp<scalarField> tdiag(nullptr);
|
refPtr<scalarField> tdiag(nullptr);
|
||||||
if (includeBoundConstraints_)
|
if (includeBoundConstraints_)
|
||||||
{
|
{
|
||||||
tdiag.reset(lTilda_()/ls_() + uTilda_()/us_());
|
tdiag.reset((lTilda_()/ls_() + uTilda_()/us_()).ptr());
|
||||||
}
|
}
|
||||||
|
|
||||||
// List of vectors to be used in the rank-1 updates related to the flow
|
// List of vectors to be used in the rank-1 updates related to the flow
|
||||||
@ -462,7 +462,7 @@ Foam::tmp<Foam::scalarField> Foam::ISQP::ShermanMorrisonRank1Update
|
|||||||
(
|
(
|
||||||
const PtrList<scalarField>& r1Updates,
|
const PtrList<scalarField>& r1Updates,
|
||||||
const scalarField& p,
|
const scalarField& p,
|
||||||
const tmp<scalarField>& diag,
|
const refPtr<scalarField>& diag,
|
||||||
const scalarField& mult,
|
const scalarField& mult,
|
||||||
label n
|
label n
|
||||||
)
|
)
|
||||||
@ -472,7 +472,7 @@ Foam::tmp<Foam::scalarField> Foam::ISQP::ShermanMorrisonRank1Update
|
|||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
Ap = invHessianVectorProduct(p, counter_, diag);
|
Ap = invHessianVectorProduct(p, counter_, diag.shallowClone());
|
||||||
return tAp;
|
return tAp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ protected:
|
|||||||
(
|
(
|
||||||
const PtrList<scalarField>& r1Updates,
|
const PtrList<scalarField>& r1Updates,
|
||||||
const scalarField& p,
|
const scalarField& p,
|
||||||
const tmp<scalarField>& diag,
|
const refPtr<scalarField>& diag,
|
||||||
const scalarField& mult,
|
const scalarField& mult,
|
||||||
label n
|
label n
|
||||||
);
|
);
|
||||||
|
@ -175,7 +175,7 @@ Foam::LBFGS::invHessianVectorProduct
|
|||||||
(
|
(
|
||||||
const scalarField& vector,
|
const scalarField& vector,
|
||||||
const label counter,
|
const label counter,
|
||||||
tmp<scalarField> diag
|
const refPtr<scalarField> diag
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Sanity checks
|
// Sanity checks
|
||||||
|
@ -131,7 +131,7 @@ protected:
|
|||||||
(
|
(
|
||||||
const scalarField& vector,
|
const scalarField& vector,
|
||||||
const label counter,
|
const label counter,
|
||||||
tmp<scalarField> diag = nullptr
|
const refPtr<scalarField> diag = nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Compute the Hessian - vector product
|
//- Compute the Hessian - vector product
|
||||||
|
Loading…
Reference in New Issue
Block a user