-
Notifications
You must be signed in to change notification settings - Fork 324
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Give option to exclude compiling internal UMFPACK in cmake #578
Comments
I hope you don't mind me asking which issues those are. |
Add new CMake variable `WITH_UMFPACK` which can be used to build without using any functions from the UMFPACK library. The default for this new variable is `TRUE` so there is no difference in the build configuration to before unless a user explicitly configure with, e.g., `-DWITH_UMFPACK=OFF`. This probably fixes the issue described in ElmerCSC#578.
Add new CMake variable `WITH_UMFPACK` which can be used to build without using any functions from the UMFPACK library. The default for this new variable is `TRUE` so there is no difference in the build configuration to before unless a user explicitly configures with, e.g., `-DWITH_UMFPACK=OFF`. This probably fixes the issue described in ElmerCSC#578.
The changes from #579 should allow building without UMFPACK. |
It's not actually clear what is causing the incompatibility. The passage about picky compilers was weird humor that has no place in github issues, sorry about that. The reasoning about giving an option to disable internal umfpack even without external is that
Do we assume internally in some parts of elmer the existence of UMFPACK or is it just in the solvers? Currently there is a crude workaround at 778d9a3 where this issue stemmed from:
|
There is an unconditional dependence to umfpack within VankaCreate.F90 in "CircutPrec()" ,
i guess this could be relatively easily replaced by something more general...
Nothing else springs to mind atm...
|
Thank you for clarifying. True. UMFPACK (even the current upstream version) relies heavily on the respective BLAS and LAPACK implementations for parallelization. It isn't multi-threaded by itself if I understand correctly. The compilation error you are seeing is odd. It looks like it is complaining about two conflicting type definitions in the same header?? That is odd indeed. |
* On a supercomputer, there is no point in having a non-parallel direct solver.
This might also not always be so, even if you are running MPI parallel, each task might
have something to solve partitionwise (as in "CircuitPrec()"), for example. Thinking about it,
I perhaps would be reluctant to not to have an always available robust linear solver
for elmer solver...
|
Am I mistaken to conclude that the conflicting type definition is something platform-specific and not able to be fixed in what comes to the umfpack included in Elmer? We experience the error on a HPE-Cray system with the Cray-CCE compiler set. |
I'm not sure I understand the compiler error message correctly. It looks like it is referring to a conflicting type definition. But the locations that the error message presents look like they are from the same file and even the same line in that file. It might be that the line that it presents looks different because it is pre-processed for one and the "raw" source code for the other? Maybe for some reason that header is included twice (and the inclusion guard isn't working for some reason). Does the issue go away if you add that flag to |
The problem appears to be in the combination of specific cray programming environment modules where Since we don't hopefully need fsid_t, I suggest we just use the workaround 778d9a3 mentioned earlier in devel. The following code reproduces the bug with typedef struct { int __val[2]; } __fsid_t;
typedef __fsid_t fsid_t;
int main(int argc, char** argv) {
return 0;
} |
Add new CMake variable `WITH_UMFPACK` which can be used to build without using any functions from the UMFPACK library. The default for this new variable is `TRUE` so there is no difference in the build configuration to before unless a user explicitly configures with, e.g., `-DWITH_UMFPACK=OFF`. This probably fixes the issue described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources. Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
This issue seems to be caused by the fact that the build rules of UMFPACK (and AMD) are preprocessing the original sources with a different set of flags than when compiling. The situation with the Cray compiler might not be the only affected build toolchain. (Theoretically, doing that could result in a "successful" compilation but undefined (or unexpected) behavior on runtime.) The changes proposed in #587 avoid the separate preprocessing step entirely by using CMake object libraries to build parts of the sources for the "actual" libraries with different sets of preprocessor flags. Do you still see the issues from here with the changes from PR #587? |
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Avoid manually preprocessing the source files. Some compiler flags can easily be missed which can lead to compilation issues with the preprocessed sources (see ElmerCSC#578). Instead, use object libraries to build the same source files with different flags. Potentially fixes the build issues described in ElmerCSC#578.
Elmer internal UMFPACK is not needed on supercomputing platforms and may cause problems with picky compiler stacks.
There should be a cmake build variable e.g.
DISABLE_INTERNAL_UMFPACK
which would disable compiling UMFPACK.Changes would probably include:
#define HAVE_UMFPACK
infem/config.h.cmake
to#cmakedefine @HAVE_UMFPACK@
CMakeLists.txt
in few placesThe text was updated successfully, but these errors were encountered: