Topic: Bug in IsotropicMoistureMaterial (fixed pushed), affects 2 materials
Sorry for publishing this delayed; I thought i had submitted this message a few days ago, but I got the forum "confirm security token" message
Old code did:
void IsotropicMoistureTransferMaterial :: giveFluxVector(FloatArray &answer, GaussPoint *gp, const FloatArray &grad, const FloatArray &field, TimeStep *tStep)
{
TransportMaterialStatus *ms = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
answer.beScaled(-this->givePermeability(gp, tStep), grad);
ms->setTempField(field);
ms->setTempGradient(grad);
ms->setTempFlux(answer);
}
but givePermeability depends on the temp field.
It should be
void IsotropicMoistureTransferMaterial :: giveFluxVector(FloatArray &answer, GaussPoint *gp, const FloatArray &grad, const FloatArray &field, TimeStep *tStep)
{
TransportMaterialStatus *ms = static_cast< TransportMaterialStatus * >( this->giveStatus(gp) );
ms->setTempField(field);
ms->setTempGradient(grad);
answer.beScaled(-this->givePermeability(gp, tStep), grad);
ms->setTempFlux(answer);
}
Else, it will use the permeability computed for the field of the previous *iteration*, which is unphysical.
The only affected tests at bazantnajjar and nlisomoisture02. There isn't a drastic difference in the results, but requires updating the tests.
This is also exactly what all other transport material does (e.g. IsotropicHeatTransferMaterial), so I think this change is definitely required.
I pushed a fix earlier, this is just to let everyone know.
(this bug is something i discovered in my rework of the way we handle dof values)