CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Programming & Development (
-   -   Edit linear solver (

luckycfd May 11, 2013 14:57

Edit linear solver
Hi all,
How can i edit linear solvers (PCG,PBICG,...) of openfoam, then compile them?

kmooney May 14, 2013 15:34

Its open source so you can really do whatever you please with the linear solvers.

You might be better of starting with simpler OpenFOAM programming before diving into the linear solvers, it sounds like you are really just getting started...

luckycfd June 6, 2013 04:19

ok tanx for your attention, but please help me how can i do it?
i copy the linear solver, for example PBC directory, in my home then compile this by wmake, but there is not exist Make directory in the PCG directory for compiling!

luckycfd June 10, 2013 12:53

compile openfoam linear solver
hi all,
how an i compile linear solver of openfoam?
for example, i copy PCG directory in my home then compile this by wmake, but there is not exist Make directory in the PCG directory for compiling! please help me. (i want edit this linear solver.)

wyldckat June 10, 2013 13:30

Greetings Hassan,

Please study the following pages, before continuing to try and modify a linear solver:
The last one is the one that gives the closest instructions to the changes you want to make, but these intermediate steps are very important, so that you can understand better how to build and change OpenFOAM source code!

Good luck! Best regards,

luckycfd July 18, 2013 18:16

openfoam linear solver

In order to create and use the new linear solver myPBiCG:
  1. cp –r $FOAM_SRC/OpenFOAM/matrices/lduMatrix/solvers/PBiCG $FOAM_RUN/myPBiCG
  2. Replace all occurences of PBiCG inside PBiCG.H/.C with myPBiCG and rename these files to myPBiCG.H/.C.
  3. create the directory structure : myPBiCG/Make, and create files and options in it.

$(FOAM_LIBBIN)/libOSspecific.o \
-L$(FOAM_LIBBIN)/dummy -lPstream \
  1. wmake libso
  2. then switched into cavity test case, added libs(“”); to controlDict in the cavity/system directory and edited system/fvSolution to use myPBiCG instead of PBiCG.

But when I run the cavity by icoFoan, I recevie this error at the end of running the case:
Segmentation fault”
Why? what is this error? how can i solve this error?

luckycfd July 19, 2013 16:10

Hi all
any body? please help me?

luckycfd July 20, 2013 18:49

friends? please

wyldckat July 21, 2013 05:07

1 Attachment(s)
Greetings Hassan,

People that usually can help here in the forum, only do it when they have some spare time. So, please be patient ;)

I followed your steps and as far as I can figure out, the only problem could be that you added too many things to the file "Make/options".

Since I had the trouble to follow your steps and to create both the library and the test case, attached are both ready for testing. I used OpenFOAM 2.2.x, but should work fine on any 2.2.

edit: next time you post code, please use the "[CODE]" marker, as exemplified in the second link on my signature.

Best regards,

luckycfd July 21, 2013 07:48

Greetings Bruno,
thank you very much:)
Best regards,

luckycfd August 18, 2013 14:00

edit precontitioner

After compile the new preconditioner(myDILUPreconditioner) Successfully in the same way for adding the new linear solver library(myPBiCG).
I add to controlDict in the cavity/system directory:
and edite system/fvSolution to use myDILU instead of DILU.
But I recevie this error:

 Unknown asymmetric matrix preconditioner myDILUPreconditioner

 Valid asymmetric matrix preconditioners :



     From function lduMatrix::preconditioner::New(const solver&, const dictionary&)
     in file matrices/lduMatrix/lduMatrix/lduMatrixPreconditioner.C at line 123.

 FOAM exiting

please guide me how can I use my preconditioner?

Best regards,

wyldckat August 18, 2013 14:04

Hi Hassan,

Go into the folder where you have the "myDILUPreconditioner" source code and run:

wclean all
Then compress the folder of the source code "myDILUPreconditioner" and attach the compressed file on your next post.

This way I'm able to tell you what you forgot to do.

Best regards,

luckycfd August 18, 2013 14:11

1 Attachment(s)
thank you,
source file is attached.

wyldckat August 18, 2013 14:35

Hi Hassan,

It's simple. Notice these two lines in the header file "*.H"?

    //- Runtime type information

You should change it to:

    //- Runtime type information

Best regards,

luckycfd August 18, 2013 14:43

Mr. Bruno
It,s OK!
Thank You very very much:)

best regards,

luckycfd August 22, 2013 03:10

1 Attachment(s)
Greetings Bruno,

Why the options file of myPBiCG can be empty? I use two diffrence form of options file, but both of them seems true! What is the difference between options_1 and options_2 files that is attached?

Best regards,

wyldckat August 22, 2013 05:47

Hi Hassan,

There are two details you need to check:
  1. After changing the "options" file, did you run the following command?

    wclean libso
  2. When you run:

    wmake libso
    you have to look at the output and look for the lines that start with "SOURCE", then see what occurrences there are of "-I", which indicate which folders have headers files that should be added to the search list for the file being currently compiled.
    • The default option usually is to always include the "$(FOAM_SRC)/OpenFOAM/lnInclude" folder.
    • In this case, it's possible that myPBiCG doesn't need anything from the "finiteVolume" header files.
Best regards,

luckycfd August 22, 2013 08:38

Thank you Mr. Bruno,

Yes, I run

wmake libso

wmake libso
In the output, lines that start with "SOURCE", show occurrences that I added in the options file, but how can I find out which folders have headers files that should be added to the search list for the file being currently compiled?

Best regards,

wyldckat August 22, 2013 08:55

Well, whenever the compiler complains about not finding a header file, you can use the find command like this:

find $FOAM_SRC -name the_name_of_the_header_file.H
Usually you should include the entries for the "lnInclude" folders.

luckycfd August 22, 2013 10:16

Thank you Mr. Bruno:):):)

All times are GMT -4. The time now is 05:12.