Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

ресурсы этого топика
ссылка на подборку ресурсов, собранных посетителями этого форума
 
то, чем мы решили поделиться
ссылка на страничку программ etc собственного изготовления, которыми любезно делятся наши форумчане


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bubanoid
Цитата:
Оказывается, увеличить стек в студии очень просто!
Есть и другой способ: когда у меня массив не умещался в стеке, я просто воспользовался ключом  

Код:
ifort -heap-arrays ...
т. е., массивы теперь создавались в куче. Довольно удобно, сюрпризов от стека не будет

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 23:03 24-01-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
я просто воспользовался ключом  
 
Код:
ifort -heap-arrays ...  

теперь внимание, квест!
ищем это в студии
время пошло!
:)

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 00:38 25-01-2011
bubanoid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM

Цитата:
если это чистый модуль, то его обычно только компилируют, но не линкуют...

не совсем "чистый" модуль. Он использует IMSL-евские библиотеки. Которые, на удивление, подключаются и работают.
 
TeXpert

Цитата:
т. е., массивы теперь создавались в куче. Довольно удобно, сюрпризов от стека не будет

я когда-то, в в седой древности, когда в универе учил паскаль, читал, что куча существенно замедляет работу. А в моём случае скорость вычислений важна.
 
Найти сходу соответствующую опцию в студии не получилось. Увеличить размер кучи - могу : ) а заставить программу её использовать - пока нет.
 
PS
Я бы с удовольствием отказался от студии. Но не могу. Дебагить/писать код без ошибок без неё не умею. )

Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 02:48 25-01-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bubanoid

Цитата:
не совсем "чистый" модуль

ещё раз...
если в исходниках .f?? стоит module end module и основным файлом проекта явл. только он,
то никакой сборки (а именно подключение внешних библиотек и объектников) не происходит...

Цитата:
Он использует IMSL-евские библиотеки. Которые, на удивление, подключаются и работают.

библиотеки подключаются _только_ при сборке конечного исполнимого файла...
 
module test
  use IMSL
  call some_IMSL_sub()
end module test
 
подключение библиотеки IMSL для получения test.mod не требуется,
можешь проверить...
 
нас так учили
"
колы разрешаютя при линковке
"
:)

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 03:08 25-01-2011
bubanoid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
а вы как, вообще не спите? )

Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 03:23 25-01-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bubanoid
я мог бы, конечно, ответить шаблоном
"покой нам только сниться",
но в этой фразе ясно видно противоречие, не так ли?
так что отвечу по-простому as is:
старость -- не радость...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 06:56 25-01-2011
TeXpert



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Цитата:
теперь внимание, квест!  
 ищем это в студии  
 время пошло!  
 
FORTRAN я пока пользую под Linux (под Windows пока смысла нет, ибо имеется также доступ к кластеру, а там Windows'ом и не пахнет, нужна она там, как корове седло))
 
bubanoid
Цитата:
я когда-то, в в седой древности, когда в универе учил паскаль, читал, что куча существенно замедляет работу. А в моём случае скорость вычислений важна
Ну, нельзя реалии тех времен, когда памяти было кот нарыдалъ, применять к нынешним, когда памяти --- море. Да и как куча может замедлять работу, если массивы (мои) тамошние --- статические? Я еще понимаю, когда память периодически выделяется/освобождается, причем активно. А обычные переменные так и могут жить в стеке, ведь параметр говорит --- "-heap-arrays", то есть именно массивы в куче

Цитата:
Найти сходу соответствующую опцию в студии не получилось. Увеличить размер кучи - могу : ) а заставить программу её использовать - пока нет
Попробуй компилировать через командную строку

----------
Майкудук, Пришахтинск не предлагать!:)
А на Пирогова приходит снова весенний гомон...

Всего записей: 3604 | Зарегистр. 08-02-2003 | Отправлено: 11:42 25-01-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TeXpert
да я ж это не тебе, а... студии сказал
с тобой всё в порядке, судя по
ifort -heap-arrays
 
я тоже стек ставлю как
ifort -link/stack:xxxx
 
bubanoid

Цитата:
что куча существенно замедляет работу

зависит от менеджера кучи, у интела он неплохой...
если ты используешь allocate(), то так или иначе с кучей общаешься...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 12:53 25-01-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bubanoid

Цитата:
Я бы с удовольствием отказался от студии. Но не могу. Дебагить/писать код без ошибок без неё не умею. )

Может попробовать использовать альтернативные "студии"?
Например на основе Eclipse (тут где-то даже ссылка недавно была, где там обещается рефакторинг). Сам вот правда всё никак не добирусь. Но надо будет.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 13:25 25-01-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Типа, убит наповал. Захотел сгладить экспериментальные данные от наводок в электросети. Там, самое гнусное, при регистрации идет не столько синусоида 50 Гц, сколько пакет высокочастотных наводок, с общей частотой в 50 Гц. При разложении по Фурье в высокочастотной области просто частокол. Правда, подозреваю, что это результат алиасинга. Типа, наводки с частотой выше чем частота Найквиста нагло вводят себя в область более низких частот. Примерно так: импульсный блок питания компа, используемого при регистрации, дает некую высокочастотную помеху, это складывается с наводкой 50 Гц, получается жопа полная... Но я убит конкретно не этим. Пробовал раскладывать наводки по Фурье, фильтровать сложно из-за дикого частокола в области высоких частот. Возникла мысль предварительно ухайдакать высокие частоты каким-нибудь разумным сглаживанием. А потом гонять по Фурье. Вот тут и подкралось оно... Захотелось вдруг использовать пакет GCVSPL, написанный лет 25 назад под G77. Я не буду жаловаться на использование неявного описания переменных: хочешь что-то поменять - сам все переменные опишешь под флагом implicit none. Я про некий финт, который там используется. От которого я просто ошизел. Типа, есть подпрограмма, в которой выделяется некий достаточно большой рабочий массив для промежуточных данных. Одномерный. Далее, этот же массив используется другими подпрограммами для вычислений. Фишка в том, что он передается в подпрограммы как бы своими частями. Мы его указываем при вызове подпрограммы в виде некоего единичного элемента массива, а потом этому единичному элементу в описании подпрограммы отвечает (прочуствуйте!) аж целый двумерный массив! Причем с разными индексами один и тот же рабочий массив аж два раза отправляется в одну и ту же подпрограмму, и в переменных подпрограммы эти единичные элементы соответствуют или двумерному массиву, или просто одномерному! Да, я не вчера на свет родился, и знаю, что при вызове подпрограмм все аргументы в фортране передаются по ссылке. Типа, если мы объявили некий рабочий массив в подпрограмме, то, передавая  его элементы по ссылке в другие подпрограммы, мы вроде должны получить доступ ко всем последующим элементам массива. Вопрос, собственно, в том, почему на это дело не ругается компилятор? Ну, когда некому единичному элементу в массиве ставится в соответствие целый массив в вызываемой подпрограмме? А он таки не ругается! Проверено на Salford FTN95, который таки отличается повышенной придирчивостью к использованным трюкам. Ну, я понимаю, сишные (и плюсовые) программеры аж целую войну ведут против "ненадежных" сишных (плюсовых) указателей (а, может, это идет война именно против таких программеров? Не уверен!), которые, типа, отстой, а вот Си-Шарп - он, типа, спасет от всех напастей, хоть от ядерной войны! Но старый дряхлый Фортран, тем более в пределах Ф77... Неужто он использовал столь же ненадежные адресации просто при перенаправлении в подпрограммы? И это стандартно проходило? Я просто торчу!
 
Кстати, при попытке переписать все это дело в варианте, от которого не встают волосы дыбом, потерпел фиаско. Пробовал для всех этих фич использовать оператор EQUIVALENCE, но он не годится для параметров, передаваемых в подпрограммы. Не поддерживается, короче. Можно переписать для параметров, передаваемых через COMMON-block, но уже совсем не охота. Зачем выеживаться, если и так все работает?

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 13:15 26-01-2011
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP
Конечно не в курсе реалий, в которых делался этот код.
Но возможно всё это - следствие борьбы за память.
Но мб и результат практикума студентов/"гениального" программиста-хакера.
А вообще там же есть и версии на С - мб лучше их использовать?..

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 13:45 26-01-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP
не о коде, код позднее посмотрю...
 
о простейшем сглаживании
помню тоже боролся с зашумлёнными экспериментальным данными...
начал, как водится, с самого сложного, сплайны-шмайны, фурья, НЧ-ВЧ-полосовые,
до вейвлетов добрался...
всё это оказалось фигнёй и ядрёной бомбой для [джеков] воробьёв в моём случае, а самый качественный резалтс получил используя самые простейшие вещи:
1) осреднение
2) сглаживание скользящим окном
3) используя фильтр Стеклова (мой шеф его бааальшой апологет, супер!), но тут, правда, придётся использовать какое-нито грамотное интегрирование, я сначала юзал quadpack, потом нашёл симпатичную DAVINT() из SLATEC'a
рекомендую...
 
---
кстати...
увидев версию GCVSPL под VMS, вспомнил...
когда я только начинал (и именно под VMS), всеобщей практикой было передавать в п/п один здоровенный одномерный вектор параметров и каждая п/п выбирала из него уже своё нужное...
а что? хозяин-барин, я знаю что и как я передаю, соответ., знаю что и как из этого извлекать...
особой фишки в этом не было, просто код
call SUB(X)
генерился/исполнялся гораздо эффективнее чем
call SUB(P1, P2, P3, P4, ..., PN)

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 14:12 26-01-2011 | Исправлено: akaGM, 14:44 26-01-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov

Цитата:
Но возможно всё это - следствие борьбы за память.

Очень похоже. Судя по всему, это некий подразумеваемый (и современный компилятор это понимает, что более чем странно!) аналог оператора EQUIVALENCE. Типа, по стандарту (хоть очень древнему) нельзя в EQUIVALENCE использовать аргументы, передающиеся в подпрограммах, но если очень хочется, то можно! Вот таким путем.  
Фортран - такой странный язык, можно очень много чего, но потом, правда, разбираться приходится, а почему это самое можно....  
 
akaGM

Цитата:
кстати...  
увидев версию GCVSPL под VMS, вспомнил...  
когда я только начинал (и именно под VMS), всеобщей практикой было передавать в п/п один здоровенный одномерный вектор параметров и каждая п/п выбирала из него уже своё нужное...  
а что? хозяин-барин, я знаю что и как я передаю, соответ., знаю что и как из этого извлекать...  

Да не вопрос, просто сейчас волосы дыбом встают от некоторых фишек, обычных в то время... На самом деле, вполне понятно, почему это работает, но сам в ступор встаешь от таких вещей. Компилятор вроде съедает, так что кардинально переписывать не буду. Надеюсь, что моим экспериментальным данным от этого не поплохеет.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 16:16 26-01-2011
plazmon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP
 
Это все издержки того, что в FORTRAN'е до 90 не было динамически размещаемых массивов.
Приходилось требовать, что бы вызывающая программа предоставляла место под рабочие (временные) массивы, т.к. с одной стороны не было известно какого размера задача будет считаться, а с другой стороны надо было экономить память.
А компилятор не ругается, потому что так прописано в стандарте, и более того, широко использовалось, так что если б он на это ругался, то огромная куча софта не прошла бы.
А был еще такой фокус, что если в подпрограмму передовался двухмерный массив, то надо было передовать размер массива и "реальный" размер.

Всего записей: 107 | Зарегистр. 29-05-2007 | Отправлено: 19:41 26-01-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
plazmon
Ну, понятно, что раз динамических массивов нет, то надо как-то выкручиваться. И таки выкручивались десятилетиями, так что какие-то трюки изобрели для этого дела. Не вполне теперь понимаемые непосвященными. И я  - из их числа. И, конечно, я не знаток стандартов, что там прописано, а что нет, спорить не буду. Просто когда некому единичному элементу массива (типа, одной переменной!) в вызываемой подпрограмме ставится в соответствие целый двумерный массив, мозги как-то сами по себе начинают плавиться, а глаза лезть на затылок. Но, в конце концов, компилятор съедает - и ладно. Я что, должен быть святее Папы Римского?

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 12:10 27-01-2011
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP
plazmon
 
Довелось мне лет 5 назад переводить на CVF программу, написанную в одной конторе в 80-х годах на фортране для машин серии ЕС. Так там автор программы вообще чудеса творил. Например, в вызывающей программе было два массива заданной размерности, а в вызываемую передавался только первый, а для доступа к элементам второго использовались значения индекса, большие, чем длина первого массива. Подразумевалось, что в памяти они идут один за другим. На EC это, видимо, работало, а CVF программа сразу вылетала. Измучился, пока эту ошибку обнаружил, поскольку всего передавалось массивов штук сорок.
Поэтому для себя давно установил правило: включать по максимуму все средства контроля компилятора.

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 12:20 27-01-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10
Boт тут все реальные чудеса начинаются с того момента, что на это не ругается компилятор! Правда, на CVF не тестил. Есть он на работе, на одном из компов. Надо будет попробовать.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 13:04 27-01-2011
plazmon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А компилятор не проверяет выход индекса за границу массива (если ты его об этом специально не попросишь). Сделано так чтобы не замедлять счет.

Всего записей: 107 | Зарегистр. 29-05-2007 | Отправлено: 14:38 27-01-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
plazmon

Цитата:
А компилятор не проверяет выход индекса за границу массива (если ты его об этом специально не попросишь).

Вот проблема в том, что когда просишь FTN95 проверять все подобные вещи (компиляция с опцией /CHECK), то он глючить начинает немилосердно. Я уже баг-репорт хочу им отправить по этому поводу. А, на самом деле, там в исходной программе никаких выходов за пределы массивов реально и нет, я проверял. Все должно работать железно.  Фишка только в том, а почему компилятор не ругается на такие выкрутасы? Все остальное я вроде уже просек.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 15:14 27-01-2011 | Исправлено: XPEHOMETP, 15:15 27-01-2011
CurlyDevil



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья, есть следующий вопрос, касающийся быстрого преобразования Фурье.
 
Нужна библиотечка быстрого преобразования Фурье. Комплексное, действительно, синус и косинус и многомерные -- все они нужны. Итак, как обычно, надо чтобы была побыстрее. Кажется, что самый шустрый вариант FFTW. Сия библиотечка написана на Си, а коды я пишу на Фортране, но в FFTW есть возможность вызывать еёные процедуры и из Фортрана тоже. И все бы хорошо, но возникает следующая проблема. Точность с которой эта библиотека может проводить вычисления это single, double (т.е. фортрановский real*8) и  long double (это 80 бит, в фортране такого типа нема, размер этого типа данных, насколько я понимаю, связан с размером регистра процессора). Мне же хотелось бы иногда использовать quad точность, которая сейчас уже поддерживается многими компиляторами  (Intel, NAG, Lahey и др.). Интересно, умеет ли кто заставить FFTW считать с quad точностью? Если же нет, то порекомендуйте библиотечку FFT в сырцах (хотя их конечно, тьма) для double точности, и я тогда буду просто ее компилировать ifort'ом с опцией -r16. Последняя реализация FFT, которой я пользовался, была написана в каком-то лохматом 70 году, поэтому я надеюсь сейчас, что может быть есть что-то посовременнее (эффективнее).  

Всего записей: 121 | Зарегистр. 19-09-2003 | Отправлено: 17:27 31-01-2011 | Исправлено: CurlyDevil, 17:47 31-01-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru