Added simplified Coulomb kernel
This commit is contained in:
parent
b5beb5d2cd
commit
8dd3de290b
|
@ -83,5 +83,39 @@ void initialize_registry(KernelRegistry* registry, std::string strategy_name) {
|
|||
return Kernel("daxpy", execute, prepare);
|
||||
});
|
||||
|
||||
// SIMPLIFIED COULOMB POTENTIAL
|
||||
registry->register_kernel("coulomb", [&]() {
|
||||
auto potential = std::make_shared<std::vector<float>>();
|
||||
auto charge1 = std::make_shared<std::vector<float>>();
|
||||
auto charge2 = std::make_shared<std::vector<float>>();
|
||||
auto rx = std::make_shared<std::vector<float>>();
|
||||
auto ry = std::make_shared<std::vector<float>>();
|
||||
auto rz = std::make_shared<std::vector<float>>();
|
||||
|
||||
auto prepare = [=]() {
|
||||
potential->resize(VECTOR_SIZE);
|
||||
charge1->resize(VECTOR_SIZE);
|
||||
charge2->resize(VECTOR_SIZE);
|
||||
rx->resize(VECTOR_SIZE);
|
||||
ry->resize(VECTOR_SIZE);
|
||||
rz->resize(VECTOR_SIZE);
|
||||
|
||||
initialize_vector(*charge1);
|
||||
initialize_vector(*charge2);
|
||||
initialize_vector(*rx);
|
||||
initialize_vector(*ry);
|
||||
initialize_vector(*rz);
|
||||
};
|
||||
|
||||
auto execute = [=](int kernel_start_idx, int kernel_end_idx, int num_threads_or_tasks) {
|
||||
strategy::execute_strategy(strategy_name, kernel_start_idx, kernel_end_idx, num_threads_or_tasks, [&](int i) {
|
||||
(*potential)[i] = (*charge1)[i] * (*charge2)[i] / std::sqrt((*rx)[i] * (*rx)[i] + (*ry)[i] * (*ry)[i] + (*rz)[i] * (*rz)[i]);
|
||||
});
|
||||
};
|
||||
|
||||
return Kernel("coulomb", execute, prepare);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue