Skip to content
Snippets Groups Projects
Closed Can't compile with eigenVectors()
  • View options
  • Can't compile with eigenVectors()

  • View options
  • Closed Issue created

    Summary

    Can't compile the code that calculates eigenVectors() of a volSymmTensorField directly.

    Steps to reproduce

    Same as the example case. eigenValues() is OK but eigenVectors() fails.

    Example case

    To avoid confusion I'm changing the example case a little bit.

    //Psi_ is a volSymmTensorField
    eig_=eigenValues(Psi_);
    R_=eigenVectors(Psi_,eig_);

    What is the current bug behaviour?

    Can't compile the code.

    What is the expected correct behavior?

    In src/OpenFOAM/primitives/SymmTensor/symmTensor/symmTensor.H there's

    vector eigenValues(const symmTensor& T); and

    tensor eigenVectors(const symmTensor& T, const vector& eVals);

    eigenValues() can compile which means the conversion from Foam::volSymmTensorField to const Foam::symmTensor is OK. So eigenVectors() should work as well.

    Relevant logs and/or images

    error: no matching function for call to 'eigenVectors'
        R_=eigenVectors(Psi_,eig_);
           ^~~~~~~~~~~~
    /Users/gux215/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/tensor.H:94:17: note: 
          candidate function not viable: no known conversion from
          'Foam::volSymmTensorField' (aka 'GeometricField<SymmTensor<double>,
          fvPatchField, Foam::volMesh>') to 'const Foam::tensor' (aka
          'const Tensor<double>') for 1st argument
    Tensor<complex> eigenVectors
                    ^
    /Users/gux215/OpenFOAM/OpenFOAM-v2012/src/OpenFOAM/lnInclude/symmTensor.H:95:8: note: 
          candidate function not viable: no known conversion from
          'Foam::volSymmTensorField' (aka 'GeometricField<SymmTensor<double>,
          fvPatchField, Foam::volMesh>') to 'const Foam::symmTensor' (aka 'const
          SymmTensor<double>') for 1st argument
    tensor eigenVectors

    Also tested with GCC 8 in a Linux VM

    /usr/lib/openfoam/openfoam2012/src/OpenFOAM/lnInclude/symmTensor.H:95:8: note: candidate: ‘Foam::tensor Foam::eigenVectors(const symmTensor&, const vector&)’
     tensor eigenVectors
            ^~~~~~~~~~~~
    /usr/lib/openfoam/openfoam2012/src/OpenFOAM/lnInclude/symmTensor.H:95:8: note:   no known conversion for argument 1 from ‘Foam::volSymmTensorField’ {aka ‘Foam::GeometricField<Foam::SymmTensor<double>, Foam::fvPatchField, Foam::volMesh>’} to ‘const symmTensor&’ {aka ‘const Foam::SymmTensor<double>&’}

    Environment information

    • OpenFOAM version : v2012
    • Operating system : macOS/Linux
    • Hardware info : x86
    • Compiler : Clang/GCC

    Possible fixes

        forAll(Psi_, celli) {
            eig_[celli]=eigenValues(Psi_[celli]);
            R_[celli]=eigenVectors(Psi_[celli],eig_[celli]);
        }

    Can be compiled successfully, but that's too stupid. It should be doable without using forAll.

    Edited

    Linked items ... 0

  • Activity

    • All activity
    • Comments only
    • History only
    • Newest first
    • Oldest first
    Loading Loading Loading Loading Loading Loading Loading Loading Loading Loading