fourier Module

For computing direct and inverse Fourier transforms.


Uses

  • module~~fourier~~UsesGraph module~fourier fourier module~legendre legendre module~fourier->module~legendre module~geometry geometry module~fourier->module~geometry module~types types module~fourier->module~types module~params params module~fourier->module~params module~legendre->module~geometry module~legendre->module~types module~legendre->module~params module~geometry->module~types module~geometry->module~params iso_fortran_env iso_fortran_env module~types->iso_fortran_env module~params->module~types

Used by

  • module~~fourier~~UsedByGraph module~fourier fourier module~spectral spectral module~spectral->module~fourier proc~modspectral_delete ModSpectral_delete proc~modspectral_delete->module~fourier proc~modspectral_initialize ModSpectral_initialize proc~modspectral_initialize->module~fourier proc~gen_sppt gen_sppt proc~gen_sppt->module~spectral module~model_state model_state module~model_state->module~spectral module~prognostics prognostics module~prognostics->module~spectral module~prognostics->module~model_state module~time_stepping time_stepping module~time_stepping->module~spectral proc~check_diagnostics check_diagnostics proc~check_diagnostics->module~spectral proc~get_grid_point_tendencies get_grid_point_tendencies proc~get_grid_point_tendencies->module~spectral proc~get_grid_point_tendencies->module~model_state proc~get_spectral_tendencies get_spectral_tendencies proc~get_spectral_tendencies->module~spectral proc~get_spectral_tendencies->module~model_state proc~get_physical_tendencies get_physical_tendencies proc~get_physical_tendencies->module~spectral proc~get_physical_tendencies->module~model_state proc~do_single_step do_single_step proc~do_single_step->module~spectral proc~do_single_step->module~model_state proc~do_single_step->module~time_stepping proc~get_tendencies get_tendencies proc~get_tendencies->module~model_state proc~initialize_geopotential initialize_geopotential proc~initialize_geopotential->module~model_state proc~modelstate_init_sst_anom modelstate_init_sst_anom proc~modelstate_init_sst_anom->module~model_state proc~initialize_boundaries initialize_boundaries proc~initialize_boundaries->module~model_state proc~land_model_init land_model_init proc~land_model_init->module~model_state proc~initialize_coupler initialize_coupler proc~initialize_coupler->module~model_state proc~run_land_model run_land_model proc~run_land_model->module~model_state proc~set_forcing set_forcing proc~set_forcing->module~model_state proc~transform_spectral2grid transform_spectral2grid proc~transform_spectral2grid->module~prognostics proc~apply_grid_filter apply_grid_filter proc~apply_grid_filter->module~prognostics proc~sea_model_init sea_model_init proc~sea_model_init->module~model_state proc~run_sea_model run_sea_model proc~run_sea_model->module~model_state module~speedy_driver speedy_driver module~speedy_driver->module~model_state proc~transform_grid2spectral transform_grid2spectral proc~transform_grid2spectral->module~prognostics proc~couple_sea_land couple_sea_land proc~couple_sea_land->module~model_state proc~couple_land_atm couple_land_atm proc~couple_land_atm->module~model_state proc~set_geopotential set_geopotential proc~set_geopotential->module~model_state proc~first_step first_step proc~first_step->module~model_state proc~initialize_state initialize_state proc~initialize_state->module~model_state proc~initialize_state->module~prognostics proc~initialize_state->module~time_stepping proc~get_zonal_average_fields get_zonal_average_fields proc~get_zonal_average_fields->module~model_state proc~get_shortwave_rad_fluxes get_shortwave_rad_fluxes proc~get_shortwave_rad_fluxes->module~model_state proc~step step proc~step->module~model_state proc~couple_sea_atm couple_sea_atm proc~couple_sea_atm->module~model_state

Contents


Derived Types

type, public, extends(ModLegendre_t) :: ModFourier_t

Fourier module object Although the ModLegendre_t is not need it, we make it a base class to allow the ModSpectral to inherit that class too when the ModFourier module is inherited. This needs to be done since Fortran does not suppoert multiple inheritance.

Components

TypeVisibility AttributesNameInitial
logical, private :: mod_fourier_initialized =.false.
real(kind=p), private, allocatable, dimension(:):: work

Work array required by FFTPACK. Contains trigonometric functions etc.

integer, private, allocatable, dimension(:):: ifac

Work array required by FFTPACK. Contains prime factors

Type-Bound Procedures

procedure, public :: initialize => ModFourier_initialize
procedure, public :: delete => ModFourier_delete
procedure, public :: fourier => ModFourier_fourier
procedure, public :: fourier_inv => ModFourier_fourier_inv

Functions

private function ModFourier_fourier_inv(this, input, kcos) result(output)

Transforms Fourier coefficients to grid-point data.

Arguments

Type IntentOptional AttributesName
class(ModFourier_t), intent(in) :: this
real(kind=p), intent(in) :: input(2*mx,il)

Input field

integer, intent(in) :: kcos

Scale output by cos(lat) (1) or not (0)

Return Value real(kind=p) (ix,il)

Output field

private function ModFourier_fourier(this, input) result(output)

Transforms grid-point data to Fourier coefficients.

Arguments

Type IntentOptional AttributesName
class(ModFourier_t), intent(in) :: this
real(kind=p), intent(in) :: input(ix,il)

Input field

Return Value real(kind=p) (2*mx,il)

Output field


Subroutines

public subroutine ModFourier_initialize(this, mod_geometry)

Initializes the ModFourier instance.

Arguments

Type IntentOptional AttributesName
class(ModFourier_t), intent(inout) :: this
class(ModGeometry_t), intent(in), target:: mod_geometry

public subroutine ModFourier_delete(this)

Delete the Fourier instance

Arguments

Type IntentOptional AttributesName
class(ModFourier_t), intent(inout) :: this