diff --git a/applications/test/xfer/Test-xferList.C b/applications/test/xfer/Test-xferList.C index 77231e2118dff2e8d5c1ed7d9f154cd76dc79aa2..9b800220ca72788ff8563d190883e567ba62d2da 100644 --- a/applications/test/xfer/Test-xferList.C +++ b/applications/test/xfer/Test-xferList.C @@ -34,6 +34,8 @@ Description #include "labelList.H" #include "DynamicList.H" #include "face.H" +#include "pointField.H" +#include "DynamicField.H" using namespace Foam; @@ -45,7 +47,10 @@ using namespace Foam; int main(int argc, char *argv[]) { List<label> lstA(10); - List<label> lstC(IStringStream("(1 2 3 4)")()); + List<label> lstC + { + 1, 2, 3, 4 + }; forAll(lstA, i) { @@ -128,6 +133,57 @@ int main(int argc, char *argv[]) Info<< "f1: " << f1 << 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; } diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H index 092ae85bd329e6bccb12730d1382cf8d2aab9c81..178dff7c256f132cd4ff069abbaaf355c20148e0 100644 --- a/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicField.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -114,6 +114,9 @@ public: //- Construct by transferring the parameter contents 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 inline DynamicField ( diff --git a/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H b/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H index 8db855af5353f7f695d2599a4a76e049dd0a0394..b29af8958e3357ccb7cc44f69c0c37af8bd9af26 100644 --- a/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H +++ b/src/OpenFOAM/fields/Fields/DynamicField/DynamicFieldI.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -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> inline Foam::DynamicField<T, SizeInc, SizeMult, SizeDiv>::DynamicField ( diff --git a/src/OpenFOAM/fields/Fields/Field/Field.C b/src/OpenFOAM/fields/Fields/Field/Field.C index 997135bc34d84fa693a4cc712dee1e6a82b62e5d..f60ed5047b5ad7b94800058aa22e4470de4224bd 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.C +++ b/src/OpenFOAM/fields/Fields/Field/Field.C @@ -233,8 +233,10 @@ Foam::Field<Type>::Field(const Xfer<List<Type>>& f) template<class Type> Foam::Field<Type>::Field(const Xfer<Field<Type>>& f) : - List<Type>(f) -{} + List<Type>() +{ + List<Type>::transfer(f()); +} template<class Type>