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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
и отключать графические смайлики при размещении фортран-кода

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



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

Цитата:
А это сработает если у меня комплексные массивы с размерностями>3?  

Подозреваю что должно, могу попробовать завтра (сегодня в разъездах, а на планшете писать не могу себя заставить, терпеть не могу этого делать
 

Цитата:
Я помню когда-то и обыкновенному ncdump радовался когда с этим форматом впервые столкнулся  

Было время...  Вообще имхо NCO это очень удобно, но опять же, как сказал akaGM - всё это целе/задаче зависимо. Лично я их использую постоянно.
 
akaGM
Абсолютно согласен, для внутренних целей/небольших групп обычно вполне достаточно минимума, опять же не надо устанавливать дополнительных библиотэк итд итп.  Один плюс, который пожалуй стоит упомянуть который не относится к распространению данных и прочей шелухе, но который реально удобен - возможность объявлять бесконечные размерности и писать туда по мере надобности.  Т.е. скажем есть у вас что-то что обсчитывает задачу во времени, объявляем массив типа VAR1[I,J,T] где T - время и "бесконечная размерность" и туда потом можно дописывать по мере надобности. Можно открывать и закрывать файл, итд.  Опять же, понятно что всё это реализуется по надобности самостоятельно.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 21:13 22-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да, конечно, это правильный подход для обработки больших объёмов неоднородных данных, тем более если проект выходит за рамки 1-2-х разработчиков...
главное, чтоб объём кода "общения" с форматом не превысил код самой задачи :)
 
кстати, на ум пришло сходство с форматом нотебук из Математика, а там ещё и код хранится...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 01:48 23-12-2011 | Исправлено: akaGM, 02:07 23-12-2011
terminat0r



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

Цитата:
Подозреваю что должно, могу попробовать завтра  

В принципе , мне неловко просить, тем более праздники на носу... Только если будет вдохновение
 
akaGM

Цитата:
главное, чтоб объём кода "общения" с форматом не превысил код самой задачи  

lol, весьма существенное замечание, но в принципе можно написать и весьма абстрактный модуль который пригодится и  дальнейшем.
 
2all
любопытный документик, некоторые моменты спорные, но особенно интересно будет наверное новичкам и " f77-монстрам"
http://github.com/qsnake/qsnake/wiki/Fortran-best-practices
 
немного 'бaйсик'  кода  http://github.com/astrofrog/fortranlib

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 22:58 23-12-2011 | Исправлено: terminat0r, 09:41 24-12-2011
akaGM

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

Цитата:
любопытный документик... но особенно интересно будет наверное новичкам и "f77-монстрам"
я не знаю ктО я, наверное, всё-таки ближе к первым по 90/95, но мне понравилось...
повесил в шапку...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 11:10 24-12-2011 | Исправлено: akaGM, 11:14 24-12-2011
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я в сомнении. Assumed-shape arrays, кажись, вывели из стандарта, и вообще мне вариант типа C(:, :, i) никогда не нравился. А от записи
 
integer :: u
open(newunit=u, file="log.txt", status="old")
 
у меня вообще поджилки трясутся. Объявляем переменную u, не даем ей никакого значения, а потом внаглую используем. Результат? Я бы не рискнул никогда, пусть мне плешь проедят конкретными примерами. Ибо - оно поперек всех традиций.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 12:47 24-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPEHOMETP
а что?
newunit()
 returns lowest i/o unit number not in use
 
по-моему, нужная вещь...
смущает только написание как правостороннее присваивание...
хотя ведь мы -- "монстры 66/77"?
а то пишут, гады, куда ни попадя, то в 5-ый, то в 6-ой канал... :)

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 12:54 24-12-2011 | Исправлено: akaGM, 13:45 24-12-2011
terminat0r



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

Цитата:
Я в сомнении. Assumed-shape arrays, кажись, вывели из стандарта

Вы наверное assumed-size имели ввиду? Они так обьявляются   a(*)
Нет, они живут и в 2008ом, но пользоваться не рекоммендуется так как компилятор не знает ничего о размерах массива. Но я соглашусь пожалуй и о сомнениях с assumed-shape, ведь не так сложно передать и размер массива, а разница есть для компилятора?
 

Цитата:
и вообще мне вариант типа C(:, :, i) никогда не нравился.

А я это использую. При больших размерах массивов разница между C(:, :, i)  и C(i,:, :) заметна
Хотя я смутно помню, были заморочки с интеловским компилятором с этим  когда-то...
 
akaGM

Цитата:
по-моему, нужная вещь...
смущает только написание как правостороннее присваивание...

newunit уже Ы т.е. СтандартЪ панимаешь!
 

Цитата:
а то пишут, гады, куда ни попадя, то в 5-ый, то в 6-ой канал... :)

это да :)!

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 15:05 24-12-2011 | Исправлено: terminat0r, 15:38 24-12-2011
akaGM

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

Цитата:
СтандартЪ панимаешь!  

так когда это ещё 2008 начнут поддерживать-то...
 
я человек наблюдательный, поэтому хочу посмеяться над тобой...
в смысле весело когда ты увидел свой массив не в скобках, а в новогодней шапке ;)
граф.смайлы маздай

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 21:08 24-12-2011 | Исправлено: akaGM, 01:54 25-12-2011
SkyFlyStaR

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот мои наработки, выдает ошибку - access violation на строках 150 и 92
Код:
 
    program razb
    use dfimsl
    implicit none
 
    ! Variables
    integer::i,y,n,ig,jg,m,m0,j
    real(8)::ll=-1.0,ul=1.0
    real(8)::F,G,T
    external F,G,T
    real(8)::e=1e-4
    real(8)::tau(3),q(3),a(8)
    real(8)::f1,x,s1,s2,hg,pi,xb,xj,temp,f2,xg
    real(8)::errabs=1e-10,errrel=1e-10,errest
    ! Body of razb
    pi=acos(-1.0)
    tau(1)=-0.7745966692
    tau(2)=0.0
    tau(3)=-tau(1)
    q(1)=0.5555555556
    q(2)=0.8888888888
    q(3)=q(1)
    do i=1,8,1
        do j=1,3,1
            a(i)=a(i)+F(tau(j))*T(tau(j),i)/sqrt(1-tau(j)*tau(j))*q(j)
        enddo
        if (i==1) then
            a(i)=a(i)/pi
        else  
            a(i)=a(i)*2/pi
        end if
    enddo
    do i=1,8,1
        f1=f1+a(i)*T(tau(3),i)
    enddo
    print*,'F~=',f1
    do i=1,8,1
        call DQDAGS(G,ll,ul,errabs,errrel,a(i),errest)
        a(i)=a(i)*2/pi*T(tau(3),i)
    enddo
    a(1)=a(1)/2
    do i=1,8,1
        f2=f2+a(i)
    enddo
    print*, 'f(x)=',f2
    end program razb
 
    real FUNCTION T(x,i)
        implicit none
        real(8)::x,TT(8)
        integer::i,j
        if (i==1) then  
            TT=1
        else if (i==2) then
            TT=x
        else
        do j=3,i,1
            TT(j)=2*x*TT(j-1)-TT(j-2)
        enddo
        end if
        T=TT(i)
    end FUNCTION T
 
    real FUNCTION F(x)
        implicit none
        real(8)::x
        F=exp(-x)
    end FUNCTION F
 
    real(8) FUNCTION G(x,i)
        implicit none
        real(8)::x
        real(8)::TT(8)
        integer::i,j
        if (i==1) then  
            TT(i)=1
        else if (i==2) then
            TT(i)=x
        else
        do j=3,i,1
            TT(j)=2*x*TT(j-1)-TT(j-2)
        enddo
        end if
        G=exp(-x)*TT(i)/(1-sqrt(x*x))
    end FUNCTION G

Уже голову сломал, не пойму, где ошибка
Проблема явно в DQDAGS и вызове функции G

Всего записей: 6 | Зарегистр. 25-12-2011 | Отправлено: 01:50 25-12-2011 | Исправлено: SkyFlyStaR, 01:53 25-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyFlyStaR
даже если скопировать твой код в файло, то получается ровно 84 строчки, так что
Цитата:
access violation на строках 150 и 92
ничего не значит...
это так же ничего не значит, т.к. ошибка может быть где угодно и вызываться рядом причин.
т.к. я не вижу работу с динамической памятью, то предположу, что у тебя нелады с промежуточными данными, так что ищи...
ну и для порядка приведи соответствие типов
 
real(8)::F,G,T
...  
    real FUNCTION T(x,i)
    real FUNCTION F(x)

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 02:13 25-12-2011 | Исправлено: akaGM, 02:22 25-12-2011
SkyFlyStaR

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

Цитата:
даже если скопировать твой код в файло, то получается ровно 84 строчки, так что
Цитата: access violation на строках 150 и 92  
 
ничего не значит...
извини,было много комментов, убрал, а про строки забыл

Цитата:
т.к. я не вижу работу с динамической памятью, то предположу, что у тебя нелады с промежуточными данными, так что ищи...

уже все проверил, мне кажется, что что-то не так в тексте функции G
Цитата:
ну и для порядка приведи соответствие типов

привел

Цитата:
а ещё мне не нравится, что в этом блоке a(i) не инициализировано для первого прохода
Код: do i=1,8,1  
         do j=1,3,1  
             a(i)=a(i)+F(tau(j))*T(tau(j),i)/sqrt(1-tau(j)*tau(j))*q(j)  
         enddo

исправил
Цитата:
Цитата: sqrt(x*x)  
 
это принципиально?

техническая ошибка))) тоже исправил

Всего записей: 6 | Зарегистр. 25-12-2011 | Отправлено: 02:19 25-12-2011 | Исправлено: SkyFlyStaR, 02:24 25-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyFlyStaR
а ещё мне не нравится, что в этом блоке a(i) не инициализировано дo первого прохода
Код:
do i=1,8,1
        do j=1,3,1
            a(i)=a(i)+F(tau(j))*T(tau(j),i)/sqrt(1-tau(j)*tau(j))*q(j)
        enddo

Цитата:
sqrt(x*x)
это принципиально? :)
 
приведи свою функу G() в полное соответствие с интерфейсом DQDAGS()
каков он?
у меня нет IMSL...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 02:22 25-12-2011 | Исправлено: akaGM, 02:26 25-12-2011
SkyFlyStaR

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

Цитата:
приведи свою функу G() в полное соответствие с интерфейсом DQDAGS()  
 каков он?  
 у меня нет IMSL...

вооооот, а это самое интересное)) возможно, он не совпадает с этим интерфейсом наличием 2ой переменной в передаваемых переменных, но она мне необходима
Вот инфа
Цитата:
CALL QDAGS(f, a, b, errabs, errrel, result, errest) Автоматически для решения предоставляется память:
 
• 2500 байт в случае QDAGS;
 
• 4500 байт в случае DQDAGS.
f - пользовательская функция, интеграл которой должен быть вычислен. Имеет вид f(x), где x - независимая переменная. Должна в вызывающей программе получить атрибут EXTERNAL/пользовательская функция
a,b,errabs,errrel - входные параметры типа REAL(4) или REAL(8)
errest,result - выходные параметры типа REAL(4) или REAL(8)

Всего записей: 6 | Зарегистр. 25-12-2011 | Отправлено: 02:34 25-12-2011 | Исправлено: SkyFlyStaR, 02:35 25-12-2011
akaGM

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

Цитата:
Имеет вид f(x), где x - независимая переменная.
ну так х какого типа?

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 02:42 25-12-2011
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyFlyStaRПооверте ваше обращение к DQDAGS на соответствие c:
Код:
 
subroutine dqdags (f, a, b, errabs, errrel, result, errest)  
!dec$ attributes default :: dqdags
      real(kind(1d0)) :: a  
      real(kind(1d0)) :: b  
      real(kind(1d0)) :: errabs  
      real(kind(1d0)) :: errrel  
      real(kind(1d0)) :: result  
      real(kind(1d0)) :: errest  
      interface
         real(kind(1d0)) function f(x)
!dec$ attributes default :: f
         real(kind(1d0)), intent(in) :: x
         end function
      end interface
end subroutine

 
 
Добавлено:
А, уже написали

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 02:48 25-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SkyFlyStaR
ну раз ты свою Ж() напрямую не зовёшь, то спрячь её внутрь корректной F() для передачи в качестве аргумента:
Код:
 
real(8) function argG(x)
  real(8) :: G
  external G
...
   argG = G(x,i)
end function argG
как-то так...
 
Igorr
а, уже тоже написали :)

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 02:50 25-12-2011 | Исправлено: akaGM, 02:52 25-12-2011
SkyFlyStaR

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

Цитата:
ну раз ты свою Ж() напрямую не зовёшь, то спрячь её внутрь корректной F() для передачи в качестве аргумента:
Код:  
 real(8) function argG(x)  
   real(8) :: G  
   external G  
 ...  
    G(x,i)  
 end function

сейчас попробую

Всего записей: 6 | Зарегистр. 25-12-2011 | Отправлено: 02:53 25-12-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Igorr
 
слушай, можешь на пальцах объяснить мне конструкцию
real(kind(1d0))
 
именно на пальцах, без отсылки к мануалам?
чего я только не встречал с этим кайндом, так и не разобрался...
вот в этом случае какой тип получается? почему?

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 02:57 25-12-2011
SkyFlyStaR

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

Код:
    real(8) FUNCTION argG(x)  
        implicit none
        real(8) :: G,x
        integer :: i
        external G  
        argG = G(x,i)  
    end FUNCTION argG

написал такую функцию

Код:
call DQDAGS(argG,ll,ul,errabs,errrel,a(i),errest)

так вызываю, ошибки на строках:
в функции argG

Код:
    argG = G(x,i)  

в функции G

Код:
G=exp(-x)*TT(i)/sqrt(1-x*x)

и в тексте основной программе в вызове

Код:
call DQDAGS(argG,ll,ul,errabs,errrel,a(i),errest)

Всего записей: 6 | Зарегистр. 25-12-2011 | Отправлено: 03:06 25-12-2011
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Примерно так: какой тип аргумента у kind(x) такой тип и real.

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 03:10 25-12-2011
Открыть новую тему     Написать ответ в эту тему

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