1 #ifndef SELDON_FILE_FUNCTIONS_BASE_INLINE_CXX
29 template<
class T,
class Allocator>
30 inline void Mlt(
const T& alpha, Array3D<T, Allocator>& A)
35 template<
class T,
class Allocator>
36 inline void Mlt(
const T& alpha, Array3D<complex<T>, Allocator>& A)
45 #ifdef SELDON_WITH_REDUCED_TEMPLATE
46 template<
class T,
class Storage,
class Allocator>
47 inline void Mlt(
const T& alpha, Vector<T, Storage, Allocator>& A)
52 template<
class T,
class T0,
class Storage,
class Allocator>
53 inline void Mlt(
const T& alpha, Vector<T0, Storage, Allocator>& A)
59 template<
class T,
class Storage,
class Allocator>
60 inline void Mlt(
const T& alpha, Vector<complex<T>, Storage, Allocator>& A)
65 template<
class T,
class Storage1,
class Allocator1,
66 class Storage2,
class Allocator2>
67 inline void Add(
const T& alpha,
const Vector<T, Storage1, Allocator1>& X,
68 Vector<T, Storage2, Allocator2>& Y)
73 template<
class T,
class Storage1,
class Allocator1,
74 class Storage2,
class Allocator2>
75 inline void Add(
const T& alpha,
const Vector<complex<T>, Storage1, Allocator1>& X,
76 Vector<complex<T>, Storage2, Allocator2>& Y)
81 template<
class T,
class Storage1,
class Allocator1,
82 class Storage2,
class Allocator2>
83 inline void Add(
const T& alpha,
const Vector<T, Storage1, Allocator1>& X,
84 const T& beta, Vector<T, Storage2, Allocator2>& Y)
89 template<
class T,
class Storage1,
class Allocator1,
90 class Storage2,
class Allocator2>
91 inline void Copy(
const Vector<T, Storage1, Allocator1>& X,
92 Vector<T, Storage2, Allocator2>& Y)
97 template<
class T,
class Storage1,
class Allocator1,
98 class Storage2,
class Allocator2>
99 inline T DotProd(
const Vector<T, Storage1, Allocator1>& X,
100 const Vector<T, Storage2, Allocator2>& Y)
105 template<
class T,
class Storage1,
class Allocator1,
106 class Storage2,
class Allocator2>
107 inline T DotProdConj(
const Vector<T, Storage1, Allocator1>& X,
108 const Vector<T, Storage2, Allocator2>& Y)
113 template<
class T,
class Storage1,
class Allocator1,
114 class Storage2,
class Allocator2>
115 inline complex<T> DotProdConj(
const Vector<complex<T>, Storage1, Allocator1>& X,
116 const Vector<complex<T>, Storage2, Allocator2>& Y)
121 template<
class T,
class Storage1,
class Allocator1,
122 class Storage2,
class Allocator2>
123 inline complex<T> DotProdConj(
const Vector<complex<T>, Storage1, Allocator1>& X,
124 const Vector<T, Storage2, Allocator2>& Y)
129 template<
class T,
class Storage1,
class Allocator1,
130 class Storage2,
class Allocator2>
131 inline complex<T> DotProdConj(
const Vector<T, Storage1, Allocator1>& X,
132 const Vector<complex<T>, Storage2, Allocator2>& Y)
138 template<
class T,
class E>
139 inline typename ClassComplexType<T>::Treal
142 typename ClassComplexType<T>::Treal value(0);
144 for (
long i = 0; i < X.
GetSize(); i++)
151 template<
class T,
class E>
152 typename ClassComplexType<T>::Treal
155 typename ClassComplexType<T>::Treal value(0);
157 for (
long i = 0; i < X.
GetSize(); i++)
168 #ifdef SELDON_WITH_REDUCED_TEMPLATE
169 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
170 class Storage1,
class Allocator1,
171 class Storage2,
class Allocator2>
172 inline void Mlt(
const Matrix<T, Prop0, Storage0, Allocator0>& M,
173 const Vector<T, Storage1, Allocator1>& X,
174 Vector<T, Storage2, Allocator2>& Y)
179 template <
class T0,
class Prop0,
class Storage0,
class Allocator0,
180 class T1,
class Storage1,
class Allocator1,
181 class T2,
class Storage2,
class Allocator2>
182 inline void Mlt(
const Matrix<T0, Prop0, Storage0, Allocator0>& M,
183 const Vector<T1, Storage1, Allocator1>& X,
184 Vector<T2, Storage2, Allocator2>& Y)
190 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
191 class Storage1,
class Allocator1,
192 class Storage2,
class Allocator2>
193 inline void Mlt(
const Matrix<complex<T>, Prop0, Storage0, Allocator0>& M,
194 const Vector<T, Storage1, Allocator1>& X,
195 Vector<T, Storage2, Allocator2>& Y)
197 throw WrongArgument(
"Mlt",
"Incompatible matrix-vector product");
200 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
201 class Storage1,
class Allocator1,
202 class Storage2,
class Allocator2>
203 inline void Mlt(
const Matrix<T, Prop0, Storage0, Allocator0>& M,
204 const Vector<complex<T>, Storage1, Allocator1>& X,
205 Vector<complex<T>, Storage2, Allocator2>& Y)
211 template<
class T,
class Prop1,
class Storage1,
class Allocator1,
212 class Storage2,
class Allocator2,
213 class Storage3,
class Allocator3>
214 void Mlt(
const SeldonTranspose& Trans,
215 const Matrix<T, Prop1, Storage1, Allocator1>& M,
216 const Vector<T, Storage2, Allocator2>& X,
217 Vector<T, Storage3, Allocator3>& Y)
219 MltVector(Trans, M, X, Y);
223 template<
class T,
class Prop1,
class Storage1,
class Allocator1,
224 class Storage2,
class Allocator2,
225 class Storage3,
class Allocator3>
226 inline void Mlt(
const SeldonTranspose& Trans,
227 const Matrix<T, Prop1, Storage1, Allocator1>& M,
228 const Vector<complex<T>, Storage2, Allocator2>& X,
229 Vector<complex<T>, Storage3, Allocator3>& Y)
231 MltVector(Trans, M, X, Y);
234 template<
class T,
class Prop1,
class Storage1,
class Allocator1,
235 class Storage2,
class Allocator2,
236 class Storage3,
class Allocator3>
237 inline void Mlt(
const SeldonTranspose& Trans,
238 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& M,
239 const Vector<T, Storage2, Allocator2>& X,
240 Vector<T, Storage3, Allocator3>& Y)
242 throw WrongArgument(
"Mlt",
"Incompatible matrix-vector product");
245 #ifdef SELDON_WITH_REDUCED_TEMPLATE
246 template <
class T,
class Prop1,
class Storage1,
class Allocator1,
247 class Storage2,
class Allocator2,
248 class Storage3,
class Allocator3>
249 inline void Mlt(
const T& alpha,
250 const Matrix<T, Prop1, Storage1, Allocator1>& M,
251 const Vector<T, Storage2, Allocator2>& X,
252 Vector<T, Storage3, Allocator3>& Y)
259 class T1,
class Prop1,
class Storage1,
class Allocator1,
260 class T2,
class Storage2,
class Allocator2,
261 class T3,
class Storage3,
class Allocator3>
262 inline void Mlt(
const T0& alpha,
263 const Matrix<T1, Prop1, Storage1, Allocator1>& M,
264 const Vector<T2, Storage2, Allocator2>& X,
265 Vector<T3, Storage3, Allocator3>& Y)
272 template <
class T,
class Prop1,
class Storage1,
class Allocator1,
273 class Storage2,
class Allocator2,
274 class Storage3,
class Allocator3>
275 inline void Mlt(
const complex<T>& alpha,
276 const Matrix<T, Prop1, Storage1, Allocator1>& M,
277 const Vector<complex<T>, Storage2, Allocator2>& X,
278 Vector<complex<T>, Storage3, Allocator3>& Y)
284 template <
class T,
class Prop1,
class Storage1,
class Allocator1,
285 class Storage2,
class Allocator2,
286 class Storage3,
class Allocator3>
287 inline void Mlt(
const T& alpha,
288 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& M,
289 const Vector<T, Storage2, Allocator2>& X,
290 Vector<T, Storage3, Allocator3>& Y)
292 throw WrongArgument(
"Mlt",
"Incompatible matrix-vector product");
295 #ifdef SELDON_WITH_REDUCED_TEMPLATE
297 class Prop1,
class Storage1,
class Allocator1,
298 class Storage2,
class Allocator2,
299 class Storage4,
class Allocator4>
300 inline void MltAdd(
const T& alpha,
301 const Matrix<T, Prop1, Storage1, Allocator1>& M,
302 const Vector<T, Storage2, Allocator2>& X,
304 Vector<T, Storage4, Allocator4>& Y)
306 MltAddVector(alpha, M, X, beta, Y);
310 class T1,
class Prop1,
class Storage1,
class Allocator1,
311 class T2,
class Storage2,
class Allocator2,
313 class T4,
class Storage4,
class Allocator4>
314 inline void MltAdd(
const T& alpha,
315 const Matrix<T1, Prop1, Storage1, Allocator1>& M,
316 const Vector<T2, Storage2, Allocator2>& X,
318 Vector<T4, Storage4, Allocator4>& Y)
320 MltAddVector(alpha, M, X, beta, Y);
325 class Prop1,
class Storage1,
class Allocator1,
326 class Storage2,
class Allocator2,
327 class Storage4,
class Allocator4>
328 inline void MltAdd(
const T& alpha,
329 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& M,
330 const Vector<complex<T>, Storage2, Allocator2>& X,
332 Vector<complex<T>, Storage4, Allocator4>& Y)
334 MltAddVector(alpha, M, X, beta, Y);
338 class Prop1,
class Storage1,
class Allocator1,
339 class Storage2,
class Allocator2,
340 class Storage4,
class Allocator4>
341 inline void MltAdd(
const T& alpha,
342 const Matrix<T, Prop1, Storage1, Allocator1>& M,
343 const Vector<complex<T>, Storage2, Allocator2>& X,
345 Vector<complex<T>, Storage4, Allocator4>& Y)
347 MltAddVector(alpha, M, X, beta, Y);
351 class Prop1,
class Storage1,
class Allocator1,
352 class Storage2,
class Allocator2,
353 class Storage4,
class Allocator4>
354 inline void MltAdd(
const T& alpha,
355 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& M,
356 const Vector<T, Storage2, Allocator2>& X,
358 Vector<T, Storage4, Allocator4>& Y)
360 throw WrongArgument(
"MltAdd",
"Incompatible matrix-vector product");
364 class Prop1,
class Storage1,
class Allocator1,
365 class Storage2,
class Allocator2,
366 class Storage4,
class Allocator4>
367 inline void MltAdd(
const complex<T>& alpha,
368 const Matrix<T, Prop1, Storage1, Allocator1>& M,
369 const Vector<complex<T>, Storage2, Allocator2>& X,
370 const complex<T>& beta,
371 Vector<complex<T>, Storage4, Allocator4>& Y)
373 MltAddVector(alpha, M, X, beta, Y);
378 class Prop1,
class Storage1,
class Allocator1,
379 class Storage2,
class Allocator2,
380 class Storage4,
class Allocator4>
381 inline void MltAdd(
const T& alpha,
const SeldonTranspose& Trans,
382 const Matrix<T, Prop1, Storage1, Allocator1>& M,
383 const Vector<T, Storage2, Allocator2>& X,
385 Vector<T, Storage4, Allocator4>& Y)
387 MltAddVector(alpha, Trans, M, X, beta, Y);
392 class Prop1,
class Storage1,
class Allocator1,
393 class Storage2,
class Allocator2,
394 class Storage4,
class Allocator4>
395 inline void MltAdd(
const T& alpha,
const SeldonTranspose& Trans,
396 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& M,
397 const Vector<complex<T>, Storage2, Allocator2>& X,
399 Vector<complex<T>, Storage4, Allocator4>& Y)
401 MltAddVector(alpha, Trans, M, X, beta, Y);
405 class Prop1,
class Storage1,
class Allocator1,
406 class Storage2,
class Allocator2,
407 class Storage4,
class Allocator4>
408 inline void MltAdd(
const T& alpha,
const SeldonTranspose& Trans,
409 const Matrix<T, Prop1, Storage1, Allocator1>& M,
410 const Vector<complex<T>, Storage2, Allocator2>& X,
412 Vector<complex<T>, Storage4, Allocator4>& Y)
414 MltAddVector(alpha, Trans, M, X, beta, Y);
418 class Prop1,
class Storage1,
class Allocator1,
419 class Storage2,
class Allocator2,
420 class Storage4,
class Allocator4>
421 inline void MltAdd(
const T& alpha,
const SeldonTranspose& Trans,
422 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& M,
423 const Vector<T, Storage2, Allocator2>& X,
425 Vector<T, Storage4, Allocator4>& Y)
427 throw WrongArgument(
"MltAdd",
"Incompatible matrix-vector product");
431 class Prop1,
class Storage1,
class Allocator1,
432 class Storage2,
class Allocator2,
433 class Storage4,
class Allocator4>
434 inline void MltAdd(
const complex<T>& alpha,
const SeldonTranspose& Trans,
435 const Matrix<T, Prop1, Storage1, Allocator1>& M,
436 const Vector<complex<T>, Storage2, Allocator2>& X,
437 const complex<T>& beta,
438 Vector<complex<T>, Storage4, Allocator4>& Y)
441 MltAddVector(alpha, Trans, M, X, beta, Y);
444 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
445 class Storage1,
class Allocator1,
446 class Storage2,
class Allocator2>
447 inline void SOR(
const Matrix<T, Prop0, Storage0, Allocator0>& M,
448 Vector<T, Storage2, Allocator2>& Y,
449 const Vector<T, Storage1, Allocator1>& X,
450 const typename ClassComplexType<T>::Treal& omega,
451 int iter,
int type_ssor)
453 SorVector(M, Y, X, omega, iter, type_ssor);
457 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
458 class Storage1,
class Allocator1,
459 class Storage2,
class Allocator2>
460 inline void SOR(
const SeldonTranspose& trans,
461 const Matrix<T, Prop0, Storage0, Allocator0>& M,
462 Vector<T, Storage2, Allocator2>& Y,
463 const Vector<T, Storage1, Allocator1>& X,
464 const typename ClassComplexType<T>::Treal& omega,
int iter,
int type_ssor)
466 SorVector(trans, M, Y, X, omega, iter, type_ssor);
470 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
471 class Storage1,
class Allocator1,
472 class Storage2,
class Allocator2>
473 inline void SOR(
const Matrix<T, Prop0, Storage0, Allocator0>& M,
474 Vector<complex<T>, Storage2, Allocator2>& Y,
475 const Vector<complex<T>, Storage1, Allocator1>& X,
476 const typename ClassComplexType<T>::Treal& omega,
477 int iter,
int type_ssor)
479 SorVector(M, Y, X, omega, iter, type_ssor);
483 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
484 class Storage1,
class Allocator1,
485 class Storage2,
class Allocator2>
486 inline void SOR(
const SeldonTranspose& trans,
487 const Matrix<T, Prop0, Storage0, Allocator0>& M,
488 Vector<complex<T>, Storage2, Allocator2>& Y,
489 const Vector<complex<T>, Storage1, Allocator1>& X,
490 const typename ClassComplexType<T>::Treal& omega,
int iter,
int type_ssor)
492 SorVector(trans, M, Y, X, omega, iter, type_ssor);
496 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
497 class Storage1,
class Allocator1,
498 class Storage2,
class Allocator2>
499 inline void SOR(
const Matrix<complex<T>, Prop0, Storage0, Allocator0>& M,
500 Vector<T, Storage2, Allocator2>& Y,
501 const Vector<T, Storage1, Allocator1>& X,
502 const typename ClassComplexType<T>::Treal& omega,
503 int iter,
int type_ssor)
505 throw WrongArgument(
"SOR",
"incompatible types");
509 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
510 class Storage1,
class Allocator1,
511 class Storage2,
class Allocator2>
512 inline void SOR(
const SeldonTranspose&,
513 const Matrix<complex<T>, Prop0, Storage0, Allocator0>& M,
514 Vector<T, Storage2, Allocator2>& Y,
515 const Vector<T, Storage1, Allocator1>& X,
516 const typename ClassComplexType<T>::Treal& omega,
int iter,
int type_ssor)
518 throw WrongArgument(
"SOR",
"incompatible types");
522 template <
class T,
class Prop0,
class Allocator0,
525 inline Solve(
const SeldonUplo& Uplo,
526 const SeldonTranspose& TransA,
527 const SeldonDiag& DiagA,
528 const Matrix<T, Prop0, RowSparse, Allocator0>& A,
529 const Vector<T, VectFull, Allocator1>& X,
530 Vector<T, VectFull, Allocator1>& Y)
536 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
537 class Storage1,
class Allocator1>
538 inline void SolveLU(
const Matrix<T, Prop0, Storage0, Allocator0>& M,
539 Vector<T, Storage1, Allocator1>& Y)
544 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
545 class Storage1,
class Allocator1>
546 inline void SolveLU(
const Matrix<complex<T>, Prop0, Storage0, Allocator0>& M,
547 Vector<T, Storage1, Allocator1>& Y)
549 throw WrongArgument(
"SolveLU",
"incompatible types");
552 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
553 class Storage1,
class Allocator1>
554 inline void SolveLU(
const Matrix<T, Prop0, Storage0, Allocator0>& M,
555 Vector<complex<T>, Storage1, Allocator1>& Y)
560 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
561 class Storage1,
class Allocator1>
562 inline void SolveLU(
const SeldonTranspose& transA,
563 const Matrix<T, Prop0, Storage0, Allocator0>& M,
564 Vector<T, Storage1, Allocator1>& Y)
569 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
570 class Storage1,
class Allocator1>
571 inline void SolveLU(
const SeldonTranspose& transA,
572 const Matrix<complex<T>, Prop0, Storage0, Allocator0>& M,
573 Vector<T, Storage1, Allocator1>& Y)
575 throw WrongArgument(
"SolveLU",
"incompatible types");
578 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
579 class Storage1,
class Allocator1>
580 inline void SolveLU(
const SeldonTranspose& transA,
581 const Matrix<T, Prop0, Storage0, Allocator0>& M,
582 Vector<complex<T>, Storage1, Allocator1>& Y)
589 template<
class T0,
class Prop0,
class Storage0,
class Allocator0>
590 inline void SolveLU(
const Matrix<T0, Prop0, Storage0, Allocator0>& A,
591 const Vector<int>& pivot, Vector<T0>& x)
596 template<
class T0,
class Prop0,
class Storage0,
class Allocator0>
597 inline void SolveLU(
const Matrix<complex<T0>, Prop0, Storage0, Allocator0>& A,
598 const Vector<int>& pivot, Vector<T0>& x)
600 throw WrongArgument(
"SolveLU",
"incompatible types");
603 template<
class T0,
class Storage0,
class Allocator0>
604 inline void SolveLU(
const SeldonTranspose& trans,
605 const Matrix<T0, General, Storage0, Allocator0>& A,
606 const Vector<int>& pivot, Vector<T0>& x)
611 template<
class T0,
class Storage0,
class Allocator0>
612 inline void SolveLU(
const SeldonTranspose& trans,
613 const Matrix<complex<T0>, General, Storage0, Allocator0>& A,
614 const Vector<int>& pivot, Vector<T0>& x)
616 throw WrongArgument(
"SolveLU",
"incompatible types");
620 template<
class T0,
class Storage0,
class Allocator0>
621 inline void SolveLU(
const SeldonTranspose& trans,
622 const Matrix<T0, Symmetric, Storage0, Allocator0>& A,
623 const Vector<int>& pivot, Vector<T0>& x)
628 template<
class T0,
class Storage0,
class Allocator0>
629 inline void SolveLU(
const SeldonTranspose& trans,
630 const Matrix<complex<T0>, Symmetric, Storage0, Allocator0>& A,
631 const Vector<int>& pivot, Vector<T0>& x)
633 throw WrongArgument(
"SolveLU",
"incompatible types");
640 template<
class T,
class Prop,
class Storage,
class Allocator>
641 inline void Mlt(
const T& alpha, Matrix<T, Prop, Storage, Allocator>& A)
646 template<
class T,
class Prop,
class Storage,
class Allocator>
647 inline void Mlt(
const T& alpha, Matrix<complex<T>, Prop, Storage, Allocator>& A)
653 class Prop1,
class Storage1,
class Allocator1,
654 class Prop2,
class Storage2,
class Allocator2,
655 class Prop3,
class Storage3,
class Allocator3>
656 inline void Mlt(
const T& alpha,
657 const Matrix<T, Prop1, Storage1, Allocator1>& A,
658 const Matrix<T, Prop2, Storage2, Allocator2>& B,
659 Matrix<T, Prop3, Storage3, Allocator3>& C)
662 SetComplexZero(zero);
667 template <
class T,
class Prop0,
class Storage0,
class Allocator0,
668 class Prop1,
class Storage1,
class Allocator1,
669 class Prop2,
class Storage2,
class Allocator2>
670 inline void Mlt(
const Matrix<T, Prop0, Storage0, Allocator0>& A,
671 const Matrix<T, Prop1, Storage1, Allocator1>& B,
672 Matrix<T, Prop2, Storage2, Allocator2>& C)
675 SetComplexZero(zero);
682 class Prop1,
class Storage1,
class Allocator1,
683 class Prop2,
class Storage2,
class Allocator2,
684 class Prop3,
class Storage3,
class Allocator3>
685 inline void MltAdd(
const T& alpha,
686 const Matrix<T, Prop1, Storage1, Allocator1>& A,
687 const Matrix<T, Prop2, Storage2, Allocator2>& B,
689 Matrix<T, Prop3, Storage3, Allocator3>& C)
695 class Prop1,
class Storage1,
class Allocator1,
696 class Prop2,
class Storage2,
class Allocator2,
697 class Prop3,
class Storage3,
class Allocator3>
698 inline void MltAdd(
const T& alpha,
const SeldonTranspose& transA,
699 const Matrix<T, Prop1, Storage1, Allocator1>& A,
700 const SeldonTranspose& transB,
701 const Matrix<T, Prop2, Storage2, Allocator2>& B,
703 Matrix<T, Prop3, Storage3, Allocator3>& C)
710 class Prop1,
class Storage1,
class Allocator1,
711 class Prop2,
class Storage2,
class Allocator2>
712 inline void Add(
const T& alpha,
713 const Matrix<T, Prop1, Storage1, Allocator1>& A,
714 Matrix<T, Prop2, Storage2, Allocator2>& B)
720 class Prop1,
class Storage1,
class Allocator1,
721 class Prop2,
class Storage2,
class Allocator2>
722 inline void Add(
const complex<T>& alpha,
723 const Matrix<T, Prop1, Storage1, Allocator1>& A,
724 Matrix<complex<T>, Prop2, Storage2, Allocator2>& B)
731 class Prop1,
class Storage1,
class Allocator1,
732 class Prop2,
class Storage2,
class Allocator2>
733 inline void Add(
const T& alpha,
734 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& A,
735 Matrix<complex<T>, Prop2, Storage2, Allocator2>& B)
741 class Prop1,
class Storage1,
class Allocator1,
742 class Prop2,
class Storage2,
class Allocator2>
743 inline void Add(
const T& alpha,
744 const Matrix<complex<T>, Prop1, Storage1, Allocator1>& A,
745 Matrix<T, Prop2, Storage2, Allocator2>& B)
747 throw WrongArgument(
"Add",
"incompatible types");
751 template<
class T,
class Prop1,
class Storage1,
class Allocator1,
752 class Prop2,
class Storage2,
class Allocator2>
753 inline void Copy(
const Matrix<T, Prop1, Storage1, Allocator1>& A,
754 Matrix<T, Prop2, Storage2, Allocator2>& B)
759 template<
class T,
class Prop1,
class Storage1,
class Allocator1,
760 class Prop2,
class Storage2,
class Allocator2>
761 inline void Copy(
const Matrix<complex<T>, Prop1, Storage1, Allocator1>& A,
762 Matrix<T, Prop2, Storage2, Allocator2>& B)
764 throw WrongArgument(
"Copy",
"incompatible types");
767 template<
class T,
class Prop1,
class Storage1,
class Allocator1,
768 class Prop2,
class Storage2,
class Allocator2>
769 inline void Copy(
const Matrix<T, Prop1, Storage1, Allocator1>& A,
770 Matrix<complex<T>, Prop2, Storage2, Allocator2>& B)
777 template<
class T,
class Prop,
class Storage,
class Allocator>
785 template<
class T,
class Storage,
class Allocator>
793 template<
class T,
class Prop,
class Storage,
class Allocator>
801 template<
class T,
class Prop,
class Storage,
class Allocator>
809 #define SELDON_FILE_FUNCTIONS_BASE_INLINE_CXX