MONC
|
Pressure solver which uses a tridiagonal algorithm operating on the pressure terms in Fourier space. It uses the pencil FFT module for 3D FFTs in pencil decomposition. These use FFTW for the actual FFT kernel. More...
Functions/Subroutines | |
type(component_descriptor_type) function, public | fftsolver_get_descriptor () |
Descriptor of this component for registration. More... | |
subroutine | initialisation_callback (current_state) |
This initialisation callback sets up the pencil fft module, allocates data for the fourier space pressure term (might be different size than p) and populates cos x and y. More... | |
subroutine | timestep_callback (current_state) |
Timestep call back, which will transform to Fourier space, do a tridiagonal solve and then back into time space. More... | |
subroutine | finalisation_callback (current_state) |
Called at MONC finalisation, will call to the pencil fft module to clean itself up and free the pressure term. More... | |
subroutine | complete_psrce_calculation (current_state, y_halo_size, x_halo_size) |
Completes the psrce calculation by waiting on all outstanding psrce communications to complete and then combine the received values with the P field for U and V. More... | |
subroutine | tridiagonal_solver (current_state, pressure_term, fourier_space_sizes) |
The tridiagonal solver which runs in Fourier space on the pressure terms. Note that because we are going from n reals to n/2+1 complex numbers (and into their reals for this solver) then there might be more data in the pressure term than in p. Therefore use the space sizes which are provided as an argument to this procedure rather than the current state local grid dimensions. More... | |
subroutine | copy_p_to_halo_buffer (current_state, neighbour_description, dim, source_index, pid_location, current_page, source_data) |
Copies the p field data to halo buffers for a specific process in a dimension and halo cell. More... | |
subroutine | copy_halo_buffer_to_p (current_state, neighbour_description, dim, target_index, neighbour_location, current_page, source_data) |
subroutine | perform_local_data_copy_for_p (current_state, halo_depth, involve_corners, source_data) |
Does local data copying for P variable halo swap. More... | |
Variables | |
real(kind=default_precision), dimension(:), allocatable | cos_x |
real(kind=default_precision), dimension(:), allocatable | cos_y |
real(kind=default_precision) | pi |
real(kind=default_precision), dimension(:,:,:), allocatable | pt |
integer, dimension(3) | fourier_space_sizes |
type(halo_communication_type), save | halo_swap_state |
Pressure solver which uses a tridiagonal algorithm operating on the pressure terms in Fourier space. It uses the pencil FFT module for 3D FFTs in pencil decomposition. These use FFTW for the actual FFT kernel.
|
private |
Completes the psrce calculation by waiting on all outstanding psrce communications to complete and then combine the received values with the P field for U and V.
current_state | The current model state |
y_halo_size | The halo size in the Y dimension |
x_halo_size | The halo size in the X dimension |
Definition at line 145 of file fftsolver.F90.
|
private |
Definition at line 269 of file fftsolver.F90.
|
private |
Copies the p field data to halo buffers for a specific process in a dimension and halo cell.
current_state | The current model state |
neighbour_descriptions | Description of the neighbour halo swapping status |
dim | Dimension to copy from |
source_index | The source index of the dimension we are reading from in the prognostic field |
pid_location | Location of the neighbouring process in the local stored data structures |
current_page | The current (next) buffer page to copy into |
source_data | Optional source data which is read from |
Definition at line 250 of file fftsolver.F90.
type(component_descriptor_type) function, public fftsolver_mod::fftsolver_get_descriptor | ( | ) |
Descriptor of this component for registration.
Definition at line 33 of file fftsolver.F90.
|
private |
Called at MONC finalisation, will call to the pencil fft module to clean itself up and free the pressure term.
current_state | The current model state |
Definition at line 131 of file fftsolver.F90.
|
private |
This initialisation callback sets up the pencil fft module, allocates data for the fourier space pressure term (might be different size than p) and populates cos x and y.
Definition at line 43 of file fftsolver.F90.
|
private |
Does local data copying for P variable halo swap.
current_state | The current model state_mod |
source_data | Optional source data which is written into |
Definition at line 285 of file fftsolver.F90.
|
private |
Timestep call back, which will transform to Fourier space, do a tridiagonal solve and then back into time space.
current_state | The current model state |
Definition at line 87 of file fftsolver.F90.
|
private |
The tridiagonal solver which runs in Fourier space on the pressure terms. Note that because we are going from n reals to n/2+1 complex numbers (and into their reals for this solver) then there might be more data in the pressure term than in p. Therefore use the space sizes which are provided as an argument to this procedure rather than the current state local grid dimensions.
current_state | The current model state |
pressure_term | The pressure term in Fourier space |
fourier_space_sizes | The size of the pressure term in each dimension |
Definition at line 189 of file fftsolver.F90.
|
private |
Definition at line 21 of file fftsolver.F90.
|
private |
Definition at line 21 of file fftsolver.F90.
|
private |
Definition at line 24 of file fftsolver.F90.
|
private |
Definition at line 25 of file fftsolver.F90.
|
private |
Definition at line 22 of file fftsolver.F90.
|
private |
Definition at line 23 of file fftsolver.F90.