1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
/*
* MLICTS.C - test vector ICCG solver
*
* Source Version: 2.0
* Software Release #92-0043
*
*/
#include "cpyright.h"
#include "pml.h"
#define KM 4
#define LM 3
#define KXL 24 /* 2*KM*LM */
#define KL 12 /* KM*LM */
#define EPS 1.0e-6
#define KS 4
#define MAXIT 100
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
/* MAIN - solve a Laplace equation */
int main()
{int i, j, k;
REAL ret;
REAL a0[KXL], a1[KXL], b0[KXL], b1[KXL], bm1[KXL], x[KXL], y[KXL];
for (i = 0; i < KXL; i++)
{a0[i] = 0.0;
a1[i] = 0.0;
b0[i] = 0.0;
b1[i] = 0.0;
bm1[i] = 0.0;
x[i] = 0.0;
y[i] = 0.0;};
for (i = KM; i < 2*KM; i++)
{a0[i] = 2.0;
a1[i] = -1.0;
b0[i] = 0.0;
b1[i] = 0.0;
bm1[i] = 0.0;};
a1[2*KM-1] = 0.0;
for (i = 0; i < KM; i++)
{k = KM + i;
y[k] = (REAL) (i+1);};
printf("\nProblem y :\n");
for (j = 0; j < LM; j++)
{printf("\nRow #%d: \n", j+1);
for (i = 0; i < KM; i++)
{k = j*KM + i;
printf(" y(%2d, %2d) = %11.3e ", j+1, i+1, y[k]);};};
printf("\n");
ret = _PM_iccg_v(KM, LM, EPS, KS, MAXIT, a0, a1, b0, b1, bm1, x, y);
printf("\nSolution x (should be (4, 7, 8, 6)) : %11.3e\n", ret);
for (j = 0; j < LM; j++)
{printf("\nRow #%d: \n", j+1);
for (i = 0; i < KM; i++)
{k = j*KM + i;
printf(" x(%2d, %2d) = %11.3e ", j+1, i+1, x[k]);};};
printf("\n\n");
for (i = 0; i < KXL; i++)
{a0[i] = 0.0;
a1[i] = 0.0;
b0[i] = 0.0;
b1[i] = 0.0;
bm1[i] = 0.0;
x[i] = 0.0;
y[i] = 0.0;};
for (i = 1; i < KXL; i += LM)
{a0[i] = 2.0;
a1[i] = 0.0;
b0[i] = -1.0;
b1[i] = 0.0;
bm1[i] = 0.0;};
for (k = 1, i = 1; i < KXL; i += LM, k++)
y[i] = (REAL) k;
printf("\nProblem y :\n");
for (j = 0; j < KM; j++)
{printf("\nRow #%d: \n", j+1);
for (i = 0; i < LM; i++)
{k = j*LM + i;
printf(" y(%2d, %2d) = %11.3e ", j+1, i+1, y[k]);};};
printf("\n");
ret = _PM_iccg_v(LM, KM, EPS, KS, MAXIT, a0, a1, b0, b1, bm1, x, y);
printf("\nSolution x (should be (4, 7, 8, 6)) : %11.3e\n", ret);
for (j = 0; j < KM; j++)
{printf("\nRow #%d: \n", j+1);
for (i = 0; i < LM; i++)
{k = j*LM + i;
printf(" x(%2d, %2d) = %11.3e ", j+1, i+1, x[k]);};};
printf("\n\n");
return(0);}
/*--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------*/
|