1399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// Ceres Solver - A fast non-linear least squares minimizer 2399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// Copyright 2013 Google Inc. All rights reserved. 3399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// http://code.google.com/p/ceres-solver/ 4399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// 5399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// Redistribution and use in source and binary forms, with or without 6399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// modification, are permitted provided that the following conditions are met: 7399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// 8399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// * Redistributions of source code must retain the above copyright notice, 9399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// this list of conditions and the following disclaimer. 10399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// * Redistributions in binary form must reproduce the above copyright notice, 11399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// this list of conditions and the following disclaimer in the documentation 12399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// and/or other materials provided with the distribution. 13399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// * Neither the name of Google Inc. nor the names of its contributors may be 14399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// used to endorse or promote products derived from this software without 15399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// specific prior written permission. 16399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// 17399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// POSSIBILITY OF SUCH DAMAGE. 28399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// 29399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger// Author: sameeragarwal@google.com (Sameer Agarwal) 30399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 31399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger#include "ceres/blas.h" 3279397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez#include "ceres/internal/port.h" 33399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger#include "glog/logging.h" 34399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 35399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettingerextern "C" void dsyrk_(char* uplo, 36399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger char* trans, 37399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int* n, 38399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int* k, 39399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double* alpha, 40399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double* a, 41399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int* lda, 42399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double* beta, 43399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double* c, 44399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int* ldc); 45399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 46399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettingernamespace ceres { 47399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettingernamespace internal { 48399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 49399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettingervoid BLAS::SymmetricRankKUpdate(int num_rows, 50399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int num_cols, 51399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger const double* a, 52399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger bool transpose, 53399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double alpha, 54399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double beta, 55399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger double* c) { 56399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger#ifdef CERES_NO_LAPACK 57399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger LOG(FATAL) << "Ceres was built without a BLAS library."; 58399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger#else 59399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger char uplo = 'L'; 60399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger char trans = transpose ? 'T' : 'N'; 61399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int n = transpose ? num_cols : num_rows; 62399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int k = transpose ? num_rows : num_cols; 63399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int lda = k; 64399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger int ldc = n; 65399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger dsyrk_(&uplo, 66399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &trans, 67399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &n, 68399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &k, 69399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &alpha, 70399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger const_cast<double*>(a), 71399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &lda, 72399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &beta, 73399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger c, 74399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger &ldc); 75399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger#endif 76399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger} 77399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger 78399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger} // namespace internal 79399f7d09e0c45af54b77b4ab9508d6f23759b927Scott Ettinger} // namespace ceres 80