m_qtlmap_isymmax2sat
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