solvers Module Reference

Module for shared solver code; the individual solvers are in the solver_* modules. More...

Data Types

type  solver_options
 Solver settings structure. More...
 

Detailed Description

Module for shared solver code; the individual solvers are in the solver_* modules.

The below is not true for the CRAM solver! see kernel_cram(), kernel_cram_from_fortran(), kernel_cram_from_fortran_interface()

Each of the available solvers kernels has a wrapper routine *_solve, which is contained in a kernel_* module. All the methods have the same signature:

subroutine *_solve(lib, n0, n, delta_t, diag, a, b, zero_flux_step, is_adjoint, r)
type(origen_library_class), intent(in) :: lib
real(C_DOUBLE), intent(in) :: diag(lib%itot)
real(C_DOUBLE), intent(in) :: a(lib%non)
real(C_DOUBLE), intent(in) :: b(lib%itot)
real(C_DOUBLE), intent(in) :: n0(lib%itot)
real(C_DOUBLE), intent(out) :: n(lib%itot)
real(C_DOUBLE), intent(in) :: delta_t
logical, intent(in) :: zero_flux_step
logical, intent(in) :: is_adjoint

The library object (lib) is used only for sizes and indexes; the true data are taken from the diag and a arrays.