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

Запись результатов в отдельный файл и циклы


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

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

У меня два насущных вопроса:

1) Пусть есть какая-то моделька. Совершенно любая. Для примера во вложенном файле кронштейн.

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

*GET, sigma1, node, 2, s, eqv,,

*GET, sigma2, node, 42, s, eqv,,

*CREATE,ansuitmp

*CFOPEN, 'D:\result', txt,,

*VWRITE,sigma1,sigma2,,, , ,, ,,, , , , ,, , , ,

(f10.4)

*CFCLOS

*END

/INPUT,ansuitmp

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

13.9722

0.4401

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

Т.е. опять должно быть

*GET, sigma3, node, 3, s, eqv,,

*GET, sigma4, node, 40, s, eqv,,

*CREATE,ansuitmp

*CFOPEN, 'D:\result', txt,,append - чтобы не затирался старый файл

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

13.9722 sigma3

0.4401 sigma4

2) Есть ли возможность в adpl писать циклы? Т.е. допустим есть круглая пластинка с радиусом равным 3;4;5;6;7. Можно ли написать цикл, чтобы вручную не писать каждый раз новое значение радиуса?

Я почитал help, но конкретно там ничего не сказано кроме того, что есть команды *CYCLE, *ENDDO , *DO. Т.е. непонятно как их использовать.

На счёт этого вроде понял, как делать. Но если у кого есть наглядный примерчик - буду рад :)

Заранее благодарю)

ADPL.txt

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


"кроме того, что есть команды *CYCLE, *ENDDO , *DO. Т.е. непонятно как их использовать.

" - в примерах то посмотрите или хелпе. Все разжевано и элементарно. :)

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

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

У меня два насущных вопроса:

1) Пусть есть какая-то моделька. Совершенно любая. Для примера во вложенном файле кронштейн.

.....

2) Есть ли возможность в adpl писать циклы? Т.е. допустим есть круглая пластинка с радиусом равным 3;4;5;6;7. Можно ли написать цикл, чтобы вручную не писать каждый раз новое значение радиуса?

ADPL.txt

1. Предлагаю прописать этот макрос вначале, а потом просто его использовать, чтобы не загромождать текст программы

*CREATE,ansuitmp

*CFOPEN, 'D:\result', txt,,append

*VWRITE,sigma1,sigma2,,, , ,, ,,, , , , ,, , , ,

(f10.4)

*CFCLOS

*END

.....

текст программы

......

*GET, sigma1, node, 2, s, eqv,,

*GET, sigma2, node, 42, s, eqv,,

*use, ansuitmp

*GET, sigma1, node, 3, s, eqv,,

*GET, sigma2, node, 40, s, eqv,,

*use, ansuitmp

2. Циклы писать можно и нужно )))

*do,r,3,7,1

......

*enddo

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

*do,r,3,7,1

....

CYL4, , ,r

...моделирование и расчет....

...вывод результатов...

allsel,all

aclear,alll ! удаляем сетку

adele,all,,,1 ! удаляем геометрию

*enddo

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

1. Предлагаю прописать этот макрос вначале, а потом просто его использовать, чтобы не загромождать текст программы

2. Циклы писать можно и нужно )))

Спасибо за разъяснения про циклы :smile: Действительно синтаксис понятен и не сложен.

На счёт первого ответа не совсем понял. Т.е. согласен, что так не загромождается текст и выглядит красивее. Но вы не знаете, как сделать, чтобы первые два числа были записаны в первый столбец, а вторые два во второй столбец? Тут просто синтаксис fortrana используется, а его я не знаю :(

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

<noindex>http://www.eng.umd.edu/~nsw/ench250/fortran1.htm</noindex> тут есть

Спасибо, за первую ссылку с гугла ;)

Но я задал конкретный вопрос про написание второго столбца. Я, конечно, перед тем как написать здесь, потратил некоторое время, чтобы справиться самостоятельно и продолжаю пробовать и сейчас. Пока не срастается. Поэтому и спрашиваю тут, сталкивался ли с этим кто-нибудь :)

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

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

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

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

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

(f10.4, f10.4) - попробуйте записать так, а потом транспонируйте где-нибудь

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

Ну это слишком просто. Уровень то похоже докторский, коль такие вопросы возникают. Откуда человеку про массивы знать если про циклы не знает. У меня один знакомый пытался однажды доктора научить программированию на бейсике. Сказал, что наверное мартышку проще. У них на все свои хотелки и мнения и они не могут по определению быть неправильными :)

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

Dandy, sergeyd

Спасибо за советы. Видимо буду выводить в строчки, а потом с помощью программки в matlab преобразовывать в нужный мне вид.

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

Что бы не открывать новую тему, решил задать вопрос в этой ветке, т.к. он также связан с циклами.

Требуется провести множество расчетов для геометрий, отличающихся между собой только местами вырезов. На входе есть готовая сетка в формате inp, которую я читаю

/INPUT,'1','inp','D:\models\',, 0

Вопрос в следующем: как в цикле использовать команду /INPUT, чтобе после одного расчета и вывода данных старая сетка удалялась, и опять же черех /INPUT забрасывалась новая?

P.S.

Если написать

*do,i,1,50,1

/INPUT,'i','inp','D:\models\',, 0

...

*enddo

то естественно не сработает :)

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

*do,i,1,50,1

/INPUT,'i','inp','D:\models\',, 0

...

*enddo

*do,i,1,50,1

/INPUT,'i','inp','D:\models\',, 0

...

<<ВЫТАЩИТЬ ВСЕ НУЖНЫЕ РЕЗУЛЬТАТЫ>>

FDELE,all

DDELE,all

EDELE,all

и т.п.

*enddo

Должно сработать.

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

*do,i,1,50,1

/INPUT,'i','inp','D:\models\',, 0

...

<<ВЫТАЩИТЬ ВСЕ НУЖНЫЕ РЕЗУЛЬТАТЫ>>

FDELE,all

DDELE,all

EDELE,all

и т.п.

*enddo

Должно сработать.

Как раз-таки счетчик по i не работает. В этом то и вся проблема. Он i понимает буквально, а не как число :(

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

пиши вместо `i`

%i%

В точку, все заработало !!! :clap_1:

Спасибо, Влад.. А откуда такие познания ? Мот посоветуете какой нить мануальчик по apdl :g: ?

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

Всякие руководства по APDL.

Влад, спасибо большое за информацию, с удовольствием поизучаю :)
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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