Question about custom property in the simulation with parallel cpus
Hi
I have added a custom properties for each contact to store some value, for example myvalue[n].
If I retrive this value like "double tmp = myvalue[0]", where "tmp" was defined in the calculateforce(), then all the calculation I used tmp, in the parallel mode, does "tmp" for each contact assgined correctly?
Thanks
Answers
-
Hi Raheem,
Yes...and no. It will depend on how you are using tmp. It will assign myvalue[0] to tmp when called, and do this for every contact every time-step, and also be doing this simultaneously per thread.If you are setting tmp from 'contact 1' and then want to use this as a constant for contacts 1-n you would have to add some special condition, like only assigning if element1 and element2 ID's are specific values. Also would want to apply it at t+1. This is because "double tmp = myvalue[0]" would set a new value per thread and also the contacts 1-n would come in a random order.
However if you want to use "double tmp = myvalue[0]" and have a unique value per contact then it would be OK.
Regards
Stephen
0 -
Stephen Cole_21117 said:
Hi Raheem,
Yes...and no. It will depend on how you are using tmp. It will assign myvalue[0] to tmp when called, and do this for every contact every time-step, and also be doing this simultaneously per thread.If you are setting tmp from 'contact 1' and then want to use this as a constant for contacts 1-n you would have to add some special condition, like only assigning if element1 and element2 ID's are specific values. Also would want to apply it at t+1. This is because "double tmp = myvalue[0]" would set a new value per thread and also the contacts 1-n would come in a random order.
However if you want to use "double tmp = myvalue[0]" and have a unique value per contact then it would be OK.
Regards
Stephen
Thanks Stephen,
For example of my code, rij_0 for each bond created at requested time, the force calculation of each bond depends on rij_0, and I used rij_0 and a_par in the calculation, from the results of simulations, it seems right at now. But I am not sure if I am using custom properties correctly.
CSimple3DVector rij_0; RIJ = element2.position-element1.position; if(timeStepData.time >= m_requestedBondTime && m_BondStatus[0] == 0.0 && nBondSeperation < 0.0) { m_InitialVectorIDelta[0] = RIJ.getX(); m_InitialVectorIDelta[1] = RIJ.getY(); m_InitialVectorIDelta[2] = RIJ.getZ(); } if(m_BondStatus[0] == 1.0) { rij_0 = CSimple3DVector(m_InitialVectorI[0], m_InitialVectorI[1], m_InitialVectorI[2]); //initial vector double a_par = rij_0.length(); }
0 -
Raheem Sterling_22160 said:
Thanks Stephen,
For example of my code, rij_0 for each bond created at requested time, the force calculation of each bond depends on rij_0, and I used rij_0 and a_par in the calculation, from the results of simulations, it seems right at now. But I am not sure if I am using custom properties correctly.
CSimple3DVector rij_0; RIJ = element2.position-element1.position; if(timeStepData.time >= m_requestedBondTime && m_BondStatus[0] == 0.0 && nBondSeperation < 0.0) { m_InitialVectorIDelta[0] = RIJ.getX(); m_InitialVectorIDelta[1] = RIJ.getY(); m_InitialVectorIDelta[2] = RIJ.getZ(); } if(m_BondStatus[0] == 1.0) { rij_0 = CSimple3DVector(m_InitialVectorI[0], m_InitialVectorI[1], m_InitialVectorI[2]); //initial vector double a_par = rij_0.length(); }
Hi Raheem,
That looks correct to me so long as you are using rij_0 per bond.
Just to note I don't think that this is doing anything with the code as shown:
double a_par = rij_0.length();
As you are declaring this inside the bracers {} as soon as this is closed with } anything declared within these brackets is deleted. As you have declared rij_0 outside the brackets shown this will continue to exist.
Regards
Stephen
0 -
Stephen Cole_21117 said:
Hi Raheem,
That looks correct to me so long as you are using rij_0 per bond.
Just to note I don't think that this is doing anything with the code as shown:
double a_par = rij_0.length();
As you are declaring this inside the bracers {} as soon as this is closed with } anything declared within these brackets is deleted. As you have declared rij_0 outside the brackets shown this will continue to exist.
Regards
Stephen
Hi Stephen,
Because the force and torque calculation are in the bracers{}, and double "a_par" was easy for me to read the code.
rij_0 was declared outside the brackets, and I know it will continue to exist, but it seems no difference here to define it inside or outside the brackets, until now, no bug happens to me.
And I post this question because when I rerun the simulation, the broken behaviour of bonds was difference. The strength for each bond was the same. So I am doubt may some bond properties given to each bond changed over the time.
Regards!
Raheem
0