2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Derived type in Fortran
Сообщение05.11.2010, 00:18 
Доброго всем времени суток!
Вот кусок из моей программы:
Код:
MODULE TYPEDECL
public PLOT, TRAJ
  TYPE PLOT
  double precision, allocatable :: s1(:,:), s2(:,:), s3(:,:), s4(:,:), s5(:,:), s6(:,:)
  END TYPE PLOT
END MODULE TYPEDECL
...
TYPE (PLOT) :: state, state1
...
        allocate(&
        state%s1(1:nk(1),1:poplength),state%s2(1:nk(2),1:poplength),state%s3(1:nk(3),1:poplength),&
        state%s4(1:nk(4),1:poplength),state%s5(1:nk(5),1:poplength),state%s6(1:nk(6),1:poplength),&
        state1%s1(1:nk(1),1:poplength),state1%s2(1:nk(2),1:poplength),state1%s3(1:nk(3),1:poplength),&
        state1%s4(1:nk(4),1:poplength),state1%s5(1:nk(5),1:poplength),state1%s6(1:nk(6),1:poplength))

Я хотел бы иметь возможность совершать алгебраические операции с переменными произвольного типа, как с обычными числами, то есть
Код:
state = state + state1

Вместо того, чтобы прописывать сложение для кажлого элемента:
Код:
...
         state1%s1(1:nk(1),1:poplength) = state1%s1(1:nk(1),1:poplength) +state%s1(1:nk(1),1:poplength)
         state1%s2(1:nk(2),1:poplength) = state1%s2(1:nk(2),1:poplength) +state%s2(1:nk(2),1:poplength)
         state1%s3(1:nk(3),1:poplength) = state1%s3(1:nk(3),1:poplength) +state%s3(1:nk(3),1:poplength)
         state1%s4(1:nk(4),1:poplength) = state1%s4(1:nk(4),1:poplength) +state%s4(1:nk(4),1:poplength)
         state1%s5(1:nk(5),1:poplength) = state1%s5(1:nk(5),1:poplength) +state%s5(1:nk(5),1:poplength)
         state1%s6(1:nk(6),1:poplength) = state1%s6(1:nk(6),1:poplength) +state%s6(1:nk(6),1:poplength)
...

 
 
 
 Re: Derived type in Fortran
Сообщение05.11.2010, 14:32 
Ulrih в сообщении #370285 писал(а):
Я хотел бы иметь возможность совершать алгебраические операции с переменными произвольного типа, как с обычными числами, то есть
Код:
state = state + state1
Вместо того, чтобы прописывать сложение для кажлого элемента

Даже в ОО языках если Вы определяете новый класс, то операторы (+) и пр. должны программироваться явно.
Вы можете реализовать сложение и пр. как дополнительные функции:
Код:
SumPLOT ( state , state1 )

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group