23#include <boost/algorithm/string.hpp>
24#include <boost/format.hpp>
25#include <libint2/initialize.h>
35template <
typename JobContainer>
37 libint2::initialize();
39 std::string progFile = jobfile_;
40 std::unique_ptr<JobOperator> master = std::unique_ptr<JobOperator>(
43 master->getLogger().setMultithreading(
true);
44 master->getLogger().setPreface(
Log::info,
"\nMST INF");
45 master->getLogger().setPreface(
Log::error,
"\nMST ERR");
46 master->getLogger().setPreface(
Log::warning,
"\nMST WAR");
47 master->getLogger().setPreface(
Log::debug,
"\nMST DBG");
48 progObs_->InitFromProgFile(progFile, *(master.get()));
51 std::vector<std::unique_ptr<JobOperator>> jobOps;
53 for (
Index id = 0;
id < nThreads_;
id++) {
54 jobOps.push_back(std::unique_ptr<JobOperator>(
58 for (
Index id = 0;
id < nThreads_; ++id) {
59 CustomizeLogger(*jobOps[
id]);
63 std::cout << std::endl;
66 for (
Index id = 0;
id < nThreads_;
id++) {
70 for (
Index id = 0;
id < nThreads_;
id++) {
71 jobOps[id]->WaitDone();
75 for (
Index id = 0;
id < nThreads_;
id++) {
76 std::cout << std::endl << (jobOps[id]->getLogger()) << std::flush;
83 progObs_->SyncWithProgFile(*(master.get()));
88template <
typename JobContainer>
92 Job *job =
master_.progObs_->RequestNextJob(*
this);
98 this->
master_.progObs_->ReportJobDone(*job, res, *
this);
103template <
typename JobContainer>
106 std::cout <<
"\n... ... Initialized with " <<
nThreads_ <<
" threads.\n";
110 std::cout <<
"\n... ... Using " <<
openmp_threads_ <<
" openmp threads for "
117template <
typename JobContainer>
126 (format(
"\nT%1$02d INF ...") % thread.
getId()).str());
128 (format(
"\nT%1$02d ERR ...") % thread.
getId()).str());
130 (format(
"\nT%1$02d WAR ...") % thread.
getId()).str());
132 (format(
"\nT%1$02d DBG ...") % thread.
getId()).str());
Logger is used for thread-safe output of messages.
void setPreface(Log::Level level, const std::string &preface)
void setReportLevel(Log::Level ReportLevel)
void setMultithreading(bool maverick)
ParallelXJobCalc< JobContainer > & master_
void Run() override
Run() executes the actual code.
typename JobContainer::value_type Job
void ParseCommonOptions(const tools::Property &options)
typename Job::JobResult Result
virtual void CustomizeLogger(QMThread &thread)
bool Evaluate(const Topology &top) final
Container for segments and box and atoms.
void setMaxThreads(Index)
base class for all analysis tools
static Level current_level