V3FIT
mkherm3.f
1  subroutine mkherm3(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  external fun ! passed real function(x,y,z)
9  real x(nx) ! x coordinate array (1st dim)
10  real y(ny) ! y coordinate array (2nd dim)
11  real z(nz) ! z coordinate array (3rd dim)
12 C
13 C the passed function fun must have the interface:
14 C
15 C real function <name>(x,y,z,dfdx,dfdy,dfdz,
16 C d2fdxdy,d2fdxdz,d2fdydz,d3fdxdydz)
17 C where x,y,z are input, the function returns the function value,
18 C and the arguments dfdx, dfdy and dfdz return as output the function
19 C derivative at the point (x,y,z).
20 C
21 C output:
22 C
23  real fherm(0:7,nx,ny,nz) ! function data & derivatives
24 C
25 C fherm(0,i,j,k) = function value f at x(i),y(j),z(k)
26 C fherm(1,i,j,k) = derivative df/dx at x(i),y(j),z(k)
27 C fherm(2,i,j,k) = derivative df/dy at x(i),y(j),z(k)
28 C fherm(3,i,j,k) = derivative df/dz at x(i),y(j),z(k)
29 C fherm(4,i,j,k) = derivative d2f/dxdy at x(i),y(j),z(k)
30 C fherm(5,i,j,k) = derivative d2f/dxdz at x(i),y(j),z(k)
31 C fherm(6,i,j,k) = derivative d2f/dydz at x(i),y(j),z(k)
32 C fherm(7,i,j,k) = derivative d3f/dxdydz at x(i),y(j),z(k)
33 C
34 C----------------------------
35 C
36  do iz=1,nz
37  do iy=1,ny
38  do ix=1,nx
39  fherm(0,ix,iy,iz)=
40  > fun(x(ix),y(iy),z(iz),dfdx,dfdy,dfdz,
41  > d2fdxdy,d2fdxdz,d2fdydz,d3fdxyz)
42  fherm(1,ix,iy,iz)=dfdx
43  fherm(2,ix,iy,iz)=dfdy
44  fherm(3,ix,iy,iz)=dfdz
45  fherm(4,ix,iy,iz)=d2fdxdy
46  fherm(5,ix,iy,iz)=d2fdxdz
47  fherm(6,ix,iy,iz)=d2fdydz
48  fherm(7,ix,iy,iz)=d3fdxyz
49  enddo
50  enddo
51  enddo
52 C
53  return
54  end