diff --git a/etc/config.sh/bash_completion b/etc/config.sh/bash_completion index 9a748badde..8134ad7204 100644 --- a/etc/config.sh/bash_completion +++ b/etc/config.sh/bash_completion @@ -5,7 +5,7 @@ # \\ / A nd | www.openfoam.com # \\/ M anipulation | #------------------------------------------------------------------------------ -# Copyright (C) 2017-2022 OpenCFD Ltd. +# Copyright (C) 2017-2023 OpenCFD Ltd. #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later. @@ -146,7 +146,7 @@ _of_complete_() COMPREPLY=($(compgen -W "$choices" -- ${cur})) ;; -fileHandler) - choices="collated uncollated hostCollated masterUncollated" + choices="collated uncollated hostCollated hostUncollated masterUncollated" COMPREPLY=($(compgen -W "$choices" -- ${cur})) ;; *) diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index cb0be37821..0edb074fde 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -21,7 +21,7 @@ $(fileOps)/fileOperation/fileOperation.C $(fileOps)/fileOperation/fileOperationBroadcast.C $(fileOps)/fileOperation/fileOperationNew.C $(fileOps)/fileOperation/fileOperationRanks.C -$(fileOps)/fileOperationInitialise/fileOperationInitialise.C +$(fileOps)/fileOperation/fileOperationInitialise.C $(fileOps)/dummyFileOperation/dummyFileOperation.C $(fileOps)/uncollatedFileOperation/uncollatedFileOperation.C $(fileOps)/masterUncollatedFileOperation/masterUncollatedFileOperation.C diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C index 1c846ae5d8..2318c474d7 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.C @@ -68,11 +68,11 @@ namespace fileOperations collatedFileOperation::maxThreadFileBufferSize ); - // Mark as needing threaded mpi + // Threaded MPI: depending on buffering addNamedToRunTimeSelectionTable ( fileOperationInitialise, - collatedFileOperationInitialise, + fileOperationInitialise_collated, word, collated ); diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.H b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.H index 92ce70c71a..04acd2ae0f 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.H +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/collatedFileOperation.H @@ -50,6 +50,7 @@ SourceFiles #define Foam_fileOperations_collatedFileOperation_H #include "masterUncollatedFileOperation.H" +#include "fileOperationInitialise.H" #include "OFstreamCollator.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -173,32 +174,33 @@ public: /*---------------------------------------------------------------------------*\ - Class collatedFileOperationInitialise Declaration + Class fileOperationInitialise_collated Declaration \*---------------------------------------------------------------------------*/ -//! Internal class only -class collatedFileOperationInitialise +//- A fileOperation initialiser for collated file handlers. +//- Requires threading for non-zero maxThreadFileBufferSize. +class fileOperationInitialise_collated : - public masterUncollatedFileOperationInitialise + public fileOperationInitialise { public: // Constructors //- Construct from components - collatedFileOperationInitialise(int& argc, char**& argv) + fileOperationInitialise_collated(int& argc, char**& argv) : - masterUncollatedFileOperationInitialise(argc, argv) + fileOperationInitialise(argc, argv) {} //- Destructor - virtual ~collatedFileOperationInitialise() = default; + virtual ~fileOperationInitialise_collated() = default; // Member Functions - //- Requires threading for non-zero maxThreadFileBufferSize + //- The (MPI) threading requirement depends on buffering virtual bool needsThreading() const { return (collatedFileOperation::maxThreadFileBufferSize > 0); diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.C b/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.C index f7ede70f30..8ee087e691 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.C @@ -49,12 +49,11 @@ namespace fileOperations comm ); - // Register initialisation routine. Signals need for threaded mpi and - // handles command line arguments + // Threaded MPI: depending on buffering addNamedToRunTimeSelectionTable ( fileOperationInitialise, - hostCollatedFileOperationInitialise, + fileOperationInitialise_collated, word, hostCollated ); diff --git a/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.H b/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.H index 23840308c8..25ab873fc0 100644 --- a/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.H +++ b/src/OpenFOAM/global/fileOperations/collatedFileOperation/hostCollatedFileOperation.H @@ -129,31 +129,6 @@ public: }; -/*---------------------------------------------------------------------------*\ - Class hostCollatedFileOperationInitialise Declaration -\*---------------------------------------------------------------------------*/ - -//! Internal class only -class hostCollatedFileOperationInitialise -: - public collatedFileOperationInitialise -{ -public: - - // Constructors - - //- Construct from components - hostCollatedFileOperationInitialise(int& argc, char**& argv) - : - collatedFileOperationInitialise(argc, argv) - {} - - - //- Destructor - virtual ~hostCollatedFileOperationInitialise() = default; -}; - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace fileOperations diff --git a/src/OpenFOAM/global/fileOperations/fileOperationInitialise/fileOperationInitialise.C b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperationInitialise.C similarity index 78% rename from src/OpenFOAM/global/fileOperations/fileOperationInitialise/fileOperationInitialise.C rename to src/OpenFOAM/global/fileOperations/fileOperation/fileOperationInitialise.C index f934b4bd22..978e4a9d09 100644 --- a/src/OpenFOAM/global/fileOperations/fileOperationInitialise/fileOperationInitialise.C +++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperationInitialise.C @@ -50,37 +50,44 @@ Foam::fileOperations::fileOperationInitialise::fileOperationInitialise char**& argv ) { - // Check for -ioRanks, which requires an argument + // Check for -ioRanks: requires an argument int index = -1; for (int argi = 1; argi < argc; ++argi) { - if (argv[argi][0] == '-') + const char *optName = argv[argi]; + + if (optName[0] == '-') { - const char *optName = &argv[argi][1]; + ++optName; // Looks like an option, skip leading '-' + bool emitErrorMessage = false; if (strcmp(optName, "ioRanks") == 0) { + // Requires a parameter if (argi < argc-1) { index = argi; - Foam::setEnv("FOAM_IORANKS", argv[argi+1], true); + ++argi; + Foam::setEnv("FOAM_IORANKS", argv[argi], true); break; } else { - // No argument to -ioRanks. - // Give error message as in argList. - // Slight problem: Pstream not yet initialised so - // - no master-only output - // - no early exit - - Info<< nl - << "Error: option '-ioRanks' requires a list of" - " IO ranks as argument" << nl << nl; - - //UPstream::exit(1); // works for serial and parallel + emitErrorMessage = true; } } + + if (emitErrorMessage) + { + // Missing argument: emit message but not exit or + // FatalError since Pstream etc are not yet initialised + + Info<< nl + << "Error: option '-" << optName + << "' requires an argument" << nl << nl; + + //NO: UPstream::exit(1); // works for serial and parallel + } } } diff --git a/src/OpenFOAM/global/fileOperations/fileOperationInitialise/fileOperationInitialise.H b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperationInitialise.H similarity index 74% rename from src/OpenFOAM/global/fileOperations/fileOperationInitialise/fileOperationInitialise.H rename to src/OpenFOAM/global/fileOperations/fileOperation/fileOperationInitialise.H index a5f6d91fe6..ebd129b3d1 100644 --- a/src/OpenFOAM/global/fileOperations/fileOperationInitialise/fileOperationInitialise.H +++ b/src/OpenFOAM/global/fileOperations/fileOperation/fileOperationInitialise.H @@ -6,6 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2017-2018 OpenFOAM Foundation + Copyright (C) 2023 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -33,8 +34,8 @@ Description \*---------------------------------------------------------------------------*/ -#ifndef fileOperationInitialise_H -#define fileOperationInitialise_H +#ifndef Foam_fileOperations_fileOperationInitialise_H +#define Foam_fileOperations_fileOperationInitialise_H #include "runTimeSelectionTables.H" @@ -79,7 +80,7 @@ public: // Selectors - //- Select type + //- Select initialisation type static autoPtr New ( const word& type, int& argc, char**& argv @@ -92,11 +93,42 @@ public: // Member Functions - //- Threading required? + //- Requires (MPI) threading? virtual bool needsThreading() const = 0; }; +/*---------------------------------------------------------------------------*\ + Class fileOperationInitialise_unthreaded Declaration +\*---------------------------------------------------------------------------*/ + +//- A fileOperation initialiser for unthreaded file handlers. +class fileOperationInitialise_unthreaded +: + public fileOperationInitialise +{ +public: + + // Constructors + + //- Construct from components + fileOperationInitialise_unthreaded(int& argc, char**& argv) + : + fileOperationInitialise(argc, argv) + {} + + + //- Destructor + virtual ~fileOperationInitialise_unthreaded() = default; + + + // Member Functions + + //- No (MPI) threading required + virtual bool needsThreading() const { return false; } +}; + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace fileOperations diff --git a/src/OpenFOAM/global/fileOperations/fileOperationInitialise/unthreadedInitialise.H b/src/OpenFOAM/global/fileOperations/fileOperationInitialise/unthreadedInitialise.H deleted file mode 100644 index 36baf2b8cf..0000000000 --- a/src/OpenFOAM/global/fileOperations/fileOperationInitialise/unthreadedInitialise.H +++ /dev/null @@ -1,88 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | www.openfoam.com - \\/ M anipulation | -------------------------------------------------------------------------------- - Copyright (C) 2017-2018 OpenFOAM Foundation -------------------------------------------------------------------------------- -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 . - -Class - Foam::unthreadedInitialise - -Description - A fileOperation initialiser for unthreaded file handlers - -\*---------------------------------------------------------------------------*/ - -#ifndef unthreadedInitialise_H -#define unthreadedInitialise_H - -#include "fileOperationInitialise.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace fileOperations -{ - -/*---------------------------------------------------------------------------*\ - Class unthreadedInitialise Declaration -\*---------------------------------------------------------------------------*/ - -class unthreadedInitialise -: - public fileOperationInitialise -{ -public: - - // Constructors - - //- Construct from components - unthreadedInitialise(int& argc, char**& argv) - : - fileOperationInitialise(argc, argv) - {} - - - //- Destructor - virtual ~unthreadedInitialise() = default; - - - // Member Functions - - //- No threading required - virtual bool needsThreading() const - { - return false; - } -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace fileOperations -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C b/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C index 700b44aa8c..7db6427ffa 100644 --- a/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.C @@ -27,6 +27,7 @@ License \*---------------------------------------------------------------------------*/ #include "masterUncollatedFileOperation.H" +#include "fileOperationInitialise.H" #include "addToRunTimeSelectionTable.H" #include "Pstream.H" #include "Time.H" @@ -38,7 +39,6 @@ License #include "registerSwitch.H" #include "dummyISstream.H" #include "SubList.H" -#include "unthreadedInitialise.H" /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ @@ -71,11 +71,11 @@ namespace fileOperations masterUncollatedFileOperation::maxMasterFileBufferSize ); - // Mark as not needing threaded mpi + // Threaded MPI: not required addNamedToRunTimeSelectionTable ( fileOperationInitialise, - masterUncollatedFileOperationInitialise, + fileOperationInitialise_unthreaded, word, masterUncollated ); diff --git a/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.H b/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.H index bd908cb8de..b705312b4f 100644 --- a/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.H +++ b/src/OpenFOAM/global/fileOperations/masterUncollatedFileOperation/masterUncollatedFileOperation.H @@ -66,8 +66,6 @@ Description #include "OSspecific.H" #include "HashPtrTable.H" #include "DynamicList.H" -#include "List.H" -#include "unthreadedInitialise.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -787,31 +785,6 @@ public: }; -/*---------------------------------------------------------------------------*\ - Class masterUncollatedFileOperationInitialise Declaration -\*---------------------------------------------------------------------------*/ - -//! Internal class only -class masterUncollatedFileOperationInitialise -: - public unthreadedInitialise -{ -public: - - // Constructors - - //- Construct from components - masterUncollatedFileOperationInitialise(int& argc, char**& argv) - : - unthreadedInitialise(argc, argv) - {} - - - //- Destructor - virtual ~masterUncollatedFileOperationInitialise() = default; -}; - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace fileOperations diff --git a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.C b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.C index ab7b28b175..e1541444bd 100644 --- a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.C @@ -26,6 +26,7 @@ License \*---------------------------------------------------------------------------*/ #include "hostUncollatedFileOperation.H" +#include "fileOperationInitialise.H" #include "addToRunTimeSelectionTable.H" /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ @@ -48,12 +49,11 @@ namespace fileOperations comm ); - // Register initialisation routine. Signals need for threaded mpi and - // handles command line arguments + // Threaded MPI: not required addNamedToRunTimeSelectionTable ( fileOperationInitialise, - hostUncollatedFileOperationInitialise, + fileOperationInitialise_unthreaded, word, hostUncollated ); diff --git a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.H b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.H index 6364eb853f..70b4f8949e 100644 --- a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.H +++ b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/hostUncollatedFileOperation.H @@ -94,31 +94,6 @@ public: }; -/*---------------------------------------------------------------------------*\ - Class hostUncollatedFileOperationInitialise Declaration -\*---------------------------------------------------------------------------*/ - -//! Internal class only -class hostUncollatedFileOperationInitialise -: - public masterUncollatedFileOperationInitialise -{ -public: - - // Constructors - - //- Construct from components - hostUncollatedFileOperationInitialise(int& argc, char**& argv) - : - masterUncollatedFileOperationInitialise(argc, argv) - {} - - - //- Destructor - virtual ~hostUncollatedFileOperationInitialise() = default; -}; - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace fileOperations diff --git a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C index 9f2420e453..01103eecee 100644 --- a/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C +++ b/src/OpenFOAM/global/fileOperations/uncollatedFileOperation/uncollatedFileOperation.C @@ -27,12 +27,12 @@ License \*---------------------------------------------------------------------------*/ #include "uncollatedFileOperation.H" +#include "fileOperationInitialise.H" #include "Time.H" #include "Fstream.H" #include "addToRunTimeSelectionTable.H" #include "decomposedBlockData.H" #include "dummyISstream.H" -#include "unthreadedInitialise.H" /* * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * */ @@ -54,11 +54,11 @@ namespace fileOperations comm ); - // Mark as not needing threaded mpi + // Threaded MPI: not required addNamedToRunTimeSelectionTable ( fileOperationInitialise, - unthreadedInitialise, + fileOperationInitialise_unthreaded, word, uncollated );