32#include "Teuchos_Assert.hpp"
34template <
typename OrdinalType,
typename FadType>
37 OrdinalType workspace_size_) :
38 use_dynamic(use_dynamic_),
39 workspace_size(workspace_size_),
41 workspace_pointer(NULL)
43 if (workspace_size > 0) {
44 workspace =
new ValueType[workspace_size];
45 workspace_pointer = workspace;
49template <
typename OrdinalType,
typename FadType>
52 use_dynamic(
a.use_dynamic),
53 workspace_size(
a.workspace_size),
55 workspace_pointer(NULL)
57 if (workspace_size > 0) {
58 workspace =
new ValueType*[workspace_size];
59 workspace_pointer = workspace;
64template <
typename OrdinalType,
typename FadType>
82template <
typename OrdinalType,
typename FadType>
89template <
typename OrdinalType,
typename FadType>
96template <
typename OrdinalType,
typename FadType>
103template <
typename OrdinalType,
typename FadType>
112 TEUCHOS_TEST_FOR_EXCEPTION(workspace_pointer + size - workspace > workspace_size,
114 "ArrayTraits::allocate_array(): " <<
115 "Requested workspace memory beyond size allocated. " <<
116 "Workspace size is " << workspace_size <<
117 ", currently used is " << workspace_pointer-workspace <<
118 ", requested size is " << size <<
".");
123 workspace_pointer += size;
127template <
typename OrdinalType,
typename FadType>
132 if (use_dynamic && ptr != NULL)
135 workspace_pointer -= size;
138template <
typename OrdinalType,
typename FadType>
144 (&(
a[n-1].val())-&(
a[0].
val()) == n-1) &&
145 (
a[n-1].dx()-
a[0].
dx() == n-1);
148template <
typename OrdinalType,
typename FadType>
152 OrdinalType static_workspace_size_) :
159template <
typename OrdinalType,
typename FadType>
168template <
typename OrdinalType,
typename FadType>
174template <
typename OrdinalType,
typename FadType>
177GESV(
const OrdinalType n,
const OrdinalType nrhs,
FadType*
A,
const OrdinalType lda,
178 OrdinalType* IPIV,
FadType*
B,
const OrdinalType ldb, OrdinalType* info)
const {
181 LAPACKType::GESV(n,nrhs,
A,lda,IPIV,
B,ldb,info);
198template <
typename OrdinalType,
typename FadType>
Sacado::Fad::DFad< double > FadType
void free_array(const ValueType *ptr, OrdinalType size) const
OrdinalType workspace_size
Sacado::ValueType< FadType >::type ValueType
ValueType * allocate_array(OrdinalType size) const
bool is_array_contiguous(const FadType *a, OrdinalType n, OrdinalType n_dot) const
ArrayTraits(bool use_dynamic=true, OrdinalType workspace_size=0)
void GESV(const OrdinalType n, const OrdinalType nrhs, FadType *A, const OrdinalType lda, OrdinalType *IPIV, FadType *B, const OrdinalType ldb, OrdinalType *info) const
Computes the solution to a real system of linear equations.
Fad_LAPACK(bool use_default_impl=true, bool use_dynamic=true, OrdinalType static_workspace_size=0)
Default constructor.
void Fad_GESV() const
Implementation of GESV.
Teuchos::LAPACK< OrdinalType, ValueType > lapack
LAPACK for values.
bool use_default_impl
Use custom or default implementation.
ArrayTraits< OrdinalType, FadType > arrayTraits
ArrayTraits for packing/unpacking value/derivative arrays.
virtual ~Fad_LAPACK()
Destructor.
Sacado::ValueType< Sacado::Fad::DFad< ScalarType > >::type ValueType
Base template specification for ValueType.