120CPPLapack is a C++ class wrapper for BLAS, LAPACK and PARDISO.
121</p>
122
123<p>
124The interfaces of Fortran BLAS, LAPACK, CBLAS, and CLAPACK are not user-friendly, and induce a lot of coding mistakes not only for LAPACK beginners but also experienced programmers.
125Because of its difficult interface, BLAS functions are not widely used for simple matrix calculations such as "+", "-", "*", and so on even though these calculations are frequently required.
126If there is a user-friendly library using BLAS and LAPACK in the background, it is really useful to minimize the program development time and computational time at the same time.
127Existing matrix libraries, however, are not sufficient as far as we know.
128</p>
129
130<p>
131CPPLapack has a very user-friendly interface
132as same as ordinary C++ matrix libraries.
133Moreover, CPPLapack uses BLAS and LAPACK functions in the background though programmers just need to write simple codes such as <code>"A=B*C;"</code>, <code>"A.dgesv(y);"</code>, and so on.
134</p>
135
136<p>
137The advantage of using CPPLapack are not only user-friendly interface and fast computational speed but also saving memory space.
138In case of large-size matrix calculation, the number of copy times of objects affects required memory space and computational time materially.
139CPPLapack has a mechanism called "Smart-Temporary" system to minimize the number of copy times.
140The "Smart-Temporary" system is also hidden in CPPLapack library so that programmers don't need to pay any attention for this system.
141(CPPLapack used to employed "to_return" system.
142Now CPPLapack uses this system to realize the same purpose with keeping the compatibility with old versions.)
143</p>
144
145<p>
146This program is designed for large matrix calculation.
147If you don't have mind to handle large matrices,
148to use another matrix library is recommended.
149</p>
150
151<p>
152CPPLapack is still a beta program so far.
153It is a shame but there are a few bugs and unsupported BLAS and LAPACK functions.
154If you are going to use CPPLapack, please be aware this situation.
155Of course, it is very nice if you help us to develop CPPLapack.
227You should not and don't need to use underscored matrix classes.
228These classes are not for project codes.
229The underscored classes are called "Smart-Temporary" classes.
230The detail of "Smart-Temporary" system is explained in \ref pg-nt.
231</li>
232<li>
233The numbering system of the matrix component is NOT 1-based but 0-based.
234In case of m x n matrix,
235the element number at the upper left is (0,0), and the element number at the lower right is (m-1,n-1).
236See \ref pg-bandmatrix for information of a band matrix.
237</li>
238<li>
239The matrix arrays are stored in column-major style.
240although most of C programmers like to use row-major style.
241This is because of the conventional Fortran LAPACK style.
242</li>
243<li>
244The matrix and vector member objects m, n, l, and array are the const reference objects so that they can be used to obtain the data but cannot be overwritten.
245</li>
246<li>
247LAPACK member functions implemented in CPPLapack, such as A.dgesv(y), overwrite the matrix A.
248When you need to keep the original matrix A, you have to make a copy of the matrix A before using LAPACK member functions.
249</li>
250<li>
251For easy debugging, "CPPL_VERBOSE" and "CPPL_DEBUG" macros are prepared.
252When "-DCPPL_VERBOSE" is specified in compilation commands, every called function outputs its function name to stderr.
253When "-DCPPL_DEBUG" is specified in compilation commands, matrix bounds checking are enabled.
254We recommend you to enable these macros during the program testing, then recompile codes without these macros for CPPLapack's best performance.
255</li>
256<li>
257It is important NOT to leave out the returned object.
258The calculated and returned object must be substituted to an object.
305(Q)When I print components of a matrix or vector, I sometimes see "nan" printed. What is the possible reason?
306<br>
307(A)First of all, please make sure that your objects are initialized.
308The constructor with size arguments such as
309<code>"CPPL::dgematrix A(5,10);"</code>
310does NOT initialize its array components.
311The "resize" function does NOT initialize, neither.
312Please initialize objects using substitutions, or use "identity" or "zero" function to initialize them.
313</p>
314
315<p>
316(Q)All the member variables are in "public".
317Why don't you set "private" for capsulation?
318<br>
319(A)Matrix programings are frequently required to be custom-made.
320Choosing "public" or "private" was a tough choice, and we chose "public" so that users could make custom-made functions without modifying CPPLapack itself.