BUG: patchProbes: clear found cells before finding faces
[OpenFOAM-2.0.x.git] / src / dynamicFvMesh / dynamicInkJetFvMesh / dynamicInkJetFvMesh.C
bloba26ea293d3e0606ad517077570a78634d9852648
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "dynamicInkJetFvMesh.H"
27 #include "addToRunTimeSelectionTable.H"
28 #include "volFields.H"
29 #include "mathematicalConstants.H"
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
33 namespace Foam
35     defineTypeNameAndDebug(dynamicInkJetFvMesh, 0);
36     addToRunTimeSelectionTable(dynamicFvMesh, dynamicInkJetFvMesh, IOobject);
40 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
42 Foam::dynamicInkJetFvMesh::dynamicInkJetFvMesh(const IOobject& io)
44     dynamicFvMesh(io),
45     dynamicMeshCoeffs_
46     (
47         IOdictionary
48         (
49             IOobject
50             (
51                 "dynamicMeshDict",
52                 io.time().constant(),
53                 *this,
54                 IOobject::MUST_READ_IF_MODIFIED,
55                 IOobject::NO_WRITE,
56                 false
57             )
58         ).subDict(typeName + "Coeffs")
59     ),
60     amplitude_(readScalar(dynamicMeshCoeffs_.lookup("amplitude"))),
61     frequency_(readScalar(dynamicMeshCoeffs_.lookup("frequency"))),
62     refPlaneX_(readScalar(dynamicMeshCoeffs_.lookup("refPlaneX"))),
63     stationaryPoints_
64     (
65         IOobject
66         (
67             "points",
68             io.time().constant(),
69             meshSubDir,
70             *this,
71             IOobject::MUST_READ,
72             IOobject::NO_WRITE
73         )
74     )
76     Info<< "Performing a dynamic mesh calculation: " << endl
77         << "amplitude: " << amplitude_
78         << " frequency: " << frequency_
79         << " refPlaneX: " << refPlaneX_ << endl;
82 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
84 Foam::dynamicInkJetFvMesh::~dynamicInkJetFvMesh()
88 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
90 bool Foam::dynamicInkJetFvMesh::update()
92     scalar scalingFunction =
93         0.5*
94         (
95             ::cos(constant::mathematical::twoPi*frequency_*time().value())
96           - 1.0
97         );
99     Info<< "Mesh scaling. Time = " << time().value() << " scaling: "
100         << scalingFunction << endl;
102     pointField newPoints = stationaryPoints_;
104     newPoints.replace
105     (
106         vector::X,
107         stationaryPoints_.component(vector::X)*
108         (
109             1.0
110           + pos
111             (
112               - (stationaryPoints_.component(vector::X))
113               - refPlaneX_
114             )*amplitude_*scalingFunction
115         )
116     );
118     fvMesh::movePoints(newPoints);
120     volVectorField& U =
121         const_cast<volVectorField&>(lookupObject<volVectorField>("U"));
122     U.correctBoundaryConditions();
124     return true;
128 // ************************************************************************* //