Доброго времени суток!
Мне нужна помощь по индексированию заголовков многомерных таблиц. Возьмем, к примеру 2D, 3D и 4D таблицы с переменными X, Y, Z и TEMP.
Для 2D таблицы с индексами все просто: TABLE(i,0) задает значение заголовка i-й строки (X); TABLE(0,j) задает значение j-го столбца (Y).
Для 3D таблицы, судя по визуализации и коду в логе, получается, что каждый компонент 3-го измерения (Z) содержит 2D таблицу X/Y, потому что индексы по Z задаются как TABLE(0,0,k), а индексы X/Y задаются для каждого 'k' как TABLE(i,0,k) and TABLE(0,j,k). См. код и скриншот:
*dim,test3d,table,5,4,3,x,y,z
*do,k,1,3
*set,test3d(0,0,k),k*100
*do,i,1,5
*set,test3d(i,0,k),k*100+i
*enddo
*do,j,1,4
*set,test3d(0,j,k),k*100+j*10
*enddo
*enddo
По аналогии я предположил, что каждый компонент 4-го измерения (TEMP) должен содержать 3D таблицу и задаваться его заголовок должен как TABLE(0,0,0,g), поэтому я добавил внешний цикл:
*do,g,1,2
! Вот тут ошибка -->
*set,test4d(0,0,0,g),g*1000
*do,k,1,3
*set,test4d(0,0,k,g),g*1000+k*100
*do,i,1,5
*set,test4d(i,0,k,g),g*1000+k*100+i
*enddo
*do,j,1,4
*set,test4d(0,j,k,g),g*1000+k*100+j*10
*enddo
*enddo
*enddo
Но в этом случае в указанной линии я получил ошибку "Subscript 3 is out of range for parameter TEST4D. Specified value is 0 Maximum value is 3." кривого индекса, в результате чего у меня возникли вопросы:
Как устроена 4D таблица и как ее правильно заполнить?
Вложение | Размер |
---|---|
table_3d.jpg | 305.3 КБ |
Добрый день!
Предполагаю, что для 4 и 5d таблиц заголовки нужно заполнять через команду *taxis, а остальные данные можно ввести через *set. Для примера посмотрите статью по ссылке https://www.padtinc.com/blog/other-stuff-every-user-should-know-about-tables-in-ansys-mechanical-apdl-nesting-and-4-or-5-dimension-tables/
Да, я видел эту статью, но с *TAXIS есть непонятный момент, на котором я и заступорился. В эту команду можно писать любые числа в индекс, с которым в данный момент не идет работа. Например, в 3D таблице для записи числа в третью ячейку по Y можно написать вполне рабочие команды:
*taxis,test3d(-1,3,0),2,666
*taxis,test3d(999,3,-777),2,666
И все будет ок, 666 запишется. В этом плане *SET с нулевыми индексами кажется надежнее. Плюсом к этому, если через GUI вписать туда же число руками, то, судя по логу, оно впиcывается автоматом во все ячейки по Z:
*SET,TEST3D(0,3,1) , 666
*SET,TEST3D(0,3,2) , 666
*SET,TEST3D(0,3,3) , 666
Если считывать код, такого не происходит (см. скрин):
*dim,test3d,table,5,4,3,x,y,z
*taxis,test3d(0,3,0),2,666
Остается надеяться, что ANSYS сам дописывает внутри себя эти заголовки, просто они не отображаются =(
Добавить комментарий