void phaseChangeModel::correct ( const scalar dt, scalarField& availableMass, volScalarField& dMass, volScalarField& dEnergy ) { if (!active()) { return; } correctModel ( dt, availableMass, dMass, dEnergy ); latestMassPC_ = sum(dMass.primitiveField()); totalMassPC_ += latestMassPC_; availableMass -= dMass; dMass.correctBoundaryConditions(); if (writeTime()) { scalar phaseChangeMass = getModelProperty<scalar>("phaseChangeMass"); phaseChangeMass += returnReduce(totalMassPC_, sumOp<scalar>()); setModelProperty<scalar>("phaseChangeMass", phaseChangeMass); totalMassPC_ = 0.0; } }
void writeCellGraph ( const volScalarField& vsf, const word& graphFormat ) { fileName path(vsf.time().path()/"graphs"/vsf.time().timeName()); mkDir(path); graph ( vsf.name(), "x", vsf.name(), vsf.mesh().C().primitiveField().component(vector::X), vsf.primitiveField() ).write(path/vsf.name(), graphFormat); }
Foam::scalar Foam::compressibleCourantNo ( const fvMesh& mesh, const Time& runTime, const volScalarField& rho, const surfaceScalarField& phi ) { scalarField sumPhi ( fvc::surfaceSum(mag(phi))().primitiveField() / rho.primitiveField() ); scalar CoNum = 0.5*gMax(sumPhi/mesh.V().field())*runTime.deltaTValue(); scalar meanCoNum = 0.5*(gSum(sumPhi)/gSum(mesh.V().field()))*runTime.deltaTValue(); Info<< "Region: " << mesh.name() << " Courant Number mean: " << meanCoNum << " max: " << CoNum << endl; return CoNum; }
tmp<fvMatrix<Type>> EulerD2dt2Scheme<Type>::fvmD2dt2 ( const volScalarField& rho, const GeometricField<Type, fvPatchField, volMesh>& vf ) { tmp<fvMatrix<Type>> tfvm ( new fvMatrix<Type> ( vf, rho.dimensions()*vf.dimensions()*dimVol /dimTime/dimTime ) ); fvMatrix<Type>& fvm = tfvm.ref(); scalar deltaT = mesh().time().deltaTValue(); scalar deltaT0 = mesh().time().deltaT0Value(); scalar coefft = (deltaT + deltaT0)/(2*deltaT); scalar coefft00 = (deltaT + deltaT0)/(2*deltaT0); scalar rDeltaT2 = 4.0/sqr(deltaT + deltaT0); if (mesh().moving()) { scalar quarterRdeltaT2 = 0.25*rDeltaT2; const scalarField VV0rhoRho0 ( (mesh().V() + mesh().V0()) *(rho.primitiveField() + rho.oldTime().primitiveField()) ); const scalarField V0V00rho0Rho00 ( (mesh().V0() + mesh().V00()) *( rho.oldTime().primitiveField() + rho.oldTime().oldTime().primitiveField() ) ); fvm.diag() = (coefft*quarterRdeltaT2)*VV0rhoRho0; fvm.source() = quarterRdeltaT2* ( (coefft*VV0rhoRho0 + coefft00*V0V00rho0Rho00) *vf.oldTime().primitiveField() - (coefft00*V0V00rho0Rho00) *vf.oldTime().oldTime().primitiveField() ); } else { scalar halfRdeltaT2 = 0.5*rDeltaT2; const scalarField rhoRho0 ( rho.primitiveField() + rho.oldTime().primitiveField() ); const scalarField rho0Rho00 ( rho.oldTime().primitiveField() + rho.oldTime().oldTime().primitiveField() ); fvm.diag() = (coefft*halfRdeltaT2)*mesh().V()*rhoRho0; fvm.source() = halfRdeltaT2*mesh().V()* ( (coefft*rhoRho0 + coefft00*rho0Rho00) *vf.oldTime().primitiveField() - (coefft00*rho0Rho00) *vf.oldTime().oldTime().primitiveField() ); } return tfvm; }
tmp<GeometricField<Type, fvPatchField, volMesh>> EulerD2dt2Scheme<Type>::fvcD2dt2 ( const volScalarField& rho, const GeometricField<Type, fvPatchField, volMesh>& vf ) { dimensionedScalar rDeltaT2 = 4.0/sqr(mesh().time().deltaT() + mesh().time().deltaT0()); IOobject d2dt2IOobject ( "d2dt2("+rho.name()+','+vf.name()+')', mesh().time().timeName(), mesh(), IOobject::NO_READ, IOobject::NO_WRITE ); scalar deltaT = mesh().time().deltaTValue(); scalar deltaT0 = mesh().time().deltaT0Value(); scalar coefft = (deltaT + deltaT0)/(2*deltaT); scalar coefft00 = (deltaT + deltaT0)/(2*deltaT0); if (mesh().moving()) { scalar halfRdeltaT2 = 0.5*rDeltaT2.value(); scalar quarterRdeltaT2 = 0.25*rDeltaT2.value(); const scalarField VV0rhoRho0 ( (mesh().V() + mesh().V0()) * (rho.primitiveField() + rho.oldTime().primitiveField()) ); const scalarField V0V00rho0Rho00 ( (mesh().V0() + mesh().V00()) * ( rho.oldTime().primitiveField() + rho.oldTime().oldTime().primitiveField() ) ); return tmp<GeometricField<Type, fvPatchField, volMesh>> ( new GeometricField<Type, fvPatchField, volMesh> ( d2dt2IOobject, mesh(), rDeltaT2.dimensions()*rho.dimensions()*vf.dimensions(), quarterRdeltaT2* ( coefft*VV0rhoRho0*vf.primitiveField() - (coefft*VV0rhoRho0 + coefft00*V0V00rho0Rho00) *vf.oldTime().primitiveField() + (coefft00*V0V00rho0Rho00) *vf.oldTime().oldTime().primitiveField() )/mesh().V(), halfRdeltaT2* ( coefft *(rho.boundaryField() + rho.oldTime().boundaryField()) *vf.boundaryField() - ( coefft *( rho.boundaryField() + rho.oldTime().boundaryField() ) + coefft00 *( rho.oldTime().boundaryField() + rho.oldTime().oldTime().boundaryField() ) )*vf.oldTime().boundaryField() + coefft00 *( rho.oldTime().boundaryField() + rho.oldTime().oldTime().boundaryField() )*vf.oldTime().oldTime().boundaryField() ) ) ); } else { dimensionedScalar halfRdeltaT2 = 0.5*rDeltaT2; const volScalarField rhoRho0(rho + rho.oldTime()); const volScalarField rho0Rho00(rho.oldTime() +rho.oldTime().oldTime()); return tmp<GeometricField<Type, fvPatchField, volMesh>> ( new GeometricField<Type, fvPatchField, volMesh> ( d2dt2IOobject, halfRdeltaT2* ( coefft*rhoRho0*vf - (coefft*rhoRho0 + coefft00*rho0Rho00)*vf.oldTime() + coefft00*rho0Rho00*vf.oldTime().oldTime() ) ) ); } }