CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Programming & Development

Defining a Matrix in OpenFOAM-1.6-ext

Register Blogs Members List Search Today's Posts Mark Forums Read

Like Tree4Likes
  • 2 Post By wyldckat
  • 1 Post By Daniel_Khazaei
  • 1 Post By wyldckat

Reply
 
LinkBack Thread Tools Display Modes
Old   October 21, 2013, 11:33
Default Defining a Matrix in OpenFOAM-1.6-ext
  #1
Senior Member
 
Daniel
Join Date: Mar 2013
Posts: 180
Rep Power: 10
Daniel_Khazaei will become famous soon enough
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’
I can understand that I need to add one more argument in declaration, but I don't know what does "class Form" mean?


regards
Daniel_Khazaei is offline   Reply With Quote

Old   November 26, 2013, 11:45
Default
  #2
Member
 
Camille Bilger
Join Date: Jul 2013
Posts: 32
Rep Power: 4
kmou is on a distinguished road
Hi,

I am encountering the same problem and would be grateful if you could share how you resolved this problem. Thank you very much.
kmou is offline   Reply With Quote

Old   November 26, 2013, 18:11
Default
  #3
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,523
Blog Entries: 36
Rep Power: 97
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Greetings to all!

Actually, while I was tracking kmou's posts, this previous thread gave the hint: 1.5 => 1.6: Matrix template - ODETest does not compile
The solution seems to be to use "scalarSquareMatrix" instead of "Matrix<scalar>".

A bit more explanation:
  1. The definition of "scalarSquareMatrix" is made in the file "src/OpenFOAM/matrices/scalarMatrices/scalarSquareMatrix.H", where it defines the class based on the "SquareMatrix" template:
    Code:
    class scalarSquareMatrix
    :
        public SquareMatrix<scalar>
  2. The template class "SquareMatrix" is defined in the file "src/OpenFOAM/matrices/SquareMatrix/SquareMatrix.H", as follows:
    Code:
    template<class Type>
    class SquareMatrix
    :
        public Matrix<SquareMatrix<Type>, Type>
    Namely, said "class Form" is "SquareMatrix<Type>" in this case... pretty confusing template voodoo, isn't it?
Either way, the quick solution is indicated in the post #3 at the aforementioned thread .

Best regards,
Bruno
hua1015 and Daniel_Khazaei like this.
__________________
___
I'll be at OFW11 in Portugal

Last edited by wyldckat; March 27, 2016 at 04:25. Reason: repaired link
wyldckat is offline   Reply With Quote

Old   November 27, 2013, 12:46
Default
  #4
Senior Member
 
Daniel
Join Date: Mar 2013
Posts: 180
Rep Power: 10
Daniel_Khazaei will become famous soon enough
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
Daniel_Khazaei is offline   Reply With Quote

Old   November 27, 2013, 14:26
Default
  #5
Senior Member
 
Daniel
Join Date: Mar 2013
Posts: 180
Rep Power: 10
Daniel_Khazaei will become famous soon enough
Quote:
Originally Posted by kmou View Post
Hi,

I am encountering the same problem and would be grateful if you could share how you resolved this problem. Thank you very much.
you need to add the following headers to your program:

#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);
wyldckat likes this.
Daniel_Khazaei is offline   Reply With Quote

Old   December 2, 2013, 06:06
Default
  #6
Member
 
Camille Bilger
Join Date: Jul 2013
Posts: 32
Rep Power: 4
kmou is on a distinguished road
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...
kmou is offline   Reply With Quote

Old   March 23, 2016, 11:19
Angry Matrix with different dimensions for different elements (kg,m,N,etc)
  #7
Member
 
Muhammad Usman
Join Date: Feb 2014
Posts: 85
Rep Power: 4
13msmemusman is on a distinguished road
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.
13msmemusman is online now   Reply With Quote

Old   March 26, 2016, 07:41
Default
  #8
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,523
Blog Entries: 36
Rep Power: 97
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Quote:
Originally Posted by 13msmemusman View Post
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.
Quick answer: AFAIK, that's not possible. You should not include the dimensions in the matrix and instead you should only use the values.
13msmemusman likes this.
wyldckat is offline   Reply With Quote

Old   March 27, 2016, 02:50
Default
  #9
Member
 
Muhammad Usman
Join Date: Feb 2014
Posts: 85
Rep Power: 4
13msmemusman is on a distinguished road
Thank you. but there should be a way...... coz..........
13msmemusman is online now   Reply With Quote

Old   March 27, 2016, 06:27
Default
  #10
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,523
Blog Entries: 36
Rep Power: 97
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Quote:
Originally Posted by 13msmemusman View Post
Thank you. but there should be a way...... coz..........
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;
It's based on the test application "applications/test/Matrix" and it took me a while to figure out the details.
wyldckat is offline   Reply With Quote

Old   March 27, 2016, 06:54
Default
  #11
Member
 
Muhammad Usman
Join Date: Feb 2014
Posts: 85
Rep Power: 4
13msmemusman is on a distinguished road
Screenshot from 2016-03-23 23:45:51.png

Please have a look on this file attached.
13msmemusman is online now   Reply With Quote

Old   March 27, 2016, 09:34
Default
  #12
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,523
Blog Entries: 36
Rep Power: 97
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Quote:
Originally Posted by 13msmemusman View Post
Please have a look on this file attached.
Quick questions:
  1. What is the calculation you're trying to perform?
    • I ask this because this matrix has to be multiplied by something!?
  2. How exactly is this matrix meant to be used?
wyldckat is offline   Reply With Quote

Old   March 27, 2016, 09:42
Default
  #13
Member
 
Muhammad Usman
Join Date: Feb 2014
Posts: 85
Rep Power: 4
13msmemusman is on a distinguished road
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
13msmemusman is online now   Reply With Quote

Old   March 27, 2016, 10:04
Default
  #14
Super Moderator
 
Bruno Santos
Join Date: Mar 2009
Location: Lisbon, Portugal
Posts: 9,523
Blog Entries: 36
Rep Power: 97
wyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nicewyldckat is just really nice
Hi Muhammad,

Quote:
Originally Posted by 13msmemusman View Post
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
I don't know if you've noticed, but if you keep giving vague descriptions, then I'm only able to give vague answers as well

There is a thread explaining how to provide information, so that this kind of vague exchange of information doesn't happen: How to give enough info to get help

Best regards,
Bruno
wyldckat is offline   Reply With Quote

Old   April 16, 2016, 20:55
Default
  #15
Senior Member
 
santiagomarquezd's Avatar
 
Santiago Marquez Damian
Join Date: Aug 2009
Location: Santa Fe, Santa Fe, Argentina
Posts: 430
Rep Power: 15
santiagomarquezd will become famous soon enough
Quote:
Originally Posted by 13msmemusman View Post
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.
It is not possible in the present versions of FOAM.

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 10:28. Reason: added quote, because this post was moved from another thread with the same question
santiagomarquezd is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


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
OpenFOAM 1.6 and 1.7 with interFoam, groovyBC give different strange results Arnoldinho OpenFOAM 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 06: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 21:47


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