MathGL и Code::Blocks

335 views
Skip to first unread message

Владимир

unread,
Feb 18, 2011, 3:25:41 AM2/18/11
to MathGL
Здравствуйте, Алексей Балакин.
Меня зовут Владимир Дударев и я являюсь аспирантом Южного
федерального
университета, сам механик. Для расчетов решил использовать Fortran, а
поскольку вопрос о законности ПО с каждым годом (потихоньку)
становится все жестче, решил воспользоваться средой разработки
Code::Blocks http://darmar.vgtu.lt/index.php

(очень долго искал и наткнулся на нее случайно, а вот среда
разработки
от 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

но это достаточно громоздко и не совсем красиво...
хотелось бы в дереве проекта видеть подключаемые модули/библиотеки
и если что
оперативно их просматривать/редактировать и создавать свои.

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

Vladimir

unread,
Feb 20, 2011, 1:28:27 PM2/20/11
to MathGL
1. Вам необходимо положить файлы в каталог mingw, соответственно потом
в проекте можете подключать библиотеки
include <mathgl/mgl,h>, если заголовочные файлы у вас распакованы в
каталог /mingw/include/mathgl
По поводу применения читайте справку по пакету, там много примеров,
определитесь с фреймвоком.
И возможно вам придется еще скачать часть библиотек, чтобы проект
собирался.

On 18 фев, 10:25, Владимир <dudarev...@mail.ru> wrote:
> Здравствуйте, Алексей Балакин.
>  Меня  зовут  Владимир Дударев и  я  являюсь  аспирантом  Южного
> федерального
>  университета, сам механик. Для расчетов решил использовать Fortran, а
>  поскольку  вопрос  о законности ПО с каждым годом (потихоньку)
>  становится все жестче, решил воспользоваться средой разработки

>  Code::Blockshttp://darmar.vgtu.lt/index.php

Alexey Balakin

unread,
Feb 21, 2011, 3:36:39 PM2/21/11
to MathGL
Добрый вечер!

Недавно вернулся из командировки и не мог ответить раньше :(.

> Но  поскольку  я "чайник" и сижу под Виндой (на кафедре и везде Винда,
> деваться некуда), то у меня возникла крупная проблема по использованию

Хмм, зря. Под 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) и надеятся (или писать самому или искать
интерфейсную библиотеку), что интерфейсные функции имеют такой же
список аргументов как в С.

Владимир

unread,
Feb 21, 2011, 4:24:06 PM2/21/11
to MathGL
>Если кратко, то достаточно
>указать ключ -lmgl в опциях линкера (linker) для проекта.

Удалось указать данную опцию в компиляторе. Более ттго удалось
скомпилировать из-под командной строки но результат неутешительный.
Пример кода:
------------------------------------------------
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? Единственное что я нашел это программа для просмотра
документов. К слову сказать её установка ситуацию не изменила.

Alexey Balakin

unread,
Feb 22, 2011, 1:31:27 AM2/22/11
to MathGL
> call mgl_show_image(gr,'',0)

Из документации 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), но на мой взгляд это
менее удобно.

Владимир

unread,
Feb 22, 2011, 4:26:01 PM2/22/11
to MathGL

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 тоже результатов не дал.

Reply all
Reply to author
Forward
0 new messages