OSDN Git Service

Exclusion of non-bonding interaction in pi-metal systems were not working. Fixed.
authortoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Mon, 14 Oct 2013 11:15:15 +0000 (11:15 +0000)
committertoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Mon, 14 Oct 2013 11:15:15 +0000 (11:15 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@401 a2be9bc6-48de-4e38-9406-05402d4bc13c

MolLib/MD/MDCore.c

index daf2731..88bff3a 100644 (file)
@@ -279,11 +279,12 @@ s_register_missing_parameters(Int **missing, Int *nmissing, Int type, Int t1, In
 static int
 s_check_bonded(Molecule *mol, Int idx, Int *results)
 {
-       Int i, n, *ip;
+       Int i, j, n, *ip;
        const Int *cp;
        Atom *ap = ATOM_AT_INDEX(mol->atoms, idx);
        cp = AtomConnectData(&ap->connect);
        for (i = 0; i < ap->connect.count; i++, cp++) {
+               Atom *api;
                n = *cp;
                for (ip = results; *ip >= 0; ip++) {
                        if (n == *ip)
@@ -293,6 +294,35 @@ s_check_bonded(Molecule *mol, Int idx, Int *results)
                        *ip++ = n;
                        *ip = -1;
                }
+               api = ATOM_AT_INDEX(mol->atoms, n);
+               if (api->anchor != NULL) {
+                       const Int *cpi = AtomConnectData(&api->anchor->connect);
+                       for (j = 0; j < api->anchor->connect.count; j++, cpi++) {
+                               n = *cpi;
+                               for (ip = results; *ip >= 0; ip++) {
+                                       if (n == *ip)
+                                               break;
+                               }
+                               if (*ip < 0) {
+                                       *ip++ = n;
+                                       *ip = -1;
+                               }
+                       }
+               }
+       }
+       if (ap->anchor != NULL) {
+               cp = AtomConnectData(&ap->anchor->connect);
+               for (i = 0; i < ap->anchor->connect.count; i++, cp++) {
+                       n = *cp;
+                       for (ip = results; *ip >= 0; ip++) {
+                               if (n == *ip)
+                                       break;
+                       }
+                       if (*ip < 0) {
+                               *ip++ = n;
+                               *ip = -1;
+                       }
+               }
        }
        for (ip = results; *ip >= 0; ip++)
                ;