diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files index bd0112da39..6218645011 100644 --- a/src/meshTools/Make/files +++ b/src/meshTools/Make/files @@ -116,6 +116,7 @@ coordSet/coordSet.C setWriters = coordSet/writers +$(setWriters)/abaqus/abaqusCoordSetWriter.C $(setWriters)/common/coordSetWriter.C $(setWriters)/common/coordSetWriterBuffers.C $(setWriters)/common/coordSetWriterNew.C diff --git a/src/meshTools/coordSet/writers/abaqus/abaqusCoordSetWriter.C b/src/meshTools/coordSet/writers/abaqus/abaqusCoordSetWriter.C new file mode 100644 index 0000000000..4fc418c718 --- /dev/null +++ b/src/meshTools/coordSet/writers/abaqus/abaqusCoordSetWriter.C @@ -0,0 +1,409 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | www.openfoam.com + \\/ M anipulation | +------------------------------------------------------------------------------- + Copyright (C) 2023 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 "abaqusCoordSetWriter.H" +#include "coordSet.H" +#include "IOmanip.H" +#include "OFstream.H" +#include "OSspecific.H" +#include "stringOps.H" +#include "coordSetWriterMethods.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace coordSetWriters +{ + defineTypeName(abaqusWriter); + addToRunTimeSelectionTable(coordSetWriter, abaqusWriter, word); + addToRunTimeSelectionTable(coordSetWriter, abaqusWriter, wordDict); +} +} + +const Foam::Enum +Foam::coordSetWriters::abaqusWriter::timeBaseNames_ +({ + { timeBase::time, "time" }, + { timeBase::iter, "iteration" }, +}); + + +// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * // + +namespace Foam +{ +template +static inline void putValue(Ostream& os, const Type& value, const int width) +{ + if (width) os << setw(width); + os << value; +} +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +Foam::string Foam::coordSetWriters::abaqusWriter::replaceUserEntries +( + const string& str, + const dictionary& vars +) const +{ + string result = str; + + const bool allowEnv = true; + const bool allowEmpty = false; + + stringOps::inplaceExpand(result, vars, allowEnv, allowEmpty); + + return result; +} + + +void Foam::coordSetWriters::abaqusWriter::appendTimeName +( + const word& fieldName, + fileName& fName +) const +{ + if (useTimeDir()) + { + return; + } + + switch (timeBase_) + { + case timeBase::time: + { + fName.ext(timeName()); + break; + } + case timeBase::iter: + { + fName.ext(Foam::name(writeIndex_[fieldName])); + break; + } + default: + { + FatalErrorInFunction + << "Unhandled enumeration " << timeBaseNames_[timeBase_] + << ". Available options: " << timeBaseNames_.sortedToc() + << abort(FatalError); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::coordSetWriters::abaqusWriter::abaqusWriter() +: + coordSetWriter(), + outputHeader_(), + writeGeometry_(false), + nullValue_(pTraits::min), + useLocalTimeDir_(coordSetWriter::useTimeDir()), + timeBase_(timeBase::time), + writeIndex_(0) +{} + + +Foam::coordSetWriters::abaqusWriter::abaqusWriter(const dictionary& options) +: + coordSetWriter(options), + outputHeader_(), + writeGeometry_(false), + nullValue_(pTraits::min), + useLocalTimeDir_(coordSetWriter::useTimeDir()), + timeBase_(timeBase::time), + writeIndex_(0) +{ + options.readIfPresent("header", outputHeader_); + + options.readIfPresent("useTimeDir", useLocalTimeDir_); + + if (!useLocalTimeDir_) + { + timeBaseNames_.readIfPresent("timeBase", options, timeBase_); + options.readIfPresent("writeIndex", writeIndex_); + } + + options.readIfPresent("writeGeometry", writeGeometry_); + + options.readIfPresent("nullValue", nullValue_); +} + + +Foam::coordSetWriters::abaqusWriter::abaqusWriter +( + const coordSet& coords, + const fileName& outputPath, + const dictionary& options +) +: + abaqusWriter(options) +{ + open(coords, outputPath); +} + + +Foam::coordSetWriters::abaqusWriter::abaqusWriter +( + const UPtrList& tracks, + const fileName& outputPath, + const dictionary& options +) +: + abaqusWriter(options) +{ + open(tracks, outputPath); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::coordSetWriters::abaqusWriter::~abaqusWriter() +{ + close(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::fileName Foam::coordSetWriters::abaqusWriter::path() const +{ + // 1) rootdir/