/* nag_sparse_sym_chol_fac (f11jac) Example Program. * * Copyright 1998 Numerical Algorithms Group. * * Mark 5, 1998. * */ #include #include #include #include #include int main(void) { double dtol; double *a; double dscale; Integer *irow, *icol; Integer *ipiv, nnzc, *istr; Integer i, n, lfill, npivm; Integer nnz; Integer num; Nag_SparseSym_Piv pstrat; Nag_SparseSym_Fact mic; Nag_Sparse_Comm comm; char char_enum[20]; Vprintf("f11jac Example Program Results\n\n"); /* Skip heading in data file */ Vscanf("%*[^\n]"); /* Read algorithmic parameters */ Vscanf("%ld",&n); Vscanf("%*[^\n]"); Vscanf("%ld%*[^\n]",&nnz); Vscanf("%ld%lf%*[^\n]", &lfill, &dtol); Vscanf("%s%lf%*[^\n]",char_enum, &dscale); if (!strcmp(char_enum, "ModFact")) mic = Nag_SparseSym_ModFact; else if (!strcmp(char_enum, "UnModFact")) mic = Nag_SparseSym_UnModFact; else { Vprintf("Unrecognised string for mic enum representation.\n"); return EXIT_FAILURE; } Vscanf("%s%*[^\n]",char_enum); if (!strcmp(char_enum, "NoPiv")) pstrat = Nag_SparseSym_NoPiv; else if (!strcmp(char_enum, "MarkPiv")) pstrat = Nag_SparseSym_MarkPiv; else if (!strcmp(char_enum, "UserPiv")) pstrat = Nag_SparseSym_UserPiv; else { Vprintf("Unrecognised string for pstrat enum representation.\n"); return EXIT_FAILURE; } num = 2 * nnz; ipiv = NAG_ALLOC(n,Integer); istr = NAG_ALLOC(n+1,Integer); irow = NAG_ALLOC(num,Integer); icol = NAG_ALLOC(num,Integer); a = NAG_ALLOC(num,double); if (!ipiv || !istr || !irow || !icol || !a) { Vprintf("Allocation failure\n"); return EXIT_FAILURE; } /* Read the matrix a */ for (i = 1; i <= nnz; ++i) Vscanf("%lf%ld%ld%*[^\n]",&a[i-1], &irow[i-1], &icol[i-1] ); /* Calculate incomplete Cholesky factorization */ f11jac(n, nnz, &a, &num, &irow, &icol, lfill, dtol, mic, dscale, pstrat, ipiv, istr, &nnzc, &npivm, &comm, NAGERR_DEFAULT); /* Output original matrix */ Vprintf(" Original Matrix \n"); Vprintf(" n = %6ld\n",n); Vprintf(" nnz = %6ld\n\n",nnz); for (i = 1; i <= nnz; ++i) Vprintf(" %8ld%16.4e%8ld%8ld\n",i,a[i-1],irow[i-1],icol[i-1]); Vprintf("\n"); /* Output details of the factorization */ Vprintf(" Factorization\n n = %6ld \n nnz = %6ld\n",n,nnzc); Vprintf(" npivm = %6ld\n\n",npivm); for (i = nnz + 1; i <= nnz + nnzc; ++i) Vprintf(" %8ld%16.4e%8ld%8ld\n",i,a[i-1],irow[i-1],icol[i-1]); Vprintf("\n i ipiv(i) \n"); for (i = 1; i <= n; ++i) Vprintf(" %8ld%8ld\n",i,ipiv[i-1]); NAG_FREE(irow); NAG_FREE(icol); NAG_FREE(a); NAG_FREE(istr); NAG_FREE(ipiv); return EXIT_SUCCESS; }