Compilation error for cavity3d in showCase

Hello,

I followed the user Guide and installed every required packages. Now I can successfully execute some examples in “showCases”, such as cavity2d, cylinder2d, multiComponent2d etc. I have to say Palabos is really amazing, fantastic!
However, I cannot implement those 3d examples. For instance, when I change into ~/showCases/cavity3d/ and type “make”, I get the error messages as follows:

=========================================================================

In file included from /home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/headers3D.hh:42:0,
from /home/liqian/Desktop/Palabos/palabos-v1.0r1/src/palabos3D.hh:29,
from cavity3d.cpp:33:
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh: In function ‘void plb::instantiateOuterNLDboundary(plb::MultiBlockLattice3D<T, Descriptor>&, plb::Box3D) [with T = double, Descriptor = plb::descriptors::D3Q19Descriptor]’:
cavity3d.cpp:58:66: instantiated from here
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:301:5: error: cannot allocate an object of abstract type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:50:7: note: because the following virtual functions are pure within ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’:
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/atomicBlock/dataProcessingFunctional3D.h:66:18: note: virtual void plb::BoxProcessingFunctional3D::getTypeOfModification(std::vectorplb::modif::ModifT&) const
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:303:5: error: cannot allocate an object of abstract type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:50:7: note: since type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:305:5: error: cannot allocate an object of abstract type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:50:7: note: since type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:307:5: error: cannot allocate an object of abstract type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:50:7: note: since type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:309:5: error: cannot allocate an object of abstract type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:50:7: note: since type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:311:5: error: cannot allocate an object of abstract type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:50:7: note: since type ‘plb::ExecutePlaneNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
cavity3d.cpp:58:66: instantiated from here
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:314:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: because the following virtual functions are pure within ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’:
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/atomicBlock/dataProcessingFunctional3D.h:66:18: note: virtual void plb::BoxProcessingFunctional3D::getTypeOfModification(std::vectorplb::modif::ModifT&) const
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:316:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:318:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:320:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:322:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:324:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:326:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:328:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:330:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:332:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:334:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:336:5: error: cannot allocate an object of abstract type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:66:7: note: since type ‘plb::ExecuteEdgeNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
cavity3d.cpp:58:66: instantiated from here
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:339:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: because the following virtual functions are pure within ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’:
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/atomicBlock/dataProcessingFunctional3D.h:66:18: note: virtual void plb::BoxProcessingFunctional3D::getTypeOfModification(std::vectorplb::modif::ModifT&) const
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:341:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:343:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:345:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:347:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:349:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:351:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.hh:353:5: error: cannot allocate an object of abstract type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaries3D.h:82:7: note: since type ‘plb::ExecuteCornerNLD_3D<double, plb::descriptors::D3Q19Descriptor>’ has pure virtual functions
cavity3d.cpp: In function ‘void writeGifs(BlockLatticeT&, const plb::IncomprFlowParam&, plb::plint) [with BlockLatticeT = plb::MultiBlockLattice3D<double, plb::descriptors::D3Q19Descriptor>, plb::plint = long int]’:
cavity3d.cpp:158:46: instantiated from here
cavity3d.cpp:84:17: warning: unused variable ‘nz’ [-Wunused-variable]
In file included from /home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/headers3D.hh:41:0,
from /home/liqian/Desktop/Palabos/palabos-v1.0r1/src/palabos3D.hh:29,
from cavity3d.cpp:33:
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh: In member function ‘void plb::NLD_VelocityNeumannBoundaryDynamics3D<T, Descriptor>::edgeBoundaryCompletion(int, int, int, plb::plint, plb::plint, plb::plint, plb::BlockLattice3D<T, Descriptor>&) [with T = double, Descriptor = plb::descriptors::D3Q19Descriptor, plb::plint = long int]’:
cavity3d.cpp:189:1: instantiated from here
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh:889:25: warning: unused variable ‘cell’ [-Wunused-variable]
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh: In member function ‘void plb::NLD_VelocityBoundaryDynamics3D<T, Descriptor>::cornerBoundaryCompletion(int, int, int, plb::plint, plb::plint, plb::plint, plb::BlockLattice3D<T, Descriptor>&) [with T = double, Descriptor = plb::descriptors::D3Q19Descriptor, plb::plint = long int]’:
cavity3d.cpp:189:1: instantiated from here
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh:647:25: warning: unused variable ‘cell’ [-Wunused-variable]
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh: In constructor ‘plb::NLD_VelocityPlaneUtil3D<T, Descriptor>::NLD_VelocityPlaneUtil3D(int, int, plb::plint, plb::plint, plb::plint, plb::BlockLattice3D<T, Descriptor>&, plb::NonLocalBoundaryDynamics3D<T, Descriptor>&) [with T = double, Descriptor = plb::descriptors::D3Q19Descriptor, plb::plint = long int]’:
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh:866:62: instantiated from ‘void plb::NLD_VelocityNeumannBoundaryDynamics3D<T, Descriptor>::planeBoundaryCompletion(int, int, plb::plint, plb::plint, plb::plint, plb::BlockLattice3D<T, Descriptor>&) [with T = double, Descriptor = plb::descriptors::D3Q19Descriptor, plb::plint = long int]’
cavity3d.cpp:189:1: instantiated from here
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh:297:13: warning: unused variable ‘direction1’ [-Wunused-variable]
/home/liqian/Desktop/Palabos/palabos-v1.0r1/src/boundaryCondition/NLD_boundaryDynamics3D.hh:298:13: warning: unused variable ‘direction2’ [-Wunused-variable]
mpicxx -o /home/liqian/Desktop/Palabos/palabos-v1.0r1/src/multiBlock/staticRepartitions2D.o -c -Wall -Wnon-virtual-dtor -O3 -DPLB_MPI_PARALLEL -DPLB_USE_POSIX -I/home/liqian/Desktop/Palabos/palabos-v1.0r1/src -I/home/liqian/Desktop/Palabos/palabos-v1.0r1/externalLibraries /home/liqian/Desktop/Palabos/palabos-v1.0r1/src/multiBlock/staticRepartitions2D.cpp
scons: *** [cavity3d.o] Error 1
scons: building terminated because of errors.
make: *** [compile] Error 2

I did nothing with the original code, but just wanted to have a try and see what I could get.
Can anyone tell me how I can figure out this problem and allow myself see the correct results?
I’m looking forward to your reply. Thanks a million!

Regards,
Chancey

Dear Chancey,

We are glad that you think that Palabos is fantastic. Thanks a lot…

What you are mentioning refer to a known bug that is already corrected and will be out in the next release of Palabos. To circumvent this problem I would suggest the following:

1] Edit the file showCases/cavity3d/cavity3d.cpp and comment-out the lines 58-61:

instantiateOuterNLDboundary(lattice, lattice.getBoundingBox());
setOuterNLDboundaryDynamics(lattice, lattice.getBackgroundDynamics().clone(),
                            lattice.getBoundingBox(), boundary::dirichlet);
setOuterNLDboundaryDynamics(lattice, lattice.getBackgroundDynamics().clone(), bottomLid, boundary::neumann);

2] Then uncomment lines 64-66:

defineDynamics(lattice, bottomLid, lattice.getBackgroundDynamics().clone());
boundaryCondition.setVelocityConditionOnBlockBoundaries(lattice, lattice.getBoundingBox(), boundary::dirichlet);
boundaryCondition.setVelocityConditionOnBlockBoundaries(lattice, bottomLid, boundary::neumann);

Everything should compile then.

Since you are just learning Palabos, you could as well try the “rectangularChannel3d” showCase or the “benchmarks/cavity3d” problems as well that compile in your version of Palabos without modifications.

Thanks for your post,
Dimitris

Dear Dimitris,

Thanks so much for your reply!

I followed your instructions and it works! Now I can compile the cavity3d code!

However, when I implemented the code I got some information like the one as follows at each iteration step:



Writing Gif …
convert: invalid pixel ./tmp/uz318500.ppm' @ error/pnm.c/ConstrainPixel/142. convert: invalid pixel./tmp/uNorm318500.ppm’ @ error/pnm.c/ConstrainPixel/142.
convert: invalid pixel `./tmp/omega318500.ppm’ @ error/pnm.c/ConstrainPixel/142.

And then I found all the figures in the directory “tmp” are just blue or black and with nothing on them.
Could you please tell me how could this happen and how I can figure it out?

And for the “benchmarks/cavity3d” problem, I’ve tried it. But finally I just got a plbProfile.xml file rather than some simulation figures as I expected. Is this normal?

One more question: initially I failed to compile the Python interface. But after reading the poster “palabos on kubuntu 11.10 64 bit” in the forum I figured out this problem. However, when I tried to run some examples in pythonic part like cavity2d by typing “python cavity2d.py” in the terminal, I got the following messages:

Internal structure of the 301-by-301 multi-block:
Number of blocks in multi-block:1
Smallest atomic-block: [0,300, 0,300]
Largest atomic-block: [0,300, 0,300]
Number of allocated cells: 0.090601 million
Percentage of allocated cells in multi-block: 100.0
Iterating
The energy is 3.4519982732e-06
Efficiency: 6.05420723429 Mega site updates per second.
The energy is 4.62176633016e-06
Efficiency: 5.95402937054 Mega site updates per second.
The energy is 5.41429191273e-06
Efficiency: 5.93154057214 Mega site updates per second.
The energy is 6.05525364829e-06
Efficiency: 5.92404309691 Mega site updates per second.
Plotting results


Then there automatically appeared a figure about the result, but I didn’t think it was correct and everything seemed to be stuck as after the message “Plotting results” nothing more was done until I manually closed the figure window and there appeared the prompt “chancey@ubuntu:” again…
It’s not normal, right? And what the so-called python interface should look like? I didn’t see a picture of it in any tutorial. Could you give us a picture of the interface please so that we can know if we’re working in the right way?

I’m looking forward to your reply.
Thank you very much!!

All the best,
Chancey

chancey Wrote:

Then there automatically appeared a figure about
the result, but I didn’t think it was correct and
everything seemed to be stuck as after the message
“Plotting results” nothing more was done until I
manually closed the figure window and there
appeared the prompt “chancey@ubuntu:” again…
It’s not normal, right? And what the so-called
python interface should look like? I didn’t see a
picture of it in any tutorial. Could you give us a
picture of the interface please so that we can
know if we’re working in the right way?

Dear Chancey,

This behaviour is normal. The python interface is not a GUI. It’s a wrapper for palabos written in… Python. The idea is that instead of writing your projects in C++, you can write them in Python.