0

周期境界条件を持つ立方(3d)格子に、直径dの同一の重なり合わない粒子を配置するプログラムを作成しようとしています。

これが本当に意味するのは、以下のようなXYZファイルを作成するプログラムが必要ですが、すべての組み合わせを実行します。

H 0.0000000.0000005.000000
H 0.0000000.0000006.000000
H 0.0000000.0000007.000000
H 0.0000000.0000008.000000
H 0.0000000.0000009.000000

何らかの理由で、以下のコードはz値を0に保ち、他の組み合わせを作成するために値を通過しません...代わりにxとyのみを通過します。

#create a file and enter first two lines
text_file=open("question1.xyz","w")
text_file.write("\n")
text_file.write("comment goes here\n")

L=10
d=1

#first particle or line will be at 0,0,0, counter used to count how many lines
x,y,z = 0,0,0
counter=0

#placing the particles
while x<=L-d:
    while y<=L-d:
        while z<=L-d:
            text_file.write('H ')
            text_file.write('%f'%x)
            text_file.write('%f'%y)
            text_file.write('%f\n'%z)
            counter=counter+1
            z=z+d
        z=0
        y=y+d
    z,y=0,0
    x=x+d

text_file.close()

with open("question1.xyz") as infile:
    with open("outputfile.xyz","w") as outfile:
        for i,line in enumerate(infile):
            if i==0:
                outfile.write('%f\n'%counter)
            else:
                outfile.write(line)

なぜそれが起こっているのかについてのアイデアはありますか?私のwhileステートメントは少し厄介ですが、他にどのように行うのかわかりません

4

1 に答える 1

1

もっと簡単な方法があります。itertools.productを使用してください:

import itertools

L = 3
d = 1
counter = 0
with open("question1.xyz","w") as text_file:
    text_file.write("\ncomment goes here\n")
    for x,y,z in itertools.product(range(L),repeat = 3):
        text_file.write('H %f %f %f\n' % (x, y, z))
        counter=counter+1
于 2012-10-02T10:26:37.787 に答える