diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h index 2b07e383166a5225222edc6a949328507524a7b5..d0e9051cc3f5ce461583ce896a2de9ed42e67d8e 100644 --- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h +++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h @@ -53,7 +53,7 @@ private: DoubleFortranMatrix m_A, m_ev; DoubleFortranVector m_ew, m_v, m_v_trans, m_d_trans; NLLS::all_eig_symm_work m_all_eig_symm_ws; - NLLS::apply_scaling_work m_apply_scaling_ws; + DoubleFortranVector m_scale; }; } // namespace FuncMinimisers diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h index 0b101a8c9d47bc797b67b885851947cd4f43ebab..769f567284ac9f065b242360a6a5711f60ee6e12 100644 --- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h +++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h @@ -59,7 +59,7 @@ private: DoubleFortranMatrix m_A, m_LtL, m_AplusSigma; DoubleFortranVector m_v, m_q, m_y1; NLLS::min_eig_symm_work m_min_eig_symm_ws; - NLLS::apply_scaling_work m_apply_scaling_ws; + DoubleFortranVector m_scale; }; } // namespace FuncMinimisers diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h index 644316ec56f588476453f1f3aea02d51d27faef7..34dedfe6b1553cd3188701e204c4a6bb864071f7 100644 --- a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h +++ b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h @@ -28,7 +28,7 @@ void rankOneUpdate(DoubleFortranMatrix &hf, NLLS_workspace &w); void testConvergence(double normF, double normJF, double normF0, double normJF0, const nlls_options &options, nlls_inform &inform); void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A, - DoubleFortranVector &v, apply_scaling_work &w, + DoubleFortranVector &v, DoubleFortranVector &scale, const nlls_options &options); void allEigSymm(const DoubleFortranMatrix &A, DoubleFortranVector &ew, DoubleFortranMatrix &ev); diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h index eff98a6bf6f23584d1abb85656e538a4dd2f089a..def0253127549562a54721d9d2bfa422f55fdbe8 100644 --- a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h +++ b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h @@ -237,11 +237,6 @@ struct all_eig_symm_work { DoubleFortranVector work; }; -/// workspace for subroutine applyScaling -struct apply_scaling_work { - DoubleFortranVector diag; -}; - /// workspace for subroutine getSvdJ struct get_svd_J_work { DoubleFortranVector Jcopy, S, work; diff --git a/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp index 21e0a49ffbd7b37b7d06a202db011f4fe8367b6e..ddbbfcc393d5466b7bde038f83d0cc3dad0697d5 100644 --- a/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp +++ b/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp @@ -936,7 +936,7 @@ void DTRSMinimizer::solveDtrs(const DoubleFortranMatrix &J, const DoubleFortranV // if scaling needed, do it if (options.scale != 0) { - applyScaling(J, m_A, m_v, m_apply_scaling_ws, options); + applyScaling(J, m_A, m_v, m_scale, options); } // Now that we have the unprocessed matrices, we need to get an @@ -981,7 +981,7 @@ void DTRSMinimizer::solveDtrs(const DoubleFortranMatrix &J, const DoubleFortranV if (options.scale != 0) { for (int ii = 1; ii <= n; ++ii) { // for_do(ii, 1, n) - d(ii) = d(ii) / m_apply_scaling_ws.diag(ii); + d(ii) = d(ii) / m_scale(ii); } } diff --git a/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp index 9106e71a93e80eb7548b6a30f628c8e132aa1f54..11c52f6c6e6d9c8e3b229510b692b9a0bfc10192 100644 --- a/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp +++ b/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp @@ -197,14 +197,14 @@ void MoreSorensenMinimizer::moreSorensen(const DoubleFortranMatrix &J, const Dou // if scaling needed, do it if (options.scale != 0) { - applyScaling(J, m_A, m_v, m_apply_scaling_ws, options); + applyScaling(J, m_A, m_v, m_scale, options); } auto n = J.len2(); auto scaleBack = [n, &d, &options, this]() { if (options.scale != 0) { for (int i = 1; i <= n; ++i) { - d(i) = d(i) / m_apply_scaling_ws.diag(i); + d(i) = d(i) / m_scale(i); } } }; diff --git a/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp b/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp index 93f8cf89a09d038a6bf02308ab482633b61b17a3..6ee2084394e1397e4aa6141fe25944b23915d5a2 100644 --- a/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp +++ b/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp @@ -289,12 +289,12 @@ void testConvergence(double normF, double normJF, double normF0, double normJF0, /// @param options :: The options. /// @param inform :: The information. void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A, - DoubleFortranVector &v, apply_scaling_work &w, + DoubleFortranVector &v, DoubleFortranVector &scale, const nlls_options &options) { auto m = J.len1(); auto n = J.len2(); - if (w.diag.len() != n) { - w.diag.allocate(n); + if (scale.len() != n) { + scale.allocate(n); } switch (options.scale) { @@ -330,9 +330,9 @@ void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A, } temp = sqrt(temp); if (options.scale_require_increase) { - w.diag(ii) = std::max(temp, w.diag(ii)); + scale(ii) = std::max(temp, scale(ii)); } else { - w.diag(ii) = temp; + scale(ii) = temp; } } break; @@ -344,7 +344,7 @@ void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A, // Now we have the w.diagonal scaling matrix, actually scale the // Hessian approximation and J^Tf for (int ii = 1; ii <= n; ++ii) { // for_do(ii, 1,n) - double temp = w.diag(ii); + double temp = scale(ii); v(ii) = v(ii) / temp; for (int jj = 1; jj <= n; ++jj) { // for_do(jj,1,n) A(ii, jj) = A(ii, jj) / temp;