19 int mndspr(
const char*, 
unsigned int, 
double, 
const double*, 
int, 
double*);
 
   21 LASymMatrix::LASymMatrix(
const ABObj<sym, VectorOuterProduct<ABObj<vec, LAVector, double>, 
double>, 
double>& out) : fSize(0), fNRow(0), fData(0) {
 
   24    fNRow = out.Obj().Obj().Obj().size();
 
   25    fSize = fNRow*(fNRow+1)/2;
 
   26    fData = (
double*)StackAllocatorHolder::Get().Allocate(
sizeof(
double)*fSize);
 
   27    memset(fData, 0, fSize*
sizeof(
double));
 
   28    Outer_prod(*
this, out.Obj().Obj().Obj(), out.f()*out.Obj().Obj().f()*out.Obj().Obj().f());
 
   31 LASymMatrix& LASymMatrix::operator=(
const ABObj<sym, VectorOuterProduct<ABObj<vec, LAVector, double>, 
double>, 
double>& out) {
 
   34    if(fSize == 0 && fData == 0) {
 
   35       fNRow = out.Obj().Obj().Obj().size();
 
   36       fSize = fNRow*(fNRow+1)/2;
 
   37       fData = (
double*)StackAllocatorHolder::Get().Allocate(
sizeof(
double)*fSize);
 
   38       memset(fData, 0, fSize*
sizeof(
double));
 
   39       Outer_prod(*
this, out.Obj().Obj().Obj(), out.f()*out.Obj().Obj().f()*out.Obj().Obj().f());
 
   41       LASymMatrix tmp(out.Obj().Obj().Obj().size());
 
   42       Outer_prod(tmp, out.Obj().Obj().Obj());
 
   43       tmp *= double(out.f()*out.Obj().Obj().f()*out.Obj().Obj().f());
 
   44       assert(fSize == tmp.size());
 
   45       memcpy(fData, tmp.Data(), fSize*
sizeof(double));
 
   50 void Outer_prod(LASymMatrix& A, 
const LAVector& v, 
double f) {
 
   52    mndspr(
"U", v.size(), f, v.Data(), 1, A.Data());