/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2016 OpenFOAM Foundation Copyright (C) 2018 OpenCFD Ltd ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . \*---------------------------------------------------------------------------*/ #include "tabulated6DoFAcceleration.H" #include "Tuple2.H" #include "IFstream.H" #include "interpolateSplineXY.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { defineTypeNameAndDebug(tabulated6DoFAcceleration, 0); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::tabulated6DoFAcceleration::tabulated6DoFAcceleration ( const dictionary& accelerationCoeffs, const Time& runTime ) : time_(runTime), accelerationCoeffs_(accelerationCoeffs) { read(accelerationCoeffs); } // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // Foam::tabulated6DoFAcceleration::accelerationVectors Foam::tabulated6DoFAcceleration::acceleration() const { scalar t = time_.value(); if (t < times_[0]) { FatalErrorInFunction << "current time (" << t << ") is less than the minimum in the data table (" << times_[0] << ')' << exit(FatalError); } if (t > times_.last()) { FatalErrorInFunction << "current time (" << t << ") is greater than the maximum in the data table (" << times_.last() << ')' << exit(FatalError); } accelerationVectors avs = interpolateSplineXY ( t, times_, values_ ); Info << "Time = " << t << " accelerations: " << avs << endl; return avs; } bool Foam::tabulated6DoFAcceleration::read ( const dictionary& accelerationCoeffs ) { accelerationCoeffs_ = accelerationCoeffs; // If the timeDataFileName has changed read the file fileName newTimeDataFileName ( accelerationCoeffs_.get("timeDataFileName").expand() ); if (newTimeDataFileName != timeDataFileName_) { timeDataFileName_ = newTimeDataFileName; IFstream dataStream(timeDataFileName_); if (dataStream.good()) { List> timeValues ( dataStream ); times_.setSize(timeValues.size()); values_.setSize(timeValues.size()); forAll(timeValues, i) { times_[i] = timeValues[i].first(); values_[i] = timeValues[i].second(); } } else { FatalErrorInFunction << "Cannot open time data file " << timeDataFileName_ << exit(FatalError); } } return true; } // ************************************************************************* //