You may not always want to use both the forward and inverse transformations when you create an IntraMap, so it is possible to omit either from the underlying coordinate transformation routine. Consider the following, for example:
SUBROUTINE POLY3TRAN( THIS, NPOINT, NCOORD_IN, INDIM, IN, FORWARD,
: NCOORD_OUT, OUTDIM, OUT, STATUS )
INTEGER THIS, NPOINT, NCOORD_IN, INDIM, NCOORD_OUT, OUTDIM, STATUS
DOUBLE PRECISION IN( INDIM, NCOORD_IN ), OUT( OUTDIM, NCOORD_OUT )
LOGICAL FORWARD
INCLUDE 'AST_PAR'
DOUBLE PRECISION X
INTEGER POINT
* Forward transformation.
DO 1 POINT = 1, NPOINT
X = IN( POINT, 1 )
IF ( X .EQ. AST__BAD ) THEN
OUT( POINT, 1 ) = AST__BAD
ELSE
OUT( POINT, 1 ) =
: 6.18D0 + X * ( 0.12D0 + X * ( -0.003D0 + X * 0.0000101D0 ) )
END IF
1 CONTINUE
END
This implements a 1-dimensional cubic polynomial transformation. Since this is somewhat awkward to invert, however, we have only implemented the forward transformation. When registering the routine, this is indicated via the FLAGS argument to AST_INTRAREG, as follows:
EXTERNAL POLY3TRAN
...
CALL AST_INTRAREG( 'Poly3Tran', 1, 1, POLY3TRAN, AST__NOINV,
: PURPOSE, AUTHOR, CONTACT, STATUS )
Here, the fifth argument has been set to the flag value AST__NOINV to indicate the lack of an inverse. If the forward transformation were absent, we would use AST__NOFOR instead. Flag values for this argument may be combined by summing them if necessary.
AST A Library for Handling World Coordinate Systems in Astronomy