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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Работа с Intel Fortran через Visual Studio 2003 и не только

Модерирует : 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

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

Donkey

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
10.1.015
  * Support for Microsoft Visual Studio 2008* added  
  * /Qopt-prefetch-issue-excl-hint[-] added  

Всего записей: 540 | Зарегистр. 03-11-2006 | Отправлено: 20:11 01-03-2008
AZA_N

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

Цитата:
И ещё вопрос - что именно из дистрибутива VS2005Pro необходимо поставить для работы с интеловским Fortranом?

Чтобы работали QuickWin и Console приложения (с графикой) и дебаггер без использования ресурсов в VS2005Pro я ставила из VisualC++ только Win32PlatformSDKTools и из NETFrameworkSDK - Tools. Если нужны *.RC, то надо добавить еще библиотеки из VisualC++ (какие - разбираться не стала - добавила весь VisualC++ ).
    Это для WinXPProx64, VS2005Pro, IVF10.1.019 (IA32&EM64T)
 
Проблемы у меня такие:
 
1.    Все старые проекты из CVF c кучей RC работают нормально, можно отредактировать, к примеру, элементы диалогов, но вот при попытке добывить новые элементы - неудача. Toolbox,DialogEditor на месте, но когда тащишь мышью, к примеру,  RadioButton в поле диалога, то указатель мыши превращается в перечеркнутый кружок и ничего не добавляется. Так только для проектов Фортрана. Для проектов VS C++ все в порядке.
    Подскажите, пожалуйста, как с этим бороться. Переписывать GUI неохота (привыкла все лепить на фортране - и расчетную часть, и оболочку), и преобразовывать resource.h в resource.fd почти вручную тоже лень.
 
2.    Когда у меня стояли IVF10.1.0.10 и IMSL5, то достаточно было добавить  imsl.lib и imsl_dll.lib и все мои программы с использованием IMSL нормально работали. Попыталась заменить IMSL c 5 на 6, при этом для того чтобы получить exe, пришлось добавить libguide40.lib    (все это для Win32). Но еxe не запускается, а пишет, что отсутствует MSVCR71.dll.       Как это исправить?

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 16:25 02-03-2008 | Исправлено: AZA_N, 19:48 05-03-2008
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Считаю нехороший интеграл при помощи последнего IFC и IMSL 6:
 
         aa = 0.12; bb= 1.0;
         CALL D_QDAGS (ReYepp1,aa,bb,ReYe1)  
ReYepp1 - та самая интегрируемая нехорошая ф-ция:
 
        real*8 function ReYepp1 (x)
        real*8,  INTENT(IN) ::  x
 
Делаю этот обсчет в dll, которая потом вызывается из программы сделанной в builder 2006.
При отладке программа молча вылетает на CALL D_QDAGS, рассматривая переменые в дебагере понял, что D_QDAGS может скармливать ф-ции ReYepp1 (x) в качестве x числа вроде -5.054013644202686E+291, хотя интервалы указаны четко... Переменная x внутри ф-ции не меняется... В чем может быть проблема, помогите кто чем... Спасибо!
 
TO AZA_N  
>Но еxe не запускается, а пишет, что отсутствует MSVCR71.dll.       Как это исправить?
А такая dll есть? Вообще в 6 Imsl много поменялось, не знаю как в плане скорости, но в плане механизма сборки программы точно. Другие пути, другие dll. Файл скомпиленный под 5 IMSL не запускался с 6, ему уже нужны другие библиотеки. Достаточно поизучать импорты у 5 и 6 IMSL, чтобы убелиться в этом....

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 19:43 12-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
тебе лучше
сюда
 
а в DQDAGS точно 4 аргумента?
давай _реальный_ код вызова на Форе и С-интерфейс...
кстати, в Сях нужно оч _аккуратно_ интерфейс к фортрану прописать, особенно для длл...
 
ещё для порядка
 
aa = 0.12; bb= 1.0;
 
на
 
aa = 0.12d0; bb= 1.0d0;
 
поменяй...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 19:59 12-03-2008 | Исправлено: akaGM, 20:19 12-03-2008
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2 ,
MSVCR71.dll (и очень разные)  есть в составе целой кучи программ, но только никак не относящихся к IFV,VS,IMSL. Компилировала я с IMSL6 (c его Includ и lib). А что значит "поизучать импорты"? Я библиотеки всегда использовала без затей - указать пути к lib и include, подключаемые *.lib и глубже никогда не лезла, т.к. и так все работало (с IMSL5 и сейчас работает).

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 23:21 12-03-2008
akaGM

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

Цитата:
MSVCR71.dll (и очень разные)  есть

ну так и подсовывай их по одной к своему .ехе
а лучше скопируй её из
X:\где-там-у-тебя-фортран-сидит\IDB\10.ххх\IA32\bin
или пас туда проведи...

Цитата:
...но только никак не относящихся к IFV,VS,IMSL

это ты так думаешь...
что-то там у тебя собрано под динамические библиотеки, поэтому имеет смысл ещё жёстко опцию "/static" при сборке использовать...

Цитата:
Когда у меня стояли IVF10.1.0.10

а щас, кстати, что стоит?
 

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 07:02 13-03-2008 | Исправлено: akaGM, 07:03 13-03-2008
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за помощь! Все утряслось совсем простым способом – снос ОС (вместе с partition), установка VS2005+IVF10.1.019(IA32)+IMSL5(от IVF9Pro)+IMSL6(с офф. сайта) – и все работает (и c IMSL5, и c IMSL6).  Пока еще не все успела оттестировать, но то, о чем писала выше, работает. Так что лучшее средство от насморка – гильотина (особенно после излишне смелых экспериментов с разнородным новым софтом).
   Осталось теперь только разобраться, как создавать RC, не выходя из fortran project, и жить спокойно, пока срочно не понадобиться расчет на два ядра (em64t).

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 10:32 13-03-2008 | Исправлено: AZA_N, 10:50 13-03-2008
akaGM

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

Цитата:
утряслось совсем простым способом – снос ОС

хорошо, что не покупкой нового компа...

Цитата:
RC, не выходя из fortran project

фор + гуй на API -- я б медаль дал -- "Герой-программист", вернее, -- "Героиня"...
 
кстати, есть такие две библиотечки -- Winteracter и GINO MENU
если вы там софт покупаете, то настоятельно рекомендую...
 
www.winteracter.com
www.gino-graphics.com

Цитата:
лучшее средство от насморка

вообще-то в оригинале -- "от перхоти"...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 10:54 13-03-2008 | Исправлено: akaGM, 11:05 13-03-2008
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, с покупки нового компа все и началось, а так мне и на CVF было не плохо. А гуй просто в QuickWin - обычные меню и диалоги по Бартеневу, да и то только из-за того, что свою программу пришлось на сторону передавать, а времени совсем не было. Мне самой без gui куда проще - проектик в UltraEdit с набором текстовых файлов с ИД и ссылками на бесформатные + один тектовый управляющий файл - и вперед. За ссылки спасибо - гляну (но покупка - это не для нас. Только варез.) Осталось еще DPlot приспособить.
       
    Eclipse (http://www.eclipse.org/) и тот фортран, который к ней прикручивается (в качестве бесплатной альтернативы IVF+VS) никто не пробовал использовать (+ туда же бесплатный DPlot Jr  )?http://www.dplot.com/other.htm#junior

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 13:21 13-03-2008 | Исправлено: AZA_N, 13:32 13-03-2008
akaGM

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

Цитата:
Eclipse

лучше в другом топе спроси:
http://forum.ru-board.com/topic.cgi?forum=33&topic=7860#1

Цитата:
но покупка - это не для нас. Только варез

ха
его просто так фиг поимеешь, несколько лет ищу...
http://forum.ru-board.com/topic.cgi?forum=35&topic=27293#1

Цитата:
UltraEdit

EditPlus!

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 13:37 13-03-2008
KChernov



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

Цитата:
его просто так фиг поимеешь, несколько лет ищу...

В принципе на виртуалке им можно пользоваться бесконечно и на триале

Всего записей: 2492 | Зарегистр. 20-04-2004 | Отправлено: 14:41 13-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
это программа "на вынос", ещё там и ВМ ставить? -- не, чур меня, чур...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 14:51 13-03-2008
pir0texnik2



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

Код:
 
subroutine ye_circ_ii (precis,a_,Li_,Di_,k_,k2_,pl2_,plk2_,qlk2_,p_,q_,M_max,ye_circ_out)
!DEC$ ATTRIBUTES DLLEXPORT :: YE_CIRC_II
 
include 'link_fnl_shared.h'
 
USE QDAG_INT
USE QDAGS_INT
 
Implicit none
 
COMMON a,Li,Di,k,k2,pl2,plk2,qlk2,m, q,p
         
        complex*16 ye_circ_out
 
        Integer, intent(in) :: p_,q_,M_max
        real*8 , intent(in) :: a_,Li_,Di_,k_,k2_,pl2_,plk2_,qlk2_
 
        aa = dexp(-k); bb= 1.0d0;
         CALL D_QDAGS (ReYepp1,aa,bb,ReYe1)
 

Где ReYepp1:
 

Код:
 
real*8 function ReYepp1 (x1)
 
COMMON  a,Li,Di,k,k2,pl2,plk2,qlk2,m, q,p
real*8  a,Li,Di,k,k2,pl2,plk2,qlk2
integer p,q,m
 
real*8,  INTENT(IN) ::  x1
 
real*8 H22, sqt, x, plk2x2
 
   if ((dabs(x1)<10.0d-20).or.(dabs(x1)==1.0d0)) then  
      ReYepp1 = 0.0d0
   else
      x = -dlog(x1)
      plk2x2 = plk2+x*x
      call H2(m,a*x,H22)
    sqt=DSQRT(k2-x*x)  
 
      ReYepp1 = 1.0d0/H22/x*     &
       (                        &  
         pl2*x*x*((-1.0d0)**p)*dsin(Li*sqt)/sqt/(plk2x2)/(plk2x2)-  &
          0.5d0*Li*plk2/(plk2x2) &
       ) /x1
   endif
END

 
где H2(m,a*x,H22):
 

Код:
 
subroutine H2 (m,x,out)
USE BSJ1_INT
USE BSY1_INT
 
real*8,  INTENT(OUT) :: out
integer, INTENT(IN)  :: m
real*8,  INTENT(IN)  :: x
real*8 Jm,Ym, besseljn,besselyn
 
   if (m==0) then  
      out = D_BSJ1(x)*D_BSJ1(x) + D_BSY1(x)*D_BSY1(x)  
   else
       Jm = besseljn(m-1,x)-besseljn(m+1,x)
       Ym = besselyn(m-1,x)-besselyn(m+1,x)
 
      out = 0.25d0*( Jm*Jm + Ym*Ym )                
   end if
END

 
где besseljn(m,x) и besselyn(m,x):
 

Код:
function besseljn(n, x)
USE BSJ0_INT
USE BSJ1_INT
implicit none
 
real*8 besseljn
real*8,  INTENT(IN) ::  x
integer, INTENT(IN) ::  n
 
integer i
real*8 a
real*8 b
real*8 tmp
 
    SELECT CASE (n)
    CASE (0)  
        besseljn = D_BSJ0(x);
    CASE (1)  
        besseljn = D_BSJ1(x);
    CASE (2)
        if( x==0 ) then  
           besseljn = 0.0d0
        else
           besseljn = (2.0d0*D_BSJ1(x)/x-D_BSJ0(x));
        endif
    CASE (3:)
        if( x<10d-20 ) then
            besseljn = 0.0d0;
        else
            a = D_BSJ0(x);
            b = D_BSJ1(x);
                do i=1,n-1,1
                    tmp = b;
                    b = 2.0d0*i/x*b-a;
                    a = tmp;
                enddo
            besseljn = b;  
        endif
    END SELECT
 
    return
end function
!=================================
function besselyn(n, x)
USE BSY0_INT
USE BSY1_INT
implicit none
 
real*8 besselyn
real*8,  INTENT(IN) ::  x
integer, INTENT(IN) ::  n
 
integer i
real*8 a
real*8 b
real*8 tmp
 
    SELECT CASE (n)
    CASE (0)  
        besselyn = D_BSY0(x);
    CASE (1)  
        besselyn = D_BSY1(x);
    CASE (2:)
        a = D_BSY0(x);
        b = D_BSY1(x);
            do i=1,n-1,1
               tmp = b;
               b = 2.0d0*i/x*b-a;
               a = tmp;
            enddo
        besselyn = b;  
    END SELECT
 
    return
end function

 
И все это вызывается из билдера вот так:
 

Код:
HINSTANCE HIns=NULL;
 
HIns=::LoadLibrary("ye_circ.dll");
sub_fortran_1 ye_circ_ii;
ye_circ_ii=(sub_fortran_1)(GetProcAddress((HMODULE) HIns,"YE_CIRC_II"));
 
 complex<double> Y = 0;
 double precis = 0.005;
 ye_circ_ii (&precis,&a,&Li,&Di,&k,&k2,&pl2,&plk2,&qlk2,&p,&q,&II,&Y);
 

 
а прототип процудцры выглядит так :

Код:
 
typedef void (__stdcall *sub_fortran_1)(double*,const double*,const double*,const double*,const double*,const double*,const double*,const double*,const double*,const int*,const int*,const int*,complex<double>*);
 

 
все переменные проверено совпадают по типу и по кол-ву...
 
в отладчике в студии - это все хорошо видно, что dll загружается нормально и с правильными значениями, но потом в процессе счета получаесят какой-то загадочный косяк... :(
 
более того, от чего становится совсем грусно, все работало в CVF 6.6, со старым IMSL, но захотелось нового кимпилятора и нового ИМСЛ.... и вот. :-)

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 16:02 13-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
посмотри, не обратный ли у тебя стек?
саба в Форе дефолтная, а в Сях ты используешь __stdcall, -- в этом может быть дело...
т.к. это разные соглашения...
что-то типа
!DEC$ ATTRIBUTES STDCALL, DLLEXPORT
и
__declspec(dllimport) __stdcall
 

Код:
COMMON a,Li,Di,k,k2,pl2,plk2,qlk2,m, q,p  

а где эти переменные описаны?
 
использовал бы ты родную DQDAGS, а не универсальный интерфейс...
+
а ты уверен, что Сишный комплекс хранится аналогично Форовскому в памяти?
(это, скорее, уже мой вопрос к тебе... никогда не использовал "чужие" комплексы)

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 18:09 13-03-2008
pir0texnik2



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

Цитата:
 
посмотри, не обратный ли у тебя стек?  
саба в Форе дефолтная, а в Сях ты используешь __stdcall, -- в этом может быть дело...  
 

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

Цитата:
 

Код:
Код:COMMON a,Li,Di,k,k2,pl2,plk2,qlk2,m, q,p  

а где эти переменные описаны?
 

 
чуть ниже, я не включил         
 

Код:
Integer p,q,m
real*8  a,Li,Di,k,k2,pl2,plk2,qlk2  


Цитата:
 
использовал бы ты родную DQDAGS, а не универсальный интерфейс...
 

вот мне интересно, а чем они отличаются?? (лирическое отступление)Как же все-таки хорошо, что в С++ есть шаблоны.  
Теперь процедурки глючат уже по другому, когда поменял на DQDAG* ...
 
я сперва не смог слинковать программу с  DQDAG*! не находились эти ф-ции...
сейчас сделав USE numerical_libraries все вроде заработало, хотя раньше так не линковалось, подозреваю, что проблема где-то в языковых настройках фортрана...
 

Цитата:
а ты уверен, что Сишный комплекс хранится аналогично Форовскому в памяти?  
(это, скорее, уже мой вопрос к тебе... никогда не использовал "чужие" комплексы)

не уверен, но во-1 я пока до этого шага еще не дошел, во-2, когда дело было в CVF все было очень нормально, так, что хочется верить, что все будет хорошо...
это все мое творчество рабочее... в CVF с его IMSL... вот заставить бы его в интеле с новым IMSL заработать...

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 19:30 13-03-2008
akaGM

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

Цитата:
вот мне интересно, а чем они отличаются??

да хрен его знает как работают процедуры с переменным числом аргументов да ещё в миксед-лангуаге...
вернее, с опциональными аргументами...

Цитата:
CVF все было очень нормально

о! может вот это поможет:
 
/iface:cvf
 
полная обратная совместимость с CVF, проверено...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 20:26 13-03-2008 | Исправлено: akaGM, 20:29 13-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а вот ещё что я надумал...
 
1)  раз уж у тебя всё насквозь "девяносто-пятое", то может вместо крутого комона
написать отдельный модуль:
 
module my_old_COMMON
  real*8  a,Li,Di,k,k2,pl2,plk2,qlk2  
endmodule
 
и везде его поюзать?
 
2) дописать в subroutine ye_circ_ii ()
интерфейс
 
interface
 real*8 function ReYepp1(x1)
!DEC$ ATTRIBUTES STDCALL :: ReYepp1
!DEC$ ATTRIBUTES REFERENCE :: x1
    real*8 x1
 end function ReYepp1
end interface
 
3) меня учили, что выражения типа
Код:
 
 ReYepp1 = 1.0d0/H22/x*     &
       (                        &  
         pl2*x*x*((-1.0d0)**p)*dsin(Li*sqt)/sqt/(plk2x2)/(plk2x2)-  &
          0.5d0*Li*plk2/(plk2x2) &
       ) /x1

 -- потенциальный источник ошибок (переполнение, потеря точности етц), из-за невозможности "удержать" промежуточный результат
перепиши, не ленись, авось, это именно тот самый случай...
 

Код:
real*8 tmp
 tmp = 1.0d0/H22/x
 tmp = tmp * pl2*x*x
 tmp = tmp * ((-1.0d0)**p)
 tmp = tmp * dsin()
...
 ReYepp1 = tmp / x1

в общем, должно быть понятно...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 22:33 13-03-2008
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пасиба всем большое, заработало..
Причину глюков не нашел, просто создал новый проект и вставил туда старый код..
До этого проект был импортирован из CVF - в этом и была наверно причина, только какая - не понятно...

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 13:03 17-03-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
pir0texnik2
небось отключилась вся оптимизация на фиг... всё и заработало...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 13:30 17-03-2008
pir0texnik2



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
может быть.. но я все те опции переключал и сейчас, и тогда... только теперь все работает... теперь уже неохота выяснять, что было причиной.
 
PS А чтобы такого сделать, чтобы программа смогла таки загрузить Core2Duo на 100%, сейчас почему-то даже не смотрся на все выставленные опции оптимизации(расширение для процессоров, распараллеливание и тд.) загрузка в пике 50%...

Всего записей: 173 | Зарегистр. 27-02-2008 | Отправлено: 16:17 18-03-2008
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Работа с Intel Fortran через Visual Studio 2003 и не только


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru