# Tensor mathematics forAll macro combination tensors with vectors

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

 February 13, 2009, 12:23 The forAll(..) macro has reall #1 Senior Member   Mark Olesen Join Date: Mar 2009 Location: http://olesenm.github.io/ Posts: 810 Rep Power: 21 The forAll(..) macro has really nothing to do with any mathematics (tensor or otherwise). Take a look in the src/OpenFOAM/containers/Lists/UList.H and you'll see that it is simply a loop across a list. Actually, strictly speaking, it is a loop from zero to the value returned by the object's size() method.

 February 13, 2009, 13:48 Hi Mark, thank you for your r #2 New Member   David Sponiar Join Date: Mar 2009 Location: Prague, Czech rep. Posts: 27 Rep Power: 10 Hi Mark, thank you for your reply. You are right with forAll(...) and connection with tensors mathematics. I thought about this thread, like little manual to tensors mathematics, which is very often use with forAll(...) macro, when you want to do some postprocessing at boudaries or over the whole domain. I can see in OF forum lot of threads, where is forAll(...) macro use right in postprocessing and OF users sometime are using other steps, than other users - after that, I am loosing one's grip how to call this field and combine with other fields. For example (sumation): - someone is using sumation like this: sumation = sum( (U.boundaryField()[patchID]); - and other ones call index [faceI] or [patchI] forAll(profilePatch, faceI) { sumation[patchID][faceI] += (U.boundaryField()[faceI]); } ------------------------------------------------ Other example with to calling boundary fields: const fvPatchVectorField& Uin = U.boundaryField()[patchID] or label patchID = mesh.boundaryMesh().findPatchID("w_body"); const polyPatch& profilePatch = mesh.boundaryMesh()[patchID]; forAll(profilePatch, faceI) { vectorField = U.boundaryField()[faceI]; } ------------------------------------------------ This is, what I would like to refer. Could you tell me, when I can combine tensors with vectors. When have to be dimensioned. What is difference between fvPatchField, volField, Field and how use them and work with them in mathematics connection. This is, what I would like to refer - forAll(...) macro, which is often use in postprocessing, where is necessary knowledge in Fields Thanks David

 February 25, 2009, 05:04 Hello All, I was trying other #3 New Member   David Sponiar Join Date: Mar 2009 Location: Prague, Czech rep. Posts: 27 Rep Power: 10 Hello All, I was trying other combination, but when I am try more and deeper understand to threads of the boundary face and neighbour cell, I am confused of those things. May I ask you to sort out my thoughts I attach picture with typical boudanry prismatic cell with faceCentroid, cellCentroid wich is neighbour to the faceCentroid. ----- ----- cellCentroid holds data like volVectorFiled of the velocity magnitude, volScalarField like pressuer ... I can get this vector field: label patchID = mesh.boundaryMesh().findPatchID("w_body"); vectorField Ub = U.boundaryField()[patchID] Q1) How Can I get U.boudaryField()[patchID] to the boudary faceCentroids? I do that way. Is it right? volVectorrField Ub ( IOobject ( "Ub", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), U zeroGradientFvPatchVectorField::typeName, ); gradUb.correctBoundaryConditions(); Q2) How can I operate with scalar field like volume of prismatic cells at the boudary, normals of the boundaries elements and scalar product of two vectors. I do it this way: //get patch ID label patchID = mesh.boundaryMesh().findPatchID("w_body"); //exist patch? if(patchID != -1) { Info << " patch ID:" << patchID << exists << endl; //get indexes of the patch nieghbour cells labelList patchCells = mesh.boundary()[patchID].faceCells(); //get normals of boudary elements vectorField faceNormals = mesh.boundary()[patchID].nf(); // loop over all boudary cell indexes // this loop work for me like // debugging with printing data to console forAll(patchCells, faceI) { Info << "cellVolume:\t" << mesh.V()[patchCells[faceI]] << endl; //scalar product of 2 vector * cell volume * normal of the elements Info << "(Ub&Vb)*cV:\t" << ( Ub[patchCells[faceI]] & Vb[patchCells[faceI]] ) * mesh.V()[patchCells[faceI]] * faceNormals[faceI] << endl; ) } } This above loop work fine - printing to console work. But I do not know, how to do that to get this value to the boundary of the faceCentroids. Something like directly mapping. My goal is get sensitivity map at the wall boundaries, which is described with direction and size. I would like visual this results in paraFoam. In the mean time, I can get results from the scalar product of the 2 vectors and direction vector is equal to the normal vector (see picture with cylinder). I have still problem to get cell volume neighbour to the boundary. Any hints? With regards, David ----- -----

 February 25, 2009, 05:09 Hello All, I was trying other #4 New Member   David Sponiar Join Date: Mar 2009 Location: Prague, Czech rep. Posts: 27 Rep Power: 10 Hello All, I was trying other combination, but when I am try more and deeper understand to threads of the boundary face and neighbour cell, I am confused of those things. May I ask you to sort out my thoughts I attach picture with typical boudanry prismatic cell with faceCentroid, cellCentroid wich is neighbour to the faceCentroid. ----- ----- cellCentroid holds data like volVectorFiled of the velocity magnitude, volScalarField like pressuer ... I can get this vector field: label patchID = mesh.boundaryMesh().findPatchID("w_body"); vectorField Ub = U.boundaryField()[patchID] Q1) How Can I get U.boudaryField()[patchID] to the boudary faceCentroids? I do that way. Is it right? volVectorrField Ub ( IOobject ( "Ub", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), U zeroGradientFvPatchVectorField::typeName, ); gradUb.correctBoundaryConditions(); Q2) How can I operate with scalar field like volume of prismatic cells at the boudary, normals of the boundaries elements and scalar product of two vectors. I do it this way: //get patch ID label patchID = mesh.boundaryMesh().findPatchID("w_body"); //exist patch? if(patchID != -1) { Info << " patch ID:" << patchID << exists << endl; //get indexes of the patch nieghbour cells labelList patchCells = mesh.boundary()[patchID].faceCells(); //get normals of boudary elements vectorField faceNormals = mesh.boundary()[patchID].nf(); // loop over all boudary cell indexes // this loop work for me like // debugging with printing data to console forAll(patchCells, faceI) { Info << "cellVolume:\t" << mesh.V()[patchCells[faceI]] << endl; //scalar product of 2 vector * cell volume * normal of the elements Info << "(Ub&Vb)*cV:\t" << ( Ub[patchCells[faceI]] & Vb[patchCells[faceI]] ) * mesh.V()[patchCells[faceI]] * faceNormals[faceI] << endl; ) } } This above loop work fine - printing to console work. But I do not know, how to do that to get this value to the boundary of the faceCentroids. Something like directly mapping. My goal is get sensitivity map at the wall boundaries, which is described with direction and size. I would like visual this results in paraFoam. In the mean time, I can get results from the scalar product of the 2 vectors and direction vector is equal to the normal vector (see picture with cylinder). I have still problem to get cell volume neighbour to the boundary. Any hints? With regards, David ----- -----

 February 25, 2009, 06:03 Missing picture: Boundary c #5 New Member   David Sponiar Join Date: Mar 2009 Location: Prague, Czech rep. Posts: 27 Rep Power: 10 Missing picture: Boundary cell decription: ------ ------ Sensitivity map at the cylinder: ------ ------ David

 Thread Tools Display Modes Linear Mode

 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 OffTrackbacks are On Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post juho OpenFOAM Running, Solving & CFD 4 June 17, 2011 09:51 maka OpenFOAM Bugs 5 November 17, 2008 09:31 manu FLUENT 2 March 13, 2008 02:00 siwen OpenFOAM Running, Solving & CFD 2 February 24, 2006 16:27 Pat Sonoco Main CFD Forum 2 January 27, 1999 03:42

All times are GMT -4. The time now is 05:04.