Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.225.173] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте, уважаемые!
Вынужден переводить на понятный мне язык Си некоторую программку на фортране из книги, изданной в Лондоне аж в 1969 году. Фортран этот настолько бородат, что ни в одном русскоязычном учебнике я такого применения GO TO не увидел. Признаюсь, просматривал очень бегло. Вот, собственно, код, вызвавший затруднение. [ code ] GO TO (1,2,1,1,1,1,1,1),K 1 SOURCE=0. RETURN 2 SOURCE=A(I,J,NW) RETURN END [ /code ] Кто-нибудь знает, как это работает? |
Сообщ.
#2
,
|
|
|
Нормальное использование, "вычислимый goto", если мне память не изменяет.
GO TO (список_меток), n Сначала вычисляется выражение n, потом происходит переход к n-ой метке из списка. В твоем случае, только при K = 2 произойдет переход ко второй метке, при K = 1, или 3 .. 8 - переход к метке 1. |
Сообщ.
#3
,
|
|
|
Примерно так и предполагал, но надо было удостовериться.
Спасибо! |
Сообщ.
#4
,
|
|
|
Существует утилита Fortran2C (f2c) -- преобразует Fortran-код в C-листинг.
А самое быстрое -- скомпилировать Fortran-код в obj и подключить к проекту на C |
Сообщ.
#5
,
|
|
|
Я пробовал использовать f2c, но что-то не получилось. Думаю, надёжнее самому перевести код. Тут всего тысячи полторы-две строчек..
Дабы не засорять раздел новой темой, задам вопрос тут. Что значат записи вроде: I=0. и I=.0 ? И самое интересное: WP(X12)=0.0*X12 ? |
Сообщ.
#6
,
|
|
|
Цитата Pers_tmb @ Присвоение вещественного нуля переменной. I=0. и I=.0 ? Цитата Pers_tmb @ Забивается массив нулями, если X12 - это переменная цикла. WP(X12)=0.0*X12 |
Сообщ.
#7
,
|
|
|
Цитата WP(X12)=0.0*X12 Я так полагаю, что это что-то вроде функции... потому что эта строчка соседствует с оными. Но просто смысла в такой функции нет. Добавлено Цитата NetVir @ Цитата Pers_tmb @ Присвоение вещественного нуля переменной.I=0. и I=.0 ? Иными словами, если на фортране написано I=5., то это float I=5, а если I=.5, то - float I=0.5? |
Сообщ.
#8
,
|
|
|
Цитата Pers_tmb @ да Иными словами, если на фортране написано I=5., то это float I=5, а если I=.5, то - float I=0.5? Добавлено Цитата Pers_tmb @ такое часто бывает. Я лично уже привык. Но просто смысла в такой функции нет. Добавлено покажи описание переменной Цитата Pers_tmb @ и блок кода, где она учавствует WP |
Сообщ.
#9
,
|
|
|
В начале подпрограммы после описания глобальных переменных есть несколько строчек. Одна из них:
WP(X12)=0.0*X12 В коде же непосредственно есть строчка: A(1,J,NW)=WP(X2(J))/R(J) При этом, переменная X12 нигде не встречается. |
Сообщ.
#10
,
|
|
|
в начале подпрограммы есть implicit none?
|
Сообщ.
#11
,
|
|
|
Нет... сначала SUBROUTINE BOUNCT(K)
потом переменные COMMON сразу после них вот эти "функции"... причём некоторые гораздо правдоподобнее выглядят: и входных значений побольше, и выражение внутри посложнее. Перепечатывать все долго. С книги пишу. |
Сообщ.
#12
,
|
|
|
Цитата Pers_tmb @ Это не функция. Это глупое забивание массива. ИМХО.WP(X12)=0.0*X12 Что за книга? |
Сообщ.
#13
,
|
|
|
Госмен А.Д., Пан В.М., Ранчел А.К. "Численные методы исследования течений вязкой жидкости". В оригинале издана в 1969 ACADEMIC PRESS - LONDON AND NEW YORK. У нас - 1972 издательство "Мир".
Там рядом есть строчка WVW ( DELF,WQ,ROP,DELRO,ETA2 ) = -( DELF/((ETA*DX1)**2)+WQ*(ROP/6.+DELRO/8.))/(ROP/3.+5.*DELRO/24.). Сомневаюсь, что это массив. |
Сообщ.
#14
,
|
|
|
Цитата NetVir @ Цитата Pers_tmb @ Забивается массив нулями, если X12 - это переменная цикла.WP(X12)=0.0*X12 Меня мучают смутные сомнения: синтаксически - это присваивание X12-му элементу массива WP результата произведения "0.0" yf "X12". Смущает, правда, бессмысленность вычисления этого произведения. Но, насколько я помню, присваивание значений всему массиву производится либо в заголовке оператором DATA WP /0.0*X12/ либо в теле без указания индекса в скобках. Т.е. массив записывается как скалярная переменная. Ну еще есть всякие FORALL, но они синтаксически должны отличаться от присваивания элементу массива с заданным индексом. В общем, хотелось бы видеть фрагмент кода побольше. |
Сообщ.
#15
,
|
|
|
Цитата andriano @ Так и есть (по идее).синтаксически - это присваивание X12-му элементу массива WP результата произведения "0.0" yf "X12" Цитата andriano @ Не должно так уж сильно смущать. Я и не такое видел. Как показывает практика, "великие мужи" хоть и великие в разрезе своего дела (области науки по своему профилю), но когда доходит дело до прикладного эксперимента (хоть и численного), то реализации оставляют желать лучшего, тем более, когда работы оформляются самими разработчиками численных методов. Обычно, такую работу перекладывают на плечи Ph.D. или чаще Ph.D. Candidate, которые уже более грамотно "прикладывают" работы своего начальства со знанием ЯП как минимум. Смущает, правда, бессмысленность вычисления этого произведения. Добавлено Цитата Pers_tmb @ И? В чем повод сомнения "WQ" - это не "WP".Там рядом есть строчка WVW ( DELF,WQ,ROP,DELRO,ETA2 ) = -( DELF/((ETA*DX1)**2)+WQ*(ROP/6.+DELRO/8.))/(ROP/3.+5.*DELRO/24.). Сомневаюсь, что это массив. Если найду книгу, то смогу дать более подробно консультацию. |