From e0f11b2f8123d15811b0cd78ee0e5a99bc9bb7e3 Mon Sep 17 00:00:00 2001 From: Sebastien Gilles Date: Tue, 26 Dec 2017 15:06:54 +0100 Subject: [PATCH] #1210 Model: add a new parameter in constructor to enable higher customization of the result directory. This feature is relevant only for a handful of cases; see Redmine ticket for more explanation. --- Sources/Model/Model.hpp | 14 ++++++++--- Sources/Model/Model.hxx | 24 +++++++++++++++---- .../xcschemes/xcschememanagement.plist | 2 +- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Sources/Model/Model.hpp b/Sources/Model/Model.hpp index 8bbec718ca..5357ec4999 100644 --- a/Sources/Model/Model.hpp +++ b/Sources/Model/Model.hpp @@ -96,12 +96,15 @@ namespace MoReFEM * \param[in] mpi Object in charge of mpi. * \copydoc doxygen_hide_input_parameter_data_arg * \param[in] a_create_domain_list_for_coords Whether the model will compute the list of domains a coord is in or not. - * + * \param[in] additional_subdir If some additional subdirectories are required, add here the subdirectories to + * be created. For instance, if additional_subdir is { "foo", "bar" }, output directory will be set to + * #output directory read from input file#/foo/bar. */ template explicit Model(const Wrappers::Mpi& mpi, const InputParameterDataT& input_parameter_data, - create_domain_list_for_coords a_create_domain_list_for_coords = create_domain_list_for_coords::no); + create_domain_list_for_coords a_create_domain_list_for_coords = create_domain_list_for_coords::no, + std::vector&& additional_subdir = {}); //! Destructor. @@ -276,7 +279,12 @@ namespace MoReFEM //! Transient parameters. TimeManager::unique_ptr time_manager_ = nullptr; - //! Output directory. + /*! + * \brief Output directory. + * + * In most cases it is the path read in the input parameter file, but in some models some supplementary data + * might have been added. + */ std::string output_directory_; //! Files will be written every \a display_value_ time iteration. Choose 1 to write all of them. diff --git a/Sources/Model/Model.hxx b/Sources/Model/Model.hxx index ca695b6e76..f468f085a7 100644 --- a/Sources/Model/Model.hxx +++ b/Sources/Model/Model.hxx @@ -19,9 +19,11 @@ namespace MoReFEM template template - Model::Model(const Wrappers::Mpi& a_mpi, - const InputParameterDataT& input_parameter_data, - create_domain_list_for_coords a_create_domain_list_for_coords) + Model + ::Model(const Wrappers::Mpi& a_mpi, + const InputParameterDataT& input_parameter_data, + create_domain_list_for_coords a_create_domain_list_for_coords, + std::vector&& additional_subdir) : Crtp::CrtpMpi>(a_mpi) { if (a_create_domain_list_for_coords == create_domain_list_for_coords::yes) @@ -54,7 +56,21 @@ namespace MoReFEM const auto& mpi = this->GetMpi(); - output_directory_ = IPL::Extract::Folder(input_parameter_data); + { + output_directory_ = IPL::Extract::Folder(input_parameter_data); + + if (!additional_subdir.empty()) + { + for (const auto& subdir : additional_subdir) + { + output_directory_ += '/'; + output_directory_ += subdir; + } + + if (!FilesystemNS::Folder::DoExist(output_directory_)) + FilesystemNS::Folder::Create(output_directory_, __FILE__, __LINE__); + } + } if (mpi.IsRootProcessor()) { diff --git a/ThirdPartyXCodeProjects/Seldon.xcodeproj/xcuserdata/sebastien.xcuserdatad/xcschemes/xcschememanagement.plist b/ThirdPartyXCodeProjects/Seldon.xcodeproj/xcuserdata/sebastien.xcuserdatad/xcschemes/xcschememanagement.plist index 4a8d8dd4a2..a862f6a3a0 100644 --- a/ThirdPartyXCodeProjects/Seldon.xcodeproj/xcuserdata/sebastien.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/ThirdPartyXCodeProjects/Seldon.xcodeproj/xcuserdata/sebastien.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,7 +9,7 @@ isShown orderHint - 0 + 10 SuppressBuildableAutocreation -- GitLab