V3FIT
r8mkherm3.f
1  subroutine r8mkherm3(fun,x,nx,y,ny,z,nz,fherm)
2 C
3 C create a data set for Hermite interpolation, from evaluation of
4 C function and derivatives. Function of 3 indep. coordinates.
5 C
6 C input:
7 C
8 !============
9 ! idecl: explicitize implicit INTEGER declarations:
10  IMPLICIT NONE
11  INTEGER, PARAMETER :: R8=selected_real_kind(12,100)
12  INTEGER ny,nz,nx,iz,iy,ix
13 !============
14 ! idecl: explicitize implicit REAL declarations:
15  real*8 fun,dfdx,dfdy,dfdz,d2fdxdy,d2fdxdz,d2fdydz,d3fdxyz
16 !============
17  external fun ! passed real function(x,y,z)
18  real*8 x(nx) ! x coordinate array (1st dim)
19  real*8 y(ny) ! y coordinate array (2nd dim)
20  real*8 z(nz) ! z coordinate array (3rd dim)
21 C
22 C the passed function fun must have the interface:
23 C
24 C real function <name>(x,y,z,dfdx,dfdy,dfdz,
25 C d2fdxdy,d2fdxdz,d2fdydz,d3fdxdydz)
26 C where x,y,z are input, the function returns the function value,
27 C and the arguments dfdx, dfdy and dfdz return as output the function
28 C derivative at the point (x,y,z).
29 C
30 C output:
31 C
32  real*8 fherm(0:7,nx,ny,nz) ! function data & derivatives
33 C
34 C fherm(0,i,j,k) = function value f at x(i),y(j),z(k)
35 C fherm(1,i,j,k) = derivative df/dx at x(i),y(j),z(k)
36 C fherm(2,i,j,k) = derivative df/dy at x(i),y(j),z(k)
37 C fherm(3,i,j,k) = derivative df/dz at x(i),y(j),z(k)
38 C fherm(4,i,j,k) = derivative d2f/dxdy at x(i),y(j),z(k)
39 C fherm(5,i,j,k) = derivative d2f/dxdz at x(i),y(j),z(k)
40 C fherm(6,i,j,k) = derivative d2f/dydz at x(i),y(j),z(k)
41 C fherm(7,i,j,k) = derivative d3f/dxdydz at x(i),y(j),z(k)
42 C
43 C----------------------------
44 C
45  do iz=1,nz
46  do iy=1,ny
47  do ix=1,nx
48  fherm(0,ix,iy,iz)=
49  > fun(x(ix),y(iy),z(iz),dfdx,dfdy,dfdz,
50  > d2fdxdy,d2fdxdz,d2fdydz,d3fdxyz)
51  fherm(1,ix,iy,iz)=dfdx
52  fherm(2,ix,iy,iz)=dfdy
53  fherm(3,ix,iy,iz)=dfdz
54  fherm(4,ix,iy,iz)=d2fdxdy
55  fherm(5,ix,iy,iz)=d2fdxdz
56  fherm(6,ix,iy,iz)=d2fdydz
57  fherm(7,ix,iy,iz)=d3fdxyz
58  enddo
59  enddo
60  enddo
61 C
62  return
63  end