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