Creates an empty matrix structure linking two distributed supports.
The method must be called by all processors belonging to source and target groups.
\param source_support local support
- \param local_group processor group containing the local processors
- \param distant_group processor group containing the distant processors
+ \param source_group processor group containing the local processors
+ \param target_group processor group containing the distant processors
\param method interpolation method
*/
InterpolationMatrix::InterpolationMatrix(
#include "IntersectionDEC.hxx"
#include "ElementLocator.hxx"
#include "MEDMEM_OptionManager.hxx"
+
+
+namespace ParaMEDMEM
+{
+
/*!
\defgroup intersectiondec IntersectionDEC
*</TABLE>
*/
-
-/*! @{ */
-namespace ParaMEDMEM
-{
+/*!
+\addtogroup intersectiondec
+@{
+*/
+
IntersectionDEC::IntersectionDEC()
{
}
}
+ /*!
+ Receives the data at time \a time in asynchronous mode. The value of the field
+ will be time-interpolated from the field values received.
+ \param time time at which the value is desired
+ */
void IntersectionDEC::recvData( double time )
{
_interpolation_matrix->transposeMultiply(*_local_field->getField());
}
+ /*!
+ Sends the data available at time \a time in asynchronous mode.
+ \param time time at which the value is available
+ \param deltatime time interval between the value presently sent and the next one.
+ */
+
+
void IntersectionDEC::sendData( double time , double deltatime )
{
_interpolation_matrix->getAccessDEC()->SetTime(time,deltatime);
sendData() ;
}
-/*! @} */
+/*!
+ @}
+ */
}
}
\endverbatim
*/
-/*! @{ */
+
namespace ParaMEDMEM
{
+/*!
+\addtogroup processor_group
+@{
+*/
+
/*!
* Creates a processor group that is based on all the
MPI_COMM_WORLD processor.This routine must be called by all processors in MPI_COMM_WORLD.
_comm_interface.commCreate(MPI_COMM_WORLD, _group, &_comm);
delete[] ranks;
}
- /*! Creates a processor group that is based on the processors between \a pstart and \pend.
+ /*! Creates a processor group that is based on the processors between \a pstart and \a pend.
This routine must be called by all processors in MPI_COMM_WORLD.
+\param comm_interface reference to the comm_interface object
\param interface CommInterface object giving access to the MPI
communication layer
\param pstart id in MPI_COMM_WORLD of the first processor in the group
_comm_interface.commCreate(MPI_COMM_WORLD, _group, &_comm);
delete[] ranks;
}
-
+/*!
+@}
+*/
MPIProcessorGroup::MPIProcessorGroup (const ProcessorGroup& proc_group, set<int> proc_ids) :
ProcessorGroup(proc_group.getCommInterface())
_comm_interface.commFree(&_comm);
}
+/*!
+\addtogroup processor_group
+@{
+*/
/*! Translation of the rank id between two processor groups. This method translates rank \a rank
-on the current processor group to the rank on group pointed by \group.
+on the current processor group to the rank on group pointed by \a group.
\param group group from which the rank is expected
\param rank rank on group \a group of the processor which is to be translated
\return rank on local group
}
-ProcessorGroup* MPIProcessorGroup::createProcGroup() const
-{
- set <int> procs;
- for (set<int>::const_iterator iter=_proc_ids.begin(); iter!= _proc_ids.end(); iter++)
- procs.insert(*iter);
-
- return new MPIProcessorGroup(_comm_interface, procs);
-
-}
- /*!Adding processors of group \a group to local group.
+/*!Adding processors of group \a group to local group.
\param group group that is to be fused with current group
\return new group formed by the fusion of local group and \a group.
*/
}
return new MPIProcessorGroup(_comm_interface,procs);
}
+/*!
+ @}
+ */
+ ProcessorGroup* MPIProcessorGroup::createProcGroup() const
+{
+ set <int> procs;
+ for (set<int>::const_iterator iter=_proc_ids.begin(); iter!= _proc_ids.end(); iter++)
+ procs.insert(*iter);
+
+ return new MPIProcessorGroup(_comm_interface, procs);
-
}
-/*! @} */
+}
+
#include <fvm_nodal_append.h>
#include <fvm_locator.h>
}
+
+
+namespace ParaMEDMEM
+{
+
/*!
\defgroup noncoincidentdec NonCoincidentDEC
non-zero element per row (with value 1). For instance, in the above figure, the matrix is :
\f[
-\begin{tabular}{|ccc|}
-1 & 0 & 0 \\
-0 & 0 & 1 \\
-1 & 0 & 0 \\
-0 & 0 & 1 \\
+\begin{tabular}{|cccc|}
+1 & 0 & 0 & 0\\
+0 & 0 & 1 & 0\\
+1 & 0 & 0 & 0\\
+0 & 0 & 1 & 0\\
\end{tabular}
\f]
*/
-namespace ParaMEDMEM
-{
fvm_nodal_t* medmemMeshToFVMMesh(const MEDMEM::MESH* mesh)
{
// create an FVM structure from the paramesh structure
{
}
+ /*!
+\addtogroup noncoincidentdec
+@{
+ */
/*! Constructor of a non coincident DEC with
* a source group on which lies a field lying on a mesh and a
renormalizeTargetField();
}
-
+ /*!
+@}
+ */
}
#include "MPIProcessorGroup.hxx"
#include "StructuredCoincidentDEC.hxx"
+namespace ParaMEDMEM
+{
/*! \defgroup structuredcoincidentdec StructuredCoincidentDEC
fields have also different component topologies, creating the ParaFIELD
requires some more effort. See \ref parafield section for more details.
*/
-namespace ParaMEDMEM
-{
+
StructuredCoincidentDEC::StructuredCoincidentDEC():_toposource(0),_topotarget(0),
_recvbuffer(0),_sendbuffer(0),
delete _topotarget;
}
+/*!
+\addtogroup structuredcoincidentdec
+@{
+*/
StructuredCoincidentDEC::StructuredCoincidentDEC(ProcessorGroup& local_group, ProcessorGroup& distant_group):DEC(local_group,distant_group),_toposource(0),_topotarget(0),_recvbuffer(0),_sendbuffer(0)
{
}
prepareTargetDE();
}
}
+/*!
+@}
+*/
}
CPPUNIT_TEST(testSynchronousEqualIntersectionWithoutInterpNativeDEC_2D);
CPPUNIT_TEST(testSynchronousEqualIntersectionWithoutInterpDEC_2D);
CPPUNIT_TEST(testSynchronousEqualIntersectionDEC_2D);
-// CPPUNIT_TEST(testSynchronousFasterSourceIntersectionDEC_2D);
-// CPPUNIT_TEST(testSynchronousSlowerSourceIntersectionDEC_2D);
-// CPPUNIT_TEST(testSynchronousSlowSourceIntersectionDEC_2D);
-// CPPUNIT_TEST(testSynchronousFastSourceIntersectionDEC_2D);
+ CPPUNIT_TEST(testSynchronousFasterSourceIntersectionDEC_2D);
+ CPPUNIT_TEST(testSynchronousSlowerSourceIntersectionDEC_2D);
+ CPPUNIT_TEST(testSynchronousSlowSourceIntersectionDEC_2D);
+ CPPUNIT_TEST(testSynchronousFastSourceIntersectionDEC_2D);
CPPUNIT_TEST(testAsynchronousEqualIntersectionDEC_2D);
CPPUNIT_TEST(testAsynchronousFasterSourceIntersectionDEC_2D);
CPPUNIT_TEST(testAsynchronousSlowerSourceIntersectionDEC_2D);
cout << "testAsynchronousIntersectionDEC_2D" << rank << " MPI_Barrier " << endl ;
- MPI_Barrier(MPI_COMM_WORLD);
+ if (Asynchronous) MPI_Barrier(MPI_COMM_WORLD);
cout << "end of IntersectionDEC_2D test"<<endl;
}