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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

akaGM

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

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

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


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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Отвечаю vaulin'у
 
Это не функция, а подпрограмма
CALL CPU_TIME (TIME) - аргумент - результат
Источник: А.М.Горелик. Программирование на современном Фортране. Финансы и статистика 2006 стр.207

Всего записей: 11 | Зарегистр. 25-11-2008 | Отправлено: 16:03 12-03-2009 | Исправлено: alsag1, 22:42 30-06-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну Интелы и замутили, крутая эта штука IPO
не мог понять в чём дело: теряю производительность в разы, при использовании .lib
а если собирать одним здоровенным файлом, то всё тип-топ, летает...
/Qip рулит...

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 15:48 18-03-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AZA_N
 
как твои дела с поиском [немонструозных]сплайнов на неравномерной сетке взамен IMSL'ных?
я тут словил схожую проблему, связ. с интегрированием и решил её, используя SLATEC, (правда, не cubic, а parabolic)...
 
кстати, к какой категории (в обозначениях GAMS) твоя проблема относится?
иногда это оч. помогает в поисках...
 
моя относилась к H2a1b2 H2a2b2
http://gams.nist.gov/serve.cgi
далее по подразделам...
 
всем расчётчикам рекомендую...

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 21:02 25-03-2009 | Исправлено: akaGM, 21:17 25-03-2009
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, никак (всвязи с новым срочно обрушившимся заданием). За ссылку спасибо. Моя проблема E2a (нужны исходники к п/п типа  QD3DR,DQD3VL (и для 2) из IMSL). Когда дойдут руки, займусь поисками. Но все еще надеюсь, что кто-нибудь уже это проделал и поделится своей находкой. Мне для начала бы и на равномерной сетке подошли бы (были свой программы, но померли вместе с винчестером в то нелегкое время, когда записи на cd еще не было, бумаги и ленты для принтера - тоже, дискеты сыпались, а записи в тетрадку делать было лень).

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

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

Цитата:
За ссылку спасибо, ее бы в шапку.

она там прибита с момента создания топа + ты сама вправе менять шапку...
 
E2a
а конкретнее? т.к. на ГАМCе довольно большой выбор:
http://gams.nist.gov/serve.cgi/Class/E2a
+
а NAG смотрела? тот ещё фрукт (слава богу, перестал быть безальтернативным)
так или иначе: удачи!

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 21:35 25-03-2009 | Исправлено: akaGM, 21:40 25-03-2009
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM, уже увидела и даже свой предыдущий пост поправила (только на кнопку отправить нажать забыла). А что мне толку от NAG, мне ведь тексты нужны. А без текстов мне и в IMSL хорошо (не перевелся еще варез на земле Русской).
Конкретнее - вычислять значения на трехмерной нерегулярной сетке (иногда производные и интегралы), значения и производные на двухмерной сетке.

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 22:09 25-03-2009 | Исправлено: AZA_N, 22:15 25-03-2009
popovda

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет! Возникла задача вызывать из Fortran-программы функции статической C-библиотеки. Решил заодно разобраться с iso_c_binding. Накидал тестовое приложение, чтобы понять что и как надо передавать. Вроде всё делаю по мануалу, но правильно срабатывает вызов только первой функции show. Остальные  выводят на экран нули и возвращают неверный результат. Может кто подскажет в чём дело? Компилятор Intel Fortran 10.1 и VS 2005.  
 
Код C-библиотечки:

Код:
 
#include <stdio.h>
// Вот она работает
void  show(int x){
    printf("Value = %d\n",x);
}
// А эти нет
double copyVal(double A){
    printf("C: A = %f\n",A);
return A;
}
 
double getSum(int sz,double Arr[]){
int k = 0;
double Sum = 0;
 
printf("C: sz = %d\n",sz);
printf("C: \n");
for(k = 0; k<sz; k++){
    printf("\t %f\n",Arr[k]);
}
 
for(k = 0; k<sz; k++)
    Sum+=Arr[k];
return Sum;
}
 

 
И Фортрановский код:

Код:
 
module mod_CData
use, intrinsic :: iso_c_binding;
 
implicit none;
 
interface
    !void show(int x)
    subroutine Show(x) bind(C,name = "show")
        use, intrinsic :: iso_c_binding;
        implicit none;
         
        integer(c_int), value, intent(in) :: x;
    end subroutine Show;
     
    !double getSum(int sz,double *Arr)
    real(c_double) function GetSum(sz, A) bind(C,name="getSum")
        use, intrinsic :: iso_c_binding;
        implicit none;
         
        integer(c_int), value, intent(in) :: sz;
        real(c_double), dimension(:) :: A;
    end function GetSum;
     
    !double copyVal(double A)
    real(c_double) function CopyVal(x) bind(C,name = "copyVal")
        use, intrinsic :: iso_c_binding;
        implicit none;
         
        integer(c_double), value :: x;
    end function CopyVal;
end interface;
 
 
end module mod_CData
 
 
 
 
program Test_binding
 
use mod_CData;
integer(4), parameter :: M = 10;
integer(4) :: test_val;
 
real(8) :: res;
real(8),target,dimension(1:M) :: Arr;
real(8),pointer,dimension(:) :: pArr;
 
test_val = 10;
 
call Show(test_val);
 
 
print *,"c_int = ",c_int;
print *,"c_double",c_double;
 
 
 
Arr = (/10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0/);
 
print *,'Arr:'
print *,Arr;
pArr => Arr;
 
res = GetSum(size(Arr), pArr);
 
print *,'Res = ',res;
 
print *,'CopyVal = ', CopyVal(dble(100.0_8));
 
read(*,*);
end program Test_binding
 
 
 
 
 
Может кто поможет решить проблему. В идеале мне надо из C-шных оберток вызывать C++-код GUI, принимающий параметры задачи и выводящий решения на каждом шаге.
 
Если у кого-то будет желание посмотреть проект и его работу - то он доступен по ссылке: http://stream.ifolder.ru/11315393
 
 
 
Добавлено:
Решено. Массивы - функции принимают их как указатели в C, значит надо передавать c_loc(Array). На forum.vingrad.ru выложил рабочий пример.

Всего записей: 5 | Зарегистр. 24-07-2007 | Отправлено: 21:43 29-03-2009 | Исправлено: popovda, 21:48 29-03-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popovda
ни за что не поверю, что это не работает:
Код:
!double getSum(int sz,double *Arr)
    real(c_double) function GetSum(sz, A) bind(C,name="getSum")
        use, intrinsic :: iso_c_binding;
        implicit none;
         
        integer(c_int), value, intent(in) :: sz;
        real(c_double) :: A(sz)
        !DEC$ ATTRIBUTES REFERENCE :: A

    end function GetSum;

при этом не нужны никакие доп. указатели и c_loc(Array)
 
AZA_N
тогда глянь в сторону библиотеки PORT (это выжимка из всего самого лучшего некоммерческого +  
некоторые части, кот. входят в коммерческие библиотеки, оставаясь при этом некоммерческими)...
я перешёл на неё после/вместо NAGa очень много лет назад и до сих пор юзаю и не жалею...

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 17:13 30-03-2009 | Исправлено: akaGM, 18:22 30-03-2009
ZZPot



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Народ, помогите найти компилятор Fortran 77. Возникла задача востановит старые программы. Изначально все писалось под ЕС ЭВМ, точнее сказать не могу, аналог PDP-11 (вероятно). Последний раз редактировалось в 91 г. и говорят (!) работало даже на 386-ых (!!!).  
Судя по описанию команд, компилятор похож на DEC Fortran, как здесь  
_http://www.public.iastate.edu/~fortran/decfortran-axp/f77.html
Если вдруг у кого такой завалялся - поделитесь пожалуйста
 
На всякий случай привожу кусок кода:  

Код:
 
        SUBROUTINE BBOD
      COMMON/AUPR/N12,N25,NM,ND,KH,KM,KS,N4,N5,N6,N7,NG,RR(1500),R(152)
      COMMON/MEMOR/N10,N11,N17,N21,N22,N23,N99,NX,M6,N7Z21,NFLCL,KONEC
     1 ,M1(13),M2(13),M3(13),M4(26),DM1(100)
        DOUBLE PRECISION DM1
        DIMENSION M5(9)
                IF(NFLCL.NE.2) GOTO 10000
                        IFI=44
                        RR(N4-1)=0.
        GOTO 21900
10000           IF(NG.NE.0)  GOTO 20500
        OPEN(UNIT=3,NAME='AUPRUD.IN',TYPE='OLD')
        TYPE *,'  AЛГОРИТМ ДИФФЕРЕНЦИАЛЬНО-АНАЛИТИЧЕСКОГО МОДЕЛИРОВАНИЯ'
     1,' ДИНАМИЧЕСКИХ СИСTEM'
11000   REWIND 3
        TYPE *,'    ------------------------------------'
        CLOSE (UNIT=4)
        OPEN(UNIT=4,NAME='AUPRUD.OUT',RECORDSIZE=133,TYPE='NEW',SHARED)
11300   TYPE *,'  З A Д A H И E'
        CALL MAPKEP(0)
        READ (3,*,ERR=11100)(M1(J),J=1,N7)  
    ...

 

Всего записей: 14 | Зарегистр. 16-10-2006 | Отправлено: 22:47 31-03-2009
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZZPot
Попробуйте просто использовать опцию компилятора совместимости с Фортраном77.
У Компаковского фортрана такая точно есть.

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 22:59 31-03-2009
AZA_N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZZPot, 1) в IVF11 нужно включить use fixed format, enable fortran 66 semantics, common element alignment 8bytes (вроде так?) и тогда Ваш фрагмент замечательно компилируется (если в него добавить недостающие метки с continue и  return end). 2) Если очень хочется старые компиляторы , MS-DOS+Win3.1, то у меня завалялись MS Fortran 5.1 86-90гг (6 дискет) FortranPowerStation1.0 93г(3 дискеты). Но, imho, первый путь лучше, т.к. настроек у IVF ну просто завались, и работать exe на нормальных (а не 80-90гг персоналках или виртуалке) будут нормально (но, наверное, придется повозиться).

Всего записей: 853 | Зарегистр. 10-11-2007 | Отправлено: 23:38 31-03-2009 | Исправлено: AZA_N, 23:54 31-03-2009
ZZPot



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
AZA_N
спасибо за наводки, попробую

Всего записей: 14 | Зарегистр. 16-10-2006 | Отправлено: 00:04 01-04-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZZPot
если претит возиться с пираткой, то возьми
 
* g77/g95 (Linux/Win)
* gfortran (Linux/Win)  
 
из шапки (ссылки в начале каждой страницы этого трейда)
лично я рекомендую gfortran

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 14:20 01-04-2009
MZN

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

Цитата:
akaGM


Цитата:
тогда глянь в сторону библиотеки PORT (это выжимка из всего самого лучшего некоммерческого +  
некоторые части, кот. входят в коммерческие библиотеки, оставаясь при этом некоммерческими)...  
я перешёл на неё после/вместо NAGa очень много лет назад и до сих пор юзаю и не жалею...  

 
А где найти этот PORT?

Всего записей: 1715 | Зарегистр. 23-10-2004 | Отправлено: 21:17 01-04-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MZN
я ссылки в шапке сам себе писал?
http://gams.nist.gov/serve.cgi/Package/PORT
http://www.netlib.org/port/index.html

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 21:25 01-04-2009
Alexikit

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Поногите пожалуйта, разбираю чужую программу. Там есть вызов CALL UNUSEDQQ(CHECKED), из библиотеки DFLIB, не могу нигде найти, что же это за подпрограмма, и что она делает. Заранее спасибо.

Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 08:32 02-04-2009
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexikit
начало всем "ку-ку"-функциям положила М$ в своих компиляторах, кот. плавно перетекли в ДЕК. как правило, это внутренние системные функи, QuickWin'овское расширение, не входящие ни в один стандарт

Код:
UNUSEDQQ
 
! -----------------------------------------------------------------
! Unused Routine -- simply returns, used to avoid "unused" warnings
! -----------------------------------------------------------------
      INTERFACE
        SUBROUTINE UNUSEDQQ[C,REFERENCE,VARYING,ALIAS:"__FFunusedqq"]()
        END SUBROUTINE
      END INTERFACE

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 13:07 02-04-2009 | Исправлено: akaGM, 13:09 02-04-2009
Alexikit

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM  
Спасибо, если я правильно поняла, вставляется для избежания ошибок, а что будет если все же возникнет ошибка? Может вопрос и тупой, но мои познания в програмировании не глубоки.

Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 14:42 02-04-2009
akaGM

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

Цитата:
если я правильно поняла, вставляется для избежания ошибок

не ошибок, а подавления "варнингов", т.е. предупреждений...
типа "переменная объявлена, но не используется"

Код:
logical checked
!
   print *, 'чё-то тут делаем...'
!  call UNUSEDQQ(checked)
!
end

на таком коде нормальный компилятор должен выдать соответствуюшее предупреждение,
если ты не предпринимала спец. действий по их отключению...
например, в новых Интел-компиляторах (в DF и CVF по-моему тоже)
имеется след. свитч
 
/warn:[no]unused
 
т.е. ты можешь спокойно выбросить все колы call UNUSEDQQ() и управляться только этим свичом...

Всего записей: 24055 | Зарегистр. 06-12-2002 | Отправлено: 15:58 02-04-2009 | Исправлено: akaGM, 21:44 02-04-2009
Alexikit

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

Всего записей: 79 | Зарегистр. 01-04-2009 | Отправлено: 08:32 03-04-2009
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум 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