Exemplo n.º 1
0
shared_ptr<DiscreteBoundaryOperator<ResultType>>
ElementaryLocalOperator<BasisFunctionType, ResultType>::
    assembleWeakFormInternalImpl2(
        LocalAssembler &assembler,
        const Context<BasisFunctionType, ResultType> &context) const {
#ifdef WITH_TRILINOS
  if (context.assemblyOptions().isSparseStorageOfLocalOperatorsEnabled())
    return shared_ptr<DiscreteBoundaryOperator<ResultType>>(
        assembleWeakFormInSparseMode(assembler, context.assemblyOptions())
            .release());
#endif
  return shared_ptr<DiscreteBoundaryOperator<ResultType>>(
      assembleWeakFormInDenseMode(assembler, context.assemblyOptions())
          .release());
}
shared_ptr<DiscreteBoundaryOperator<ResultType> >
HypersingularIntegralOperator<BasisFunctionType, KernelType, ResultType>::
assembleWeakFormInternal(
        LocalAssembler& standardAssembler, LocalAssembler& offDiagonalAssembler,
        const Context<BasisFunctionType, ResultType>& context) const
{
    switch (context.assemblyOptions().assemblyMode()) {
    case AssemblyOptions::DENSE:
        return shared_ptr<DiscreteBoundaryOperator<ResultType> >(
                    assembleWeakFormInDenseMode(standardAssembler, context).release());
    case AssemblyOptions::ACA:
        return shared_ptr<DiscreteBoundaryOperator<ResultType> >(
                    assembleWeakFormInAcaMode(
                        standardAssembler, offDiagonalAssembler, context).release());
    default:
        throw std::runtime_error(
                    "HypersingularIntegralOperator::assembleWeakFormInternalImpl(): "
                    "invalid assembly mode");
    }
}