[parallel] compilation

I’m trying to compile V0.5r0 on IBM cluster using IBM Power5+, 1.9 GHz.

  • The serial version compiled using the default setting and run without problems (cavity2d).

  • When tring to compile the parallel version I changed the Makefile.inc according to the user guid.

  • Using the default IBM compiler, I got the following error message:


Create dependencies for cavity2d.cpp /opt/ibmcmp/vacpp/8.0/bin/xlC_r: 1501-210 command option Wall contains an incorrect subargument Compile cavity2d.cpp mpCC -DPARALLEL_MODE_MPI -O3 -Wall -I../../src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o /opt/ibmcmp/vacpp/8.0/bin/xlC_r: 1501-210 command option Wall contains an incorrect subargument make: *** [/home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o] Error 40
  • I removed the -Wall flag then the compilation gave the following log:

Create dependencies for cavity2d.cpp "cavity2d.cpp", line 155.23: 1540-0256 (S) A parameter of type "olb::BlockLattice2D &" cannot be initialized with an expression of type "olb::MultiBlockLattice2D". "cavity2d.cpp", line 155.23: 1540-1205 (I) The error occurred while converting to parameter 1 of "writeGifs(BlockLattice2D &, const LBunits &, int)". "../../src/complexGrids/multiBlockStructure/multiDataFields2D.hh", line 478.1: 1540-1174 (S) The member "template const Tensor &get(int, int) const" is not declared as a template in its containing class definition. Compile cavity2d.cpp mpCC -DPARALLEL_MODE_MPI -O3 -I../../src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o "cavity2d.cpp", line 155.23: 1540-0256 (S) A parameter of type "olb::BlockLattice2D &" cannot be initialized with an expression of type "olb::MultiBlockLattice2D". "cavity2d.cpp", line 155.23: 1540-1205 (I) The error occurred while converting to parameter 1 of "writeGifs(BlockLattice2D &, const LBunits &, int)". "../../src/complexGrids/multiBlockStructure/multiDataFields2D.hh", line 478.1: 1540-1174 (S) The member "template const Tensor &get(int, int) const" is not declared as a template in its containing class definition. make: *** [/home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o] Error 1
  • I changed the compiler used by mpCC to g++ (gcc/4.2.1). This produced the following error. Any idea how should I proceed to solve the problem? Thanks.

Create dependencies for cavity2d.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Compile cavity2d.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o cavity2d.cpp: In function 'int main(int, char**)': cavity2d.cpp:155: error: invalid initialization of reference of type 'olb::BlockLattice2D&' from expression of type 'olb::MultiBlockLattice2D' cavity2d.cpp:80: error: in passing argument 1 of 'void writeGifs(olb::BlockLattice2D&, const olb::LBunits&, int)' make: *** [/home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o] Error 1

Best regards,
Marwan.

Hi, thanks for this detailed report. As far as I can see, there are two problems.

  1. In cavity2d.cpp, in the header of function writeGifs on line 79, you should replace BlockLattice2D by BlockStructure2D. This is necessary for this function to be generic in face of serial vs. parallel program execution: BlockStructure2D is a virtual base for BlockLattice2D (serial case) and MultiBlockLattice2D (parallel case). This is a bug in cavity2d.cpp which is fixed now thanks to your report and will be corrected in the next release.

Once you have modified this point in cavity2d, your code should compile without problem with g++ (make sure to type in “make clean” and “make cleanbuild” to get rid of binaries created with the other compiler).

  1. Your native compiler produces the following error:
    …/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh", line 478.1: 1540-1174 (S) The member “template const Tensor &get(int, int) const” is not declared as a template in its containing class definition

I don’t understand this error message. Also, the intel and GNU compilers don’t seem to have an issue there. Is the compiler maybe confused by the inline keyword? Can you get rid of the word “inline” on lines 453 and 477 of file complexGrids/multiBlockStructure/multiDataFields2D.hh and try to compile once more with the ibm compiler?

Hi Jonas,

Thank for your reply.

  • After correcting the first error and compiling I got a more clear error message:

Create dependencies for cavity2d.cpp "../../src/complexGrids/multiBlockStructure/multiBlockHandler2D.hh", line 553.9: 1540-0152 (W) A template dependent name that is a type must be qualified with "typename". "../../src/complexGrids/multiBlockStructure/multiDataFields2D.hh", line 478.1: 1540-1174 (S) The member "template const Tensor &get(int, int) const" is not declared as a template in its containing class definition. Compile cavity2d.cpp mpCC -DPARALLEL_MODE_MPI -O3 -I../../src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o "../../src/complexGrids/multiBlockStructure/multiBlockHandler2D.hh", line 553.9: 1540-0152 (W) A template dependent name that is a type must be qualified with "typename". "../../src/complexGrids/multiBlockStructure/multiDataFields2D.hh", line 478.1: 1540-1174 (S) The member "template const Tensor &get(int, int) const" is not declared as a template in its containing class definition. make: *** [/home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o] Error 1
  • removing the inline word from the inline word on line 453 and 477 of file complexGrids/multiBlockStructure/multiDataFields2D.hh and cleaning then compiling did not change the error message.

  • On the other hand compiling with g++ existed with



Create dependencies for cavity2d.cpp
g++: -lmpi_ibm: linker input file unused because linking not done
g++: -lpoe: linker input file unused because linking not done
g++: -llapi: linker input file unused because linking not done
Compile cavity2d.cpp
mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I…/…/src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o
make[1]: Entering directory `/gpfs/h01/hpce1008/OpenLB/olb-0.5r0’

– Entering src/core (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/core' Create dependencies for loadBalancer.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for ompManager.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for analysisFlags.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for multiPhysics.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/core’
– Leaving src/core (depend)


– Entering src/boundaryConditions (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/boundaryConditions' Makefile:86: no file name forinclude’
make[2]: Nothing to be done for depend'. make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/boundaryConditions’
– Leaving src/boundaryConditions (depend)


– Entering src/complexDynamics (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexDynamics' Makefile:86: no file name forinclude’
make[2]: Nothing to be done for depend'. make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexDynamics’
– Leaving src/complexDynamics (depend)


– Entering src/complexGrids/mpiManager (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/mpiManager' Makefile:86: ../../../build/generic/dep/mpiManager.d: No such file or directory Create dependencies for mpiManager.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/mpiManager’
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/mpiManager' make[2]: Nothing to be done fordepend’.
make[2]: Leaving directory `/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/mpiManager’
– Leaving src/complexGrids/mpiManager (depend)


– Entering src/complexGrids/cuboidStructure (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/cuboidStructure' Makefile:86: no file name forinclude’
make[2]: Nothing to be done for depend'. make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/cuboidStructure’
– Leaving src/complexGrids/cuboidStructure (depend)


– Entering src/complexGrids/multiBlockStructure (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/multiBlockStructure' Makefile:86: ../../../build/generic/dep/multiDataGeometry2D.d: No such file or directory Makefile:86: ../../../build/generic/dep/multiDataGeometry3D.d: No such file or directory Makefile:86: ../../../build/generic/dep/multiDataUtilities2D.d: No such file or directory Makefile:86: ../../../build/generic/dep/multiDataUtilities3D.d: No such file or directory Create dependencies for multiDataUtilities3D.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for multiDataUtilities2D.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for multiDataGeometry3D.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for multiDataGeometry2D.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/multiBlockStructure’
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/multiBlockStructure' make[2]: Nothing to be done fordepend’.
make[2]: Leaving directory `/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/multiBlockStructure’
– Leaving src/complexGrids/multiBlockStructure (depend)


– Entering src/utilities (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/utilities' Makefile:86: ../../build/generic/dep/olbAlgorithms.d: No such file or directory Create dependencies for olbAlgorithms.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/utilities’
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/utilities' make[2]: Nothing to be done fordepend’.
make[2]: Leaving directory `/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/utilities’
– Leaving src/utilities (depend)


– Entering src/io (depend)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/io' Makefile:86: ../../build/generic/dep/parallelIO.d: No such file or directory Makefile:86: ../../build/generic/dep/vtkDataOutput.d: No such file or directory Create dependencies for vtkDataOutput.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done Create dependencies for parallelIO.cpp g++: -lmpi_ibm: linker input file unused because linking not done g++: -lpoe: linker input file unused because linking not done g++: -llapi: linker input file unused because linking not done make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/io’
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/io' make[2]: Nothing to be done fordepend’.
make[2]: Leaving directory `/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/io’
– Leaving src/io (depend)


– Entering src/core (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/core' Compile loadBalancer.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c loadBalancer.cpp -o ../../build/generic/obj/loadBalancer.o Compile ompManager.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c ompManager.cpp -o ../../build/generic/obj/ompManager.o Compile analysisFlags.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c analysisFlags.cpp -o ../../build/generic/obj/analysisFlags.o Compile multiPhysics.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c multiPhysics.cpp -o ../../build/generic/obj/multiPhysics.o make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/core’
– Leaving src/core (compile)


– Entering src/boundaryConditions (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/boundaryConditions' Makefile:86: no file name forinclude’
make[2]: Nothing to be done for compile'. make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/boundaryConditions’
– Leaving src/boundaryConditions (compile)


– Entering src/complexDynamics (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexDynamics' Makefile:86: no file name forinclude’
make[2]: Nothing to be done for compile'. make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexDynamics’
– Leaving src/complexDynamics (compile)


– Entering src/complexGrids/mpiManager (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/mpiManager' Compile mpiManager.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../../src -c mpiManager.cpp -o ../../../build/generic/obj/mpiManager.o make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/mpiManager’
– Leaving src/complexGrids/mpiManager (compile)


– Entering src/complexGrids/cuboidStructure (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/cuboidStructure' Makefile:86: no file name forinclude’
make[2]: Nothing to be done for compile'. make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/cuboidStructure’
– Leaving src/complexGrids/cuboidStructure (compile)


– Entering src/complexGrids/multiBlockStructure (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/multiBlockStructure' Compile multiDataGeometry2D.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../../src -c multiDataGeometry2D.cpp -o ../../../build/generic/obj/multiDataGeometry2D.o Compile multiDataGeometry3D.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../../src -c multiDataGeometry3D.cpp -o ../../../build/generic/obj/multiDataGeometry3D.o Compile multiDataUtilities2D.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../../src -c multiDataUtilities2D.cpp -o ../../../build/generic/obj/multiDataUtilities2D.o Compile multiDataUtilities3D.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../../src -c multiDataUtilities3D.cpp -o ../../../build/generic/obj/multiDataUtilities3D.o make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/complexGrids/multiBlockStructure’
– Leaving src/complexGrids/multiBlockStructure (compile)


– Entering src/utilities (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/utilities' Compile olbAlgorithms.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c olbAlgorithms.cpp -o ../../build/generic/obj/olbAlgorithms.o make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/utilities’
– Leaving src/utilities (compile)


– Entering src/io (compile)
make[2]: Entering directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/io' Compile parallelIO.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c parallelIO.cpp -o ../../build/generic/obj/parallelIO.o Compile vtkDataOutput.cpp mpCC -compiler g++ -DPARALLEL_MODE_MPI -O3 -I../../src -c vtkDataOutput.cpp -o ../../build/generic/obj/vtkDataOutput.o make[2]: Leaving directory/gpfs/h01/hpce1008/OpenLB/olb-0.5r0/src/io’
– Leaving src/io (compile)

Build libolb.a:
ar: creating build/generic/lib/libolb.a
a - build/generic/obj/analysisFlags.o
a - build/generic/obj/loadBalancer.o
a - build/generic/obj/mpiManager.o
a - build/generic/obj/multiDataGeometry2D.o
a - build/generic/obj/multiDataGeometry3D.o
a - build/generic/obj/multiDataUtilities2D.o
a - build/generic/obj/multiDataUtilities3D.o
a - build/generic/obj/multiPhysics.o
a - build/generic/obj/olbAlgorithms.o
a - build/generic/obj/ompManager.o
a - build/generic/obj/parallelIO.o
a - build/generic/obj/vtkDataOutput.o
make[1]: Leaving directory /gpfs/h01/hpce1008/OpenLB/olb-0.5r0' Link cavity2d mpCC -compiler g++ cavity2d.o -L../../build/generic/lib -lolb -o cavity2d cavity2d.o(.text+0xb78): In function.writeGifs(olb::BlockStructure2D<double, olb::descriptors::D2Q9Descriptor>&, olb::LBunits const&, int)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.text+0x12d8): In function.writeVTK(olb::BlockStructure2D<double, olb::descriptors::D2Q9Descriptor>&, olb::LBunits const&, int)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.text+0x1f38): In function.main’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.text+0x1fb8): In function.main’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.text+0x208c): In function.main’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.text+0x20b0): more undefined references to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’ follow
cavity2d.o(.text+0x20e8): In function .main': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.text+0x20fc): In function .main': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.text+0x2110): In function .main': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.text+0x2124): In function .main': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.text+0x2138): In function .main': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.text+0x2178): In function .main': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.toc+0x310): undefined reference to std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage' cavity2d.o(.gnu.linkonce.t._ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag+0x3c): In function.char* std::basic_string<char, std::char_traits, std::allocator >::_S_construct<char*>(char*, char*, std::allocator const&, std::forward_iterator_tag)’:
: undefined reference to .std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)' cavity2d.o(.gnu.linkonce.t._ZN3olb13Base64EncoderIjE13flushOverflowEv+0x90): In function.olb::Base64Encoder::flushOverflow()’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.gnu.linkonce.t._ZN3olb13Base64EncoderIjE13flushOverflowEv+0xc4): In function.olb::Base64Encoder::flushOverflow()’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.gnu.linkonce.t._ZN3olb13Base64EncoderIjE13flushOverflowEv+0xe8): In function.olb::Base64Encoder::flushOverflow()’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.gnu.linkonce.t._ZN3olb13Base64EncoderIjE13flushOverflowEv+0x104): In function.olb::Base64Encoder::flushOverflow()’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.gnu.linkonce.t._ZN3olb13Base64EncoderIdE11encodeBlockEPKh+0x48): In function.olb::Base64Encoder::encodeBlock(unsigned char const*)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' cavity2d.o(.gnu.linkonce.t._ZN3olb13Base64EncoderIdE11encodeBlockEPKh+0x7c): more undefined references to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’ follow
cavity2d.o(.gnu.linkonce.t._ZN3olb12VtkTypeNamesIdE7getNameEv+0x7c): In function .olb::VtkTypeNames<double>::getName()': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(unsigned long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0xa8): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0xb8): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0xcc): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0xdc): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0xf0): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x104): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x114): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x124): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x138): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x158): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x16c): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x17c): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x18c): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x1a0): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x1b0): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x1c0): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x1d4): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x1e4): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x1f4): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x208): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x23c): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x24c): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x260): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x298): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZN3olb12writeLogFileIdEEvRKNS_7LBunitsIT_EERKSs+0x2a8): In function .void olb::writeLogFile<double>(olb::LBunits<double> const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x10c): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x11c): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x130): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x140): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::basic_ostream<char, std::char_traits >::_M_insert(double)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x154): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x180): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x190): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x1a4): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x1d0): In function .olb::graphics::ImageWriter<double>::writeGif(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, olb::ScalarFieldBase2D<double> const&, double, double, double, double) const': : undefined reference to.std::basic_ostream<char, std::char_traits >& std::__ostream_insert<char, std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*, long)’
cavity2d.o(.gnu.linkonce.t._ZNK3olb8graphics11ImageWriterIdE8writeGifERKSsRKNS_17ScalarFieldBase2DIdEEdddd+0x1e0): more undefined references to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' follow ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x1494): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x14a8): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x14b8): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x14cc): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x14dc): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x14f0): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x1504): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x1514): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x1528): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x1538): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x154c): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x155c): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.text+0x156c): In function.olb::VtkDataWriter3D::writeHeader(int, int, int, int, int, int, double, double, double, double)’:
: undefined reference to .std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)' ../../build/generic/lib/libolb.a(vtkDataOutput.o)(.toc+0x48): undefined reference tostd::basic_string<char, std::char_traits, std::allocator >::_Rep::_S_empty_rep_storage’
collect2: ld returned 1 exit status
make: *** [cavity2d] Error 1


Sorry for the long posting but I could not find a way to attach the log file.

Best regards,
Marwan.

Well, there’s some progress at least…

“…/…/src/complexGrids/multiBlockStructure/multiBlockHandler2D.hh”, line 553.9: 1540-0152 (W) A template dependent name that is a type must be qualified with “typename”.

OK, I suspect that the compiler will accept this if you start line 553 with the keyword “typename”, as suggested in the error message.

“…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh”, line 478.1: 1540-1174 (S) The member “template const Tensor &get(int, int) const” is not declared as a template in its containing class definition.

I still don’t know what the compiler tries to tell us here. It is possible that the template-dependent typedef of a C-style array was erroneously parsed. In that case, you can try replacing the occurrence of

typedef T Tensor[nDim];

by

typedef T* Tensor;

in the following files:

  • core/dataFields2D.h
  • core/dataFields3D.h
  • complexGrids/multiBlockStructure/multiDataFields2D.h
  • complexGrids/multiBlockStructure/multiDataFields3D.h

I am curious to know if this fixes your compiler error.

As far as your error with g++ is concerned, all the linker is telling you is that it cannot find the c++ libraries. I can imagine to reasons for this. (1) Your linker is ill configured with g++, or (2) You forgot to type in “make clean” and “make cleanbuild” when you switched from one compiler to another.

  • the first error was removed by using typename in front of line 553.
  • after make the recommended modification I got the following:

make Create dependencies for cavity2d.cpp "../../src/complexGrids/multiBlockStructure/multiDataFields2D.h", line 117.21: 1540-1164 (S) The return type for "olb::MultiTensorField2D::Tensor &olb::MultiTensorField2D::get(int, int)" differs from the return type of "olb::TensorFieldBase2D::Tensor &olb::TensorFieldBase2D::get(int, int)" that it overrides. "../../src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h", line 40.29: 1540-0700 (I) The previous message was produced while processing "class olb::MultiTensorField2D". "../../src/core/dataFields2D.h", line 123.21: 1540-1164 (S) The return type for "olb::TensorField2D::Tensor &olb::TensorField2D::get(int, int)" differs from the return type of "olb::TensorFieldBase2D::Tensor &olb::TensorFieldBase2D::get(int, int)" that it overrides. "../../src/core/dataAnalysis2D.h", line 40.24: 1540-0700 (I) The previous message was produced while processing "class olb::TensorField2D". Compile cavity2d.cpp mpCC -DPARALLEL_MODE_MPI -O3 -I../../src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o "../../src/complexGrids/multiBlockStructure/multiDataFields2D.h", line 117.21: 1540-1164 (S) The return type for "olb::MultiTensorField2D::Tensor &olb::MultiTensorField2D::get(int, int)" differs from the return type of "olb::TensorFieldBase2D::Tensor &olb::TensorFieldBase2D::get(int, int)" that it overrides. "../../src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h", line 40.29: 1540-0700 (I) The previous message was produced while processing "class olb::MultiTensorField2D". "../../src/core/dataFields2D.h", line 123.21: 1540-1164 (S) The return type for "olb::TensorField2D::Tensor &olb::TensorField2D::get(int, int)" differs from the return type of "olb::TensorFieldBase2D::Tensor &olb::TensorFieldBase2D::get(int, int)" that it overrides. "../../src/core/dataAnalysis2D.h", line 40.24: 1540-0700 (I) The previous message was produced while processing "class olb::TensorField2D". make: *** [/home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o] Error 1
  • On the other hand, such modifications caused errors when using g++; I turned on the verbose output. I could send you my llogin account details to the cluster in case you want to try compiling. If you are not interested I will be thankful if you continue to guide me through the compilation.

Create dependencies for cavity2d.cpp
Reading specs from /gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/specs
Target: powerpc64-unknown-linux-gnu
Configured with: …/…/src/gcc-4.2.1/configure --enable-languages=c,c++,fortran --prefix=/sara/sw/gcc/4.2.1 --with-gmp=/sara/sw/gmp/4.2.1 --with-mpfr=/sara/sw/mpfr/2.2.1
Thread model: posix
gcc version 4.2.1
/gpfs/sara/sw/gcc/4.2.1/bin/…/libexec/gcc/powerpc64-unknown-linux-gnu/4.2.1/cc1plus -E -quiet -v -I…/…/src -I/opt/ibmhpc/ppe.poe/include -I/opt/ibmhpc/lapi/include -iprefix /gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/ -M -D_GNU_SOURCE -D__unix__ -D__gnu_linux__ -D__linux__ -Dunix -D__unix -Dlinux -D__linux -Asystem=linux -Asystem=unix -Asystem=posix -D_MPI_CPP_BINDINGS -DPARALLEL_MODE_MPI cavity2d.cpp -m64 -O3
ignoring nonexistent directory “/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/powerpc64-unknown-linux-gnu/include”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/powerpc64-unknown-linux-gnu”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/backward”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/include”
ignoring nonexistent directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/powerpc64-unknown-linux-gnu/include”
#include “…” search starts here:
#include <…> search starts here:
…/…/src
/opt/ibmhpc/ppe.poe/include
/opt/ibmhpc/lapi/include
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/powerpc64-unknown-linux-gnu
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/backward
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/include
/usr/local/include
/sara/sw/gcc/4.2.1/include
/usr/include
End of search list.
g++: -lmpi_ibm: linker input file unused because linking not done
g++: -lpoe: linker input file unused because linking not done
g++: -llapi: linker input file unused because linking not done
Compile cavity2d.cpp
mpCC -compiler g++ -v -cpp -DPARALLEL_MODE_MPI -O3 -I…/…/src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o
g++ -v -D_MPI_CPP_BINDINGS -DPARALLEL_MODE_MPI -O3 -I…/…/src -c cavity2d.cpp -o /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o -m64 -I/opt/ibmhpc/ppe.poe/include -I/opt/ibmhpc/lapi/include
Reading specs from /gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/specs
Target: powerpc64-unknown-linux-gnu
Configured with: …/…/src/gcc-4.2.1/configure --enable-languages=c,c++,fortran --prefix=/sara/sw/gcc/4.2.1 --with-gmp=/sara/sw/gmp/4.2.1 --with-mpfr=/sara/sw/mpfr/2.2.1
Thread model: posix
gcc version 4.2.1
/gpfs/sara/sw/gcc/4.2.1/bin/…/libexec/gcc/powerpc64-unknown-linux-gnu/4.2.1/cc1plus -quiet -v -I…/…/src -I/opt/ibmhpc/ppe.poe/include -I/opt/ibmhpc/lapi/include -iprefix /gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/ -D_GNU_SOURCE -D__unix__ -D__gnu_linux__ -D__linux__ -Dunix -D__unix -Dlinux -D__linux -Asystem=linux -Asystem=unix -Asystem=posix -D_MPI_CPP_BINDINGS -DPARALLEL_MODE_MPI cavity2d.cpp -quiet -dumpbase cavity2d.cpp -m64 -auxbase-strip /home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o -O3 -version -o /scratch/local/hpce1008/ccOuyLqH.s
ignoring nonexistent directory “/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/powerpc64-unknown-linux-gnu/include”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/powerpc64-unknown-linux-gnu”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/backward”
ignoring duplicate directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/include”
ignoring nonexistent directory “/sara/sw/gcc/4.2.1/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/powerpc64-unknown-linux-gnu/include”
#include “…” search starts here:
#include <…> search starts here:
…/…/src
/opt/ibmhpc/ppe.poe/include
/opt/ibmhpc/lapi/include
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/powerpc64-unknown-linux-gnu
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/…/…/…/…/include/c++/4.2.1/backward
/gpfs/sara/sw/gcc/4.2.1/bin/…/lib/gcc/powerpc64-unknown-linux-gnu/4.2.1/include
/usr/local/include
/sara/sw/gcc/4.2.1/include
/usr/include
End of search list.
GNU C++ version 4.2.1 (powerpc64-unknown-linux-gnu)
compiled by GNU C version 4.2.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 77faed4cc8eae7c17b268759a0916ed8
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h: In instantiation of ‘olb::MultiTensorField2D<double, 2>’:
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h:40: instantiated from ‘olb::MultiAnalysisFieldsImpl2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h:82: instantiated from ‘olb::MultiDataAnalysis2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiBlockLattice2D.hh:61: instantiated from ‘olb::MultiBlockLattice2D<T, Lattice>::MultiBlockLattice2D(const olb::MultiDataDistribution2D&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
cavity2d.cpp:129: instantiated from here
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh:454: error: conflicting return type specified for ‘typename olb::MultiTensorField2D<T, nDim>::Tensor& olb::MultiTensorField2D<T, nDim>::get(int, int) [with T = double, int nDim = 2]’
…/…/src/core/dataFieldBase2D.h:73: error: overriding ‘T (& olb::TensorFieldBase2D<T, nDim>::get(int, int))[nDim] [with T = double, int nDim = 2]’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh:478: error: conflicting return type specified for ‘const typename olb::MultiTensorField2D<T, nDim>::Tensor& olb::MultiTensorField2D<T, nDim>::get(int, int) const [with T = double, int nDim = 2]’
…/…/src/core/dataFieldBase2D.h:74: error: overriding ‘const T (& olb::TensorFieldBase2D<T, nDim>::get(int, int) const)[nDim] [with T = double, int nDim = 2]’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h: In instantiation of ‘olb::MultiTensorField2D<double, 3>’:
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h:45: instantiated from ‘olb::MultiAnalysisFieldsImpl2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h:82: instantiated from ‘olb::MultiDataAnalysis2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiBlockLattice2D.hh:61: instantiated from ‘olb::MultiBlockLattice2D<T, Lattice>::MultiBlockLattice2D(const olb::MultiDataDistribution2D&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
cavity2d.cpp:129: instantiated from here
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh:454: error: conflicting return type specified for ‘typename olb::MultiTensorField2D<T, nDim>::Tensor& olb::MultiTensorField2D<T, nDim>::get(int, int) [with T = double, int nDim = 3]’
…/…/src/core/dataFieldBase2D.h:73: error: overriding ‘T (& olb::TensorFieldBase2D<T, nDim>::get(int, int))[nDim] [with T = double, int nDim = 3]’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh:478: error: conflicting return type specified for ‘const typename olb::MultiTensorField2D<T, nDim>::Tensor& olb::MultiTensorField2D<T, nDim>::get(int, int) const [with T = double, int nDim = 3]’
…/…/src/core/dataFieldBase2D.h:74: error: overriding ‘const T (& olb::TensorFieldBase2D<T, nDim>::get(int, int) const)[nDim] [with T = double, int nDim = 3]’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h: In instantiation of ‘olb::MultiTensorField2D<double, 9>’:
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h:49: instantiated from ‘olb::MultiAnalysisFieldsImpl2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.h:82: instantiated from ‘olb::MultiDataAnalysis2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiBlockLattice2D.hh:61: instantiated from ‘olb::MultiBlockLattice2D<T, Lattice>::MultiBlockLattice2D(const olb::MultiDataDistribution2D&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
cavity2d.cpp:129: instantiated from here
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh:454: error: conflicting return type specified for ‘typename olb::MultiTensorField2D<T, nDim>::Tensor& olb::MultiTensorField2D<T, nDim>::get(int, int) [with T = double, int nDim = 9]’
…/…/src/core/dataFieldBase2D.h:73: error: overriding ‘T (& olb::TensorFieldBase2D<T, nDim>::get(int, int))[nDim] [with T = double, int nDim = 9]’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh:478: error: conflicting return type specified for ‘const typename olb::MultiTensorField2D<T, nDim>::Tensor& olb::MultiTensorField2D<T, nDim>::get(int, int) const [with T = double, int nDim = 9]’
…/…/src/core/dataFieldBase2D.h:74: error: overriding ‘const T (& olb::TensorFieldBase2D<T, nDim>::get(int, int) const)[nDim] [with T = double, int nDim = 9]’
…/…/src/core/dataFields2D.h: In instantiation of ‘olb::TensorField2D<double, 2>’:
…/…/src/core/dataAnalysis2D.h:40: instantiated from ‘olb::AnalysisFieldsImpl2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/core/dataAnalysis2D.h:135: instantiated from ‘olb::DataAnalysis2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.hh:70: instantiated from ‘olb::MultiDataAnalysis2D<T, Lattice>::MultiDataAnalysis2D(const olb::MultiBlockLattice2D<T, Lattice>&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
…/…/src/complexGrids/multiBlockStructure/multiBlockLattice2D.hh:61: instantiated from ‘olb::MultiBlockLattice2D<T, Lattice>::MultiBlockLattice2D(const olb::MultiDataDistribution2D&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
cavity2d.cpp:129: instantiated from here
…/…/src/core/dataFields2D.h:123: error: conflicting return type specified for ‘T*& olb::TensorField2D<T, nDim>::get(int, int) [with T = double, int nDim = 2]’
…/…/src/core/dataFieldBase2D.h:73: error: overriding ‘T (& olb::TensorFieldBase2D<T, nDim>::get(int, int))[nDim] [with T = double, int nDim = 2]’
…/…/src/core/dataFields2D.h:129: error: conflicting return type specified for ‘T* const& olb::TensorField2D<T, nDim>::get(int, int) const [with T = double, int nDim = 2]’
…/…/src/core/dataFieldBase2D.h:74: error: overriding ‘const T (& olb::TensorFieldBase2D<T, nDim>::get(int, int) const)[nDim] [with T = double, int nDim = 2]’
…/…/src/core/dataFields2D.h: In instantiation of ‘olb::TensorField2D<double, 3>’:
…/…/src/core/dataAnalysis2D.h:45: instantiated from ‘olb::AnalysisFieldsImpl2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/core/dataAnalysis2D.h:135: instantiated from ‘olb::DataAnalysis2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.hh:70: instantiated from ‘olb::MultiDataAnalysis2D<T, Lattice>::MultiDataAnalysis2D(const olb::MultiBlockLattice2D<T, Lattice>&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
…/…/src/complexGrids/multiBlockStructure/multiBlockLattice2D.hh:61: instantiated from ‘olb::MultiBlockLattice2D<T, Lattice>::MultiBlockLattice2D(const olb::MultiDataDistribution2D&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
cavity2d.cpp:129: instantiated from here
…/…/src/core/dataFields2D.h:123: error: conflicting return type specified for ‘T*& olb::TensorField2D<T, nDim>::get(int, int) [with T = double, int nDim = 3]’
…/…/src/core/dataFieldBase2D.h:73: error: overriding ‘T (& olb::TensorFieldBase2D<T, nDim>::get(int, int))[nDim] [with T = double, int nDim = 3]’
…/…/src/core/dataFields2D.h:129: error: conflicting return type specified for ‘T* const& olb::TensorField2D<T, nDim>::get(int, int) const [with T = double, int nDim = 3]’
…/…/src/core/dataFieldBase2D.h:74: error: overriding ‘const T (& olb::TensorFieldBase2D<T, nDim>::get(int, int) const)[nDim] [with T = double, int nDim = 3]’
…/…/src/core/dataFields2D.h: In instantiation of ‘olb::TensorField2D<double, 9>’:
…/…/src/core/dataAnalysis2D.h:49: instantiated from ‘olb::AnalysisFieldsImpl2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/core/dataAnalysis2D.h:135: instantiated from ‘olb::DataAnalysis2D<double, olb::descriptors::D2Q9Descriptor>’
…/…/src/complexGrids/multiBlockStructure/multiDataAnalysis2D.hh:70: instantiated from ‘olb::MultiDataAnalysis2D<T, Lattice>::MultiDataAnalysis2D(const olb::MultiBlockLattice2D<T, Lattice>&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
…/…/src/complexGrids/multiBlockStructure/multiBlockLattice2D.hh:61: instantiated from ‘olb::MultiBlockLattice2D<T, Lattice>::MultiBlockLattice2D(const olb::MultiDataDistribution2D&) [with T = double, Lattice = olb::descriptors::D2Q9Descriptor]’
cavity2d.cpp:129: instantiated from here
…/…/src/core/dataFields2D.h:123: error: conflicting return type specified for ‘T*& olb::TensorField2D<T, nDim>::get(int, int) [with T = double, int nDim = 9]’
…/…/src/core/dataFieldBase2D.h:73: error: overriding ‘T (& olb::TensorFieldBase2D<T, nDim>::get(int, int))[nDim] [with T = double, int nDim = 9]’
…/…/src/core/dataFields2D.h:129: error: conflicting return type specified for ‘T* const& olb::TensorField2D<T, nDim>::get(int, int) const [with T = double, int nDim = 9]’
…/…/src/core/dataFieldBase2D.h:74: error: overriding ‘const T (& olb::TensorFieldBase2D<T, nDim>::get(int, int) const)[nDim] [with T = double, int nDim = 9]’
make: *** [/home/hpce1008/OpenLB/olb-0.5r0/examples/cavity2d/cavity2d.o] Error 1


Best regards,
Marwan.

OK, replacing T[] by T* did not work (or rather, one would need to do investigate this a bit more throughly). But what if you turn back to the T[] version? Did you try compiling with g++, taking into account my remark at the very end of the previous posting? I am pretty sure that g++ works, it has worked fine on all platforms so far, including various 32-bit and 64-bit architectures.

I went back and used g++. I use always make clean; make cleanbuild; I think it is a linker problem. I’m working on it. I will keep you updated with the solution. Thanks.

Best regards,
Maka.

Hi,

I have the same problem on the same computer (IBM). I would like to run my program in parallel, but I can’t compile bstep2d.cpp with mpCC.

------ ERROR CODE ------

“…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.hh”, line 478.1: 1540-1174 (S) The member “template const Tensor &get(int, int) const” is not declared as a template in its containing class definition.

------ ERROR CODE ------

Marwan, have you found a solution to this problem ? Ifnot, how can I do?

thanks you

JB

I am still unsure why your compiler(s) don’t like the definition of this method. But the code might compile if we skip the separate definition of the method, i.e., if we directly write the definition of method get() inside the class declaration. I wrote this for you, you can download the updated version of OpenLB at the following address.

Please let me know if this updated version compiles, and if not, what error messages you get. Good luck…

Hi,
Thank you very very much for your modification on the code, IT WORKS !
It seems to compile successfully, although there are several error messages. Beside, the program runs fine. However, when I would like to compare with the serial processing on my laptop (intel centrino, with G++ compiler), it doesn’t compile, perhaps it is normal (it’s just a code for testing parallel compiling on Powerpc), but I prefer give you the error log :

– ERROR CODE (on intel centrino) –

[jbd1101@localhost bstep2d]$ make
Create dependencies for bstep2d.cpp
Compile bstep2d.cpp
g++ -O3 -Wall -I…/…/src -c bstep2d.cpp -o /home/jbd1101/Téléchargement/olb/examples/bstep2d/bstep2d.o
In file included from …/…/src/complexGrids/multiBlockStructure/multiBlockStructure2D.h:30,
from …/…/src/olb2D.h:8,
from bstep2d.cpp:23:
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h: In member function ‘virtual T (& olb::MultiTensorField2D<T, nDim>::get(int, int))[nDim]’:
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h:126: erreur: ‘numeric_limits’ is not a member of ‘std’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h:126: erreur: expected primary-expression before ‘>’ token
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h:126: erreur: ‘::signaling_NaN’ has not been declared
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h: In member function ‘virtual const T (& olb::MultiTensorField2D<T, nDim>::get(int, int) const)[nDim]’:
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h:147: erreur: ‘numeric_limits’ is not a member of ‘std’
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h:147: erreur: expected primary-expression before ‘>’ token
…/…/src/complexGrids/multiBlockStructure/multiDataFields2D.h:147: erreur: ‘::signaling_NaN’ has not been declared
make: *** [/home/djib1101/Téléchargement/olb/examples/bstep2d/bstep2d.o] Erreur 1

– ERROR CODE –

We can see that it is in files that you’ve modified.

For the whole log when I compile on the powerPc, I can give you, but it is very long (more than 1000 lines). So I can send you in txt by email if you want.
Let me know.

Regards

JB

I am glad to hear this workaround did the job. It is not a real solution though, because inlining the whole code of method get() into the class declaration is quite ugly. If we can’t find a better solution, I fear you’ll have to do this manually for each OpenLB release to get it working with your compiler.

Your PowerPC is right to complain: I forgot to include the header file after copying the code to the class declaration. The updated version should be fine now.

Hi,
It’s ok for the last version, it works fine with the 2 systems.
Thanks a lot for your help,

JB

Hi, in fact there is another problem. With the power pc, I can’t create readable VTKs. I tried in serial / parallel mode, with g++ / mpcc, 1 and several nodes, fixed/original version of openLB, but it generates vti files unreadables by Paraview, while with my computer (intel core duo) there is no problem.

Here the error message produces by paraview :

ERROR: In /builddir/build/BUILD/ParaView3.2.1/VTK/IO/vtkXMLStructuredDataReader.cxx, line 314
vtkXMLImageDataReader (0xa3eafc8): Error reading extent 0 144 0 12 0 12 from piece 0

ERROR: In /builddir/build/BUILD/ParaView3.2.1/VTK/IO/vtkXMLDataReader.cxx, line 497
vtkXMLImageDataReader (0xa3eafc8): Cannot read point data array “velocity” from PointData in piece 0. The data array in the element may be too short.

ERROR: In /builddir/build/BUILD/ParaView3.2.1/VTK/IO/vtkXMLStructuredDataReader.cxx, line 314
vtkXMLImageDataReader (0xa3eafc8): Error reading extent 0 144 0 12 0 12 from piece 0

ERROR: In /builddir/build/BUILD/ParaView3.2.1/VTK/IO/vtkXMLDataReader.cxx, line 497
vtkXMLImageDataReader (0xa3eafc8): Cannot read point data array “velocity” from PointData in piece 0. The data array in the element may be too short.

ERROR: In /builddir/build/BUILD/ParaView3.2.1/VTK/IO/vtkXMLStructuredDataReader.cxx, line 314
vtkXMLImageDataReader (0xa3eafc8): Error reading extent 0 144 0 12 0 12 from piece 0

ERROR: In /builddir/build/BUILD/ParaView3.2.1/VTK/IO/vtkXMLDataReader.cxx, line 497
vtkXMLImageDataReader (0xa3eafc8): Cannot read point data array “velocity” from PointData in piece 0. The data array in the element may be too short.

All gifs are well generated (velocity).

Why ?

Thanks

JB

By all means, I don’t know. Note that the VTK format used in OpenLB is a binary one, which makes it very sensitive to hardware incompatibilities. This might simply be an issue about endianness. OpenLB presumes that your hardware is in little-endian order, and it might be that your PowerPC uses big-endian bit-order. I know so to say nothing about mac’s, but wasn’t there a possibility with PowerPC’s to switch endianness dynamically? In that case, try to switch to little-endian.

Otherwise, you may want to recompile OpenLB for big-endian bit-order. Edit io/vtkDataOutput.cpp and chose “BigEndian” for option byte_order. Then, your file might be written properly on the mac. But in that case I don’t think you can read the file on an Intel platform, unless ParaView makes the necessary conversion from big-endian to little-endian for you: the best thing to do is to try.

Note that you should have no difficulties with newer mac’s which use an Intel architecture. Also, to ensure inter-platform compatibilities, you may want to chose an ASCII format instead of VTK.

Thanks for your last answer.

I’ve modified “LittleEndian” by “BigEndian” in the io/vtkDataOutput.cpp, for trying.
It is working very well, in serial and parallel mode. Moreover I can read VTK files on the intel architecture. It’s perfect !

I’ve found that with the gcc compiler you can compile the code for an BigEndian architecture with a flag :

-mbig-endian
Generate code for a processor running in big-endian mode; the default is to compile code for a little-endian processor.

Source : http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/ARM-Options.html

But I haven’t tested because I can’t compile with gcc on the PowerPc, and unfortunately I haven’t found a way to compile with this kind of flag on mpCC compiler.

(Sorry for bad english …)

Thank you for the feedback. For the next release, we should include a non-intrusive way to switch endianness.