Функції користувача в Fortran`e
Трохи теорії
Нижче наведено реалізацію цієї ідеї. Для частинки з масоюxmass, що знаходиться в гармонійній пастці (з параметромomega). module regions implicit none
public :: Energy, show, point private :: getEtot, getUpot, getTkin, & xmass, omega, Rcent
double precision :: xmass = 1.0d0, & omega = 2.0d0, & half = 0.50d0, & Rcent = 2.50d0
type :: point double precision :: R, V ! координата та швидкість частинки double precision :: Tkin, Upot, Etot! кінетична, потенційна та повна енергії end type point
double precision function getEtot(this) RESULT(Etot) implicit none type (point), intent(IN) :: this Etot = getTkin(this) + getUpot(this) end function getEtot
double precision function getTkin(this) RESULT(Tkin) неможливий type (point), intent(IN) :: this Tkin = half * xmass * this%V*this%V end function getTkin
double precision function getUpot(this) RESULT(Upot) implicit none type (point), intent(IN) :: this Upot = half * omega*omega * (this%R-Rcent)* (this%R-Rcent) end function getUpot
subroutine show(this) implicit none type (point), intent(IN) :: this write(*,1) this%R ,this%V ,this%Tkin ,this%Upot , this%Etot 1 format ("R =", f10.5, "V=", f8.5, "kin =", f8.5, "pot =", f8.5, "total =", f8.5) end subroutine show
end module regions
program main USE regions implicit none type (point) :: цей double precision :: r
do r = 0.50d0, 3.50d0 this%V = -2.0d-1 * r this%R = r this=Energy(this) ! виклик функції call show(this)! демонстрація результатів роботи функціїEnergyend do
end program У модулі визначено типpointerта функціяEnergy, яка повертає змінну типуpoint. У ній здійснюється виклик речових функцій getTkin, getUpot, getEtot з присвоєнням їх значень відповідним змінним. Результат роботи цієї функції демонструється процедуроюshow. виходить дуже компактний запис, який легко читається.
Висновок
Хардкорна конфа за С++. Ми запрошуємо лише профі.
Написав гарний текст – отримав запрошення.
У «Пісочниці» діє премодерація: перед публікацією всі матеріали проходять через дбайливе проміння НЛО.
З великою ймовірністю не пройдуть премодерацію: