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 }