コード例 #1
0
ファイル: Fplo8Data.cs プロジェクト: eylvisaker/tbsuite
        public void FindAtoms(WannierData retval)
        {
            const int size = 4;

            Vector3 origin = retval.Grid.Origin;
            Vector3[] span = retval.Grid.SpanVectors;

            oldFindAtoms(retval);

            List<Atom> atoms = new List<Atom>();

            foreach (Atom atom in sites)
            {
                for (int k = -size; k <= size; k++)
                {
                    for (int j = -size; j <= size; j++)
                    {
                        for (int i = -size; i <= size; i++)
                        {
                            Vector3 v = i * lattice[0] + j * lattice[1] + k * lattice[2];
                            Vector3 loc = atom.Position + v;
                            loc -= origin;
                            bool bad = false;

                            for (int l = 0; l < 3; l++)
                            {
                                double dot = span[l].DotProduct(loc);
                                double dist = dot / span[l].Magnitude;

                                if (dot < 0) bad = true;
                                if (dist > span[l].Magnitude) bad = true;
                            }

                            if (bad)
                                continue;

                            Atom a = new Atom();
                            a.Element = atom.Element;
                            a.Position = loc;

                            atoms.Add(a);
                        }
                    }
                }
            }

            retval.Atoms.Clear();
            retval.Atoms.AddRange(atoms);
        }
コード例 #2
0
        private void ReadAtomPositions(StreamReader reader, WannierData retval, int count, int number)
        {
            if (number > 0)
            {
                ReadToComment(reader);
                return;
            }

            for (int i = 0; i < count; i++)
            {
                Vector3 p = Vector3.Parse(ReadNextLine(reader));

                Atom a = new Atom();
                a.Position = p;

                retval.Atoms.Add(a);
            }

            ReadToComment(reader);
        }
コード例 #3
0
ファイル: Fplo8Data.cs プロジェクト: eylvisaker/tbsuite
        int AtomSorter(Atom a, Atom b)
        {
            if (a.Element != b.Element)
                return a.Element.CompareTo(b.Element);

            int val = a.Position.Z.CompareTo(b.Position.Z);

            val = (val == 0) ? a.Position.Y.CompareTo(b.Position.Y) : val;
            val = (val == 0) ? a.Position.X.CompareTo(b.Position.X) : val;

            return val;
        }
コード例 #4
0
ファイル: Fplo8Data.cs プロジェクト: eylvisaker/tbsuite
        internal void ReadAtomSites(System.IO.StreamReader reader, Fplo8Data data, int count)
        {
            if (count == 0)
                throw new ArgumentException("Number of sites can't be zero.");

            for (int i = 0; i < count; i++)
            {
                string line = reader.ReadLine().Trim();

                string[] text = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                Atom a = new Atom();
                a.Element = text[1];

                int len = text.Length;
                a.Position = Vector3.Parse(text[len - 3], text[len - 2], text[len - 1]);

                sites.Add(a);
            }
        }