| 
    MONC
    
   | 
 
This is the iterative pressure solver and uses a Jacobi preconditioned BiCGStab which we implement here. More...
Data Types | |
| type | matrix_type | 
| A helper type to abstract the concrete details of the matrix.  More... | |
Functions/Subroutines | |
| type(component_descriptor_type) function, public | iterativesolver_get_descriptor () | 
| Descriptor of the iterative solver component used by the registry.  More... | |
| subroutine | initialisation_callback (current_state) | 
| Initialisation callback hook which will set up the halo swapping state and allocate some data.  More... | |
| subroutine | timestep_callback (current_state) | 
| Timestep callback, this ignores all but the last column where it calls the solver.  More... | |
| subroutine | finalisation_callback (current_state) | 
| Called as MONC is shutting down and frees the halo swap state and deallocates local data.  More... | |
| subroutine | bicgstab (current_state, A, x, b, i_strt, i_end, j_strt, j_end, k_end) | 
| Performs the BiCGStab KS method.  More... | |
| subroutine | cg_solver (current_state, A, x, b, i_strt, i_end, j_strt, j_end, k_end) | 
| Performs the preconditioned conjugate gradient method.  More... | |
| subroutine | precond (current_state, A, s, r, preits) | 
| Jacobi preconditioner.  More... | |
| subroutine | calc_ax (current_state, A, x, Ax) | 
| Calculates A * x.  More... | |
| real(kind=default_precision) function | inner_prod (current_state, x, y, i_strt, i_end, j_strt, j_end, k_end) | 
| Returns the global inner product of two vectors, ignoring the halo cells.  More... | |
| real(kind=default_precision) function, dimension(3) | inner_prod_three_way (current_state, t, s, i_strt, i_end, j_strt, j_end, k_end) | 
| Returns the global inner product of a pair of vectors, ignoring the halo cells for three separate pairs. This call is for optimisation to bunch up the comms in a BiCGStab solver per iteration.  More... | |
| subroutine | set_matrix_for_poisson (grid_configuration, A, z_size) | 
| Sets the values of the provided matrix to solve the poisson equation.  More... | |
| subroutine | deduce_global_divmax (current_state) | 
| Determines the global divmax which is written into the current state.  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_calc_ax_to_halo_buffer (current_state, neighbour_description, dim, source_index, pid_location, current_page, source_data) | 
| Copies the source field data to halo buffers for a specific process in a dimension and halo cell - for the calc_Ax halo swaps.  More... | |
| subroutine | copy_halo_buffer_to_p (current_state, neighbour_description, dim, target_index, neighbour_location, current_page, source_data) | 
| Copies the halo buffer to halo location for the p field.  More... | |
| subroutine | copy_halo_buffer_to_calc_ax (current_state, neighbour_description, dim, target_index, neighbour_location, current_page, source_data) | 
| Copies the halo buffer to halo location for the source field as required in the calc_Ax procedure.  More... | |
| 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... | |
| subroutine | perform_local_data_copy_for_calc_ax (current_state, halo_depth, involve_corners, source_data) | 
| Does a local data copy for halo swapping cells with wrap around (to maintain periodic boundary condition)  More... | |
| type(matrix_type) function | create_problem_matrix (z_size) | 
| Creates a problem matrix, allocating the required data based upon the column size.  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... | |
Variables | |
| real(kind=default_precision) | tolerance | 
| real(kind=default_precision) | relaxation | 
| Solving tollerance.  More... | |
| integer | max_iterations | 
| Maximum number of BiCGStab iterations.  More... | |
| integer | preconditioner_iterations | 
| Number of preconditioner iterations to perform per call.  More... | |
| logical | symm_prob | 
| real(kind=default_precision), parameter | tiny = 1.0e-16 | 
| Minimum residual - if we go below this then something has gone wrong.  More... | |
| type(halo_communication_type), save | halo_swap_state | 
| The halo swap state as initialised by that module.  More... | |
| real(kind=default_precision), dimension(:,:,:), allocatable | psource | 
| real(kind=default_precision), dimension(:,:,:), allocatable | prev_p | 
| Passed to BiCGStab as the RHS.  More... | |
| logical | first_run =.true. | 
| type(matrix_type) | a | 
This is the iterative pressure solver and uses a Jacobi preconditioned BiCGStab which we implement here.
      
  | 
  private | 
Performs the BiCGStab KS method.
| current_state | The current model state | 
| A | The matrix | 
| x | The solution | 
| b | The RHS | 
Definition at line 135 of file iterativesolver.F90.


      
  | 
  private | 
Calculates A * x.
| current_state | The current model state | 
| A | The matrix | 
| x | Vector to multiply with | 
| Ax | Result of A*x | 
Definition at line 378 of file iterativesolver.F90.


      
  | 
  private | 
Performs the preconditioned conjugate gradient method.
| current_state | The current model state | 
| A | The matrix | 
| x | The solution | 
| b | The RHS | 
Definition at line 248 of file iterativesolver.F90.


      
  | 
  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 735 of file iterativesolver.F90.

      
  | 
  private | 
Copies the source field data to halo buffers for a specific process in a dimension and halo cell - for the calc_Ax halo swaps.
| 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 623 of file iterativesolver.F90.

      
  | 
  private | 
Copies the halo buffer to halo location for the source field as required in the calc_Ax procedure.
| current_state | The current model state | 
| neighbour_description | The halo swapping description of the neighbour we are accessing the buffer of | 
| dim | The dimension we receive for | 
| target_index | The target index for the dimension we are receiving for | 
| neighbour_location | The location in the local neighbour data stores of this neighbour | 
| current_page | The current, next, halo swap page to read from (all previous have been read and copied already) | 
| source_data | Optional source data which is written into | 
Definition at line 671 of file iterativesolver.F90.

      
  | 
  private | 
Copies the halo buffer to halo location for the p field.
| current_state | The current model state | 
| neighbour_description | The halo swapping description of the neighbour we are accessing the buffer of | 
| dim | The dimension we receive for | 
| target_index | The target index for the dimension we are receiving for | 
| neighbour_location | The location in the local neighbour data stores of this neighbour | 
| current_page | The current, next, halo swap page to read from (all previous have been read and copied already) | 
| source_data | Optional source data which is written into | 
Definition at line 649 of file iterativesolver.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 601 of file iterativesolver.F90.

      
  | 
  private | 
Creates a problem matrix, allocating the required data based upon the column size.
| z_size | Number of elements in the vertical column | 
Definition at line 722 of file iterativesolver.F90.

      
  | 
  private | 
Determines the global divmax which is written into the current state.
| current_state | The current model state | 
Definition at line 584 of file iterativesolver.F90.

      
  | 
  private | 
Called as MONC is shutting down and frees the halo swap state and deallocates local data.
| current_state | The current model state | 
Definition at line 123 of file iterativesolver.F90.

      
  | 
  private | 
Initialisation callback hook which will set up the halo swapping state and allocate some data.
| current_state | The current model state | 
Definition at line 57 of file iterativesolver.F90.


      
  | 
  private | 
Returns the global inner product of two vectors, ignoring the halo cells.
| current_state | The current model state | 
| x | First vector @praam y Second vector | 
Definition at line 478 of file iterativesolver.F90.


      
  | 
  private | 
Returns the global inner product of a pair of vectors, ignoring the halo cells for three separate pairs. This call is for optimisation to bunch up the comms in a BiCGStab solver per iteration.
| current_state | The current model state | 
| x | First vector @praam y Second vector | 
Definition at line 506 of file iterativesolver.F90.

| type(component_descriptor_type) function, public iterativesolver_mod::iterativesolver_get_descriptor | 
Descriptor of the iterative solver component used by the registry.
Definition at line 47 of file iterativesolver.F90.

      
  | 
  private | 
Does a local data copy for halo swapping cells with wrap around (to maintain periodic boundary condition)
| current_state | The current model state | 
| source_data | Optional source data which is written into | 
Definition at line 705 of file iterativesolver.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 692 of file iterativesolver.F90.

      
  | 
  private | 
Jacobi preconditioner.
| current_state | The current model state | 
| A | The matrix | 
| s | Written into as result of preconditioning | 
| r | Input values to preconditioner | 
| preits | Number of iterations of the preconditioner to perform per call | 
Definition at line 320 of file iterativesolver.F90.


      
  | 
  private | 
Sets the values of the provided matrix to solve the poisson equation.
| grid_configuration | Configuration of the vertical and horizontal grids | 
| A | The matrix that the values are written into | 
| z_size | Number of elements in a column | 
Definition at line 537 of file iterativesolver.F90.

      
  | 
  private | 
Timestep callback, this ignores all but the last column where it calls the solver.
| current_state | The current model state | 
Definition at line 84 of file iterativesolver.F90.


      
  | 
  private | 
Definition at line 40 of file iterativesolver.F90.
      
  | 
  private | 
Definition at line 39 of file iterativesolver.F90.
      
  | 
  private | 
The halo swap state as initialised by that module.
Definition at line 37 of file iterativesolver.F90.
      
  | 
  private | 
Maximum number of BiCGStab iterations.
Definition at line 31 of file iterativesolver.F90.
      
  | 
  private | 
Number of preconditioner iterations to perform per call.
Definition at line 31 of file iterativesolver.F90.
      
  | 
  private | 
Passed to BiCGStab as the RHS.
Definition at line 38 of file iterativesolver.F90.
      
  | 
  private | 
Definition at line 38 of file iterativesolver.F90.
      
  | 
  private | 
Solving tollerance.
Definition at line 30 of file iterativesolver.F90.
      
  | 
  private | 
Definition at line 33 of file iterativesolver.F90.
      
  | 
  private | 
Minimum residual - if we go below this then something has gone wrong.
Definition at line 35 of file iterativesolver.F90.
      
  | 
  private | 
Definition at line 30 of file iterativesolver.F90.