sum values in a smarter order
[AGH_fortran_course_solution3.git] / src / functions.f90
blob8f0b894f4809bc638ab596bf1625c52a7c8ab6a1
1 MODULE functions
3 real(kind=8), private, parameter :: poly_coeffs(11) = &
4 [-11.0, 15.6, -4.6, 22.5, 8.1, 5.1, -0.3, -8.0, 0.0, -9.9, 2.2]
6 INTERFACE
7 FUNCTION analytical_integral(ibeg, iend) result(y)
8 real(kind=8), intent(in) :: ibeg, iend
9 real(kind=8) :: y
10 END FUNCTION analytical_integral
11 END INTERFACE
13 CONTAINS
15 FUNCTION my_exp(x) result(y)
16 real(kind=8), intent(in) :: x
17 real(kind=8) :: y
18 y = exp(x)
19 END FUNCTION my_exp
21 FUNCTION my_sin(x) result(y)
22 real(kind=8), intent(in) :: x
23 real(kind=8) :: y
24 y = sin(x)
25 END FUNCTION my_sin
27 FUNCTION my_poly(x) result(y)
28 real(kind=8), intent(in) :: x
29 real(kind=8) :: y
30 integer(kind=4) :: i
31 y = sum(poly_coeffs(:) * [1.0_8, (x ** [(i, i = 1, 10)])])
32 END FUNCTION my_poly
34 FUNCTION my_exp_int(ibeg, iend) result(y)
35 real(kind=8), intent(in) :: ibeg, iend
36 real(kind=8) :: y
37 y = exp(iend) - exp(ibeg)
38 END FUNCTION my_exp_int
40 FUNCTION my_sin_int(ibeg, iend) result(y)
41 real(kind=8), intent(in) :: ibeg, iend
42 real(kind=8) :: y
43 y = -cos(iend) + cos(ibeg)
44 END FUNCTION my_sin_int
46 FUNCTION my_poly_int_indefinite(x) result(y)
47 real(kind=8), intent(in) :: x
48 real(kind=8) :: y
49 integer(kind=4) :: i, j
50 y = sum(poly_coeffs(:) * (1 / real([(j, j = 1, 11)])) * &
51 (x ** [(i, i = 1, 11)]))
52 END FUNCTION my_poly_int_indefinite
54 FUNCTION my_poly_int(ibeg, iend) result(y)
55 real(kind=8), intent(in) :: ibeg, iend
56 real(kind=8) :: y
57 y = my_poly_int_indefinite(iend) - my_poly_int_indefinite(ibeg)
58 END FUNCTION my_poly_int
60 END MODULE functions