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

Макросы ANSYS (в очередной раз)


Борман

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

Скопилось несколько полезных синтаксических конструкций :) Буду выкладывать по-тихоньку.

 

Давно хотел разобраться сэтой штукой.. и наконец сегодня разобрался.

Можно Ансису подсунуть СЛАУ, и он ее решит. Можно разреженные матрицы тоже подсовывать, но не разбирался с этим.

 

Матрица и правая часть кладутся в MTX_0 и RHS_0, ответ будет в векторе RES_0.

 

Спойлер

finish
/clear,start

*msg
==========================

N=500

*dim,MTX_0,,N,N
*dim,RHS_0,,N
*dim,RES_0,,N
*dim,ERR_0,,N

/nopr
*do,i,1,N,
	*do,j,1,N,
		MTX_0(i,j)=rand(-100,100)
	*enddo
	RHS_0(i)=rand(-100,100)
*enddo
/gopr

*dmat,MTX_1,D,import,apdl,MTX_0
*vec,VEC_1,D,import,apdl,RHS_0
*vec,RES_1,D,alloc,N

*lsengine,lapack,ENG_1,MTX_1
*lsfactor,ENG_1,invert
*lsbac,ENG_1,VEC_1,RES_1

*export,RES_1,apdl,RES_0

/nopr
norm=0
*do,i,1,N,
	tmp=0
	*do,j,1,N,
		tmp=tmp+MTX_0(i,j)*RES_0(j)
	*enddo
	ERR_0(i)=tmp-RHS_0(i)
	norm=norm+abs(ERR_0(i))
*enddo
/gopr

*msg,,norm
ERR NORM = %e

 

 

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


UnPinned posts

Мой шаблон для файла-задачи

Спойлер

finish
/clear,start

*create,MODEL

/triad,lbot

pi=4*atan(1)
*afun,deg

! ==== ИСПОЛНЯЕМЫЙ БЛОК КОМАНД ======
....

*go,:stop

! === НЕИСПОЛНЯЕМЫЙ БЛОК КОМАНД =====
....

:stop

*end

*use,MODEL

! === ИСПОЛНЯЕМЫЙ БЛОК КОМАНД =======
....

gplot
/dev,font,2,Courier*New,400,0,-13,0,0,,,

 

 

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

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

 

Макрос преобразует выбранное множество объектов (точки, линии, узлы... см. первый аргумент макроса) в последовательность команд xsel,s ... xsel,a

Спойлер

/com,****************************************

/nopr

*if,arg1,eq,1,then
	ent='kp'
*endif

*if,arg1,eq,2,then
	ent='line'
*endif

*if,arg1,eq,3,then
	ent='area'
*endif

*if,arg1,eq,4,then
	ent='volu'
*endif

*if,arg1,eq,5,then
	ent='node'
*endif

*if,arg1,eq,6,then
	ent='elem'
*endif

*get,n_ent,%ent%,0,count
*dim,ar_ent,table,n_ent,4

ne=0

*do,i,0,4
	ar_ent(0,i)=i
*enddo

i=1

*dowhile,i
	*get,ne,%ent%,ne,nxth
	*if,ne,eq,0,then
		*exit
	*endif
	ar_ent(i,0)=i
	ar_ent(i,1)=ne
	ar_ent(i,3)=0
	ar_ent(i,4)=0
	*if,i,gt,1,then
		ar_ent(i,2)=ar_ent(i,1)-ar_ent(i-1,1)
		
		*if,ar_ent(i,2),eq,1,then
			ar_ent(i,3)=ar_ent(i-1,3)
		*else
			ar_ent(i,3)=ar_ent(i,1)
		*endif

		*if,ar_ent(i,3),ne,ar_ent(i-1,3),then
			ar_ent(i-1,4)=ar_ent(i-1,1)
		*endif		
	*else
		ar_ent(i,3)=ar_ent(i,1)
	*endif	
	i=i+1
*enddo

*if,ar_ent(n_ent,4),eq,0,then
	ar_ent(n_ent,4)=ar_ent(n_ent,1)
*endif

*cfopen,tmp_sel,txt

seltype='s'
enttype=strsub(lwcase(ent),1,1) 

*do,i,1,n_ent
	ent1=ar_ent(i,3)
	ent2=ar_ent(i,4)	
	*if,ent2,ne,0,then
		*if,ent1,ne,ent2,then
			*vwrite,enttype,seltype,ent1,ent2
%csel,%c,,,%i,%i,1
		*else	
			*vwrite,enttype,seltype,ent1
%csel,%c,,,%i
		*endif
		seltype='a'
	*endif
*enddo

*cfclos

ar_ent=
n_ent=
seltype=
enttype=
ne=
i=
ent=
ent1=
ent2=

/sys,start notepad tmp_sel.txt

/gopr

 

 

 

Ссылка на сообщение
Поделиться на других сайтах
2 hours ago, Борман said:

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

 

Макрос преобразует выбранное множество объектов (точки, линии, узлы... см. первый аргумент макроса) в последовательность команд xsel,s ... xsel,a

  Hide contents


/com,****************************************

/nopr

*if,arg1,eq,1,then
	ent='kp'
*endif

*if,arg1,eq,2,then
	ent='line'
*endif

*if,arg1,eq,3,then
	ent='area'
*endif

*if,arg1,eq,4,then
	ent='volu'
*endif

*if,arg1,eq,5,then
	ent='node'
*endif

*if,arg1,eq,6,then
	ent='elem'
*endif

*get,n_ent,%ent%,0,count
*dim,ar_ent,table,n_ent,4

ne=0

*do,i,0,4
	ar_ent(0,i)=i
*enddo

i=1

*dowhile,i
	*get,ne,%ent%,ne,nxth
	*if,ne,eq,0,then
		*exit
	*endif
	ar_ent(i,0)=i
	ar_ent(i,1)=ne
	ar_ent(i,3)=0
	ar_ent(i,4)=0
	*if,i,gt,1,then
		ar_ent(i,2)=ar_ent(i,1)-ar_ent(i-1,1)
		
		*if,ar_ent(i,2),eq,1,then
			ar_ent(i,3)=ar_ent(i-1,3)
		*else
			ar_ent(i,3)=ar_ent(i,1)
		*endif

		*if,ar_ent(i,3),ne,ar_ent(i-1,3),then
			ar_ent(i-1,4)=ar_ent(i-1,1)
		*endif		
	*else
		ar_ent(i,3)=ar_ent(i,1)
	*endif	
	i=i+1
*enddo

*if,ar_ent(n_ent,4),eq,0,then
	ar_ent(n_ent,4)=ar_ent(n_ent,1)
*endif

*cfopen,tmp_sel,txt

seltype='s'
enttype=strsub(lwcase(ent),1,1) 

*do,i,1,n_ent
	ent1=ar_ent(i,3)
	ent2=ar_ent(i,4)	
	*if,ent2,ne,0,then
		*if,ent1,ne,ent2,then
			*vwrite,enttype,seltype,ent1,ent2
%csel,%c,,,%i,%i,1
		*else	
			*vwrite,enttype,seltype,ent1
%csel,%c,,,%i
		*endif
		seltype='a'
	*endif
*enddo

*cfclos

ar_ent=
n_ent=
seltype=
enttype=
ne=
i=
ent=
ent1=
ent2=

/sys,start notepad tmp_sel.txt

/gopr

 

 

 

блин..классно! надо будет на досуге потестить :) хочется конечно логику отследить, но без коментариев мне довольно тяжело читать... какие там индексы куда идут, чего где склеивается. Если будет несколько минут свободных и желание, то хоть пара слов очень бы облегчила чтение и понимание кода.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Orchestra2603 сказал:

пара слов

Макрос писался давно, и, поскольку, он вспомогательный, оптимизации не подлежит :)

Вытянуть множество в последовательность единичных селектов не сложно. Все эти циклы направлены на оптимизацию, чтобы часть селектов привести к виду xsel,a,,,x1,x2,1

У меня это все висит на кнопках

*ABBR, K_L , SUPERSEL,1
*ABBR, L_L , SUPERSEL,2
*ABBR, A_L , SUPERSEL,3
*ABBR, V_L , SUPERSEL,4
*ABBR, N_L , SUPERSEL,5
*ABBR, E_L , SUPERSEL,6

L - от слова list.

Узлы с элементами не выделяю никогда... вот сейчас подумал. Надо удалить.

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

Я тут с такой штукой столкнулся. В классике генерируется автоматом 2D сетка в прицнипе произвольная, нерегулярная (пусть из PLANE42). Нужно из сетки сделать совокупность разделенных элементов. Короче говоря, нужно "отделить" элементы друг от друга, но сохранить расположение элементов. Потом уже между разделенными элементами будут всобачиваться cohesive elements. Может кто-то что-то подсказать по этой теме? 

 

Уже есть мысли, как сделать это в APDL макросе, но не хочется изобретать велосипед.

Ссылка на сообщение
Поделиться на других сайтах
В ‎22‎.‎09‎.‎2020 в 07:10, Борман сказал:

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

 

Макрос преобразует выбранное множество объектов (точки, линии, узлы... см. первый аргумент макроса) в последовательность команд xsel,s ... xsel,a

 

 

А не проще  работать со столбиками в  Notepad++ или ультраэдите  ?  Забрать множество туда и подкорректировать все как один и вставить назад  …

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

У меня подобные операции занимают секунды. Ctrl+C  корректировка столбиками прямо в коде APDL   … 

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

для создания кохезивных элемнтов есть команда которая делает подготовку с существующей сеткой и создает потом кохезивные элементы.

в хелпе есть пример и листинг

Ссылка на сообщение
Поделиться на других сайтах
18 hours ago, dronm said:

для создания кохезивных элемнтов есть команда которая делает подготовку с существующей сеткой и создает потом кохезивные элементы.

в хелпе есть пример и листинг

Cпасибо!

Я посмотрел и нашел только CZMESH... и она там просист указать компонент элементов, которые прилегают к интерфейсу. И тут проблема.. Я хочу чтобы у меня интерфейс был, грубо говоря, везде...Т.е. чтобы интерфейс был на каждой грани каждого элемента.. я никак не смог найти про такое в хелпе.

 

Если есть минутка, можете ткнуть меня мордой в ссылку, пожалуйста?

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

VM248

все что выделите для операции с CZMESH все будет покрыто кохезивными элементами

то что не будет выделено не будет участвовать в генерации.

еще проще сделать тоже самое в LS-Prepost

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

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

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

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

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

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

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

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

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

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

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




×
×
  • Создать...