122 lines
16 KiB
XML
122 lines
16 KiB
XML
|
|
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
|
||
|
|
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.13.2" xml:lang="en-US">
|
||
|
|
<compounddef id="parallel_8cpp" kind="file" language="C++">
|
||
|
|
<compoundname>parallel.cpp</compoundname>
|
||
|
|
<includes refid="parallel_8hpp" local="yes">serif/backend/mfem/shared/parallel.hpp</includes>
|
||
|
|
<includes local="yes">mfem/fem/eltrans.hpp</includes>
|
||
|
|
<includes local="yes">mfem/fem/gridfunc.hpp</includes>
|
||
|
|
<includes local="yes">mfem/mesh/mesh.hpp</includes>
|
||
|
|
<incdepgraph>
|
||
|
|
<node id="2">
|
||
|
|
<label>serif/backend/mfem/shared/parallel.hpp</label>
|
||
|
|
<link refid="parallel_8hpp"/>
|
||
|
|
<childnode refid="3" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="4" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="1">
|
||
|
|
<label>src/lib/serif/backend/mfem/shared/parallel.cpp</label>
|
||
|
|
<link refid="parallel_8cpp"/>
|
||
|
|
<childnode refid="2" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="5" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="6" relation="include">
|
||
|
|
</childnode>
|
||
|
|
<childnode refid="7" relation="include">
|
||
|
|
</childnode>
|
||
|
|
</node>
|
||
|
|
<node id="3">
|
||
|
|
<label>exception</label>
|
||
|
|
</node>
|
||
|
|
<node id="5">
|
||
|
|
<label>mfem/fem/eltrans.hpp</label>
|
||
|
|
</node>
|
||
|
|
<node id="6">
|
||
|
|
<label>mfem/fem/gridfunc.hpp</label>
|
||
|
|
</node>
|
||
|
|
<node id="7">
|
||
|
|
<label>mfem/mesh/mesh.hpp</label>
|
||
|
|
</node>
|
||
|
|
<node id="4">
|
||
|
|
<label>vector</label>
|
||
|
|
</node>
|
||
|
|
</incdepgraph>
|
||
|
|
<innernamespace refid="namespaceserif">serif</innernamespace>
|
||
|
|
<innernamespace refid="namespaceserif_1_1utils">serif::utils</innernamespace>
|
||
|
|
<innernamespace refid="namespaceserif_1_1utils_1_1parallel">serif::utils::parallel</innernamespace>
|
||
|
|
<briefdescription>
|
||
|
|
</briefdescription>
|
||
|
|
<detaileddescription>
|
||
|
|
</detaileddescription>
|
||
|
|
<programlisting>
|
||
|
|
<codeline lineno="1"><highlight class="preprocessor">#include<sp/>"<ref refid="parallel_8hpp" kindref="compound">serif/backend/mfem/shared/parallel.hpp</ref>"</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="2"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="3"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"mfem/fem/eltrans.hpp"</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="4"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"mfem/fem/gridfunc.hpp"</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="5"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/>"mfem/mesh/mesh.hpp"</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="6"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="7"><highlight class="normal"></highlight><highlight class="preprocessor">#ifdef<sp/>_OPENMP</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="8"><highlight class="normal"></highlight><highlight class="preprocessor">#include<sp/><omp.h></highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="9"><highlight class="normal"></highlight><highlight class="preprocessor">#endif</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="10"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="11"><highlight class="normal"></highlight><highlight class="keyword">namespace<sp/></highlight><highlight class="normal"><ref refid="namespaceserif_1_1utils_1_1parallel" kindref="compound">serif::utils::parallel</ref><sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="12"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">worker_count</ref>()<sp/>noexcept<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="13"><highlight class="normal"></highlight><highlight class="preprocessor">#ifdef<sp/>_OPENMP</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="14"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>omp_in_parallel()<sp/>?<sp/>1<sp/>:<sp/>omp_get_max_threads();</highlight></codeline>
|
||
|
|
<codeline lineno="15"><highlight class="normal"></highlight><highlight class="preprocessor">#else</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="16"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal"><sp/>1;</highlight></codeline>
|
||
|
|
<codeline lineno="17"><highlight class="normal"></highlight><highlight class="preprocessor">#endif</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="18"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="19"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="20"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1_1detail_1a596686939c1c39cc9554552322779933" kindref="member">detail::run</ref>(</highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>count,<sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal">*<sp/>context,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/>Body<sp/>body)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="21"><highlight class="normal"></highlight><highlight class="preprocessor">#ifdef<sp/>_OPENMP</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="22"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(count<sp/>><sp/>1<sp/>&&<sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a845c655da35a46d0be87880f0e4fa2d9" kindref="member">worker_count</ref>()<sp/>><sp/>1)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="23"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Elements<sp/>differ<sp/>in<sp/>cost<sp/>(vacuum<sp/>points<sp/>carry<sp/>the<sp/>compactification),<sp/>so<sp/>hand<sp/>them<sp/>out<sp/>one<sp/>at<sp/>a<sp/>time.</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="24"><highlight class="normal"></highlight><highlight class="preprocessor"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>#pragma<sp/>omp<sp/>parallel<sp/>for<sp/>schedule(dynamic,<sp/>1)</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="25"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>index<sp/>=<sp/>0;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/><<sp/>count;<sp/>++<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="26"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>body(context,<sp/>index,<sp/>omp_get_thread_num());</highlight></codeline>
|
||
|
|
<codeline lineno="27"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="28"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal">;</highlight></codeline>
|
||
|
|
<codeline lineno="29"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="30"><highlight class="normal"></highlight><highlight class="preprocessor">#endif</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="31"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>index<sp/>=<sp/>0;<sp/><ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref><sp/><<sp/>count;<sp/>++<ref refid="namespaceserif_1_1operators_1_1backend_1_1mfem_1ab297c6eedd8df878b6af2135b05e4616" kindref="member">index</ref>)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="32"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>body(context,<sp/>index,<sp/>0);</highlight></codeline>
|
||
|
|
<codeline lineno="33"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="34"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="35"><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="36"><highlight class="normal"><sp/><sp/><sp/><sp/></highlight><highlight class="keywordtype">void</highlight><highlight class="normal"><sp/><ref refid="namespaceserif_1_1utils_1_1parallel_1a8e0e78d02ab6c49ae588644e579bed79" kindref="member">element_transformation</ref>(const<sp/>::mfem::Mesh&<sp/>mesh,<sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>element,<sp/>::mfem::IsoparametricTransformation&<sp/>transformation)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="37"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="comment">//<sp/>Mirrors<sp/>Mesh::GetElementTransformation(int,<sp/>IsoparametricTransformation*)<sp/>in<sp/>MFEM<sp/>4.10.</highlight><highlight class="normal"></highlight></codeline>
|
||
|
|
<codeline lineno="38"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.Attribute<sp/>=<sp/>mesh.GetAttribute(element);</highlight></codeline>
|
||
|
|
<codeline lineno="39"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.ElementNo<sp/>=<sp/>element;</highlight></codeline>
|
||
|
|
<codeline lineno="40"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.ElementType<sp/>=<sp/>::mfem::ElementTransformation::ELEMENT;</highlight></codeline>
|
||
|
|
<codeline lineno="41"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.mesh<sp/>=<sp/>&mesh;</highlight></codeline>
|
||
|
|
<codeline lineno="42"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.Reset();</highlight></codeline>
|
||
|
|
<codeline lineno="43"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>const<sp/>::mfem::GridFunction*<sp/>nodes<sp/>=<sp/>mesh.GetNodes();</highlight></codeline>
|
||
|
|
<codeline lineno="44"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">if</highlight><highlight class="normal"><sp/>(nodes<sp/>==<sp/></highlight><highlight class="keyword">nullptr</highlight><highlight class="normal">)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="45"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>mesh.GetPointMatrix(element,<sp/>transformation.GetPointMat());</highlight></codeline>
|
||
|
|
<codeline lineno="46"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.SetFE(::mfem::Mesh::GetTransformationFEforElementType(mesh.GetElementType(element)));</highlight></codeline>
|
||
|
|
<codeline lineno="47"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">return</highlight><highlight class="normal">;</highlight></codeline>
|
||
|
|
<codeline lineno="48"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="49"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>::mfem::DenseMatrix&<sp/>point_matrix<sp/>=<sp/>transformation.GetPointMat();</highlight></codeline>
|
||
|
|
<codeline lineno="50"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>::mfem::Array<int><sp/>vdofs;</highlight></codeline>
|
||
|
|
<codeline lineno="51"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>::mfem::DofTransformation<sp/>dof_transformation;</highlight></codeline>
|
||
|
|
<codeline lineno="52"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>nodes->FESpace()->GetElementVDofs(element,<sp/>vdofs,<sp/>dof_transformation);</highlight></codeline>
|
||
|
|
<codeline lineno="53"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>nodes->HostRead();</highlight></codeline>
|
||
|
|
<codeline lineno="54"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>space_dimension<sp/>=<sp/>mesh.SpaceDimension();</highlight></codeline>
|
||
|
|
<codeline lineno="55"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keyword">const</highlight><highlight class="normal"><sp/></highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>count<sp/>=<sp/>vdofs.Size()<sp/>/<sp/>space_dimension;</highlight></codeline>
|
||
|
|
<codeline lineno="56"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>point_matrix.SetSize(space_dimension,<sp/>count);</highlight></codeline>
|
||
|
|
<codeline lineno="57"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>k<sp/>=<sp/>0;<sp/>k<sp/><<sp/>space_dimension;<sp/>++k)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="58"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/></highlight><highlight class="keywordflow">for</highlight><highlight class="normal"><sp/>(</highlight><highlight class="keywordtype">int</highlight><highlight class="normal"><sp/>j<sp/>=<sp/>0;<sp/>j<sp/><<sp/>count;<sp/>++j)<sp/>{</highlight></codeline>
|
||
|
|
<codeline lineno="59"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>point_matrix(k,<sp/>j)<sp/>=<sp/>(*nodes)(vdofs[count<sp/>*<sp/>k<sp/>+<sp/>j]);</highlight></codeline>
|
||
|
|
<codeline lineno="60"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="61"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="62"><highlight class="normal"><sp/><sp/><sp/><sp/><sp/><sp/><sp/><sp/>transformation.SetFE(nodes->FESpace()->GetFE(element));</highlight></codeline>
|
||
|
|
<codeline lineno="63"><highlight class="normal"><sp/><sp/><sp/><sp/>}</highlight></codeline>
|
||
|
|
<codeline lineno="64"><highlight class="normal">}</highlight></codeline>
|
||
|
|
</programlisting>
|
||
|
|
<location file="src/lib/serif/backend/mfem/shared/parallel.cpp"/>
|
||
|
|
</compounddef>
|
||
|
|
</doxygen>
|