Improve the integration of LMYEngine with QMCPACK.

BUILD_LMYENGINE_INTERFACE is exposed at the QMCPACK entry level and cached.
formic library is treated like einspline, placed after all qmc libs and before math and utility. Less pain to handle blas lapack fortran libs.
Remove a bunch of TARGET_LINK_LIBRARIES which can be messed up very easily.

Move LMYEngineInterface under QMCDriver. So stay close to the class definition.



git-svn-id: https://subversion.assembla.com/svn/qmcdev/branches/new_optimizer@7233 e5b18d87-469d-4833-9cc0-8cdfa06e9491
This commit is contained in:
Ye Luo 2016-11-17 04:19:48 +00:00
parent 685b69d5ae
commit 5a26ae6a93
12 changed files with 35 additions and 66 deletions

View File

@ -112,6 +112,7 @@ SET(PRINT_DEBUG 0 CACHE BOOL "Enable/disable debug printing")
SET(QMC_CUDA 0 CACHE BOOL "Build with GPU support through CUDA")
SET(QMC_ADIOS 0 CACHE BOOL "Build with ADIOS")
SET(BUILD_UNIT_TESTS 1 CACHE BOOL "Build unit tests")
SET(BUILD_LMYENGINE_INTERFACE 1 CACHE BOOL "Build LMY engine")
######################################################################
# set debug printout
@ -673,6 +674,13 @@ if(build_einspline)
SET(QMC_UTIL_LIBS einspline ${QMC_UTIL_LIBS})
endif()
IF(BUILD_LMYENGINE_INTERFACE)
ADD_DEFINITIONS(-DHAVE_LMY_ENGINE)
SET(FORMIC_BINARY_DIR ${qmcpack_BINARY_DIR})
SUBDIRS(src/formic/utils)
SET(QMC_UTIL_LIBS formic_utils ${QMC_UTIL_LIBS})
ENDIF(BUILD_LMYENGINE_INTERFACE)
#include(ExternalProject)
# set(einspline_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/einspline")
# set(einspline_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/einspline")

View File

@ -2,7 +2,7 @@ set(CMAKE_C_COMPILER mpiclang)
set(CMAKE_CXX_COMPILER mpiclang++11)
set(GNU_OPTS "-O3 -g -ffast-math -fopenmp -fstrict-aliasing -Wno-deprecated -Wswitch -Wunused-value")
set(GNU_FLAGS "-Drestrict=__restrict__ -DADD_ -DINLINE_ALL=inline -DDISABLE_TIMER=1 -DHAVE_MASS -DHAVE_MASSV -DUSE_REAL_STRUCT_FACTOR -DSPLINEFLOAT -DBGQPX")
set(GNU_FLAGS "-Drestrict=__restrict__ -DADD_ -DHAVE_MASS -DHAVE_MASSV -DSPLINEFLOAT -DBGQPX")
set(CMAKE_CXX_FLAGS "${GNU_FLAGS} ${GNU_OPTS} -ftemplate-depth-60")
set(CMAKE_C_FLAGS "${GNU_FLAGS} ${GNU_OPTS} -std=c99" )
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-multiple-definition")

View File

@ -201,13 +201,6 @@ else()
SUBDIRS(QMCDrivers)
SUBDIRS(QMCApp)
IF(BUILD_LMYENGINE_INTERFACE)
ADD_DEFINITIONS(-DHAVE_LMY_ENGINE)
SET(FORMIC_BINARY_DIR ${qmcpack_BINARY_DIR})
SUBDIRS(formic/utils)
SUBDIRS(LMYEngineInterface)
ENDIF(BUILD_LMYENGINE_INTERFACE)
#IF(BUILD_QMCTOOLS)
SUBDIRS(QMCTools)
#ENDIF(BUILD_QMCTOOLS)

View File

@ -1,47 +0,0 @@
# find the LMYEngine library
#FIND_LIBRARY(LMYENGINE_LIB lmyengine)
MESSAGE("-- LMYENGINE_LIB=${LMYENGINE_LIB}")
set(LMY_LIBS "${LMYENGINE_LIB}")
#ADD_DEFINITIONS(-DHAVE_LMY_ENGINE)
# find the LMYEngine header file add it to the includes
#FIND_PATH(LMYENGINE_INCLUDE_DIR formic/fqmc/engine/var_dependencies.h)
#MESSAGE("-- LMYENGINE_INCLUDE_DIR=${LMYENGINE_INCLUDE_DIR}")
#INCLUDE_DIRECTORIES(${LMYENGINE_INCLUDE_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_library(lmy_engine_interface LMYE_QMCCostFunctionOMP.cpp
LMYE_QMCFixedSampleLinearOptimize.cpp
)
set_property(TARGET lmy_engine_interface PROPERTY CXX_STANDARD 11)
set_property(TARGET lmy_engine_interface PROPERTY CXX_STANDARD_REQUIRED ON)
# find the atlas libraries that lmy depends on
#find_library(LMY_ATLAS_LIB_ATLAS atlas)
#find_library(LMY_ATLAS_LIB_CBLAS cblas)
#find_library(LMY_ATLAS_LIB_F77BLAS f77blas)
#find_library(LMY_ATLAS_LIB_LAPACK lapack)
#if(LMY_ATLAS_LIB_ATLAS AND LMY_ATLAS_LIB_CBLAS AND LMY_ATLAS_LIB_F77BLAS AND LMY_ATLAS_LIB_LAPACK)
# message(STATUS "Found ATLAS for LMY")
# set(LMY_LIBS "${LMY_LIBS};${LMY_ATLAS_LIB_LAPACK};${LMY_ATLAS_LIB_F77BLAS};${LMY_ATLAS_LIB_CBLAS};${LMY_ATLAS_LIB_ATLAS}")
#else(LMY_ATLAS_LIB_ATLAS AND LMY_ATLAS_LIB_CBLAS AND LMY_ATLAS_LIB_F77BLAS AND LMY_ATLAS_LIB_LAPACK)
#endif(LMY_ATLAS_LIB_ATLAS AND LMY_ATLAS_LIB_CBLAS AND LMY_ATLAS_LIB_F77BLAS AND LMY_ATLAS_LIB_LAPACK)
#if(CMAKE_COMPILER_IS_GNUCXX)
# set(LMY_LIBS ${LMY_LIBS};m;gfortran)
#endif(CMAKE_COMPILER_IS_GNUCXX)
target_link_libraries(lmy_engine_interface ${LMY_LIBS})
#install(
# TARGETS
# lmy_engine_interface
# RUNTIME DESTINATION
# bin
# LIBRARY DESTINATION
# lib
# ARCHIVE DESTINATION
# lib
# )

View File

@ -67,9 +67,5 @@ ENDIF()
TARGET_LINK_LIBRARIES(${p} ${MPI_LIBRARY})
ENDIF(MPI_LIBRARY)
IF(BUILD_LMYENGINE_INTERFACE)
TARGET_LINK_LIBRARIES(${p} formic_utils)
ENDIF(BUILD_LMYENGINE_INTERFACE)
ENDFOREACH(p ${QMCSRCS})

View File

@ -95,6 +95,13 @@ IF(HAVE_MPI)
DMC/WalkerReconfigurationMPI.cpp)
ENDIF(HAVE_MPI)
# if using the LMYEngine interface, make sure we add the necessary functions
IF(BUILD_LMYENGINE_INTERFACE)
SET(QMCDRIVERS ${QMCDRIVERS}
LMYEngineInterface/LMYE_QMCCostFunctionOMP.cpp
LMYEngineInterface/LMYE_QMCFixedSampleLinearOptimize.cpp
)
ENDIF(BUILD_LMYENGINE_INTERFACE)
IF(QMC_BUILD_LEVEL GREATER 1)
SET(QMCDRIVERS ${QMCDRIVERS}
@ -136,8 +143,3 @@ ENDIF()
#ELSE(QMC_BUILD_STATIC)
# ADD_LIBRARY(qmcdriver SHARED ${QMCDRIVERS})
#ENDIF(QMC_BUILD_STATIC)
# if using the LMYEngine interface, make sure we link in the necessary functions
IF(BUILD_LMYENGINE_INTERFACE)
TARGET_LINK_LIBRARIES(qmcdriver lmy_engine_interface)
ENDIF(BUILD_LMYENGINE_INTERFACE)

View File

@ -749,7 +749,7 @@ bool QMCFixedSampleLinearOptimize::adaptive_three_shift_run() {
const std::vector<double> shifts_s = this->prepare_shifts(this->bestShift_s);
std::vector<double> shift_scales(shifts_i.size(), 1.0);
for (int i = 0; i < shift_scales.size(); i++)
shift_scales.at(i) = shifts_i.at(i) / shifts_i.at(central_index);
shift_scales.at(i) = shifts_i.at(i) / shift_i;
// ensure the cost function is set to compute derivative vectors
this->optTarget->setneedGrads(true);

View File

@ -15,7 +15,7 @@ if(MKL_FOUND)
else(MKL_FOUND)
# use the fortran-C interface mangling determined by cmake
# this should be correct so long as the same compilers were used to build blas/lapack
FortranCInterface_HEADER(${FORMIC_BINARY_DIR}/src/formic/utils/mangle_other.h MACRO_NAMESPACE "FC_")
# FortranCInterface_HEADER(${FORMIC_BINARY_DIR}/src/formic/utils/mangle_other.h MACRO_NAMESPACE "FC_")
set(LAPACK_DECLARE_INC formic/utils/declare_other.h)
set(LAPACK_MANGLE_INC formic/utils/mangle_other.h)
endif(MKL_FOUND)

View File

@ -1,6 +1,7 @@
#include<formic/utils/lapack_interface.h>
#include<formic/utils/declare.h>
#include<formic/utils/mangle.h>
#include<formic/utils/mangle_other.h>
// complex conjugate of a vector
void formic::xconj(const int n, double * const y, const int incy) {

View File

@ -0,0 +1,16 @@
#ifndef FC_HEADER_INCLUDED
#define FC_HEADER_INCLUDED
/* Mangling for Fortran global symbols without underscores. */
#define FC_GLOBAL(name,NAME) name##_
/* Mangling for Fortran global symbols with underscores. */
#define FC_GLOBAL_(name,NAME) name##_
/* Mangling for Fortran module symbols without underscores. */
#define FC_MODULE(mod_name,name, mod_NAME,NAME) mod_name##_mp_##name##_
/* Mangling for Fortran module symbols with underscores. */
#define FC_MODULE_(mod_name,name, mod_NAME,NAME) mod_name##_mp_##name##_
#endif