@@ -49,7 +49,55 @@ macros = ["STDLIB_EXTERNAL_BLAS", "STDLIB_EXTERNAL_LAPACK"]
49
49
50
50
or directly via compiler flags:
51
51
52
- ` fpm build --flag "-DSTDLIB_EXTERNAL_BLAS -DSTDLIB_EXTERNAL_LAPACK -framework Accelerate" ` .
52
+ ` fpm build --flag "-DSTDLIB_EXTERNAL_BLAS -DSTDLIB_EXTERNAL_LAPACK -lblas -llapack" ` .
53
+
54
+ ### Syntax
55
+
56
+ All procedures in the ` BLAS ` and ` LAPACK ` backends follow the standard interfaces from the
57
+ [ Reference LAPACK] ( https://www.netlib.org/lapack/ ) . So, the online [ Users Guide] ( https://www.netlib.org/lapack/explore-html/ )
58
+ should be consulted for the full API and descriptions of procedure arguments and their usage.
59
+
60
+ The ` stdlib ` implementation makes both kind-agnostic and specific procedure interfaces available via modules
61
+ [ stdlib_linalg_blas(module)] and [ stdlib_linalg_lapack(module)] . Because all procedures start with a letter
62
+ [ that indicates the base datatype] ( https://www.netlib.org/lapack/lug/node24.html ) , the ` stdlib ` generic
63
+ interface drops the heading letter and contains all kind-dependent implementations. For example, the generic
64
+ interface to the ` axpy ` function looks like:
65
+
66
+ ``` fortran
67
+ !> AXPY: constant times a vector plus a vector.
68
+ interface axpy
69
+ module procedure stdlib_saxpy
70
+ module procedure stdlib_daxpy
71
+ module procedure stdlib_qaxpy
72
+ module procedure stdlib_caxpy
73
+ module procedure stdlib_zaxpy
74
+ module procedure stdlib_waxpy
75
+ end interface axpy
76
+ ```
77
+
78
+ The generic interface is the endpoint for using an external library. Whenever the latter is used, references
79
+ to the internal ` module procedure ` s are replaced with interfaces to the external library,
80
+ for example:
81
+
82
+ ``` fortran
83
+ !> AXPY: constant times a vector plus a vector.
84
+ interface axpy
85
+ pure subroutine caxpy(n,ca,cx,incx,cy,incy)
86
+ import sp,dp,qp,ilp,lk
87
+ implicit none(type,external)
88
+ complex(sp), intent(in) :: ca,cx(*)
89
+ integer(ilp), intent(in) :: incx,incy,n
90
+ complex(sp), intent(inout) :: cy(*)
91
+ end subroutine caxpy
92
+ ! [....]
93
+ module procedure stdlib_qaxpy
94
+ end interface axpy
95
+ ```
96
+
97
+ Note that the 128-bit functions are only provided by ` stdlib ` and always point to the internal implementation.
98
+ Because 128-bit precision is identified as [ stdlib_kinds(module): qp ] , initials for 128-bit procedures were
99
+ labelled as ` q ` (quadruple-precision reals) and ` w ` ("wide" or quadruple-precision complex numbers).
100
+ Extended precision ([ stdlib_kinds(module): xdp ] ) calculations are currently not supported.
53
101
54
102
### Example
55
103
0 commit comments