tmp<surfaceScalarField> constitutiveModel::threeKf() const { tmp<surfaceScalarField> tresult ( new surfaceScalarField ( IOobject ( "threeKf", sigma_.time().timeName(), sigma_.db(), IOobject::NO_READ, IOobject::NO_WRITE ), fvc::interpolate(threeK(), "threeK") ) ); surfaceScalarField& threeKf = tresult(); if (solidInterfaceActive_) { solInterface().modifyProperties(threeKf); } return tresult; }
void Foam::tractionDisplacementFvPatchVectorField::updateCoeffs() { if (updated()) { return; } const dictionary& mechanicalProperties = db().lookupObject<IOdictionary>("mechanicalProperties"); const dictionary& thermalProperties = db().lookupObject<IOdictionary>("thermalProperties"); const fvPatchField<scalar>& rho = patch().lookupPatchField<volScalarField, scalar>("rho"); const fvPatchField<scalar>& rhoE = patch().lookupPatchField<volScalarField, scalar>("E"); const fvPatchField<scalar>& nu = patch().lookupPatchField<volScalarField, scalar>("nu"); scalarField E(rhoE/rho); scalarField mu(E/(2.0*(1.0 + nu))); scalarField lambda(nu*E/((1.0 + nu)*(1.0 - 2.0*nu))); scalarField threeK(E/(1.0 - 2.0*nu)); Switch planeStress(mechanicalProperties.lookup("planeStress")); if (planeStress) { lambda = nu*E/((1.0 + nu)*(1.0 - nu)); threeK = E/(1.0 - nu); } scalarField twoMuLambda(2*mu + lambda); vectorField n(patch().nf()); const fvPatchField<symmTensor>& sigmaD = patch().lookupPatchField<volSymmTensorField, symmTensor>("sigmaD"); gradient() = ( (traction_ - pressure_*n)/rho + twoMuLambda*fvPatchField<vector>::snGrad() - (n & sigmaD) )/twoMuLambda; Switch thermalStress(thermalProperties.lookup("thermalStress")); if (thermalStress) { const fvPatchField<scalar>& threeKalpha= patch().lookupPatchField<volScalarField, scalar>("threeKalpha"); const fvPatchField<scalar>& T = patch().lookupPatchField<volScalarField, scalar>("T"); gradient() += n*threeKalpha*T/twoMuLambda; } fixedGradientFvPatchVectorField::updateCoeffs(); }