-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update ROMFPMD branch from release (#255)
* Reenable testShortSighted test (#248) * Make new driver to check input (#247) * clean up/reorganize main.cc * use shared_ptr in class MGmol * Add possible periodic dimensions to xyz2in.py (#249) * Add possible periodic dimensions to xyz2in.py * Remove unused/untested option extrapolateH (#250) * Exit with failure if density off by more than 2% (#251) * Exit with failure if density off by more than 2% * adapt SiH4 test to catch that * fix bug in DFTsolver that was leading to wrong density * Example driver (#252) * add example driver, showing use of MGmol as a force/energy computational engine * clean up related functions in class Ions * loadOrbitalsFromRestartFile -> loadRestartFile * update the rom main driver. * update rom main driver again * temporary fix before the next PR --------- Co-authored-by: Jean-Luc Fattebert <[email protected]>
- Loading branch information
1 parent
5267463
commit 24b26b6
Showing
30 changed files
with
729 additions
and
486 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
include_directories( ${CMAKE_SOURCE_DIR}/src ) | ||
|
||
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
// 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 <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; | ||
|
||
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 options 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(); | ||
|
||
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 | ||
{ | ||
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); | ||
|
||
*MPIdata::sout << " Input parameters OK\n"; | ||
|
||
delete mgmol; | ||
} // close main scope | ||
|
||
mgmol_finalize(); | ||
|
||
mpirc = MPI_Finalize(); | ||
if (mpirc != MPI_SUCCESS) | ||
{ | ||
std::cerr << "MPI Finalize failed!!!" << std::endl; | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.