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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

akaGM

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

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

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


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

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
webdevel2
см напр здесь
http://pagesperso-orange.fr/jean-pierre.moreau/f_matrices.html
 
а программка может быть так орг. (можно функцию конечно и в модуль вынести...)

Код:
 
!-----------------------------------------------------------------------
!Main program
!-----------------------------------------------------------------------
program    block_alg
![specification part]
implicit none
integer, parameter:: M=3
integer ::k,n
real(kind=kind(1.0d0)), dimension(1:M,1:M) :: A,B
 
![execution part]
 
A=reshape ((/12,32,43,4,5,6,7,8,9/), (/3,3/))
! open (7, file='initiall.dat', status='old', action='read')
! read (7,*) ((a(i ,j), j=1,n), i=1,n)
 
B=myfunc(A,M)
 
do n = 1, M
write(*,*) (B(k,n), k=1,M)
enddo
 
contains
![your functions]
function myfunc(A,N)
implicit none
integer, intent(in):: N
real(kind=kind(1.0d0)), intent(in), dimension(1:N,1:N) :: A
integer :: i,j,k
real(kind=kind(1.0d0)), dimension(1:N,1:N) :: G, myfunc
G=0
 
!cholesky here извинте, но я тоже ленив
 
myfunc=G
end function myfunc  
 
end program block_alg
 
 
 

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 00:57 24-10-2009 | Исправлено: terminat0r, 01:01 24-10-2009
GreenEmerald

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Посмотрела ссылку  
 
http://pagesperso-orange.fr/jean-pierre.moreau/f_matrices.html
 
Функция поиска обратной матрицы использует модули BASIS и LU. Подскажите, пожалуйста, где можно найти эти модули и как их подключить?
 
Заранее спасибо!

Всего записей: 2 | Зарегистр. 23-10-2009 | Отправлено: 14:06 24-10-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GreenEmerald
по этой же ссылке, кот. дал уважаемый terminat0r, слева из меню скачиваешь
два файла BASIS.F90 (вообще первая ссылка) и LU.F90
 
в командной строке нет ничего проще:
 
ifort my_program.f90 lu.f90 basis.f90
 
можно это сделать один раз, чтобы больше не компилировать:
 
ifort -c lu.f90 basis.f90
 
и потом уже подключать как бинарники:
 
ifort my_program.f90 lu.obj basis.obj
 
в своих программах в самом начале тебе нужно будет писать две новые строчки:
Код:
 
program My_Program
...
use BASIS
use LU

...
 
! тело программы
 
end program

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 15:26 24-10-2009 | Исправлено: akaGM, 15:30 24-10-2009
GreenEmerald

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Большое спасибо, обратную матрицу я нашла. Теперь появилась следующая проблема:
 
У меня есть основная программа My_Program и внешняя подпрограмма, которая вычисляет обратную матрицу
 
program My_Program
        implicit none
                integer, parameter:: n=4
                real:: A(n,n), AF(n,n), ...
                integer:: T(n), ....
 ...
call func(A, T)
...
end program My_Program
 
subroutine func(A, T)
real, intent(inout):: A(1:4,1:4)
integer, intent(in):: T(1:4)
 
...
 
end subroutine func
Как видите, в подпрограмме задана матрица А размерностью 4х4 и массив т размером 4.
НО. На деле - размеров их я не знаю, мне нужно объявить открытые массивы, в которые можно запихнуть входной массив любой размерности.
Если пишу так:
subroutine func(A, T)
real, intent(inout):: A(:,
integer, intent(in):: T(
 
...
то вылетает ошибка тупая в стиле "Память по адресу блаблабла не может быть read"
 
Как правильно это написать?
Заранее спасибо.

Всего записей: 2 | Зарегистр. 23-10-2009 | Отправлено: 20:08 24-10-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GreenEmerald
давай ты уберёшь на фиг "разрешить смайлики" из своего постинга, и потом мы начнём тебе помогать...
а для начала, может поможет:
Код:
subroutine func(A, T, N)
integer, intent(in) N  
real, intent(inout):: A(N,N)
integer, intent(in):: T(N)  
...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 20:26 24-10-2009
SYarD

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

Цитата:
с другими программами такой фокус может и не пройти. Лучше делать ссылки а не копировать
 

 
Вообще-то я линуксоид никакой... как сделать эту ссылку? добавление в /usr/bin исполняемого файла с #!/bin/sh (или bash) + путь к файлу для ifort не помогают..., я уже писал выше  А где находится $PATH вообще не знаю. (может у кого есть ссылка где все эти примудрости рассказываются). Я думаю, что при установке фортрана он пытался записать себя в/usr/bin,но поскольку установка была под userом, а не под root, то у него не получилось.
 
FuzzyLogic
Спасибо я уже добавил в .bashrc, но это решает только локальную проблему, тоесть начинает работать ifort c консоли, но все IDE в Линуксе, которые я знаю (eclipse, vim, geany, emacs), работают через make, a для make нужно делать так, как писал terminat0r (в книжке, на которуя я давал ссылку что-то похожее написано).
 
Всем большое спасибо.
 

Всего записей: 15 | Зарегистр. 20-05-2008 | Отправлено: 16:11 27-10-2009
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SYarD
Ссылка это что-то вроде ярлыка в Win если выражаться просто. Создать можно так например:

Код:
 
ln -s /opt/intel/IFC/bin/ifort /usr/bin/ifort
 

это сделает ссылку в /usr/bin  на файл находящийся в /opt/....  таким образом вы избежите проблем при скажем обновлениях. Когда у вас в /opt/... обновится бинарник ifort а про тот который в /usr/bin забудете а потом будете удивляться проблемам при компиляции
 
Что касается $PATH это переменная окружения. В bash напишите  "set"  (без кавычек) и увидите все переменные, в основном они задают как ведёт себя разный софт, итд. PATH содержит директории которые "видны" отовсюду. Т.е. когда вы в консоли пишете "ifort" то ОС ищет ifort во всех директориях которые находятся в PATH по очереди и найдя запускает. Так что для гуёвых программ по идее тоже можно всё настроить, только надо поменять PATH в KDE/Gnome или чем вы пользуетесь.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 23:30 27-10-2009
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот опять появилась надобность посчитать интеграл.
Есть ф-ция интеграции, скажем из пакета IMSL, есть подынтегральная ф-ця, которая зависит кроме от Х еще от разных параметров. Если эти параметры простые типы, то они просто суются в common блок, НО  мне надо передать в подынтегральную функцию массив и не просто массив, а с непонятным заранее кол-вом элементов на что фортран честно говорит "A COMMON block data object must not be an automatic object.". Собсно вопрос - как побороть это?.. Спасибо!

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 03:37 28-10-2009
Igorr

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

Цитата:
Собсно вопрос - как побороть это?..  

1) создаете MODULE с нужным ALLOCATABLE массивом  
2) создаете этот массив посредством ALLOCATE (и заполняете его)
3) в подинтегральной функции используете созданный модуль

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 06:55 28-10-2009
pir0texnik2



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

Код:
MODULE MOD_1
 
IMPLICIT NONE
 
Integer II,QQ
complex*16 V(QQ,II)
 
END

ии...

Цитата:
error #6219: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [II]
error #6219: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [QQ]
error #6841: An automatic object must not appear in the specification part of a module.   [V]
 

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 16:02 28-10-2009
Vskazka

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
надо так
 
MODULE MOD_1
IMPLICIT NONE
Integer II,QQ
allocatable, complex*16::  V(:,:)
END
 
Далее, где надо будет напишите, например
 
ii=100
qq=200
allocate(v(ii,qq)
 
и, когда нужда отпадет в этом массиве,
напишете  
 
deallocate(v)
 
в подпрограммах, где все сие делаете должно в начале стоять
 
USE  MOD_1

Всего записей: 382 | Зарегистр. 24-11-2003 | Отправлено: 17:25 28-10-2009 | Исправлено: Vskazka, 17:27 28-10-2009
pir0texnik2



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

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 21:12 28-10-2009
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
"Тщетельнее надо" (С)
Внимательней читай, что тебе пишут. В коде КАЖДОЕ слово имеет значение. Непонятно? Есть вопросы? - Спрашивай.
А с "Хм... " -- в http://forum.ru-board.com/topic.cgi?forum=93&bm=1&topic=0636&start=0

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 22:43 28-10-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
прямо перед твоим постом я отвечал на сходный вопрос

Цитата:
мне надо передать в подынтегральную функцию массив и не просто массив, а с непонятным заранее кол-вом элементов

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

Код:
program main
...
  call my_integral(5, 3, V1)
  call my_integral(4, 9, V2)
  call my_integral(100, 200, V4)
  call my_integral(QQ, II, V5)
...
end program
 
subroutine my_integral(QQ, II, V)
integer QQ, II
complex*16 V(QQ,II)
...
end subroutine

 

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 15:51 29-10-2009 | Исправлено: akaGM, 17:08 29-10-2009
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Igorr, и тебе спасибо. Vskazka  как раз это все объяснил.
akaGM, спасибо! но это не совсем то... Интегратор чужой(ну лень мне делать для каждой функции свой, когда есть скажем квадпак один на всех) и он дружит с ф-циями вида только F(x) без доп. параметров. Да, мне тоже не нравятся аллокейты, но как без них...

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 17:44 29-10-2009
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
 
Если не нравятся allocatable массивы, то есть  
вариант, который работал с давних времен:
 
Поместить в основной программе и в подпрограмме , реализующей вычисление F(x):
 
real param
common /ABC/ param(100)
 
Размерность массива указываешь такую, чтобы поместились все параметры

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 18:05 29-10-2009
akaGM

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

Цитата:
он дружит с ф-циями вида только F(x) без доп. параметров

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

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 12:44 30-10-2009 | Исправлено: akaGM, 16:58 30-10-2009
SYarD

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FuzzyLogic
Cпасибо большое!
 
Тут речь зашла о allocatable. У меня по этому поводу тоже имеется вопрос. При работе с массивами большой длины иногда возникает проблема с переполнением стека. Вы конечно знаете, stack  overflow - и все... ничего не работает. Поможет ли использование динамических массивов или еще больше усугубит проблемму?

Всего записей: 15 | Зарегистр. 20-05-2008 | Отправлено: 17:17 30-10-2009
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SYarD
Если увеличение размера стека не помогает (как было у меня), то динамический массив - решение проблемы.

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 17:35 30-10-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SYarD
вообще говоря, должно помочь...
хотя в х86-32битной модели пямяти код, дата и стек -- это единое целое и всё зависит от
компилятора -- как он распределяет память переменных типа local_array
 
subroutine foo(N)
integer N
real*8 local_array(100 000 000)
 
попробуй поиграть опцией линкера
/stack:
 
-- убери все save директивы из п/п для локальных переменных
-- никогда не ставь /Qsave директиву
-- вообще поставь жёстко /Qauto

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 17:46 30-10-2009 | Исправлено: akaGM, 17:51 30-10-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум 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