int pmepot_add(pmepot_data *data, const float *cell, int natoms, const float *atoms) { float *q_arr; float rcell[12]; if ( data->avg_count == 0 ) { q_arr = data->avg_potential; } else { q_arr = malloc(data->grid_size * sizeof(float)); if ( ! q_arr ) return -1; } fill_charges(data->dims,cell,natoms,atoms,q_arr,rcell,data->oddd); pubdz3d(1, data->dims[2], data->dims[1], data->dims[0], q_arr, data->dims[4], data->dims[3], data->fft_table, data->fft_ntable, data->fft_work); compute_energy(q_arr, cell, rcell, data->dims, data->ewald_factor); pubzd3d(-1, data->dims[2], data->dims[1], data->dims[0], q_arr, data->dims[4], data->dims[3], data->fft_table, data->fft_ntable, data->fft_work); scale_grid(data->dims,q_arr,COLOUMB/(300.0*BOLTZMAN)); if ( data->avg_count ) { add_to_grid(data->dims,data->avg_potential,q_arr); free(q_arr); } data->avg_count += 1; return 0; }
void color_write_image(matrix<double> &grid, const colormap_func &cmap, const std::string &output_filename, bool write_save) { /* modifies argument! */ scale_grid(grid); image_RGB color_image(grid.x(), grid.y()); grayscale_to_rgb(grid, color_image, cmap); if (write_save) { std::cout << "saving image" << std::endl; } write_image(color_image, output_filename); }
void fractal_animation_zoom::animation_worker::render(double t) { double zoom = std::exp(t * std::log(p.max_zoom)); std::fill(fractal.iterations.begin(), fractal.iterations.end(), -1.0); std::fill(color_image.begin(), color_image.end(), RGB{0, 0, 0}); fractal.set_zoom(p.center, zoom); fractal.run(); log_transform(fractal.iterations); sine_transform(fractal.iterations); scale_grid(fractal.iterations); image_sanity_check(fractal.iterations, false); grayscale_to_rgb(fractal.iterations, color_image, p.cmap); }