diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 616f4c1..5ecd092 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,6 +1,8 @@ if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") + # 添加openblas库的地址 + include_directories(D:/Library/include) endif() if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") @@ -36,6 +38,11 @@ set_target_properties(magtess PROPERTIES VERSION 1.0 SOVERSION 1.0) if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") target_link_libraries(magtess PUBLIC openblas) target_link_libraries(magtess PUBLIC m) +elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") + # + find_library(OPENBLAS_LIBRARY libopenblas D:/Library/lib) + target_link_libraries(magtess PUBLIC ${OPENBLAS_LIBRARY}) + target_link_libraries(magtess_static ${OPENBLAS_LIBRARY}) endif() # 库的安装命令 diff --git a/lib/linalg.cpp b/lib/linalg.cpp index b057a0a..ace8134 100755 --- a/lib/linalg.cpp +++ b/lib/linalg.cpp @@ -12,6 +12,8 @@ Functions matrix and vector multiplications. #ifdef __linux__ // Debian, Ubuntu, Gentoo, Fedora, openSUSE, RedHat, Centos and other #include +#elif _WINDOWS || __WIN32__ // Added for windows by Yi Zhang on 2021-08-26 + #include #elif defined(__APPLE__) && defined(__MACH__) #include #else diff --git a/toolkits/CMakeLists.txt b/toolkits/CMakeLists.txt index c1b452b..5719ad6 100644 --- a/toolkits/CMakeLists.txt +++ b/toolkits/CMakeLists.txt @@ -36,12 +36,13 @@ add_tools(tessbz) add_tools(tessutil_combine_grids) add_tools(tessutil_gradient_calculator) -#add_tools(tessutil_magnetize_model) -# 添加可执行程序名称 -add_executable(tessutil_magnetize_model tessutil_magnetize_model.c) -# 设置安装后的动态库调用地址 -set_target_properties(tessutil_magnetize_model PROPERTIES INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib) -# 链接动态库 -target_link_libraries(tessutil_magnetize_model PUBLIC magtess) -# 将可执行程序安装到bin -install(TARGETS tessutil_magnetize_model RUNTIME DESTINATION sbin) \ No newline at end of file +if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") + # 添加可执行程序名称 + add_executable(tessutil_magnetize_model tessutil_magnetize_model.c) + # 设置安装后的动态库调用地址 + set_target_properties(tessutil_magnetize_model PROPERTIES INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib) + # 链接动态库 + target_link_libraries(tessutil_magnetize_model PUBLIC magtess) + # 将可执行程序安装到bin + install(TARGETS tessutil_magnetize_model RUNTIME DESTINATION sbin) +endif() diff --git a/toolkits/tessutil_combine_grids.cpp b/toolkits/tessutil_combine_grids.cpp index 53ebff9..a6c7ac7 100755 --- a/toolkits/tessutil_combine_grids.cpp +++ b/toolkits/tessutil_combine_grids.cpp @@ -1,12 +1,19 @@ #include #include -#include #include +#include +#include // Added by Zhang Yi on 2021-08-26 +#include #define MAX_GRID_POINTS 16000 #define GRID_FORMAT "%lf %lf %f %lf" +#if defined(_MSC_VER) /* Added for windows by Yi Zhang on 2021-08-26*/ +#include +typedef SSIZE_T ssize_t; +#endif + void printresult_withalt(double* longitudes, double* latitudes, float* altitudes, double* values, int n_values) { @@ -40,7 +47,8 @@ int main(int argc, char**argv) double factor = 1; - char * line = NULL; + //char * line = NULL; + std::string line; size_t len = 0; ssize_t read; @@ -48,20 +56,24 @@ int main(int argc, char**argv) for (int i = 0; i < n_files; i++) { - FILE * fp = fopen(argv[1+2*i], "r"); + //FILE * fp = fopen(argv[1+2*i], "r"); + std::ifstream fp(argv[1+2*i], std::ios::in); sscanf(argv[1+2*i+1], "%lf", &factor); - if (fp == NULL) + //if (fp == NULL) + if (!fp) { printf("ERROR: Can not open file with grid values.\n"); exit(EXIT_FAILURE); } n_lines = 0; - while ((read = getline(&line, &len, fp )) != -1) + //while ((read = getline(&line, &len, fp )) != -1) + while (std::getline(fp, line)) { - if ((line[0] != '#') && (strlen(line) > 2)) + //if ((line[0] != '#') && (strlen(line) > 2)) + if ((line[0] != '#') && (line.length() > 2)) { n_lines++; if (n_lines>MAX_GRID_POINTS) @@ -71,12 +83,13 @@ int main(int argc, char**argv) } double value; - sscanf(line, GRID_FORMAT, &lons[n_lines-1], &lats[n_lines-1], &alts[n_lines-1], &value); + sscanf(line.c_str(), GRID_FORMAT, &lons[n_lines-1], &lats[n_lines-1], &alts[n_lines-1], &value); vals[n_lines-1] = vals[n_lines-1] + value*factor; } } - fclose(fp); + //fclose(fp); + fp.close(); } int no_alt = 0; diff --git a/toolkits/tessutil_gradient_calculator.cpp b/toolkits/tessutil_gradient_calculator.cpp index 0f2b87b..706ee6e 100755 --- a/toolkits/tessutil_gradient_calculator.cpp +++ b/toolkits/tessutil_gradient_calculator.cpp @@ -1,7 +1,9 @@ #include #include -#include #include +#include +#include // Added by Zhang Yi on 2021-08-26 +#include #include "../lib/constants.h" #include "../lib/parsers.h" @@ -11,6 +13,11 @@ #define GRID_FORMAT "%lf %lf %f %lf" +#if defined(_MSC_VER) /* Added for windows by Yi Zhang on 2021-08-26*/ +#include +typedef SSIZE_T ssize_t; +#endif + // TODO conversion of input/output units nT/km pT/km nT/m pT/m @@ -106,14 +113,17 @@ int main(int argc, char**argv) double bz[MAX_GRID_POINTS]; //read file with bx - char * line = NULL; + //char * line = NULL; + std::string line; size_t len = 0; ssize_t read; - FILE * bxfp = fopen(args.gridbx_fn, "r"); - if (bxfp == NULL) + //FILE * bxfp = fopen(args.gridbx_fn, "r"); + //if (bxfp == NULL) + std::ifstream bxfp(args.gridbx_fn, std::ios::in); // Updated by Yi Zhang on 2021-08-26 + if (!bxfp) { printf("ERROR: Can not open file with Bx values.\n"); exit(EXIT_FAILURE); @@ -123,10 +133,12 @@ int main(int argc, char**argv) - while ((read = getline(&line, &len, bxfp )) != -1) + //while ((read = getline(&line, &len, bxfp )) != -1) + while (getline(bxfp, line)) { - if ((line[0] != '#') && (strlen(line) > 2)) + //if ((line[0] != '#') && (strlen(line) > 2)) + if ((line[0] != '#') && (line.length() > 2)) { n_lines++; if (n_lines>MAX_GRID_POINTS) @@ -135,11 +147,12 @@ int main(int argc, char**argv) exit(EXIT_FAILURE); } - sscanf(line, GRID_FORMAT, &lons[n_lines-1], &lats[n_lines-1], &alts[n_lines-1], &bx[n_lines-1]); + sscanf(line.c_str(), GRID_FORMAT, &lons[n_lines-1], &lats[n_lines-1], &alts[n_lines-1], &bx[n_lines-1]); } } - fclose(bxfp); + //fclose(bxfp); + bxfp.close(); /*number of grid points*/ @@ -183,27 +196,33 @@ int main(int argc, char**argv) /* read other grids */ // By - FILE * byfp = fopen(args.gridby_fn, "r"); - if (byfp == NULL) + //FILE * byfp = fopen(args.gridby_fn, "r"); + //if (byfp == NULL) + + std::ifstream byfp(args.gridby_fn, std::ios::in); + if (!byfp) { printf("ERROR: Can not open file with Bx values.\n"); exit(EXIT_FAILURE); } int n_lines2 = 0; - while ((read = getline(&line, &len, byfp )) != -1) + //while ((read = getline(&line, &len, byfp )) != -1) + while (getline(byfp, line)) { - if ((line[0] != '#') && (strlen(line) > 2)) - { - n_lines2++; - //printf("%s", line); - double dummy1, dummy2; - float dummy3; - sscanf(line, GRID_FORMAT , &dummy1, &dummy2, &dummy3, &by[n_lines2-1]); - } + //if ((line[0] != '#') && (strlen(line) > 2)) + if ((line[0] != '#') && (line.length() > 2)) + { + n_lines2++; + //printf("%s", line); + double dummy1, dummy2; + float dummy3; + sscanf(line.c_str(), GRID_FORMAT , &dummy1, &dummy2, &dummy3, &by[n_lines2-1]); + } } - fclose(byfp); + //fclose(byfp); + byfp.close(); if (n_lines2 != n_lines) { @@ -212,29 +231,33 @@ int main(int argc, char**argv) } // Bz - FILE * bzfp = fopen(args.gridbz_fn, "r"); - if (bzfp == NULL) + //FILE * bzfp = fopen(args.gridbz_fn, "r"); + //if (bzfp == NULL) + std::ifstream bzfp(args.gridbz_fn, std::ios::in); + if (!bzfp) { printf("ERROR: Can not open file with Bx values.\n"); exit(EXIT_FAILURE); } n_lines2 = 0; - while ((read = getline(&line, &len, bzfp )) != -1) + //while ((read = getline(&line, &len, bzfp )) != -1) + while (getline(bzfp, line)) { - if ((line[0] != '#') && (strlen(line) > 2)) + if ((line[0] != '#') && (line.length() > 2)) { n_lines2++; //printf("%s", line); double dummy1, dummy2; float dummy3; double bz_curr; - sscanf(line, GRID_FORMAT, &dummy1, &dummy2, &dummy3,&bz_curr); + sscanf(line.c_str(), GRID_FORMAT, &dummy1, &dummy2, &dummy3,&bz_curr); bz[n_lines2-1] = args.bz_NEU_NED* bz_curr; //COORDINATE SYSTEM NEU or NED } } - fclose(byfp); + //fclose(byfp); + byfp.close(); if (n_lines2 != n_lines) { diff --git a/toolkits/tessutil_magnetize_model.c b/toolkits/tessutil_magnetize_model.c index 2006056..d49e11f 100755 --- a/toolkits/tessutil_magnetize_model.c +++ b/toolkits/tessutil_magnetize_model.c @@ -22,6 +22,11 @@ int my_isnan(double d) return (d != d); /* IEEE: only NaN is not equal to itself */ } +#if defined(_MSC_VER) /* Added for windows by Yi Zhang on 2021-08-26*/ +#include +typedef SSIZE_T ssize_t; +#endif + #define NaN log(-1.0) #define FT2KM (1.0/0.0003048) #define RAD2DEG (180.0/PI)