Eigenvalue SoLvers for Petaflop-Applications (ELPA) 2024.05.001
Loading...
Searching...
No Matches
add_tmp_template.F90
Go to the documentation of this file.
1subroutine add_tmp_&
2&precision&
3&(obj, d1, dbase, ddiff, z, ev_scale_value, na1,i)
4 use precision
5 use v_add_s
7 implicit none
8 class(elpa_abstract_impl_t), intent(inout) :: obj
9 integer(kind=ik), intent(in) :: na1, i
10
11 real(kind=real_datatype), intent(in) :: d1(:), dbase(:), ddiff(:), z(:)
12 real(kind=real_datatype), intent(inout) :: ev_scale_value
13 real(kind=real_datatype) :: tmp(1:na1)
14
15 ! tmp(1:na1) = z(1:na1) / delta(1:na1,i) ! original code
16 ! tmp(1:na1) = z(1:na1) / (d1(1:na1)-d(i))! bad results
17
18 ! All we want to calculate is tmp = (d1(1:na1)-dbase(i))+ddiff(i)
19 ! in exactly this order, but we want to prevent compiler optimization
20
21 tmp(1:na1) = d1(1:na1) -dbase(i)
22 call v_add_s_&
23 &precision&
24 &(obj, tmp(1:na1),na1,ddiff(i))
25 tmp(1:na1) = z(1:na1) / tmp(1:na1)
26 ev_scale_value = 1.0_rk/sqrt(dot_product(tmp(1:na1),tmp(1:na1)))
27
28end subroutine add_tmp_&
29&precision
30
Fortran module to provide an abstract definition of the implementation. Do not use directly....
Definition elpa_abstract_impl.F90:50
Definition mod_v_add_s.F90:55
Definition elpa_abstract_impl.F90:73