function x=t1(a,b,n) z=n+m+n, c(1,1)=z, c(2,1)=z+1, c(1,2)=2, c(2,2)=0, if n==1 then, x=a+b+a, else, x=a+b-a'+b, end, y=a(3,z+1)-x(z,5), x=2*x*x*2.21, sel=1:5, t=a*b, for k=1:n, z1=z*a(k+1,k)+3, end, t(sel,5)=a(2:4,7), x=[a b;-b' a']
Translation procedure
-->lt1=list(); -->lt1(1)=list('1','m','m'); -->lt1(2)=list('1','m','m'); -->lt1(3)=list('0','1','1'); -->// show the initial data -->printspecs(t1,lt1) Type and dimension of input parameters: -------------------------------------- | variable number | fortran type |# rows |# columns | |1 |double precision |m |m | |2 |double precision |m |m | |3 |entier |1 |1 | -->//translate -->txt=sci2for(t1,'t1',lt1);Generated Fortran code:
subroutine t1(a,b,n,x,m,work) c! c automatic translation c c! calling sequence c ---------------- c c a : double precision variable of size m,m c b : double precision variable of size m,m c n : integer variable c x : double precision variable of size m+m,m+m c m : integer variable c work : working array : c max(m*m,m*m+m*m+m*m)+m*m c iwork : working array :3 c c dimension of local variables c ----------------------------- c! double precision a(m,m),b(m,m),x(m+m,m+m),y,t(m,m),z1,t(m,m),work & (*) integer n,m,z,c(2,2),sel(5),k,iwork(3) c c adress of local variables iwt = 1 c iw0 = iwt+m*m iiw0 = 1 c z = n+m+n c c(1,1)=n+m+n c c(2,1)=n+m+n+1 c c(1,2)=2 c c(2,2)=0 c if(n.eq.1) then c iw1 = iw0+m*m call dcopy(m*m,a,1,work(iw0),1) call dadd(m*m,work(iw0),1,b,1) call dcopy(m*m,work(iw0),1,x,1) call dadd(m*m,x,1,a,1) c else c iw1 = iw0+m*m call dcopy(m*m,a,1,work(iw0),1) call dadd(m*m,work(iw0),1,b,1) iw2 = iw1+m*m call mtran(a,m,work(iw1),m,m,m) iw3 = iw2+m*m call ddif(m*m,work(iw0),1,work(iw1),1,work(iw2),1) call dcopy(m*m,work(iw2),1,x,1) call dadd(m*m,x,1,b,1) c endif c y = a(3,n+m+n+1)-x(n+m+n,5) c iw1 = iw0+m*m call dcopy(m*m,x,1,work(iw0),1) call dscal(m*m,2D0,work(iw0),1) iw2 = iw1+m*m call dmmul(work(iw0),m,x,m,work(iw1),m,m,m,m) call dcopy(m*m,work(iw1),1,x,1) call dscal(m*m,2.21,x,1) c call ivimp(1,5,1,sel) c call dmmul(a,m,b,m,work(iwt),m,m,m,m) c do 20 k = 1,n c z1 = dble(n+m+n)*a(k+1,k)+3 c 20 continue c iiw1 = iiw0+3 call ivimp(2,4,1,iwork(iiw0)) iw1 = iw0+3 call dmext(a,m,m,iwork(iiw0),3,7,1,work(iw0)) call dmins(work(iwt),m,m,sel,5,5,1,work(iw0),3) c iw1 = iw0+m*m call mtran(b,m,work(iw0),m,m,m) iw1 = iw0+m*m call mtran(b,m,work(iw0),m,m,m) call dscal(m*m,-1.0d0,work(iw0),1) call mtran(a,m,work(iw0),m,m,m) call dmcopy(a,m,x(1,1),m+m,m,m) call dmcopy(b,m,x(1,m+1),m+m,m,m) call dmcopy(work(iw0),m,x(m+1,1),m+m,m,m) call dmcopy(work(iw0),m,x(m+1,m+1),m+m,m,m) c return c end