The FXT method offers a transformation from Legendre modes to nodes by a fast multipole approach implemented in the FXTPACK library by Reiji Suda: R. Suda, "Fast Spherical Harmonic Transform Algorithm based on Generalized Fast Multiple Method", RIMS Kokyuroku vol 1606, pp. 18-29, Jun. 2008, RIMS, Kyoto University.

Besides the oversampling factor that can be used to increase the number points in the nodal representation to achieve an de-aliasing, there is only one other option to this method: The prec parameter configures the precision up to which the FXTPACK should compute the transformation. It defaults to the square root of the epsilon for the real kind. With double precision this would something around 1.4e-8.

This transformation utilizes the Gauss Legendre integration points in the nodal representation.

Thus, the configuration for a FXT projection takes the following form:

  projection = {
kind = 'fxt',
prec = 1.e-10
}


## Interfaces

• ### private pure subroutine Copy_fxt_header(left, right)

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(out) :: left

fpt to copy to

type(ply_fxt_header_type), intent(in) :: right

fpt to copy from

• ### private pure function isEqual(left, right) result(equality)

This function provides the test for equality of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is equal??

• ### private pure function isUnequal(left, right) result(unequality)

This function provides the test for unequality of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is unequal??

• ### private pure function isSmaller(left, right) result(small)

This function provides a < comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is smaller??

• ### private pure function isSmallerOrEqual(left, right) result(small)

This function provides a <= comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is smaller??

• ### private pure function isGreater(left, right) result(great)

This function provides a > comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is greater??

• ### private pure function isGreaterOrEqual(left, right) result(great)

This function provides a >= comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is greater??

## Derived Types

### type, public :: ply_fxt_header_type

Fxt projection header type, consisting of the node header which give information about the type and number of points for the projection

#### Components

TypeVisibilityAttributesNameInitial
real(kind=rk), private :: factor =1.0
real(kind=rk), private :: prec =epsilon(1.0)

## Functions

### private pure function isEqual(left, right) result(equality)

This function provides the test for equality of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is equal??

### private pure function isUnequal(left, right) result(unequality)

This function provides the test for unequality of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is unequal??

### private pure function isSmaller(left, right) result(small)

This function provides a < comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is smaller??

### private pure function isSmallerOrEqual(left, right) result(small)

This function provides a <= comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is smaller??

### private pure function isGreater(left, right) result(great)

This function provides a > comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is greater??

### private pure function isGreaterOrEqual(left, right) result(great)

This function provides a >= comparison of two projections.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: left

projection to compare

type(ply_fxt_header_type), intent(in) :: right

projection to compare against

is greater??

## Subroutines

Load settings to describe a projection method from a Lua table.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(out) :: me
type(flu_State) :: conf
integer, intent(in) :: thandle

### public subroutine ply_fxt_header_out(me, conf)

Write FXT settings into a Lua table.

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: me
type(aot_out_type) :: conf

### public subroutine ply_fxt_header_display(me)

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(in) :: me

### private pure subroutine Copy_fxt_header(left, right)

#### Arguments

TypeIntentOptionalAttributesName
type(ply_fxt_header_type), intent(out) :: left

fpt to copy to

type(ply_fxt_header_type), intent(in) :: right

fpt to copy from