CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM (
-   -   Where might I obtain a copy of FOAM-2.2/2.3...? (

bigphil July 13, 2010 06:28

Where might I obtain a copy of FOAM-2.2/2.3...?

I wonder if anyone might know where I can obtain a copy of FOAM-2.3 or earlier?

I want to see how/if the old version of the contact stress solver worked, as the current version in the -dev line does not work anymore presumably due to certain changes/updates in the main source files.

Any suggestions would be very welcome,

Philip C

Also, I am not quite sure of the legalities since FOAM was a commercial software although Nabla Ltd did offer free academia licenses.

hjasak July 13, 2010 10:19

I've got the full archive, back to approx 1993. It would be nice to know what does not work, especially to help with fixing it.

As a former director of Nabla Ltd, I am sure I can legally give you the code. Here's the listing of some of the old release versions done under Nabla Ltd; other and older work, including my PhD version (foam-1.5, 1996) are on backup DVDs, so these are easier:

16M 2001-07-06 11:16 foam1.9.6_19_04_01.gtgz
46M 2002-01-21 19:58 foam2.0_21_01_02.gtgz
48M 2002-03-28 15:11 foam2.1_28_03_02.gtgz
85M 2003-12-04 19:43 foam2.2_04_12_03.gtgz
88M 2004-12-13 16:22 foam2.3.2_13_12_04.gtgz
75M 2004-12-13 16:22 foam2.3_28_10_04.gtgz


bigphil July 13, 2010 10:46

Thanks for the help
1 Attachment(s)
Hi Hrv,

Thanks for replying.

That would be great if you could send me one of the FOAM versions, if possible the version in which the original contact solver was developed, so I can compare codes with the current release.

I have spent the past few weeks seriously looking into newContactStressFoam, and the problem seems to be that the slave faces that are partially in contact seem to be set with the wrong BC; these faces get displaced too close to the contact surface causing tensile stress peaks.
The attached picture shows how there are tensile stress peaks in the slave cells with faces that are partially in contact (slave is on the top).
These partially in-contact faces are a mix between fixedValue (in-contact) and fixedGradient (not-in-contact) where the touchFraction sets the proportion of mixing, but it doesn't seem to be mixed correctly.

The master is fine, as the method only passes over positive pressures, but the slave faces partially in contact do not do what they are meant to...

Maybe some changes in the main OpenFOAM code have caused the solver to stop working... that's why I would like to get a hold of the original "working" code and compare things and find the problem.

Best Regards,

hjasak July 14, 2010 03:51

We had to introduce some changes saying that the contact cannot transfer the tensile stresses (on the stress side) and that the cells under tension lose contact (on the displacement side). It will be in the force transfer in the boundary condition, probably in the top-level solver at that time. Have a look at the code and see on which side you get tension (the one that uses fixed displacement or the one which fixes traction) - that should tell you which filter is missing.

My guess is that you won't find what you need in the library, because contact detection and interpolation didn't change in quite a while (6-7 years?). You need the old contact code, probably from the UC Dublin group.

In any case, if you want the old releases you are welcome to it, but please tell me which one.


bigphil July 14, 2010 06:40


For newContactStressFoam the slave (the one that is fixed displacement) has tension in the partially in contact cells.
I can see in the code where the pressure is passed from the slave to the master (fixed traction patch) and it only passes positive pressure and so the master is fine and never has tensile stresses at the contact.
So this master moves a bit from the pressure and then the slave gets displaced up to it and the loop continues until the contact converges.
The problem as I see it is setting the correct conditions on the slave faces that are partially in contact, hmmmn I think this comes down to setting the correct valueFraction at these faces.

Hmmnn you are probably right about me needing the old code but I am finding it hard to acquire - I am a PhD student in U C Dublin!. I have been working closely with Aleksandar Karac but he cannot seem to find his old code that he definitely had working.
If you are able to send me the last FOAM release (75M 2004-12-13 16:22 foam2.3_28_10_04.gtgz) that would be great! Hopefully it is only something small that has to be changed.

Also from slowly going through the code, there are a few things that look a bit strange to me (or maybe I am not interpretting/understanding them correctly), for example:

In newContactStressFoam, the slave valueFraction is set as

(contactProblem.C line 248):
            slavePatch.valueFraction() =
                (1.0 - urfFraction_)*slavePatch.valueFraction()
              + I*urfFraction_*valueFraction[slaveIndex];

where valueFraction[patchI]=touchFrac (just a scalar!)

This means that the valueFraction does not take into account the patch normals!? What direction gets set as fixedValue in this case?
I would set the slave valueFration as:

            slavePatch.valueFraction() =
                (1.0 - urfFraction_)*slavePatch.valueFraction()
              + I*urfFraction_*valueFraction[slaveIndex] * symm(nSLavePatch*nSlavePatch);

// remembering that valueFraction[slaveIndex] is just the slave touchFrac

In this way, the slave faces would be fixedValue (or a mix of FV and FG if touchFrac is < 1) in their normal direction and fixedGradient in their tangential direction.
I made this change and it seems to work better but the slave partially in contact faces still are in tension.

Another piece of code that look strange to me is when the slave refValue is calculated (contactPatchPair.C line 355):


    refValue[slaveIndex] +=
                (nSlavePatch & Upatches[slaveIndex])
              + slaveFrac*contactTol_
            (nSlavePatch & slaveDisp)

There are a few things in the above assignment that I don't quite get:
1) pos(slaveFrac) is always all "1"? slaveFrac varies from 0 to 1 but by the definition of "pos" in the programmer's guide, it says pos(s) is 1 for s>=0?
2) Why use "+=" instead of "=", refValue[slaveIndex] is set to zero just before this?
3) What is the point of the first argument in the "min()" function? It just moves the faces by the contactTol_, is this just to make sure the faces don't move too quickly per step?
Does under-relaxtion not achieve this anyway?

I would think to set the slave refValue as:

refValue[slaveIndex] =  nSlavePatch * (nSlavePatch & slaveDisp);
I made this change and I found that the contact converges quicker but the tension problem remains.

Phew, sorry for the long long reply, I feel as if it is something small (hopefully),

Best Regards,
Philip C

Prof. Ivankovic's Research Group
University College Dublin

bigphil July 27, 2010 11:54

The problem seems to be with the direction of the valueFraction

the problem seems to be with the direction of the valueFraction on the slave patch - the slave patch is the directionMixed patch.

The valueFraction (symmTensor) depends on the touchFrac (scalar) but the problem is: what direction should the slave faces be a mix of fixedValue and fixedGradient? i.e. How do you calculate the slave valueFrac when you have the slave touchFrac?

At the moment in newContactStressFoam, valueFraction is set:
valueFraction = I*touchFrac;
But what direction are the faces a mix of fixedValue and fixedGradient?

I have tried:
valueFraction = touchFrac*symm(nSlavePatch*nSlavePatch)
it works better but is not right for partially in contact faces.

I have also tried:
valueFraction = touchFrac*symm(nSlaveDisp*nSlaveDisp)
where nSlaveDisp=slaveDisp/mag(slaveDisp);
This works better for partially in contact faces but still sometimes they are in tension.

In the physical sense I am unsure which direction should be used...
I am spending considerable time on this and I am not sure I am even going in the right direction,
Do you have any tip how I might get to the bottom of this?


All times are GMT -4. The time now is 00:39.