1 /************************************************************************************************** 2 * * 3 * This file is part of BLASFEO. * 4 * * 5 * BLASFEO -- BLAS For Embedded Optimization. * 6 * Copyright (C) 2019 by Gianluca Frison. * 7 * Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. * 8 * All rights reserved. * 9 * * 10 * The 2-Clause BSD License * 11 * * 12 * Redistribution and use in source and binary forms, with or without * 13 * modification, are permitted provided that the following conditions are met: * 14 * * 15 * 1. Redistributions of source code must retain the above copyright notice, this * 16 * list of conditions and the following disclaimer. * 17 * 2. Redistributions in binary form must reproduce the above copyright notice, * 18 * this list of conditions and the following disclaimer in the documentation * 19 * and/or other materials provided with the distribution. * 20 * * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * 22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * 24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * 25 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * 28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 31 * * 32 * Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de * 33 * * 34 **************************************************************************************************/ 35 36 #ifndef BLASFEO_S_AUX_H_ 37 #define BLASFEO_S_AUX_H_ 38 39 40 41 #include "blasfeo_s_aux_old.h" 42 #include "blasfeo_common.h" 43 44 45 46 #ifdef __cplusplus 47 extern "C" { 48 #endif 49 50 51 /************************************************ 52 * d_aux_lib.c 53 ************************************************/ 54 55 // returns the memory size (in bytes) needed for a smat 56 int blasfeo_memsize_smat(int m, int n); 57 int blasfeo_memsize_smat_ps(int ps, int m, int n); 58 // returns the memory size (in bytes) needed for the diagonal of a smat 59 int blasfeo_memsize_diag_smat(int m, int n); 60 // returns the memory size (in bytes) needed for a svec 61 int blasfeo_memsize_svec(int m); 62 // create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated) 63 void blasfeo_create_smat(int m, int n, struct blasfeo_smat *sA, void *memory); 64 void blasfeo_create_smat_ps(int ps, int m, int n, struct blasfeo_smat *sA, void *memory); 65 // create a strvec for a vector of size m by using memory passed by a pointer (pointer is not updated) 66 void blasfeo_create_svec(int m, struct blasfeo_svec *sA, void *memory); 67 void blasfeo_pack_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj); 68 void blasfeo_pack_svec(int m, float *a, struct blasfeo_svec *sa, int ai); 69 void blasfeo_pack_tran_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj); 70 void blasfeo_unpack_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda); 71 void blasfeo_unpack_svec(int m, struct blasfeo_svec *sa, int ai, float *a); 72 void blasfeo_unpack_tran_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda); 73 void s_cast_mat2strmat(float *A, struct blasfeo_smat *sA); 74 void s_cast_diag_mat2strmat(float *dA, struct blasfeo_smat *sA); 75 void s_cast_vec2vecmat(float *a, struct blasfeo_svec *sa); 76 77 // ge 78 void blasfeo_sgese(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj); 79 void blasfeo_sgecpsc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 80 void blasfeo_sgecp(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 81 void blasfeo_sgesc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj); 82 void blasfeo_sgein1(float a, struct blasfeo_smat *sA, int ai, int aj); 83 float blasfeo_sgeex1(struct blasfeo_smat *sA, int ai, int aj); 84 void blasfeo_sgead(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 85 void blasfeo_sgetr(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 86 // tr 87 void blasfeo_strcp_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 88 void blasfeo_strtr_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 89 void blasfeo_strtr_u(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 90 // dia 91 void blasfeo_sdiare(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj); 92 void blasfeo_sdiaex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi); 93 void blasfeo_sdiain(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj); 94 void blasfeo_sdiain_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj); 95 void blasfeo_sdiaex_sp(int kmax, float alpha, int *idx, struct blasfeo_smat *sD, int di, int dj, struct blasfeo_svec *sx, int xi); 96 void blasfeo_sdiaad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj); 97 void blasfeo_sdiaad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj); 98 void blasfeo_sdiaadin_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, int *idx, struct blasfeo_smat *sD, int di, int dj); 99 // row 100 void blasfeo_srowin(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj); 101 void blasfeo_srowex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi); 102 void blasfeo_srowad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj); 103 void blasfeo_srowad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj); 104 void blasfeo_srowsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 105 void blasfeo_srowpe(int kmax, int *ipiv, struct blasfeo_smat *sA); 106 void blasfeo_srowpei(int kmax, int *ipiv, struct blasfeo_smat *sA); 107 // col 108 void blasfeo_scolex(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi); 109 void blasfeo_scolin(int kmax, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj); 110 void blasfeo_scolad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj); 111 void blasfeo_scolsc(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj); 112 void blasfeo_scolsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj); 113 void blasfeo_scolpe(int kmax, int *ipiv, struct blasfeo_smat *sA); 114 void blasfeo_scolpei(int kmax, int *ipiv, struct blasfeo_smat *sA); 115 // vec 116 void blasfeo_svecse(int m, float alpha, struct blasfeo_svec *sx, int xi); 117 void blasfeo_sveccp(int m, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci); 118 void blasfeo_svecsc(int m, float alpha, struct blasfeo_svec *sa, int ai); 119 void blasfeo_sveccpsc(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci); 120 void blasfeo_svecad(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci); 121 void blasfeo_svecin1(float a, struct blasfeo_svec *sx, int xi); 122 float blasfeo_svecex1(struct blasfeo_svec *sx, int xi); 123 void blasfeo_svecad_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi); 124 void blasfeo_svecin_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi); 125 void blasfeo_svecex_sp(int m, float alpha, int *idx, struct blasfeo_svec *sx, int x, struct blasfeo_svec *sz, int zi); 126 void blasfeo_sveccl(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi); 127 void blasfeo_sveccl_mask(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi, struct blasfeo_svec *sm, int mi); 128 void blasfeo_svecze(int m, struct blasfeo_svec *sm, int mi, struct blasfeo_svec *sv, int vi, struct blasfeo_svec *se, int ei); 129 void blasfeo_svecnrm_inf(int m, struct blasfeo_svec *sx, int xi, float *ptr_norm); 130 void blasfeo_svecpe(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi); 131 void blasfeo_svecpei(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi); 132 133 134 135 #ifdef __cplusplus 136 } 137 #endif 138 139 #endif // BLASFEO_S_AUX_H_ 140