Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions drivers/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
include_directories( ${CMAKE_SOURCE_DIR}/src )

add_executable(check_input
check_input.cc
)
add_executable(check_input check_input.cc)

add_executable(example1 example1.cc)

target_include_directories(check_input PRIVATE ${Boost_INCLUDE_DIRS})
target_include_directories(example1 PRIVATE ${Boost_INCLUDE_DIRS})

target_link_libraries(check_input mgmol_src)
target_link_libraries(example1 mgmol_src)
167 changes: 167 additions & 0 deletions drivers/example1.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
// Copyright (c) 2017, Lawrence Livermore National Security, LLC and
// UT-Battelle, LLC.
// Produced at the Lawrence Livermore National Laboratory and the Oak Ridge
// National Laboratory.
// LLNL-CODE-743438
// All rights reserved.
// This file is part of MGmol. For details, see https://github.com/llnl/mgmol.
// Please also read this link https://github.com/llnl/mgmol/LICENSE

#include "Control.h"
#include "ExtendedGridOrbitals.h"
#include "LocGridOrbitals.h"
#include "MGmol.h"
#include "MGmol_MPI.h"
#include "MPIdata.h"
#include "mgmol_run.h"

#include <cassert>
#include <iostream>
#include <time.h>
#include <vector>

#include <boost/program_options.hpp>
namespace po = boost::program_options;

int main(int argc, char** argv)
{
int mpirc = MPI_Init(&argc, &argv);
if (mpirc != MPI_SUCCESS)
{
std::cerr << "MPI Initialization failed!!!" << std::endl;
MPI_Abort(MPI_COMM_WORLD, 0);
}

MPI_Comm comm = MPI_COMM_WORLD;

/*
* Initialize general things, like magma, openmp, IO, ...
*/
mgmol_init(comm);

/*
* read runtime parameters
*/
std::string input_filename("");
std::string lrs_filename;
std::string constraints_filename("");

float total_spin = 0.;
bool with_spin = false;

po::variables_map vm;

// read from PE0 only
if (MPIdata::onpe0)
{
read_config(argc, argv, vm, input_filename, lrs_filename,
constraints_filename, total_spin, with_spin);
}

MGmol_MPI::setup(comm, std::cout, with_spin);
MGmol_MPI& mmpi = *(MGmol_MPI::instance());
MPI_Comm global_comm = mmpi.commGlobal();

/*
* Setup control struct with run time parameters
*/
Control::setup(global_comm, with_spin, total_spin);
Control& ct = *(Control::instance());

ct.setOptions(vm);

int ret = ct.checkOptions();
if (ret < 0) return ret;

mmpi.bcastGlobal(input_filename);
mmpi.bcastGlobal(lrs_filename);

// Enter main scope
{
if (MPIdata::onpe0)
{
std::cout << "-------------------------" << std::endl;
std::cout << "Construct MGmol object..." << std::endl;
std::cout << "-------------------------" << std::endl;
}

MGmolInterface* mgmol;
if (ct.isLocMode())
mgmol = new MGmol<LocGridOrbitals>(global_comm, *MPIdata::sout,
input_filename, lrs_filename, constraints_filename);
else
mgmol = new MGmol<ExtendedGridOrbitals>(global_comm, *MPIdata::sout,
input_filename, lrs_filename, constraints_filename);

if (MPIdata::onpe0)
{
std::cout << "-------------------------" << std::endl;
std::cout << "MGmol setup..." << std::endl;
std::cout << "-------------------------" << std::endl;
}
mgmol->setup();

if (MPIdata::onpe0)
{
std::cout << "-------------------------" << std::endl;
std::cout << "Setup done..." << std::endl;
std::cout << "-------------------------" << std::endl;
}

// here we just use the atomic positions read in and used
// to initialize MGmol
std::vector<double> positions;
mgmol->getAtomicPositions(positions);
std::vector<short> anumbers;
mgmol->getAtomicNumbers(anumbers);
if (MPIdata::onpe0)
{
std::cout << "Positions:" << std::endl;
std::vector<short>::iterator ita = anumbers.begin();
for (std::vector<double>::iterator it = positions.begin();
it != positions.end(); it += 3)
{
std::cout << *ita;
for (int i = 0; i < 3; i++)
std::cout << " " << *(it + i);
std::cout << std::endl;
ita++;
}
}

// compute energy and forces using all MPI tasks
// expect positions to be replicated on all MPI tasks
std::vector<double> forces;
mgmol->evaluateEnergyAndForces(positions, anumbers, forces);

// print out results
if (MPIdata::onpe0)
{
std::cout << "Forces:" << std::endl;
for (std::vector<double>::iterator it = forces.begin();
it != forces.end(); it += 3)
{
for (int i = 0; i < 3; i++)
std::cout << " " << *(it + i);
std::cout << std::endl;
}
}

delete mgmol;

} // close main scope

mgmol_finalize();

mpirc = MPI_Finalize();
if (mpirc != MPI_SUCCESS)
{
std::cerr << "MPI Finalize failed!!!" << std::endl;
}

time_t tt;
time(&tt);
if (onpe0) std::cout << " Run ended at " << ctime(&tt) << std::endl;

return 0;
}
Loading