Все ответы об инженерном анализе

Перед началом работы настоятельно рекомендуем ознакомиться с правилами форума.

Проблема с работой

Sommi
Аватар пользователя Sommi

Добрый вечер, уважаемые форумчане!

У меня возникла проблема с инициализацией и работой UDF функции в среде ANSYS Fluent (версия 13).

Суть проблемы состоит в том, что за 1 шаг моделирования (Time Step), моя функция выполняется 16 раз, вместо 1 раза. При инициализации, UDF функция выполняется 10 раз.

Вот такой фрагмент кода 

DEFINE_PROFILE(rad_pow,thread,index)
{
real x[ND_ND];
real y;
face_t f;

for_cur_time=CURRENT_TIME;
if ((dlit>0)&&(CURRENT_TIME>=time_on))
    {
    printf("Heat is: 150 ");
    }
    else
    {
    printf("Heat is: 0 ");
    }
}

Даёт результат при инициализации:

Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 Heat is: 0 

И повторяется 16 раз каждый следующий цикл программы (Time Step).

Может кто-то с такой проблемой уже сталкивался? Поиск по форумам результата не дал. Очень прошу помочь советом.

Спасибо

 

 

dvolkind
Аватар пользователя dvolkind

Здравствуйте!

Количество вызовов зависит от количества ГУ, на которые повешана функция, от количества итераций на шаге и от количества процессов, на которые попадает сеточная область, содержащая ГУ. Без модели однозначно ответить невозможно.

Sommi
Аватар пользователя Sommi

Спв

Цитата:
Здравствуйте! Количество вызовов зависит от количества ГУ, на которые повешана функция, от количества итераций на шаге и от количества процессов, на которые попадает сеточная область, содержащая ГУ. Без модели однозначно ответить невозможно.

Спасибо за ответ!

Проект прикрепил к сообщению. В корне есть Rad_temp21 файл. 

В самом проекте ANSYS прикрепляю данный файл с помощью Define/User-Defined/Functions/Interpreted.

И после инициализации как раз и появляется проблема.

dvolkind
Аватар пользователя dvolkind

Посмотрел проект, но не смог выявить закономерности. Метод тыка показал, что количество вызовов зависит (помимо ранее указанного) от количества решаемых уравнений (это упомянуто в п.1.8.2 Customization Manual) , а также от того, в каком виде функция подключается - в компилируемом или интерпретируемом. В документации и на портале ничего не нашёл по этому поводу. Думаю, что это вопросы внутренней оптимизации кода, и копать дальше нецелесообразно. Уточните пожалуйста, для чего вам необходимо знать количество вызовов функции? Какова конечная цель? Возможно, я смогу предложить альтернативу.

Sommi
Аватар пользователя Sommi

Цитата:
Посмотрел проект, но не смог выявить закономерности. Метод тыка показал, что количество вызовов зависит (помимо ранее указанного) от количества решаемых уравнений (это упомянуто в п.1.8.2 Customization Manual) , а также от того, в каком виде функция подключается - в компилируемом или интерпретируемом. В документации и на портале ничего не нашёл по этому поводу. Думаю, что это вопросы внутренней оптимизации кода, и копать дальше нецелесообразно. Уточните пожалуйста, для чего вам необходимо знать количество вызовов функции? Какова конечная цель? Возможно, я смогу предложить альтернативу.

Мне не совсем нужно знать количество вызовов, просто у меня есть грубо переменная x, к которой нужно раз в 30 секунд прибавлять некий параметр (1 раз), в зависимости от температуры.

В итоге у меня к переменной x прибавляется этот параметр от 8 до 16 раз за 1 цикл (30 сек). Вот я и пытаюсь понять почему UDF выполняется так "много" раз и нет никакой зависимости (иногда 10, иногда 12, иногда 16 раз).

dvolkind
Аватар пользователя dvolkind

Если нужно прибавлять раз в 30 с, и шаг по времени равен 30 с, то проще всего сделать через DEFINE_EXECUTE_AT_END. Он будет вызываться один раз в конце каждого временного шага.

Sommi
Аватар пользователя Sommi

Цитата:
Если нужно прибавлять раз в 30 с, и шаг по времени равен 30 с, то проще всего сделать через DEFINE_EXECUTE_AT_END. Он будет вызываться один раз в конце каждого временного шага.

Спасибо за совет! Буду пробовать дальше.

dvolkind
Аватар пользователя dvolkind

пишите если что

Sommi
Аватар пользователя Sommi

Добрый день! Поздравляю всех с наступившим Новым годом! 

Продолжал разбираться с работой в ANSYS Fluent. И у меня возникла проблемка с инициализацией двумерного массива.

Грубо говоря у меня есть набор констант в виде двумерного массива 19х360 и их надо явно в программе задать.

Я был очень удивлён тем, что интерпритатор ругается на такую инициализацию дверного массива int a[5][3] = { {4, 7, 8}, {9, 66, -1}, {5, -5, 0}, {3, -3, 30}, {1, 1, 1} } (Ошибка "Invalid type conversion: int -> array 3 of int.");

На сайте http://jullio.pe.kr/fluent6.1/help/html/udf/node27.htm я увидел, что рекомендуется каждый элемент двумерного массива задавать явно. Поэтому я сделал явное присваивание всех 6840 элементов массива.

double b[20][365]; //all koef

b[1][1]=0;
b[1][2]=-3.666667e-002;
b[1][3]=6.200000e-002;
....

b[19][359]=1.860000e+001;
b[19][360]=1.863667e+001;

И вставил данный код в текст программы и привязал данную инициализацию к третьему шагу программы.

И вот после того, как проходит третий шаг программы у меня высвечивается ошибка в окне, где показывает текущий цикл работы программы ."Chip: invalid opcode -2147483648: pc=379". Значение opcode и pc отличаются, после перезапуска программы. 

Может быть существует более простой способ инициализации двумерного массива?

Могу прикрепить код программы, если кого-то заинтересует данная проблема.

Спасибо, кто дочитал до конца!

dvolkind
Аватар пользователя dvolkind

Здравствуйте!

Вы UDF используете в компилируемом виде или в интерпретируемом? И не проще ли массивы из текстовых файлов читать?

Sommi
Аватар пользователя Sommi

Цитата:
Здравствуйте! Вы UDF используете в компилируемом виде или в интерпретируемом? И не проще ли массивы из текстовых файлов читать?

Извините за долгое отсутствие.

Использую UDF в интерпретируемом виде.

Я тоже думал, что проще из файла считывать массив, но нашёл только данную статью http://cae-club.ru/content/obuchayushchii-primer-ansys-13-vneshnie-dannye, в которой нет информации об использовании подгружаемых файлов в UDF

Добавить комментарий

Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Приложить файл

Максимальный размер файла: 999 МБ.
Допустимые типы файлов: txt doc docx xls xlsx pdf rar zip 7zip tar.