class LennardJones

Public Class Methods

new() click to toggle source
# File lib/gimuby/problem/lennard_jones/lennard_jones.rb, line 5
def initialize
  @sigma = 1
end

Public Instance Methods

evaluate(atoms_positions) click to toggle source

@param atoms_positions {Array}

# File lib/gimuby/problem/lennard_jones/lennard_jones.rb, line 10
def evaluate(atoms_positions)
  number = atoms_positions.length
  potential = 0.0
  (number - 1).times do |i|
    atom_position_i = atoms_positions[i]
    target_indices = *(i+1..number-1)
    target_indices = [target_indices] unless target_indices.class == Array
    target_indices.each do |j|
      atom_position_j = atoms_positions[j]
      distance = get_euclidian_distance(atom_position_i, atom_position_j)
      if distance != 0
        potential += (@sigma / distance) ** 12
        potential -= (@sigma / distance) ** 6
      end
    end
  end
  potential * 4
end

Protected Instance Methods

get_euclidian_distance(atom_position1, atom_position2) click to toggle source
# File lib/gimuby/problem/lennard_jones/lennard_jones.rb, line 31
def get_euclidian_distance(atom_position1, atom_position2)
  distance = 0.0
  atom_position1.each_index do |k|
    distance += (atom_position1[k] - atom_position2[k]) ** 2
  end
  Math.sqrt(distance)
end