19#include "fasp_functs.h"
30#include "BlaIOUtil.inl"
69 FILE* fp = fopen(filename,
"r");
73 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
78 if (fscanf(fp,
"%d %d", &m, &n) > 0) {
86 for (i = 0; i <= m; ++i) {
87 if (fscanf(fp,
"%d", &idata) > 0)
94 INT nnz = A->IA[m] - A->IA[0];
100 for (i = 0; i < nnz; ++i) {
101 if (fscanf(fp,
"%d", &idata) > 0)
108 for (i = 0; i < nnz; ++i) {
109 if (fscanf(fp,
"%lf", &ddata) > 0)
117 if (fscanf(fp,
"%d", &m) > 0) b->row = m;
121 for (i = 0; i < m; ++i) {
122 if (fscanf(fp,
"%lf", &ddata) > 0)
170 FILE* fp = fopen(filemat,
"r");
174 printf(
"%s: reading file %s ...\n", __FUNCTION__, filemat);
178 if (fscanf(fp,
"%d\n", &n) > 0) {
186 for (i = 0; i <= n; ++i) {
187 if (fscanf(fp,
"%d\n", &tempi) > 0)
188 A->
IA[i] = tempi - 1;
199 for (i = 0; i < nz; ++i) {
200 if (fscanf(fp,
"%d\n", &tempi) > 0)
201 A->
JA[i] = tempi - 1;
207 for (i = 0; i < nz; ++i) {
208 if (fscanf(fp,
"%le\n", &(A->val[i])) <= 0) {
219 fp = fopen(filerhs,
"r");
223 printf(
"%s: reading file %s ...\n", __FUNCTION__, filerhs);
228 printf(
"### WARNING: rhs size = %d, matrix size = %d!\n", n, b->row);
232 for (i = 0; i < n; ++i) {
233 if (fscanf(fp,
"%le\n", &(b->val[i])) <= 0) {
258 FILE* fp = fopen(filename,
"r");
262 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
267 if (fscanf(fp,
"%d", &m) > 0)
274 for (i = 0; i <= m; ++i) {
275 if (fscanf(fp,
"%d", &idata) > 0)
284 for (i = 0; i <= m; ++i) A->IA[i]--;
286 INT nnz = A->IA[m] - A->IA[0];
292 for (i = 0; i < nnz; ++i) {
293 if (fscanf(fp,
"%d", &idata) > 0)
302 for (i = 0; i < nnz; ++i) A->JA[i]--;
304 for (i = 0; i < nnz; ++i) {
305 if (fscanf(fp,
"%lf", &ddata) > 0)
334 int i, j, k, m, n, nnz;
337 FILE* fp = fopen(filename,
"r");
341 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
345 if (fscanf(fp,
"%d %d %d", &m, &n, &nnz) <= 0) {
351 for (k = 0; k < nnz; k++) {
352 if (fscanf(fp,
"%d %d %le", &i, &j, &value) != EOF) {
386 int i, j, k, m, n, nnz;
389 FILE* fp = fopen(filename,
"r");
393 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
397 if (fscanf(fp,
"%d %d %d", &m, &n, &nnz) <= 0) {
403 for (k = 0; k < nnz; k++) {
404 if (fscanf(fp,
"%d %d %le", &i, &j, &value) != EOF) {
440 size_t n, type, nnz, i;
443 fp = fopen(fnb,
"rb");
447 printf(
"%s: reading file %s ...\n", __FUNCTION__, fnb);
448 fread(&n,
sizeof(
size_t), 1, fp);
451 fread(b->
val,
sizeof(
double), n, fp);
454 fp = fopen(fni,
"rb");
458 printf(
"%s: reading file %s ...\n", __FUNCTION__, fni);
459 fread(&type,
sizeof(
size_t), 1, fp);
460 fread(&nnz,
sizeof(
size_t), 1, fp);
463 fread(Atmp.
rowind,
sizeof(
int), nnz, fp);
464 for (i = 0; i < nnz; i++) Atmp.
rowind[i] = Atmp.
rowind[i] - 1;
467 fp = fopen(fnj,
"rb");
471 printf(
"%s: reading file %s ...\n", __FUNCTION__, fnj);
472 fread(&type,
sizeof(
size_t), 1, fp);
473 fread(&nnz,
sizeof(
size_t), 1, fp);
475 fread(Atmp.
colind,
sizeof(
int), nnz, fp);
476 for (i = 0; i < nnz; i++) Atmp.
colind[i] = Atmp.
colind[i] - 1;
479 fp = fopen(fna,
"rb");
483 printf(
"%s: reading file %s ...\n", __FUNCTION__, fna);
484 fread(&type,
sizeof(
size_t), 1, fp);
485 fread(&nnz,
sizeof(
size_t), 1, fp);
487 fread(Atmp.
val,
sizeof(
double), nnz, fp);
516 int i, j, k, m, n, nnz;
519 FILE* fp = fopen(filename,
"r");
523 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
527 if (fscanf(fp,
"%d %d %d", &m, &n, &nnz) <= 0) {
533 for (k = 0; k < nnz; k++) {
534 if (fscanf(fp,
"%d %d %le", &i, &j, &value) != EOF) {
573 FILE* fp = fopen(filename,
"r");
577 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
581 if (fscanf(fp,
"%d %d %d", &m, &n, &nnz) <= 0) {
590 if (fscanf(fp,
"%d %d %le", &i, &j, &value) != EOF) {
591 Atmp.
rowind[innz] = i - 1;
592 Atmp.
colind[innz] = j - 1;
593 Atmp.
val[innz] = value;
630 FILE* fp = fopen(filename,
"r");
634 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
638 if (fscanf(fp,
"%d %d %d", &m, &n, &nnz) <= 0) {
642 nnz = 2 * (nnz - m) + m;
648 if (fscanf(fp,
"%d %d %le", &i, &j, &value) != EOF) {
651 Atmp.
rowind[innz] = i - 1;
652 Atmp.
colind[innz] = j - 1;
653 Atmp.
val[innz] = value;
656 Atmp.
rowind[innz] = i - 1;
657 Atmp.
rowind[innz + 1] = j - 1;
658 Atmp.
colind[innz] = j - 1;
659 Atmp.
colind[innz + 1] = i - 1;
660 Atmp.
val[innz] = value;
661 Atmp.
val[innz + 1] = value;
701 int nx, ny, nz, nxy, ngrid, nband, nc, offset;
705 FILE* fp = fopen(filename,
"r");
709 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
714 if (fscanf(fp,
"%d %d %d", &nx, &ny, &nz) > 0) {
728 if (fscanf(fp,
"%d", &nc) > 0)
735 if (fscanf(fp,
"%d", &nband) > 0)
744 if (fscanf(fp,
"%d", &n) > 0) {
750 for (i = 0; i < n; ++i) {
751 if (fscanf(fp,
"%le", &value) > 0)
763 if (fscanf(fp,
"%d %d", &offset, &n) > 0) {
764 A->
offsets[nband - k - 1] = offset;
770 for (i = 0; i < n; ++i) {
771 if (fscanf(fp,
"%le", &value) > 0) {
772 A->
offdiag[nband - k - 1][i] = value;
809 int ROW, COL, NNZ, nb, storage_manner;
815 FILE* fp = fopen(filename,
"r");
819 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
823 status = fscanf(fp,
"%d %d %d", &ROW, &COL, &NNZ);
829 status = fscanf(fp,
"%d", &nb);
833 status = fscanf(fp,
"%d", &storage_manner);
841 status = fscanf(fp,
"%d", &n);
843 for (i = 0; i < n; ++i) {
844 status = fscanf(fp,
"%d", &index);
850 status = fscanf(fp,
"%d", &n);
852 for (i = 0; i < n; ++i) {
853 status = fscanf(fp,
"%d", &index);
859 status = fscanf(fp,
"%d", &n);
861 for (i = 0; i < n; ++i) {
862 status = fscanf(fp,
"%le", &value);
893 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
895 FILE* fp = fopen(filename,
"r");
901 status = fscanf(fp,
"%d", &n);
904 for (i = 0; i < n; ++i) {
906 status = fscanf(fp,
"%d %le", &index, &value);
908 if (value >
BIGREAL || index >= n) {
912 printf(
"### ERROR: Wrong index = %d or value = %lf\n", index, value);
916 b->
val[index] = value;
944 FILE* fp = fopen(filename,
"r");
948 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
952 status = fscanf(fp,
"%d", &n);
956 for (i = 0; i < n; ++i) {
958 status = fscanf(fp,
"%le", &value);
965 printf(
"### ERROR: Wrong value = %lf!\n", value);
991 int i, n, index, value;
994 FILE* fp = fopen(filename,
"r");
998 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
1002 status = fscanf(fp,
"%d", &n);
1005 for (i = 0; i < n; ++i) {
1006 status = fscanf(fp,
"%d %d", &index, &value);
1007 b->
val[index] = value;
1034 FILE* fp = fopen(filename,
"r");
1038 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
1042 status = fscanf(fp,
"%d", &n);
1045 for (i = 0; i < n; ++i) {
1046 status = fscanf(fp,
"%d", &value);
1084 FILE* fp = fopen(filename,
"w");
1089 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
1091 fprintf(fp,
"%d %d\n", m, n);
1092 for (i = 0; i < m + 1; ++i) {
1093 fprintf(fp,
"%d\n", A->
IA[i]);
1095 for (i = 0; i < nnz; ++i) {
1096 fprintf(fp,
"%d\n", A->
JA[i]);
1098 for (i = 0; i < nnz; ++i) {
1099 fprintf(fp,
"%le\n", A->
val[i]);
1105 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1107 fprintf(fp,
"%d\n", m);
1109 for (i = 0; i < m; ++i) fprintf(fp,
"%le\n", b->
val[i]);
1151 FILE* fp = fopen(filemat,
"w");
1156 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filemat);
1158 fprintf(fp,
"%d\n", m);
1159 for (i = 0; i < m + 1; ++i) {
1160 fprintf(fp,
"%d\n", A->
IA[i] + 1);
1162 for (i = 0; i < nnz; ++i) {
1163 fprintf(fp,
"%d\n", A->
JA[i] + 1);
1165 for (i = 0; i < nnz; ++i) {
1166 fprintf(fp,
"%le\n", A->
val[i]);
1173 fp = fopen(filerhs,
"w");
1178 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filerhs);
1180 fprintf(fp,
"%d\n", m);
1182 for (i = 0; i < m; ++i) fprintf(fp,
"%le\n", b->
val[i]);
1212 FILE* fp = fopen(filename,
"w");
1216 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1218 fprintf(fp,
"%d %d %d\n", m, n, A->
nnz);
1219 for (i = 0; i < m; ++i) {
1220 for (j = A->
IA[i]; j < A->IA[i + 1]; j++)
1221 fprintf(fp,
"%d %d %0.15e\n", i, A->
JA[j], A->
val[j]);
1243 const INT nx = A->
nx, ny = A->
ny, nz = A->
nz;
1250 FILE* fp = fopen(filename,
"w");
1254 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1256 fprintf(fp,
"%d %d %d\n", nx, ny, nz);
1258 fprintf(fp,
"%d\n", nc);
1260 fprintf(fp,
"%d\n", nband);
1263 n = ngrid * nc * nc;
1264 fprintf(fp,
"%d\n", n);
1265 for (i = 0; i < n; ++i) fprintf(fp,
"%le\n", A->
diag[i]);
1270 INT offset = offsets[nband - k - 1];
1271 n = (ngrid -
ABS(offset)) * nc * nc;
1272 fprintf(fp,
"%d %d\n", offset, n);
1273 for (i = 0; i < n; ++i) {
1274 fprintf(fp,
"%le\n", A->
offdiag[nband - k - 1][i]);
1295 const INT nb = A->
nb;
1296 const INT nb2 = nb * nb;
1304 FILE* fp = fopen(filename,
"w");
1308 printf(
"%s: printing to file %s ...\n", __FUNCTION__, filename);
1310 for (i = 0; i < ROW; i++) {
1311 for (k = ia[i]; k < ia[i + 1]; k++) {
1313 fprintf(fp,
"A[%d,%d]=\n", i, j);
1314 for (ind = 0; ind < nb2; ind++) {
1315 fprintf(fp,
"%+.15E ", val[k * nb2 + ind]);
1347 FILE* fp = fopen(filename,
"w");
1351 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1353 fprintf(fp,
"%d %d %d\n", ROW, COL, NNZ);
1355 fprintf(fp,
"%d\n", nb);
1357 fprintf(fp,
"%d\n", storage_manner);
1361 fprintf(fp,
"%d\n", n);
1362 for (i = 0; i < n; ++i) fprintf(fp,
"%d\n", ia[i]);
1366 fprintf(fp,
"%d\n", n);
1367 for (i = 0; i < n; ++i) fprintf(fp,
"%d\n", ja[i]);
1371 fprintf(fp,
"%d\n", n);
1372 for (i = 0; i < n; ++i) fprintf(fp,
"%le\n", val[i]);
1392 FILE* fp = fopen(filename,
"w");
1396 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1398 fprintf(fp,
"%d\n", m);
1400 for (i = 0; i < m; ++i) fprintf(fp,
"%0.15e\n", vec->
val[i]);
1424 FILE* fp = fopen(filename,
"w");
1428 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1430 fprintf(fp,
"%d\n", m);
1432 for (i = 0; i < m; ++i) fprintf(fp,
"%d %le\n", i, vec->
val[i]);
1456 FILE* fp = fopen(filename,
"w");
1460 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1463 fprintf(fp,
"%d\n", m);
1466 for (i = 0; i < m; ++i) fprintf(fp,
"%d %d\n", i, vec->
val[i] + 1);
1487 if (n <= 0) NumPrint = u->
row;
1489 for (i = 0; i < NumPrint; ++i) printf(
"vec_%d = %15.10E\n", i, u->
val[i]);
1508 if (n <= 0) NumPrint = u->
row;
1510 for (i = 0; i < NumPrint; ++i) printf(
"vec_%d = %d\n", i, u->
val[i]);
1528 printf(
"nrow = %d, ncol = %d, nnz = %d\n", m, n, A->
nnz);
1529 for (i = 0; i < m; ++i) {
1530 for (j = A->
IA[i]; j < A->IA[i + 1]; j++)
1531 printf(
"A_(%d,%d) = %+.15E\n", i, A->
JA[j], A->
val[j]);
1549 printf(
"nrow = %d, ncol = %d, nnz = %d\n", A->
row, A->
col, A->
nnz);
1550 for (k = 0; k < A->
nnz; k++) {
1551 printf(
"A_(%d,%d) = %+.15E\n", A->
rowind[k], A->
colind[k], A->
val[k]);
1576 FILE* fp = fopen(filename,
"w");
1580#if DEBUG_MODE > PRINT_MIN
1581 printf(
"### DEBUG: nrow = %d, ncol = %d, nnz = %d, nb = %d\n", A->
ROW, A->
COL,
1586 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1589 fprintf(fp,
"%% dimension of the block matrix and nonzeros %d %d %d\n", A->
ROW,
1592 fprintf(fp,
"%% the size of each block %d\n", A->
nb);
1594 fprintf(fp,
"%% storage manner of each block %d\n", A->
storage_manner);
1596 for (i = 0; i < A->
ROW; i++) {
1597 for (j = A->
IA[i]; j < A->IA[i + 1]; j++) {
1598 for (k = 0; k < A->
nb; k++) {
1599 for (l = 0; l < A->
nb; l++) {
1600 fprintf(fp,
"%d %d %+.15E\n", i * nb + k + 1, A->
JA[j] * nb + l + 1,
1601 A->
val[j * nb2 + k * nb + l]);
1628#if DEBUG_MODE > PRINT_MIN
1629 printf(
"nrow = %d, ncol = %d, nnz = %d\n", A->
row, A->
col, A->
nnz);
1632 FILE* fp = fopen(filename,
"w");
1636 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1639 fprintf(fp,
"%% dimension of the matrix and nonzeros %d %d %d\n", A->
row, A->
col,
1642 for (i = 0; i < A->
row; i++) {
1643 for (j = A->
IA[i]; j < A->IA[i + 1]; j++) {
1644 fprintf(fp,
"%d %d %+.15E\n", i + 1, A->
JA[j] + 1, A->
val[j]);
1668#if DEBUG_MODE > PRINT_MIN
1669 printf(
"nrow = %d, ncol = %d, nnz = %d\n", A->
row, A->
col, A->
nnz);
1672 FILE* fp = fopen(filename,
"w");
1676 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1679 fprintf(fp,
"%% MatrixMarket matrix coordinate general\n");
1680 fprintf(fp,
"%d %d %d\n", A->
row, A->
col, A->
nnz);
1682 for (i = 0; i < A->
row; i++) {
1683 for (j = A->
IA[i]; j < A->IA[i + 1]; j++) {
1684 fprintf(fp,
"%d %d %+.15E\n", i + 1, A->
JA[j] + 1, A->
val[j]);
1742 FILE* fp = fopen(filename,
"rb");
1746 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
1748 status = fread(&index,
sizeof(
INT), 1, fp);
1752 if (index == 808464432) {
1755 fp = fopen(filename,
"r");
1757 status = fscanf(fp,
"%d\n", &flag);
1760 status = fscanf(fp,
"%d\n", &flag);
1763 flag = (
INT)flag / 100;
1767 fasp_dcsr_read_s(fp, (
dCSRmat*)A);
1770 fasp_dcoo_read_s(fp, (
dCSRmat*)A);
1773 fasp_dbsr_read_s(fp, (
dBSRmat*)A);
1776 fasp_dstr_read_s(fp, (
dSTRmat*)A);
1779 fasp_dcoo_read_s(fp, (
dCSRmat*)A);
1782 fasp_dmtx_read_s(fp, (
dCSRmat*)A);
1785 fasp_dmtxsym_read_s(fp, (
dCSRmat*)A);
1788 printf(
"### ERROR: Unknown flag %d in %s!\n", flag, filename);
1801 status = fread(&index,
sizeof(
INT), 1, fp);
1804 index = endian_convert_int(index,
sizeof(
INT), EndianFlag);
1805 flag = (
INT)index / 100;
1811 fasp_dcsr_read_b(fp, (
dCSRmat*)A, EndianFlag);
1814 fasp_dbsr_read_b(fp, (
dBSRmat*)A, EndianFlag);
1817 fasp_dstr_read_b(fp, (
dSTRmat*)A, EndianFlag);
1820 fasp_dcoo_read_b(fp, (
dCSRmat*)A, EndianFlag);
1823 fasp_dmtx_read_b(fp, (
dCSRmat*)A, EndianFlag);
1826 fasp_dmtxsym_read_b(fp, (
dCSRmat*)A, EndianFlag);
1829 printf(
"### ERROR: Unknown flag %d in %s!\n", flag, filename);
1852 SHORT EndianFlag = 1;
1855 FILE* fp = fopen(filename,
"rb");
1859 printf(
"%s: reading file %s ...\n", __FUNCTION__, filename);
1861 status = fread(&index,
sizeof(
INT), 1, fp);
1864 index = endian_convert_int(index,
sizeof(
INT), EndianFlag);
1866 flag = (
INT)index / 100;
1867 ilength = (int)(index - flag * 100) / 10;
1872 fasp_dcoo_read_b(fp, (
dCSRmat*)A, EndianFlag);
1875 fasp_dbsr_read_b(fp, (
dBSRmat*)A, EndianFlag);
1878 fasp_dstr_read_b(fp, (
dSTRmat*)A, EndianFlag);
1881 fasp_dcsr_read_b(fp, (
dCSRmat*)A, EndianFlag);
1884 fasp_dmtx_read_b(fp, (
dCSRmat*)A, EndianFlag);
1887 fasp_dmtxsym_read_b(fp, (
dCSRmat*)A, EndianFlag);
1890 printf(
"### ERROR: Unknown flag %d in %s!\n", flag, filename);
1923 INT fileflag, matrixflag;
1926 matrixflag = flag % 100;
1927 fileflag = (
INT)flag / 100;
1932 fp = fopen(filename,
"w");
1936 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1938 fprintf(fp,
"%d%d%d%d\n", fileflag, fileflag, fileflag, fileflag);
1940 fprintf(fp,
"%d%d%d\n", matrixflag, (
int)
sizeof(
INT), (
int)
sizeof(
REAL));
1942 switch (matrixflag) {
1944 fasp_dcsr_write_s(fp, (
dCSRmat*)A);
1947 fasp_dbsr_write_s(fp, (
dBSRmat*)A);
1950 fasp_dstr_write_s(fp, (
dSTRmat*)A);
1953 printf(
"### WARNING: Unknown matrix flag %d\n", matrixflag);
1960 fp = fopen(filename,
"wb");
1964 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filename);
1966 INT putflag = fileflag * 100 +
sizeof(
INT) * 10 +
sizeof(
REAL);
1967 fwrite(&putflag,
sizeof(
INT), 1, fp);
1969 switch (matrixflag) {
1971 fasp_dcsr_write_b(fp, (
dCSRmat*)A);
1974 fasp_dbsr_write_b(fp, (
dBSRmat*)A);
1977 fasp_dstr_write_b(fp, (
dSTRmat*)A);
1980 printf(
"### WARNING: Unknown matrix flag %d\n", matrixflag);
2017 FILE* fp = fopen(filerhs,
"rb");
2021 printf(
"%s: reading file %s ...\n", __FUNCTION__, filerhs);
2023 status = fread(&index,
sizeof(
INT), 1, fp);
2027 if (index == 808464432) {
2030 fp = fopen(filerhs,
"r");
2032 if (!fscanf(fp,
"%d\n", &flag))
2033 printf(
"### ERROR: File format problem in %s!\n", __FUNCTION__);
2036 if (!fscanf(fp,
"%d\n", &flag))
2037 printf(
"### ERROR: File format problem in %s!\n", __FUNCTION__);
2038 flag = (int)flag / 100;
2042 fasp_dvec_read_s(fp, (
dvector*)b);
2045 fasp_ivec_read_s(fp, (
ivector*)b);
2048 fasp_dvecind_read_s(fp, (
dvector*)b);
2051 fasp_ivecind_read_s(fp, (
ivector*)b);
2060 status = fread(&index,
sizeof(
INT), 1, fp);
2063 index = endian_convert_int(index,
sizeof(
INT), EndianFlag);
2064 flag = (int)index / 100;
2065 ilength = (int)(index - 100 * flag) / 10;
2070 fasp_dvec_read_b(fp, (
dvector*)b, EndianFlag);
2073 fasp_ivec_read_b(fp, (
ivector*)b, EndianFlag);
2076 fasp_dvecind_read_b(fp, (
dvector*)b, EndianFlag);
2079 fasp_ivecind_read_b(fp, (
ivector*)b, EndianFlag);
2082 printf(
"### ERROR: Unknown flag %d in %s!\n", flag, filerhs);
2122 INT fileflag, vectorflag;
2125 fileflag = (int)flag / 10;
2126 vectorflag = (int)flag % 10;
2130 fp = fopen(filerhs,
"w");
2134 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filerhs);
2136 fprintf(fp,
"%d%d%d%d\n", fileflag, fileflag, fileflag, fileflag);
2138 fprintf(fp,
"%d%d%d\n", vectorflag, (
int)
sizeof(
INT), (
int)
sizeof(
REAL));
2140 switch (vectorflag) {
2142 fasp_dvec_write_s(fp, (
dvector*)b);
2145 fasp_ivec_write_s(fp, (
ivector*)b);
2148 fasp_dvecind_write_s(fp, (
dvector*)b);
2151 fasp_ivecind_write_s(fp, (
ivector*)b);
2154 printf(
"### WARNING: Unknown vector flag %d\n", vectorflag);
2162 fp = fopen(filerhs,
"wb");
2166 printf(
"%s: writing to file %s ...\n", __FUNCTION__, filerhs);
2168 INT putflag = vectorflag * 100 +
sizeof(
INT) * 10 +
sizeof(
REAL);
2169 fwrite(&putflag,
sizeof(
INT), 1, fp);
2171 switch (vectorflag) {
2173 fasp_dvec_write_b(fp, (
dvector*)b);
2176 fasp_ivec_write_b(fp, (
ivector*)b);
2179 fasp_dvecind_write_b(fp, (
dvector*)b);
2182 fasp_ivecind_write_b(fp, (
ivector*)b);
2185 printf(
"### WARNING: Unknown vector flag %d\n", vectorflag);
2217 double* exact = NULL;
2218 double* guess = NULL;
2221 char* indfmt = NULL;
2225 char* mxtype = NULL;
2233 char* ptrfmt = NULL;
2235 char* rhsfmt = NULL;
2238 char* rhstyp = NULL;
2239 double* rhsval = NULL;
2240 double* rhsvec = NULL;
2245 char* valfmt = NULL;
2246 double* values = NULL;
2249 printf(
"HB_FILE_READ reads all the data in an HB file.\n");
2252 printf(
"Reading the file '%s'\n", input_file);
2254 input = fopen(input_file,
"rt");
2257 printf(
"### ERROR: Fail to open the file [%s]\n", input_file);
2264 hb_file_read(input, &title, &key, &totcrd, &ptrcrd, &indcrd, &valcrd, &rhscrd,
2265 &mxtype, &nrow, &ncol, &nnzero, &neltvl, &ptrfmt, &indfmt, &valfmt,
2266 &rhsfmt, &rhstyp, &nrhs, &nrhsix, &colptr, &rowind, &values, &rhsval,
2267 &rhsptr, &rhsind, &rhsvec, &guess, &exact);
2272#if DEBUG_MODE > PRINT_MIN
2276 hb_header_print(title, key, totcrd, ptrcrd, indcrd, valcrd, rhscrd, mxtype, nrow,
2277 ncol, nnzero, neltvl, ptrfmt, indfmt, valfmt, rhsfmt, rhstyp, nrhs,
2282 hb_structure_print(ncol, mxtype, nnzero, neltvl, colptr, rowind);
2287 hb_values_print(ncol, colptr, mxtype, nnzero, neltvl, values);
2293 if (rhstyp[0] ==
'F') {
2294 r8mat_print_some(nrow, nrhs, rhsval, 1, 1, 5, 5,
" Part of RHS");
2295 }
else if (rhstyp[0] ==
'M' && mxtype[2] ==
'A') {
2296 i4vec_print_part(nrhs + 1, rhsptr, 10,
" Part of RHSPTR");
2297 i4vec_print_part(nrhsix, rhsind, 10,
" Part of RHSIND");
2298 r8vec_print_part(nrhsix, rhsvec, 10,
" Part of RHSVEC");
2299 }
else if (rhstyp[0] ==
'M' && mxtype[2] ==
'E') {
2300 r8mat_print_some(nnzero, nrhs, rhsval, 1, 1, 5, 5,
" Part of RHS");
2305 if (rhstyp[1] ==
'G') {
2306 r8mat_print_some(nrow, nrhs, guess, 1, 1, 5, 5,
" Part of GUESS");
2311 if (rhstyp[2] ==
'X') {
2312 r8mat_print_some(nrow, nrhs, exact, 1, 1, 5, 5,
" Part of EXACT");
2328 printf(
"### ERROR: The matrix is not square! [%s]\n", __FUNCTION__);
2334 for (i = 0; i <= ncol; i++) tempA.
IA[i] = colptr[i] - 1;
2335 for (i = 0; i < nnzero; i++) tempA.
JA[i] = rowind[i] - 1;
2339 if (mxtype[1] ==
'S') {
2349 for (i = 0; i < A->
row; i++) {
2351 for (j = A->
IA[i]; j < A->IA[i + 1]; j++) {
2353 if (A->
JA[j] == i) {
2354 A->
val[j] = A->
val[j] / 2;
2370 printf(
"### ERROR: No right hand side! [%s]\n", __FUNCTION__);
2372 }
else if (nrhs > 1) {
2374 printf(
"### ERROR: More than one right hand side! [%s]\n", __FUNCTION__);
2386 if (colptr) free(colptr);
2387 if (exact) free(exact);
2388 if (guess) free(guess);
2389 if (rhsind) free(rhsind);
2390 if (rhsptr) free(rhsptr);
2391 if (rhsval) free(rhsval);
2392 if (rhsvec) free(rhsvec);
2393 if (rowind) free(rowind);
2394 if (values) free(values);
void fasp_darray_cp(const INT n, const REAL *x, REAL *y)
Copy an array to the other y=x.
void * fasp_mem_calloc(const unsigned int size, const unsigned int type)
Allocate, initiate, and check memory.
void fasp_chkerr(const SHORT status, const char *fctname)
Check error status and print out error messages before quit.
void fasp_dvec_free(dvector *u)
Free vector data space of REAL type.
void fasp_ivec_alloc(const INT m, ivector *u)
Create vector data space of INT type.
void fasp_dvec_alloc(const INT m, dvector *u)
Create dvector data space of REAL type.
void fasp_dbsr_write_coo(const char *filename, const dBSRmat *A)
Print out a dBSRmat matrix in coordinate format for matlab spy.
void fasp_ivecind_read(const char *filename, ivector *b)
Read b from matrix disk file.
void fasp_dcsrvec_write2(const char *filemat, const char *filerhs, dCSRmat *A, dvector *b)
Write A and b to two separate disk files.
void fasp_dcoo_read1(const char *filename, dCSRmat *A)
Read A from matrix disk file in IJ format – indices starting from 1.
void fasp_dstr_print(const dSTRmat *A)
Print out a dSTRmat matrix in coordinate format.
void fasp_matrix_write(const char *filename, void *A, const INT flag)
write matrix from different kinds of formats from both ASCII and binary files
void fasp_dcoo_print(const dCOOmat *A)
Print out a dCOOmat matrix in coordinate format.
void fasp_dcsrvec_write1(const char *filename, dCSRmat *A, dvector *b)
Write A and b to a SINGLE disk file.
void fasp_dcoo_write(const char *filename, dCSRmat *A)
Write a matrix to disk file in IJ format (coordinate format)
void fasp_dcsr_read(const char *filename, dCSRmat *A)
Read A from matrix disk file in IJ format.
void fasp_dcsrvec_read1(const char *filename, dCSRmat *A, dvector *b)
Read A and b from a SINGLE disk file.
void fasp_ivec_write(const char *filename, ivector *vec)
Write a ivector to disk file in coordinate format.
void fasp_matrix_read(const char *filename, void *A)
Read matrix from different kinds of formats from both ASCII and binary files.
void fasp_dcsrvec_read2(const char *filemat, const char *filerhs, dCSRmat *A, dvector *b)
Read A and b from two separate disk files.
void fasp_matrix_read_bin(const char *filename, void *A)
Read matrix in binary format.
void fasp_dcoovec_bin_read(const char *fni, const char *fnj, const char *fna, const char *fnb, dCSRmat *A, dvector *b)
Read A from matrix disk files in IJ format (three binary files)
void fasp_dvec_read(const char *filename, dvector *b)
Read b from a disk file in array format.
void fasp_dvec_print(const INT n, dvector *u)
Print first n entries of a vector of REAL type.
void fasp_dvec_write(const char *filename, dvector *vec)
Write a dvector to disk file.
void fasp_dmtx_read(const char *filename, dCSRmat *A)
Read A from matrix disk file in MatrixMarket general format.
void fasp_dcoo_read(const char *filename, dCSRmat *A)
Read A from matrix disk file in IJ format – indices starting from 0.
void fasp_vector_write(const char *filerhs, void *b, const INT flag)
write RHS vector from different kinds of formats in both ASCII and binary files
void fasp_ivec_read(const char *filename, ivector *b)
Read b from a disk file in array format.
void fasp_dcsr_write_mtx(const char *filename, const dCSRmat *A)
Print out a dCSRmat matrix in coordinate format for MatrixMarket.
void fasp_dcsr_print(const dCSRmat *A)
Print out a dCSRmat matrix in coordinate format.
void fasp_dbsr_print(const char *filename, dBSRmat *A)
Print a dBSRmat to a disk file in a readable format.
void fasp_dcoo_shift_read(const char *filename, dCSRmat *A)
Read A from matrix disk file in IJ format – indices starting from 0.
void fasp_dmtxsym_read(const char *filename, dCSRmat *A)
Read A from matrix disk file in MatrixMarket sym format.
void fasp_dbsr_write(const char *filename, dBSRmat *A)
Write a dBSRmat to a disk file.
void fasp_dstr_read(const char *filename, dSTRmat *A)
Read A from a disk file in dSTRmat format.
void fasp_dbsr_read(const char *filename, dBSRmat *A)
Read A from a disk file in dBSRmat format.
void fasp_dstr_write(const char *filename, dSTRmat *A)
Write a dSTRmat to a disk file.
void fasp_ivec_print(const INT n, ivector *u)
Print first n entries of a vector of INT type.
void fasp_hb_read(const char *input_file, dCSRmat *A, dvector *b)
Read matrix and right-hans side from a HB format file.
void fasp_vector_read(const char *filerhs, void *b)
Read RHS vector from different kinds of formats in ASCII or binary files.
void fasp_dcsr_write_coo(const char *filename, const dCSRmat *A)
Print out a dCSRmat matrix in coordinate format for matlab spy.
void fasp_dvecind_write(const char *filename, dvector *vec)
Write a dvector to disk file in coordinate format.
void fasp_dvecind_read(const char *filename, dvector *b)
Read b from matrix disk file.
void fasp_dbsr_alloc(const INT ROW, const INT COL, const INT NNZ, const INT nb, const INT storage_manner, dBSRmat *A)
Allocate memory space for BSR format sparse matrix.
void fasp_dcoo_free(dCOOmat *A)
Free IJ sparse matrix data memory space.
dCOOmat fasp_dcoo_create(const INT m, const INT n, const INT nnz)
Create IJ sparse matrix data memory space.
dCSRmat fasp_dcsr_create(const INT m, const INT n, const INT nnz)
Create CSR sparse matrix data memory space.
void fasp_dcsr_free(dCSRmat *A)
Free CSR sparse matrix data memory space.
INT fasp_dcsr_trans(const dCSRmat *A, dCSRmat *AT)
Find transpose of dCSRmat matrix A.
SHORT fasp_blas_dcsr_add(const dCSRmat *A, const REAL alpha, const dCSRmat *B, const REAL beta, dCSRmat *C)
compute C = alpha*A + beta*B in CSR format
Main header file for the FASP project.
#define SHORT
FASP integer and floating point numbers.
#define BIGREAL
Some global constants.
Block sparse row storage matrix of REAL type.
INT COL
number of cols of sub-blocks in matrix A, N
INT NNZ
number of nonzero sub-blocks in matrix A, NNZ
INT nb
dimension of each sub-block
INT * IA
integer array of row pointers, the size is ROW+1
INT ROW
number of rows of sub-blocks in matrix A, M
INT storage_manner
storage manner for each sub-block
Sparse matrix of REAL type in COO (IJ) format.
INT * colind
integer array of column indices, the size is nnz
INT col
column of matrix A, n
INT * rowind
integer array of row indices, the size is nnz
REAL * val
nonzero entries of A
INT row
row number of matrix A, m
INT nnz
number of nonzero entries
Sparse matrix of REAL type in CSR format.
INT col
column of matrix A, n
REAL * val
nonzero entries of A
INT row
row number of matrix A, m
INT * IA
integer array of row pointers, the size is m+1
INT nnz
number of nonzero entries
INT * JA
integer array of column indexes, the size is nnz
Structure matrix of REAL type.
INT * offsets
offsets of the off-diagonals (length is nband)
INT nx
number of grids in x direction
INT nxy
number of grids on x-y plane
INT ny
number of grids in y direction
INT nband
number of off-diag bands
REAL * diag
diagonal entries (length is ngrid*(nc^2))
INT nc
size of each block (number of components)
INT nz
number of grids in z direction
REAL ** offdiag
off-diagonal entries (dimension is nband * [(ngrid-|offsets|) * nc^2])
Vector with n entries of REAL type.
REAL * val
actual vector entries
Vector with n entries of INT type.
INT * val
actual vector entries