improved setFields utility

This commit is contained in:
andy
2009-08-25 18:38:54 +01:00
parent 7eb4019877
commit 0ce3449681

View File

@ -37,14 +37,22 @@ Description
using namespace Foam; using namespace Foam;
template<class GeoField> template<class Type>
void setFieldType bool setFieldType
( (
const word& fieldTypeDesc,
const fvMesh& mesh, const fvMesh& mesh,
const labelList& selectedCells, const labelList& selectedCells,
Istream& fieldValueStream Istream& fieldValueStream
) )
{ {
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
if (fieldTypeDesc != fieldType::typeName + "Value")
{
return false;
}
word fieldName(fieldValueStream); word fieldName(fieldValueStream);
IOobject fieldHeader IOobject fieldHeader
@ -61,15 +69,9 @@ void setFieldType
Info<< " Setting " << fieldHeader.headerClassName() Info<< " Setting " << fieldHeader.headerClassName()
<< " " << fieldName << endl; << " " << fieldName << endl;
GeoField field(fieldHeader, mesh); fieldType field(fieldHeader, mesh);
typename GeoField::value_type value const Type& value = pTraits<Type>(fieldValueStream);
(
static_cast<const typename GeoField::value_type&>
(
pTraits<typename GeoField::value_type>(fieldValueStream)
)
);
if (selectedCells.size() == field.size()) if (selectedCells.size() == field.size())
{ {
@ -100,6 +102,8 @@ void setFieldType
"Istream& fieldValueStream)" "Istream& fieldValueStream)"
) << "Field " << fieldName << " not found" << endl; ) << "Field " << fieldName << " not found" << endl;
} }
return true;
} }
@ -133,32 +137,21 @@ public:
{ {
word fieldType(fieldValues); word fieldType(fieldValues);
if (fieldType == "volScalarFieldValue") if
{ (
setFieldType<volScalarField> !(
(mesh_, selectedCells_, fieldValues); setFieldType<scalar>
} (fieldType, mesh_, selectedCells_, fieldValues)
else if (fieldType == "volVectorFieldValue") || setFieldType<vector>
{ (fieldType, mesh_, selectedCells_, fieldValues)
setFieldType<volVectorField> || setFieldType<sphericalTensor>
(mesh_, selectedCells_, fieldValues); (fieldType, mesh_, selectedCells_, fieldValues)
} || setFieldType<symmTensor>
else if (fieldType == "volSphericalTensorFieldValue") (fieldType, mesh_, selectedCells_, fieldValues)
{ || setFieldType<tensor>
setFieldType<volSphericalTensorField> (fieldType, mesh_, selectedCells_, fieldValues)
(mesh_, selectedCells_, fieldValues); )
} )
else if (fieldType == "volSymmTensorFieldValue")
{
setFieldType<volSymmTensorField>
(mesh_, selectedCells_, fieldValues);
}
else if (fieldType == "volTensorFieldValue")
{
setFieldType<volTensorField>
(mesh_, selectedCells_, fieldValues);
}
else
{ {
WarningIn("setField::iNew::operator()(Istream& is)") WarningIn("setField::iNew::operator()(Istream& is)")
<< "field type " << fieldType << " not currently supported" << "field type " << fieldType << " not currently supported"