40static const char* ALL_errdesc;
44#ifdef ALL_FORTRAN_ERROR_ABORT
49#define ALL_catch } catch (ALL::CustomException &e) { \
50 ALL_errno = e.get_error_id(); \
51 ALL_errdesc = e.what(); \
85 int *loc,
int nsize,
int *size) {
90 __FILE__, __func__, __LINE__,
91 "Length of index array does not match dimension");
94 __FILE__, __func__, __LINE__,
95 "Length of size array does not match dimension");
96 std::vector<int> vloc(loc, loc+nloc);
97 std::vector<int> vsize(size, size+nsize);
104 double *domain_size) {
108 __FILE__, __func__, __LINE__,
109 "Length of array does not match dimension");
110 std::vector<double> t_domain_size(domain_size, domain_size+dim);
125 std::vector<double> t_work(work, work+dim);
132 const int dim,
const double *vertices) {
137 __FILE__, __func__, __LINE__,
138 "Dimension of ALL::Points in input vector do not match dimension of "
141 for (
int i = 0; i < n; ++i) {
142 for (
int d = 0; d < dim; ++d) {
143 points.at(i)[d] = vertices[i * dim + d];
153 MPI_Comm cComm = MPI_Comm_f2c(fcomm);
160 std::vector<double> t_size(size, size+dim);
194 std::vector<ALL::Point<double>> tmp_vertices = all_obj->
getVertices();
196 assert(n_vertices = tmp_vertices.size());
197 for (
int i = 0; i < n_vertices; ++i) {
198 for (
int j = 0; j < dimension; ++j) {
199 vertices[i * dimension + j] = tmp_vertices.at(i)[j];
214 double *prevVertices) {
216 std::vector<ALL::Point<double>> tmp_vertices = all_obj->
getPrevVertices();
218 assert(n_vertices = tmp_vertices.size());
219 for (
int i = 0; i < n_vertices; ++i) {
220 for (
int j = 0; j < dimension; ++j) {
221 prevVertices[i * dimension + j] = tmp_vertices.at(i)[j];
236 std::vector<double> work;
238 *length = work.size();
250 std::vector<double> all_work;
252 assert((
int)all_work.size() == length);
253 memcpy(work,&all_work[0],length*
sizeof(*work));
260 *count = neighbors.size();
266 std::vector<int> all_neighbors = all_obj->
getNeighbors();
267 assert((
int)all_neighbors.size() == count);
268 memcpy(neighbors,&all_neighbors[0],count*
sizeof(*neighbors));
277 all_obj->printVTKoutlines(step);
284 all_obj->printVTKvertices(step);
301 strncpy(description, ALL_errdesc, len);
303 strncpy(description,
"No error", len);
307 size_t msg_len = strlen(description);
308 memset(description+msg_len,
' ', len-msg_len);
void all_get_prev_vertices_c(ALL_t *all_obj, int n_vertices, double *prevVertices)
void all_set_gamma_c(ALL_t *all_obj, double gamma)
void all_setup_c(ALL_t *all_obj)
void all_balance_c(ALL_t *all_obj)
void all_set_work_c(ALL_t *all_obj, double work)
void all_get_length_of_work_c(ALL_t *all_obj, int *length)
ALL::ALL< double, double > ALL_t
ALL_t * all_init_c(ALL::LB_t method, const int dim, double gamma)
void all_errdesc_c(char *description, size_t len)
void all_get_vertices_c(ALL_t *all_obj, int n_vertices, double *vertices)
void all_get_work_array_c(ALL_t *all_obj, double *work, int length)
void all_finalize_c(ALL_t *all_obj)
void all_set_sys_size_c(ALL_t *all_obj, double *size, int dim)
void all_set_communicator_c(ALL_t *all_obj, MPI_Fint fcomm)
void all_set_min_domain_size_c(ALL_t *all_obj, int dim, double *domain_size)
void all_get_number_of_vertices_c(ALL_t *all_obj, int *n_vertices)
void all_set_work_multi_c(ALL_t *all_obj, double *work, int dim)
void all_set_vertices_c(ALL_t *all_obj, const int n, const int dim, const double *vertices)
void all_get_number_of_neighbors_c(ALL_t *all_obj, int *count)
void all_print_vtk_outlines_c(ALL_t *all_obj known_unused, int known_unused step)
void all_print_vtk_vertices_c(ALL_t *all_obj known_unused, int known_unused step)
void all_get_gamma_c(ALL_t *all_obj, double *gamma)
void all_get_neighbors_c(ALL_t *all_obj, int *neighbors, int count)
void all_set_proc_tag_c(ALL_t *all_obj, int tag)
void all_set_proc_grid_params_c(ALL_t *all_obj, int nloc, int *loc, int nsize, int *size)
void all_get_work_c(ALL_t *all_obj, double *work)
void all_set_method_data_histogram_c(ALL_t *all_obj, int *nbins)
void all_get_dimension_c(ALL_t *all_obj, int *dim)
void setSysSize(const std::vector< T > &sysSize)
void setProcGridParams(const std::vector< int > &loc, const std::vector< int > &size)
std::vector< Point< T > > & getPrevVertices()
void setMethodData(const void *data)
void setCommunicator(const MPI_Comm comm)
std::vector< int > & getNeighbors()
void getWork(std::vector< W > &result)
std::vector< Point< T > > & getVertices()
void setMinDomainSize(const std::vector< T > &minSize)
void setWork(const W work)
std::vector< Point< T > > & balance()
void setVertices(const std::vector< Point< T > > &inp)
LB_t
enum type to describe the different balancing methods
Exception to be used for missmatches in dimension for ALL::Point class.