
Вся гибкость нашего софта в резиновых костылях
отсюда
Разрезание модели на заданное количество частей
Представленный здесь скрипт в полной мере относится к классу так называемых «костылей» - т.е. с помощью подручных средств пытается исправить кривизну Datamine. Ну, как и тот предмет, который дал название этому классу ПО :)
Основная идея заключается в следующем. Как известно (если Вам неизвестно, рад, что сообщу новость), Datamine почти не умеет работать с многоядерными процессорами. То есть, если у Вас, например, запущен какой-нибудь длительный процесс обсчёта чего-либо (ESTIMA, SELWF и прочее, прочее), то, посмотрев на загрузку процессора, можно с удивлением обнаружить, что, как ни напрягается Datamine, как ни пускает пар из ушей, а загружено единственное ядро процессора (можно заметить по индикатору диспетчера задач). А остальные ядра стоят в сторонке и с удивлением наблюдают эту эпическую работу. Если Вы не любитель гонять чаи на работе, а ещё если сроки поджимают, то радости от этого факта Вы, скорее всего, не испытываете. «Что же делать?!» – воскликните Вы и будете не одиноки в этом вопле отчаяния. Говорят, некоторое время назад кто-то из классиков русской литературы что-то похожее писал, но по другому поводу. Исчерпывающего ответа у меня нет, но в случае обсчёта моделей можно сделать следующее: разрезать модель на равные части, разнести эти части по разным папкам, создать там проекты Datamine и запустить столько копий Datamine, сколько сочтёте нужным. Сколько? Ну, например, 4 – с учётом того, что многие процессоры имеют по 4 ядра. Или 8 – с учётом того, что ядра поддерживают технологию HyperThreading и представляются ОС не одним ядром, а двумя. Соответственно, запустить 4 или 8 копий Datamine и в соотвтствующее количество раз ускорить обработку.
Здесь, однако, есть небольшая хитрость. Многим процессам для корректного результата нужно, чтобы в модели были представлены все подъячейки, составляющие данную конкретную материнскую ячейку. Например, незабвенный PROMOD пытается оптимизировать подъячейки в идеале до целой материнской ячейки. Соответственно, если часть подъячеек будет в одной части модели, часть – в другой, то на выходе получится не совсем оптимизированная модель. Например, можно будет увидеть «швы», по которым резалась модель. Чтобы этого не происходило, и написан данный скрипт.
Представленный здесь скрипт разбивает входную модель на заданное количество почти равных (по количеству записей) частей, но таким образом, что все подъячейки с одинаковым IJK (то есть, относящиеся к одной материнской ячейке) находятся в одной части модели. Интерфейс настолько прост, что рассказывать про него совсем нечего:

По окончанию работы выводится сообщение:

В результате работы создаются модели с именами [имя_исходной_модели] _script_part[номер_части]. Собственно, всё. Скрипт может быть полезен при ускорении процессов работы с моделями (ESTIMA, PROMOD и так далее).