|
@@ -431,42 +431,40 @@ namespace nmie {
|
|
|
// int ScattCoeffs(const unsigned int L, const int pl, std::vector<double>& x, std::vector<std::complex<double> >& m,
|
|
|
// const int nmax, std::vector<std::complex<double> >& an, std::vector<std::complex<double> >& bn) {
|
|
|
|
|
|
-
|
|
|
-std::complex<double>
|
|
|
-test_stdvec(const std::complex<double> a, const std::vector< std::complex<double> > input, std::vector< std::complex<double> >& output) {
|
|
|
- for (unsigned int i = 0; i < input.size();++i){
|
|
|
- output[i] = input[i]*a;
|
|
|
- }
|
|
|
- return a;
|
|
|
-}
|
|
|
|
|
|
-std::tuple<
|
|
|
- py::array_t< std::complex<double>, py::array::c_style | py::array::forcecast>,
|
|
|
- std::complex<double>
|
|
|
- >
|
|
|
-py_test_stdvec(const std::complex<double> a,
|
|
|
- py::array_t< std::complex<double>, py::array::c_style | py::array::forcecast> py_input) {
|
|
|
- std::vector< std::complex<double> > c_input(py_input.size());
|
|
|
- std::vector< std::complex<double> > c_output(py_input.size());
|
|
|
+py::tuple py_ScattCoeffs(
|
|
|
+ py::array_t<double, py::array::c_style | py::array::forcecast> py_x,
|
|
|
+ py::array_t< std::complex<double>, py::array::c_style | py::array::forcecast> py_m// ,
|
|
|
+ // const int nmax=-1, const int pl=-1
|
|
|
+ ) {
|
|
|
|
|
|
- std::memcpy(c_input.data(), py_input.data(), py_input.size()*sizeof( std::complex<double>));
|
|
|
-
|
|
|
- std::complex<double> c_a = 0;
|
|
|
- c_a = test_stdvec(a, c_input, c_output);
|
|
|
-
|
|
|
+ std::vector<double> c_x(py_x.size());
|
|
|
+ std::vector< std::complex<double> > c_m(py_m.size());
|
|
|
+ int L = py_x.size();
|
|
|
+ int nmax = -1, pl = -1;
|
|
|
+
|
|
|
+ std::memcpy(c_x.data(), py_x.data(), py_x.size()*sizeof(double));
|
|
|
+ std::memcpy(c_m.data(), py_m.data(), py_m.size()*sizeof( std::complex<double>));
|
|
|
|
|
|
- auto result = py::array_t< std::complex<double>>(c_output.size());
|
|
|
- auto result_buffer = result.request();
|
|
|
- std::complex<double> *result_ptr = ( std::complex<double> *) result_buffer.ptr;
|
|
|
+ int terms = 0;
|
|
|
+ std::vector<std::complex<double> > c_an, c_bn;
|
|
|
+ terms = nmie::ScattCoeffs( L, pl, c_x, c_m, nmax, c_an, c_bn);
|
|
|
|
|
|
- std::memcpy(result_ptr,c_output.data(),c_output.size()*sizeof( std::complex<double>));
|
|
|
+ auto py_an = py::array_t< std::complex<double>>(c_an.size());
|
|
|
+ auto py_bn = py::array_t< std::complex<double>>(c_bn.size());
|
|
|
+ auto py_an_buffer = py_an.request();
|
|
|
+ auto py_bn_buffer = py_bn.request();
|
|
|
+ std::complex<double> *py_an_ptr = ( std::complex<double> *) py_an_buffer.ptr;
|
|
|
+ std::complex<double> *py_bn_ptr = ( std::complex<double> *) py_bn_buffer.ptr;
|
|
|
|
|
|
- return std::make_tuple(result, c_a);
|
|
|
+ std::memcpy(py_an_ptr,c_an.data(),c_an.size()*sizeof( std::complex<double>));
|
|
|
+ std::memcpy(py_bn_ptr,c_bn.data(),c_bn.size()*sizeof( std::complex<double>));
|
|
|
|
|
|
+ return py::make_tuple(terms, py_an, py_bn);
|
|
|
}
|
|
|
|
|
|
PYBIND11_MODULE(example, m) {
|
|
|
m.doc() = "pybind11 example plugin"; // optional module docstring
|
|
|
|
|
|
- m.def("test_stdvec", &py_test_stdvec, "Multipy vec by a const");
|
|
|
+ m.def("scattcoeffs", &py_ScattCoeffs, "test");
|
|
|
}
|