CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Customize linearSpring restraint (https://www.cfd-online.com/Forums/openfoam-programming-development/172048-customize-linearspring-restraint.html)

federicabi May 23, 2016 08:50

Customize linearSpring restraint
 
Hi everyone!
I'm stuck on a problem, because I'm new in programming in openFOAM. I need to compile a new restraint similar to linearSpring, so I took a look at the .H and .c files of linearSpring restraint and I need to modify the restraintForce term with a time varying force composed like this: (Fx,0,Fx*tan(alpha)).
Fx is the sum of Fx pressure and Fx viscous and it needs to be extract each time step from the forces.dat file. alpha is the angle between the initial position of the x-axis of the system and the new position, I think it can be extract from the motion.orientation() tensor each time step. The problem is that I don't know how to extract these data to put them into the linearSpring library.

I tried to modify the library like below


void Foam::sixDoFRigidBodyMotionRestraints::linearSprin g::restrain
(
const sixDoFRigidBodyMotion& motion,
vector& restraintPosition,
vector& restraintForce,
vector& restraintMoment
) const
{
restraintPosition = motion.transform(refAttachmentPt_);

vector r = restraintPosition - anchor_;

scalar magR = mag(r);
r /= (magR + VSMALL);

vector v = motion.velocity(restraintPosition);

restraintForce = vector(Fx,0,Fx*tan(alpha))

restraintMoment = vector::zero;

if (motion.report())
{
Info<< " attachmentPt - anchor " << r*magR
<< " spring length " << magR
<< " force " << restraintForce
<< endl;
}
}

Now I need to build a new function in this dictionary to extract Fx and alpha.
Anyone knows how can I do that?
Your help would be very appreciated.

Best regards

Federica

federicabi May 30, 2016 05:21

2 Attachment(s)
Hi,
I have tried to write the code and then to compile it, but openFOAM gives me errors. In particular I'm worried about this error

In file included from linearSpringFede1.C:26:0:
linearSpringFede1.H: In member function ‘virtual Foam::autoPtr<Foam::sixDoFRigidBodyMotionRestraint > Foam::sixDoFRigidBodyMotionRestraints::linearSprin gFede1::clone() const’:
linearSpringFede1.H:104:44: error: cannot allocate an object of abstract type ‘Foam::sixDoFRigidBodyMotionRestraints::linearSpri ngFede1’
new linearSpringFede1(*this)
^
linearSpringFede1.H:56:7: note: because the following virtual functions are pure within ‘Foam::sixDoFRigidBodyMotionRestraints::linearSpri ngFede1’:
class linearSpringFede1
^

I haven't modified this part, except for the name of the restraint.
Do you know how can I fix it?

Best regards

Federica

federicabi June 9, 2016 09:42

Solved
 
Solved.

I added 3 more variables to a function argument, into the header file, instead defining them into the function itself.

mhasif02 March 28, 2019 06:18

Hi Federica,

I'm having the same error when compiling this linearSpring restraint. How did you fix it? what did you add inside the .H file?

Mohamad


All times are GMT -4. The time now is 22:10.