CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (http://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Compiling a custion Boundary Condition (http://www.cfd-online.com/Forums/openfoam-programming-development/115009-compiling-custion-boundary-condition.html)

JimKnopf March 21, 2013 12:26

Compiling a custion Boundary Condition
 
Hello Everyone,

i got a problem that i don't understand.

What I want:
A custom BC derived from fixedGradientFvPatchField

What I tried:
Copy the original source code an replace fixedGradientFvPatchField with hTCFvPatchField in the filenames and in the files.
Added a Make directory with files:
Code:

hTCFvPatchField.C

LIB = $(FOAM_USER_LIBBIN)/libmyBCs

and options:
Code:

EXE_INC = \
        -I$(FOAM_SRC)/finiteVolume/lnInclude

LIB_LIBS =

Unfortunatly this results in a compiling error:
Code:

hTCFvPatchField.C:37:1: error: redefinition of 'Foam::hTCFvPatchField<Type>::hTCFvPatchField(const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&)'
hTCFvPatchField.C:37:1: error: 'Foam::hTCFvPatchField<Type>::hTCFvPatchField(const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&)' previously declared here
hTCFvPatchField.C:49:1: error: redefinition of 'Foam::hTCFvPatchField<Type>::hTCFvPatchField(const Foam::hTCFvPatchField<Type>&, const Foam::fvPatch&, const Foam::DimensionedField<Type, Foam::volMesh>&, const Foam::fvPatchFieldMapper&)'

and so forth for every method.

What did I do wrong?
I tried the same workflow with the original code and got the same result ?!?

I would be glad abount any idea.

Greets
Jim

JimKnopf March 21, 2013 16:11

Although double posting should be no godd style, here is the answer I found:

in Make/files is has to be
Code:

htcFvPatchFields.C

LIB =  $(FOAM_USER_LIBBIN)/libmyBCs

Now, my question is why? What is the intention of the classNames.C files ?

It does just include the definition file and does some kinde of object registration, but it does not do a forward declaration.

Greets,
Jim

chegdan March 21, 2013 18:35

Just a tip on derived boundary conditions. If it is going to be derived from a basic type, then start with something else other than the basic type. By this i mean, go to an already derived BC from the type you want....and start from there. This will be much less painless as you will deal less with the template and minimize the amount of time you bang your head on the table in frustration :).

#protip

JimKnopf March 22, 2013 02:52

The head banging is definitly your point. but for me, I don't like to do what the software "wants" me to do, I like to do with the Software what I want. :D

Templates are not the magic that made the problem, it was more the point that there is a "NoRepository" Flag in the class.H file, which included the .C file and therefore produced a preprocessor loop.

What I'm wondering is, why is it done the way it is done, to me it makes no sense yet. As far as I can see, the inventors of OpenFoam included some kind of sens in every piece of their code. :confused::)

Greets
Jim


All times are GMT -4. The time now is 20:09.