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); }