aboutsummaryrefslogtreecommitdiff
path: root/math/gsurfit/gscopyr.x
blob: 251b53272091370265772ea06a75a96bc648ecc4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include <math/gsurfit.h>
include "gsurfitdef.h"

# GSCOPY -- Procedure to copy the fit from one surface into another.

procedure gscopy (sf1, sf2)

pointer	sf1		# pointer to original surface
pointer	sf2		# pointer to the new surface

begin
	if (sf1 == NULL) {
	    sf2 = NULL
	    return
	}

	# allocate space for new surface descriptor
	call calloc (sf2, LEN_GSSTRUCT, TY_STRUCT)

	# copy surface independent parameters 
	GS_TYPE(sf2) = GS_TYPE(sf1)

	switch (GS_TYPE(sf1)) {
	case GS_LEGENDRE, GS_CHEBYSHEV, GS_POLYNOMIAL:
	    GS_NXCOEFF(sf2) = GS_NXCOEFF(sf1)
	    GS_XORDER(sf2) = GS_XORDER(sf1)
	    GS_XMIN(sf2) = GS_XMIN(sf1)
	    GS_XMAX(sf2) = GS_XMAX(sf1)
	    GS_XRANGE(sf2) = GS_XRANGE(sf1)
	    GS_XMAXMIN(sf2) = GS_XMAXMIN(sf1)
	    GS_NYCOEFF(sf2) = GS_NYCOEFF(sf1)
	    GS_YORDER(sf2) = GS_YORDER(sf1)
	    GS_YMIN(sf2) = GS_YMIN(sf1)
	    GS_YMAX(sf2) = GS_YMAX(sf1)
	    GS_YRANGE(sf2) = GS_YRANGE(sf1)
	    GS_YMAXMIN(sf2) = GS_YMAXMIN(sf1) 
	    GS_XTERMS(sf2) = GS_XTERMS(sf1)
	    GS_NCOEFF(sf2) = GS_NCOEFF(sf1)
	default:
	    call error (0, "GSCOPY: Unknown surface type.")
	}

	# set space pointers to NULL
	GS_XBASIS(sf2) = NULL
	GS_YBASIS(sf2) = NULL
	GS_MATRIX(sf2) = NULL
	GS_CHOFAC(sf2) = NULL
	GS_VECTOR(sf2) = NULL
	GS_COEFF(sf2) = NULL
	GS_WZ(sf2) = NULL

	# restore coefficient array
	call calloc (GS_COEFF(sf2), GS_NCOEFF(sf2), TY_REAL)
	call amovr (COEFF(GS_COEFF(sf1)), COEFF(GS_COEFF(sf2)), GS_NCOEFF(sf2))
end