18 double *mivalue,
double *mavalue,
19 Result *result,
int mynode,
int pesize,
22 double delta, value, color[3];
23 int count[500], t_count[500], max_number, max_length, start_x, end_x, start_y;
28 unsigned char r, g, b;
32 int start_xs, start_ys;
37 for (i = 0; i <
data->nn_component; i++) {
38 if (color_list[i] == 1) {
40 delta = (mavalue[i] - mivalue[i]) / 500.0;
44 for (i = 0; i < 500; i++) {
50 if (sf[ii].display_method != 4) {
51 for (i = 0; i < result[ii - 1].
n_vertex; i++) {
52 j = (int)((result[ii - 1].color[i] - mivalue[color_id]) / delta);
62 for (i = 0; i < 500; i++) t_count[i] = count[i];
67 fp = fopen(
"histogram.bmp",
"wb");
70 graph = (
double *)
HECMW_calloc(400 * 530 * 3,
sizeof(
double));
72 for (i = 0; i < 400 * 530 * 3; i++) graph[i] = 0.0;
74 for (i = 0; i < 500; i++) {
75 if (t_count[i] > max_number) max_number = t_count[i];
79 "ERROR: HEC-MW-VIS-E2003:Cannot generate histogram graph, the number "
81 max_length = (int)(400 - 30 - 5 - 45 * 1.5);
82 start_x = (int)(5 + 45 * 1.5 + 15);
84 for (j = 0; j < 500; j++) {
86 (int)((
double)t_count[j] * (double)max_length / (
double)max_number +
91 for (i = start_x; i < end_x; i++) {
92 graph[((j + 15) * 400 + i) * 3] = color[0];
93 graph[((j + 15) * 400 + i) * 3 + 1] = color[1];
94 graph[((j + 15) * 400 + i) * 3 + 2] = color[2];
99 for (k = 0; k < 11; k++) {
100 value = mivalue[color_id] +
101 (mavalue[color_id] - mivalue[color_id]) / 10.0 * k;
102 start_ys = start_y + (int)((
double)500.0 / 10 * k) - (
int)7 / 2;
104 snprintf(buf,
sizeof(buf),
"%3.2E", value);
105 for (m = 0; m < 9; m++) {
107 for (j = 0; j < 7; j++)
108 for (i = 0; i < 7; i++) {
109 graph[((start_ys + j) * 400 + start_xs - i) * 3] =
110 (double)output7[6 - j][i];
111 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 1] =
112 (double)output7[6 - j][i];
113 graph[((start_ys + j) * 400 + start_xs - i) * 3 + 2] =
114 (double)output7[6 - j][i];
117 if ((value >= 0) && (m == 0)) start_xs -= 7;
119 if ((k != 0) && (k != 10)) {
120 start_ys += (int)7 / 2;
122 for (i = start_x; i < start_x + 5; i++)
123 for (j = 0; j < 3; j++) graph[(start_ys * 400 + i) * 3 + j] = 1.0;
126 header.
bfSize = 54 + 3 * 400 * 530;
127 #ifdef CONVERSE_ORDER
131 #ifdef CONVERSE_ORDER
136 #ifdef CONVERSE_ORDER
141 #ifdef CONVERSE_ORDER
146 #ifdef CONVERSE_ORDER
151 #ifdef CONVERSE_ORDER
156 #ifdef CONVERSE_ORDER
161 #ifdef CONVERSE_ORDER
166 #ifdef CONVERSE_ORDER
171 #ifdef CONVERSE_ORDER
176 #ifdef CONVERSE_ORDER
181 #ifdef CONVERSE_ORDER
186 #ifdef CONVERSE_ORDER
191 #ifdef CONVERSE_ORDER
196 #ifdef CONVERSE_ORDER
202 fwrite(&(header.
bfSize),
sizeof(
unsigned int), 1, fp);
203 fwrite(&header.
bfReserved1,
sizeof(
unsigned short int), 1, fp);
204 fwrite(&header.
bfReserved2,
sizeof(
unsigned short int), 1, fp);
205 fwrite(&header.
bfOffBits,
sizeof(
unsigned int), 1, fp);
206 fwrite(&info, 40, 1, fp);
207 for (j = 0; j < 530; j++)
208 for (i = 400 - 1; i >= 0; i--) {
209 ri = (int)(graph[(j * 400 + i) * 3] * 256);
210 gi = (int)(graph[(j * 400 + i) * 3 + 1] * 256);
211 bi = (int)(graph[(j * 400 + i) * 3 + 2] * 256);
213 if (ri > 255) ri = 255;
215 if (gi > 255) gi = 255;
217 if (bi > 255) bi = 255;
234 double *mivalue,
double *mavalue,
235 Result *result,
int mynode,
int pesize,
236 HECMW_Comm VIS_COMM,
double *interval_point) {
239 int count[500], t_count[500], tmp_count[500], sum_count, interv_count, sum,
243 for (i = 0; i <
data->nn_component; i++) {
244 if (color_list[i] == 1) {
246 delta = (mavalue[i] - mivalue[i]) / 500.0;
250 for (i = 0; i < 500; i++) {
256 if (sf[ii].display_method != 4) {
257 for (i = 0; i < result[ii - 1].
n_vertex; i++) {
258 j = (int)((result[ii - 1].color[i] - mivalue[color_id]) / delta);
260 if (j > 499) j = 499;
268 for (i = 0; i < 500; i++) t_count[i] = count[i];
271 for (i = 0; i < 500; i++) {
272 sum_count += t_count[i];
273 tmp_count[i] = t_count[i];
275 interv_count = (int)sum_count / 10;
277 interval_point[0] = mivalue[color_id];
278 interval_point[1] = 0.0;
279 for (i = 1; i < 10; i++) {
280 interval_point[i * 2 + 1] = (double)i / 10.0;
283 while ((j < 500) && (sum < interv_count)) {
288 interval_point[i * 2] =
291 (1.0 - (
double)(sum - interv_count) / (
double)tmp_count[j])) *
292 (mavalue[color_id] - mivalue[color_id]) +
294 t_count[j] = sum - interv_count;
297 interval_point[20] = mavalue[color_id];
298 interval_point[21] = 1.0;
299 fprintf(stderr,
"The automatic color mapping set is :\n");
300 for (i = 0; i < 11; i++)
301 fprintf(stderr,
"%lf %lf \n", interval_point[i * 2],
302 interval_point[i * 2 + 1]);
308 double *mavalue,
Result *result,
int mynode,
312 int count[100], t_count[100];
315 for (i = 0; i <
data->nn_component; i++) {
316 if (color_list[i] == 1) {
318 delta = (mavalue[i] - mivalue[i]) / 100.0;
322 for (i = 0; i < 100; i++) {
328 if (sf[ii].display_method != 4) {
329 for (i = 0; i < result[ii - 1].
n_vertex; i++) {
330 j = (int)((result[ii - 1].color[i] - mivalue[color_id]) / delta);
340 for (i = 0; i < 100; i++) t_count[i] = count[i];
344 fp = fopen(
"histogram.file",
"w");
347 for (i = 0; i < 100; i++)
348 fprintf(fp,
"%d %d -----(%lf --- %lf)\n", i, t_count[i],
349 mivalue[color_id] + i * delta,
350 mivalue[color_id] + (i + 1) * delta);
359 for (i = 0; i < 3; i++) {
360 range[i * 2] = 1.0E17;
361 range[i * 2 + 1] = -1.0E17;
379 for (i = 0; i < 3; i++) {
380 range[i * 2] = 1.0E17;
381 range[i * 2 + 1] = -1.0E17;
385 for (i = 0; i < result[ii].
n_vertex; i++) {
386 for (j = 0; j < 3; j++) {
387 if (result[ii].vertex[i * 3 + j] < range[j * 2])
388 range[j * 2] = result[ii].
vertex[i * 3 + j];
389 if (result[ii].vertex[i * 3 + j] > range[j * 2 + 1])
390 range[j * 2 + 1] = result[ii].
vertex[i * 3 + j];
403 if (sf[ii + 1].deform_display_on == 1) {
404 for (i = 0; i < result[ii].
n_vertex; i++) {
405 for (j = 0; j < 3; j++) {
406 new_v = result[ii].
vertex[i * 3 + j] +
408 if (new_v < range[j * 2]) range[j * 2] = new_v;
409 if (new_v > range[j * 2 + 1]) range[j * 2 + 1] = new_v;
418 double range_y,
double range_z,
422 double max_disp, t_max_disp, tmp[3], disp, max_range, s_scale;
424 int tn_component, d_base;
428 for (i = 0; i <
data->nn_component; i++) tn_component +=
data->nn_dof[i];
430 for (i = 0; i < sf[ii].
disp_comp; i++) d_base +=
data->nn_dof[i];
435 for (j = 0; j < 3; j++)
436 tmp[j] =
data->node_val_item[i * tn_component + d_base + j];
437 disp = sqrt(tmp[0] * tmp[0] + tmp[1] * tmp[1] + tmp[2] * tmp[2]);
438 if (disp > max_disp) max_disp = disp;
445 t_max_disp = max_disp;
447 max_range = sqrt(range_x * range_x + range_y * range_y + range_z * range_z);
448 if (fabs(t_max_disp) <
EPSILON * 0.0001)
450 s_scale = max_range * 0.1 / t_max_disp;
451 if (sf[ii].disp_scale < 0.0)
456 fprintf(stderr,
"The real deformation scale = %lf\n", sf[ii].disp_scale);
int HECMW_Comm_rank(HECMW_Comm comm, int *rank)
int HECMW_Allreduce(void *sendbuf, void *recvbuf, int count, HECMW_Datatype datatype, HECMW_Op op, HECMW_Comm comm)
struct hecmwST_local_mesh * mesh
#define HECMW_calloc(nmemb, size)
int change_int_order(int n)
void value2_to_rgb(double value, double color[3], int color_system_type)
void font7_generate(char input, int output[7][7])
unsigned short int change_short_int_order(unsigned short int n)
unsigned int change_unsigned_int_order(unsigned int n)
void find_minmax_sf(struct hecmwST_local_mesh *mesh, int mynode, double range[6])
void find_new_patch_minmax_sf(Result *result, struct surface_module *sf, double range[6])
void get_deform_scale(struct surface_module *sf, int ii, double range_x, double range_y, double range_z, struct hecmwST_local_mesh *mesh, struct hecmwST_result_data *data, int pesize, HECMW_Comm VIS_COMM)
void output_histogram_sf(struct surface_module *sf, int *color_list, struct hecmwST_result_data *data, double *mivalue, double *mavalue, Result *result, int mynode, int pesize, HECMW_Comm VIS_COMM)
void generate_interval_point_sf(struct surface_module *sf, int *color_list, struct hecmwST_result_data *data, double *mivalue, double *mavalue, Result *result, int mynode, int pesize, HECMW_Comm VIS_COMM, double *interval_point)
void find_patch_minmax_sf(Result *result, struct surface_module *sf, double range[6])
void generate_histogram_graph_sf(struct surface_module *sf, int *color_list, struct hecmwST_result_data *data, double *mivalue, double *mavalue, Result *result, int mynode, int pesize, HECMW_Comm VIS_COMM, int color_system_type)
void HECMW_vis_print_exit(char *var)
void HECMW_vis_memory_exit(char *var)
unsigned short bfReserved1
unsigned short bfReserved2
unsigned int biCompression
unsigned short biBitCount
unsigned int biClrImportant