23 character(len=*),
intent(in) :: filename
25 double precision :: time
26 integer :: ix^D, ixp^D, idim
27 integer :: sendbuff(^ND)
28 character(len=1024) :: outfilehead
31 write(*,*)
'mod_oneblock: reading ', nw,
' variables on unit:', unit
37 open(unit,file=filename,status=
'unknown')
39 read(unit,
'(A)') outfilehead
60 call mpi_bcast(sendbuff,^nd,mpi_integer,0,icomm,ierrmpi)
69 call mpi_bcast(
xoneblock,{nc^d|*}*^nd,mpi_double_precision,0,icomm,ierrmpi)
70 call mpi_bcast(
woneblock,{nc^d|*}*nw,mpi_double_precision,0,icomm,ierrmpi)
77 double precision,
intent(in) :: x(^ND)
78 integer,
intent(in) :: iw
79 double precision,
intent(out) :: out
81 double precision :: xloc(^ND)
82 double precision :: xd^D
84 double precision :: c00, c10
87 double precision :: c0, c1, c00, c10, c01, c11
89 integer :: ipivot^D, idir
90 integer :: ic^D, ic1^D, ic2^D
101 ic1 = minloc(dabs(xloc(1)-
xoneblock(:,1)),1,mask=.true.)
107 ic1 = minloc(dabs(xloc(1)-
xoneblock(:,ipivot2,idir)),1,mask=.true.)
109 ic2 = minloc(dabs(xloc(2)-
xoneblock(ipivot1,:,idir)),1,mask=.true.)
111 call mpistop(
"error in interpolate_oneblock")
119 ic1 = minloc(dabs(xloc(1)-
xoneblock(:,ipivot2,ipivot3,idir)),1, &
122 ic2 = minloc(dabs(xloc(2)-
xoneblock(ipivot1,:,ipivot3,idir)),1, &
125 ic3 = minloc(dabs(xloc(3)-
xoneblock(ipivot1,ipivot2,:,idir)),1, &
128 call mpistop(
"error in interpolate_oneblock")
141 if (
xoneblock({ic^dd},^d) < xloc(^d))
then
161 if (ic2^d > nc^d)
then
181 out = c00 * (1.0d0 - xd2) + c10 * xd2
188 c00 =
woneblock(ic11,ic12,ic13,iw) * (1.0d0 - xd1) +
woneblock(ic21,ic12,ic13,iw) * xd1
189 c10 =
woneblock(ic11,ic22,ic13,iw) * (1.0d0 - xd1) +
woneblock(ic21,ic22,ic13,iw) * xd1
190 c01 =
woneblock(ic11,ic12,ic23,iw) * (1.0d0 - xd1) +
woneblock(ic21,ic12,ic23,iw) * xd1
191 c11 =
woneblock(ic11,ic22,ic23,iw) * (1.0d0 - xd1) +
woneblock(ic21,ic22,ic23,iw) * xd1
193 c0 = c00 * (1.0d0 - xd2) + c10 * xd2
194 c1 = c01 * (1.0d0 - xd2) + c11 * xd2
196 out = c0 * (1.0d0 - xd3) + c1 * xd3