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/