# Customize linearSpring restraint

 Register Blogs Members List Search Today's Posts Mark Forums Read

 May 23, 2016, 08:50 Customize linearSpring restraint #1 Member   Federica Biano Join Date: Feb 2016 Location: Genova, Italy Posts: 39 Rep Power: 10 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

May 30, 2016, 05:21
#2
Member

Federica Biano
Join Date: Feb 2016
Location: Genova, Italy
Posts: 39
Rep Power: 10
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
Attached Files
 linearSpringFede1.H (4.0 KB, 8 views) linearSpringFede1.C (4.8 KB, 12 views)

Last edited by federicabi; June 9, 2016 at 09:25.

 June 9, 2016, 09:42 Solved #3 Member   Federica Biano Join Date: Feb 2016 Location: Genova, Italy Posts: 39 Rep Power: 10 Solved. I added 3 more variables to a function argument, into the header file, instead defining them into the function itself.

 March 28, 2019, 06:18 #4 New Member   Mohamad Join Date: Apr 2017 Location: Oxford, UK Posts: 10 Rep Power: 9 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

 Tags forces, linearspring