@guoxs
2017-03-11T09:17:24.000000Z
字数 3066
阅读 2389
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 LTAInitialise(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: HEADif 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 closedif 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);elsebreak;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 closedif 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 LTAnode = 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