ETS  \$Id: Doxyfile 2162 2020-02-26 14:16:09Z g2dpc $
 All Classes Files Functions Variables Pages
cos_rpdederive_interface.f90
Go to the documentation of this file.
1 
42  interface
43  subroutine cos_rpdederive(dydx,K,x,y,c0,c1,d,o)
44  use cos_precision
45  implicit none
46  integer,intent(in) :: k
47  real(kind=dp),intent(inout) :: dydx(k)
48  real(kind=dp),intent(in) :: x(k),y(k)
49  integer,intent(in) :: c0,c1,d,o
50  real(kind=dp),dimension(K) :: dx,dy,k0,k1
51  real(kind=dp) :: y0,y1,x1,x0
52  end subroutine cos_rpdederive
53  end interface
54 end module cos_rpdederive_interface
55 !*******************************************************************************
56 subroutine cos_rpdederive(dydx,K,x,y,c0,c1,d,o)
57 
58  use cos_precision
59  implicit none
60  integer,intent(in) :: k
61  real(kind=dp),intent(inout) :: dydx(k)
62  real(kind=dp),intent(in) :: x(k),y(k)
63  integer,intent(in) :: c0,c1,d,o
64 
65  real(kind=dp),dimension(K) :: dx,dy,k0,k1
66  real(kind=dp) :: y0,y1,x1,x0
67  integer :: i
68 
69  ! space dimension
70  !K = size(x)
71  do i=1,k-1
72  k0(i) = i
73  k1(i) = i+1
74  enddo
75  !
76  ! calculation of dx
77  !
78  x1 = 2.0 * x(k) - x(k-1)
79  x0 = 2.0 * x(1) - x(2)
80 
81  do i=3,k
82  dx(i-1) = (x(i)-x(i-2)) / 2.0
83  enddo
84  dx(k) = (x1 - x(k-1))/2.0
85  dx(1) = (x(2) - x0)/2.0
86  !write(*,*) '-------------dans pdederive--------------'
87  !print*,"dx(101)= ", dx(101),' x1=',x1,' x(K)=',x(K),K
88  !print*,"y(101)= ",y(101)
89  !print*,"o= ",o
90  !write(*,*) '---------------------------'
91  !
92  ! dy calculation
93  !
94  if (o.eq.1) then
95 
96  if (c1 .ne. 2.0) then
97  y1 = 2.0 * y(k) - y(k-1)
98  y0 = 2.0 * y(1) - y(2)
99  else
100  y1 = 4.0 * y(k) - 6.0 * y(k-1) + 4.0 * y(k-2) - y(k-3)
101  y0 = 4.0 * y(1) - 6.0 * y(2) + 4.0 * y(3) - y(4)
102  endif
103  do i=3,k
104  dy(i-1) = y(i)-y(i-2)
105  enddo
106 
107  dy(k) = y1 - y(k-1)
108  dy(1) = y(2) - y0
109 
110  else
111 
112  if (c1 .ne. 2.0) then
113  y1 = y(k-1)
114  y0 = y(2)
115  else
116  y1 = 4.0 * y(k) - 6.0 * y(k-1) + 4.0 * y(k-2) - y(k-3)
117  y0 = 4.0 * y(1) - 6.0 * y(2) + 4.0 * y(3) - y(4)
118  endif
119 
120  do i=2,k-1
121  dy(i) = y(i+1)-2.0*y(i)+y(i-1)
122  enddo
123  dy(k) = y1 - 2.0*y(k) + y(k-1)
124  dy(1) = y(2) - 2.0*y(1) + y0
125 
126  endif
127 
128  do i=1,k
129  if (o.eq. 1) then
130  dydx(i) = dy(i) / (2.0 * dx(i))
131  else
132  dydx(i) = dy(i) / (dx(i) ** 2.0)
133  endif
134  enddo
135 
136  if (c1 .eq. 0) then
137  dydx(k) = c1 * dydx(k)
138  endif
139  if (c0 .eq. 0) then
140  dydx(1) = c0 * dydx(1)
141  endif
142 
143  !print*,"dx = ",dx(100:101)
144  !print*,"dy = ",dy(100:101)
145  !print*,"dydx = ",dydx(100:101)
146 end subroutine cos_rpdederive
derivative calculation of y=f(x) : dy/dx
subroutine cos_rpdederive(dydx, K, x, y, c0, c1, d, o)