diff --git a/CMakeLists.txt b/CMakeLists.txt index e5ea754..76a7a5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,13 @@ project(molecular_dynamics) set(CMAKE_CXX_STANDARD 20) +find_package(Boost REQUIRED COMPONENTS log log_setup) +include_directories(${Boost_INCLUDE_DIRS}) + add_subdirectory(src/md) -add_executable(molecular_dynamics src/main.cpp) +add_executable(molecular_dynamics + src/main.cpp + src/log/Log.cpp) -target_link_libraries(molecular_dynamics PRIVATE md) \ No newline at end of file +target_link_libraries(molecular_dynamics PRIVATE md ${Boost_LIBRARIES}) \ No newline at end of file diff --git a/src/log/Log.cpp b/src/log/Log.cpp new file mode 100644 index 0000000..4a4f558 --- /dev/null +++ b/src/log/Log.cpp @@ -0,0 +1,92 @@ +/** + * @file Log.cpp + * @author Jun + * @brief Logging utilities + * @version 0.1 + * @date 2023-10-06 + * + * Copyright (c) 2023 jun + * + */ + +#include "Log.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace logging = boost::log; +namespace expr = boost::log::expressions; + +void my_formatter(logging::record_view const &rec, + logging::formatting_ostream &strm) { + auto severity = rec[logging::trivial::severity]; + + auto white = "\033[37m"; + auto red = "\033[31m"; + auto green = "\033[32m"; + auto yellow = "\033[33m"; + auto blue = "\033[34m"; + auto orange = "\033[35m"; + auto cyan = "\033[36m"; + auto clear = "\033[0m"; + + auto severityColor = white; + + if (severity) { + // Set the color + switch (severity.get()) { + case logging::trivial::severity_level::info: + severityColor = cyan; + break; + case logging::trivial::severity_level::warning: + severityColor = yellow; + break; + case logging::trivial::severity_level::error: + case logging::trivial::severity_level::fatal: + severityColor = red; + break; + default: + // White + severityColor = white; + break; + } + } + + strm << "[" << logging::extract("TimeStamp", rec) + << "]"; + + strm << severityColor << "[" << severity.get() << "] " << rec[expr::smessage] + << clear; +} + +void setupLogging() { + namespace sinks = boost::log::sinks; + namespace attrs = boost::log::attributes; + namespace keywords = boost::log::keywords; + + boost::shared_ptr backend = + boost::make_shared(); + + backend->add_stream( + boost::shared_ptr(&std::clog, boost::null_deleter())); + + // typedef sinks::synchronous_sink sink_t; + typedef sinks::synchronous_sink sink_t; + + boost::shared_ptr sink(new sink_t(backend)); + + sink->set_formatter(&my_formatter); + sink->locked_backend()->auto_flush(true); + + logging::add_common_attributes(); + logging::core::get()->add_sink(sink); +} \ No newline at end of file diff --git a/src/log/Log.hpp b/src/log/Log.hpp new file mode 100644 index 0000000..cd8d133 --- /dev/null +++ b/src/log/Log.hpp @@ -0,0 +1,17 @@ +/** + * @file Log.hpp + * @author Jun + * @brief Logging utilities + * @version 0.1 + * @date 2023-10-06 + * + * Copyright (c) 2023 jun + * + */ + +#pragma once + +#include +#include + +void setupLogging(); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 2f621f1..7ccd2d9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,17 +16,36 @@ #include "md/Space.hpp" #include "md/System.hpp" +#include "log/Log.hpp" + +#include +#include +#include #include #include + namespace mpi = boost::mpi; -int main() { - std::cout << "kk eae men" << std::endl; +int main(int argc, char **argv) { + mpi::environment env; + mpi::communicator world; + + setupLogging(); + + // Initialize logging + boost::log::core::get()->set_filter(boost::log::trivial::severity >= + boost::log::trivial::trace); + + if (world.rank() == 0) + BOOST_LOG_TRIVIAL(warning) + << "Initializing with " << world.size() << " processes"; + + return 0; // TODO: get these from command line arguments - double lattice = 5.26; - int numberOfCells = 5; - double temperature = 300; + double lattice = 5.26; + int numberOfCells = 5; + double temperature = 300; Space space(3); @@ -37,7 +56,8 @@ int main() { space.addAtom(atoms); std::cout << "Setting box..." << std::endl; - space.setBox(lattice * numberOfCells, lattice * numberOfCells, lattice * numberOfCells); + space.setBox(lattice * numberOfCells, lattice * numberOfCells, + lattice * numberOfCells); std::cout << "Preparing space..." << std::endl; space.prepareSpace(); @@ -48,11 +68,5 @@ int main() { std::cout << "Getting neighboring cells of index 0" << std::endl; Cell neighboringCells = space.getNeighboringCells(0); - mpi::environment env; - mpi::communicator world; - - std::cout << "Hello, world! I am process " << world.rank() << " of " << world.size() << "." - << std::endl; - return 0; } \ No newline at end of file diff --git a/src/md/CMakeLists.txt b/src/md/CMakeLists.txt index e30e878..882b97c 100644 --- a/src/md/CMakeLists.txt +++ b/src/md/CMakeLists.txt @@ -1,6 +1,6 @@ # Copyright (c) 2023 jun -cmake_minimum_required(VERSION 3.25.2) +cmake_minimum_required(VERSION 3.25.1) project(md)