Nektar++
|
Base communications class. More...
#include <Comm.h>
Public Member Functions | |
Comm (int narg, char *arg[]) | |
virtual | ~Comm () |
void | Finalise () |
int | GetSize () const |
Returns number of processes. More... | |
int | GetRank () |
const std::string & | GetType () const |
bool | TreatAsRankZero () |
bool | IsSerial () |
bool | IsParallelInTime () |
std::tuple< int, int, int > | GetVersion () |
void | Block () |
Block execution until all processes reach this point. More... | |
NekDouble | Wtime () |
Return the time in seconds. More... | |
template<class T > | |
void | Send (int pProc, T &pData) |
template<class T > | |
void | Recv (int pProc, T &pData) |
template<class T > | |
void | SendRecv (int pSendProc, T &pSendData, int pRecvProc, T &pRecvData) |
template<class T > | |
void | AllReduce (T &pData, enum ReduceOperator pOp) |
template<class T > | |
void | AlltoAll (T &pSendData, T &pRecvData) |
template<class T1 , class T2 > | |
void | AlltoAllv (T1 &pSendData, T2 &pSendDataSizeMap, T2 &pSendDataOffsetMap, T1 &pRecvData, T2 &pRecvDataSizeMap, T2 &pRecvDataOffsetMap) |
template<class T > | |
void | AllGather (T &pSendData, T &pRecvData) |
template<class T > | |
void | AllGatherv (T &pSendData, T &pRecvData, Array< OneD, int > &pRecvDataSizeMap, Array< OneD, int > &pRecvDataOffsetMap) |
template<class T > | |
void | AllGatherv (T &pRecvData, Array< OneD, int > &pRecvDataSizeMap, Array< OneD, int > &pRecvDataOffsetMap) |
template<class T > | |
void | Bcast (T &pData, int pRoot) |
template<class T > | |
T | Gather (int rootProc, T &val) |
template<class T > | |
T | Scatter (int rootProc, T &pData) |
template<class T > | |
void | DistGraphCreateAdjacent (T &sources, T &sourceweights, int reorder) |
template<class T1 , class T2 > | |
void | NeighborAlltoAllv (T1 &pSendData, T2 &pSendDataSizeMap, T2 &pSendDataOffsetMap, T1 &pRecvData, T2 &pRecvDataSizeMap, T2 &pRecvDataOffsetMap) |
template<class T > | |
void | Irsend (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc) |
template<class T > | |
void | Isend (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc) |
template<class T > | |
void | SendInit (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc) |
template<class T > | |
void | Irecv (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc) |
template<class T > | |
void | RecvInit (int pProc, T &pData, int count, const CommRequestSharedPtr &request, int loc) |
void | StartAll (const CommRequestSharedPtr &request) |
void | WaitAll (const CommRequestSharedPtr &request) |
CommRequestSharedPtr | CreateRequest (int num) |
CommSharedPtr | CommCreateIf (int flag) |
If the flag is non-zero create a new communicator. More... | |
void | SplitComm (int pRows, int pColumns, int pTime=1) |
Splits this communicator into a grid of size pRows*pColumns and creates row and column communicators. By default the communicator is a single row. More... | |
CommSharedPtr | GetRowComm () |
Retrieve the row communicator to which this process belongs. More... | |
CommSharedPtr | GetColumnComm () |
Retrieve the column communicator to which this process belongs. More... | |
CommSharedPtr | GetTimeComm () |
Retrieve the time communicator to which this process belongs. More... | |
CommSharedPtr | GetSpaceComm () |
Retrieve the space communicator to which this process belongs. More... | |
bool | RemoveExistingFiles () |
std::pair< CommSharedPtr, CommSharedPtr > | SplitCommNode () |
Protected Member Functions | |
Comm () | |
virtual void | v_Finalise ()=0 |
virtual int | v_GetRank ()=0 |
virtual bool | v_TreatAsRankZero ()=0 |
virtual bool | v_IsSerial ()=0 |
virtual std::tuple< int, int, int > | v_GetVersion ()=0 |
virtual void | v_Block ()=0 |
virtual NekDouble | v_Wtime ()=0 |
virtual void | v_Send (void *buf, int count, CommDataType dt, int dest)=0 |
virtual void | v_Recv (void *buf, int count, CommDataType dt, int source)=0 |
virtual void | v_SendRecv (void *sendbuf, int sendcount, CommDataType sendtype, int dest, void *recvbuf, int recvcount, CommDataType recvtype, int source)=0 |
virtual void | v_AllReduce (void *buf, int count, CommDataType dt, enum ReduceOperator pOp)=0 |
virtual void | v_AlltoAll (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0 |
virtual void | v_AlltoAllv (void *sendbuf, int sendcounts[], int sensdispls[], CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0 |
virtual void | v_AllGather (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype)=0 |
virtual void | v_AllGatherv (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0 |
virtual void | v_AllGatherv (void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0 |
virtual void | v_Bcast (void *buffer, int count, CommDataType dt, int root)=0 |
virtual void | v_Gather (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0 |
virtual void | v_Scatter (void *sendbuf, int sendcount, CommDataType sendtype, void *recvbuf, int recvcount, CommDataType recvtype, int root)=0 |
virtual void | v_DistGraphCreateAdjacent (int indegree, const int sources[], const int sourceweights[], int reorder)=0 |
virtual void | v_NeighborAlltoAllv (void *sendbuf, int sendcounts[], int sdispls[], CommDataType sendtype, void *recvbuf, int recvcounts[], int rdispls[], CommDataType recvtype)=0 |
virtual void | v_Irsend (void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0 |
virtual void | v_Isend (void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0 |
virtual void | v_SendInit (void *buf, int count, CommDataType dt, int dest, CommRequestSharedPtr request, int loc)=0 |
virtual void | v_Irecv (void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0 |
virtual void | v_RecvInit (void *buf, int count, CommDataType dt, int source, CommRequestSharedPtr request, int loc)=0 |
virtual void | v_StartAll (CommRequestSharedPtr request)=0 |
virtual void | v_WaitAll (CommRequestSharedPtr request)=0 |
virtual CommRequestSharedPtr | v_CreateRequest (int num)=0 |
virtual void | v_SplitComm (int pRows, int pColumns, int pTime)=0 |
virtual CommSharedPtr | v_CommCreateIf (int flag)=0 |
virtual std::pair< CommSharedPtr, CommSharedPtr > | v_SplitCommNode () |
Protected Attributes | |
int | m_size |
Number of processes. More... | |
std::string | m_type |
Type of communication. More... | |
CommSharedPtr | m_commRow |
Row communicator. More... | |
CommSharedPtr | m_commColumn |
Column communicator. More... | |
CommSharedPtr | m_commTime |
CommSharedPtr | m_commSpace |
Nektar::LibUtilities::Comm::Comm | ( | int | narg, |
char * | arg[] | ||
) |
Definition at line 39 of file Communication/Comm.cpp.
|
virtual |
Definition at line 53 of file Communication/Comm.cpp.
|
protected |
Definition at line 46 of file Communication/Comm.cpp.
void Nektar::LibUtilities::Comm::AllGather | ( | T & | pSendData, |
T & | pRecvData | ||
) |
Definition at line 425 of file Comm.h.
References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), GetSize(), and v_AllGather().
void Nektar::LibUtilities::Comm::AllGatherv | ( | T & | pRecvData, |
Array< OneD, int > & | pRecvDataSizeMap, | ||
Array< OneD, int > & | pRecvDataOffsetMap | ||
) |
Definition at line 467 of file Comm.h.
References v_AllGatherv().
void Nektar::LibUtilities::Comm::AllGatherv | ( | T & | pSendData, |
T & | pRecvData, | ||
Array< OneD, int > & | pRecvDataSizeMap, | ||
Array< OneD, int > & | pRecvDataOffsetMap | ||
) |
Definition at line 446 of file Comm.h.
References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), and v_AllGatherv().
void Nektar::LibUtilities::Comm::AllReduce | ( | T & | pData, |
enum ReduceOperator | pOp | ||
) |
Definition at line 370 of file Comm.h.
References v_AllReduce().
void Nektar::LibUtilities::Comm::AlltoAll | ( | T & | pSendData, |
T & | pRecvData | ||
) |
Definition at line 380 of file Comm.h.
References ASSERTL0, Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), GetSize(), and v_AlltoAll().
void Nektar::LibUtilities::Comm::AlltoAllv | ( | T1 & | pSendData, |
T2 & | pSendDataSizeMap, | ||
T2 & | pSendDataOffsetMap, | ||
T1 & | pRecvData, | ||
T2 & | pRecvDataSizeMap, | ||
T2 & | pRecvDataOffsetMap | ||
) |
Definition at line 403 of file Comm.h.
References v_AlltoAllv().
void Nektar::LibUtilities::Comm::Bcast | ( | T & | pData, |
int | pRoot | ||
) |
Definition at line 482 of file Comm.h.
References v_Bcast().
|
inline |
|
inline |
If the flag is non-zero create a new communicator.
Definition at line 722 of file Comm.h.
References v_CommCreateIf().
|
inline |
Creates a number of CommRequests.
num | Number of requests to generate in the communication request object |
Definition at line 714 of file Comm.h.
References v_CreateRequest().
void Nektar::LibUtilities::Comm::DistGraphCreateAdjacent | ( | T & | sources, |
T & | sourceweights, | ||
int | reorder | ||
) |
This replaces the current MPI communicator with a new one that also holds the distributed graph topology information. If reordering is enabled using this might break code where process/rank numbers are assumed to remain constant. This also assumes that the graph is bi-directional, so all sources are also destinations with equal weighting.
sources | Ranks of processes for which the calling process is the destination/source |
sourceweights | Weights of the corresponding edges into the calling process |
reorder | Ranks may be reordered (true) or not (false) |
Definition at line 544 of file Comm.h.
References ASSERTL0, Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), and v_DistGraphCreateAdjacent().
|
inline |
Definition at line 256 of file Comm.h.
References v_Finalise().
T Nektar::LibUtilities::Comm::Gather | ( | int | rootProc, |
T & | val | ||
) |
Concatenate all the input arrays, in rank order, onto the process with rank == rootProc
Definition at line 493 of file Comm.h.
References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), Nektar::LibUtilities::CommDataTypeTraits< T >::GetPointer(), GetRank(), GetSize(), and v_Gather().
|
inline |
Retrieve the column communicator to which this process belongs.
Definition at line 756 of file Comm.h.
References m_commColumn.
|
inline |
Definition at line 272 of file Comm.h.
References v_GetRank().
|
inline |
|
inline |
Returns number of processes.
Definition at line 264 of file Comm.h.
References m_size.
Referenced by AllGather(), AlltoAll(), Gather(), Scatter(), and Nektar::LibUtilities::CommMpi::v_AllReduce().
|
inline |
Retrieve the space communicator to which this process belongs.
Definition at line 788 of file Comm.h.
References m_commSpace.
|
inline |
Retrieve the time communicator to which this process belongs.
Definition at line 772 of file Comm.h.
References m_commTime.
|
inline |
|
inline |
Definition at line 312 of file Comm.h.
References v_GetVersion().
void Nektar::LibUtilities::Comm::Irecv | ( | int | pProc, |
T & | pData, | ||
int | count, | ||
const CommRequestSharedPtr & | request, | ||
int | loc | ||
) |
Begins a nonblocking receive
pProc | Rank of source |
pData | Array/vector to place incoming data in to |
count | Number of elements to receive in to pData |
request | Communication request object |
loc | Location in request to use |
Definition at line 663 of file Comm.h.
References CG_Iterations::loc, and v_Irecv().
void Nektar::LibUtilities::Comm::Irsend | ( | int | pProc, |
T & | pData, | ||
int | count, | ||
const CommRequestSharedPtr & | request, | ||
int | loc | ||
) |
Starts a ready-mode nonblocking send
pProc | Rank of destination |
pData | Array/vector to send |
count | Number of elements to send in pData |
request | Communication request object |
loc | Location in request to use |
Definition at line 612 of file Comm.h.
References CG_Iterations::loc, and v_Irsend().
void Nektar::LibUtilities::Comm::Isend | ( | int | pProc, |
T & | pData, | ||
int | count, | ||
const CommRequestSharedPtr & | request, | ||
int | loc | ||
) |
Starts a nonblocking send
pProc | Rank of destination |
pData | Array/vector to send |
count | Number of elements to send in pData |
request | Communication request object |
loc | Location in request to use |
Definition at line 629 of file Comm.h.
References CG_Iterations::loc, and v_Isend().
|
inline |
Definition at line 304 of file Comm.h.
References m_commTime.
|
inline |
Definition at line 296 of file Comm.h.
References v_IsSerial().
void Nektar::LibUtilities::Comm::NeighborAlltoAllv | ( | T1 & | pSendData, |
T2 & | pSendDataSizeMap, | ||
T2 & | pSendDataOffsetMap, | ||
T1 & | pRecvData, | ||
T2 & | pRecvDataSizeMap, | ||
T2 & | pRecvDataOffsetMap | ||
) |
Sends data to neighboring processes in a virtual topology communicator. All processes send different amounts of data to, and receive different amounts of data from, all neighbors
pSendData | Array/vector to send to neighbors |
pSendDataSizeMap | Array/vector where entry i specifies the number of elements to send to neighbor i |
pSendDataOffsetMap | Array/vector where entry i specifies the displacement (offset from pSendData) from which to send data to neighbor i |
pRecvData | Array/vector to place incoming data in to |
pRecvDataSizeMap | Array/vector where entry i specifies the number of elements to receive from neighbor i |
pRecvDataOffsetMap | Array/vector where entry i specifies the displacement (offset from pRecvData) from which to receive data from neighbor i |
Definition at line 580 of file Comm.h.
References v_NeighborAlltoAllv().
void Nektar::LibUtilities::Comm::Recv | ( | int | pProc, |
T & | pData | ||
) |
Definition at line 346 of file Comm.h.
References v_Recv().
void Nektar::LibUtilities::Comm::RecvInit | ( | int | pProc, |
T & | pData, | ||
int | count, | ||
const CommRequestSharedPtr & | request, | ||
int | loc | ||
) |
Create a persistent request for a receive
pProc | Rank of source |
pData | Array/vector to place incoming data in to |
count | Number of elements to receive in to pData |
request | Communication request object |
loc | Location in request to use |
Definition at line 680 of file Comm.h.
References CG_Iterations::loc, and v_RecvInit().
|
inline |
T Nektar::LibUtilities::Comm::Scatter | ( | int | rootProc, |
T & | pData | ||
) |
Scatter pData across ranks in chunks of len(pData)/num_ranks
Definition at line 513 of file Comm.h.
References Nektar::LibUtilities::CommDataTypeTraits< T >::GetCount(), Nektar::LibUtilities::CommDataTypeTraits< T >::GetPointer(), GetRank(), GetSize(), and v_Scatter().
void Nektar::LibUtilities::Comm::Send | ( | int | pProc, |
T & | pData | ||
) |
Definition at line 336 of file Comm.h.
References v_Send().
void Nektar::LibUtilities::Comm::SendInit | ( | int | pProc, |
T & | pData, | ||
int | count, | ||
const CommRequestSharedPtr & | request, | ||
int | loc | ||
) |
Creates a persistent request for a send
pProc | Rank of destination |
pData | Array/vector to send |
count | Number of elements to send in pData |
request | Communication request object |
loc | Location in request to use |
Definition at line 646 of file Comm.h.
References CG_Iterations::loc, and v_SendInit().
void Nektar::LibUtilities::Comm::SendRecv | ( | int | pSendProc, |
T & | pSendData, | ||
int | pRecvProc, | ||
T & | pRecvData | ||
) |
Definition at line 357 of file Comm.h.
References v_SendRecv().
|
inline |
Splits this communicator into a grid of size pRows*pColumns and creates row and column communicators. By default the communicator is a single row.
Definition at line 732 of file Comm.h.
References v_SplitComm().
|
inline |
Definition at line 811 of file Comm.h.
References v_SplitCommNode().
|
inline |
Starts a collection of persistent requests
request | Communication request object |
Definition at line 692 of file Comm.h.
References v_StartAll().
|
inline |
Definition at line 288 of file Comm.h.
References v_TreatAsRankZero().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by AllGather().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by AllGatherv().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by AllReduce().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by AlltoAll().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by AlltoAllv().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Bcast().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Block().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by CommCreateIf().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by CreateRequest().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by DistGraphCreateAdjacent().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommSerial, Nektar::LibUtilities::CommCwipi, and Nektar::LibUtilities::CommMpi.
Referenced by Finalise().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Gather().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, Nektar::LibUtilities::CommSerial, and Nektar::FieldUtils::FieldConvertComm.
Referenced by GetRank().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by GetVersion().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Irecv().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Irsend().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Isend().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, Nektar::LibUtilities::CommSerial, and Nektar::FieldUtils::FieldConvertComm.
Referenced by IsSerial().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommSerial, and Nektar::LibUtilities::CommMpi.
Referenced by NeighborAlltoAllv().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Recv().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by RecvInit().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Scatter().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Send().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by SendInit().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by SendRecv().
|
protectedpure virtual |
Implemented in Nektar::FieldUtils::FieldConvertComm, Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by SplitComm().
|
protectedvirtual |
Reimplemented in Nektar::LibUtilities::CommMpi.
Definition at line 69 of file Communication/Comm.cpp.
Referenced by SplitCommNode().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by StartAll().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, Nektar::LibUtilities::CommSerial, and Nektar::FieldUtils::FieldConvertComm.
Referenced by TreatAsRankZero().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by WaitAll().
|
protectedpure virtual |
Implemented in Nektar::LibUtilities::CommMpi, and Nektar::LibUtilities::CommSerial.
Referenced by Wtime().
|
inline |
Waits for all CommRequests in the request object to complete.
request | Communication request object |
Definition at line 702 of file Comm.h.
References v_WaitAll().
|
inline |
|
protected |
Column communicator.
Definition at line 178 of file Comm.h.
Referenced by GetColumnComm(), Nektar::FieldUtils::FieldConvertComm::v_SplitComm(), and Nektar::LibUtilities::CommMpi::v_SplitComm().
|
protected |
Row communicator.
Definition at line 177 of file Comm.h.
Referenced by GetRowComm(), Nektar::FieldUtils::FieldConvertComm::v_SplitComm(), and Nektar::LibUtilities::CommMpi::v_SplitComm().
|
protected |
Definition at line 180 of file Comm.h.
Referenced by GetSpaceComm(), and Nektar::LibUtilities::CommMpi::v_SplitComm().
|
protected |
Definition at line 179 of file Comm.h.
Referenced by GetTimeComm(), IsParallelInTime(), and Nektar::LibUtilities::CommMpi::v_SplitComm().
|
protected |
Number of processes.
Definition at line 175 of file Comm.h.
Referenced by Nektar::LibUtilities::CommCwipi::CommCwipi(), Nektar::LibUtilities::CommMpi::CommMpi(), Nektar::LibUtilities::CommSerial::CommSerial(), Nektar::FieldUtils::FieldConvertComm::FieldConvertComm(), GetSize(), Nektar::LibUtilities::CommMpi::v_IsSerial(), and Nektar::LibUtilities::CommMpi::v_SplitComm().
|
protected |
Type of communication.
Definition at line 176 of file Comm.h.
Referenced by Nektar::LibUtilities::CommCwipi::CommCwipi(), Nektar::LibUtilities::CommMpi::CommMpi(), Nektar::LibUtilities::CommSerial::CommSerial(), Nektar::FieldUtils::FieldConvertComm::FieldConvertComm(), and GetType().