function x=t3(a,b,c,d) x=[a;c]/[a b;c d]*3.5
Translation procedure
-->lt3=list(); -->lt3(1)=list('1','m1','n1'); -->lt3(2)=list('1','m1','n2'); -->lt3(3)=list('1','m2','n1'); -->lt3(4)=list('1','m2','n2'); -->// show the initial data -->printspecs(t3,lt3) type and dimension of input parameters --------------------------------------- | variable number | fortran type |# rows |# columns | |1 |double precision |m1 |n1 | |2 |double precision |m1 |n2 | |3 |double precision |m2 |n1 | |4 |double precision |m2 |n2 | -->//translate -->txt=sci2for(t3,'t3',lt3);Generated Fortran code
subroutine t3(a,b,c,d,x,m1,n1,n2,m2,work,iwork,ierr) c! c automatic translation c c! calling sequence c ---------------- c c a : double precision variable of size m1,n1 c b : double precision variable of size m1,n2 c c : double precision variable of size m2,n1 c d : double precision variable of size m2,n2 c x : double precision variable of size m1+m2,n1 c m1 : integer variable c n1 : integer variable c n2 : integer variable c m2 : integer variable c work : working array : c (m1+m2)*n1+(m1+m2)*(n1+n2)+(m1+m2)*(n1+n2)+(m1+m2)*(m1+m2 c )+m1+m2 c iwork : working array : c m1+m2 c ierr : error c 0 : correct run c 1 : singular work(iw0) matrix c! double precision a(m1,n1),b(m1,n2),c(m2,n1),d(m2,n2),x(m1+m2,n1), & work(*) integer m1,n1,n2,m2,iwork(*) c iw0 = 1 iiw0 = 1 c iw0 = iw+(m1+m2)*n1-1 call dmcopy(a,n1,work(iw-1+1),m1+m2,n1,m1) call dmcopy(c,n1,work(iw-1+m1+1),m1+m2,n1,m2) iw1 = iw0+(m1+m2)*(n1+n2) call dmcopy(a,n1,work(iw0+1),m1+m2,n1,m1) call dmcopy(b,n2,work(iw0+n1*(m1+m2)+1),m1+m2,n2,m1) call dmcopy(c,n1,work(iw0+m1+1),m1+m2,n1,m2) call dmcopy(d,n2,work(iw0+n1*(m1+m2)+m1+1),m1+m2,n2,m2) iw2 = iw1+(m1+m2)*(n1+n2) iw3 = iw2+(m1+m2)*(m1+m2) iw4 = iw3+m1+m2 call dcopy((m1+m2)*(n1+n2),work(iw0),1,work(iw2),1) call dgefa(work(iw2),m1+m2,n1+n2,iwork(iiw-1),ierr) if(ierr.ne.0) then ierr=1 return endif call dgesl(work(iw2),m1+m2,n1+n2,iwork(iiw-1),work(iw1),0) call dcopy((m1+m2)*n1,work(iw1),1,x,1) call dscal((m1+m2)*n1,3.5,x,1) c return c end