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

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

Модерирует : 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

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

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на ФОРТРАН, как общего так и конкретного характера.
Постарайтесь дать как можно больше информации о возникшей проблеме -- это в конце концов в ваших же интересах чтобы вам помогли...

прежде чем просить помощи в задании
платное решение задач

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


если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим
 
просьба к пишущим и отвечающим все большие листинги оформлять тегом more
и отключать графические смайлики при размещении фортран-кода

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 18:11 14-01-2007 | Исправлено: akaGM, 09:47 01-03-2020
akaGM

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

Цитата:
FPS4 под win7 не линкует

 
real a(1)
write (*,*) size(a)
end
 
а так?
 
Добавлено:
хотя для ПоверСтатион ответ очевиден...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 13:54 16-08-2012
BagaBaga

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вообще-то, он меня слегка удивил

Код:
 
1
 

 
Или он возвращает не в байтах?

Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 16:26 16-08-2012
unni



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Итак, продолжим (начало на 225 стр. внизу).
 
Код для шаблона dll-ки на Fortran я нашёл:
 
logical(BOOL) function DllMain( hinstDll, fdwReason, lpvReserved )
!DEC$ ATTRIBUTES DEFAULT, DECORATE, STDCALL, ALIAS: "DllMain" :: DllMain
USE IFWINTY  
IMPLICIT NONE
 
integer( HANDLE ), intent( in ) :: hinstDll
integer( DWORD ), intent( in ) :: fdwReason
integer( LPVOID ), intent( in ) :: lpvReserved
 
    select case ( fdwReason )
     
        ! DLL проецируется на адресное пространство процесса
        case ( DLL_PROCESS_ATTACH )                    
         
            !CreateUserFunction( hinstDll, & mcad_implicitplot3dInfo );
           
        ! создаётся поток  
        case ( DLL_THREAD_ATTACH )
 
        ! поток корректно завершается
        case ( DLL_THREAD_DETACH )
         
         
        case ( DLL_PROCESS_DETACH )
         
             
    end select
 
    DllMain = .TRUE.
 
end function
 
В свойствах проекта установил имя точки входа DllMain и получил предупреждение компилятора при сборке:
 
Debug\SimpleDll.dll : warning LNK4086: entrypoint '_DllMain' is not __stdcall with 12 bytes of arguments; image may not run
 
Что явно указывает на неправильное описание трёх DWORD параметров функции. Где я ошибся в коде?
 
Поскольку шаблон dll у меня есть, то следующий вопрос: Покажите пример на Фортран  как обратиться к функции, которая находится в сторонней dll, если есть такая возможность, то меня больше интересует динамический вариант вызова функции: LoadLibrary(), GetProcAddress(), FreeLibrary(). Dll считается собранной на C-компиляторе.

Всего записей: 31 | Зарегистр. 12-09-2006 | Отправлено: 16:32 16-08-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BagaBaga
да это я сглупил, оно кол-во элементов возвращает, это не sizeof
 
Добавлено:
 
unni
 

Код:
use kernel32
implicit none
 
! тут интерфейс к твоей функе со всеми необходимыми С-атрибутами...
interface
  function MyFunc(i)
  integer MyFunc
  integer, intent(in) :: i
  end function MyFunc
end interface
 
 
pointer(pMyFunc, MyFunc)
 
integer(HANDLE) :: dllH
integer(BOOL) :: retBool
integer ret
 
dllH = LoadLibrary ("mydll.dll"C)
if (dllH == NULL) then
  stop
end if
 
pMyFunc = GetProcAddress(dllH, "MyFunc"C)
if (pMyFunc == NULL) then
  stop
end if
   
ret = MyFunc(10)
   
retBool = FreeLibrary(dllH)
 
end

пойдёт?

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 16:42 16-08-2012
XPEHOMETP

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

Цитата:
меня больше интересует динамический вариант вызова функции: LoadLibrary(), GetProcAddress(), FreeLibrary().

Пардон, это, скорее, к Бейсику. На нем такая штука проходит на ура. Фортрановские линкеры предпочитают, чтобы их кормили библиотеками для привязки к Dll, кроме линкера от Silverfrost FTN95. У этого компилятора мощный рантайм-модуль, вот он, похоже, ДЛЛ-ки хватает на ходу, как бейсик. Но, однако, тормозной он, FTN95.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 16:57 16-08-2012
akaGM

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

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 17:02 16-08-2012
BagaBaga

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вставил sizeof в подпрограмму с PGL1. Откомпилировал и под nix, и под win. Итог: ничего интересного (могу приложить вывод, ну а смысл). Сравнение "количеств" построчно показывает одни и те цифры ... вплоть до момента оставнова под nix (в win- вывод продолжается, да сравнивать не с чем).
 
Добавлено:
Убрал метку обработки ошибки, получил вот такое:

Код:
 
forrtl: severe (36): attempt to access non-existent record, unit 4, file /usr/ora/models/uam/crossx/MOD4
Image              PC        Routine            Line        Source              
test               0815A5A9  Unknown               Unknown  Unknown
test               08159325  Unknown               Unknown  Unknown
test               08118E81  Unknown               Unknown  Unknown
test               080E050E  Unknown               Unknown  Unknown
test               080DFDB0  Unknown               Unknown  Unknown
test               080F760E  Unknown               Unknown  Unknown
test               080F6186  Unknown               Unknown  Unknown
 
Stack trace terminated abnormally.
 

Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 17:13 16-08-2012 | Исправлено: BagaBaga, 17:34 16-08-2012
akaGM

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

Цитата:
Вставил sizeof в подпрограмму с PGL1.
ну дай код этой п/п и её вызов
кстати, где (в какой ОС) создавался файл MOD4?
может ты нарвался на несоответствие форматов...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 17:38 16-08-2012 | Исправлено: akaGM, 17:40 16-08-2012
BagaBaga

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересно, добавка опции  -assume byterecl к ifort (это я собезянничал с какого-то форума) "решает" эту проблему: программа теперь запускается (и не рушается на ошибки чтения). Осталось проверить, что считает оно теперь не мусор....
 
mod4 создавался под win (98/Me/xp/2000/7 - под какой виндой создавался конкретно этот файл уже не вспомню) с помощью компилированных FPS4 исходников.
 
Про подпрограмму
Подробнее...
 
Вызов выглядит так
        CALL GLOBRW(.TRUE.,PAR(1,IZAN),KDF(NFSN),KPARS*NNodeS,MDOR)
 
Добавлено:
Дальше шага не считает. Разваливается. Почему-то вместо данных NaN

Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 17:59 16-08-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
странно, ты ж в опене длину записи сам устанавливаешь...
 
на твоём месте я бы вообще забил на записи и читал файл как бинарный неформатный...
 
Добавлено:
 
ну напиши ты вместо строчки
 
DIMENSION PGL1(NPG)  
 
real PGL1(NPG)  
трудно что ли...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 18:10 16-08-2012 | Исправлено: akaGM, 18:22 16-08-2012
unni



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM, спасибо, мне потребуется время на эксперименты.  
 
Вообще, в Руководстве разработчика Mathcad рекомендуют делать промежуточную обёртку на C, а функции линковать статически, но мне бы хотелось попробовать иметь шаблон такой библиотеки без дополнительных промежуточных проектов на другом языке. Всё-таки 10 лет прошло, мне думается, что современный Fortran способен осилить создание таких dll самостоятельно.

Всего записей: 31 | Зарегистр. 12-09-2006 | Отправлено: 18:20 16-08-2012
akaGM

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

Цитата:
mod4 создавался под win
 
Дальше шага не считает. Разваливается. Почему-то вместо данных NaN
а считаешь под Лин?
тогда поиграйся ещё в опене c
open(400, convert='little-endian'...)
или
convert='big-endian'
 
unni
давай, удачи...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 18:23 16-08-2012 | Исправлено: akaGM, 18:24 16-08-2012
BagaBaga

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Странно как-то: если убрать опцию -assume byterecl, то ошибка происходит что с BIG_ENDIAN, что с LITTLE_ENDIAN.
 
convert='LITTLE_ENDIAN' приводит к ошибке в дальнейшем счёте (читает мусор вместо данных)
convert='BIG_ENDIAN' не может пройти проверку  

Код:
 
SUBROUTINE RLABEL(POLE)
      REAL POLE(1024),METKA(3)
      DATA METKA/'GLOB','AL M','ODEL'/
      DO 1 I=1,3
 1    IF(POLE(1020+I).NE.METKA(I))STOP 'This is NOT Model data file!'
      RETURN
      END  
 

что вообще-то правильно (файл создавался на x86)
 
akaGM, что-то я туплю... дай наводку по поводу
>на твоём месте я бы вообще забил на записи и читал файл как бинарный неформатный...

Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 20:25 16-08-2012
akaGM

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

Цитата:
REAL METKA(3)
DATA METKA/'GLOB','AL M','ODEL'/  

это как?
 

Цитата:
дай наводку по поводу

щас, домой приду :)

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 20:40 16-08-2012
BagaBaga

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извиняюсь за тупой вопрос, но обыскался. Каким ключом ifort заставить при появлении в операциях NaN делать останов с сообщением об ошибке. Потому что это действительно ошибка - алгоритм не предполагает NaN.
 
ЗЫ
В самом начале модели было принято решение писать в бинарник метку модели - GLOBAL MODEL. Для чего её разбивали по 4 байта 'GLOB'-'AL M'-'ODEL'. Затем каждый из таких квартетов скармливался в переменную типа real (тупо бинарно, благо он какраз 4 байта). При создании нового файла расчёта такая метка пишется принудительно. При продолжннии старого идёт сравнение этих magic numbers, а в случае несовпадения - отказ
 
PPS
а не может быть у FPS и ifort разные соглашения (дефолтные) по SAVE?

Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 22:05 16-08-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для бинарных файлов как-то так...
 
implicit none
 
  integer*4, parameter :: N = 100
  real*4 ra(N)
  integer*4 i
 
  open(10, file='binfile.bin', status='old', form='binary')
  read(10) ra
  close(10)
 
  do i = 1, N
    write(*,*) ra(i)
  enddo
end
 
 
Добавлено:
кстати, для ifort вместо assume byterecl лучше использовать
/align:rec1byte
 
а для переполнения вроде вот это /GS работает...

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 23:33 16-08-2012 | Исправлено: akaGM, 00:51 17-08-2012
XPEHOMETP

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

Цитата:
Каким ключом ifort заставить при появлении в операциях NaN делать останов с сообщением об ошибке.

А вроде,  NaN предполагался для безостановочного выполнения программы при разных там недоразумениях? Ну, akaGM некие ключики подкинул, но едь это точно не стандартный режим работы...

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 00:38 17-08-2012
terminat0r



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

Цитата:
Извиняюсь за тупой вопрос, но обыскался. Каким ключом ifort заставить при появлении в операциях NaN делать останов с сообщением об ошибке. Потому что это действительно ошибка - алгоритм не предполагает NaN.  

 
-fpen где n=0,1,3
также смотреть -ftrapuv

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 01:41 17-08-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
-ftrapuv
это не пускать неинициализированные переменные что ли?
в IFе вроде нет такого, есть только /Qtrapuv

Всего записей: 24112 | Зарегистр. 06-12-2002 | Отправлено: 02:00 17-08-2012
Andrew_1231

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток!  
Пишу на Intel Visual Fortran 11.0 в среде VS 2008/ Ось Win 7.  
При отладке кода программы с помощью Debug> Step Into......  
для пошагового выполнения программы выдает окно с Кодом в каком-то непонятном виде..  
(очень похоже на язык С#{как будто он его перевел} или асемблер,хотя код-то фортрановский),подскажите пожалуйста,как настроить этот Visualizer или еще что(может так проявляются ошибки интеграции IVF в VS 2008 ?-хотя при моём довольно длительном пользовании других не было...), так,чтобы был виден именно код на Фортране,  
курсор выделял В ЭТОМ КОДЕ строку и выполнялись строки пошагово. Заранее большое спасибо за пояснения.

Всего записей: 11 | Зарегистр. 17-08-2012 | Отправлено: 11:24 18-08-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru