Перейти к публикации

Поиск соседних ячеек в неструктурированой сетке


Рекомендованные сообщения

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

Пользуюсь сеткой в формате .NEU - габитовский формат. Данный формат как и другие мне известные имеет следующую структуру:

Матрица точек
номер точки1 - координаты точки1 
.

.
номер точкиN - координаты точкиN
 

 

Матрица ячеек 
номер ячейки1 - номера точек из которых состоит ячейка1

.

.
номер ячейкиМ - номера точек из которых состоит ячейкаМ
где N- кол-во точек, M - кол-во ячеек.  

Мне нужна следующая информация: для каждой ячейки знать номера ячеек с которыми она контактирует. Для этого я сравниваю каждую ячейку со всеми остальными ячейками, то есть каждую строку матрицы ячеек со всей матрицой ячеек. Получается два цикла один вложенный в другой в общем M^2 сравнений, расчет занимает очень много времени. 

Вопрос1  Есть ли способы ускорение расчета нужной мне информации?
Вопрос2  Есть ли форматы сеток в которых эта информация есть в явном виде?

 

Ссылка на сообщение
Поделиться на других сайтах


Мне нужна следующая информация: для каждой ячейки знать номера ячеек с которыми она контактирует

Для чего?

Ссылка на сообщение
Поделиться на других сайтах

@Andreiwse, Вам надо универсальное решение, или только конкретно для этой сетки?

Как бы кубик с полостью построил. Отдельно 1915 тетраэдров. Чешу репу над тем, как вычислять соседей среди них. Если только для этой задачи, то может и можно будет победить, увы чуть не вручную. А если же все-таки нужен универсальный алгоритм, чтоб прям на основе исходного файла и новый файл статистики со всеми раскладами, - пасую. :flush:

Наверно вам правильно @piden намекнул, что не для этого форума вопрос. Очевидно в мире есть какие-то оптимизированные алгоритмы для тетраэдров. Шукать трэба. 

И не совсем ясно причем тут газодинамика, гидродинамика и теплообмен.

Ссылка на сообщение
Поделиться на других сайтах

Делаете свой решатель? Тогда лучше искать информацию на иноязычных ресурсах.

Да, я делаю свой решатель. 

За ссылку спасибо, в есть кое что полезное. 

 

@Andreiwse, Вам надо универсальное решение, или только конкретно для этой сетки?

Как бы кубик с полостью построил. Отдельно 1915 тетраэдров. Чешу репу над тем, как вычислять соседей среди них. Если только для этой задачи, то может и можно будет победить, увы чуть не вручную. А если же все-таки нужен универсальный алгоритм, чтоб прям на основе исходного файла и новый файл статистики со всеми раскладами, - пасую. :flush:

Наверно вам правильно @piden намекнул, что не для этого форума вопрос. Очевидно в мире есть какие-то оптимизированные алгоритмы для тетраэдров. Шукать трэба. 

И не совсем ясно причем тут газодинамика, гидродинамика и теплообмен.

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

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

 

 

 

 

"И не совсем ясно причем тут газодинамика, гидродинамика и теплообмен" - а где лучше об этом спросить, просто область моей задачи из газодинамики, вот я спросил сюда. 

 

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

Попробуйте представить, как должен выглядеть формат данных, удовлетворяющий Вашим требованиям и Вы сами себе ответите на вопрос.

Или попробуйте связаться с @HFL, он занимается in-house кодами.

Изменено пользователем piden
Ссылка на сообщение
Поделиться на других сайтах

Попробуйте представить, как должен выглядеть формат данных, удовлетворяющий Вашим требованиям и Вы сами себе ответите на вопрос.

Формат который мне нужен, я сам получаю из формата .NEU,  - то есть у меня есть понимание что мне  нужно. Но это мне не помогает. 

Если ВЫ знаете другие форматы, пишите в лоб как есть,  :smile:

Ссылка на сообщение
Поделиться на других сайтах

Я вообще-то без иронии сказал. Опишите, как должен выглядеть удовлетворяющий Вас формат. Номера ячеек сгруппированы по соседству? Или в конце дается длинный список, какая с какой сопрягается и через какой фейс? Мне правда интересно.

 

Ваш ник похож на анаграмму от Pointwise, который Вы использовали для генерации сетки. Наверняка ведь Вы уже перепробовали все форматы, в которые он делает экспорт.

Изменено пользователем piden
Ссылка на сообщение
Поделиться на других сайтах

Я вообще-то без иронии сказал. Опишите, как должен выглядеть удовлетворяющий Вас формат. Номера ячеек сгруппированы по соседству? Или в конце дается длинный список, какая с какой сопрягается и через какой фейс? Мне правда интересно.

 

Ваш ник похож на анаграмму от Pointwise, который Вы использовали для генерации сетки. Наверняка ведь Вы уже перепробовали все форматы, в которые он делает экспорт.

Да, я попробовал все форматы из Poinwise, я ничего не нашел.

Мне нужно что бы для тетраэдральной сетки была следующая матрица:

1   23 44 67 89

2   34  7  99 55

3  12  14 33 45

.

.

Где первая колонка это номера ячеек, четыре остальные колонки это номера соседних ячеек для данной ячейки. Например, ячейка 1 контактирует с ячейками 23 44 67 89. 

Ссылка на сообщение
Поделиться на других сайтах

@Andreiwse, Дык еще ж контакт могёт быть разным. В вершинке, аль фейсом? А ежели соседей менее четырех?

Ссылка на сообщение
Поделиться на других сайтах

@Andreiwse, Дык еще ж контакт могёт быть разным. В вершинке, аль фейсом? А ежели соседей менее четырех?

Контакт в моем случае это фейсом, и поэтому для каждой тетраидальной ячейки может быть только 4 соседа, если эта ячейка не является граничной. 

Ссылка на сообщение
Поделиться на других сайтах

Может я не очень понял, но почему нельзя однократно до расчета обработать эту сетку, найти всех соседей ячеек, запомнить их в структуре, как вам удобно, и потом уже проводить расчеты?

Ссылка на сообщение
Поделиться на других сайтах

@Andreiwse, есть в Mathematica конекшн к TetGen. На примерах из справки работает чики-пики. И картинки рисует и соседей вычисляет. А вот, как ни бился, не смог скормить математике точки из примера с кубиком. :no:

Соседи не поддаются, но хотя бы геометрия строится в Rhino, уже позитивчик :smile:

0_cd92e_eadc8efb_orig.png

Изменено пользователем Blurp
Ссылка на сообщение
Поделиться на других сайтах

@Andreiwse, есть в Mathematica конекшн к TetGen. На примерах из справки работает чики-пики. И картинки рисует и соседей вычисляет. А вот, как ни бился, не смог скормить математике точки из примера с кубиком. :no:

Соседи не поддаются, но хотя бы геометрия строится в Rhino, уже позитивчик :smile:

0_cd92e_eadc8efb_orig.png[

Есть ограничения, я могу пользоваться только своим кодом.

благодарю Вас за попытку помочь.  

Ссылка на сообщение
Поделиться на других сайтах
Есть ограничения, я могу пользоваться только своим кодом.

Понимаю.

Ответно благодарю вас за то, что заставили пошевелить мозгами. Хоть задачу не решил, но залез в такие дебри....вплоть до попыток прикрутить для решения MySQL сервер, либо файловую БД SQLite :biggrin: Но, увы, в SQL запросах не силен  :no_1:

А так, на всякий случай, если заинтересуетесь, то SQLite халявна. 

Ссылка на сообщение
Поделиться на других сайтах

В принципе и TetGen фриварный. И, по идее, функцию поиска соседей оттуда можно утянуть.
А так, нашел еще тут в PDFке одной упоминание про какой-то генератор Pyramid и что якобы он информацию о соседях пишет в аутпут-файло, но более про этот генератор ничего не раскопал. :no:
 

Ссылка на сообщение
Поделиться на других сайтах

Попробуйте представить, как должен выглядеть формат данных, удовлетворяющий Вашим требованиям и Вы сами себе ответите на вопрос.

Или попробуйте связаться с @HFL, он занимается in-house кодами.

Могу рассказать как это сделано у нас (не претендуя на универсальность рецепта)

 

Стандартный сеточный формат (у нас  это IDEAS Universal -  *.unv ) используется только для импорта сетки из препроцессора в решалку. В самой решалке используется внутренний формат. Там в структуре, которая соответствует расчетной ячейке (или КО в случае FVM) содержаться указатели на соседние KO (6 штук для гексы или 4 для тетры) которые инициализируются при загрузке сетки из внешнего сеточного формата во внутренний один раз при загрузке.  Сама процедура инициализации распараллелена (есть как MPI так и GPU версии) что значительно ускоряет процесс инициализации, но сам алгоритм похож на ваш.  Время полной инициализации от секунд (если расчетная область целиком влазит в память GPU) до десятков минут для сеток >30млн (общий размер расчетной области при этом примерно 40-60 Гб). 

Может я не очень понял, но почему нельзя однократно до расчета обработать эту сетку, найти всех соседей ячеек, запомнить их в структуре, как вам удобно, и потом уже проводить расчеты?

Потому что судя по всему человек делает это первый раз в жизни  :smile: Это нормально. По этим всем граблям нужно пройти лично  :biggrin:

Изменено пользователем HFL
Ссылка на сообщение
Поделиться на других сайтах

Могу рассказать как это сделано у нас (не претендуя на универсальность рецепта)

 

Стандартный сеточный формат (у нас  это IDEAS Universal -  *.unv ) используется только для импорта сетки из препроцессора в решалку. В самой решалке используется внутренний формат. Там в структуре, которая соответствует расчетной ячейке (или КО в случае FVM) содержаться указатели на соседние KO (6 штук для гексы или 4 для тетры) которые инициализируются при загрузке сетки из внешнего сеточного формата во внутренний один раз при загрузке.  Сама процедура инициализации распараллелена (есть как MPI так и GPU версии) что значительно ускоряет процесс инициализации, но сам алгоритм похож на ваш.  Время полной инициализации от секунд (если расчетная область целиком влазит в память GPU) до десятков минут для сеток >30млн (общий размер расчетной области при этом примерно 40-60 Гб). 

Потому что судя по всему человек делает это первый раз в жизни  :smile: Это нормально. По этим всем граблям нужно пройти лично  :biggrin:

Если я правильно понял. И у Вас и у меня по сути реализован конвертор формата из стандартного (unv, neu) в свой формат. Я тоже это делаю один раз для одной сетки. 

У меня без паралелеливания 400 тыс ячеек считает за 4 часа. А у Вас во сколько раз паралеливание дало выигрыш?

 

Изменено пользователем Andreiwse
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • gudstartup
      когда рг не крутится привод должен быть в состоянии stanby если только реле  servo enable залипвет. а с другой стороны во время работы ошибка тоже возникает. если не мотор то привод виноваты пусть проверяет
    • Guhl
      Не знаю  Я бы индикацию на приводе смотрел по нагрузке.
    • gudstartup
      а где тогда ошибка по этому сигналу станок что с не зажатой головой едет работать или стоит. уж это электроавтоматика в первую очередь проверяет
    • Guhl
      Может не снимается сигнал "включения привода", потому что, например, не срабатывает сигнал "рг зажата"?
    • gudstartup
      @FitchKrause проверяйте кабели мотора и датчика прозвоните изоляцию мотора. подключитесь к приводу с помощью по и посмотрите может еще какие ошибки есть. если как вы пишите ошибка возникает даже во время простоя тогда для проверки отключите силовой кабель двигателя и посмотрите будет ли возникать ошибка если она перестанет появляться то дело в моторе или кабеле если нет тогда датчик или сам привод виноваты  
    • Bot
      ModuleWorks объявляет о выпуске своих программных компонентов 2024.04 для цифрового производства. Эта свежая версия ModuleWorks SDK содержит ряд новых функций для эффективного создания траекторий инструмента, от улучшений в 2-осевой обработке до многоосевой чистовой обработки поверхности. Смотреть полностью
    • FitchKrause
      Ошибка происходит даже если станок простаивает, его не клинит после смены инструмента, 30 минут работает без вопросов, а затем просто выдает ошибку и блокирует серво-турель. И проблема только с этим, по осям x и z, в режиме jog, ref и handle ходит спокойно. Манометры тоже не показывают каких либо проблем. "Кулачок", который держит заготовку тоже работает исправно.
    • Anat2015
      Не корректировать надо, а разбираться в причине перегрузки. Может у вас голова клинит где-то. Зажим у нее вроде бы гидравлический, по симптомам вполне возможно, что тут проблема.
    • TVM
      Согласен, что не всё так уж страшно, но повторюсь, не все так просто.
    • Koels
      Всем привет. Фанук Professional 3. Станок Makino V 55. Передодически вылазит ошибка "609 Z axis: inv. Radiator fan Failure". Вылазит она в рандомное время, может во время работы, может в простое станка. Менял вентеляторы на Ориг. Все привода включая этот полностью вымывал, до блеска. Сам по себе привод не горячий. Ещё до меня говорили, что эта ошибка была и раньше, они просто меняли привод на новый, тот работал пол года, выскакивала опять ошибка и по старой схеме, новый привод и на пол года. Щас мне нужно разобраться в чем дело, и сам понять не могу. Может можно как то в параметрах забить максимальную температуру для привода,  в книжках не видел такого
×
×
  • Создать...