external_predict_map Subroutine

public subroutine external_predict_map(prot, nx, ny, new_pat, npat, nvar, node_index) bind(C, name="predict_som")

Uses

  • proc~~external_predict_map~~UsesGraph proc~external_predict_map self_organizing_map%external_predict_map iso_c_binding iso_c_binding proc~external_predict_map->iso_c_binding

Subroutine to connect this module to R

Type Bound

self_organizing_map

Arguments

Type IntentOptional Attributes Name
real(kind=c_double), intent(in) :: prot(nx*ny,nvar)
integer(kind=c_int), intent(in) :: nx
integer(kind=c_int), intent(in) :: ny
real(kind=c_double), intent(in) :: new_pat(npat,nvar)
integer(kind=c_int), intent(in) :: npat
integer(kind=c_int), intent(in) :: nvar
integer(kind=c_int), intent(out) :: node_index(npat,3)

Calls

proc~~external_predict_map~~CallsGraph proc~external_predict_map self_organizing_map%external_predict_map none~set_prototype kohonen_prototype%set_prototype proc~external_predict_map->none~set_prototype proc~create_som self_organizing_map%create_som proc~external_predict_map->proc~create_som proc~destroy_som self_organizing_map%destroy_som proc~external_predict_map->proc~destroy_som proc~predict_som self_organizing_map%predict_som proc~external_predict_map->proc~predict_som error_stop error_stop proc~create_som->error_stop none~create_distance factory_distance%create_distance proc~create_som->none~create_distance none~create~3 rkiss05_generator%create proc~create_som->none~create~3 proc~calculate_coordinates self_organizing_map%calculate_coordinates proc~create_som->proc~calculate_coordinates proc~calculate_distance_matrix self_organizing_map%calculate_distance_matrix proc~create_som->proc~calculate_distance_matrix proc~create_random_sample self_organizing_map%create_random_sample proc~create_som->proc~create_random_sample proc~position2index self_organizing_map%position2index proc~create_som->proc~position2index none~destroy~9 kohonen_prototype%destroy proc~destroy_som->none~destroy~9 float float proc~predict_som->float none~distance~8 kohonen_prototype%distance proc~predict_som->none~distance~8 none~get_prototype kohonen_prototype%get_prototype proc~predict_som->none~get_prototype proc~kohonen_pattern_accessor kohonen_pattern%kohonen_pattern_accessor proc~predict_som->proc~kohonen_pattern_accessor none~create_distance->error_stop none~distance~8->none~get_prototype calculate calculate none~distance~8->calculate none~generate rkiss05_generator%generate proc~create_random_sample->none~generate

Variables

Type Visibility Attributes Name Initial
type(self_organizing_map), public :: my_som
type(kohonen_layer_parameters), public, dimension(1) :: parameters
integer, public :: ipat
integer, public :: inode
integer, public :: i_hit
integer, public :: nx1
integer, public :: ny1
integer, public :: nz1
integer, public :: cx
integer, public :: cy
integer, public :: cz
integer, public :: ix
integer, public :: iy
integer, public :: iz
integer, public :: pos
integer, public :: ierr
real(kind=wp), public :: dist
real(kind=wp), public :: dist_hit
real(kind=wp), public, dimension(nvar,1) :: temp
type(kohonen_pattern), public, dimension(npat) :: input_data

Source Code

    subroutine external_predict_map(prot,nx,ny,new_pat,npat,nvar,node_index) & 
        bind(C, name="predict_som")
!========================================================================================
!!    Subroutine to connect this module to R

        use, intrinsic :: iso_c_binding, only : c_double, c_int
        integer(c_int),intent(in) :: nx,ny,npat,nvar
        real(c_double),intent(in) :: prot(nx*ny,nvar),new_pat(npat,nvar)
        integer(c_int),intent(out) :: node_index(npat,3) 
!!
        type(self_organizing_map) :: my_som
        type(kohonen_layer_parameters),dimension(1) :: parameters
        integer :: ipat,inode,i_hit,nx1,ny1,nz1,cx,cy,cz,ix,iy,iz,pos,ierr
        real(kind=wp) :: dist,dist_hit
        real(kind=wp),dimension(nvar,1) :: temp
        type(kohonen_pattern),dimension(npat) :: input_data
!
        parameters(1)%train_option=3;
        parameters(1)%number_nodes_nx=nx;
        parameters(1)%number_nodes_ny=ny;
        parameters(1)%number_nodes_nz=1;
        parameters(1)%number_variables1=nvar;
        parameters(1)%number_variables2=1;
        parameters(1)%number_variables=nvar;
        parameters(1)%number_patterns=npat;
        parameters(1)%number_epochs=1;
        parameters(1)%learning_rate=0.0d0;
        parameters(1)%random_seed_=12345;
        parameters(1)%node_type="hexagonal"
        parameters(1)%debug_level=0;
        parameters(1)%debug_file="NOFILE"
        parameters(1)%pattern_file="NOFILE"
        parameters(1)%output_file="NOFILE"
        parameters(1)%distance_type="euclidean" !"euclidean" !euclidean, manhattan, correlation, correlation2
        parameters(1)%neighborhood_type="gaussian" !gaussian,bubble
        parameters(1)%som_type="normal_som"!,visom
        parameters(1)%toroidal_grid=.TRUE.
!
! call parameters(1)%print();
!
        call my_som%create(parameters);
!
        pos=0;
        iz=1; 
        do iy=1,ny
            do ix=1,nx
                pos=pos+1;
                temp(1:nvar,1)=prot(pos,1:nvar)
                call my_som%grid(ix,iy,iz)%set_prototype(temp)
            enddo
        enddo
        !
        do ipat=1,npat
            temp(1:nvar,1)=new_pat(ipat,1:nvar);
            call input_data(ipat)%create(temp);
        enddo
        !
        call my_som%predict(input_data,node_index);
        !
        call my_som%destroy();
        !
        do ipat=1,size(input_data);
            call input_data(ipat)%destroy();
        enddo
!
    end subroutine external_predict_map