CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Programming & Development (
-   -   Nested Field usage (

CFDMi September 13, 2019 07:12

Nested Field usage
Hi all!
I got used to working with a Field of vectors such as:

Field<vector> someVectorField(LengthOfField, vector::zero);

Now I need 5 "coordinates so instead of a vector field i would use a field of fields. Didn't find anything on the topic, so I just tried to approach it logically:

Field<Field<scalar>> someFieldField(LengthOfOuterField, (LengthOfInnerField, 0.0);

Unfortunately this does not work. I can however define it as such:

Field<Field<scalar> > someFieldField[LengthOfOuterField][LengthOfInnerField];

but I have no idea how to declare it afterwards. Tried = 0 or = {0} and such. Also someFieldField[0][0] = someScalar; does not work since seemingly the left hand side is still a field and not a scalar...

I appreciate every bit of help. Thx in advance!

einstein_zee September 16, 2019 06:18

Hii there,

I have no idea what you are trying to do :D however, looking at the code I got an idea which might be useful. looking into "" section for constructors. you may initialize the outer Field normally (Field<Field<scalar>> someFieldField(outerFieldSize). This should create a Field with size of outerFieldSize in which each element now would be another Field which you can populate it later. Then you may loop through all the elements of this Field and try assigning your desired Field WRT valid operators (see the same link section Member Operators). sth like this
for (label i = 0; i < outerFieldSize; i++)
someFieldField[i] = (now RHS is a Field of scalars check Member Operators for assignment)

The logic is pretty much like creating 2D matrices in C++ with raw pointers.

CFDMi September 19, 2019 12:39

Thanks for your reply einstein!

I now figured it out and gonna leave it here for future reference.

To declare a list of 5 dimensional vectors I used an outer list (I do not need the functionality of a field there, but can be exchanged):

List<Field<scalar> bananaList( lengthOfOuterList, Field<scalar>(lengthOfInnerField, values)

To populate it with values other than zero, one can then as you mentionend just access it as one would a normal array.

for (int i = 0; i < lengthOfOuterList; i++)
bananaList[i][0] = someScalar;
bananaList[i][1] = someScalar;
bananaList[i][2] = someScalar;

All times are GMT -4. The time now is 09:15.