1module state_matrices
2
3  implicit none
4  private
5
6  public :: state_matrix_copy
7  public :: state_matrix_t
8  public :: matrix_element_t
9
10  type :: matrix_element_t
11     private
12     integer, dimension(:), allocatable :: f
13  end type matrix_element_t
14
15  type :: state_matrix_t
16     private
17     type(matrix_element_t), dimension(:), allocatable :: me
18  end type state_matrix_t
19
20  type :: polarization_t
21     logical :: polarized = .false.
22     integer :: spin_type = 0
23     integer :: multiplicity = 0
24     type(state_matrix_t) :: state
25  end type polarization_t
26
27contains
28
29  function polarization_copy (pol_in) result (pol)
30    type(polarization_t) :: pol
31    type(polarization_t), intent(in) :: pol_in
32    !!! type(state_matrix_t) :: state_dummy
33    pol%polarized = pol_in%polarized
34    pol%spin_type = pol_in%spin_type
35    pol%multiplicity = pol_in%multiplicity
36    !!! state_dummy = state_matrix_copy (pol_in%state)
37    !!! pol%state = state_dummy
38    pol%state = state_matrix_copy (pol_in%state)
39  end function polarization_copy
40
41  function state_matrix_copy (state_in) result (state)
42    type(state_matrix_t) :: state
43    type(state_matrix_t), intent(in), target :: state_in
44  end function state_matrix_copy
45
46end module state_matrices
47