/*---------------------------------------------------------------------------*/ void lcd_write_char(char c) { char string[2]; if(WITH_LCD) { if(c == '\n') { inc_y(); } else { string[0] = c; string[1] = 0; if(ypos == Y_MAX) { lcd_clear(); ypos = xpos = 0; } halLcdPrintXY(string, xpos * X_CHAR_SIZE, ypos * Y_CHAR_SIZE, 0); if(xpos == X_MAX) { inc_y(); } else { xpos++; } } } }
char *wrong(t_client *client) { attron(COLOR_PAIR(1)); mvprintw(client->y, 0, "ERROR: wrong command\n"); attron(COLOR_PAIR(2)); inc_y(client); wmove(client->win, client->y, 0); return (0); }
void put_error(t_client *client, char *error) { if (error) { attron(COLOR_PAIR(1)); mvprintw(client->y, 0, "ERROR: %s\n", error); attron(COLOR_PAIR(2)); inc_y(client); wmove(client->win, client->y, 0); } }
void le_step_y(le_task *t) { assert(t->stype == ST_AOS); /* * The same way as step_x. * WARNING: Not cache friendly! */ int i, j; const real k1 = t->dt * t->mat.c1 / t->h.y; const real k2 = t->dt * t->mat.c2 / t->h.y; int num_of_threads = omp_get_num_threads(); #pragma omp parallel for shared(t) private(i,j) for (i = 0; i < t->n.x; i++) { le_w w_2, w_1, w, w1, w2; omega_y(&t->mat, &gind(i, 0), &w); omega_y(&t->mat, &gind(i, 1), &w1); omega_y(&t->mat, &gind(i, 2), &w2); w_2 = w_1 = w; //printf("i = %d\n", i); for (j = 0; j < t->n.y; j++) { //if(j > 3) printf("1\n"); le_w d; reconstruct(w_2, w_1, w, w1, w2, k1, k2, &d); //if(j > 3) printf("2\n"); inc_y(&t->mat, &gind(i, j), &d); //if(j > 3) printf("3\n"); w_2 = w_1; w_1 = w; w = w1; w1 = w2; if (j < t->n.y - 3) omega_y(&t->mat, &gind(i, j + 3), &w2); } } }
void le_step_y_cf(le_task *t, const int_t cfs) { assert(t->stype == ST_AOS); assert(cfs > 0 && cfs <= t->n.x); /* * Cache friendly version of function le_step_y. */ int i, j, k; const real k1 = t->dt * t->mat.c1 / t->h.y; const real k2 = t->dt * t->mat.c2 / t->h.y; le_w *w_2, *w_1, *w, *w1, *w2; w_2 = (le_w*)malloc(sizeof(le_w) * cfs); w_1 = (le_w*)malloc(sizeof(le_w) * cfs); w = (le_w*)malloc(sizeof(le_w) * cfs); w1 = (le_w*)malloc(sizeof(le_w) * cfs); w2 = (le_w*)malloc(sizeof(le_w) * cfs); for (k = 0; k < t->n.x; k += cfs) { int cfs_n = (k + cfs > t->n.x) ? t->n.x - k : cfs; /* Prepare values and copy it to w[] */ for (i = 0; i < cfs_n; i++) { omega_y(&t->mat, &gind(i + k, 0), w + i); omega_y(&t->mat, &gind(i + k, 1), w1 + i); omega_y(&t->mat, &gind(i + k, 2), w2 + i); } memcpy(w_2, w, sizeof(le_w) * cfs_n); memcpy(w_1, w, sizeof(le_w) * cfs_n); /* * Iterate throw cached arrays of values. */ for (j = 0; j < t->n.y; j++) { for (i = 0; i < cfs_n; i++) { le_w d; reconstruct(w_2[i], w_1[i], w[i], w1[i], w2[i], k1, k2, &d); inc_y(&t->mat, &gind(i + k, j), &d); } /* * Swap values. */ le_w *wt = w_2; w_2 = w_1; w_1 = w; w = w1; w1 = w2; w2 = wt; if (j < t->n.y - 3) { for (i = 0; i < cfs_n; i++) { omega_y(&t->mat, &gind(i + k, j + 3), w2 + i); } } } } free(w_2); free(w_1); free(w); free(w1); free(w2); }