Вопросы с тегами [gfortran]

1

голосов
1

ответ
345

Просмотры

«__Gfortran_pow_c8_i4» ошибка при связывании .o файлов с г ++ и gfortran с помощью г ++

Я пытаюсь связать файл .o сгенерированный с помощью г ++ и другой файл .o сгенерированный с помощью gfortran. г ++ -c mycppcode.cpp производит файл mycppcode.o и команду gfortran -c myfortrancode.f производит файл myfortrancode.o Когда я связать эти два файла, чтобы получить выходной файл г ++ -О mycppcode.o myfortrancode.o я получаю следующие ошибки неопределенные символы для архитектуры x86_64: «__gfortran_pow_c8_i4», ссылочные от: Может ли кто-нибудь помочь мне с этим? Должен ли я использовать другой компилятор? Кроме того, я хотел бы знать, какие функции или подпрограммы называют «__gfortran_pow_c8_i4», так что я могу попробовать, чтобы избежать этих функций или подпрограмм в Фортране в будущем.
John Smith
1

голосов
2

ответ
254

Просмотры

Ошибка: Отсутствует запятая в формате заявления

Мои коды записаны ниже: ИЗМЕРЕНИИ T (10) DATA A, B /9.,5./ IS = 1, J = J + 3 Т (J-2) = АТ (J-1) = АВ 80 Т (J), = Т (1) + T (J-1), J = J + 1, если (J.NE.10) GOTO 80 DO I = 1,5 WRITE (*, 15) Я, Т (J) END DO 15 FORMAT ( 'Т (' I2 ') =', F8.4) СТОП END компилирование Моя ошибка записывается следующим образом: jdoodle.f95: 13: 16: 15 FORMAT ( 'T (' IS ') =', F8.4) 1 Error : GNU Extension: Отсутствует запятая (1) jdoodle.f95: 11: 20: WRITE (*, 15) I, T (J) 1 Ошибка: сформатируйте 15 в (1) не определено не могли бы вы сказать мне, где ложное утверждение моего Fortran кода? Результат должен быть Т (1) = nnn.0nnn мне кажется.
Bay
1

голосов
0

ответ
89

Просмотры

Не удается установить в desolve Pacakge в R, библиотека не загружена: libgcc_s.1.dylib

6 | R_DEFAULT_PACKAGES = LC_COLLATE = C "$ {R_HOME} / bin / R" $ myArgs --slave --args $ {арг} Предупреждение в install.packages: установка пакета 'в desolve' был ненулевым статусом выхода Загруженные исходные пакеты, являются в '/ частный / вар / папки / 39 / 88clnp910zlg54lrgy0d7qm40000gn / T / RtmpSezlE0 / downloaded_packages'> install.packages ( "dylib") Установка пакета в '/ USR / местные / библиотека / R / сайт-библиотека' (как 'Lib' это не указано) предупреждение в install.packages: Пакет «dylib» не доступен (R версии 3.5.1) Любая идея, как решить эту проблему?
okuoub
1

голосов
0

ответ
79

Просмотры

Принимая derviatives полиномов Лежандра в Fortran

Мой код компилируется, но он не работает должным образом. Я не уверен, является ли ее неспособность работать из-за математическую ошибку и / или, если есть проблема в моем кодировании синтаксиса. Код показан ниже. Если кто-нибудь может мне понять, что это не так, пожалуйста, дайте мне знать. Программа получила сигнал SIGSEGV: неисправность Сегментация - недопустимую ссылку памяти. Backtrace этой ошибки: # 0 0x7F1E52D74E08 # 1 # 2 0x7F1E52D73F90 0x7F1E526BB4AF # 3 0x400BBC в legendrepoly.3381 на project.f90 :? # 4 0x40138C в MAIN__ на project.f90 :? ошибка Сегментация программы Project (сбрасывали ядро) использовать iso_fortran_env неявное NONE целое (int32) :: Nmax! максимальный порядок полинома Лежандра целого числа (int32) :: шаг! размер шага под углом от 0 до 180 градусов в режиме реального (real64), параметр :: PI = 3,1415926 реальные (real64) :: му вещественным (real64) :: тета = 0 вещественных (real64), размер (:, :), размещаемый :: P, дп! Полином Лежандра целое (int32) :: к, з, п, л! Пользователь ввода печать *, «Пожалуйста, введите максимальный порядок полиномов Лежандра:» чтение (*, *) Nmax печать *, «Пожалуйста, введите целое размера шага (в градусах от 0 до 180):» чтение (*, *) шага! Выход му = соз (тета * (пи / 180.0_real64)) к = 180,0 / шаг Н = 2 * соз (реальный (шаг) * (пи / 180.0_real64)) выделяют (Р (Nmax + +1180)) выделяют (DP ( Nmax + 1180)) называть legendrepoly (л, мю, Nmax, шаг) печать *, Д.П. содержит подпрограмму legendrepoly (L, мю, Nmax, шаг) реальный (real64), размер (:, :), :: P быть выделена, Д.П. реальный (real64) :: реальный (real64), намерение (в) :: му целого число (Int32) :: я, Nmax, шаг число (Int32), намерение (в) :: ла = реальный (L) я = 1, 181,
Micah
0

голосов
2

ответ
519

Просмотры

Why does using command PRINT in Fortran overwrite the input file?

Я пишу свой код и используя входной и выходной функции в Fortran. Код выглядит следующим образом (только для упрощения): ПРОГРАММА TEST РЕАЛЬНОГО, DIMENSION (1000) :: РЕАЛЬНОЙ :: B INTEGER :: T Определение входной и выходной ПРЕЗЕНТАЦИИ (UNIT = 1, FILE = 'input.dat', STATUS = 'OLD') ОТКРЫТО (UNIT = 2, FILE = 'output.dat', STATUS = 'NEW!') Чтение из файла "input.dat" READ (1, *) (A (I), I = 1, 1000)! Просто для начального условия B = 0.0 DO T = 1, 10 PRINT *, 'Step =', Т DO I = 1, 1000 в = в + 1,0 А (I) = A (I) / B END DO END БЫВАЕТ запись результатов в файл "output.dat" DO I = 1, 1000 WRITE (2,100) I, A (I) END DO 100 FORMAT (»», T3, I12, T17, F14.4) END PROGRAM TEST я был используя Gfortran 5.3 и результат не был похож на то, что я ожидал. Я ожидал, чтобы получить результат переменной T на экране (или терминала в Ubuntu OS), когда программа запущена и переменные I и A (I) записываются в файл output.dat. У меня не было проблем с переменными I и A (I), так как они были успешно записаны в файл output.dat. Проблема с переменной T, где он не появлялся на терминале, но это было написано в файл input.dat. Ну, даже предыдущий файл в файл input.dat не были перезаписаны. Может кто-нибудь дать мне предложение? FYI, я также попробовал на другой компилятор (с использованием ОС Windows), например: Microsoft Fortran электростанцией (очень старый): но он работал, как я ожидал. MinGW-w64 (GCC версии для Windows): но это не работает должным образом.
bob.bob.bob
1

голосов
0

ответ
47

Просмотры

Как иметь сделать сканирование через разные каталоги, чтобы найти и скомпилировать модули перед соединением Fortran исполняемого

Это следование по вопросам 231229, 8855896 и 35234003: У меня есть несколько полезных модулей в ~ / Fortran / включать и я разрабатываю новый код в ~ / Fortran / Projecta. Makefile Моя мечта будет видеть, что A.f90 нуждается mod_MyMod и проверить в ~ / Fortran / включить, чтобы увидеть, если mod_mymod.mod и mod_MyMod.o существовать, если бы не было бы создавать и размещать их в включают, а затем, после связывания объектов из и включает в себя и ProjectA он будет производить в Projecta до сих пор у меня есть это: FC = gfortran ПРОГРАММА = A FCFLAGS = -I ../ включает LDFLAGS = -lm -L / USR / # флаги местных / Библиотеки ForAll (например, искать для системы .mod файлы, необходимые в gfortran) # "сделать" строит все все: $ (ПРОГРАММА) # Использования Fortran МОДУЛЕЙ: Ao: ../include/mod_MyMod.o A: ../include/mod_MyMod.o # Linking%:% .o $ (FC) -o $ @ $ ^ $ (LDFLAGS) # Компиляция (Фортран)% .o:%. f90 $ (FC) $ (FCFLAGS) -c $ <# Подсобные цели чистый: гт -f * .o * .mod в Projecta / У меня есть программа А использование, присущий :: iso_fortran_env, только: R64 => real64, I32 = > int32, & & input_unit, output_unit, error_unit не использовать mod_MyMod неявное нет! глобальный переменный характер (Len = 23) :: строка = "Это говорящий" Print_This вызова (строка) Конец программы A в включает / У меня есть модуль mod_MyMod использование, присущий :: iso_fortran_env, только: R64 => real64, I32 => int32, & & input_unit, output_unit, error_unit неявное никто не содержит подпрограмм Print_This (строка) символ (LEN = 20), цель (в) :: строка записи (output_unit "(* (g0,:,» «))") строка Конец подпрограммы Print_This End Module mod_MyMod для того, чтобы добиться того, чего я хочу, я думаю, что нужны отдельные правила для составления А. f90 и mod_MyMod.f90. В первом случае объект указывает на локальный каталог, во втором .mod и .o должны быть введены в включают.
Clinton Winant
1

голосов
1

ответ
1.5k

Просмотры

BLAS подпрограммы DGEMM, dgemv и ddot не работает с скаляры?

У меня есть Fortran подпрограмма, которая использует подпрограмму Блас»DGEMM, dgemv и ddot, которые вычисляют матрицу * матрицу, матрица * вектор и вектор * вектор. У меня есть м * м матрицы и м * 1 векторов. В некоторых случаях т = 1. Кажется, что эти подпрограммы не работают в тех случаях. Они не дают ошибки, но, как представляется, некоторая численная нестабильность в результатах. Так что я должен написать что-то вроде: если (т> 1), то vtuni (я, т) = уг (я, т) - а (я, т) - ddot (м, ZT (I, 1: м, (т -1) * Твар (3) +1), 1, AREC, 1) остальное vtuni (я, т) = уг (я, т) - а (я, т) - ZT (я, 1, (т-1 ) * Тварь (3) +1) * AREC (1) Так мой фактический вопрос, я прав, что подпрограммы тех, Блас»не работает должным образом, когда т = 1 или есть просто что-то не так в моем коде? Может ли компилятор повлиять на это? Я использую gfortran.
1

голосов
1

ответ
1.7k

Просмотры

Undefined Symbols when linking against a mixed C and Fortran in OS X 10.6.4

Я пытаюсь скомпилировать код (не мой), который состоит из смешанных Фортрана и C исходных файлов, которые скомпилированы в библиотеку. Эта библиотека может быть либо связаны с непосредственно, или (более целесообразно), приводимый от класса питона. Ранее я уже успешно построил код как 32-бит с g77 и НКОЙ, но я сталкивался с ситуацией, в которой код использует большие куски памяти, и должен быть 64-битными. Я попытался построить, как и 64-битный только, или в качестве универсального двоичного файла с gfortran 4.2.3 (бинарной дист от AT & T R проект) и система GCC (4.2). Исходные файлы строить правильно, но когда я пытаюсь связать с библиотекой, я получаю много «Неопределенные символы» ошибки для ряда Фортране функций. Нм на библиотеке показывает, что символы появляются на существование, но, очевидно, линкер не находит их. atomic_data / FAC [14] нм libfac.a | Grep acof 0000000000000000 T _acofz1_ 0000000000002548 S _acofz1_.eh U _acofz1 Я делаю что-то глупое, как не включая необходимый переключатель для линкера, или нечто более тонкое, здесь происходит?
Kris Eriksen
1

голосов
1

ответ
1k

Просмотры

создание Вторично распространяемый окна модуль питона с f2py

Я написал код с питоном и f2py, в основном с помощью Linux. Это все работает отлично, но теперь я хотел бы поделиться этим с пользователями окна, так что я пытаюсь сделать модуль, который является распространяемым для пользователей, которые не обязательно имеют gfortran или GCC. У меня есть доступ к хр коробке окна, я использую MinGW с gfortran. Я могу скомпилировать и использовать модуль на этой машине, но и на других машинах PYD создан, кажется, требует libgcc в DLL файлы и libgfortran. Вот пример из http://www.scipy.org/F2PY_Windows: подпрограммой привет () записи (*, *) 'Привет от Fortran90 !!! Конец подпрограммы привет Compile с питона C: \ путь \ к \ питона \ Scripts \ f2py.py -c \ --fcompiler = gnu95 --compiler = mingw32 \ -lmsvcr71 -m Foo foo.f90 Это работает, как ожидалось на станке I скомпилирован с, но если я скопировать его на другую машину, Я получаю DLL нагрузки не удалось: Указанный модуль не может быть найден. Используя зависимость ходок, я вижу, что не может найти библиотеки DLL для libgcc_s_dw2-1.dll и libgfortran-3.dll. Можно ли создать PYD, что я могу распространять, не предполагая, пользователь имеет НКУ и gfortran? Я использую python2.7 на обеих машинах, как с 32-битными. Одним из них является хр, другие окна 7.
rjad
1

голосов
1

ответ
100

Просмотры

Флаг Компилятор для предотвращения частичного устранения избыточности в gfortran

Я пытаюсь получить немного больше скорости из большой Fortran программы, я работаю с. Я (пока) не хорошо знаком с кодом, так что я думал, что оптимизация компилятора будет хорошим первым остановиться. -O1 варианта с использованием gfortran является штрафом, но -O2 и -O3 произвели ошибку во время выполнения в виде неожиданных Нэны. Разбив -O2 на составляющие его флаги, я решил, что -ftree-предварительно была проблема, а все остальное работает нормально. Есть ли способ подавления только флаг -ftree предусилителя? Таким образом, я могу скомпилировать с -O3 -no-ftree-Пре, если это имеет смысл. Я уже определил, какая часть кода вызывает ошибку, так что мой долгосрочный план, чтобы устранить ошибку. Но это будет означать быстрое решение сейчас.
Warrick
1

голосов
1

ответ
314

Просмотры

Добавление стандартного пути для поиска файлов .o gfortran

Для решения некоторых интегралов я скачал Quadpack для Fortran и скомпилирован все исходные файлы, чтобы объектные файлы. Теперь, когда я хочу, чтобы вызывать подпрограммы из Quadpack мне нужно, чтобы связать их вручную или с помощью Makefile / скрипт, и это работает прекрасно. Однако, так как я использую несколько подпрограмм из Quadpack и для целого ряда различных программ, которые он сделает мою жизнь намного проще, если бы я мог получить gfortran автоматически искать .o файлы. Скажем, у меня есть каталог, где все .o файлы, содержащийся Я хотел бы добавить, что в качестве стандартного пути для gfortran, чтобы искать объектные файлы. Так что я могу вызвать подпрограмму в моей программе и просто скомпилировать его, не узнать ведьму .o файлы мне нужно и связать их вручную. Я понимаю, что -l флаг будет решить эту проблему, но я хочу знать, если есть простой / ленивый способ сделать это. Я думал, может быть, я могу сделать некоторые изменения в компилятор и переделать его, но это не совсем то, что я хочу, чтобы начать возиться с. Я использую Ubuntu, кстати. Надеюсь, что вы, ребята поняли мою проблему, и что есть простое решение. PS: Это то, как я это сделать сейчас, чтобы вызвать одну процедуру. #! / Bin / ш gfortran -c int.f95 gfortran -o INT int.o qagie.o qelg.o qk15i.o qpsrt.o r1mach.o xermsg.o j4save.o xerprn.o xersve.o xerhlt.o xercnt .o fdump.o xgetua.o i1mach.o ./int Как вы можете видеть, это просто простой скрипт для компиляции и запуска int.f95
HaakonA
1

голосов
1

ответ
1.7k

Просмотры

Gfortran: ошибка при попытке EXEC 'f951': execvp

Я просто переустановил мой gfortran после обновления (?) Мой компьютер Mountain Lion. Тем не менее, даже если команда «gfortran -v» определенно показывает, что она установлена, всякий раз, когда я пытаюсь скомпилировать программу, я получаю следующее сообщение об ошибке: i686-яблоко-darwin10-gfortran-4.2.1: ошибка при попытке EXEC ' f951' : execvp: Нет такого файла или каталога Как это можно исправить? Заранее спасибо.
user14717
1

голосов
2

ответ
504

Просмотры

mpif90 -v не создает объектный файл с флагом OpenMP

Я компиляция третьих частей программного обеспечения, с mpif90, что в моем случае это версия МПИ НКУ. Пакет поставляется с Makefile. После компиляции объектных файлов, файл сборка создает архив с ар, но это не удается, потому что нет входных объектных файлов. Фактически я пытался компилировать вручную объектные файлы (.o) с mpif90 -lmkl_gf -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -openmp -O3 -DMPI -c a.f90 и айыл окмоту не создан, .mod файл создается вместо этого. У меня нет большого опыта работы с Fortran, и я немного озадачен, потому что флаг -c должен создать объект, не должен»это? Я проверил, что gfortran действительно создает объектный файл, если я удалить флаг OpenMP Примечания: mpif90 -v GCC версии 4.4.3 ОС: Ubuntu 10.04.4 LTS
simona
1

голосов
2

ответ
337

Просмотры

Использование Do-Loops в инклюдника

В моем FORtran коде я пытаюсь включить цикл DO, но я в конечном итоге с «DO петли или ДОЛИ, ЕСЛИ не закрыта.» Оказывается, если любая другая DO петли после того, как ВКЛЮЧИТЬ о Открыты он рассматривает их как вложенные циклы, указывая мне прилагаемое отверстие DO линия правильно интерпретирована, но не END DO заявления. Я уменьшил прилежащий код скелетного, чтобы убедиться, что это цикл, а не операторы в цикле дает проблему. Управляющая переменная объявляется перед циклом DO. DO A = 1,3 END DO Fortran77 ли не позволяют DO петли в INCLUDE файлы? Я использую gfortran для моего компилятора, если он меняет много. Edit: грамматика Edit2: Я использую GCC 4.6.2. Теперь обратите внимание, если это имеет значение, gfortran бежится из Makefile, сделанного PSCAD. Я могу предоставить информацию о том, что, если это уместно. Вот'
Will S
1

голосов
1

ответ
1.1k

Просмотры

Fortran Makefile для составления установленной формы и свободная форма файлов с модулями

Я пытаюсь собрать и связать смешанный формат Fortran кода для EFDC, численной гидрогазодинамики коды, состоящими из 243 .FOR и .f90 файлов. Есть два модуля, которые находятся в двух .f90 файлах. Это написано в последовательном и я использую gfortran на Linux. Основная программа находится в один .for файл, а остальные подпрограммы в фиксированном и свободном формате. Там не все файлы, которые имеют фиксированные и свободные вместе. У меня возникли проблемы с адаптацией в Makefile примеров вокруг моего конкретного случая. Я пытаюсь некоторые из фиксированной в свободной форме конвертеров, но я хотел бы знать, как компилировать только из Makefile. Я приложил свой Makefile ниже. Спасибо за любую помощь вы можете предоставить. # Имя исполняемого TARGET: = bcsa_efdc.out # Fortran компилятор FC: = gfortran # только с помощью максимальной оптимизации FFLAGS Fortran флага:
Chris
1

голосов
1

ответ
333

Просмотры

Компиляция Fortran кода для R пакета под Windows: неопределенная ссылка на REXIT, RWARN, RCHKUSR

Я работаю на R пакет, содержащий исходные файлы Fortran. Структура Fortran коды является довольно сложной, с большим количеством зависимостей, поэтому у меня есть Makefile в папке Src для составления общей библиотеки. До сих пор я был компиляция этого пакета на мой компьютере под управлением Ubuntu 14.04, без каких-либо проблем. Я сейчас пытаюсь скомпилировать его на Windows, используя Rtools, и я бегу в проблему при компоновке объектов для создания общей библиотеки. Точнее, линкер не находит функции REXIT, RWARN и RCHKUSR, как я получаю следующее сообщение об ошибке: неопределенная ссылка на `«неопределенная ссылка на `rexit_» rchkusr_ неопределенному ссылкой на `rwarn_» Эти функции должны быть в разделяемая библиотека R.dll (libR.so под Linux). Я проверил эту библиотеку с зависимостями Walker и я мог бы найти эти функции. Я пытался связать с -ic: / Program \ Files / R / R-3.1.1 / bin / i386 / R.dll сделать явной ссылки на общую библиотеку. Я попытался перекомпилировать с -fno-Подчеркнув, чтобы убедиться, что нижнее подчеркивание не проблема. Ничего не помогало. Любые идеи, где эта проблема может исходить от? Любые предложения будут более чем приветствуется! В Linux я не должен делать ничего особенного, компоновщик нашел функцию без указания ничего в Makefile. Я использую R версии 3.1.1 и Rtools версии 3.1. Большое спасибо за вашу помощь. Ничего не помогало. Любые идеи, где эта проблема может исходить от? Любые предложения будут более чем приветствуется! В Linux я не должен делать ничего особенного, компоновщик нашел функцию без указания ничего в Makefile. Я использую R версии 3.1.1 и Rtools версии 3.1. Большое спасибо за вашу помощь. Ничего не помогало. Любые идеи, где эта проблема может исходить от? Любые предложения будут более чем приветствуется! В Linux я не должен делать ничего особенного, компоновщик нашел функцию без указания ничего в Makefile. Я использую R версии 3.1.1 и Rtools версии 3.1. Большое спасибо за вашу помощь.
remek
1

голосов
1

ответ
989

Просмотры

Генератор случайных чисел в Fortran

Я проверяю код ГСЧ, как указано в ссылке (Fortran 77 код): https://www.cisl.ucar.edu/zine/96/spring/articles/3.random-6.html который применяет алгоритм Park & ​​Miller , вызов функции программы является вызов srand (начальный) х = ранды () Однако программа, кажется, не реагировать на высев srand (), то есть х-значение не зависит от первоначального посева, и всегда равно ~ 0,218. Я подозреваю, что это имеет отношение к определению общего блока и блок данных, а значение х эквивалентно положить семена в качестве 123456789, которое является значением инициализации определен в блоке данных. Есть идеи? Я компиляция с gfortran.
Rain
1

голосов
3

ответ
2.3k

Просмотры

Почему gfortran не дает символическую трассировку?

После того, как я пробежал FORtran код с gfortran компилятором, используя с -g otion я получаю следующее сообщение об ошибке: Программа получила сигнал SIGFPE: исключение с плавающей точкой - ошибочный арифметическую операцию. Backtrace этой ошибки: # 0 0x7F2EE30E57D7 # 1 # 2 0x7F2EE30E5DDE 0x7F2EE2820D3F # 3 # 4 0x7F2EE2DEC913 0x408A97 в __aerosols_MOD_moment_logn на aerosols.f90: 45 # 5 0x408A02 в __aerosols_MOD_set_aerosol на aerosols.f90: 78 (дискриминатор 20) # 6 0x6D357B в __test_cases_2d_MOD_standard_2d_cases в test_cases_2d .f90: 210 # 7 0x67E9FC в __set_profiles_MOD_read_profiles_standard на set_profiles.f90: 118 # 8 0x463BF8 в __main_MOD_main_loop на main.f90: 48 # в детстве 9 0x401F05 в KiD.f90: 17 Плавающие исключения точка (ядро сбрасывали) Я не понимаю, почему первые четыре Цепочки вызовов не сообщает о следе ошибки. Я пытался addr2line найти адрес, но он также не дает информации. Как я могу узнать следы ошибок?
Beata
1

голосов
1

ответ
180

Просмотры

128 bit MVBITS in gfortran

EDIT :: Я сообщил об ошибке в GCC Bugzilla. В настоящее время зафиксировано. Следующий пример не компилируется с gfortran 4.8.4: Программа испытаний ИСПОЛЬЗОВАНИЕ ISO_C_BINDING Integer (C_INT128_T) :: CINT128T Integer, ПАРАМЕТР :: I16B = ВИД (CINT128T) Integer (I16B) :: а, Ьа = 127 B = 0 Ь = IBSET (Ь, 0) а = IBCLR (а, 0) ЗВОНИТЕ MVBITS (а, 0,3, б, 0) END PROGRAM тест Вот что я получаю: $ gfortran test.f90 /tmp/cc2CEkwu.o: В функции ` .: текст test.f90 :( + 0x89): неопределенная ссылка на `_gfortran_mvbits_i16 'MAIN__ collect2: ошибка: л.д. возвращенного 1 статус выхода Вот как компилируется gfortran (то есть, это версия, которая поставляется с Ubuntu 14.04): $ gfortran - v Использование встроенных в спецификации. COLLECT_GCC = gfortran COLLECT_LTO_WRAPPER = / USR / Библиотека / GCC / x86_64-Linux-гну / 4,8 / LTO-обертка Цель: x86_64-Linux-гну Настраивается с: .. 8-amd64 --with-арочного-каталог = amd64 --with-СЕС-банка = / USR / доли / Java / затмение-ecj.jar --enable-ObjC-дс --enable-мультиархитектурной --disable-werror - -с-арка-32 = i686 --with-ABI = m64 --with-многобиблиотечный-лист = m32, m64, mx32 --with настройка = общая --enable-проверка = выпуск --build = x86_64-linux- гну --host = x86_64-Linux-гну --target = x86_64-Linux-гну модель тема: POSIX GCC версии 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14,04) Я делал другие битовые операции на 128-бит целые числа (IBSET, IBCLR, BTEST, IBITS), и все они прекрасно работают. Есть идеи? POSIX GCC версии 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14,04) Я делал другие битовые операции на 128-битных целых чисел (IBSET, IBCLR, BTEST, IBITS), и все они прекрасно работают. Есть идеи? POSIX GCC версии 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14,04) Я делал другие битовые операции на 128-битных целых чисел (IBSET, IBCLR, BTEST, IBITS), и все они прекрасно работают. Есть идеи?
delete000
1

голосов
1

ответ
142

Просмотры

Fortran путаница, модули, декларация, фиктивные аргументы

моя проблема заключается в интеграции функции с помощью интегрирования Ромберга. Я пересдавать этот класс и был успешным в прошлом семестре, но на этот раз вокруг моего профессора требует, модулей, которые я никогда не мог понять. Другая проблема всегда была фиктивные аргументы. Базовая схема это Глобальный модуль переменной> Главная прог> внешняя сноска в прогах> подпрограммы Ромберг (модуль использует функцию) Я поместил мой «х» переменный в глобальном переменном модуле, но я не знает, где мне нужно взаимодействовать и где я нужен USE заявление. Я не могу получить модуль Ромберга для компиляции, потому что он не видит переменную х я объявленную независимо от того, где я помещаю его. МОДУЛЬ globvar НЕЯВНЫЕ НЕТ Integer, ПАРАМЕТР :: дп = SELECTED_REAL_KIND (15) РЕАЛЬНОГО (др) :: а, б, Epsil, ф, ч, х, мю РЕАЛЬНОГО (др), ПАРАМЕТР :: пи = +3,141592653589, м = 45000,0, D = 1,032, Ц. = 250,0, к = 0,153 INTEGER :: максит, нт, п, exitflag КОНЕЦ МОДУЛЬ globvar Ромберга моделирование МОДУЛЬ romod СОДЕРЖИТ SUBROUTINE Ромберга (F, A, B, NT, Epsi, MAXIT, exitflag, п) IMPLICIT NONE Integer, ПАРАМЕТР: : дп = SELECTED_REAL_KIND (15) РЕАЛЬНОГО (др), INTENT (IN) :: а, б Integer, INTENT (IN) :: EPSI, максит Integer, НАМЕРЕНИЕ (OUT) :: exitflag Integer, НАМЕРЕНИЕ (INOUT) :: нт РЕАЛЬНЫЙ (др), DIMENSION (максит + 1, максит + 1) :: T REAL (дп) :: Сон, stwo, ч INTEGER :: г, п, I, J, K ИНТЕРФЕЙС! функция интерфейса! Мне сказали, что это не было необходимо, то была функция Р (х) ИСПОЛЬЗОВАТЬ globvar IMPLICIT NONE INTEGER :: ф END FUNCTION ф алгоритм END INTERFACE Ромберга опущена, если не просил. х передается на верхний и нижний предел END SUBROUTINE Ромберга END МОДУЛЬ romod Главная Prog ПРОГРАММА Waste ИСПОЛЬЗОВАНИЕ globvar USE romod НЕЯВНЫЕ NONE INTEGER, ВНЕШНИЙ :: е ИНТЕРФЕЙС функция Р (х) ИСПОЛЬЗОВАТЬ globvar Использование модуля Переменные НЕЯВНЫЕ NONE INTEGER: : F END FUNCTION F END INTERFACE чтения подсказки ЗВОНИТЕ Ромберга (е, а, Ь, нт, EPSI, Ветонит, exitflag, п) Функция END PROGRAM Waste е (х) ИСПОЛЬЗОВАТЬ globvar Использование модуля Переменные НЕЯВНЫЕ NONE INTEGER :: ФФ = х! ** 3 END FUNCTION F PROGRAM END Waste Любая помощь будет оценена. Это мой пятый семестр с использованием Fortran и некоторые правила до сих пор ускользает от меня.
Jake
1

голосов
1

ответ
113

Просмотры

Unexpected results from SGEMM

I'm trying to replace the following instance of matmul in the code calculating A*B': print *, mat%A print *, mat%B print *, mat%dimsA print *, mat%dimsB C = matmul(mat%A,transpose(mat%B)) print *, C with SGEMM: print *, mat%A print *, mat%B print *, mat%dimsA print *, mat%dimsB call SGEMM('N', 'T', mat%dimsA(1), mat%dimsB(1), mat%dimsA(2), 1, mat%A, & mat%dimsA(1), mat%B, mat%dimsB(1), 0, C, mat%dimsA(1)) print *, C Where mat is an type that contains the following relevant data: integer :: dimsA(2), dimsB(2) real, pointer :: A(:,:),B(:,:) Running the code on a small test where A is: 1 1 1 2 2 2 and B is: 1 1 1 I get the following outputs for matmul: 1.00000000 2.00000000 1.00000000 2.00000000 1.00000000 2.00000000 1.00000000 1.00000000 1.00000000 2 3 1 3 3.00000000 6.00000000 and SGEMM: 1.00000000 2.00000000 1.00000000 2.00000000 1.00000000 2.00000000 1.00000000 1.00000000 1.00000000 2 3 1 3 4.20389539E-45 8.40779079E-45 Am I wrong in assuming these two blocks of code should have the same result?
Emil Andre Løvbak
1

голосов
1

ответ
72

Просмотры

Fortran массив unclassiable заявление

Программа RK4 реальные х (200), у (200), ч, k1, k2, k3, k4 целое число, я прочитал *, х (0), у (0), ч делать я = 0,10 k1 = х (я) -y (я) +2 х (я + 1) = х (I) + H к2 = (х (I) + H / 2) - (у (I) + (ч / 2) * k1)) + 2 k3 = (х (I) + H / 2) - (у (I) + (ч / 2) * к2)) + 2 K4 = (х (г + 1)) - (у (я) + Н * ( k3)) + 2 у (г + 1) = у (я) + (ч / 6) * (k1 + 2 * k2 + 2 * k3 + k4) печать *, 'х = х (г + 1) , 'у =', у (г + 1) ENDDO конец В строке 9 и 10: k2 = (х (I) + H / 2) - (у (I) + (ч / 2) * k1)) + 2 k3 = (х (я) + ч / 2) - (у (я) + (ч / 2) * k2)) + 2 я получаю "неклассифицируемые заявление на (1)", с (1), что указывает на k2 и k3. Я не могу видеть, что я делаю неправильно, как k1 и k4 следует сходную структуру и кажется, что нет ничего плохого с ними.
xsr
0

голосов
0

ответ
6

Просмотры

How to watch global variables( from module which was used in main program) using debugger?

Я очень новичок в использовании Code :: Blocks 17.12 за создание и отладку проектов. На каком-то этапе кодирования мне нужно отслеживать значения локальных и глобальных переменных, потому что я хочу, чтобы избежать неправильного логики в моем FORtran коде. Все глобальные переменные объявляются в модуле, который был включен в основной программе по использованию, non_intrinsic. Когда я пытаюсь отслеживать значения указанного глобальных переменные в окошках есть только пустое пространство для функций и локальных переменных. Это мой пример кода: МОДУЛЬ EES_DM_PRO IMLICIT NONE INTEGER :: VAR_01, VAR_02 СОДЕРЖИТ SUBROUTINE DM_LOAD_VALUES () INTEGER, ПАРАМЕТР :: UN = 15 ОТКРЫТЫЙ (ООН, FILE = 'data.txt') READ (ООН *) VAR_01 READ ( ООН, *) VAR_02 CLOSE (UN) END END SUBROUTINE DM_LOAD_VALUES МОДУЛЬ ПРОГРАММА EES_DM_TS USE, NON_INTRINSIC :: EES_DM_PRO НЕЯВНЫЕ NONE ВЫЗОВА DM_LOAD_VALUES () END PROGRAM Если я ставлю точки останова afther строки, где была вызвана подпрограмма, и если я начну процесс отладки в окне просмотра я получил пустое место для местных жителей. Можно ли о значениях трековых VAR_01 и VAR_02 в основной программе?
Drug Smilga
1

голосов
1

ответ
992

Просмотры

Запись в файл, используя неявное сделать петлю

Мне нужна помощь о неявной петле делать в Fortran. Это мой простой код: Программа Simple неявной ни Integer :: I, J Integer, параметр :: N = 2, M = 3 Real, размерность (N, M) :: Горшок Open (1, File = 'first.txt' , Status = 'старый') Read (1, '(M (f3.1,1x))) ((Pot (I, J), J = 1, M), я = 1, N) Close (1) Open (2, File = 'Second.txt' Status = 'Unknown') Написать (2 '(М (i0,1x, i0,1x, f3.1,1x))) ((I, J, Pot (I, J), J = 1, M), я = 1, N) Close (2) программа Stop End Simple Это файл first.txt: 1,1 1,2 1,3 2,1 2,2 2,3 При попытке выполнить эту программу, я получил это сообщение: Непредвиденный элемент «N» в строке формата Неожиданное элемента «M» в строке формата, я хочу, чтобы сохранить имя целочисленных переменных N и M в заявлении записи. Есть ли способ, также сохраняют свои значения из раздела объявлений?
1

голосов
1

ответ
805

Просмотры

gfortran связывая флаг для OpenMP

Я пытаюсь связать несколько файлов .o с помощью gfortran. Я собрал файлы, как так (в Makefile): gfortran -c -fopenmp file1.f gfortran -c -fopenmp file2.f Теперь я хотел бы, чтобы связать файлы с возможностью OpenMP. Я знаю, с компилятором Intel связующая флаг является -liomp5, так, чтобы связать файлы с компилятором Intel можно было бы назвать: ifort -o a.out file1.o file2.o -liomp5 Это, очевидно, не правильный флаг для GNU компилятор. Как правильно OpenMP связывая флаг gfortran?
1

голосов
1

ответ
152

Просмотры

$ OPENMP_FFLAGS не работает в Autoconf

Я пытаюсь скомпилировать FORtran код с гну-Autotools. OpenMP конкретные линии в configure.ac является: AC_PROG_FC ([gfortran]) AC_OPENMP FCFLAGS = «$ OPENMP_FCFLAGS -fcheck = все» Если я компилирую с этим, я не получаю опции компилятора, связанные с OMP, как описано в макросе AC_OPENMP в Autoconf руководство. Если я явно место -fopenmp вместо $ OPENMP_FFLAGS, только тогда его работу. Любая помощь, пожалуйста?
BaRud
1

голосов
1

ответ
3.1k

Просмотры

Программа получила сигнал SIGBUS: Доступ к неопределенной части объекта памяти

У меня есть этот простой Fortran код и функция, которую я явно поставка с аргументом в основной программе. Код ниже: неявная ни один реальный * 8 ррра, х внешний TTTT х = РРР (10) конца функции ррра (начальная) целое число семян, к реальному * 8 ррру к = 7 семян = 16807 * (начальное число - к * 127773) - (к * 2836) печать *, семена ррр = семена / 2. конец она компилирует, однако при счете она производит следующее сообщение об ошибке: Программа получила сигнал SIGBUS: Доступ к неопределенной части объекта памяти. Backtrace этой ошибки: # 0 0x10f43bfe6 # 1 0x10f43b7ac # 2 0x7fff89740529 # 3 0x10f433d78 # 4 0x10f433e2c ошибка # 5 0x10f433e6e автобус: 10 Любые идеи, что может быть причиной ошибки? Я использую gfortran скомпилировать мой код.
user3578925
1

голосов
1

ответ
513

Просмотры

Calling subroutine in parallel environment

I think my problem is related or even identical to the problem described here. But I don't understand what's actually happening. I'm using openMP with the gfortran compiler and I have the following task to do: I have a density distribution F(X, Y) on a two-dimensional surface with x-coordinates X and y-coordinates Y. The matrix F has the size Nx x Ny. I now have a set of coordinates Xp(i) and Yp(i) and I need to interpolate the density F onto these points. This problem is made for parallelization. !$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(i) do i=1, Nmax ! Some stuff to be done here Fint(i) = interp2d(Xp(i), Yp(i), X, Y, F, Nx, Ny) ! Some other stuff to be done here end do !$OMP END PARALLEL DO Everything is shared except for i. The function interp2d is doing some simple linear interpolation. That works fine with one thread but fails with multithreading. I traced the problem down to the hunt-subroutine taken from Numerical Recipes, which gets called by interp2d. The hunt-subroutine basically calculates the index ix such that X(ix)
Sebastian
1

голосов
1

ответ
148

Просмотры

Random large floating point errors and NaN when using a recursive function in Fortran

I am trying to create a foil section using b-splines and a recursive function. The problem is that it returns some of the values in either very large floating point numbers or NaN and even infinity sometimes. Which of the values seems to change after recompiling and sometimes more than others for some reason. The values it does return normally are correct. Does anyone have any suggestion what the problem might be? Any help is much appreciated. I know my code here is quite long, but I think everything is necessary. First is the program and next the module with subroutines and the function. The correct answer should be: xb = 0 0.0147 0.0529 0.1063 0.1675 0.2448 0.3564 0.5202 0.7231 0.9047 1.0000 and yb = 0 -0.0088 -0.0166 -0.0227 -0.0264 -0.0272 -0.0245 -0.0178 -0.0084 -0.0009 0 module splines IMPLICIT NONE interface CoxdeBoor module procedure CoxdeBoor end interface CoxdeBoor CONTAINS SUBROUTINE Splinefoil(N, degree, params, pts, xb, yb) INTEGER :: degree, N, i, pts REAL :: Pxb(pts+2), Pyb(pts+2) REAL :: tegap REAL, dimension (:):: yb, xb, params tegap=0.00; Pxb(1:2)=0 Pyb(1)=0 DO i=1, pts-1 !x-coordinates of bottom Pxb(i+2)=params(((2*i)-1)+2*pts) !y-coordinates of bottom Pyb(i+1)=params(2*i-2+2*pts) END DO Pyb(pts+1)=params(4*pts-2) Pxb(pts+2)=1 Pyb(pts+2)=-0.5*tegap call Bspline(N,degree,Pxb, Pyb, pts,xb,yb) END SUBROUTINE Splinefoil SUBROUTINE Bspline(N, degree, Px, Py, pts, x, y) INTEGER :: degree, N, j, i, n1, pts, l INTEGER, parameter :: len=10 REAL :: B(pts+2), Qx(N/2+1), Qy(N/2+1), t(N/2+1), dt REAL, dimension(1:len) :: T2 REAL, dimension (:):: Px, Py, y, x n1=pts+1 DO i=1, degree+n1+2 IF (i
Max du Bois
1

голосов
1

ответ
175

Просмотры

Можно ли скомпилировать Параллельные контрольные показатели файлов NASA (НПБ) в Linux с помощью gfortran и OpenMPI?

Я пытаюсь запустить НПБ бенчмаркинга на моем RHEL7.3 установить, но вступают в аналогичный вопрос, как задан вопрос здесь ошибка при построении NAS тесты Попытка сделать тест BT, который находится в Fortran, я получаю следующее сообщение об ошибке: кд BT; сделать NPROCS = 16 КЛАССА = W = SUBTYPE версии = сделать [1]: Ввод каталог '/mnt/npb_install/NPB3.3-MPI/BT' сделать [2]: Ввод каталога «/mnt/npb_install/NPB3.3-MPI / SYS' сделать [2]: Ничего не было сделано для 'все' делают [2]: Выход каталога '../sys/setparams /mnt/npb_install/NPB3.3-MPI/sys' BT 16 W сделать [2] : Ввод каталога '/mnt/npb_install/NPB3.3-MPI/BT' сделать [3]: Вход в каталог '/mnt/npb_install/NPB3.3-MPI/BT' gfortran -O -o ../bin/bt. W.16 bt.o make_set.o initialize.o exact_solution.o exact_rhs.o set_constants.o adi.o define.o copy_faces.o rhs.o solve_subs.o x_solve. О y_solve.o z_solve.o add.o error.o verifiy.o setup_mpi.o ../common/print_results.o ../common/timers.o btio.o -L / USR / Библиотека / OpenMPI-x84_64 / - lmpi / бен / л.д.: не может найти -lmpi collect2: ошибка: л.д. возвращается статус 1 выездную сделать [3]: *** [Ь-Ь] ошибка 1 Марка [3]: Оставляя Direc ....... Однако я я не использую Intel MPI, а скорее OpenMPI, хотя я не полный понять последствия этого. Мой make.def файл имеет следующие параметры, связанные с МПИ # ------------------------------------- # Это Fortran компилятор usedd для программ MPI # ---------------------------------------- - mpif77 = gfortran # Это связывает Фортране MPI; как правило, такой же, как $ {mpif77} FLiNK = $ {mpif77} # ----------------------------------- ------- # Эти макросы в компоновщик правильно помочь связь с MPI # ---------------------------- --------------- FMPI_LIB = -L / USR / Библиотека / OpenMPI / Библиотека / -lmpi # ------------------- ---------------------- # Эти макросы передаются компилятору, чтобы помочь найти «mpif.h» # ----------- ------------------------------- FMPI_INC = -I / USR / включать / OpenMPI-x86_64 / аналогичны тем, которые размещены в выше вопрос. Из ошибок, я полагаю, что входные параметры -lmpi не является допустимым входным параметром для gfortran при компиляции, но ее удаление приводит к экрану, полный неопределенных ссылок, как: file.f :( текст + 0x123):. Неопределенная ссылка на " mpi_whatever_» Можно ли скомпилировать NPB с gfortran? Или я явно делаю что-то здесь не так? Я видел, что использование ifort другого вариант, но я думал, что задать вопрос, прежде чем перейти к этому возможному решению
TesenkaNoMai
1

голосов
1

ответ
116

Просмотры

Каковы последние четыре байта бесформатной записи файла маркер?

0000da50 00b74727 00000001 204c4c41 20202020 00000000 00000000 00000000 ... 00f831e6: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 da500000 Каждая запись начинается с 0x0000da50, и заканчивается 0xda503f ## (или 0xda500000 когда это запись полна нулей). Я понимаю, что компилятор вставляет четыре байта в начале и в конце каждой записи, чтобы указать его длину. Я знаю, что из документации, что все записи имеют постоянную длину, и что первые 16 байтов каждой записи содержат обычную информацию, такие как счетчики и этикетки, но не любые расчетные данные. Теперь если взять разницу между позициями для двух последовательных «начала записи строк,» вы получите 55896 (например, 0xf4c8a8 - 0xf3ee50 = 55896), и вычитая из 8 байт, которые добавили компилятор, вы получите 55888 или 0xda50. Таким образом, есть только два байта, которые дают фактическую длину записи. Каковы последние четыре байта каждой записи делает? Обновление Я обнаружил, что паразитные байты появляются только тогда, когда определенные размеры столбцов указаны в XXD. Вот полный гекс отвалов для уменьшения размера файла (генерируемого с использованием той же программы Fortran), с двумя различными спецификациями столбцов (сначала с 16 октетов, а затем с 25). Может быть, это проблема с XXD? $ XXD -e С16 test.pst 00000000: 00000250 00000001 00b74275 204c4c41 P ... иВ ...... ВСЕ 00000010: 20202020 1273c268 4042050f 6ec665a7 hs..B @ .en 00000020: 404c165c 2e64c72d 40469557 87eefed5 \ .L @ -.dWF @ .... 00000030:.. 404d86c1 349e2405 40502c03 435bacfe ..M @ $ 4., P @ .. [C 00000040: 40501966 fe8ace3c 404e4ef7 7382fb52 Fp @ Каковы последние четыре байта каждой записи делает? Обновление Я обнаружил, что паразитные байты появляются только тогда, когда определенные размеры столбцов указаны в XXD. Вот полный гекс отвалов для уменьшения размера файла (генерируемого с использованием той же программы Fortran), с двумя различными спецификациями столбцов (сначала с 16 октетов, а затем с 25). Может быть, это проблема с XXD? $ XXD -e С16 test.pst 00000000: 00000250 00000001 00b74275 204c4c41 P ... иВ ...... ВСЕ 00000010: 20202020 1273c268 4042050f 6ec665a7 hs..B @ .en 00000020: 404c165c 2e64c72d 40469557 87eefed5 \ .L @ -.dWF @ .... 00000030:.. 404d86c1 349e2405 40502c03 435bacfe ..M @ $ 4., P @ .. [C 00000040: 40501966 fe8ace3c 404e4ef7 7382fb52 Fp @ Каковы последние четыре байта каждой записи делает? Обновление Я обнаружил, что паразитные байты появляются только тогда, когда определенные размеры столбцов указаны в XXD. Вот полный гекс отвалов для уменьшения размера файла (генерируемого с использованием той же программы Fortran), с двумя различными спецификациями столбцов (сначала с 16 октетов, а затем с 25). Может быть, это проблема с XXD? $ XXD -e С16 test.pst 00000000: 00000250 00000001 00b74275 204c4c41 P ... иВ ...... ВСЕ 00000010: 20202020 1273c268 4042050f 6ec665a7 hs..B @ .en 00000020: 404c165c 2e64c72d 40469557 87eefed5 \ .L @ -.dWF @ .... 00000030:.. 404d86c1 349e2405 40502c03 435bacfe ..M @ $ 4., P @ .. [C 00000040: 40501966 fe8ace3c 404e4ef7 7382fb52 Fp @ Вот полный гекс отвалов для уменьшения размера файла (генерируемого с использованием той же программы Fortran), с двумя различными спецификациями столбцов (сначала с 16 октетов, а затем с 25). Может быть, это проблема с XXD? $ XXD -e С16 test.pst 00000000: 00000250 00000001 00b74275 204c4c41 P ... иВ ...... ВСЕ 00000010: 20202020 1273c268 4042050f 6ec665a7 hs..B @ .en 00000020: 404c165c 2e64c72d 40469557 87eefed5 \ .L @ -.dWF @ .... 00000030:.. 404d86c1 349e2405 40502c03 435bacfe ..M @ $ 4., P @ .. [C 00000040: 40501966 fe8ace3c 404e4ef7 7382fb52 Fp @ Вот полный гекс отвалов для уменьшения размера файла (генерируемого с использованием той же программы Fortran), с двумя различными спецификациями столбцов (сначала с 16 октетов, а затем с 25). Может быть, это проблема с XXD? $ XXD -e С16 test.pst 00000000: 00000250 00000001 00b74275 204c4c41 P ... иВ ...... ВСЕ 00000010: 20202020 1273c268 4042050f 6ec665a7 hs..B @ .en 00000020: 404c165c 2e64c72d 40469557 87eefed5 \ .L @ -.dWF @ .... 00000030:.. 404d86c1 349e2405 40502c03 435bacfe ..M @ $ 4., P @ .. [C 00000040: 40501966 fe8ace3c 404e4ef7 7382fb52 Fp @
jlovegren
1

голосов
1

ответ
156

Просмотры

Странное поведение при вызове свойства из REFPROP FORTRAN файлов

Я пытаюсь использовать REFPROPs HSFLSH подпрограмму для вычисления свойств для пара. Когда же состояние свойство вычисляется по множеству итераций (фиксированной энтальпии и энтропии (энтальпия = 50000 Дж / моль & энтропией = 125 Дж / моль), время, необходимое для вычисления с помощью HSFLSH после того, как каждый 4-й / 5-е увеличивается итерационных до примерно 0,15 мс против ... ничтожное количество времени для других итераций Это превращается проблематично, потому что моя программа место звонить в эту подпрограмму в течение нескольких тысяч раз что приводит к аномально большим временам прогона программы программа, используемая для генерации выше журнала находится здесь: C REFPROP проверки программы time_check параметр (ncmax = 20) размер х (ncmax) реальный hkj, SKJ характер HRF * 3, Herr * 255 * 255 символов ВЧ (ncmax), hfmix CC SETUP ВОДОХОЗЯЙСТВЕННОЙ C NC = 1! Herr) вызов cpu_time (TSTOP) записи (*, *), I, 'время, необходимое для запуска hsflsh рутинную =', TSTOP - tstrt конец перестаньте конец (конечно, вы будете нуждаться в FORTRAN ФАЙЛЫ, которые, к сожалению, я не могу разделить так REFPROP не является открытым исходным кодом) Может кто-то помочь мне понять, почему это происходит.? PS: Приведенный выше код был скомпилирован с использованием gfortran -fdefault реальных 8 UPDATE Я попытался с помощью system_clock ко время моих расчетов, как было предложено @Ross ниже. Полученные результаты являются однородными по петле (изображение ниже). Я должен найти альтернативные пути для улучшения скорости вычислений я думаю (Вздох!) т с открытым исходным кодом) Может кто-то помочь мне понять, почему это происходит.? PS: Приведенный выше код был скомпилирован с использованием gfortran -fdefault реальных 8 UPDATE Я попытался с помощью system_clock ко время моих расчетов, как было предложено @Ross ниже. Полученные результаты являются однородными по петле (изображение ниже). Я должен найти альтернативные пути для улучшения скорости вычислений я думаю (Вздох!) т с открытым исходным кодом) Может кто-то помочь мне понять, почему это происходит.? PS: Приведенный выше код был скомпилирован с использованием gfortran -fdefault реальных 8 UPDATE Я попытался с помощью system_clock ко время моих расчетов, как было предложено @Ross ниже. Полученные результаты являются однородными по петле (изображение ниже). Я должен найти альтернативные пути для улучшения скорости вычислений я думаю (Вздох!)
Ash Sharma
1

голосов
1

ответ
111

Просмотры

Как устранить пробел в начале текстового поля в Fortran?

Я хочу написать некоторые данные в виде текстового файла с использованием Fortran кода. Я в состоянии сделать это. Но, я получаю пустое пространство в начале каждой строки, которая не подходит для моего приложения. Я дал код и вывод кода ниже: PROGRAM MAIN НЕЯВНЫЕ NONE РЕАЛ :: PHI PHI = 0,3000; ОТКРЫТЫЙ (UNIT = 222, FILE = 'settings.txt', STATUS = 'NEW', ACTION = 'READWRITE') WRITE (222 *) "Что такое число?" WRITE (222 *) PHI END PROGRAM Выход кода Что такое число? 0,3000 Мой желаемый результат был бы без пустого пространства в beginnning, что такое число? 0,3000 Итак, как же я устранить пробел в начале текстового поля?
mathquest
1

голосов
1

ответ
130

Просмотры

DGAMIC netlib function to calculate incomplete Gamma exits with an error

Мне нужен метод для вычисления неполной гамма-функции. Конечно, я попробовал Netlib маршрут и нашел dgamic функцию. Тем не менее, после компиляции следующей программы программы теста test_dgamic неявного ни интерфейс двойной точности функции dgamic (in1, in2) двойной точность, намерение (в) :: in1, in2 конца функция dgamic конец интерфейса печать *, 'dgamic:', dgamic (1 .d0,1.d0) конец программы test_dgamic с gfortran версии 6.2.0, как это gfortran main.f90 -o главный dgamic.f d9lgic.f d9lgit.f d9gmic.f d9gmit.f dlgams.f dlngam.f dgamma.f d9lgmc .f dcsevl.f dgamlm.f initds.f d1mach.f xerclr.f xermsg.f xerprn.f xersve.f xgetua.f i1mach.f j4save.f xerhlt.f xercnt.f fdump.f и работает, я получаю следующий slatec сообщение об ошибке *** сООБЩЕНИЕ ОТ РЕГУЛЯРНЫМ INITDS В БИБЛИОТЕКЕ sLATEC. *** ПОТЕНЦИАЛЬНО неустранимая ошибка, PROG ABORTED, трассы ЗАПРОШЕННЫЕ * Чебышев серия слишком коротка для заданной точности * ОШИБКА НОМЕР = 1 * *** КОНЕЦ СООБЩЕНИЯ *** РАБОТА ABORT БЛАГОДАРЯ неизвлеченной ОШИБКИ. 0 ОШИБКА СУЩНОСТИ БИБЛИОТЕКИ SUBROUTINE СООБЩЕНИЕ START NERR УРОВЕНЬ COUNT SLATEC INITDS Чебышева серия тоже-1-Примечание: Следующие исключения с плавающей точкой сигнализация: IEEE_DIVIDE_BY_ZERO Кто-нибудь получили ключ, как избежать этого? Судя по ошибке, это выглядит как дизайн изъян. 0 ОШИБКА СУЩНОСТИ БИБЛИОТЕКИ SUBROUTINE СООБЩЕНИЕ START NERR УРОВЕНЬ COUNT SLATEC INITDS Чебышева серия тоже-1-Примечание: Следующие исключения с плавающей точкой сигнализация: IEEE_DIVIDE_BY_ZERO Кто-нибудь получили ключ, как избежать этого? Судя по ошибке, это выглядит как дизайн изъян. 0 ОШИБКА СУЩНОСТИ БИБЛИОТЕКИ SUBROUTINE СООБЩЕНИЕ START NERR УРОВЕНЬ COUNT SLATEC INITDS Чебышева серия тоже-1-Примечание: Следующие исключения с плавающей точкой сигнализация: IEEE_DIVIDE_BY_ZERO Кто-нибудь получили ключ, как избежать этого? Судя по ошибке, это выглядит как дизайн изъян.
Mali Remorker
1

голосов
1

ответ
692

Просмотры

Fortran странная ошибка сегментации

У меня есть некоторые проблемы с моим основным кодом, так что я пытался изолировать проблему. Таким образом, у меня есть этот небольшой код: МОДУЛЬ Param НЕЯВНЫЕ NONE целое, параметр :: Dr = SELECTED_REAL_KIND (15, 307) целое :: D = 3 целое число :: Q = 10 целое число :: ммо = 16 :: целое число п = 2 целое число, :: х = 80 целое :: у = 70 целое :: г = 20 целое число :: Tmax = 8 END модуль мОДУЛЬ Param м содержит подпрограммы вычисления (F, R) ИСПОЛЬЗОВАТЬ Param, ТОЛЬКО: Dr, ммо, х, у, г , п НЕЯВНЫЕ NONE реальный (вид = др), намерение (в) :: F (X, Y, Z, 0: ммо, п) реальный (вид = др), намерение (уходит) :: г (х, у, г, п) реальный (вид = др) :: fGlob (х, у, г, 0: мм)! -------------------------------------------------- ----------------------- печать *, 'Мы в вычислительном подпрограмма' г = 00.0 fGlob = сумма (е, тусклый = 5) г = сумма ( е, тусклое = 4) печать *, 'fGlob =', fGlob (1,1,1, 1) печать *, '= F', F (1,1,1, 0,1) печать *, «г = », г (1,1,1, 1) конец подпрограммы вычисления конечного модуля м ПРОГРАММА test_prog ИСПОЛЬЗОВАНИЕ Param ИСПОЛЬЗОВАНИЕ м Неявные Отсутствует целое :: Tstep реальный (вид = др), размер (:,:,:,:, :), размещаемый :: е реальный (вид = др), размер (:,:,:, :), размещаемый :: г ----------------------- -------------------------------------------------- ---! Инициализировать параметры. печать *, «начало теста»! Выделяют выделить (Р (х, у, г, 0: ммо, п)) выделяют (г (х, у, г, п)) F = 1.0_dr! -------------------------------------------------- -------! Итерация в течение долгого времени! -------------------------------------------------- ------- делать Tstep = 1, Tmax печать *, Tstep вызова вычисления (F, R) F = F + 1 печать *, 'Tstep', Tstep ENDDO печати *, '= F', F (1, 1,1, 0,1) печать *, 'г =' г (1,1,1, 1)! Deallacation DEALLOCATE (е) DEALLOCATE (г) печать *, «Конец программы испытаний» END PROGRAM test_prog На данный момент, я не могу понять, почему, когда я компилирую с ifort, у меня есть ошибки сегментации, и она работает, когда я компилирую с gfortran. И хуже всего, когда я компилирую с оба ifort и gfortran с их быстрыми вариантами, я снова ошибкой сегментации (ядро сбрасывали) ошибку. И более запутанной, когда я попытался с обоих компиляторов для компиляции с опциями TraceBack, все работает отлично. Я знаю, что ошибки сегментации (ядро сбрасывали) ошибка обычно означает, что я стараюсь читать или писать в неправильном месте (матричные индексы и т.д. ...); но вот с этой небольшой код, я не вижу никакой ошибки, как это. Кто-нибудь может помочь мне понять, почему диссертаций возникают ошибки?
R. N
1

голосов
1

ответ
61

Просмотры

Путаница форматов файлов для Intel Fortran-файлов

Я работаю над проектом, который был дан мне кем-то другим. Этот проект компилируется с помощью компилятора ifort и содержит массу Фортрана .FOR файлов, написанных на, казалось бы, свободномолекулярном формате. В последнее время я изучаю FORtran форматы код в немного более подробно и наткнулся на эту статью, которая гласит: «.f90 указует Fortran источника свободной формы и .f, .ftn или .FOR указать фиксированную форму Souce» Я не понять, почему и как эти .FOR файлы можно скомпилировать в порядке, если они написаны в свободной форме, и если ifort признает их в качестве установленной формы. Может кто-то пожалуйста просветить меня по этому поводу? Я пытаюсь перенести этот проект gfortran, так что я очень смущен. Кроме того, я не хочу, чтобы изменить все к .f90 файлы, потому что я боюсь, что это может нарушить что-то другое.
user32882
1

голосов
1

ответ
840

Просмотры

Как удалить gfortran на MacOS Sierra?

Я следовал инструкциям, приведенным здесь Как удалить gfortran компилятор на MAC OSX 10.7 Но когда я пытаюсь установить gfortran снова, он говорит мне версию gfortran уже существует.
Vahni
1

голосов
1

ответ
196

Просмотры

Можно ли сделать сокращение OpenMP над элементом производного Fortran типа?

Я пытаюсь адаптировать Fortran код (Gfortran) использовать OpenMP. Это частица на основе кода, где индекс массивов может соответствовать частицам или пару. Код использует производный тип для хранения числа матриц для каждой частицы. Очень часто попадаться петли, которые требуют использования матрицы, хранящейся в этом производном типе. Эта матрица может быть доступны несколько потоков. Цикл также требует уменьшения над элементом в этом производном типе. В настоящее время я должен написать временный массив для того, чтобы сделать это сокращение, а затем я установить элемент производного типа, равного эту временную матрицу восстановления. Если бы не с помощью OpenMP не временный массив не требуется. Вопрос: Можно ли сделать редукцию над элементом производного типа? Я не» т думает, что я могу сделать сокращение по всему производному типу, как мне нужно, чтобы получить доступ к некоторым из элементов в производном типе, чтобы сделать работу, что означает, что должно быть разделено. (От чтения спецификации Я понимаю, что при использовании СНИЖЕНИЯ частной копии каждого элемента списка создается.) Полный минимальный рабочий пример ниже. Это может быть более минимальным, но я боялся, что удаление более компонентов может более упростить задачу. ПРОГРАММА TEST_OPEN_MP ИСПОЛЬЗОВАНИЯ, ИСКРОБЕЗОПАСНОСТИ :: iso_fortran_env ИСПОЛЬЗОВАНИЕ omp_lib НЕЯВНЫЕ НЕТ Integer, ПАРАМЕТР :: дп = REAL64 Integer, ПАРАМЕТР :: ndim = 3 Integer, ПАРАМЕТР :: no_partic = 100000 Integer, ПАРАМЕТР :: len_array = INTEGER :: 1000000 к, я , II, J, JJ Integer, DIMENSION (1:
1QuickQuestion
1

голосов
1

ответ
87

Просмотры

Является ли эта ошибка линкера в 32 разрядной ОС Windows gFortran ошибки?

Следующий код компилирует до 64 бит, но использование Fortran родовых интерфейсов, кажется, запутать GCC атрибут в 32 бит (требуется, чтобы вызвать 32-битный STDCALL API). Код урезанная версия f03gl проект, который я пытаюсь построить для ОС Windows (я не смог создать меньший репро). Переделывание коды (как показано в нижней части), не родовые аргументы интерфейса и прохождения прямых делает компиляции и работу. Я надеюсь, мне не придется переписывать все вызовы, чтобы обойти эту проблему. Ошибка; callglutbad.o:. callglutbad.f90 :( текст + 0x27): неопределенная ссылка на `callglut.f90 glutInit» (терпит неудачу 32 разрядные компиляций) МОДУЛЬ GlutModule USE ISO_C_BINDING НЕЯВНЫХ NONE PUBLIC glutInit ИНТЕРФЕЙС glutInit МОДУЛЬ PROCEDURE glutInit_f03 END INTERFACE glutInit ИНТЕРФЕЙС SUBROUTINE glutInit_gl ( pargc, \ X86 \ Lib \ freeglut.lib -lgfortran @endlocal REM 64 бит @setlocal @SET PATH =% PATH%; C: \ msys64 \ mingw64 \ Bin \ gfortran -cpp -c -o callglut.f90 callglut.o GCC callglut. о -о callglut64.exe .. \ x64 \ Lib \ freeglut.lib -lgfortran @endlocal общий интерфейс используется для вызова glutInit без параметров из Fortran (параметры заполняются прокси подпрограммой). callglut.f90 (компилирует и работает на обеих платформах) МОДУЛЬ GlutModule ИСПОЛЬЗОВАНИЯ ISO_C_BINDING НЕЯВНЫЕ NONE PUBLIC glutInit ИНТЕРФЕЙС SUBROUTINE glutInit (pargc, ARGV) BIND (C, NAME = "glutInit") ИМПОРТ #ifdef x86! GCC $ ATTRIBUTES STDCALL :: glutInit # ENDIF INTEGER (C_INT) :: pargc TYPE (C_PTR), INTENT (IN) :: ARGV END SUBROUTINE glutInit END END ИНТЕРФЕЙС МОДУЛЬ программа GlutModule основной USE GlutModule PRINT *, "Вызов glutInit" звоните glutInit (0, C_NULL_PTR) PRINT *, «Вызываются glutInit» конец программа основной я вижу ошибку компилятора с утверждением атрибута не применяется к общему интерфейсу или что-то, что я делаю? Я подозреваю, что это и 32 бит имя STDCALL коверкая от glutInit до _glutInit @ 8 не выполняется. Я использую gfortran под msys2 (GNU Fortran (Rev2, Построенный по проекту MSYS2) 7.1.0) на 64-битной ОС Windows с 32 и 64-битных компиляторов.
Ryan O'Neill
1

голосов
1

ответ
751

Просмотры

Ошибка при загрузке разделяемых библиотек: libgfortran.so.1: неправильный класс ELF: ELFCLASS32

Я пытаюсь использовать структуру из примера движения здесь (SFM по Nghiaho). У меня возникли некоторые проблемы со второй частью процесса выполнения: Я скачал PMVS2 (Patch на основе Многооконного Stereo Software) здесь pmvs2 док. Я открыл терминал в / основной папке / ПМВС-2 / программы и напечатал: ./pmvs2 моя_папка / options.txt Где файл options.txt был создан на первом этапе процесса. У меня была эта ошибка: ./pmvs2: ошибка при загрузке разделяемых библиотек: libgfortran.so.1: неправильный класс ELF: ELFCLASS32 я обнаружил, что проблема в том, что я бегу 64-разрядной версии программы и gfortran библиотеки составляется 32bit. У меня есть файл с именем libgfortran.so.3 в / USR / lib32 / папку, и я создал виртуальную связь с: пер -s /usr/lib32/libgfortran.so.3 /usr/lib32/libgfortran.so. 1 Я не»
Simone Colnaghi

Просмотр дополнительных вопросов