krn_interface_m Module

Module used by kernel and components to assure communication between them

This module should be used (include) by the components at the initiation phase to:

  1. Set global matrix sizes required by each component (state owners and links)
  2. Expose state owners existing ports and find them by links
  3. Set positions and variables in global matrices and converting them to pardiso format

This module should be used (include) by kernel to:

  1. Allocate array of components and full matrices for linear solver at initiation phase
  2. Provide arrays to linear solver including translation array of pointers to array of doubles

Sequence of execution in 2 stages of initialisation:

  1. Stage 1 -- Kernel -> Initial allocation with number of components
  2. Stage 1 -- Components -> Reports required sizes and ports
  3. Stage 2 -- Kernel -> Allocation of the main matrices
  4. Stage 2 -- Components (state owners) -> Set positions of their ports and receives back allocated ports and arrays like rhs or solution
  5. Stage 2 -- Components (links) -> Get requested ports
  6. Stage 2 -- Components -> Set non zero elements using they own coordinate system
  7. Stage 2 -- Kernel -> Translate coo matrices to csr matrices

Uses

  • module~~krn_interface_m~~UsesGraph module~krn_interface_m krn_interface_m module~krn_global_tools_m krn_global_tools_m module~krn_interface_m->module~krn_global_tools_m module~mkl_pardiso mkl_pardiso module~krn_interface_m->module~mkl_pardiso ieee_arithmetic ieee_arithmetic module~krn_global_tools_m->ieee_arithmetic iso_c_binding iso_c_binding module~krn_global_tools_m->iso_c_binding iso_fortran_env iso_fortran_env module~krn_global_tools_m->iso_fortran_env

Used by

  • module~~krn_interface_m~~UsedByGraph module~krn_interface_m krn_interface_m module~cmp_boundary_init_m cmp_boundary_init_m module~cmp_boundary_init_m->module~krn_interface_m module~cmp_channel_init_m cmp_channel_init_m module~cmp_channel_init_m->module~krn_interface_m module~cmp_circulator_init_m cmp_circulator_init_m module~cmp_circulator_init_m->module~krn_interface_m module~cmp_ffsrclink_init_m cmp_FFsrcLink_init_m module~cmp_ffsrclink_init_m->module~krn_interface_m module~cmp_fslink_init_m cmp_FSlink_init_m module~cmp_fslink_init_m->module~krn_interface_m module~cmp_junction_init_m cmp_junction_init_m module~cmp_junction_init_m->module~krn_interface_m module~cmp_mesh2d_init_m cmp_mesh2D_init_m module~cmp_mesh2d_init_m->module~krn_interface_m module~cmp_solid_init_m cmp_solid_init_m module~cmp_solid_init_m->module~krn_interface_m module~cmp_ssfluxlink_m cmp_SSfluxLink_m module~cmp_ssfluxlink_m->module~krn_interface_m module~cmp_sssrclink_init_m cmp_SSsrcLink_init_m module~cmp_sssrclink_init_m->module~krn_interface_m module~cmp_strand_init_m cmp_strand_init_m module~cmp_strand_init_m->module~krn_interface_m module~krn_linear_system_m krn_linear_system_m module~krn_linear_system_m->module~krn_interface_m module~cmp_boundary_calc_m cmp_boundary_calc_m module~cmp_boundary_calc_m->module~cmp_boundary_init_m module~cmp_channel_calc_m cmp_channel_calc_m module~cmp_channel_calc_m->module~cmp_channel_init_m module~cmp_channel_source_terms_m cmp_channel_source_terms_m module~cmp_channel_calc_m->module~cmp_channel_source_terms_m module~cmp_channel_flux_m cmp_channel_flux_m module~cmp_channel_flux_m->module~cmp_channel_init_m module~cmp_channel_source_terms_m->module~cmp_channel_init_m module~cmp_circulator_calc_m cmp_circulator_calc_m module~cmp_circulator_calc_m->module~cmp_circulator_init_m module~cmp_ffsrclink_calc_m cmp_FFsrcLink_calc_m module~cmp_ffsrclink_calc_m->module~cmp_ffsrclink_init_m module~cmp_fslink_calc_m cmp_FSlink_calc_m module~cmp_fslink_calc_m->module~cmp_fslink_init_m module~cmp_junction_calc_m cmp_junction_calc_m module~cmp_junction_calc_m->module~cmp_junction_init_m module~cmp_mesh2d_calc_m cmp_mesh2D_calc_m module~cmp_mesh2d_calc_m->module~cmp_mesh2d_init_m module~cmp_mesh2d_flux_m cmp_mesh2D_flux_m module~cmp_mesh2d_flux_m->module~cmp_mesh2d_init_m module~cmp_mesh2d_hdf5_write_m cmp_mesh2D_hdf5_write_m module~cmp_mesh2d_hdf5_write_m->module~cmp_mesh2d_init_m module~cmp_solid_calc_m cmp_solid_calc_m module~cmp_solid_calc_m->module~cmp_solid_init_m module~cmp_solid_flux_m cmp_solid_flux_m module~cmp_solid_flux_m->module~cmp_solid_init_m module~cmp_sssrclink_calc_m cmp_SSsrcLink_calc_m module~cmp_sssrclink_calc_m->module~cmp_sssrclink_init_m module~cmp_strand_calc_m cmp_strand_calc_m module~cmp_strand_calc_m->module~cmp_strand_init_m module~cmp_strand_source_terms_m cmp_strand_source_terms_m module~cmp_strand_calc_m->module~cmp_strand_source_terms_m module~cmp_strand_flux_m cmp_strand_flux_m module~cmp_strand_flux_m->module~cmp_strand_init_m module~cmp_strand_source_terms_m->module~cmp_strand_init_m program~reims_p reims_p program~reims_p->module~cmp_ssfluxlink_m program~reims_p->module~krn_linear_system_m program~reims_p->module~cmp_boundary_calc_m program~reims_p->module~cmp_channel_calc_m program~reims_p->module~cmp_channel_flux_m program~reims_p->module~cmp_circulator_calc_m program~reims_p->module~cmp_ffsrclink_calc_m program~reims_p->module~cmp_fslink_calc_m program~reims_p->module~cmp_junction_calc_m program~reims_p->module~cmp_mesh2d_calc_m program~reims_p->module~cmp_mesh2d_flux_m program~reims_p->module~cmp_mesh2d_hdf5_write_m program~reims_p->module~cmp_solid_calc_m program~reims_p->module~cmp_solid_flux_m program~reims_p->module~cmp_sssrclink_calc_m program~reims_p->module~cmp_strand_calc_m program~reims_p->module~cmp_strand_flux_m

Interfaces

public interface to_ptr_arr

Translation array 0d, 1d or 2d of doubles to array of pointers

  • public function to_ptr_arr0d(arr) result(ptr_arr)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=dp), intent(in), target :: arr

    Return Value type(dbl_pointer_t), (1)

  • public function to_ptr_arr1d(arr) result(ptr_arr)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=dp), intent(in), target :: arr(:)

    Return Value type(dbl_pointer_t), (size(arr))

  • public function to_ptr_arr2d(arr) result(ptr_arr)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=dp), intent(in), target :: arr(:,:)

    Return Value type(dbl_pointer_t), (size(arr))


Derived Types

type, public ::  dbl_pointer_t

encapsulate pointer in order to create array of pointers

Components

Type Visibility Attributes Name Initial
real(kind=dp), public, pointer :: p

pointer to double

type, public ::  coo_csr_t

Components

Type Visibility Attributes Name Initial
integer, public, len :: nnz

number of non-zeros (major size of the type)

integer, public :: idx = 1

tracing last filled index of global array

integer, public :: coo_col(nnz)

column idx of non zero array in coo

integer, public :: coo_row(nnz)

row idx of non zero array in coo

type(dbl_pointer_t), public :: coo_ptr(nnz)

non zero length array of pointers to physical value in coo

integer, public, pointer :: csr_col(:)

for pardiso final column idx of non zero array in csr

integer, public, pointer :: csr_row(:)

for pardiso final row idx of non zero array in csr

type(dbl_pointer_t), public, pointer :: csr_ptr(:)

for pardiso final non zero length array of pointers to physical value in csr

real(kind=dp), public :: csr_val(nnz)

non zero value array for pardiso

type(mkl_pardiso_handle), public :: pt(64)

internal pointers of pardiso

integer, public :: iparm(64) = 0

parameters for pardiso

integer, public :: perm(nnz)

non zero size after analysis for pardiso

logical, public :: analysed = .false.

is pardiso analysed?

type, public, abstract ::  port_t

Components

Type Visibility Attributes Name Initial
integer, public :: loc

top left location of port matrix

logical, public :: can_be_shared = .false.

type, public ::  port_list_t

Components

Type Visibility Attributes Name Initial
integer, public :: idx = 1

Tracking new entries

integer, public, allocatable :: nb(:)

Number of ports per component

character(len=:), public, allocatable :: list

contains entries like this: :,

Type-Bound Procedures

procedure, public :: add => port_list_add

Used by State components exposing ports here

procedure, public :: update => port_list_update

Used by krn_update to calculate offsets etc...

procedure, public :: find => port_list_find

Finding index of the port in the ports list by links components

procedure, public :: find_nbPorts => port_list_find_nbPorts

Finding number of ports for a given label in the ports list by links components

type, public ::  krn_t

Structure which will be used to size matrices like: coo,csr and ports

Components

Type Visibility Attributes Name Initial
integer, public :: idx = 1
integer, public, allocatable :: nb_state_vars(:)
integer, public, allocatable :: nb_non_zeros_exp(:)
integer, public, allocatable :: nb_non_zeros_imp(:)
type(port_list_t), public :: FF_flux_list
type(port_list_t), public :: FF_src_list
type(port_list_t), public :: FS_list
type(port_list_t), public :: SS_flux_list
type(port_list_t), public :: SS_src_list
character(len=:), public, allocatable :: PortIdxForFSLink_List
type(coo_csr_t(:)), public, allocatable :: imp

Implicit matrices in both format coo and csr

type(coo_csr_t(:)), public, allocatable :: exp

Explicit matrices in both format coo and csr

real(kind=dp), public, allocatable :: rhs_or_solution(:)

Right hand side of linear equation or it's solution

real(kind=dp), public, allocatable :: solution(:)

solution vector of the linear system

type(FF_flux_port_t), public, allocatable :: FF_flux_ports(:)

Fluid/Fluid port array --> flux

type(FF_src_port_t), public, allocatable :: FF_src_ports(:)

Fluid/Fluid port array --> source

type(FS_port_t), public, allocatable :: FS_ports(:)

Fluid/Solid port array

type(SS_flux_port_t), public, allocatable :: SS_flux_ports(:)

Solid/Solid port array --> flux

type(SS_src_port_t), public, allocatable :: SS_src_ports(:)

Solid/Solid port array --> source

Type-Bound Procedures

procedure, public :: init_part1 => krn_init_part1

Allocating kernel arrays with number components

procedure, public :: add => krn_add

Used by all components add their array and port requirements

procedure, public :: add_label => krn_add_label

Add label of 2d mesh to expose ports

procedure, public :: init_part2 => krn_init_part2

Allocating full matrices

procedure, public :: update => krn_update

Used by state owners to set ports locations and get back link to them

procedure, public :: coo_add => krn_coo_add

Used by state owners to add coordinate format array to the full array

procedure, public :: coo_add_link => krn_coo_add_link

Used by links to add coordinate format array to the full array

procedure, public :: coo_to_csr => krn_coo_to_csr

Conversion full coordinate format array to sparse compressed row array

type, public, extends(port_t) ::  FF_flux_port_t

Components

Type Visibility Attributes Name Initial
integer, public :: loc

top left location of port matrix

logical, public :: can_be_shared = .false.
real(kind=dp), public :: Prim(Nb_VarP)

Channel->link, primitive variables

real(kind=dp), public :: Cons(Nb_VarC)

Channel->link, conservative variables

real(kind=dp), public :: Su_fric

Channel->link, friction source term

real(kind=dp), public :: DerSu_fric(Nb_VarC)

Channel->link, derivatives of friction source term

real(kind=dp), public :: Sr_fric

Channel->link, friction source term (4th eq)

real(kind=dp), public :: DerSr_fric(Nb_VarC)

Channel->link, derivatives of friction source term (4th eq)

real(kind=dp), public :: Area

Channel->link, cross-section area of the pipe

real(kind=dp), public :: dxLoc

Channel->link, space step of the cell close to the boundary

real(kind=dp), public :: Sgn4j

Channel->link, sign used by junctions to identify incoming branches

real(kind=dp), public :: flx(Nb_VarC)

Link->channel, flux calculated by link

real(kind=dp), public :: vit

Link->channel, fluid velocity

real(kind=dp), public :: derFlx_derCon(Nb_VarC,Nb_VarC)

Link->channel, partial derivative of flux calculated by link

real(kind=dp), public :: derVit_derCon(Nb_VarC)

Link->channel, derivative of velocity for every variable

logical, public :: connected

Link connected to a port or not

type, public, extends(port_t) ::  FF_src_port_t

Components

Type Visibility Attributes Name Initial
integer, public :: loc

top left location of port matrix

logical, public :: can_be_shared = .false.
real(kind=dp), public :: Pra
real(kind=dp), public :: Re
real(kind=dp), public :: Phi
real(kind=dp), public :: llambda
real(kind=dp), public :: TempP
real(kind=dp), public :: AreaP
real(kind=dp), public :: DiamP
real(kind=dp), public :: dPrdUi(Nb_VarC)
real(kind=dp), public :: dRedUi(Nb_VarC)
real(kind=dp), public :: DerPhi(Nb_VarC)
real(kind=dp), public :: DerllambdadUi(Nb_VarC)
real(kind=dp), public :: DerTempPdUi(Nb_VarC)
real(kind=dp), public :: rhs_Se
real(kind=dp), public :: rhs_Sr
real(kind=dp), public :: DerSe(Nb_VarC)
real(kind=dp), public :: DerSr(Nb_VarC)
real(kind=dp), public :: Prim(Nb_VarP)
real(kind=dp), public :: Cons(Nb_VarC)

type, public ::  FF_src_port_pointer_t

Components

Type Visibility Attributes Name Initial
type(FF_src_port_t), public, pointer :: p

type, public, extends(port_t) ::  FS_port_t

Components

Type Visibility Attributes Name Initial
integer, public :: loc

top left location of port matrix

logical, public :: can_be_shared = .false.
character(len=6), public :: typeS
real(kind=dp), public :: Pra
real(kind=dp), public :: Re
real(kind=dp), public :: Phi
real(kind=dp), public :: llambda
real(kind=dp), public :: TempP
real(kind=dp), public :: AreaP
real(kind=dp), public :: DiamP
real(kind=dp), public :: dxLoc
real(kind=dp), public :: dPrdUi(Nb_VarC)
real(kind=dp), public :: dRedUi(Nb_VarC)
real(kind=dp), public :: DerPhi(Nb_VarC)
real(kind=dp), public :: DerllambdadUi(Nb_VarC)
real(kind=dp), public :: DerTempPdUi(Nb_VarC)
real(kind=dp), public :: TempS
real(kind=dp), public :: AreaS
real(kind=dp), public :: rhoMS
real(kind=dp), public :: cpMS
real(kind=dp), public :: dcpMSdT
real(kind=dp), public :: Dist4Grad
real(kind=dp), public :: VolMS
real(kind=dp), public :: lambdS
real(kind=dp), public :: DerlambdS
real(kind=dp), public :: LengthCont
real(kind=dp), public :: cpS
real(kind=dp), public :: dcpSdT
real(kind=dp), public :: rhoS
real(kind=dp), public :: SurfS
real(kind=dp), public :: rhs_SrcP_Se
real(kind=dp), public :: rhs_SrcP_Sr
real(kind=dp), public :: rhs_SrcS
real(kind=dp), public :: DerSrcSdT
real(kind=dp), public :: DerSrcP_Se(Nb_VarC)
real(kind=dp), public :: DerSrcP_Sr(Nb_VarC)
real(kind=dp), public :: Flx
real(kind=dp), public :: derFlx_derCon

type, public ::  FS_port_pointer_t

Components

Type Visibility Attributes Name Initial
type(FS_port_t), public, pointer :: p

type, public, extends(port_t) ::  SS_flux_port_t

Components

Type Visibility Attributes Name Initial
integer, public :: loc

top left location of port matrix

logical, public :: can_be_shared = .false.
real(kind=dp), public :: TempS
real(kind=dp), public :: lambdS
real(kind=dp), public :: DerlambdS
real(kind=dp), public :: AreaS
real(kind=dp), public :: Sgn4lk
real(kind=dp), public :: dxLoc
real(kind=dp), public :: rhoMS
real(kind=dp), public :: cpMs
real(kind=dp), public :: Flx
real(kind=dp), public :: derFlx_derCon

type, public ::  SS_flux_port_pointer_t

Components

Type Visibility Attributes Name Initial
type(SS_flux_port_t), public, pointer :: p

type, public, extends(port_t) ::  SS_src_port_t

Components

Type Visibility Attributes Name Initial
integer, public :: loc

top left location of port matrix

logical, public :: can_be_shared = .false.
character(len=6), public :: typeS
real(kind=dp), public :: TempS
real(kind=dp), public :: rhoS
real(kind=dp), public :: VolS
real(kind=dp), public :: Dist4Grad
real(kind=dp), public :: LengthCont
real(kind=dp), public :: Height
real(kind=dp), public :: SurfS
real(kind=dp), public :: cpS
real(kind=dp), public :: dcpSdT
real(kind=dp), public :: lambdS
real(kind=dp), public :: DerlambdS
real(kind=dp), public :: rhs_SrcS
real(kind=dp), public :: DerSrcSdT
real(kind=dp), public :: Flx
real(kind=dp), public :: derFlx_derCon

type, public ::  SS_src_port_pointer_t

Components

Type Visibility Attributes Name Initial
type(SS_src_port_t), public, pointer :: p

Functions

public function port_list_update(me, idx, loc, start_state_idx, ports_array) result(view)

Arguments

Type IntentOptional Attributes Name
class(port_list_t), intent(inout) :: me
integer, intent(in) :: idx
integer, intent(in) :: loc(:)
integer, intent(in) :: start_state_idx
class(port_t), intent(in), target :: ports_array(:)

which will have updated loc (should be inout?)

Return Value class(port_t), pointer, (:)

Returned view on the ports array with updated values of: loc

public function port_list_find(me, name, idx) result(idx_out)

Arguments

Type IntentOptional Attributes Name
class(port_list_t), intent(in), target :: me
character(len=*), intent(in) :: name

Name of the component

integer, intent(in) :: idx

Port number

Return Value integer

Index of the port on ports array

public function port_list_find_nbPorts(me, name) result(idx_out)

Arguments

Type IntentOptional Attributes Name
class(port_list_t), intent(in), target :: me
character(len=*), intent(in) :: name

Name of the component

Return Value integer

Index of the port on ports array

public function to_ptr_arr0d(arr) result(ptr_arr)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), target :: arr

Return Value type(dbl_pointer_t), (1)

public function to_ptr_arr1d(arr) result(ptr_arr)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), target :: arr(:)

Return Value type(dbl_pointer_t), (size(arr))

public function to_ptr_arr2d(arr) result(ptr_arr)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in), target :: arr(:,:)

Return Value type(dbl_pointer_t), (size(arr))

public function from_ptr_arr(ptr_arr) result(arr)

Arguments

Type IntentOptional Attributes Name
type(dbl_pointer_t), intent(inout) :: ptr_arr(:)

Return Value real(kind=dp), allocatable, (:)


Subroutines

public subroutine port_list_add(me, idx, name, nb_ports)

Arguments

Type IntentOptional Attributes Name
class(port_list_t), intent(inout) :: me
integer, intent(in) :: idx
character(len=*), intent(in) :: name

Component (port) name

integer, intent(in) :: nb_ports

public subroutine krn_init_part1(me, size)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout) :: me
integer, intent(in) :: size

public subroutine krn_init_part2(me)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout) :: me

public subroutine krn_update(me, rhs_or_solution_view, FF_flux_p_loc, FS_p_loc, FF_src_p_loc, SS_flux_p_loc, SS_src_p_loc, CompName, FF_flux_p_view, FS_p_view, FF_src_p_view, SS_flux_p_view, SS_src_p_view)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout), target :: me
real(kind=dp), intent(out), optional, pointer :: rhs_or_solution_view(:)

Returns pointer with rhs or solution array

integer, intent(in), optional :: FF_flux_p_loc(:)

Position (state index) of the FF_flux ports local to the component

integer, intent(in), optional :: FS_p_loc(:)

Position (state index) of the FS ports local to the component

integer, intent(in), optional :: FF_src_p_loc(:)

Position (state index) of the FF_src ports local to the component

integer, intent(in), optional :: SS_flux_p_loc(:)

Position (state index) of the SS_flux ports local to the component

integer, intent(in), optional :: SS_src_p_loc(:)

Position (state index) of the SS_src ports local to the component

character(len=*), intent(in), optional :: CompName
type(FF_flux_port_t), intent(out), optional, pointer :: FF_flux_p_view(:)

Returns pointer with array of FF_flux ports for this component

type(FS_port_t), intent(out), optional, pointer :: FS_p_view(:)

Returns pointer with array of FS ports for this component

type(FF_src_port_t), intent(out), optional, pointer :: FF_src_p_view(:)

Returns pointer with array of FF_src ports for this component

type(SS_flux_port_t), intent(out), optional, pointer :: SS_flux_p_view(:)

Returns pointer with array of SS_flux ports for this component

type(SS_src_port_t), intent(out), optional, pointer :: SS_src_p_view(:)

Returns pointer with array of SS_src ports for this component

public subroutine krn_add(me, name, nb_state_vars, nb_non_zeros_exp, nb_non_zeros_imp, nb_FF_flux_ports, nb_FS_ports, nb_FF_src_ports, nb_SS_flux_ports, nb_SS_src_ports)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout) :: me
character(len=*), intent(in) :: name
integer, intent(in) :: nb_state_vars
integer, intent(in) :: nb_non_zeros_exp
integer, intent(in) :: nb_non_zeros_imp
integer, intent(in) :: nb_FF_flux_ports
integer, intent(in) :: nb_FS_ports
integer, intent(in) :: nb_FF_src_ports
integer, intent(in) :: nb_SS_flux_ports
integer, intent(in) :: nb_SS_src_ports

public subroutine krn_add_label(me, name_plus_label, nb_nodes_FS, nb_nodes_SS)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout) :: me
character(len=*), intent(in) :: name_plus_label
integer, intent(in), optional :: nb_nodes_FS
integer, intent(in), optional :: nb_nodes_SS

public subroutine krn_coo_add(me, for_explicit, col, row, val)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout), target :: me
logical, intent(in) :: for_explicit

if true add to explicit arrays otherwise to implicit

integer, intent(in) :: col(:)

relative indexes of the variables placed into global matrix

integer, intent(in) :: row(:)

relative indexes of the variables placed into global matrix

type(dbl_pointer_t), intent(in) :: val(:)

pointer to the value which should be placed into global matrix

public subroutine krn_coo_add_link(me, port1, port2, col, row, val, val_out)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout) :: me
class(port_t), intent(in) :: port1
class(port_t), intent(in) :: port2
integer, intent(in) :: col(:)

relative indexes of the variables placed into global matrix

integer, intent(in) :: row(:)

relative indexes of the variables placed into global matrix

type(dbl_pointer_t), intent(in) :: val(:)

pointer to the value which should be placed into global matrix

type(dbl_pointer_t), intent(out), optional :: val_out(:)

in case of overlapping matrix

public subroutine accumulate(Mat2add, Mx)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: Mat2add(:,:)
type(dbl_pointer_t), intent(inout) :: Mx(:)

public subroutine krn_coo_to_csr(me)

Arguments

Type IntentOptional Attributes Name
class(krn_t), intent(inout) :: me

public subroutine coo_to_csr(nb_state_vars, arr)

Using Intel sblas functions to translate coo to csr matrix

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nb_state_vars
type(coo_csr_t(:)), intent(inout), allocatable, target :: arr