espressomd-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ESPResSo-devel] Bond-deleting strangeness


From: Axel Arnold
Subject: Re: [ESPResSo-devel] Bond-deleting strangeness
Date: Wed, 7 Jan 2015 23:20:07 +0100

Well, I was more polite about this change than Linus...

https://bugzilla.redhat.com/show_bug.cgi?id=638477#c129

But I do like his statement about standards :-). The other funny thing is that he thinks they just forgot to handle overlapping in early memcpy and therefore introduced memmove with guaranteed behavior. I just wrote try_delete_bond in the golden window when both were the same...

Cheers,
Axel

On 07.01.2015, at 23:10, Florian Weik <address@hidden> wrote:

This is a joke, right?

On Wed, Jan 7, 2015 at 10:56 PM, Axel Arnold <address@hidden> wrote:
Hi!

No, that problem is more subtle, and will probably stick around for a while. glibc < 2.14 aliased memcpy to memmove, which allows for overlapping memory regions, while memcpy doesn't. The current glibc versions have a more efficient memcpy, that does not allow for overlap, which in this case however occurs.

I can’t test on my Mac, since Apple decided wisely that an unmeasurable speed gain (according to Linus) isn’t worth breaking hundreds of applications, but most Linux distros seem to have this problem. Shooting yourself (or others) in the foot seems to be great fun...

Best,
Axel

On 07.01.2015, at 15:52, Florian Weik <address@hidden> wrote:

Hi,
the function looks suspicious to me, might be an off by one error. I'll get back to you if I've got it figured out.

Florian

On Wed, Jan 7, 2015 at 3:45 PM, Rudolf Weeber <address@hidden> wrote:
Hi,
On Wed, Jan 07, 2015 at 02:42:27PM +0100, Rudolf Weeber wrote:
> I encountered very strange behaviour when deleting individual bonds from particles which have more than one bond.
> In some cases, the code works correctly, in some cases, the wrong bond seems to be deleted and in some cases, the bond list gets screwed up completely.
> The code, which is supposed to delete the bond is in particle_data.cpp:try_delete_bond()
And here is a case, where the bond list is screwed up entirely:


{0 FENE 47.396 2.5 1.0} {1 angle_harmonic 473.96000000000004 1.0471975512} {2 FENE 473960.0 2.0 1.0} {3 FENE 473960.0 0.1 0.0} {1 1 lennard-jones 1000.0 2.672696154421018 3.0 0.25 0.0 0.0 0.0 } {magnetic 1.0  dawaanr }
I.e., bond 0 and 2 have one partner, bond 1 has two partners



Initial bond configurations
{ {0 21746} {0 21747} {0 22047} {1 22047 21746} {1 22049 21747} {1 22348 22047} {1 22349 22049} }
  Del: 0 21746
{ {0 21747} {0 22047} {1 22047 21746} {1 22049 21747} {22047 1} {22047 1} {22349 22049} }
                                                      ---------------------------------

The relevant code is
proc makeBondRigid { id bond} {
global bondMeshPairSoft 0
global bondMeshAngleSoft 1
global bondMeshPairStiff 2
global bondParticleMesh 3

 puts "$id: Making bond rigid: $bond"
 # First delete the old bond
 puts "[part $id print bond]"
 puts "  Del: $bond"
 eval "part $id bond delete $bond"
 puts "[part $id print bond]"

 # Make new bond with changed type
 lset bond 0 $bondMeshPairStiff
 # Add
 puts "  Add: $bond"
 eval "part $id bond $bond"
 puts "[part $id print bond]"
}


Regards, Rudolf





--

------------------------------------------------
JP Dr. Axel Arnold
ICP, Universität Stuttgart
Allmandring 3
70569 Stuttgart, Germany
Email: address@hidden
Phone: +49 711 685 67609




--
Florian Weik

address@hidden
++49 157 85939252


------------------------------------------------
JP Dr. Axel Arnold
ICP, Universität Stuttgart
Allmandring 3
70569 Stuttgart, Germany
Email: address@hidden
Phone: +49 711 685 67609


reply via email to

[Prev in Thread] Current Thread [Next in Thread]