function x=t6(a,b) c=b*b, x=(a/b)/2+2/c,
Translation procedure
-->lt=list();
-->lt(1)=list('1','na','ma');
-->lt(2)=list('1','ma','ma');
-->// show the initial data
-->printspecs(t,lt)
| variable number | fortran type |# rows |# columns |
|1 |double precision |na |ma |
|2 |double precision |ma |ma |
-->//translate
-->txt=sci2for(t,'t',lt);
Generated Fortran code
subroutine t(a,b,x,na,ma,work,iwork,ierr)
c!
c automatic translation
c
c! calling sequence
c ----------------
c
c a : double precision variable of size na,ma
c b : double precision variable of size ma,ma
c x : double precision variable of size na,ma
c na : integer variable
c ma : integer variable
c work : working array :
c ma*ma+ma*ma+ma+ma+ma*ma
c iwork : working array :
c ma+na*ma+ma
c ierr : error
c 0 : correct run
c 1 : singular b matrix
c 2 : singular work(iwc) matrix
c
c dimension of local variables
c -----------------------------
c!
double precision a(na,ma),b(ma,ma),x(na,ma),c(ma,ma),work(*)
integer na,ma,iwork(*)
c
c adress of local variables
iwc = 1
c
iw0 = iwc+ma*ma
iiw0 = 1
c
call dmmul(b,ma,b,ma,work(iwc),ma,ma,ma,ma)
c
iw1 = iw0+ma*ma
iw2 = iw1+ma*ma
iw3 = iw2+ma
call dcopy(ma*ma,b,1,work(iw1),1)
call dgefa(work(iw1),ma,ma,iwork(iiw0),ierr)
if(ierr.ne.0) then
ierr=1
return
endif
call dgesl(work(iw1),ma,ma,iwork(iiw0),work(iw0),0)
call dcopy(na*ma,work(iw0),1,iwork(iiw1),1)
call dscal(na*ma,1.0d0/2,iwork(iiw1),1)
call dcopy(ma*ma,work(iwc),1,work(iw0),1)
iw4 = iw3+ma
iiw3 = iiw2+ma
call dgefa(work(iw0),ma,ma,iwork(iiw2),ierr)
if(ierr.ne.0) then
ierr=2
return
endif
call dgedi(work(iw0),ma,ma,iwork(iiw2),w,work(iw3),1)
call dcopy(na*ma,iwork(iiw1),1,x,1)
call dadd(na*ma,x,1,work(iw0),1)
c
return
c
end