PlasCom2  1.0
XPACC Multi-physics simluation application
RungeKutta.f90
Go to the documentation of this file.
1 MODULE rungekutta
2 
3  IMPLICIT NONE
4 
5 CONTAINS
6 
7  SUBROUTINE rk4sum(numDim,numPoints,bufferSize,bufferInterval,h,K1,K2,K3,K4,stateData)
8 
9  INTEGER(KIND=4), INTENT(IN) :: numDim
10  INTEGER(KIND=8), INTENT(IN) :: numPoints,bufferSize(numdim)
11  INTEGER(KIND=8), INTENT(IN) :: bufferInterval(2*numdim)
12  REAL(KIND=8), INTENT(IN) :: h
13  REAL(KIND=8), INTENT(IN) :: K1(numpoints)
14  REAL(KIND=8), INTENT(IN) :: k2(numpoints)
15  REAL(KIND=8), INTENT(IN) :: K3(numpoints)
16  REAL(KIND=8), INTENT(IN) :: k4(numpoints)
17  REAL(KIND=8), INTENT(INOUT) :: stateData(numpoints)
18 
19  INTEGER(KIND=8) :: I, J, K
20  INTEGER(KIND=8) :: nPlane, zIndex, yIndex, yzIndex, bufferIndex, xSize
21  INTEGER(KIND=8) :: iStart,iEnd,jStart,jEnd,kStart,kEnd
22  REAL(KIND=8) :: fac1,fac2
23 
24  fac1 = h/6.0_8
25  fac2 = h/3.0_8
26 
27  istart = bufferinterval(1)
28  iend = bufferinterval(2)
29 
30  xsize = buffersize(1)
31 
32  IF(numdim == 3) THEN
33 
34  jstart = bufferinterval(3)
35  jend = bufferinterval(4)
36  kstart = bufferinterval(5)
37  kend = bufferinterval(6)
38 
39  nplane = xsize*buffersize(2)
40 
41  DO k = kstart, kend
42  zindex = (k-1)*nplane
43  DO j = jstart, jend
44  yzindex = (j-1)*xsize + zindex
45  DO i = istart, iend
46  bufferindex = yzindex + i
47  statedata(bufferindex) = fac1*(k1(bufferindex)+k4(bufferindex)) + &
48  fac2*(k2(bufferindex) + k3(bufferindex)) + statedata(bufferindex)
49  END DO
50  END DO
51  END DO
52 
53  ELSE IF (numdim == 2) THEN
54 
55  jstart = bufferinterval(3)
56  jend = bufferinterval(4)
57 
58  DO j = jstart, jend
59  yindex = (j-1)*xsize
60  DO i = istart, iend
61  bufferindex = yindex + i
62  statedata(bufferindex) = fac1*(k1(bufferindex)+k4(bufferindex)) + &
63  fac2*(k2(bufferindex) + k3(bufferindex)) + statedata(bufferindex)
64  END DO
65  END DO
66 
67  ELSE IF (numdim == 1) THEN
68 
69  DO bufferindex = istart, iend
70  statedata(bufferindex) = fac1*(k1(bufferindex)+k4(bufferindex)) + &
71  fac2*(k2(bufferindex) + k3(bufferindex)) + statedata(bufferindex)
72  END DO
73 
74  ENDIF
75 
76 
77  END SUBROUTINE rk4sum
78 
79 END MODULE rungekutta
subroutine rk4sum(numDim, numPoints, bufferSize, bufferInterval, h, K1, K2, K3, K4, stateData)
Definition: RungeKutta.f90:8