CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   simpleMatrix code (https://www.cfd-online.com/Forums/openfoam-programming-development/118106-simplematrix-code.html)

sharonyue May 21, 2013 05:23

simpleMatrix code
 
Hi,

In OpenFOAM's test---simpleMatrix.I have this code:
Code:

int main(int argc, char *argv[])
{
    simpleMatrix<vector> hmm(3);

    hmm[0][0] = -3.0;
    hmm[0][1] = 10.0;
    hmm[0][2] = -4.0;
    hmm[1][0] = 2.0;
    hmm[1][1] = 3.0;
    hmm[1][2] = 10.0;
    hmm[2][0] = 2.0;
    hmm[2][1] = 6.0;
    hmm[2][2] = 1.0;

  hmm.source()[0] = vector(2.0, 1.0, 3.0);
    hmm.source()[1] = vector(1.0, 4.0, 3.0);
    hmm.source()[2] = vector(0.0, 5.0, 2.0);


    Info<< hmm << endl;
    //Info<< hmm.solve() << endl;
    //Info<< hmm << endl;
    //Info<< hmm.LUsolve() << endl;
    //Info<< hmm << endl;

    //Info<< "End\n" << endl;

    return 0;
}

What does the codes in red mean?Thanks in advance.

This is the result in terminal:
Code:

3 3((-3 10 -4)(2 3 10)(2 6 1))
3((2 1 3) (1 4 3) (0 5 2))


Pedro24 May 21, 2013 10:18

Your system "hmm" is a linear system of vectors

So you have A x = b

with :
- A the matrix
- "x" the solution and "b" the source term (both are vector of vectors).

The code in red fill the source vector "b" (composed by vector because your system is a simpleMatrix of vectors)

Code:

    hmm.source()[0] = vector(2.0, 1.0, 3.0);
    hmm.source()[1] = vector(1.0, 4.0, 3.0);
    hmm.source()[2] = vector(0.0, 5.0, 2.0);

Pierre

wenxu August 21, 2014 23:46

Quote:

Originally Posted by Pedro24 (Post 428920)
Your system "hmm" is a linear system of vectors

So you have A x = b

with :
- A the matrix
- "x" the solution and "b" the source term (both are vector of vectors).

The code in red fill the source vector "b" (composed by vector because your system is a simpleMatrix of vectors)

Code:

    hmm.source()[0] = vector(2.0, 1.0, 3.0);
    hmm.source()[1] = vector(1.0, 4.0, 3.0);
    hmm.source()[2] = vector(0.0, 5.0, 2.0);

Pierre

hi,Pedro24。but A=3 3((-3 10 -4)(2 3 10)(2 6 1)) multiply with x1=(-0.452599 1.12232 -0.149847) (the result got by the test code) do not equal to b1=(2 1 3). why? i have misunderstand this? please help me. Thank you!!!

bigorange September 17, 2017 02:10

Quote:

Originally Posted by wenxu (Post 507168)
hi,Pedro24。but A=3 3((-3 10 -4)(2 3 10)(2 6 1)) multiply with x1=(-0.452599 1.12232 -0.149847) (the result got by the test code) do not equal to b1=(2 1 3). why? i have misunderstand this? please help me. Thank you!!!

Hi wenxu, have you gotten the answer for this problem?

Pedro24 September 20, 2017 06:06

Quote:

Originally Posted by bigorange (Post 664632)
Hi wenxu, have you gotten the answer for this problem?

Hi all,

I didn't see this message few years ago but you cannot separate one solution vector from the others (the system has 9 dependent unknowns, and not 3 x 3 unknwowns). When you run the code, you get :
Code:

3((-0.452599 1.12232 -0.149847) (0.125382 0.452599 0.345566) (0.152905 0.0397554 0.2263))
as solution. I you multiply :
Code:

A =

  -3  10  -4
    2    3  10
    2    6    1

with the given solution :
Code:

x =

  -0.452599  1.122320  -0.149847
  0.125382  0.452599  0.345566
  0.152905  0.039755  0.226300

you will get the source term (which is also a matrix, i.e. a vector of vectors) :
Code:

A * x =

  2.0000e+00  1.0000e+00  3.0000e+00
  1.0000e+00  4.0000e+00  3.0000e+00
  -1.0000e-06  5.0000e+00  2.0000e+00

Sincerely,

Pierre


All times are GMT -4. The time now is 12:23.