How to convert this 2D code segment with random number into the FORTRAN code?
Show older comments
Nx = 4
Ny = 4
c1 = 0.12
rr = 0.0001
for i=1:Nx
for j=1:Ny
D(i,j) =c1 + rr*(0.5-rand);
end
end
It contains random number in Matlab code and it is also in 2D.
8 Comments
KSSV
on 18 Aug 2020
The question should fit into Fortran blogs.
Robert101
on 18 Aug 2020
dpb
on 18 Aug 2020
"Matlab has some ways to convert it into fortran code."
I'm unaware of any MATLAB-supplied tools for such; to what are you referring, specifically?
You can write mex functions in Fortran (altho TMW has made it harder and harder and harder and has basically dropped Fortran support over the last several years).
There are some 3rd party tools, but I've no experience with any of them having finally with retirement from active consulting just gotten tired of beating head against the wall and gave up using mex entirely.
Sad state of affairs for scientific computing toolset, but "that's the way it is", at least in my view from here.
Robert101
on 18 Aug 2020
" mex functions and wanted to know how to use it for conversion of Matlab code to Fortran"
Perhaps we have a communications problem here of misunderstanding what is meant by "conversion of Matlab code to Fortran" in your original question.
I interpreted it to mean some tool that could translate MATLAB source code to Fortran -- what I was pointing out is that there is not such a function supplied in MATLAB but there are some other tools that do/can do the job for at least subsets of MATLAB syntax.
You can write mex code in Fortran, yes; but it is the job of the coder to write the code and do the translation from one language to the other.
What I was/am complaining about re: Mathworks and Fortran for mex is they have reduced to supporting only the Intel Fortran compiler and taken out support for gfortran and there are sizable gaps between the supplied interface libraries between C/C++ and Fortran as far as capabilities.
In addition, where years ago one could simply bypass all the nonsense of the convoluted mess of batch and scripts run by the mex command and just compile/link outside the mex environment, at about R2017 or so, one could no longer link to a vendor library not on the official support list (I still had clients using the old DEC/Compaq Visual Studio F95 compiler at the time). Those built .mex files wouldn't have the magic code in them of the supported compiler and so wouldn't load in the newer releases. Plus, they make it so you can't run a mex file from an earlier release on the new one; you have to recompile whether anything changed or not because they bury a relase number in there that was never able to figure out how to bypass.
All in all, it forced me to stay with an earlier release for that client until finally retired -- without the client, it simply wasn't/isn't worth the hassle to fool with...if I need Fortran, I'll just go run the compiler and forget about Matlab unless just use it to import files...
If one still had a real client, it appears the only choice would be to bite the bullet and go Intel commercial to get Fortran.
There are some others who have kept up more than I and may know of better news more recently, but that's where I was 4-5 years ago...
Robert101
on 18 Aug 2020
Which Fortran compiler are you using on what platform and for what kinds of tasks?
Fotran and MATLAB have much in common in terms of basic syntax; in fact the earliest MATLAB was actually written in FORTRAN.
If you want/need support on the Fortran side, the usenet comp.lang.fortran group is still active and for the most part pretty lenient on newbies.
The biggest drawback of Fortran vis a vis MATLAB is the lack of the higher level abstractions for data structures like the table, cell arrays, etc. But, if you're simply "crunching numbers", oft times you can outperform MATLAB significantly with compiled code-- but, then again, if you can write your algorithm to get it into a vectorized form and down in the bowels of machine code in the BLAS routines or the like; you're essentially running the identical code because that's what MATLAB is built on at its very core for those operations. It's all the stuff added on around it that is the speed hog...
There are a lot of books -- from you description I'd probably recommend https://www.amazon.com/Fortran-90-95-Scientists-Engineers/dp/0072825758 as a starter...it's not a reference but not a "for dummies", either.
It's still at the F95 Standard, though and there are a lot of new features in F2003/2008 that are now in most compilers.
I've not kept up with it much having now been out of the consulting gig so I'm not so sure about what to recommend there.
Robert101
on 19 Aug 2020
Accepted Answer
More Answers (1)
James Tursa
on 18 Aug 2020
Edited: James Tursa
on 18 Aug 2020
For your particular case, looks like the MATLAB code could reduce to:
Nx = 4;
Ny = 4;
c1 = 0.12;
rr = 0.0001;
D = c1 + rr*(0.5-rand(Nx,Ny));
The Fortran equivalent could be
integer, parameter :: Nx = 4
integer, parameter :: Ny = 4
double precision :: c1 = 0.12d0
double precision :: rr = 0.0001d0
double precision D(Nx,Ny)
call random_number(D)
D = c1 + rr*(0.5d0-D);
1 Comment
Robert101
on 18 Aug 2020
Categories
Find more on Fortran with MATLAB in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!