예제 #1
0
        public void EvalProps()
        {
            double vv;

            vSum.VZero();
            vvSum = 0;
            foreach (Node node in nodes)
            {
                vSum.VVAdd(node.Getv);
                vv     = node.Getv.x * node.Getv.x + node.Getv.y * node.Getv.y + node.Getv.z * node.Getv.z;
                vvSum += vv;
            }
            kinEnergy.SetVal(0.5 * vvSum / nMol);
            totEnergy.SetVal(kinEnergy.GetVal + uSum / nMol);
            pressure.SetVal(density * (vvSum + virSum) / (nMol * NDIM));
        }
예제 #2
0
파일: MDsystem.cs 프로젝트: xuechui/MDWF
        public void EvalProps()
        {
            double vv;

            vSum.VZero();
            vvSum = 0;

            avgChainLen = 0;
            double chainLen = 0;
            int    chainNum = 0;
            VecR   dr;

            foreach (Node node in nodes)
            {
                vSum.VVAdd(node.Getv);
                vv     = node.Getv.x * node.Getv.x + node.Getv.y * node.Getv.y + node.Getv.z * node.Getv.z;
                vvSum += vv;
            }
            kinEnergy.SetVal(0.5 * vvSum / nMol);
            totEnergy.SetVal(kinEnergy.GetVal + uSum / nMol);
            pressure.SetVal(density * (vvSum + virSum) / (nMol * NDIM));


            for (int j1 = 0; j1 < nodes.Count; j1++)
            {
                foreach (int j2 in nodes[j1].GetCon)
                {
                    if (j1 < j2)
                    {
                        dr.x = nodes[j1].Getr.x - nodes[j2].Getr.x;
                        dr.y = nodes[j1].Getr.y - nodes[j2].Getr.y;
                        dr.z = nodes[j1].Getr.z - nodes[j2].Getr.z;
                        dr.VWrap(region);
                        chainLen += dr.x * dr.x + dr.y * dr.y + dr.z * dr.z;
                        chainNum++;
                    }
                }
            }
            avgChainLen = chainLen / chainNum;
        }