(очень долго искал и наткнулся на нее случайно, а вот среда
разработки
от Compaq, под которую приведены все примеры в книгах о Фортране
Бартеньев, Артемов - как я понял является коммерческой и авторы об
этом как-то тихонько умалчивают, не забывая похвалить библиотеки)
Для полного счастья в работе не хватает графического вывода
результатов расчетов - графики аналитических и по-точечно заданных
функций, с надписями, осями сеткой и т.п. И я был очень рад был
увидеть яркие и разнообразные графики на странице Вашего проекта
http://mathgl.sourceforge.net/en/index.html
Но поскольку я "чайник" и сижу под Виндой (на кафедре и везде Винда,
деваться некуда), то у меня возникла крупная проблема по использованию
MathGL в связке с вышеупомянутым Code::Blocks.
Что я сделал:
установил Mingw
запустил Code::Blocks
указал компилятор GNU
... и Фортран проекты создаются
скачал mathgl-1.11.0.1-mingw.i686
но вот "подцепить" не смог
вылетают ошибки вида библиотека/файл не найден(а)
Если можете помогите с подробным описанием (скриншотами) как все же
в проекте пользоваться mathgl -
1. создавать графики - видеть их
2. сохранять их в eps - для дальнейшего опубликования в Tex и просто
в jpg - для интернета и презентаций Word
и если можете напишите откуда брать свободные качественные
матбиблиотеки и как их добавлять
в проект - как отдельный файл? Я пока смог разобраться только как
добавлять отдельные процедуры в модуль по схеме в одном рабочем файле
modul m_name
contains
процедуры
трататрата
end modul m_name
program p_name
use m_name
трататрата
call процедура из модуля m_name
end program p_name
но это достаточно громоздко и не совсем красиво...
хотелось бы в дереве проекта видеть подключаемые модули/библиотеки
и если что
оперативно их просматривать/редактировать и создавать свои.
Прошу прощения за назойливость но бесплодные часы в поисках гугла и
яндекса пока привели только к Вам как надежному и большому
специалисту.
On 18 фев, 10:25, Владимир <dudarev...@mail.ru> wrote:
> Здравствуйте, Алексей Балакин.
> Меня зовут Владимир Дударев и я являюсь аспирантом Южного
> федерального
> университета, сам механик. Для расчетов решил использовать Fortran, а
> поскольку вопрос о законности ПО с каждым годом (потихоньку)
> становится все жестче, решил воспользоваться средой разработки
> Code::Blockshttp://darmar.vgtu.lt/index.php
Недавно вернулся из командировки и не мог ответить раньше :(.
> Но поскольку я "чайник" и сижу под Виндой (на кафедре и везде Винда,
> деваться некуда), то у меня возникла крупная проблема по использованию
Хмм, зря. Под Linux значительно больше инструментов для отладки,
программирования и пр... да и удобнее он. А переносимость исходных
кодов позволяет запускать программу одинаково под Linux, MacOS или
Windows. Да и кластеры у Вас наверное под лиункс ;) . Но вообщем дело
вкуса.
> MathGL в связке с вышеупомянутым Code::Blocks.
> Что я сделал:
> установил Mingw
> запустил Code::Blocks
> указал компилятор GNU> Прошу прощения за назойливость но бесплодные часы в поисках гугла и
> яндекса пока привели только к Вам как надежному и большому
> специалисту.
Уж не такой я и большой специалист. Запускать фортрановский код из С/С+
+ так и не научился :(
> ... и Фортран проекты создаются
> скачал mathgl-1.11.0.1-mingw.i686
> но вот "подцепить" не смог
> вылетают ошибки вида библиотека/файл не найден(а)
Во первых библиотеку надо установить -- поместить файлы из include/ и
lib/ архива в соответствующие папки MinGW (gfortran) -- см. подробнее
инструкцию в документации. Могут понадобиться сторонние свободные
библиотеки -- их можно скачать с http://gnuwin32.sourceforge.net.
Во вторых ее надо включить в проект. Тут поможет документация по
Code::Blocks и/или знание ключей gfortran. Если кратко, то достаточно
указать ключ -lmgl в опциях линкера (linker) для проекта. Отмечу, что
библиотека для windows была скомпилирована для 32-бит и должна
использоваться с 32-битным компилятором.
> Если можете помогите с подробным описанием (скриншотами) как все же
> в проекте пользоваться mathgl -
> 1. создавать графики - видеть их
> 2. сохранять их в eps - для дальнейшего опубликования в Tex и просто
> в jpg - для интернета и презентаций Word
Хмм, мне казалось что более 350 страниц документации на русском языке
вполне достаточно. Я бы начал с http://mathgl.sourceforge.net/mathgl_ru/mathgl_ru_9.html#Examples
и особенно http://mathgl.sourceforge.net/mathgl_ru/mathgl_ru_14.html#C_002fFortran-interface,
а также посмотрел бы примеры графиков и способ их построения
http://mathgl.sourceforge.net/mathgl_ru/mathgl_ru_89.html#Samples .
Уж куда подробнее я не знаю :)) .
> и если можете напишите откуда брать свободные качественные
> матбиблиотеки и как их добавлять
Лично мне нравится сайты http://www.thefreecountry.com/ и
http://gnuwin32.sourceforge.net/, а вообще запустить google и искать
"free math library". На английском библиотек больше :) .
> в проект - как отдельный файл? Я пока смог разобраться только как
> добавлять отдельные процедуры в модуль по схеме в одном рабочем файле
>
> modul m_name
> contains
> процедуры
> трататрата
> end modul m_name
> program p_name
> use m_name
> трататрата
> call процедура из модуля m_name
> end program p_name
Хмм, забавный способ. Мне казалось, что в фортране достаточно просто
использовать имя функции или объявить ее тип если нужно возвращаемое
значение... Хотя фортраном не пользуюсь и не знаю появилась ли там
проверка типов аргументов в последних версиях.
Замечу, что многие библиотеки имеют только С-ые интерфейсные функции и
для их использования приходится использовать дополнительный интерфейс.
Например, для С-функции
void mgl_mark(HMGL gr, float x,float y,float z,const char *mark);
приходится писать что-то типа
void mgl_mark_(uintptr_t *gr, mreal *x, mreal *y, mreal *z, const char
*pen,int l)
{ char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0;
mgl_mark((HMGL)(*gr), *x,*y,*z,s); delete []s; }
и компилировать этот С-ый файл в библиотеку перед использованием
функций в фортране.
> но это достаточно громоздко и не совсем красиво...
> хотелось бы в дереве проекта видеть подключаемые модули/библиотеки
> и если что
> оперативно их просматривать/редактировать и создавать свои.
См. выше. Список функций для фортрана довольно сложно вытащить из
библиотек ... обычно это функции заканчивающиеся на символ
"_" (стандарт АТ&Т), но некоторые компиляторы (Microsoft и вроде
Compaq) этому стандарту не следуют. Значительно проще использовать С-
ые заголовочные файлы (*.h) и надеятся (или писать самому или искать
интерфейсную библиотеку), что интерфейсные функции имеют такой же
список аргументов как в С.
Удалось указать данную опцию в компиляторе. Более ттго удалось
скомпилировать из-под командной строки но результат неутешительный.
Пример кода:
------------------------------------------------
program hello
implicit none
integer gr, mgl_create_graph_zb,a, mgl_create_data_size
gr = mgl_create_graph_zb(600,400)
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! put sample code here
a = mgl_create_data_size(60,50,40);
call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 -
(2*z-1)^2 - 0.1)",0);
call mgl_rotate(gr,40.,60.,0.)
call mgl_set_light(gr,1)
call mgl_set_alpha(gr,1)
call mgl_box(gr,1)
call mgl_surf3(gr,a,'',3)
call mgl_delete_data(a)
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
call mgl_show_image(gr,'',0)
call mgl_delete_graph(gr)
print *, 'Hello World!'
end program
-------------------------------------------------------
На выходе(как в случае CodeBlocks так и в случае компиляции через
командную строку) получаю exe файл при запуске которого выдаёется
данное сообщение:
-----------------------------
"evince" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Hello World!
Process returned 0 (0x0) execution time : 0.914 s
Press any key to continue.
-----------------------------------
Что такое evince? Единственное что я нашел это программа для просмотра
документов. К слову сказать её установка ситуацию не изменила.
Из документации http://mathgl.sourceforge.net/mathgl_ru/mathgl_ru_21.html#Export-to-file
Отображает текущий кадр используя внешнюю программу просмотра viewer.
Функция сохраняет картинку во временный файл и вызывает viewer для его
отображения. Если nowait=true, то функция возвращает управление
немедленно - не ждет пока окно просмотра будет закрыто.
По умолчанию для просмотра используется программа Evince -- кросс-
платформенная, по умолчанию установлена в Gnome. Можно использовать
любую другую программу просмотра -- просто укажите ее имя в качестве
второго аргумента.
> -----------------------------
> "evince" не является внутренней или внешней
> командой, исполняемой программой или пакетным файлом.
> Hello World!
>
> Process returned 0 (0x0) execution time : 0.914 s
> Press any key to continue.
> -----------------------------------
>
> Что такое evince? Единственное что я нашел это программа для просмотра
> документов. К слову сказать её установка ситуацию не изменила.
Вообще-то в windows есть такая штука как пути поиска (path). Я
надеюсь, что выдобавили папку с программой просмотра в path?
Хотя можно конечно указать точный путь к программе просмотра -- типа
call mgl_show_image(gr,'c:\evince\evince.exe',0), но на мой взгляд это
менее удобно.
On 22 фев, 09:31, Alexey Balakin <mathgl.abala...@gmail.com> wrote:
> Функция сохраняет картинку во временный файл и вызывает viewer для его
> отображения. Если nowait=true, то функция возвращает управление
> немедленно - не ждет пока окно просмотра будет закрыто.
Удалось запустить с таким видом
call mgl_show_image(gr,'C:\Windows\System32\mspaint.exe',1)
Проблема в том что если выставить параметр 0(т.е. nowait=true) то
программа для открытия изображений выдаёт следующую ошибку "файл "D:
\s598..png не найден" При этом
1)Файл в действительности создаётся и его можно открыть в ручную.
2)Имя файла имеет ещё одну точку перед расширением "..png"
> По умолчанию для просмотра используется программа Evince -- кросс-
> платформенная, по умолчанию установлена в Gnome. Можно использовать
> любую другую программу просмотра -- просто укажите ее имя в качестве
> второго аргумента.
Как нистранно но у Evince нет .exe файла. Даже через ярлык не удалось
"Найти объект" т.к. дання функция заблокирована. Поиск файла
evince.exe тоже результатов не дал.