LINUX.ORG.RU

[фортран]проблема с запихиванием массива производного типа в common block


0

1
type pe
	real(8)::x
	real(8)::vx
	real(8)::vo
	real(8)::vr
	integer::gr
end type pe
type (pe), dimension(20):: f
real(8), dimension(20):: f_
real(8) :: e,c,pi
integer :: z
common /consts/ e,c,pi,z
common /particles_/ f_

а вот на этой

common /particles_/ f

валится, ругаясь
gfortran -o "test_common" "test_common.f95"
test_common.f95:9.28:
type (pe), dimension(20):: f
                            1
Error: Derived type variable 'f' in COMMON at (1) has neither the SEQUENCE nor the BIND(C) attribute
Сборка завершилась с ошибкой.
смысла ошибки не понял. в чём дело?

★★★★★

Какая-то смесь ужа с ежом.

Зачем ты так используешь коммон блоки? Чем тебя не устраивает модульная структура?

aedeph
()

Но в любом случае, если в тип данных укажешь атрибут sequence, то все заработает:

 
type pe 
sequence
 .... 
endtype 
aedeph
()
Ответ на: комментарий от www_linux_org_ru

А что? Отличный компилируемый язык высокого уровня, очень удобная работа с массивами (практически как на матлабе пишешь, только это компилируется в нативный код), много интересных фич, которыми не обладают всякие производные от C.

Вот, например, интересная статья на тему https://bitbucket.org/eric_t/modern-fortran/wiki/Home

Slackware-ch
()
Ответ на: комментарий от aedeph

>Зачем ты так используешь коммон блоки? Чем тебя не устраивает модульная структура?

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

thunar ★★★★★
() автор топика
Ответ на: комментарий от Slackware-ch

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

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

iVS ★★★★★
()
Ответ на: комментарий от iVS

>Если нужно удобство, то смею предложить Питон, а не тыкать палочкой в окаменелое говно мамонта.

пробовал на питоне оперировать массивом в 10^6\div10^8 векторов, за минимальное время?

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

> пробовал на питоне оперировать массивом в 10^6\div10^8 векторов, за минимальное время?

а зачем? есть же биндинги к сишным либам, но при этом без сишных заморочек к указателями и тому подобного.

iVS ★★★★★
()
Ответ на: комментарий от iVS

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

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

Справедливости ради, numpy действительно дает очень высокую производительность при, одновременно, высокой скорости работы. Непосредственно с фортраном не сравнивал, но зачастую использовал python+numpy+scipy+matplotlib вместо matlab (этим же, например, занимается NASA).

Slackware-ch
()
Ответ на: комментарий от thunar

высокой скорости работы

высокой скорости разработки, конечно же

Slackware-ch
()
Ответ на: комментарий от Slackware-ch

numpy+matplotlib я и так использую. просто каждый язык под свою задачу, питон для числодробилки никак не подходит.

thunar ★★★★★
() автор топика
Ответ на: комментарий от thunar

в numpy питоновый только фронтэнд. я писал на numpy/scipy и на C одну и ту же численную задачу (точнее две: вычисление суммы одного сложного ряда и прогонку по матрице) - вариант на C не был особо уж быстрее, а читался на порядки хуже.

на фортране тогда, впрочем, не писал :)

Slackware-ch
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.