TreeMig Code
Loading...
Searching...
No Matches
ReorderKernelForGFT.f90
Go to the documentation of this file.
1!==============================================================================
17!==============================================================================
18Subroutine shiftkerneltoeven(ispec, y_dim_kernel_orig,x_dim_kernel_orig, y_dim_kernel,x_dim_kernel,kernel_orig,kernel_shifted)
19 USE gft, only: gft_prec
20 IMPLICIT NONE
21
22 INTEGER, INTENT(IN):: y_dim_kernel_orig,x_dim_kernel_orig, y_dim_kernel,x_dim_kernel, ispec
23 REAL(kind=gft_prec) , DIMENSION(1: y_dim_kernel_orig ,1: x_dim_kernel_orig), INTENT(IN):: kernel_orig
24
25 REAL(kind=gft_prec) , DIMENSION(0: y_dim_kernel-1 ,x_dim_kernel), INTENT(OUT):: kernel_shifted
26
27
28 REAL(kind=gft_prec), DIMENSION(1: y_dim_kernel ,x_dim_kernel) :: kernel_help
29 INTEGER:: y_dim_kernel2, x_dim_kernel2
30
31
32 kernel_shifted=0
33
34 if (mod(y_dim_kernel_orig, 2)==0 .and. mod(x_dim_kernel_orig,2) == 0) THEN ! if equal then exact the same kernel is stored, just shifted by -1 in y dir.
35 kernel_shifted(0: y_dim_kernel-1,1:x_dim_kernel)=kernel_orig
36 else ! the maximum value in the center is distributed to the four center cells.
37 y_dim_kernel2=int(y_dim_kernel_orig/2) ! half the original dimension
38 x_dim_kernel2=int(x_dim_kernel_orig/2) ! half the original dimension
39 kernel_help=0
40 kernel_help( 1:y_dim_kernel2 , 1:x_dim_kernel_orig)=kernel_orig(1:(y_dim_kernel2 ),:)
41
42 kernel_help((y_dim_kernel2+1) , 1:x_dim_kernel_orig)=kernel_orig((y_dim_kernel2 +1),:)!/2
43 kernel_help((y_dim_kernel2+2) , 1:x_dim_kernel_orig)=kernel_orig((y_dim_kernel2 +1),:)!/2
44 kernel_help((y_dim_kernel2+3):y_dim_kernel, 1:x_dim_kernel_orig)=kernel_orig((y_dim_kernel2+2):y_dim_kernel_orig,:)
45 kernel_shifted(0:x_dim_kernel-1, 1:x_dim_kernel2) = kernel_help(:, 1 :x_dim_kernel2 )
46 kernel_shifted(0:x_dim_kernel-1,(x_dim_kernel2+1)) = kernel_help(:,(x_dim_kernel2+1) ) ! /2
47 kernel_shifted(0:x_dim_kernel-1,(x_dim_kernel2+2)) = kernel_help(:,(x_dim_kernel2+1) ) !/2
48 kernel_shifted(0:x_dim_kernel-1,(x_dim_kernel2+3):x_dim_kernel ) = kernel_help(:,(x_dim_kernel2+2): x_dim_kernel_orig )
49 END IF
50 return
51end subroutine shiftkerneltoeven
52
53!==============================================================================
70!==============================================================================
71SUBROUTINE reorderkernelforgft(dim_y,dim_x, shifted_kernel, reorderedkernel)
72 USE gft
73 IMPLICIT NONE
74 INTEGER, INTENT(IN):: dim_y,dim_x
75 REAL(kind=gft_prec), DIMENSION(0:(dim_y-1),dim_x), INTENT(IN):: shifted_kernel
76
77 REAL(kind=gft_prec), DIMENSION(0:(dim_y-1),dim_x), INTENT(OUT):: reorderedkernel
78 INTEGER:: center_dim_y, center_dim_x,i1,j1,i,j
79 REAL:: dim_y2,dim_x2,sumReOrderedKAr
80
81
82 ! call PrintMatrixASXY2File(shifted_kernel, 0,dim_y-1,1,dim_x,"kernel_orig_shifted")
83
84 ! Order the kernel to the four corners
85 dim_y2=dim_y/2.
86 dim_x2=dim_x/2.
87
88 center_dim_y=anint( dim_y2)
89 center_dim_x=anint( dim_x2)
90
91 reorderedkernel(:,:)=0.
92 do i= 0,dim_y-1
93 i1= mod((i+ 1 +center_dim_y),dim_y) ! this is the symmetrical version
94 do j= 1,dim_x
95 j1 = mod((j-1+center_dim_x),dim_x) + 1 ! the -1 makes the reordered kernel symmetrical
96 reorderedkernel(i ,j ) = shifted_kernel(i1,j1)
97 end do ! j
98 end do ! i
99 sumreorderedkar = sum(reorderedkernel)
100 reorderedkernel=reorderedkernel/sumreorderedkar ! to make sure that the kernel has a sum of 1
101
102 ! call PrintMatrixASXY2File (reorderedkernel,0,dim_y-1,1,dim_x,"kernel_reordered" )
103 return
104END SUBROUTINE reorderkernelforgft
105
106!=====================================================================
116!===============================================================
117REAL FUNCTION distance (x,x0,y,y0 )
118IMPLICIT NONE
119REAL, INTENT(in) :: x,x0,y,y0
120distance=(( x- x0)**2+( y-y0)**2)**0.5
121END FUNCTION distance
real function distance(x, x0, y, y0)
Distance.
subroutine shiftkerneltoeven(ispec, y_dim_kernel_orig, x_dim_kernel_orig, y_dim_kernel, x_dim_kernel, kernel_orig, kernel_shifted)
ShiftKernelToEven.
subroutine reorderkernelforgft(dim_y, dim_x, shifted_kernel, reorderedkernel)
ReorderKernelForGFT.
Definition GFT.f90:15