m_qtlmap_isymmax2sat

[ Top ] [ TOOLS ] [ Modules ]

NAME

    m_qtlmap_isymmax2sat

DESCRIPTION

NOTES

SEE ALSO


create_sparse_W

[ Top ] [ m_qtlmap_isymmax2sat ] [ Subroutines ]

NAME

    create_sparse_W

DESCRIPTION

SOURCE

 93     ! this programs serves to take full-stored W and translate it into
 94     ! row, column, value
 95     ! lf<F4>stored (i<=j) format for non-null elements
 96     subroutine create_sparse_W (sW,W ,m,posx,posy,cost)
 97     integer , intent(in)                       :: sW
 98     real(kind=dp),dimension(sW,sW),intent(in)  :: W
 99     integer                     ,intent(out) :: m
100     integer     ,dimension(sW*sW)   ,intent(out) :: posx,posy ! On exit dimension value is m
101     real(kind=dp),dimension(sW*sW)  ,intent(out)  :: cost ! On exit dimension value is m
102 
103     integer:: i,j,n
104     real(kind=dp):: val
105 
106     if ( size(W,1) /= size(W,2)) then
107       call log_mess("W,dim 1:"//str(size(W,1)),ERROR_DEF)
108       call log_mess("W,dim 2:"//str(size(W,2)),ERROR_DEF)
109       call stop_application("Devel error : create_sparse_W W have to be a squared matrice ")
110     end if
111 
112     if ( size(W,1) <=0 ) then
113       call stop_application("Devel error : create_sparse_W  W have a no dimension (size=0)")
114     end if
115 
116     n = size(W,1)
117     m = 0
118     ! loop over values
119     do i=1,n
120      do j=i,n
121       if(W(i,j)/=0) then
122    !    if (i<=j) then
123 !        print *,m,W(i,j),'SIZE,W : ',size(W,1),size(cost),size(posx)
124         m = m+1
125         posx(m)=i
126         posy(m)=j
127         cost(m)=W(i,j)
128 !        print *,'--'
129     !   endif
130       endif
131      enddo
132     enddo
133 
134    call log_mess("create_sparse_W find m:"//str(m)//' non-null values in W',INFO_DEF)
135 
136 
137    !print *,'m= ',m,'non-null values'
138    !print *,'in',count((count_row/=0)),'rows from n= ',n
139 
140    end subroutine create_sparse_W

get_h_from_w

[ Top ] [ m_qtlmap_isymmax2sat ] [ Subroutines ]

NAME

    get_h_from_w

DESCRIPTION

SOURCE

64     function get_h_from_w(sW,W,H,m) result(ok)
65        integer                     ,intent(in)              :: sW
66        real(kind=dp),dimension(sW,sW),intent(in)            :: W
67        integer                     ,intent(out)             :: m
68        integer     ,dimension(sW),intent(out)        :: H
69        integer     ,dimension(sW*sW)        :: posx,posy ! On exit dimension value is m
70        real(kind=dp),dimension(sW*sW)       :: cost
71 
72        integer :: n,ret
73        logical :: ok
74        cost=0.d0
75        posx=0
76        posy=0
77        n = size(W,1)
78        ret=1
79        call create_sparse_W (sW,W ,m,posx,posy,cost)
80        ret = solveSymMax2SAT(n,m,posx,posy,cost,H)
81        ok = ( ret /= 0 )
82 
83     end function get_h_from_w

solvesymmax2sat

[ Top ] [ m_qtlmap_isymmax2sat ] [ Subroutines ]

NAME

    solvesymmax2sat

DESCRIPTION

     Interface with C++ development of symmax2sat
     Calcul de h'W h
     resolution pour 1 famille

     interpretation de h
 GENOTYPE :    [A11 A12  A21 A22  A23 A23  ..... ]
 ORIENTATION H:[  1         -1       1     ..... ]
 SOLUTION   => [A11 A12  A22 A21  A23 A23  ..... ]

SOURCE

40   interface
41             function solvesymmax2sat (n, m,posx,posy,cost,sol) result (r)
42                integer ,intent(in):: n ! number of variable/markers
43                integer ,intent(in):: m ! number of constraints
44                integer,dimension(m),intent(in) :: posx
45                integer,dimension(m),intent(in) :: posy
46                double precision,dimension(m),intent(in) :: cost
47                integer,dimension(m),intent(inout) :: sol
48                integer :: r
49             end function solveSymMax2SAT
50   end interface

test_module_isymmax2sat1

[ Top ] [ m_qtlmap_isymmax2sat ] [ Subroutines ]

NAME

    test_module_isymmax2sat1

DESCRIPTION

SOURCE

149    subroutine test_module_isymmax2sat1
150 
151       integer   :: n,m
152       integer,dimension(3) :: posx,posy,sol
153       double precision,dimension(3) :: cost
154       integer :: step
155       posx(1)=1
156       posx(2)=1
157       posx(3)=2
158       posy(1)=2
159       posy(2)=3
160       posy(3)=3
161       cost(1)=1.d0
162       cost(2)=-3.d0
163       cost(3)=-2.d0
164       n = 3
165       m = 3
166       step = solveSymMax2SAT(n,m,posx,posy,cost,sol)
167       print *,'res:',step
168       print *,sol(1),sol(2),sol(3)
169       return
170 
171    end subroutine test_module_isymmax2sat1
172 
173    subroutine test_module_isymmax2sat2
174 
175       integer   :: i,m
176       real(kind=dp),dimension(20,20)  :: W
177       integer      ,dimension(20)     :: H
178       logical                         :: ok
179 
180       data (W(1,i), i = 1, 20) / &
181       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
182       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
183       data (W(2,i), i = 1, 20) / &
184       0.00000d0,0.00000d0,0.00000d0,0.00000d0,-0.46352d0,-0.39319d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
185       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.11661d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
186       data (W(3,i), i = 1, 20) / &
187       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
188       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
189       data (W(4,i), i = 1, 20) / &
190       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
191       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
192       data (W(5,i), i = 1, 20) / &
193       0.00000d0,-0.46352d0,0.00000d0,0.00000d0,0.00000d0,0.73634d0,2.25498d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
194       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.14534d0,0.00000d0,0.00000d0,0.00000d0/
195       data (W(6,i), i = 1, 20) / &
196       0.00000d0,-0.39319d0,0.00000d0,0.00000d0,0.73634d0,0.00000d0,0.73634d0,0.00000d0,0.00000d0,0.00000d0,0.33943d0,&
197       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
198       data (W(7,i), i = 1, 20) / &
199       0.00000d0,0.00000d0,0.00000d0,0.00000d0,2.25498d0,0.73634d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,1.96596d0,&
200       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.20458d0,0.18216d0,0.00000d0,0.00000d0,0.00000d0/
201       data (W(8,i), i = 1, 20) / &
202       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
203       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
204       data (W(9,i), i = 1, 20) / &
205       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
206       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
207       data (W(10,i), i = 1, 20) / &
208       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
209       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
210       data (W(11,i), i = 1, 20) / &
211       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.33943d0,1.96596d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
212       0.00000d0,0.00000d0,0.00000d0,0.00000d0,1.01829d0,-0.29629d0,0.00000d0,0.00000d0,0.00000d0/
213       data (W(12,i), i = 1, 20) / &
214       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
215       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
216       data (W(13,i), i = 1, 20) / &
217       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
218       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
219       data (W(14,i), i = 1, 20) / &
220       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
221       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
222       data (W(15,i), i = 1, 20) / &
223       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
224       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
225       data (W(16,i), i = 1, 20) / &
226       0.00000d0,0.11661d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.20458d0,0.00000d0,0.00000d0,0.00000d0,1.01829d0,&
227       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.73634d0,0.00000d0,0.00000d0,-0.39319d0/
228       data (W(17,i), i = 1, 20) / &
229       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.14534d0,0.00000d0,0.18216d0,0.00000d0,0.00000d0,0.00000d0,-0.29629d0,&
230       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.73634d0,0.00000d0,0.00000d0,0.00000d0,-1.85409d0/
231       data (W(18,i), i = 1, 20) / &
232       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
233       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
234       data (W(19,i), i = 1, 20) / &
235       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
236       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0/
237       data (W(20,i), i = 1, 20) / &
238       0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,0.00000d0,&
239       0.00000d0,0.00000d0,0.00000d0,0.00000d0,-0.39319d0,-1.85409d0,0.00000d0,0.00000d0,0.00000d0/
240 
241       print *,'N=20'
242       print *,'M doit etre egale a 16'
243       ok = get_h_from_w(20,W,H,m)
244 
245 !      print *,'res:',step
246 !      print *,sol(1),sol(2),sol(3)
247       return
248 
249    end subroutine test_module_isymmax2sat2