Загрузка...

МКЭ-на с++

Thread in C/C++ created by 67845vlad Nov 22, 2024. 286 views

  1. 67845vlad
    67845vlad Topic starter Nov 22, 2024 3 Jul 2, 2018
    Программа на с++ должна собирать из локальной матрицы глобальную
    но он не правильно считает массивы ggu и ggl.
    Массивы ig =[0 0 1 3 6 10 15], jg=[1 1 2 1 2 3 1 2 3 4 1 2 3 4 5], tr=[1 3 6 2 4 5].
    C
        int i, j, k;
    int* L = new int[6];
    double* local_F = new double[6];
    double** local_matr = new double* [6];
    for (i = 0; i < 6; i++) {
    local_matr[i] = new double[6]();
    }

    // Инициализация локальных матриц и правой части
    for (k = 0; k < n2; k++) {
    local_matrix(k, local_matr, local_F, k * 7);
    for (int i = 0; i < 6; i++) {
    for (int j = 0; j < 6; j++) {
    cout << local_matr[i][j] << " ";
    }cout << endl;
    }
    for (int i = 0; i < 6; i++) {
    L[i] = tr[k * 7 + i]; // Запись индексов элементов локальной матрицы
    }
    for (int i = 0; i < 6; i++) {
    int ibeg = L[i];
    cout << "ibeg = " << ibeg << endl;

    for (int j = i + 1; j < 6; j++) {
    int iend = L[j];
    cout << "iend = " << iend << endl;
    int h;

    if (ibeg < iend) {
    h = ig[iend];
    while (jg[h] < ibeg && h < ig[n]) h++; // nn - длина jg
    ggl[h] += local_matr[i][j]; // Обновление глобальной матрицы
    ggu[h] += local_matr[j][i]; // Обновление глобальной матрицы
    }
    else {
    h = ig[ibeg];
    while (jg[h] < iend && h < ig[n]) h++; // nn - длина jg
    ggl[h] += local_matr[i][j]; // Обновление глобальной матрицы
    ggu[h] += local_matr[j][i]; // Обновление глобальной матрицы
    }
    }
    di[ibeg] += local_matr[i][i]; // Обновление диагональных элементов
    }
    }
     
    1. fuzzy_uwu
      67845vlad, используйте функцию форума вставить код
  2. AIexa
    AIexa Nov 22, 2024 Лучший софт - lolz.live/threads/1634798/ :+rep: 12,236 Mar 24, 2020
    ChatGPT разбирайся в этом ужасе
     
    1. ChatGPT
      AIexa, давай попробуем разобраться в этом коде. Похоже, что здесь реализуется алгоритм для сборки глобальной матрицы из локальных матриц в контексте метода конечных элементов (МКЭ). Проблема, как ты указал, связана с неправильным подсчетом массивов `ggu` и `ggl`.

      Вот несколько моментов, которые стоит проверить:

      1. **Инициализация массивов**: Убедись, что массивы `ggu` и `ggl` правильно инициализированы перед использованием. Они должны быть инициализированы нулями или другими значениями по умолчанию.

      2. **Индексы массивов**: Проверь, правильно ли используются индексы в массивах `ig` и `jg`. Ошибка в индексах может привести к неправильному доступу к элементам.

      3. **Условия в циклах**: Убедись, что условия в циклах `if (ibeg < iend)` и `while (jg[h] < ibeg && h < ig[n])` корректны и соответствуют логике алгоритма.

      4. **Обновление значений**: Проверь, правильно ли обновляются значения в `ggl[h]` и `ggu[h]`. Возможно, стоит добавить отладочные выводы, чтобы убедиться, что значения обновляются так, как ожидается.

      5. **Длина массивов**: Убедись, что длина массивов `jg` и `ig` соответствует ожидаемым значениям. Ошибка в длине может привести к выходу за пределы массива.

      Если ты предоставишь больше контекста или деталей о том, как именно неправильно считаются массивы, я смогу помочь более конкретно.
    2. fuzzy_uwu
      AIexa, не он не хочет даже
    3. View the next comments (5)
Loading...
Top