refract function