Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "movingWallVelocityFvPatchVectorField.H"
00027 #include <OpenFOAM/addToRunTimeSelectionTable.H>
00028 #include <finiteVolume/volFields.H>
00029 #include <finiteVolume/surfaceFields.H>
00030 #include <finiteVolume/fvcMeshPhi.H>
00031
00032
00033
00034 namespace Foam
00035 {
00036
00037
00038
00039 movingWallVelocityFvPatchVectorField::movingWallVelocityFvPatchVectorField
00040 (
00041 const fvPatch& p,
00042 const DimensionedField<vector, volMesh>& iF
00043 )
00044 :
00045 fixedValueFvPatchVectorField(p, iF)
00046 {}
00047
00048
00049 movingWallVelocityFvPatchVectorField::movingWallVelocityFvPatchVectorField
00050 (
00051 const movingWallVelocityFvPatchVectorField& ptf,
00052 const fvPatch& p,
00053 const DimensionedField<vector, volMesh>& iF,
00054 const fvPatchFieldMapper& mapper
00055 )
00056 :
00057 fixedValueFvPatchVectorField(ptf, p, iF, mapper)
00058 {}
00059
00060
00061 movingWallVelocityFvPatchVectorField::movingWallVelocityFvPatchVectorField
00062 (
00063 const fvPatch& p,
00064 const DimensionedField<vector, volMesh>& iF,
00065 const dictionary& dict
00066 )
00067 :
00068 fixedValueFvPatchVectorField(p, iF)
00069 {
00070 fvPatchVectorField::operator=(vectorField("value", dict, p.size()));
00071 }
00072
00073
00074 movingWallVelocityFvPatchVectorField::movingWallVelocityFvPatchVectorField
00075 (
00076 const movingWallVelocityFvPatchVectorField& pivpvf
00077 )
00078 :
00079 fixedValueFvPatchVectorField(pivpvf)
00080 {}
00081
00082
00083 movingWallVelocityFvPatchVectorField::movingWallVelocityFvPatchVectorField
00084 (
00085 const movingWallVelocityFvPatchVectorField& pivpvf,
00086 const DimensionedField<vector, volMesh>& iF
00087 )
00088 :
00089 fixedValueFvPatchVectorField(pivpvf, iF)
00090 {}
00091
00092
00093
00094
00095 void movingWallVelocityFvPatchVectorField::updateCoeffs()
00096 {
00097 if (updated())
00098 {
00099 return;
00100 }
00101
00102 const fvPatch& p = patch();
00103 const polyPatch& pp = p.patch();
00104 const fvMesh& mesh = dimensionedInternalField().mesh();
00105 const pointField& oldPoints = mesh.oldPoints();
00106
00107 vectorField oldFc(pp.size());
00108
00109 forAll(oldFc, i)
00110 {
00111 oldFc[i] = pp[i].centre(oldPoints);
00112 }
00113
00114 vectorField Up = (pp.faceCentres() - oldFc)/mesh.time().deltaT().value();
00115
00116 const volVectorField& U = db().lookupObject<volVectorField>("U");
00117 scalarField phip =
00118 p.patchField<surfaceScalarField, scalar>(fvc::meshPhi(U));
00119
00120 vectorField n = p.nf();
00121 const scalarField& magSf = p.magSf();
00122 scalarField Un = phip/(magSf + VSMALL);
00123
00124
00125 vectorField::operator=(Up + n*(Un - (n & Up)));
00126
00127 fixedValueFvPatchVectorField::updateCoeffs();
00128 }
00129
00130
00131 void movingWallVelocityFvPatchVectorField::write(Ostream& os) const
00132 {
00133 fvPatchVectorField::write(os);
00134 writeEntry("value", os);
00135 }
00136
00137
00138
00139
00140 makePatchTypeField
00141 (
00142 fvPatchVectorField,
00143 movingWallVelocityFvPatchVectorField
00144 );
00145
00146
00147
00148 }
00149
00150