Skip to content
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

Unify compile-time complex and real builds as run-time options in a single build #4099

Open
1 of 5 tasks
williamfgc opened this issue Jul 6, 2022 · 4 comments
Open
1 of 5 tasks
Assignees

Comments

@williamfgc
Copy link
Contributor

williamfgc commented Jul 6, 2022

Is your feature request related to a problem? Please describe.

Currently QMCPACK separates real and complex functionality at compile-time. Thus, stakeholders need to create two separate executables to test, deploy and develop functionality.

Describe the solution you'd like
The long term goal is to unify these real/complex compile-time build options into a single build that can take equivalent runtime options.

Describe alternatives you've considered
Since these involve invasive changes in the entire codebase tackling compile-time conditionals e.g. #ifdef QMC_COMPLEX, there are a few steps that need to be accounted for. If possible, break down the effort into smaller tasks.

  • Explore how many places need to be modified. This gist contains information extracted for #ifdef QMC_COMPLEX
  • Initially replace #ifdef QMC_COMPLEX by a proper variable at the qmcapp.cpp main level and propagate through the qmcplusplus namespace. This should not be an invasive and breaking change.
  • Explore more invasive changes: at the template level in QMCPACK internal functionality and CMake's build system configuration level
  • Explore testing options (separate real and complex tests).
  • Allow the runtime option at the top-most level (e.g. configuration xml file header)

Additional context
This issue tracks efforts and discussion related to this integration.

@prckent
Copy link
Contributor

prckent commented Jul 6, 2022

I suggest to add the runtime option next. Then adapt code starting at the lowest levels of the app that connects to it, as per the other tasks.

There are many if (QMC_COMPLEX) in the cmake test config that can be converted to dedicated complex mode tests.

@williamfgc
Copy link
Contributor Author

@prckent @ye-luo what would be a good place for a runtime configuration option tracking real, complex, and precision (full, mixed):

@williamfgc williamfgc self-assigned this Jul 12, 2022
@prckent
Copy link
Contributor

prckent commented Jul 14, 2022

These are all reasonable candidates. I would suggest ProjectData, but whatever turns out to be not too inconvenient is fine by me. There are a few too many too level objects with not sharply enough defined roles imo.

@prckent
Copy link
Contributor

prckent commented Aug 15, 2022

Also related to #4062 , which could be split when this is completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants