-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfactory_distance_utilities.f90
97 lines (94 loc) · 2.75 KB
/
factory_distance_utilities.f90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
!****h* Kohonen/factory_distance_utilities
!
! NAME
! MODULE factory_distance_utilities
!
! PURPOSE
! This module defines a factory to create distance objects
!
! AUTHOR
! Oscar Garcia-Cabrejo
!$Author$
! NOTES
!$Rev$
!$HeadURL$
! MODIFICATION HISTORY
!$LastChangedDate$
!$LastChangedRevision$
!$LastChangedBy$
!*****
module factory_distance_utilities
!
use distance_base_utilities;
use euclidean_distance_utilities;
! use manhattan_distance_utilities;
! use correlation_distance_utilities;
! use correlation2_distance_utilities;
! use itakura_saito_distance_utilities;
! use prediction_distance_utilities;
! use log_likelihood_distance_utilities;
! use wavelet_distance_utilities;
! use dtw_distance_utilities;
!
implicit none;
!****c* factory_distance_utilities/factory_distance
! NAME
! factory_distance
! PURPOSE
! Class to represent a distance factory
type factory_distance
!
! METHODS
!
contains
procedure,public :: create_distance
end type factory_distance
!*****
contains
subroutine create_distance(factory,type_,dist)
class(factory_distance) :: factory
character(len=*) :: type_
class(distance_base),allocatable :: dist
!
select case(trim(type_))
case('euclidean')
!write(*,*) 'Euclidean distance';
if(allocated(dist)) deallocate(dist);
allocate(euclidean_distance :: dist);
! case('manhattan')
! !write(*,*) 'Manhattan distance allocated';
! if(allocated(dist)) deallocate(dist);
! allocate(manhattan_distance :: dist);
! case('correlation')
! !write(*,*) 'Correlation distance allocated';
! if(allocated(dist)) deallocate(dist);
! allocate(correlation_distance :: dist);
! case('correlation2')
! !write(*,*) 'Correlation2 distance allocated';
! if(allocated(dist)) deallocate(dist);
! allocate(correlation2_distance :: dist);
! case('itakura_saito')
! !write(*,*) 'Itakura-Saito distance allocated';
! if(allocated(dist)) deallocate(dist);
! allocate(itakura_saito_distance :: dist);
! case('prediction')
! ! write(*,*) 'Prediction distance allocated';
! if(allocated(dist)) deallocate(dist);
! allocate(prediction_distance :: dist);
! case('log_likelihood')
! if(allocated(dist)) deallocate(dist);
! allocate(log_likelihood_distance :: dist);
! case('wavelet')
! if(allocated(dist)) deallocate(dist);
! allocate(wavelet_distance :: dist);
! case('dtw')
! if(allocated(dist)) deallocate(dist);
! allocate(dtw_distance :: dist);
case default
write(*,*) 'ERROR: the requested distance is not defined'
stop
end select
!
end subroutine create_distance
!
end module factory_distance_utilities