@guoxs
2017-03-11T17:17:24.000000Z
字数 3066
阅读 2142
Zeolite
GenerateLTA
GenerateLTA(HEAD,L,N)
INPUT: HEAD(the head of linklist), L(layer), N(number of nodes)
OUTPUT: The LinkList which represents the structure of LTA
Initialise(HEAD); (Add N emputy nodes in linklist)
i = 1;
while i <= L:
add 4 bonds of each node in layer i;
complete the loop configuration of each node in layer i;
add 4 bond labels of each node in layer i;
if i > 2 :
close the 6-numbered ring of each node in layer i-2;
if i > 3 :
close the 8-numbered ring of each node in layer i-3;
compute the number of nodes in layer i+1;
exchange nodes deleted in ring closing with nodes which do not belong to layer i+1;
i=i+1;
return HEAD;
add 4 bond labels of node:
AddBondLabels(HEAD,node,labels)
INPUT: HEAD(the head of linklist),node(node to complete bonds lebels),labels={446,446,448,668};
OUTPUT: HEAD
if Loop Configuration of node is complete :
bonds = node.bonds;
while bonds != null :
if bonds.hasLabel:
remove the type of label in bonds from labels;
bonds = bonds.next;
switch labels.length:
case 1:
set the bond wothout label of labels[0];
break;
case 2,3,4:
if label of 668 in labels:
set label 668 in bonds;
set the other bond labels;
break;
return HEAD;
close the 6-numbered ring
closeHexRing(HEAD,node,labels)
INPUT: HEAD(the head of linklist),node(node to complete bonds lebels),labels={446,446,448,668};
OUTPUT: the count of ring that closed
if four bonds labels are not completed :
return 0;
closeRingCount = 0;
bonds = {bond668,bond446_1,bond446_2};
path = {};
i = 1;
for i <= 2:
bond1 = bonds[0], bond2 = bonds[i];
if both bond1 and bond2 are not in any 6-numbered ring :
while path.length <= 6 :
if bond1 != null && bond2 != null:
path.add(bond1.bond2);
else
break;
if bond1.label == 668:
from bond1 get bond3 of label 446 in next layer;
from bond2 get bond4 of label 668 in next layer;
else if bond1.label == 446:
from bond1 get bond3 of label 668 in next layer;
from bond2 get bond4 of label 446 in next layer;
bond1 = bond3;
bond2 = bond4;
mark all bonds in path in 6-numbered ring;
node1 = path[5].toNode, node2 = path[6].toNode;
if node1 == node2:
return 0;
append the information of node2 to node1 and empty node2;
closeRingCount++;
return closeRingCount;
close the 8-numbered ring
closeOctRing(HEAD,node,labels)
INPUT: HEAD(the head of linklist),node(node to complete bonds lebels),labels={446,446,448,668};
OUTPUT: the count of ring that closed
if four bonds labels are not completed :
return 0;
closeRingCount = 0;
bond1 = bond668, bond2 = bond446;
path = {};
while path.length <= 8:
if bond1 != null && bond2 != null:
path.add(bond1.bond2);
if bond1.label == 668:
from bond1 get bond3 of label 448 in next layer;
from bond2 get bond4 of label 668 in next layer;
else if bond1.label == 448:
from bond1 get bond3 of label 668 in next layer;
from bond2 get bond4 of label 448 in next layer;
bond1 = bond3;
bond2 = bond4;
node1 = path[7].toNode, node2 = path[8].toNode;
if node1 == node2:
return 0;
append the information of node2 to node1 and empty node2;
closeRingCount++;
return closeRingCount;
Embedding
origin = {sqrt(2) / 2.0,0.0,sqrt(2)};
Xlta = { 0.0, -sqrt(2) / 2.0, sqrt(2) };
Ylta = { 0.0, sqrt(2) / 2.0, sqrt(2) };
Zlta = { sqrt(2) / 2.0, 0.0, sqrt(2)+1.0 };
Plta = { sqrt(2), 0, sqrt(2) / 2.0 };
embeddingLTA(HEAD,length)
INPUT: HEAD(the head of linklist), length(bond length);
OUTPUT: the linklist of LTA
node = HEAD.next;
if node == null:
return null;
node.coordinate = origin;
set four nodes coordinate in layer 2 from Xlta, Ylta, Zlta, Plta according to bond label;
while node.vs != null && node.vs is complete :
for ring in node.vs:
compute coordinate of nodes in ring;
node = node.next;
return HEAD
PeriodDetection