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
00027
00028
00029
00030
00031 #include "SundanceOut.hpp"
00032 #include "PlayaTabs.hpp"
00033 #include "SundanceVectorAssemblyKernel.hpp"
00034 #include "Teuchos_Time.hpp"
00035 #include "Teuchos_TimeMonitor.hpp"
00036
00037
00038 using namespace Sundance;
00039 using namespace Sundance;
00040 using namespace Sundance;
00041 using namespace Teuchos;
00042 using namespace Playa;
00043 using std::setw;
00044 using std::endl;
00045
00046 VectorAssemblyKernel::VectorAssemblyKernel(
00047 const Array<RCP<DOFMapBase> >& dofMap,
00048 const Array<RCP<Array<int> > >& isBCIndex,
00049 const Array<int>& lowestLocalIndex,
00050 Array<Vector<double> >& b,
00051 bool partitionBCs,
00052 int verb
00053 )
00054 : VectorFillingAssemblyKernel(dofMap, isBCIndex, lowestLocalIndex,
00055 b, partitionBCs, verb)
00056 {}
00057
00058
00059 void VectorAssemblyKernel::fill(
00060 bool isBC,
00061 const IntegralGroup& group,
00062 const RCP<Array<double> >& localValues)
00063 {
00064 Tabs tab0;
00065 SUNDANCE_MSG1(verb(), tab0 << "in VectorAssemblyKernel::fill()");
00066
00067 TEUCHOS_TEST_FOR_EXCEPT(!group.isOneForm());
00068
00069 bool useCofacets = group.usesMaximalCofacets();
00070
00071 if (group.isOneForm())
00072 {
00073 insertLocalVectorBatch(isBC, useCofacets,
00074 group.testID(), group.testBlock(), group.mvIndices(),
00075 *localValues);
00076 }
00077
00078 SUNDANCE_MSG1(verb(), tab0 << "done VectorAssemblyKernel::fill()");
00079 }
00080
00081
00082 void VectorAssemblyKernel:: prepareForWorkSet(
00083 const Array<Set<int> >& requiredTests,
00084 const Array<Set<int> >& ,
00085 RCP<StdFwkEvalMediator> mediator)
00086 {
00087 Tabs tab0;
00088 SUNDANCE_MSG1(verb(), tab0
00089 << "in VectorAssemblyKernel::prepareForWorkSet()");
00090 IntegrationCellSpecifier intCellSpec = mediator->integrationCellSpec();
00091 buildLocalDOFMaps(mediator, intCellSpec, requiredTests);
00092 SUNDANCE_MSG1(verb(), tab0 << "done VectorAssemblyKernel::prepareForWorkSet()");
00093 }