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
|
function [out,nwrk,txt]=getwrk(nwrk,typ,m,n)
//Cette macro alloue une matrice de taille m*n de type fortran typ dans le
// tableau de travail correspondant (modifie en consequence nwrk)
// et retourne
// -dans out une chaine de la forme 'work(iwn)' ou 'iwork(iiwn)'
// le n etant defini automatiquement.
// -dans txt les lignes fortran permettant de definir iwn ou iiwn
//
//!
// Copyright INRIA
mn=mulf(m,n)
if typ=='1' then
i=nwrk(1)
nw2=nwrk(2);[m2,n2]=size(nw2)
if n2>0 then
free=find(nw2(2,:)=='0')
k=find(nw2(1,free)==mn)
if k==[] then
nwrk(1)=nwrk(1)+1
nwrk(2)=[nwrk(2) [mn;'1']]
txt=[' iw'+string(i)+' = '+addf('iw'+string(i-1),mn)];
else
i=free(k(1))
nw2(2,i)='1';nwrk(2)=nw2
end
else
nwrk(1)=nwrk(1)+1
nwrk(2)=[nwrk(2) [mn;'1']]
txt=[' iw'+string(i)+' = '+addf('iw'+string(i-1),mn)];
end
out='work(iw'+string(i-1)+')'
else
i=nwrk(4)
nw5=nwrk(5);[m5,n5]=size(nw5)
if n5>0 then
free=find(nw5(2,:)=='0')
k=find(nw5(1,free)==mn)
if k==[] then
nwrk(4)=nwrk(4)+1
nwrk(5)=[nwrk(5),[mn;'1']];
txt=[' iiw'+string(i)+' = '+addf('iiw'+string(i-1),mn)];
else
i=free(k(1))
nw5(2,i)='1';nwrk(5)=nw5
end
else
nwrk(4)=nwrk(4)+1
nwrk(5)=[nwrk(5),[mn;'1']]
txt=[' iiw'+string(i)+' = '+addf('iiw'+string(i-1),mn)];
end
out='iwork(iiw'+string(i-1)+')'
end
|