Skip to content

Commit

Permalink
OrthoefeChanges in EFEOverlapMatrix
Browse files Browse the repository at this point in the history
  • Loading branch information
Avirup Sircar committed Apr 10, 2024
1 parent 6d7ef43 commit 0d30446
Show file tree
Hide file tree
Showing 11 changed files with 442 additions and 371 deletions.
6 changes: 0 additions & 6 deletions src/basis/EFEBasisDataStorage.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,12 +174,6 @@ namespace dftefe
virtual std::shared_ptr<const quadrature::QuadratureRuleContainer>
getQuadratureRuleContainer() const = 0;

// ---- Only for Orthogonalized EFE basis--------

virtual const quadrature::QuadratureValuesContainer<ValueTypeBasisData,
memorySpace> &
getEnrichmentFunctionClassicalComponentQuadValues() const = 0;

}; // end of EFEBasisDataStorage
} // end of namespace basis
} // end of namespace dftefe
Expand Down
9 changes: 0 additions & 9 deletions src/basis/EFEBasisDataStorageDealii.h
Original file line number Diff line number Diff line change
Expand Up @@ -189,12 +189,6 @@ namespace dftefe
std::shared_ptr<const quadrature::QuadratureRuleContainer>
getQuadratureRuleContainer() const override;

// ---- Only for Orthogonalized EFE basis--------

const quadrature::QuadratureValuesContainer<ValueTypeBasisData,
memorySpace> &
getEnrichmentFunctionClassicalComponentQuadValues() const override;

private:
bool d_evaluateBasisData;
std::shared_ptr<const EFEBasisDofHandlerDealii<ValueTypeBasisCoeff,
Expand All @@ -219,9 +213,6 @@ namespace dftefe
std::vector<size_type> d_cellStartIdsBasisGradientQuadStorage;
std::vector<size_type> d_cellStartIdsBasisHessianQuadStorage;
std::vector<size_type> d_cellStartIdsGradNiGradNj;
std::shared_ptr<
quadrature::QuadratureValuesContainer<ValueTypeBasisData, memorySpace>>
d_basisClassicalInterfaceQuadValues;
};
} // end of namespace basis
} // end of namespace dftefe
Expand Down
334 changes: 121 additions & 213 deletions src/basis/EFEBasisDataStorageDealii.t.cpp

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/basis/EFEBasisDofHandlerDealii.t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ namespace dftefe
d_isDistributed = true;
// Create Classical FE dof_handler
d_enrichClassIntfce = enrichmentClassicalInterface;
d_isOrthogonalized = enrichmentClassicalInterface->isOrthgonalized();
d_isOrthogonalized = enrichmentClassicalInterface->isOrthogonalized();
d_atomSphericalDataContainer =
enrichmentClassicalInterface->getAtomSphericalDataContainer();
d_atomSymbolVec = enrichmentClassicalInterface->getAtomSymbolVec();
Expand Down
309 changes: 247 additions & 62 deletions src/basis/EFEOverlapOperatorContext.t.cpp

Large diffs are not rendered by default.

10 changes: 2 additions & 8 deletions src/basis/EnrichmentClassicalInterfaceSpherical.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,11 +179,8 @@ namespace dftefe
std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
getLinAlgOpContext() const;

const linearAlgebra::MultiVector<ValueTypeBasisData, memorySpace> &
getBasisInterfaceCoeff() const;

bool
isOrthgonalized() const;
isOrthogonalized() const;

std::vector<std::string>
getAtomSymbolVec() const;
Expand Down Expand Up @@ -221,10 +218,7 @@ namespace dftefe
std::shared_ptr<const atoms::AtomSphericalDataContainer>
d_atomSphericalDataContainer;
std::shared_ptr<const TriangulationBase> d_triangulation;
std::shared_ptr<
linearAlgebra::MultiVector<ValueTypeBasisData, memorySpace>>
d_basisInterfaceCoeff;
bool d_isOrthogonalized;
bool d_isOrthogonalized;
std::shared_ptr<
const FEBasisDofHandler<ValueTypeBasisData, memorySpace, dim>>
d_cfeBasisDofHandler;
Expand Down
42 changes: 13 additions & 29 deletions src/basis/EnrichmentClassicalInterfaceSpherical.t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ namespace dftefe
, d_atomCoordinatesVec(atomCoordinatesVec)
, d_fieldName(fieldName)
, d_overlappingEnrichmentIdsInCells(0)
, d_basisInterfaceCoeff(nullptr)
, d_linAlgOpContext(linAlgOpContext)
{
d_isOrthogonalized = true;
Expand Down Expand Up @@ -159,7 +158,7 @@ namespace dftefe
// integrateWithBasisValues( homogeneous BC). Form quadRuleContainer for
// Pristine enrichment. Form OperatorContext object for OverlapMatrix.
// Form L2ProjectionLinearSolverContext.
// Get the multiVector for d_basisInterfaceCoeff.
// Get the multiVector for basisInterfaceCoeff.

// Form the quadValuesContainer for pristine enrichment N_A
// quadValuesEnrichmentFunction
Expand Down Expand Up @@ -200,12 +199,14 @@ namespace dftefe
global_size_type nTotalEnrichmentIds =
d_enrichmentIdsPartition->nTotalEnrichmentIds();

d_basisInterfaceCoeff = std::make_shared<
linearAlgebra::MultiVector<ValueTypeBasisData, memorySpace>>(
d_cfeBasisManager->getMPIPatternP2P(),
linAlgOpContext,
nTotalEnrichmentIds,
ValueTypeBasisData());
std::shared_ptr<
linearAlgebra::MultiVector<ValueTypeBasisData, memorySpace>>
basisInterfaceCoeff = std::make_shared<
linearAlgebra::MultiVector<ValueTypeBasisData, memorySpace>>(
d_cfeBasisManager->getMPIPatternP2P(),
linAlgOpContext,
nTotalEnrichmentIds,
ValueTypeBasisData());

quadrature::QuadratureValuesContainer<ValueTypeBasisData, memorySpace>
quadValuesEnrichmentFunction(
Expand Down Expand Up @@ -297,7 +298,7 @@ namespace dftefe
profiler);

CGSolve->solve(*linearSolverFunction);
linearSolverFunction->getSolution(*d_basisInterfaceCoeff);
linearSolverFunction->getSolution(*basisInterfaceCoeff);

// // Can also do via the M^(-1) route withot solving CG.

Expand Down Expand Up @@ -329,7 +330,7 @@ namespace dftefe
// *cfeBasisOverlapOperator,
// linAlgOpContext);

// MInvContext->apply(d,*d_basisInterfaceCoeff);
// MInvContext->apply(d,*basisInterfaceCoeff);

// populate a unordered_map<id, <vec1, vec2>> i.e. map from enrichedId ->
// pair(localId, coeff)
Expand All @@ -341,7 +342,7 @@ namespace dftefe
utils::MemoryTransfer<utils::MemorySpace::HOST, memorySpace>::copy(
nTotalEnrichmentIds * d_cfeBasisManager->nLocal(),
basisInterfaceCoeffSTL.data(),
d_basisInterfaceCoeff->data());
basisInterfaceCoeff->data());

d_enrichmentIdToClassicalLocalIdMap.clear();
d_enrichmentIdToInterfaceCoeffMap.clear();
Expand Down Expand Up @@ -397,7 +398,6 @@ namespace dftefe
, d_fieldName(fieldName)
, d_triangulation(triangulation)
, d_overlappingEnrichmentIdsInCells(0)
, d_basisInterfaceCoeff(nullptr)
, d_linAlgOpContext(nullptr)
{
d_isOrthogonalized = false;
Expand Down Expand Up @@ -589,29 +589,13 @@ namespace dftefe
return d_linAlgOpContext;
}

template <typename ValueTypeBasisData,
utils::MemorySpace memorySpace,
size_type dim>
const linearAlgebra::MultiVector<ValueTypeBasisData, memorySpace> &
EnrichmentClassicalInterfaceSpherical<ValueTypeBasisData,
memorySpace,
dim>::getBasisInterfaceCoeff() const
{
if (!d_isOrthogonalized)
utils::throwException(
false,
"Cannot call getBasisInterfaceCoeff() for no orthogonalization of EFE mesh.");

return *d_basisInterfaceCoeff;
}

template <typename ValueTypeBasisData,
utils::MemorySpace memorySpace,
size_type dim>
bool
EnrichmentClassicalInterfaceSpherical<ValueTypeBasisData,
memorySpace,
dim>::isOrthgonalized() const
dim>::isOrthogonalized() const
{
return d_isOrthogonalized;
}
Expand Down
6 changes: 5 additions & 1 deletion src/basis/FEBasisManager.t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -619,9 +619,13 @@ namespace dftefe
{
std::vector<global_size_type> vecGlobalNodeId(0);
d_feBDH->getCellDofsGlobalIds(cellId, vecGlobalNodeId);
vecLocalNodeId.clear();
vecLocalNodeId.resize(vecGlobalNodeId.size(), 0);
size_type count = 0;
for (auto i : vecGlobalNodeId)
{
vecLocalNodeId.push_back(globalToLocalIndex(i));
vecLocalNodeId[count] = globalToLocalIndex(i);
count++;
}
}

Expand Down
3 changes: 3 additions & 0 deletions src/utils/OptimizedIndexSet.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ namespace dftefe
bool
operator==(const OptimizedIndexSet<T> &rhs) const;

const std::vector<T> &
getContiguousRanges() const;

private:
/// Store the number of contiguous ranges in the input set of indices
size_type d_numContiguousRanges;
Expand Down
8 changes: 8 additions & 0 deletions src/utils/OptimizedIndexSet.t.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,5 +134,13 @@ namespace dftefe
else
return (d_contiguousRanges == rhs.d_contiguousRanges);
}

template <typename T>
const std::vector<T> &
OptimizedIndexSet<T>::getContiguousRanges() const
{
return d_contiguousRanges;
}

} // end of namespace utils
} // end of namespace dftefe
84 changes: 42 additions & 42 deletions test/basis/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,69 +12,69 @@ add_subdirectory(${MAIN_PROJECT_DIR}/src/atoms ${MAIN_PROJECT_DIR}/test/basis/li
add_subdirectory(${MAIN_PROJECT_DIR}/src/quadrature ${MAIN_PROJECT_DIR}/test/basis/lib/buildQuadrature)
add_subdirectory(${MAIN_PROJECT_DIR}/src/linearAlgebra ${MAIN_PROJECT_DIR}/test/linearAlgebra/lib/buildLinearAlgebra)

add_executable(TestAdaptiveQuad TestAdaptiveQuad.cpp )
target_link_libraries(TestAdaptiveQuad PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestAdaptiveQuad PROPERTIES OUTPUT_NAME "TestAdaptiveQuad" SUFFIX ".x")
# add_executable(TestAdaptiveQuad TestAdaptiveQuad.cpp )
# target_link_libraries(TestAdaptiveQuad PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestAdaptiveQuad PROPERTIES OUTPUT_NAME "TestAdaptiveQuad" SUFFIX ".x")

add_executable(TestAtomIdsPartitionSerial TestAtomIdsPartitionSerial.cpp )
target_link_libraries(TestAtomIdsPartitionSerial PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestAtomIdsPartitionSerial PROPERTIES OUTPUT_NAME "TestAtomIdsPartitionSerial" SUFFIX ".x")
# add_executable(TestAtomIdsPartitionSerial TestAtomIdsPartitionSerial.cpp )
# target_link_libraries(TestAtomIdsPartitionSerial PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestAtomIdsPartitionSerial PROPERTIES OUTPUT_NAME "TestAtomIdsPartitionSerial" SUFFIX ".x")

add_executable(TestBasisStorageSerialTria TestBasisStorageSerialTria.cpp )
target_link_libraries(TestBasisStorageSerialTria PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestBasisStorageSerialTria PROPERTIES OUTPUT_NAME "TestBasisStorageSerialTria" SUFFIX ".x")
# add_executable(TestBasisStorageSerialTria TestBasisStorageSerialTria.cpp )
# target_link_libraries(TestBasisStorageSerialTria PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestBasisStorageSerialTria PROPERTIES OUTPUT_NAME "TestBasisStorageSerialTria" SUFFIX ".x")

add_executable(TestHomogeneousConstraintMatrix TestHomogeneousConstraintMatrix.cpp )
target_link_libraries(TestHomogeneousConstraintMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestHomogeneousConstraintMatrix PROPERTIES OUTPUT_NAME "TestHomogeneousConstraintMatrix" SUFFIX ".x")
# add_executable(TestHomogeneousConstraintMatrix TestHomogeneousConstraintMatrix.cpp )
# target_link_libraries(TestHomogeneousConstraintMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestHomogeneousConstraintMatrix PROPERTIES OUTPUT_NAME "TestHomogeneousConstraintMatrix" SUFFIX ".x")

add_executable(TestInhomogeneousConstraintMatrix TestInhomogeneousConstraintMatrix.cpp )
target_link_libraries(TestInhomogeneousConstraintMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestInhomogeneousConstraintMatrix PROPERTIES OUTPUT_NAME "TestInhomogeneousConstraintMatrix" SUFFIX ".x")
# add_executable(TestInhomogeneousConstraintMatrix TestInhomogeneousConstraintMatrix.cpp )
# target_link_libraries(TestInhomogeneousConstraintMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestInhomogeneousConstraintMatrix PROPERTIES OUTPUT_NAME "TestInhomogeneousConstraintMatrix" SUFFIX ".x")

add_executable(TestEnrichmentIdsPartitionSerial TestEnrichmentIdsPartitionSerial.cpp )
target_link_libraries(TestEnrichmentIdsPartitionSerial PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestEnrichmentIdsPartitionSerial PROPERTIES OUTPUT_NAME "TestEnrichmentIdsPartitionSerial" SUFFIX ".x")
# add_executable(TestEnrichmentIdsPartitionSerial TestEnrichmentIdsPartitionSerial.cpp )
# target_link_libraries(TestEnrichmentIdsPartitionSerial PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestEnrichmentIdsPartitionSerial PROPERTIES OUTPUT_NAME "TestEnrichmentIdsPartitionSerial" SUFFIX ".x")

add_executable(TestInterpolateWithBasisGradient TestInterpolateWithBasisGradient.cpp )
target_link_libraries(TestInterpolateWithBasisGradient PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestInterpolateWithBasisGradient PROPERTIES OUTPUT_NAME "TestInterpolateWithBasisGradient" SUFFIX ".x")
# add_executable(TestInterpolateWithBasisGradient TestInterpolateWithBasisGradient.cpp )
# target_link_libraries(TestInterpolateWithBasisGradient PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestInterpolateWithBasisGradient PROPERTIES OUTPUT_NAME "TestInterpolateWithBasisGradient" SUFFIX ".x")

add_executable(TestTriangulationDealiiSerial TestTriangulationDealiiSerial.cpp)
target_link_libraries(TestTriangulationDealiiSerial PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestTriangulationDealiiSerial PROPERTIES OUTPUT_NAME "TestTriangulationDealiiSerial" SUFFIX ".x")
# add_executable(TestTriangulationDealiiSerial TestTriangulationDealiiSerial.cpp)
# target_link_libraries(TestTriangulationDealiiSerial PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestTriangulationDealiiSerial PROPERTIES OUTPUT_NAME "TestTriangulationDealiiSerial" SUFFIX ".x")


if(ENABLE_MPI)

add_compile_definitions(DFTEFE_WITH_MPI)

add_executable(TestAtomIdsPartitionParallel TestAtomIdsPartitionParallel.cpp )
target_link_libraries(TestAtomIdsPartitionParallel PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestAtomIdsPartitionParallel PROPERTIES OUTPUT_NAME "TestAtomIdsPartitionParallel" SUFFIX ".x")
# add_executable(TestAtomIdsPartitionParallel TestAtomIdsPartitionParallel.cpp )
# target_link_libraries(TestAtomIdsPartitionParallel PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestAtomIdsPartitionParallel PROPERTIES OUTPUT_NAME "TestAtomIdsPartitionParallel" SUFFIX ".x")

add_executable(TestCFEOverlapMatrix TestCFEOverlapMatrix.cpp )
target_link_libraries(TestCFEOverlapMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestCFEOverlapMatrix PROPERTIES OUTPUT_NAME "TestCFEOverlapMatrix" SUFFIX ".x")
# add_executable(TestCFEOverlapMatrix TestCFEOverlapMatrix.cpp )
# target_link_libraries(TestCFEOverlapMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestCFEOverlapMatrix PROPERTIES OUTPUT_NAME "TestCFEOverlapMatrix" SUFFIX ".x")

add_executable(TestClassicalEnrichmentIdsMPICommunication TestClassicalEnrichmentIdsMPICommunication.cpp)
target_link_libraries(TestClassicalEnrichmentIdsMPICommunication PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestClassicalEnrichmentIdsMPICommunication PROPERTIES OUTPUT_NAME "TestClassicalEnrichmentIdsMPICommunication" SUFFIX ".x")
# add_executable(TestClassicalEnrichmentIdsMPICommunication TestClassicalEnrichmentIdsMPICommunication.cpp)
# target_link_libraries(TestClassicalEnrichmentIdsMPICommunication PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestClassicalEnrichmentIdsMPICommunication PROPERTIES OUTPUT_NAME "TestClassicalEnrichmentIdsMPICommunication" SUFFIX ".x")

add_executable(TestEFEOverlapMatrix TestEFEOverlapMatrix.cpp )
target_link_libraries(TestEFEOverlapMatrix PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestEFEOverlapMatrix PROPERTIES OUTPUT_NAME "TestEFEOverlapMatrix" SUFFIX ".x")

add_executable(TestEnrichmentBasisManager TestEnrichmentBasisManager.cpp )
target_link_libraries(TestEnrichmentBasisManager PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestEnrichmentBasisManager PROPERTIES OUTPUT_NAME "TestEnrichmentBasisManager" SUFFIX ".x")
# add_executable(TestEnrichmentBasisManager TestEnrichmentBasisManager.cpp )
# target_link_libraries(TestEnrichmentBasisManager PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestEnrichmentBasisManager PROPERTIES OUTPUT_NAME "TestEnrichmentBasisManager" SUFFIX ".x")

add_executable(TestEnrichmentIdsPartitionParallel TestEnrichmentIdsPartitionParallel.cpp )
target_link_libraries(TestEnrichmentIdsPartitionParallel PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestEnrichmentIdsPartitionParallel PROPERTIES OUTPUT_NAME "TestEnrichmentIdsPartitionParallel" SUFFIX ".x")
# add_executable(TestEnrichmentIdsPartitionParallel TestEnrichmentIdsPartitionParallel.cpp )
# target_link_libraries(TestEnrichmentIdsPartitionParallel PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestEnrichmentIdsPartitionParallel PROPERTIES OUTPUT_NAME "TestEnrichmentIdsPartitionParallel" SUFFIX ".x")

add_executable(TestOrthoEnrichmentBasisManager TestOrthoEnrichmentBasisManager.cpp )
target_link_libraries(TestOrthoEnrichmentBasisManager PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
set_target_properties(TestOrthoEnrichmentBasisManager PROPERTIES OUTPUT_NAME "TestOrthoEnrichmentBasisManager" SUFFIX ".x")
# add_executable(TestOrthoEnrichmentBasisManager TestOrthoEnrichmentBasisManager.cpp )
# target_link_libraries(TestOrthoEnrichmentBasisManager PUBLIC dft-efe-basis dft-efe-utils dft-efe-quadrature dft-efe-linalg dft-efe-atoms)
# set_target_properties(TestOrthoEnrichmentBasisManager PROPERTIES OUTPUT_NAME "TestOrthoEnrichmentBasisManager" SUFFIX ".x")

endif()

0 comments on commit 0d30446

Please sign in to comment.