Squashed 'third_party/blasfeo/' content from commit 2a828ca
Change-Id: If1c3caa4799b2d4eb287ef83fa17043587ef07a3
git-subtree-dir: third_party/blasfeo
git-subtree-split: 2a828ca5442108c4c58e4b42b061a0469043f6ea
diff --git a/doc/guide.tex b/doc/guide.tex
new file mode 100644
index 0000000..626eaa4
--- /dev/null
+++ b/doc/guide.tex
@@ -0,0 +1,149 @@
+\documentclass[a4paper]{report}
+
+\usepackage[margin=3.0cm]{geometry}
+\usepackage{amsmath}
+\usepackage[pdftex]{graphicx}
+%\usepackage{graphics}
+\usepackage{subfig}
+
+
+
+\title{BLASFEO reference guide}
+\author{Gianluca Frison}
+
+
+
+\begin{document}
+
+\maketitle
+\tableofcontents
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Introduction}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+BLASFEO - BLAS For Embedded Optimization.
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Matrix data type}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The fundamental data type in BLASFEO is a C struct defining a matrix, called {\tt strmat}.
+Depending on the chosen linear algebra library, the struct is defined differently.
+
+
+
+\section{{\tt strmat} definition}
+
+
+\subsection{BLASFEO}
+
+\begin{verbatim}
+struct d_strmat
+ {
+ int bs;
+ int m;
+ int n;
+ int pm;
+ int cn;
+ double *pA;
+ double *dA;
+ int use_dA;
+ int memory_size;
+ };
+\end{verbatim}
+where the struct members are
+\begin{description}
+\item[bs] height of the panel
+\item[m] number of rows
+\item[n] number of columns
+\item[pm] number of rows of the matrix as allocated in memory, used for memory alignment
+\item[cn] number of rows of the matrix as allocated in memory, used for memory alignment
+\item[pA] pointer to a pm$\times$pn array of doubles, the first element is aligned to cache line size
+\item[dA] pointer to a min(m,n) array of doubles, used e.g. to store the inverse of the diagonal of the matrix
+\item[use\_dA] flag to tell if dA contains useful information
+\item[memory\_size] size of the memory (in bytes) needed for pA and pD
+\end{description}
+
+
+\subsection{BLAS}
+
+\begin{verbatim}
+struct d_strmat
+ {
+ int m; // rows
+ int n; // cols
+ double *pA; // pointer to a m*n array of doubles
+ int memory_size; // size of needed memory
+ };
+\end{verbatim}
+\begin{description}
+\item[m] number of rows
+\item[n] number of columns
+\item[pA] pointer to a m$\times$n array of doubles
+\item[memory\_size] size of the memory (in bytes) needed for pA
+\end{description}
+
+
+
+\section{{\tt strmat} management}
+
+\begin{verbatim}
+void d_allocate_strmat(int m, int n, struct d_strmat *sA);
+\end{verbatim}
+
+\begin{verbatim}
+void d_free_strmat(struct d_strmat *sA);
+\end{verbatim}
+
+\begin{verbatim}
+int d_size_strmat(int m, int n);
+\end{verbatim}
+
+\begin{verbatim}
+void d_create_strmat(int m, int n, struct d_strmat *sA, void *memory);
+\end{verbatim}
+
+
+
+\section{{\tt strmat} conversion}
+
+\begin{verbatim}
+void d_cvt_mat2strmat(int m, int n, double *A, int lda, struct d_strmat *sA,
+ int ai, int aj);
+\end{verbatim}
+
+\begin{verbatim}
+void d_cvt_tran_mat2strmat(int m, int n, double *A, int lda, struct d_strmat *sA,
+ int ai, int aj);
+\end{verbatim}
+
+\begin{verbatim}
+void d_cvt_strmat2mat(int m, int n, struct d_strmat *sA, int ai, int aj,
+ double *A, int lda);
+\end{verbatim}
+
+\begin{verbatim}
+void d_cvt_tran_strmat2mat(int m, int n, struct d_strmat *sA, int ai, int aj,
+ double *A, int lda);
+\end{verbatim}
+
+
+
+\section{{\tt strmat} print}
+
+\begin{verbatim}
+void d_print_strmat(int m, int n, struct d_strmat *sA, int ai, int aj);
+\end{verbatim}
+
+
+
+\end{document}