public void GetForceElements(Vector[] coords
                                     , ForceField.INonbonded ffnonbond
                                     , double nonbonds_maxdist
                                     , out Tuple <int[], Vector[]>[] frcnonbond
                                     , out Tuple <int[], Vector[]>[] frcnonbond14
                                     )
        {
            double energy = 0;

            MatrixByArr[,] lhess = null;

            //lfrcfld = new List<ForceField.IForceField>(); lfrcfld.Add(new ForceField.MindyNonbondedLennardJones(false));
            //lfrcfld = new List<ForceField.IForceField>(); lfrcfld.Add(new ForceField.MindyNonbondedElectrostatic());
            List <Tuple <int[], Vector[]> > _frcnonbond   = new List <Tuple <int[], Vector[]> >();
            List <Tuple <int[], Vector[]> > _frcnonbond14 = new List <Tuple <int[], Vector[]> >();

            {
                //List<ForceField.IForceField> frcfld_nonbondeds = new List<ForceField.IForceField>();
                //frcfld_nonbondeds.Add(new ForceField.MindyNonbondedLennardJones(false));
                //frcfld_nonbondeds.Add(new ForceField.MindyNonbondedElectrostatic());
                Universe.Nonbondeds_v1 nonbondeds = new Universe.Nonbondeds_v1(atoms, size, nonbonds_maxdist);
                nonbondeds.UpdateNonbondeds(coords, 0);

                foreach (Universe.Nonbonded nonbond in nonbondeds)
                {
                    int[]    ids     = new int[2];
                    Vector[] lcoords = new Vector[2];
                    ids[0] = nonbond.atoms[0].ID; lcoords[0] = coords[ids[0]];
                    ids[1] = nonbond.atoms[1].ID; lcoords[1] = coords[ids[1]];
                    Vector[] lforces = new Vector[2] {
                        new double[3], new double[3]
                    };
                    ffnonbond.Compute(nonbond, lcoords, ref energy, ref lforces, ref lhess);
                    //if((lforces[0].Dist2 == 0) || (lforces[1].Dist2 == 0))
                    //    continue;
                    _frcnonbond.Add(new Tuple <int[], Vector[]>(ids, lforces));
                }

                foreach (Universe.Nonbonded14 nonbond in nonbonded14s)
                {
                    int[]    ids     = new int[2];
                    Vector[] lcoords = new Vector[2];
                    ids[0] = nonbond.atoms[0].ID; lcoords[0] = coords[ids[0]];
                    ids[1] = nonbond.atoms[1].ID; lcoords[1] = coords[ids[1]];
                    Vector[] lforces = new Vector[2] {
                        new double[3], new double[3]
                    };
                    ffnonbond.Compute(nonbond, lcoords, ref energy, ref lforces, ref lhess);
                    //if((lforces[0].Dist2 == 0) || (lforces[1].Dist2 == 0))
                    //    continue;
                    _frcnonbond14.Add(new Tuple <int[], Vector[]>(ids, lforces));
                }
            }
            frcnonbond   = _frcnonbond.ToArray();
            frcnonbond14 = _frcnonbond14.ToArray();
        }
        public void GetForceElements(Vector[] coords
                                     , ForceField.INonbonded ffnonbond
                                     , out Tuple <int[], Vector[]>[] frcnonbond
                                     , out Tuple <int[], Vector[]>[] frcnonbond14
                                     )
        {
            double nonbonds_maxdist = 12;

            GetForceElements(coords, ffnonbond, nonbonds_maxdist, out frcnonbond, out frcnonbond14);
        }