Skip to content
Snippets Groups Projects
Commit 28c75d8d authored by Mark Olesen's avatar Mark Olesen
Browse files

BUG: Field construct from Xfer<Field> fails (issued #298)

- Cannot pass through to underlying list constructor directly.

- As this constructor was broken, there seem to be a number of
  workarounds scattered in the code. Could revisit them in the future
  as part of code-style:

      edgeMesh(const Xfer<pointField>&, const Xfer<edgeList>&);
      CompactIOField(const IOobject&, const Xfer<Field<T>>&);
      GlobalIOField(const IOobject&, const Xfer<Field<Type>>&);
      IOField(const IOobject&, const Xfer<Field<Type>>&);
parent c09c8e36
Branches
Tags
No related merge requests found
...@@ -34,6 +34,8 @@ Description ...@@ -34,6 +34,8 @@ Description
#include "labelList.H" #include "labelList.H"
#include "DynamicList.H" #include "DynamicList.H"
#include "face.H" #include "face.H"
#include "pointField.H"
#include "DynamicField.H"
using namespace Foam; using namespace Foam;
...@@ -45,7 +47,10 @@ using namespace Foam; ...@@ -45,7 +47,10 @@ using namespace Foam;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
List<label> lstA(10); List<label> lstA(10);
List<label> lstC(IStringStream("(1 2 3 4)")()); List<label> lstC
{
1, 2, 3, 4
};
forAll(lstA, i) forAll(lstA, i)
{ {
...@@ -128,6 +133,57 @@ int main(int argc, char *argv[]) ...@@ -128,6 +133,57 @@ int main(int argc, char *argv[])
Info<< "f1: " << f1 << endl; Info<< "f1: " << f1 << endl;
Info<< "f3: " << f3 << endl; Info<< "f3: " << f3 << endl;
{
Info<<"\nTest xfer with fields:" << endl;
List<point> list1
{
{ 0, 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8 },
{ 9, 10, 11 },
};
// Field from Xfer<List>
pointField field1(list1.xfer());
Info<<nl
<< "xfer construct from List" << nl
<<"input (list) = " << list1 << nl
<<"output (field) = " << field1 << nl;
// Field from Xfer<List> ... again
pointField field2(field1.xfer());
Info<<nl
<<"xfer construct from Field (as List): " << nl
<<"input (field) = " << field1 << nl
<<"output (field) = " << field2 << nl;
// Field from Xfer<Field>
pointField field3(xferMove(field2));
Info<<nl
<<"xfer construct from Field (as Field): " << nl
<<"input (field) = " << field2 << nl
<<"output (field) = " << field3 << nl;
// Field from Xfer<Field> .. again
pointField field4(xferCopy(field3));
Info<<nl
<<"xfer copy construct from Field (as Field): " << nl
<<"input (field) = " << field3 << nl
<<"output (field) = " << field4 << nl;
DynamicField<point> dyfield1(xferCopy(field4));
Info<<nl
<<"xfer copy construct from Field (as Field): " << nl
<<"input (field) = " << field4 << nl
<<"output (dyn-field) = " << dyfield1 << nl;
}
return 0; return 0;
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -114,6 +114,9 @@ public: ...@@ -114,6 +114,9 @@ public:
//- Construct by transferring the parameter contents //- Construct by transferring the parameter contents
explicit inline DynamicField(const Xfer<List<T>>&); explicit inline DynamicField(const Xfer<List<T>>&);
//- Construct by transferring the parameter contents
explicit inline DynamicField(const Xfer<Field<T>>&);
//- Construct by 1 to 1 mapping from the given field //- Construct by 1 to 1 mapping from the given field
inline DynamicField inline DynamicField
( (
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
...@@ -69,6 +69,17 @@ inline Foam::DynamicField<T, SizeInc, SizeMult, SizeDiv>::DynamicField ...@@ -69,6 +69,17 @@ inline Foam::DynamicField<T, SizeInc, SizeMult, SizeDiv>::DynamicField
{} {}
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline Foam::DynamicField<T, SizeInc, SizeMult, SizeDiv>::DynamicField
(
const Xfer<Field<T>>& lst
)
:
Field<T>(lst),
capacity_(Field<T>::size())
{}
template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv> template<class T, unsigned SizeInc, unsigned SizeMult, unsigned SizeDiv>
inline Foam::DynamicField<T, SizeInc, SizeMult, SizeDiv>::DynamicField inline Foam::DynamicField<T, SizeInc, SizeMult, SizeDiv>::DynamicField
( (
......
...@@ -233,8 +233,10 @@ Foam::Field<Type>::Field(const Xfer<List<Type>>& f) ...@@ -233,8 +233,10 @@ Foam::Field<Type>::Field(const Xfer<List<Type>>& f)
template<class Type> template<class Type>
Foam::Field<Type>::Field(const Xfer<Field<Type>>& f) Foam::Field<Type>::Field(const Xfer<Field<Type>>& f)
: :
List<Type>(f) List<Type>()
{} {
List<Type>::transfer(f());
}
template<class Type> template<class Type>
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment