See individual man pages for implementation information
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
SCSL provides two direct solvers, PPPPSSSSLLLLDDDDLLLLTTTT and PPPPSSSSLLLLDDDDUUUU, and one iterative
solver, DDDDIIIItttteeeerrrraaaattttiiiivvvveeee, for sparse linear systems of equations. These
solvers are optimized and parallelized for the SGI platforms. For direct
solvers for dense linear systems of equations, see the IIIINNNNTTTTRRRROOOO____LLLLAAAAPPPPAAAACCCCKKKK(3S)
man page.
The following data types are used in these routines:
* Double precision: Fortran "double precision" data type, C/C++
"double" data type, 64-bit floating point; these routine names begin
with DDDD.
* Double precision complex: Fortran "double complex" data type, C/C++
"scsl_zomplex" data type (defined in <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>>), C++ STL
"complex<double>" data type (defined in <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>>), two 64-bit
floating point doubles; these routine names begin with ZZZZ.
By default, the integer arguments are 4 bytes (32 bits) in size; this is
the size obtained when one links to the SCSL library with ----llllssssccccssss or
----llllssssccccssss____mmmmpppp. Another version of SCSL is available, however, in which
integers are 8 bytes (64 bits). This version allows the user access to
larger memory sizes and helps when porting legacy Cray codes. It can be
loaded by using either the ----llllssssccccssss____iiii8888 or ----llllssssccccssss____iiii8888____mmmmpppp link option. Note
that any program may use only one of the two versions; 4-byte integer and
8-byte integer library calls cannot be mixed.
C/C++ function prototypes for sparse solver routines are provided in
<<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>>, when using the default 4-byte integers, and
<<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee____iiii8888....hhhh>>>>, when using 8-byte integers. These header files define
the complex types ssssccccssssllll____ccccoooommmmpppplllleeeexxxx and ssssccccssssllll____zzzzoooommmmpppplllleeeexxxx, which are used in the
prototypes. Alternatively, C++ programs may declare arguments using the
types ccccoooommmmpppplllleeeexxxx<<<<ffffllllooooaaaatttt>>>> and ccccoooommmmpppplllleeeexxxx<<<<ddddoooouuuubbbblllleeee>>>> from the standard template
library. But if these types are used, <<<<ccccoooommmmpppplllleeeexxxx....hhhh>>>> must be included before
<<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>> (or <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee____iiii8888....hhhh>>>>). Note, though, that both complex
types are equivalent: they simply represent (real, imaginary) pairs of
floating point numbers stored contiguously in memory. With the proper
casts, you can simply pass arrays of floating point data to the routines
where complex arguments are expected.
Casts, however, can be avoided. The header files <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>> and
<<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee____iiii8888....hhhh>>>> directly support the use of user-defined complex types
or disabling prototype checking for complex arguments completely. By
defining the symbol SSSSCCCCSSSSLLLL____VVVVOOOOIIIIDDDD____AAAARRRRGGGGSSSS before including <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>> or
<<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee____iiii8888....hhhh>>>> all complex arguments will be prototyped as vvvvooooiiiidddd ****.
To define the symbol SSSSCCCCSSSSLLLL____VVVVOOOOIIIIDDDD____AAAARRRRGGGGSSSS at compile time use the ----DDDD compiler
option (i.e., ----DDDDSSSSCCCCSSSSLLLL____VVVVOOOOIIIIDDDD____AAAARRRRGGGGSSSS) or use an explicit ####ddddeeeeffffiiiinnnneeee SSSSCCCCSSSSLLLL____VVVVOOOOIIIIDDDD____AAAARRRRGGGGSSSS
in the source code. This allows the use of any complex data structure
without warnings from the compiler, provided the structure is as
described above; that is:
1. The real and imaginary components must be contiguous in memory.
2. Sequential array elements must also be contiguous in memory.
While this allows the use of non-standard complex types without
generating compiler warnings, it has the disadvantage that the compiler
will not catch type mismatches.
Strong type checking can be enabled employing user-defined complex types
instead of SCSL's standard complex types. To do this, define
SSSSCCCCSSSSLLLL____UUUUSSSSEEEERRRR____CCCCOOOOMMMMPPPPLLLLEEEEXXXX____TTTT====_m_y__c_o_m_p_l_e_x and SSSSCCCCSSSSLLLL____UUUUSSSSEEEERRRR____ZZZZOOOOMMMMPPPPLLLLEEEEXXXX____TTTT====_m_y__z_o_m_p_l_e_x, where
_m_y__c_o_m_p_l_e_x and _m_y__z_o_m_p_l_e_x are the names of user-defined complex types.
These complex types must be defined before including the <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>>