diff --git a/applications/utilities/preProcessing/setFields/setFields.C b/applications/utilities/preProcessing/setFields/setFields.C index 5ba3727b39..d164709504 100644 --- a/applications/utilities/preProcessing/setFields/setFields.C +++ b/applications/utilities/preProcessing/setFields/setFields.C @@ -37,14 +37,22 @@ Description using namespace Foam; -template -void setFieldType +template +bool setFieldType ( + const word& fieldTypeDesc, const fvMesh& mesh, const labelList& selectedCells, Istream& fieldValueStream ) { + typedef GeometricField fieldType; + + if (fieldTypeDesc != fieldType::typeName + "Value") + { + return false; + } + word fieldName(fieldValueStream); IOobject fieldHeader @@ -61,15 +69,9 @@ void setFieldType Info<< " Setting " << fieldHeader.headerClassName() << " " << fieldName << endl; - GeoField field(fieldHeader, mesh); + fieldType field(fieldHeader, mesh); - typename GeoField::value_type value - ( - static_cast - ( - pTraits(fieldValueStream) - ) - ); + const Type& value = pTraits(fieldValueStream); if (selectedCells.size() == field.size()) { @@ -100,6 +102,8 @@ void setFieldType "Istream& fieldValueStream)" ) << "Field " << fieldName << " not found" << endl; } + + return true; } @@ -133,32 +137,21 @@ public: { word fieldType(fieldValues); - if (fieldType == "volScalarFieldValue") - { - setFieldType - (mesh_, selectedCells_, fieldValues); - } - else if (fieldType == "volVectorFieldValue") - { - setFieldType - (mesh_, selectedCells_, fieldValues); - } - else if (fieldType == "volSphericalTensorFieldValue") - { - setFieldType - (mesh_, selectedCells_, fieldValues); - } - else if (fieldType == "volSymmTensorFieldValue") - { - setFieldType - (mesh_, selectedCells_, fieldValues); - } - else if (fieldType == "volTensorFieldValue") - { - setFieldType - (mesh_, selectedCells_, fieldValues); - } - else + if + ( + !( + setFieldType + (fieldType, mesh_, selectedCells_, fieldValues) + || setFieldType + (fieldType, mesh_, selectedCells_, fieldValues) + || setFieldType + (fieldType, mesh_, selectedCells_, fieldValues) + || setFieldType + (fieldType, mesh_, selectedCells_, fieldValues) + || setFieldType + (fieldType, mesh_, selectedCells_, fieldValues) + ) + ) { WarningIn("setField::iNew::operator()(Istream& is)") << "field type " << fieldType << " not currently supported"