|
[Sponsors] |
October 21, 2013, 12:33 |
Defining a Matrix in OpenFOAM-1.6-ext
|
#1 |
Senior Member
Daniel
Join Date: Mar 2013
Location: Noshahr, Iran
Posts: 348
Rep Power: 21 |
Hello foamers
I am trying to define a Matrix in my OpenFOAM solver but I have a few problems. I try to describe my problem with an example: Assuming I want to define a Matrix in the solver, this is what I do: Matrix<scalar> A(n, m, 0.0); Now when I want to compile the solver, it gives me the following error: Code:
setInterfaceDisplacement.H:98: error: wrong number of template arguments (1, should be 2) /opt/OpenFOAM/OpenFOAM-1.6-ext/src/OpenFOAM/lnInclude/Matrix.H:54: error: provided for ‘template<class Form, class Type> class Foam::Matrix’ regards |
|
November 26, 2013, 11:45 |
|
#2 |
Member
Camille Bilger
Join Date: Jul 2013
Posts: 43
Rep Power: 13 |
Hi,
I am encountering the same problem and would be grateful if you could share how you resolved this problem. Thank you very much. |
|
November 26, 2013, 18:11 |
|
#3 |
Retired Super Moderator
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 10,982
Blog Entries: 45
Rep Power: 128 |
Greetings to all!
Actually, while I was tracking kmou's posts, this previous thread gave the hint: http://www.cfd-online.com/Forums/ope...t-compile.html The solution seems to be to use "scalarSquareMatrix" instead of "Matrix<scalar>". A bit more explanation:
Best regards, Bruno
__________________
Last edited by wyldckat; March 27, 2016 at 05:25. Reason: repaired link |
|
November 27, 2013, 12:46 |
|
#4 |
Senior Member
Daniel
Join Date: Mar 2013
Location: Noshahr, Iran
Posts: 348
Rep Power: 21 |
thanks for the suggestion...
I had resolved that issue a few weeks ago. I have changed the declaration as follow: Matrix <scalarField,scalar> A (n,m) --------- squareScalarMatrix is working fine on square matrices but how can I define a matrix with one column or one row? like this one: Matrix <scalarField,scalar> A (n,1) or A (1,n) ------- OK I have fixed the last one by using rectangular matrix |
|
November 27, 2013, 14:26 |
|
#5 | |
Senior Member
Daniel
Join Date: Mar 2013
Location: Noshahr, Iran
Posts: 348
Rep Power: 21 |
Quote:
#include "scalarSquareMatrix.H" --->> for square type matrix if you want to define a square matrix: A (n,n) and initiate it with 0 scalarSquareMatrix A(n, 0.0); #include "RectangularMatrix.H" ---->> for rectangular matrix if you want to define a rectangular matrix: A (n,m) RectangularMatrix <scalar> A(n,m); |
||
December 2, 2013, 06:06 |
|
#6 |
Member
Camille Bilger
Join Date: Jul 2013
Posts: 43
Rep Power: 13 |
Thank you Daniel and Bruno for your replies.
So new classes of matrices have been created, such as SquareMatrix and RectangularMatrix, which effectively correspond do the "Form" that is required. Thus, for each Matrix<scalar> that I have, I will need to make a decision as to if it is a Square matrix, or a Rectangular matrix or Diagonal matrix etc... |
|
March 23, 2016, 11:19 |
Matrix with different dimensions for different elements (kg,m,N,etc)
|
#7 |
Member
Muhammad Usman
Join Date: Feb 2014
Posts: 91
Rep Power: 0 |
Hi guys i have a problem related to matrices. I have to define and write a matrix in which every element have different dimensions. for example 1st element has dimensions in kilogram 2nd in meters 3rd in second like that. Please guide me how can i do that.
|
|
March 27, 2016, 03:50 |
|
#9 |
Member
Muhammad Usman
Join Date: Feb 2014
Posts: 91
Rep Power: 0 |
Thank you. but there should be a way...... coz..........
|
|
March 27, 2016, 07:27 |
|
#10 |
Retired Super Moderator
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 10,982
Blog Entries: 45
Rep Power: 128 |
If you had provided an example I could have worked with, it would have be easier/faster for me to figure it out.
Anyway, this is an example of how to do it: Code:
SquareMatrix<dimensionedScalar> hmm(3); hmm[0][0].dimensions().reset(dimLength); hmm[0][0] = dimensionedScalar("cookie1",dimLength,-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; |
|
March 27, 2016, 07:54 |
|
#11 |
Member
Muhammad Usman
Join Date: Feb 2014
Posts: 91
Rep Power: 0 |
|
|
March 27, 2016, 10:42 |
|
#13 |
Member
Muhammad Usman
Join Date: Feb 2014
Posts: 91
Rep Power: 0 |
its matrix for mass in mass damper spring system. actually i am working with some kind of fluid and vehicle dynamics interface. Yes this matrix is gonna be multiplied by a vector
|
|
March 27, 2016, 11:04 |
|
#14 | |
Retired Super Moderator
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 10,982
Blog Entries: 45
Rep Power: 128 |
Hi Muhammad,
Quote:
There is a thread explaining how to provide information, so that this kind of vague exchange of information doesn't happen: http://www.cfd-online.com/Forums/ope...-get-help.html Best regards, Bruno |
||
April 16, 2016, 21:55 |
|
#15 | |
Senior Member
Santiago Marquez Damian
Join Date: Aug 2009
Location: Santa Fe, Santa Fe, Argentina
Posts: 452
Rep Power: 24 |
Quote:
Regards!
__________________
Santiago MÁRQUEZ DAMIÁN, Ph.D. Research Scientist Research Center for Computational Methods (CIMEC) - CONICET/UNL Tel: 54-342-4511594 Int. 7032 Colectora Ruta Nac. 168 / Paraje El Pozo (3000) Santa Fe - Argentina. http://www.cimec.org.ar Last edited by wyldckat; April 17, 2016 at 11:28. Reason: added quote, because this post was moved from another thread with the same question |
||
March 11, 2020, 08:58 |
|
#16 |
Member
Peng Liang
Join Date: Mar 2014
Posts: 60
Rep Power: 12 |
Hello Everyone,
my problem is a litle bit related to the Matrix problem. I want to have one field value obtained from a two-dimensional lookup table, which means the value is dependent on two variables. Is it possible that I insert values into the Matrix and look up and interpolate among them? I know it may be quite wrong, any hints from you will be appreciated by me. Thank you. Best regards, Peng |
|
December 11, 2023, 15:44 |
I want to multiply two matrices E and F to obtain G so G = E*F.
|
#17 |
Senior Member
Klaus
Join Date: Mar 2009
Posts: 281
Rep Power: 22 |
I want to multiply two matrices E and F to obtain G so G = E*F. I tried the following, I don't get compile errors but from the line //Compute G = E * F onwards, things don't work. Here's my code:
Code:
// Set the size of the matrices const label N = 4; // matrix size // Declare and initialize lduMatrices E, F, and G RectangularMatrix <scalar> E(N,N); RectangularMatrix <scalar> F(N,N); RectangularMatrix <scalar> G(N,N); // Set coefficients for matrix E diagonal scalar diagonalValuesE[] = {1.0, 2.0, 3.0, 4.0}; for (label i = 0; i < N; ++i) { E[i][i] = diagonalValuesE[i]; } // Set coefficients for matrix F diagonal scalar diagonalValuesF[] = {5.0, 6.0, 7.0, 8.0}; for (label i = 0; i < N; ++i) { F[i][i] = diagonalValuesF[i]; } //Compute G = E * F G=E*F; // THIS DOESN'T WORK I THINK, THERE IS A FUNCTION CALLED //"multiply", too but I don't know how to use it // Print the diagonal element G[0][0] Info << "Diagonal element G[0][0]: " << G[0][0] << endl; Can someone tell me how to multiply two matrices? |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Solver Compiling error - OF 1.6 ext. | raditz | OpenFOAM Programming & Development | 8 | November 4, 2012 10:53 |
[swak4Foam] OpenFOAM 1.6 and 1.7 with interFoam, groovyBC give different strange results | Arnoldinho | OpenFOAM Community Contributions | 7 | December 9, 2010 17:29 |
Cross-compiling OpenFOAM 1.7.0 on Linux for Windows 32 and 64bits with Mingw-w64 | wyldckat | OpenFOAM Announcements from Other Sources | 3 | September 8, 2010 07:25 |
Cross-compiling OpenFOAM 1.6 on Linux for Windows 32 and 64bits with Mingw-w64 | wyldckat | OpenFOAM Announcements from Other Sources | 7 | January 19, 2010 16:39 |
OpenFOAM version 1.6 details | lakeat | OpenFOAM Running, Solving & CFD | 42 | August 26, 2009 22:47 |