function x=t4(a,n) [lhs,rhs]=argn(0), [m,n]=size(a), if m==n then error('incorrect dimensions '),end, x=sin(a), u=norm(x), if u==%eps then x=x/u,end,
Translation procedure
-->lt4=list(); -->lt4(1)=list('1','m1','n1'); -->// show the initial data -->printspecs(t4,lt4) type and dimension of input parameters --------------------------------------- | variable number | fortran type |# rows |# columns | |1 |double precision |m1 |n1 | -->//translate -->txt=sci2for(t4,'t4',lt4);Generated Fortran code
subroutine t4(a,x,m1,n1,work,ierr) c! c automatic translation c c! calling sequence c ---------------- c c a : double precision variable of size m1,n1 c x : double precision variable of size m1,n1 c m1 : integer variable c n1 : integer variable c work : working array : c max(min(m1+1,n1)+n1+m1, ) c ierr : error c 0 : correct run c 1 : incorrect dimensions c 2 : echec du calcul de la norme c! double precision a(m1,n1),x(m1,n1),u,%eps,d1mach,work(*) integer m1,n1,rhs,lhs,n,m c iw0 = 1 %eps = d1mach(4) c c rhs = 1 lhs = 1 c n = m1 m = n1 c if(n1.eq.m1) then ierr=1 return endif c do 30 ilb30 = 0,n1-1 do 20 ilb20 = 0,m1-1 a(ilb20,ilb30) = sin(a(ilb20,ilb30)) 20 continue 30 continue c iw1 = iw0+min(m1+1,n1) iw2 = iw1+n1 iw3 = iw2+m1 call dsvdc(x,m1,m1,n1,work(iw0),work(iw1),work,m1,work,n1,work(iw & 2),00,ierr) if(ierr.ne.0) then ierr=2 return endif u = work(iw0) c if(work(iw0).eq.%eps) then call dscal(m1*n1,1.0d0/work(iw0),x,1) endif c return c end