Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "surfaceInterpolateFields.H"
00027 #include <finiteVolume/volFields.H>
00028 #include <finiteVolume/linear.H>
00029
00030
00031
00032 template<class Type>
00033 void Foam::surfaceInterpolateFields::interpolateFields
00034 (
00035 PtrList<GeometricField<Type, fvsPatchField, surfaceMesh> >& sflds
00036 ) const
00037 {
00038 typedef GeometricField<Type, fvPatchField, volMesh> vfType;
00039 typedef GeometricField<Type, fvsPatchField, surfaceMesh> sfType;
00040
00041
00042 HashTable<word> fieldMap(2*fieldSet_.size());
00043 forAll(fieldSet_, i)
00044 {
00045 fieldMap.insert(fieldSet_[i].first(), fieldSet_[i].second());
00046 }
00047
00048
00049 HashTable<const vfType*> flds(obr_.lookupClass<vfType>());
00050
00051 forAllConstIter(typename HashTable<const vfType*>, flds, iter)
00052 {
00053 const vfType& fld = *iter();
00054
00055 if (fieldMap.found(fld.name()))
00056 {
00057
00058 const word& sName = fieldMap[fld.name()];
00059
00060 if (obr_.found(sName))
00061 {
00062 Info<< " a surfaceField " << sName << " already exists"
00063 << endl;
00064 }
00065 else
00066 {
00067 label sz = sflds.size();
00068 sflds.setSize(sz+1);
00069 sflds.set(sz, new sfType(sName, linearInterpolate(fld)));
00070
00071 Info<< " interpolated " << fld.name() << " to create "
00072 << sflds[sz].name() << endl;
00073 }
00074 }
00075 }
00076 }
00077
00078
00079