Matrix addressing
hi,
I m currently have to make some matrix calculations and therefore created a matrix like Code:
Matrix<scalarField,scalar> D(2,1); The code compiles, but I don t think I am addressing the first element in the first row. Simple question: How can I address the different elements of the matrix? I ve already searched the forum, but could not find the answer. Additionally: How can I do a element/element multiplication with two matrices? Example: Quote:
|
To answer the second question, what you have there is the dot product, right?
Openfoam implements the dot product of two vectors using Code:
VectorA & VectorB However, your `pow' call is going to return 1 every time - you have x^0. |
hi,
first of all thx. I really need to know which mathematical operations are available for objects of class "matrix" . Is there anywhere an overview? I already installed "armadillo", because I could not do Code:
Term[celli]= -(D*Prod.T()).value(); and got: Quote:
EDIT: I know about the pow returning always 1 - I implemented several similar functions which differ in the exponent - I ll probably change this one later for saving a little bit time when running the program. EDIT2: I also tried now Code:
Prod = SF & w; only getting: Quote:
|
Dear Maybee,
Firstly, sorry for the problems you're having with multiplication - I have checked the documentation more closely and noticed that the dot product is (unsurprisingly) not defined for matrices - only vectors. Hence Code:
A & B The documentation for OpenFOAM is available online at http://www.openfoam.org/docs/cpp/ There you will see a search bar in the top right - you can use this to search for functions, or classes, etc. In your case, you would want the class Matrix. (Classes are displayed in the dropdown list as eg Code:
Matrix Foam. I'm unsure what acceptable "Form" is for a matrix - if you or someone else can give a link to documentation explaining this, or alternatively, explain this, that'd be really useful I imagine. My initial guess is that Form describes eg SquareMatrix, SymmetricSquareMatrix, RectangularMatrix etc. As a result of this, part of me feels like you're getting undefined operators because your template substitution is messing you up. If you type Code:
Matrix<Banana<double>, double> D(2,1) Code:
Matrix<scalarField, scalar> D(2,1) I ask because GeometricField<scalar> (== scalarField via typeDef) is not listed as a Form as far as I can see, so I'm wondering if that is because I can't find a suitable list of "Form"s, or if it is not a valid construction. Best, Christian |
Hi,
I ve already used the FOAM Docs to search for the matrix class: http://www.openfoam.org/docs/cpp/ But there is not much documentation about mathematical methods that can be used on matrices! I also could not find any list for valid "Forms", only: http://www.cfd-online.com/Forums/ope...m-1-6-ext.html Quote:
I ll use armadillo now, perhaps OpenFOAM s Matrix class is not finished yet (?).... greetings maybee |
I guess this might help:
http://www.foamcfd.org/Nabla/guides/...sGuidese4.html |
nice, but still I ll use armadillo since I am working with matrices and not tensors.
|
Of course the Matrix class works. It's not there for nothing.
Quote:
What is the form of you matrix? Rectangular/Square/Diagonal/Symmetric? You would then do: Matrix<RectangularMatrix<scalar>, scalar> D(2,1); or shorthand (see scalarMatrices.H): scalarRectangularMatrix D(2,1); Most standard matrix operations are available. |
Ok,
I missread the translation of "rectangular" when translating it :/ . Is there anywhere a list/reference of the matrix operations in OpenFOAM? Furthermore is there defined a method for this operation Quote:
|
for future help...
For [A1 A2 A3] * [B1 B2 B3] = [A1B1 A2B2 A3B3], use scale(A,B). See reference in: http://foam.sourceforge.net/docs/Gui...mmersGuide.pdf |
Quote:
For future reference, The scale(a,b) function has been replaced by cmptMultiply(a,b). See here: https://www.cfd-online.com/Forums/op...-function.html |
All times are GMT -4. The time now is 10:35. |