From e40b86a7b3039a782d49eb1212af1751f127bbef Mon Sep 17 00:00:00 2001 From: andy <andy> Date: Wed, 1 Jun 2011 16:45:15 +0100 Subject: [PATCH] ENH: Updated film contact force model --- .../contactAngleForce/contactAngleForce.C | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/regionModels/surfaceFilmModels/submodels/kinematic/force/contactAngleForce/contactAngleForce.C b/src/regionModels/surfaceFilmModels/submodels/kinematic/force/contactAngleForce/contactAngleForce.C index 5604859dee6..21d2e63d28b 100644 --- a/src/regionModels/surfaceFilmModels/submodels/kinematic/force/contactAngleForce/contactAngleForce.C +++ b/src/regionModels/surfaceFilmModels/submodels/kinematic/force/contactAngleForce/contactAngleForce.C @@ -27,6 +27,7 @@ License #include "addToRunTimeSelectionTable.H" #include "fvcGrad.H" #include "unitConversion.H" +#include "fvPatchField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -109,7 +110,8 @@ tmp<fvVectorMatrix> contactAngleForce::correct(volVectorField& U) ); volVectorField gradAlpha(fvc::grad(alpha)); - scalarField nHits(force.size(), 0.0); + + scalarField nHits(owner_.regionMesh().nCells(), 0.0); forAll(nbr, faceI) { @@ -129,6 +131,7 @@ tmp<fvVectorMatrix> contactAngleForce::correct(volVectorField& U) if (cellI != -1) { // const scalar dx = Foam::sqrt(magSf[cellI]); + // bit of a cheat, but ok for regular meshes const scalar dx = owner_.regionMesh().deltaCoeffs()[faceI]; const vector n = gradAlpha[cellI]/(mag(gradAlpha[cellI]) + ROOTVSMALL); @@ -138,8 +141,29 @@ tmp<fvVectorMatrix> contactAngleForce::correct(volVectorField& U) } } - nHits = max(nHits, 1.0); - force /= (nHits*magSf); + forAll(delta.boundaryField(), patchI) + { + const fvPatchField<scalar>& df = delta.boundaryField()[patchI]; + const scalarField& dx = df.patch().deltaCoeffs(); + const labelUList& faceCells = df.patch().faceCells(); + + forAll(df, faceI) + { + label cellO = faceCells[faceI]; + + if ((delta[cellO] > deltaWet_) && (df[faceI] < deltaWet_)) + { + const vector n = + gradAlpha[cellO]/(mag(gradAlpha[cellO]) + ROOTVSMALL); + scalar theta = cos(degToRad(distribution_->sample())); + force[cellO] += Ccf_*n*sigma[cellO]*(1.0 - theta)/dx[faceI]; + nHits[cellO]++; + } + } + } + + force /= (max(nHits, 1.0)*magSf); + tForce().correctBoundaryConditions(); if (owner_.regionMesh().time().outputTime()) { -- GitLab