Coder Social home page Coder Social logo

mrchemsoft / mrchem Goto Github PK

View Code? Open in Web Editor NEW
27.0 27.0 21.0 85.67 MB

MultiResolution Chemistry

License: GNU Lesser General Public License v3.0

CMake 1.60% Python 44.93% C++ 47.88% Shell 0.66% C 0.06% BASIC 0.52% FreeBasic 0.02% Visual Basic 6.0 4.33%
c-plus-plus chemistry computational-chemistry density-functional-theory multiwavelets physics python

mrchem's People

Contributors

bast avatar bjorgve avatar brakjen avatar dependabot[bot] avatar gabrielgerez avatar gitpeterwind avatar ilfreddy avatar moritzgubler avatar msnik1999 avatar robertodr avatar stigrj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mrchem's Issues

Parsing of default DFT functionals fails on Travis

The input shortcut for the default functionals

WaveFunction {
  method = PBE0
}

instead of the explicit version

WaveFunction {
  method = DFT
}

DFT {
  $functionals
  EXX    0.25
  PBEX   0.75
  PBEC   1.00
  $end
}

fails on Travis and on @ilfreddy's mac, but works on CircleCI and on @stigrj's linux.

Cleanup ResponseCalculations class

And still unrelated, but probably relevant. The ResponseCalculations object is quite confusing: it just wraps a std::vector<ResponseCalculation> and I think that is unnecessary. It should undergo the same makeover OrbitalVector got over the summer.

To summarize, the final implementation for calcLinearResponseProerties should just loop over the response calculations, dispatch the respective perturbed orbitals and property gradients to the right compute methods and store the results where appropriate.

Originally posted by @robertodr in #161

Explicit electric field

Add input driven finite electric field for calculation of e.g. electric polarizability through finite differences

DFT open shell input

The MRChem input requires an explicit variable to use a spin-sparated functional. For open-shell systems, a separated functional should be the default, whereas the spin-restricted one might be activated in special circumstances (e.g. test against NIST results).

Default values in input handling shall be changed.

Initial guess solver

We need a completely autonomous initial guess solver that works for arbitrary molecules and atom types (at the very least up to second row elements)

Complex functions

It seems to me we need a bit of functionality to handle complex functions more smoothly than we do now. As far as I can see QMFunctions now have a real and an imaginary part, which are two FunctionTree<3> objects. All the complex arithmetics is handled by the routines in qmfunctions.cpp, but at present only for the Orbital class.
I need similar functionality for a Density class now, because response densities can be complex-valued. Duplicating functionality is not a good idea so I can see two options.

Easy one: move low-level parts of the Orbitalroutines to QMFunction routines and then let the corresponding Orbital and Density classes (or standalone routines) handle the metadata on top.

Difficult one (for me at least): allow MRCPP to handle complex functions the way QMFunction does now. QMFunction can then have such an object instead of real and imag.

Comment: for this to work smoothly all objects must be created by the derived class routines and the QMFunction routines will access them as pass-by-reference. Unless for some fundamental reason this does not work.

Example for the multiplication of two orbitals:

This routine
Orbital multiply(Orbital inp_a, Orbital inp_b, double prec)
will: create the output object, handle the metadata, do sanity checks (if necessary) and then call the following routine:
qmfunction::multiply(prec, out, 1.0, inp_a, inp_a.conjugate(), inp_b, inp_b.conjugate())
which will handle all the complex-valued arithmetics.

Error: no operator "<<" matches these op erands

I issued the following commands:

$ git clone [email protected]:MRChemSoft/mrchem.git
$ cd mrchem
$ ./setup --cc=icc --cxx=icpc
$ cd build
$ make

The compilation stops with

[ 11%] Building CXX object C++/CMakeFiles/getkw.dir/Getkw.cpp.o
/home/raul/builds/mrchem/external/libgetkw/C++/Getkw.cpp(87): error: no operator "<<" matches these operands
            operand types are: std::ostream << std::ostream
  	cout << repr(cout) << endl;

(Full output here.)
I'm using Intel Parallel Studio 17.0.2. What could be the reason for the compilation error?

Hybrid DFT

The exact_exchange factor (e.g. 20% for B3LYP) is apparently not picked up, so we always get full HF exchange. Could also be that the corresponding 80% factor is not passed correctly to XCFun. In any case we get way too much exchange in hybrid calculations.

#pragma once

Is there any reason we do not use "#pragma once", instead of the complicated
#ifndef XXX_H
#define XXX_H
#endif XXX_H

If there are no objections, I can replace all those.

Optimize calculation of kinetic energy matrix

The current MPI version of kinetic energy matrix is not optimal: each MPI process need to compute the derivatives for all orbitals. A better approach would be that each MPI computes its own derivatives, and then only the derivatives are sent. No need to send orbitals, since these are only used to make the derivatives.
This does not fit in the way the routine is called now, so a new routine would be required.

Unit tests vs integration tests

I think we should differentiate between unit and integration tests. As we expand functionality the integration tests will become more and longer, and I'm not sure we should run them all the time. I recently created a Finite Differences (FD) test and a response test. They are both with Li (not exactly a large system...), and the response test does not even run the SCF (it keeps the starting guess as the GS). Still they take 6 min each on my mac.

Reintroduce MPI

Some of the MPI features were not straightforwardly incorporated in the new structure

calcPotential in XCFunctional and XCHessian design

the function calcPotential in XCFunctional is specific to the energy calculations when potentials are needed.

I'm now creating the class for the Hessian, in parallel to XCPotential and to keep the current design I should also add a calcHessian function to XCFunctional. Would it not be better to have such functions in their respective classes, reducing the amount of code XCFunctional is dealing with?

Static code analyzer warnings

Running MRChem through cppcheck 1.80, the code gives out the following warnings, most of which appear to be justified.

$ cppcheck --enable=warning src/
Checking src/mrchem/MREnv.cpp ...
Checking src/mrchem/MREnv.cpp: EIGEN_USE_BLAS...
Checking src/mrchem/MREnv.cpp: HAVE_MPI...
1/86 files checked 1% done
Checking src/mrchem/SCFDriver.cpp ...
2/86 files checked 2% done
Checking src/mrchem/chemistry/Molecule.cpp ...
3/86 files checked 3% done
Checking src/mrchem/chemistry/PeriodicTable.cpp ...
4/86 files checked 4% done
Checking src/mrchem/initial_guess/AOBasis.cpp ...
[src/mrchem/initial_guess/AOBasis.h:6]: (warning) The class 'AOBasis' has 'copy constructor' but lack of 'operator='.
5/86 files checked 5% done
Checking src/mrchem/initial_guess/AOContraction.cpp ...
6/86 files checked 6% done
Checking src/mrchem/initial_guess/Intgrl.cpp ...
7/86 files checked 8% done
Checking src/mrchem/initial_guess/OrbitalExp.cpp ...
8/86 files checked 9% done
Checking src/mrchem/mrchem.cpp ...
9/86 files checked 10% done
Checking src/mrchem/qmfunctions/Density.cpp ...
[src/mrchem/qmfunctions/Density.cpp:25]: (warning) Member variable 'Density::shMem' is not initialized in the constructor.
[src/mrchem/qmfunctions/Density.cpp:34]: (warning) Member variable 'Density::shMem' is not initialized in the constructor.
[src/mrchem/qmfunctions/Density.h:8]: (warning) The class 'Density' has 'copy constructor' but lack of 'operator='.
Checking src/mrchem/qmfunctions/Density.cpp: HAVE_MPI...
10/86 files checked 11% done
Checking src/mrchem/qmfunctions/DensityProjector.cpp ...
[src/mrchem/qmfunctions/QMFunction.h:12]: (warning) Member variable 'QMFunction::re' is not assigned a value in 'QMFunction::operator='.
[src/mrchem/qmfunctions/QMFunction.h:12]: (warning) Member variable 'QMFunction::im' is not assigned a value in 'QMFunction::operator='.
[src/mrchem/qmfunctions/Orbital.h:13]: (warning) Member variable 'Orbital::spin' is not assigned a value in 'Orbital::operator='.
[src/mrchem/qmfunctions/Orbital.h:13]: (warning) Member variable 'Orbital::occupancy' is not assigned a value in 'Orbital::operator='.
[src/mrchem/qmfunctions/Orbital.h:13]: (warning) Member variable 'Orbital::error' is not assigned a value in 'Orbital::operator='.
Checking src/mrchem/qmfunctions/DensityProjector.cpp: HAVE_MPI...
11/86 files checked 12% done
Checking src/mrchem/qmfunctions/NuclearFunction.cpp ...
[src/mrchem/qmfunctions/NuclearFunction.h:10]: (warning) The class 'NuclearFunction' has 'operator=' but lack of 'copy constructor'.
12/86 files checked 13% done
Checking src/mrchem/qmfunctions/Orbital.cpp ...
Checking src/mrchem/qmfunctions/Orbital.cpp: HAVE_MPI...
13/86 files checked 15% done
Checking src/mrchem/qmfunctions/OrbitalAdder.cpp ...
Checking src/mrchem/qmfunctions/OrbitalAdder.cpp: HAVE_MPI...
14/86 files checked 16% done
Checking src/mrchem/qmfunctions/OrbitalMultiplier.cpp ...
Checking src/mrchem/qmfunctions/OrbitalMultiplier.cpp: HAVE_MPI...
15/86 files checked 17% done
Checking src/mrchem/qmfunctions/OrbitalProjector.cpp ...
[src/mrchem/qmfunctions/OrbitalProjector.cpp:143]: (warning) Possible null pointer dereference: gtOrb
Checking src/mrchem/qmfunctions/OrbitalProjector.cpp: HAVE_MPI...
16/86 files checked 18% done
Checking src/mrchem/qmfunctions/OrbitalVector.cpp ...
Checking src/mrchem/qmfunctions/OrbitalVector.cpp: HAVE_MPI...
17/86 files checked 19% done
Checking src/mrchem/qmfunctions/QMFunction.cpp ...
18/86 files checked 20% done
Checking src/mrchem/qmoperators/CoulombPotential.cpp ...
Checking src/mrchem/qmoperators/CoulombPotential.cpp: HAVE_MPI...
19/86 files checked 22% done
Checking src/mrchem/qmoperators/DeltaOperator.cpp ...
20/86 files checked 23% done
Checking src/mrchem/qmoperators/ExchangePotential.cpp ...
[src/mrchem/qmoperators/ExchangePotential.cpp:347] -> [src/mrchem/qmoperators/ExchangePotential.cpp:340]: (warning) Either the condition 'phi_iii!=0' is redundant or there is possible null pointer dereference: phi_iii.
[src/mrchem/qmoperators/ExchangePotential.cpp:342] -> [src/mrchem/qmoperators/ExchangePotential.cpp:340]: (warning) Either the condition 'V_ii!=0' is redundant or there is possible null pointer dereference: V_ii.
[src/mrchem/qmoperators/ExchangePotential.cpp:347] -> [src/mrchem/qmoperators/ExchangePotential.cpp:346]: (warning) Either the condition 'phi_iii!=0' is redundant or there is possible null pointer dereference: phi_iii.
[src/mrchem/qmoperators/ExchangePotential.cpp:407] -> [src/mrchem/qmoperators/ExchangePotential.cpp:393]: (warning) Either the condition 'phi_jij!=0' is redundant or there is possible null pointer dereference: phi_jij.
[src/mrchem/qmoperators/ExchangePotential.cpp:402] -> [src/mrchem/qmoperators/ExchangePotential.cpp:393]: (warning) Either the condition 'V_ij!=0' is redundant or there is possible null pointer dereference: V_ij.
[src/mrchem/qmoperators/ExchangePotential.cpp:412] -> [src/mrchem/qmoperators/ExchangePotential.cpp:399]: (warning) Either the condition 'phi_iij!=0' is redundant or there is possible null pointer dereference: phi_iij.
[src/mrchem/qmoperators/ExchangePotential.cpp:402] -> [src/mrchem/qmoperators/ExchangePotential.cpp:399]: (warning) Either the condition 'V_ij!=0' is redundant or there is possible null pointer dereference: V_ij.
[src/mrchem/qmoperators/ExchangePotential.cpp:407] -> [src/mrchem/qmoperators/ExchangePotential.cpp:406]: (warning) Either the condition 'phi_jij!=0' is redundant or there is possible null pointer dereference: phi_jij.
[src/mrchem/qmoperators/ExchangePotential.cpp:412] -> [src/mrchem/qmoperators/ExchangePotential.cpp:411]: (warning) Either the condition 'phi_iij!=0' is redundant or there is possible null pointer dereference: phi_iij.
[src/mrchem/qmoperators/ExchangePotential.cpp:473] -> [src/mrchem/qmoperators/ExchangePotential.cpp:457]: (warning) Either the condition 'phi_jij!=0' is redundant or there is possible null pointer dereference: phi_jij.
[src/mrchem/qmoperators/ExchangePotential.cpp:468] -> [src/mrchem/qmoperators/ExchangePotential.cpp:457]: (warning) Either the condition 'V_ij!=0' is redundant or there is possible null pointer dereference: V_ij.
[src/mrchem/qmoperators/ExchangePotential.cpp:466] -> [src/mrchem/qmoperators/ExchangePotential.cpp:464]: (warning) Either the condition 'phi_iij!=0' is redundant or there is possible null pointer dereference: phi_iij.
[src/mrchem/qmoperators/ExchangePotential.cpp:468] -> [src/mrchem/qmoperators/ExchangePotential.cpp:464]: (warning) Either the condition 'V_ij!=0' is redundant or there is possible null pointer dereference: V_ij.
[src/mrchem/qmoperators/ExchangePotential.cpp:473] -> [src/mrchem/qmoperators/ExchangePotential.cpp:472]: (warning) Either the condition 'phi_jij!=0' is redundant or there is possible null pointer dereference: phi_jij.
[src/mrchem/qmoperators/ExchangePotential.cpp:523] -> [src/mrchem/qmoperators/ExchangePotential.cpp:517]: (warning) Either the condition 'phi_jij!=0' is redundant or there is possible null pointer dereference: phi_jij.
[src/mrchem/qmoperators/ExchangePotential.cpp:531] -> [src/mrchem/qmoperators/ExchangePotential.cpp:517]: (warning) Either the condition 'V_ij!=0' is redundant or there is possible null pointer dereference: V_ij.
[src/mrchem/qmoperators/ExchangePotential.cpp:523] -> [src/mrchem/qmoperators/ExchangePotential.cpp:522]: (warning) Either the condition 'phi_jij!=0' is redundant or there is possible null pointer dereference: phi_jij.
[src/mrchem/qmoperators/ExchangePotential.cpp:531] -> [src/mrchem/qmoperators/ExchangePotential.cpp:528]: (warning) Either the condition 'V_ij!=0' is redundant or there is possible null pointer dereference: V_ij.
Checking src/mrchem/qmoperators/ExchangePotential.cpp: HAVE_MPI...
21/86 files checked 24% done
Checking src/mrchem/qmoperators/FockOperator.cpp ...
Checking src/mrchem/qmoperators/FockOperator.cpp: HAVE_MPI...
22/86 files checked 25% done
Checking src/mrchem/qmoperators/IdentityOperator.cpp ...
Checking src/mrchem/qmoperators/IdentityOperator.cpp: HAVE_MPI...
23/86 files checked 26% done
Checking src/mrchem/qmoperators/KineticOperator.cpp ...
24/86 files checked 27% done
Checking src/mrchem/qmoperators/QMDerivative.cpp ...
25/86 files checked 29% done
Checking src/mrchem/qmoperators/QMOperator.cpp ...
26/86 files checked 30% done
Checking src/mrchem/qmoperators/QMOperatorExp.cpp ...
Checking src/mrchem/qmoperators/QMOperatorExp.cpp: HAVE_MPI...
27/86 files checked 31% done
Checking src/mrchem/qmoperators/QMPotential.cpp ...
28/86 files checked 32% done
Checking src/mrchem/qmoperators/SpinOperator.cpp ...
29/86 files checked 33% done
Checking src/mrchem/qmoperators/XCFunctional.cpp ...
30/86 files checked 34% done
Checking src/mrchem/qmoperators/XCOperator.cpp ...
31/86 files checked 36% done
Checking src/mrchem/qmoperators/XCPotential.cpp ...
32/86 files checked 37% done
Checking src/mrchem/scf_solver/Accelerator.cpp ...
Checking src/mrchem/scf_solver/Accelerator.cpp: HAVE_MPI...
33/86 files checked 38% done
Checking src/mrchem/scf_solver/EnergyOptimizer.cpp ...
Checking src/mrchem/scf_solver/EnergyOptimizer.cpp: HAVE_MPI...
34/86 files checked 39% done
Checking src/mrchem/scf_solver/GroundStateSolver.cpp ...
Checking src/mrchem/scf_solver/GroundStateSolver.cpp: HAVE_MPI...
35/86 files checked 40% done
Checking src/mrchem/scf_solver/HelmholtzOperatorSet.cpp ...
Checking src/mrchem/scf_solver/HelmholtzOperatorSet.cpp: HAVE_MPI...
36/86 files checked 41% done
Checking src/mrchem/scf_solver/KAIN.cpp ...
Checking src/mrchem/scf_solver/KAIN.cpp: HAVE_MPI...
37/86 files checked 43% done
Checking src/mrchem/scf_solver/LinearResponseSolver.cpp ...
38/86 files checked 44% done
Checking src/mrchem/scf_solver/NonlinearMaximizer.cpp ...
39/86 files checked 45% done
Checking src/mrchem/scf_solver/OrbitalOptimizer.cpp ...
Checking src/mrchem/scf_solver/OrbitalOptimizer.cpp: HAVE_MPI...
40/86 files checked 46% done
Checking src/mrchem/scf_solver/SCF.cpp ...
41/86 files checked 47% done
Checking src/mrcpp/BoundingBox.cpp ...
[src/mrcpp/NodeIndex.h:31]: (warning) Logical disjunction always evaluates to true: d >= 0 || d < 1.
[src/mrcpp/NodeIndex.h:31]: (warning) Logical disjunction always evaluates to true: d >= 0 || d < 2.
[src/mrcpp/NodeIndex.h:31]: (warning) Logical disjunction always evaluates to true: d >= 0 || d < 3.
42/86 files checked 48% done
Checking src/mrcpp/HilbertPath.cpp ...
[src/mrcpp/HilbertPath.h:4]: (warning) The class 'HilbertPath < 1 >' has 'copy constructor' but lack of 'operator='.
[src/mrcpp/HilbertPath.h:4]: (warning) The class 'HilbertPath < 2 >' has 'copy constructor' but lack of 'operator='.
[src/mrcpp/HilbertPath.h:4]: (warning) The class 'HilbertPath < 3 >' has 'copy constructor' but lack of 'operator='.
43/86 files checked 50% done
Checking src/mrcpp/MathUtils.cpp ...
Checking src/mrcpp/MathUtils.cpp: HAVE_MPI...
Checking src/mrcpp/MathUtils.cpp: HAVE_OPENMP...
Checking src/mrcpp/MathUtils.cpp: __INTEL_COMPILER...
44/86 files checked 51% done
Checking src/mrcpp/NodeBox.cpp ...
[src/mrcpp/NodeBox.h:17]: (warning) Member variable 'NodeBox::nOccupied' is not initialized in the constructor.
[src/mrcpp/NodeBox.h:17]: (warning) Member variable 'NodeBox::nodes' is not initialized in the constructor.
45/86 files checked 52% done
Checking src/mrcpp/OperatorStatistics.cpp ...
Checking src/mrcpp/OperatorStatistics.cpp: HAVE_MPI...
Checking src/mrcpp/OperatorStatistics.cpp: HAVE_OPENMP...
46/86 files checked 53% done
Checking src/mrcpp/Plot.cpp ...
[src/mrcpp/Plot.cpp:479]: (warning) Logical disjunction always evaluates to true: p > 1.e-4 || p < 1.e+2.
47/86 files checked 54% done
Checking src/mrcpp/RepresentableFunction.cpp ...
[src/mrcpp/RepresentableFunction.cpp:58]: (warning) Member variable 'RepresentableFunction::bounded' is not assigned a value in 'RepresentableFunction::operator='.
[src/mrcpp/RepresentableFunction.cpp:58]: (warning) Member variable 'RepresentableFunction::A' is not assigned a value in 'RepresentableFunction::operator='.
[src/mrcpp/RepresentableFunction.cpp:58]: (warning) Member variable 'RepresentableFunction::B' is not assigned a value in 'RepresentableFunction::operator='.
48/86 files checked 55% done
Checking src/mrcpp/TelePrompter.cpp ...
[src/mrcpp/Timer.h:9]: (warning) The class 'Timer' has 'operator=' but lack of 'copy constructor'.
Checking src/mrcpp/TelePrompter.cpp: HAVE_MPI...
Checking src/mrcpp/TelePrompter.cpp: HAVE_OPENMP...
49/86 files checked 56% done
Checking src/mrcpp/mwanalytic/GaussExp.cpp ...
50/86 files checked 58% done
Checking src/mrcpp/mwanalytic/GaussFunc.cpp ...
51/86 files checked 59% done
Checking src/mrcpp/mwanalytic/GaussPoly.cpp ...
[src/mrcpp/mwanalytic/GaussPoly.h:22]: (warning) The class 'GaussPoly' has 'copy constructor' but lack of 'operator='.
52/86 files checked 60% done
Checking src/mrcpp/mwanalytic/Gaussian.cpp ...
53/86 files checked 61% done
Checking src/mrcpp/mwanalytic/LegendrePoly.cpp ...
54/86 files checked 62% done
Checking src/mrcpp/mwanalytic/Polynomial.cpp ...
55/86 files checked 63% done
Checking src/mrcpp/mwbuilders/ConvolutionCalculator.cpp ...
56/86 files checked 65% done
Checking src/mrcpp/mwbuilders/DerivativeCalculator.cpp ...
57/86 files checked 66% done
Checking src/mrcpp/mwbuilders/MWFDCalculator.cpp ...
58/86 files checked 67% done
Checking src/mrcpp/mwbuilders/ProjectionCalculator.cpp ...
59/86 files checked 68% done
Checking src/mrcpp/mwbuilders/TreeBuilder.cpp ...
60/86 files checked 69% done
Checking src/mrcpp/mwcore/CrossCorrelation.cpp ...
61/86 files checked 70% done
Checking src/mrcpp/mwcore/CrossCorrelationCache.cpp ...
[src/mrcpp/mwcore/CrossCorrelationCache.h:36]: (warning) Member variable 'CrossCorrelationCache::type' is not assigned a value in 'CrossCorrelationCache::operator='.
[src/mrcpp/mwcore/ObjectCache.h:112]: (warning) Member variable 'ObjectCache < CrossCorrelation >::highWaterMark' is not initialized in the constructor.
[src/mrcpp/mwcore/ObjectCache.h:112]: (warning) Member variable 'ObjectCache < CrossCorrelation >::memLoaded' is not initialized in the constructor.
[src/mrcpp/mwcore/ObjectCache.h:113]: (warning) Member variable 'ObjectCache < CrossCorrelation >::highWaterMark' is not assigned a value in 'ObjectCache < CrossCorrelation >::operator='.
[src/mrcpp/mwcore/ObjectCache.h:113]: (warning) Member variable 'ObjectCache < CrossCorrelation >::memLoaded' is not assigned a value in 'ObjectCache < CrossCorrelation >::operator='.
[src/mrcpp/mwcore/CrossCorrelationCache.h:13]: (warning) The class 'CrossCorrelationCache' has 'operator=' but lack of 'copy constructor'.
[src/mrcpp/mwcore/ObjectCache.h:23]: (warning) The class 'ObjectCache < CrossCorrelation >' has 'operator=' but lack of 'copy constructor'.
Checking src/mrcpp/mwcore/CrossCorrelationCache.cpp: HAVE_OPENMP...
62/86 files checked 72% done
Checking src/mrcpp/mwcore/FilterCache.cpp ...
[src/mrcpp/mwcore/FilterCache.h:61]: (warning) Member variable 'FilterCache::type' is not assigned a value in 'FilterCache::operator='.
[src/mrcpp/mwcore/ObjectCache.h:112]: (warning) Member variable 'ObjectCache < MWFilter >::highWaterMark' is not initialized in the constructor.
[src/mrcpp/mwcore/ObjectCache.h:112]: (warning) Member variable 'ObjectCache < MWFilter >::memLoaded' is not initialized in the constructor.
[src/mrcpp/mwcore/ObjectCache.h:113]: (warning) Member variable 'ObjectCache < MWFilter >::highWaterMark' is not assigned a value in 'ObjectCache < MWFilter >::operator='.
[src/mrcpp/mwcore/ObjectCache.h:113]: (warning) Member variable 'ObjectCache < MWFilter >::memLoaded' is not assigned a value in 'ObjectCache < MWFilter >::operator='.
[src/mrcpp/mwcore/FilterCache.h:41]: (warning) The class 'FilterCache' has 'operator=' but lack of 'copy constructor'.
[src/mrcpp/mwcore/ObjectCache.h:23]: (warning) The class 'ObjectCache < MWFilter >' has 'operator=' but lack of 'copy constructor'.
Checking src/mrcpp/mwcore/FilterCache.cpp: HAVE_OPENMP...
63/86 files checked 73% done
Checking src/mrcpp/mwcore/GaussQuadrature.cpp ...
64/86 files checked 74% done
Checking src/mrcpp/mwcore/InterpolatingBasis.cpp ...
[src/mrcpp/mwcore/QuadratureCache.h:39]: (warning) Member variable 'QuadratureCache::A' is not assigned a value in 'QuadratureCache::operator='.
[src/mrcpp/mwcore/QuadratureCache.h:39]: (warning) Member variable 'QuadratureCache::B' is not assigned a value in 'QuadratureCache::operator='.
[src/mrcpp/mwcore/QuadratureCache.h:39]: (warning) Member variable 'QuadratureCache::intervals' is not assigned a value in 'QuadratureCache::operator='.
[src/mrcpp/mwcore/ObjectCache.h:112]: (warning) Member variable 'ObjectCache < GaussQuadrature >::highWaterMark' is not initialized in the constructor.
[src/mrcpp/mwcore/ObjectCache.h:112]: (warning) Member variable 'ObjectCache < GaussQuadrature >::memLoaded' is not initialized in the constructor.
[src/mrcpp/mwcore/ObjectCache.h:113]: (warning) Member variable 'ObjectCache < GaussQuadrature >::highWaterMark' is not assigned a value in 'ObjectCache < GaussQuadrature >::operator='.
[src/mrcpp/mwcore/ObjectCache.h:113]: (warning) Member variable 'ObjectCache < GaussQuadrature >::memLoaded' is not assigned a value in 'ObjectCache < GaussQuadrature >::operator='.
[src/mrcpp/mwcore/ObjectCache.h:23]: (warning) The class 'ObjectCache < GaussQuadrature >' has 'operator=' but lack of 'copy constructor'.
Checking src/mrcpp/mwcore/InterpolatingBasis.cpp: HAVE_OPENMP...
65/86 files checked 75% done
Checking src/mrcpp/mwcore/LegendreBasis.cpp ...
Checking src/mrcpp/mwcore/LegendreBasis.cpp: HAVE_OPENMP...
66/86 files checked 76% done
Checking src/mrcpp/mwcore/MWFilter.cpp ...
67/86 files checked 77% done
Checking src/mrcpp/mwcore/QuadratureCache.cpp ...
Checking src/mrcpp/mwcore/QuadratureCache.cpp: HAVE_OPENMP...
68/86 files checked 79% done
Checking src/mrcpp/mwoperators/ABGVCalculator.cpp ...
69/86 files checked 80% done
Checking src/mrcpp/mwoperators/ConvolutionOperator.cpp ...
70/86 files checked 81% done
Checking src/mrcpp/mwoperators/CrossCorrelationCalculator.cpp ...
71/86 files checked 82% done
Checking src/mrcpp/mwoperators/HelmholtzKernel.cpp ...
72/86 files checked 83% done
Checking src/mrcpp/mwoperators/MWOperator.cpp ...
73/86 files checked 84% done
Checking src/mrcpp/mwoperators/PHCalculator.cpp ...
74/86 files checked 86% done
Checking src/mrcpp/mwoperators/PoissonKernel.cpp ...
75/86 files checked 87% done
Checking src/mrcpp/mwtrees/FunctionNode.cpp ...
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 1 >::nNodes' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 1 >::maxNodesPerChunk' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 1 >::sizeNodeCoeff' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 1 >::coeffStack' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 1 >::maxNodes' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 2 >::nNodes' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 2 >::maxNodesPerChunk' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 2 >::sizeNodeCoeff' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 2 >::coeffStack' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 2 >::maxNodes' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 3 >::nNodes' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 3 >::maxNodesPerChunk' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 3 >::sizeNodeCoeff' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 3 >::coeffStack' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree < 3 >::maxNodes' is not initialized in the constructor.
Checking src/mrcpp/mwtrees/FunctionNode.cpp: HAVE_OPENMP...
76/86 files checked 88% done
Checking src/mrcpp/mwtrees/FunctionTree.cpp ...
Checking src/mrcpp/mwtrees/FunctionTree.cpp: HAVE_OPENMP...
77/86 files checked 89% done
Checking src/mrcpp/mwtrees/MWNode.cpp ...
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree::nNodes' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree::maxNodesPerChunk' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree::sizeNodeCoeff' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree::coeffStack' is not initialized in the constructor.
[src/mrcpp/mwtrees/SerialTree.h:23]: (warning) Member variable 'SerialTree::maxNodes' is not initialized in the constructor.
Checking src/mrcpp/mwtrees/MWNode.cpp: HAVE_OPENMP...
78/86 files checked 90% done
Checking src/mrcpp/mwtrees/MWTree.cpp ...
Checking src/mrcpp/mwtrees/MWTree.cpp: HAVE_OPENMP...
79/86 files checked 91% done
Checking src/mrcpp/mwtrees/OperatorNode.cpp ...
Checking src/mrcpp/mwtrees/OperatorNode.cpp: HAVE_OPENMP...
80/86 files checked 93% done
Checking src/mrcpp/mwtrees/OperatorTree.cpp ...
Checking src/mrcpp/mwtrees/OperatorTree.cpp: HAVE_OPENMP...
81/86 files checked 94% done
Checking src/mrcpp/mwtrees/ProjectedNode.cpp ...
Checking src/mrcpp/mwtrees/ProjectedNode.cpp: HAVE_OPENMP...
82/86 files checked 95% done
Checking src/mrcpp/mwtrees/SerialFunctionTree.cpp ...
Checking src/mrcpp/mwtrees/SerialFunctionTree.cpp: HAVE_OPENMP...
83/86 files checked 96% done
Checking src/mrcpp/mwtrees/SerialOperatorTree.cpp ...
Checking src/mrcpp/mwtrees/SerialOperatorTree.cpp: HAVE_OPENMP...
84/86 files checked 97% done
Checking src/mrcpp/mwtrees/SerialTree.cpp ...
Checking src/mrcpp/mwtrees/SerialTree.cpp: HAVE_OPENMP...
85/86 files checked 98% done
Checking src/mrcpp/parallel.cpp ...
[src/mrcpp/parallel.cpp:27]: (warning) Member variable 'SharedMemory::sh_start_ptr' is not initialized in the constructor.
[src/mrcpp/parallel.cpp:27]: (warning) Member variable 'SharedMemory::sh_max_ptr' is not initialized in the constructor.
[src/mrcpp/parallel.cpp:27]: (warning) Member variable 'SharedMemory::sh_end_ptr' is not initialized in the constructor.
[src/mrcpp/MultiResolutionAnalysis.h:9]: (warning) The class 'MultiResolutionAnalysis' has 'copy constructor' but lack of 'operator='.
Checking src/mrcpp/parallel.cpp: HAVE_MPI...
[src/mrcpp/parallel.cpp:521]: (warning) %d in format string (no. 4) requires 'int' but the argument type is 'double *'.
Checking src/mrcpp/parallel.cpp: HAVE_OPENMP...
86/86 files checked 100% done

xcfun always compiles in debug mode

For some reason I'm unable to get MRChem to build with a XCFun in Release mode.

Weirdly, the XCFun configure command is

[ 56%] Performing configure step for 'submodule-xcfun'
cd /home/work/mrchem/objdir/external/xcfun && /usr/bin/cmake -DCMAKE_INSTALL_PREFIX=/home/work/mrchem/objdir/external -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib64/ccache/cc -DCMAKE_CXX_COMPILER=/usr/lib64/ccache/c++ -DCMAKE_Fortran_COMPILER=/usr/bin/gfortran "-GUnix Makefiles" /home/work/mrchem/external/xcfun
Re-run cmake no build system arguments

which looks to be correct, but what I see in the build are actually the debug flags, e.g.

[ 10%] Building CXX object src/CMakeFiles/xcfun.dir/evaluators.cpp.o
cd /home/work/mrchem/objdir/external/xcfun/src && /usr/lib64/ccache/c++  -DXC_MAX_ORDER=2 -I/home/work/mrchem/objdir/external/xcfun -I/home/work/mrchem/external/xcfun/src/taylor -I/home/work/mrchem/external/xcfun/src/functionals -I/home/work/mrchem/external/xcfun/include -I/home/work/mrchem/external/xcfun/src -I/home/work/mrchem/objdir/external/xcfun/src  -Wall -Wno-unknown-pragmas -Wno-sign-compare -fno-rtti -fno-exceptions  -O0 -g3 -DDEBUG   -o CMakeFiles/xcfun.dir/evaluators.cpp.o -c /home/work/mrchem/external/xcfun/src/evaluators.cpp

Design of higher order response operators

From @robertodr in #161 :

Some comments and suggestions, mostly due to the fact that I am not quite that fluent in MRChem. The D1/D2 variants are there for ground state and linear response, right? That would mean that for e.g. quadratic you'd have to add a D3 variant, isn't it? Using variadic templates might help handle the code duplication a bit:

template <typename Head, typename... Tail>
class Collection final {
   public:
     Collection(const Head & h, const Tail&... t) : collection_{h, t...} {}
    void print() const {
        for (const auto & f: collection_) {
            f.print();
        }
    }
    private:
    std::array<Head, sizeof...(Tail)+1> collection_;
};

where the type of Head and Tail should be Orbital * in your case. Based on the sizeof...(Tail)+1 (a compile-time constant) you can dispatch all the needed algorithms correctly with not too much hassle (I think!) This is a slightly more verbose solution upon instantiation: you need to give the types of all arguments up front: auto coll = Collection<A, A, A, A>(a1, a2, a3, a4); There's probably a smarter way to coerce the parameter pack to be of one single type though.

KAIN is slightly off in MPI

For real this time (I think) :)
Without KAIN the two solutions (MPI and OMP) are identical throughout, but with KAIN they start to diverge slightly from iteration 3 (when KAIN first takes effect). The MPI/KAIN version isn't completely off, but it takes a few more iterations to converge than OMP/KAIN, and the solutions are equal only within the convergence threshold.

External projects (e.g. xcfun) not correctly recompiled

When an external submodule is modified (e.g. a file in the xcfun library), make does not trigger the recompilation of the library. With help from @robertodr I managed to trigger the library recompilation, but not the linking, which occurs only if a source of mrchem itself is recompiled.

Standard output

Can we make mrchemwrite by default on an output file instead of STDOUT?

Currently to read from molecule.inp and write on molecule.out i need to do:
mrchem molecule.inp > molecule.out

It would be convenient to obtain the same behavior with:
mrchem molecule

dumping on stdout should still be allowed, but as a (non default) option.

NumPy file formats

It would be a good idea to follow @robertodr 's suggestion and implement writing files using NumPy formats. Currently we write trees only as binary files which limits their reusability to within a given architecture/compiler and as I lately notice, even to a given build.

New master branch

I think it's time to promote the new-mrcpp branch to become the new master. The current master has gone stale and we have now caught up with all features in the new one (MPI support is still missing, though).

The only divergent development that has happened on master is Susi's fixes for boost, blas and eigen, but I'm not sure how this should be incorporated into the new super-build approach: boost is only used by getkw and blas should only be used by eigen, but I guess both must be picked up at mrchem level and passed on?

Test suite

We should update and maintain our test suite.

  1. Make sure the tests we have now are properly functioning. We do have a "tests" folder based on the CTest infrastructure, but I'm unsure how many of those tests are still valid in the current code. Moreover when I run "ctest -N" in the build folder it gives zero available tests
  2. Progressively add testing functionality
    Make sure that a wider portion of the code is being tested
  3. Add build images on Travis both for linux and for mac.
    We should not add too many IMO. I guess 4-5 will do to start with, otherwise the task of maintaining them will be overwhelming

Integration tests don't run on stallo

All integration tests fail on stallo due to some configuration issue I am not able to solve.
What I have done:

  1. compiled a fresh mrchem
  2. installed direnv manually (downloaded the precompiled 386 executable from the website)
  3. run direnv allow
  4. run make test

This is what I get (and it was the same error before points 2-4, which means direnv was uneffective)

(apologies for the not so nice formatting of the pasted error message...)

10: Test command: /global/apps/Python/2.7.3/bin/python /home/luca/programs/mrchem/tests/li/test" "--binary=/home/luca/programs/mrchem/build_hess_dft2/bin" "--work-dir=/home/luca/programs/mrchem/build_hess_dft2/tests/li" "--launch-agent" " " "--verbose" 10: Test timeout computed to be: 1500 10: Traceback (most recent call last): 10: File "/home/luca/programs/mrchem/tests/li/test", line 8, in <module> 10: from runtest import cli, get_filter, run, version_info # isort:skip 10: ImportError: No module named runtest 1/15 Test #10: li ...............................***Failed 0.07 sec

Problem running MRChem if you have not compiled the code yourself

It looks like we have a problem, if the person running MRChem is not the owner of the compiled code. Anders was trying to run some calculations using my MRChem and he gets the following error:

Error: readSMatrix(), line 30: Failed to open file: /home/luca/programs/mrchem/external/mrcpp/share/mwfilters/I_ph_deriv_1.txt

I have double checked that he has permission to read those files.

DFT for large molecules fails

CH4_010 is doing well, but all my tests for CH4_020 fail (DFT, but probably HF too).
This concerns both the serial and MPI versions.
For the serial version, the last lines printed out are:

               Setting up Helmholtz arguments
------------------------------------------------------------
 Potential part                                 3.14100e+01

and the error message:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Command terminated by signal 6

It was tested on the highmem compute-nodes too, so it is not a problem of insufficient memory.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.