diff --git a/CMake/config.h.in b/CMake/config.h.in index 7d385c4cb2ba9d9518e96d0850beba630e70a9cd..15827eda08ca08e9dfb3a9763dc07234aa945dfe 100644 --- a/CMake/config.h.in +++ b/CMake/config.h.in @@ -70,4 +70,4 @@ #cmakedefine HAVE_HMAT #cmakedefine HAVE_CHAMELEON #cmakedefine HAVE_HLIBPRO -#cmakedefine HAVE_MAPHYSPP +#cmakedefine HAVE_COMPOSE diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c2b2dfd646b035fa36898f6a33f789598ca4601..2ccdccabe015077cc81b414aa63c4b89cb66d464 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,12 +140,12 @@ if ( NOT TARGET MAPHYSPP::maphyspp ) find_package(maphyspp) if(maphyspp_FOUND) message(STATUS "Found maphys++") - set(HAVE_MAPHYSPP TRUE) + set(HAVE_COMPOSE TRUE) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) endif() else() - set(HAVE_MAPHYSPP TRUE) + set(HAVE_COMPOSE TRUE) endif() # ======================== @@ -201,7 +201,7 @@ if ( M_LIBRARIES ) endif() if(maphyspp_FOUND) - target_link_libraries(test_FEMBEM PUBLIC PRIVATE MAPHYSPP::maphyspp) + target_link_libraries(test_FEMBEM PUBLIC MAPHYSPP::maphyspp) endif(maphyspp_FOUND) # ======================== diff --git a/include/main.h b/include/main.h index ffa94c9416c02021bfea72e48cf5403eb34047c5..a91931209897010cc0201a0edb5ab32d8598547a 100644 --- a/include/main.h +++ b/include/main.h @@ -23,6 +23,11 @@ #include "hmat/hmat_parallel.h" // from hmat (not oss) #endif #include "util.h" + +#if defined __cplusplus +extern "C" { +#endif + /* ================================================================================= */ /*! \brief List of numerical model (and matrix content) that we can test. @@ -140,7 +145,8 @@ enum algo { _gemvHCHAMELEON, _gemmHCHAMELEON, _solveHCHAMELEON, - _helloCOMPOSE + _gemvCOMPOSE, + _solveCOMPOSE } ; /*! \brief Algorithms that we want to test. */ @@ -280,15 +286,7 @@ int testCHAMELEON(double * relative_error); int testHLIBPRO(double * relative_error); int initHLIBPRO(int* argc, char*** argv) ; int testHCHAMELEON(double * relative_error); - -#if defined __cplusplus -extern "C" { -#endif - -void maphyspp_say_hello(); -#if defined __cplusplus -} -#endif +int testCOMPOSE(double * relative_error); #ifdef HAVE_CHAMELEON extern cham_flttype_t chameleonType; @@ -349,3 +347,7 @@ void HMAT_destroy_matrix ( hmat_interface_t *hi, HMAT_desc_t *hdesc ); #endif +#if defined __cplusplus +} // extern "C" +#endif + diff --git a/src/compose.cpp b/src/compose.cpp index 1e51651af9d77d0f3714723cbefde92f47fd7f35..9856bef0fff4a36beafd2ddeb5fe0a07983e73f4 100644 --- a/src/compose.cpp +++ b/src/compose.cpp @@ -1,13 +1,5 @@ #include "main.h" -#if defined(HAVE_CHAMELEON) -#include <maphys.hpp> +#if defined(HAVE_COMPOSE) -using namespace maphys; - -void maphyspp_say_hello(){ - DenseMatrix<double> A({1, 2, 3, 4}, 2, 2); - A.display("Hello A"); -} - -#endif // defined(HAVE_CHAMELEON) +#endif // defined(HAVE_COMPOSE) diff --git a/src/help.c b/src/help.c index 9ed0ba4ca2c7079b1dab03a1a55ca5ffff8dca97..6d273d1b77813d43a56ab60eb209654931a1185d 100644 --- a/src/help.c +++ b/src/help.c @@ -63,6 +63,12 @@ int printHelp() { " -solvehlibpro: solve HLIBPRO.\n" #else " HLIBPRO solver support not available.\n" + #endif + #ifdef HAVE_COMPOSE + " -gemvcompose: gemv COMPOSE.\n" + " -solvecompose: solve COMPOSE.\n" + #else + " COMPOSE solver support not available.\n" #endif "\n" #ifdef HAVE_HMAT diff --git a/src/main.c b/src/main.c index 1006c41208d81c15cf6cc8d4401798bd0e054d45..6d8ad0853116e49058a00440858efb61f0d3ea8a 100644 --- a/src/main.c +++ b/src/main.c @@ -100,9 +100,13 @@ int main(int argc, char **argv) { testedAlgo = _gemvHCHAMELEON ; printf("Testing : gemv H-CHAMELEON.\n") ; } - if (MpfArgHasName(&argc, argv, 1, "-hellocompose") > 0) { - testedAlgo = _helloCOMPOSE ; - printf("Testing : HELLO COMPOSE.\n") ; + if (MpfArgHasName(&argc, argv, 1, "-gemvcompose") > 0) { + testedAlgo = _gemvCOMPOSE ; + printf("Testing : gemv COMPOSE.\n") ; + } + if (MpfArgHasName(&argc, argv, 1, "-solvecompose") > 0) { + testedAlgo = _solveCOMPOSE ; + printf("Testing : solve COMPOSE.\n") ; } if (MpfArgHasName(&argc, argv, 1, "-solvehchameleon") > 0) { testedAlgo = _solveHCHAMELEON ; @@ -127,7 +131,9 @@ int main(int argc, char **argv) { case _solveHCHAMELEON: // Add "--chameleon" in the command line if it is not yet there if (!MpfArgHasName(&argc, argv, 0, "--chameleon")) argv[argc++]="--chameleon"; break; - case _helloCOMPOSE: + case _gemvCOMPOSE: + case _solveCOMPOSE: + // nothing break; case _undefined: default: @@ -163,7 +169,8 @@ int main(int argc, char **argv) { #endif ierr = init_hmat_interface(); CHKERRQ(ierr); break; - case _helloCOMPOSE: + case _gemvCOMPOSE: + case _solveCOMPOSE: break; case _undefined: default: @@ -378,10 +385,9 @@ int main(int argc, char **argv) { case _solveHCHAMELEON: ierr = testHCHAMELEON(&relative_error); CHKERRQ(ierr); break; - case _helloCOMPOSE: - maphyspp_say_hello(); - relative_error = 1e-15; - ierr = 0; + case _gemvCOMPOSE: + case _solveCOMPOSE: + ierr = testCOMPOSE(&relative_error); CHKERRQ(ierr); break; default: SETERRQ(1, "Unknown algorithm=%d", testedAlgo); diff --git a/src/testCOMPOSE.cpp b/src/testCOMPOSE.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7eaab1cf9cf22d31385ed56a7e45bc4721ce4d01 --- /dev/null +++ b/src/testCOMPOSE.cpp @@ -0,0 +1,42 @@ +#include "main.h" + +/*! \brief Runs the test using COMPOSE solver + */ +#if defined(HAVE_COMPOSE) +#include <maphys.hpp> +#include <memory> +#include <cstring> + +using namespace maphys; + +int testCOMPOSE(double * relative_error){ + + const int N = nbPts; + + DenseMatrix<std::complex<double>> A(N, N); + + auto myCtx = std::make_unique<contextTestFEMBEM>(); + std::memset(myCtx.get(), 0, sizeof(contextTestFEMBEM)); + myCtx->colDim = N; + + int row_min = 1; + int row_max = N; + int col_min = 1; + int col_max = N; + int size_of_buffer = N * N; + int ld = A.get_leading_dim(); + + computeDenseBlockFEMBEM(&row_min, &row_max, &col_min, &col_max, + &Mpf_i_zero, &Mpf_i_one, &Mpf_i_one, &Mpf_i_one, + &size_of_buffer, &ld, (void *) get_ptr(A), (void *) myCtx.get()); + + auto A_first_block = A.get_block_view(0, 0, 6, 6); + A_first_block.display("A first block 6x6"); + + *relative_error = 1e-15; + return 0; +} + +#else // HAVE_COMPOSE not defined + int testCOMPOSE(double *){ return 0; } +#endif // defined(HAVE_COMPOSE)