Skip to content

Commit 6c74bd7

Browse files
committed
added a new example.
1 parent 959938b commit 6c74bd7

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

src/tests/test_regrid.f90

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
!*****************************************************************************************
2+
!> author: Jacob Williams
3+
! date: 10/5/2015
4+
!
5+
! 2D data regridding using the bspline module.
6+
7+
program bspline_regridding_test
8+
9+
use bspline_module
10+
use,intrinsic :: iso_fortran_env, only: wp => real64
11+
12+
implicit none
13+
14+
integer,parameter :: kx = 4 !! x bspline order
15+
integer,parameter :: ky = 4 !! y bspline order
16+
integer,parameter :: idx = 0 !! [[db2val]] input
17+
integer,parameter :: idy = 0 !! [[db2val]] input
18+
integer,parameter :: nx = 6 !! number of points in x dimension in original grid
19+
integer,parameter :: ny = 5 !! number of points in y dimension in original grid
20+
real(wp),dimension(nx),parameter :: x = [0.0_wp,2.0_wp,4.0_wp,6.0_wp,8.0_wp,10.0_wp] !! x points in original grid
21+
real(wp),dimension(ny),parameter :: y = [0.0_wp,2.0_wp,4.0_wp,6.0_wp,8.0_wp] !! y points in original grid
22+
integer,parameter :: nx_new = 11 !! number of points in x dimension for new grid
23+
integer,parameter :: ny_new = 9 !! number of points in y dimension for new grid
24+
25+
real(wp),dimension(nx_new) :: x_new !! new grid x points
26+
real(wp),dimension(ny_new) :: y_new !! new grid y points
27+
real(wp),dimension(nx_new,ny_new) :: fcn_new !! new grid function evaluations
28+
real(wp),dimension(nx+kx) :: tx !! x knots
29+
real(wp),dimension(ny+ky) :: ty !! y knots
30+
real(wp),dimension(nx,ny) :: fcn_2d !! original grid function evaluations
31+
real(wp) :: val,tru,err,errmax
32+
integer :: i,j
33+
integer :: iflag !! status flag
34+
35+
!function evaluations for original grid:
36+
do i=1,nx
37+
do j=1,ny
38+
fcn_2d(i,j) = test_func(x(i),y(j))
39+
end do
40+
end do
41+
42+
!display original data:
43+
write(*,*) '-----------------'
44+
write(*,*) ' INITIAL DATA:'
45+
write(*,*) '-----------------'
46+
write(*,'(A/,*(F12.6,1X))') 'x:', x
47+
write(*,*) ''
48+
write(*,'(A/,*(F12.6,1X))') 'y:', y
49+
write(*,*) ''
50+
write(*,'(A)') 'fcn(x,y):'
51+
do i=1,nx
52+
write(*,'(5F12.6)') fcn_2d(i,:)
53+
end do
54+
write(*,*) ''
55+
56+
!regrid:
57+
58+
iflag = 0
59+
call db2ink(x,nx,y,ny,fcn_2d,kx,ky,tx,ty,fcn_2d,iflag)
60+
if (iflag/=1) error stop 'error calling db2ink'
61+
errmax = 0.0_wp
62+
do i=1,nx_new
63+
x_new(i) = real(i-1,wp)
64+
do j=1,ny_new
65+
y_new(j) = real(j-1,wp)
66+
call db2val(x_new(i),y_new(j),idx,idy,tx,ty,nx,ny,kx,ky,fcn_2d,val,iflag)
67+
if (iflag/=0) error stop 'error calling db2val'
68+
fcn_new(i,j) = val
69+
tru = test_func(x_new(i),y_new(j)) !truth value
70+
err = abs(tru-val)
71+
errmax = max(err,errmax)
72+
end do
73+
end do
74+
75+
!display new grid:
76+
write(*,*) '-----------------'
77+
write(*,*) ' NEW GRID:'
78+
write(*,*) '-----------------'
79+
write(*,'(A/,*(F12.6,1X))') 'x:', x_new
80+
write(*,*) ''
81+
write(*,'(A/,*(F12.6,1X))') 'y:', y_new
82+
write(*,*) ''
83+
write(*,'(A)') 'fcn(x,y):'
84+
do i=1,nx_new
85+
write(*,'(11F12.6)') fcn_new(i,:)
86+
end do
87+
write(*,*) ''
88+
write(*,*) ' max error:', errmax
89+
write(*,*) ''
90+
91+
contains
92+
93+
function test_func(x,y) result(f)
94+
!! 2d test function
95+
96+
implicit none
97+
98+
real(wp) :: f
99+
real(wp),intent(in) :: x,y
100+
101+
real(wp),parameter :: deg2rad = acos(-1.0_wp)/180.0_wp !! degrees to radians conversion factor
102+
103+
f = sin(deg2rad*(x+y))
104+
105+
end function test_func
106+
107+
end program bspline_regridding_test

0 commit comments

Comments
 (0)