diff --git a/CMakeLists.txt b/CMakeLists.txt index a89a7b6..e7f98fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,7 +98,6 @@ endif() if(GCTL_FOUND AND GCTL_OPTIMIZATION_FOUND) add_example(optimization lcg_solver_ex ON OFF ON OFF) - add_example(optimization geoblas_lcg_solver_ex ON OFF ON OFF) add_example(optimization lgd_solver_ex ON OFF ON OFF) add_example(optimization ex3 ON OFF ON OFF) add_example(optimization ex4 ON OFF ON OFF) diff --git a/src/optimization/geoblas_lcg_solver_ex.cpp b/src/optimization/geoblas_lcg_solver_ex.cpp deleted file mode 100644 index 978c53c..0000000 --- a/src/optimization/geoblas_lcg_solver_ex.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************** - * ██████╗ ██████╗████████╗██╗ - * ██╔════╝ ██╔════╝╚══██╔══╝██║ - * ██║ ███╗██║ ██║ ██║ - * ██║ ██║██║ ██║ ██║ - * ╚██████╔╝╚██████╗ ██║ ███████╗ - * ╚═════╝ ╚═════╝ ╚═╝ ╚══════╝ - * Geophysical Computational Tools & Library (GCTL) - * - * Copyright (c) 2022 Yi Zhang (yizhang-geo@zju.edu.cn) - * - * GCTL is distributed under a dual licensing scheme. You can redistribute - * it and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either version 2 - * of the License, or (at your option) any later version. You should have - * received a copy of the GNU Lesser General Public License along with this - * program. If not, see . - * - * If the terms and conditions of the LGPL v.2. would prevent you from using - * the GCTL, please consider the option to obtain a commercial license for a - * fee. These licenses are offered by the GCTL's original author. As a rule, - * licenses are provided "as-is", unlimited in time for a one time fee. Please - * send corresponding requests to: yizhang-geo@zju.edu.cn. Please do not forget - * to include some description of your company and the realm of its activities. - * Also add information on how to contact you by electronic and paper mail. - ******************************************************/ - -#include "gctl/core/array_algorithm.h" -#include "gctl/core/matrix_algorithm.h" -#include "gctl/optimization/lcg_geoblas.h" - -#define M 1000 -#define N 800 - -double max_diff(const gctl::array &a, const gctl::array &b) -{ - double max = -1.0; - for (size_t i = 0; i < a.size(); i++) - { - max = std::max(sqrt((a[i] - b[i])*(a[i] - b[i])), max); - } - return max; -} - -class ex1 : public gctl::geoblas_lcg_solver -{ -public: - ex1(); - virtual ~ex1(); - - // 计算共轭梯度的B项 - void cal_partb(const geoblas_vec_t dx, geoblas_vec_t dB); - - //定义共轭梯度中Ax的算法 - virtual void LCG_Ax(const geoblas_vec_t x, geoblas_vec_t ax); - -private: - geoblas_mat_t d_kernel; // 普通二维数组做核矩阵 - geoblas_vec_t d_tmp; // 中间结果数组 - - gctl::matrix h_kernel; -}; - -ex1::ex1() -{ - h_kernel.resize(M, N); - random_float(h_kernel, -1.0, 1.0, gctl::RdUniform); - - d_kernel = geoblas_mat_new(M, N); - d_tmp = geoblas_vec_new(M); - - geoblas_put_mat_data(d_kernel, h_kernel.get()); -} - -ex1::~ex1() -{ - geoblas_mat_free(d_kernel); - geoblas_vec_free(d_tmp); -} - -void ex1::cal_partb(const geoblas_vec_t dx, geoblas_vec_t dB) -{ - LCG_Ax(dx, dB); - return; -} - -void ex1::LCG_Ax(const geoblas_vec_t x, geoblas_vec_t ax) -{ - geoblas_gemv('N', M, N, 1.0, d_kernel, x, 0.0, d_tmp); - geoblas_gemv('T', M, N, 1.0, d_kernel, d_tmp, 0.0, ax); - return; -} - -int main(int argc, char const *argv[]) -{ - ex1 test; - - gctl::array m(N, 0.0); - gctl::array fm(N); - random_float(fm, 1.0, 2.0, gctl::RdUniform); - - geoblas_vec_t dfm = geoblas_vec_new(N); - geoblas_vec_t dm = geoblas_vec_new(N); - geoblas_vec_t dB = geoblas_vec_new(N); - geoblas_put_vec_data(dfm, fm.get()); - geoblas_put_vec_data(dm, m.get()); - - test.cal_partb(dfm, dB); - test.lcg(dm, dB); - - geoblas_get_vec_data(dm, m.get()); - std::cout << "max-diff = " << max_diff(fm , m) << "\n"; - return 0; -} \ No newline at end of file