- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Nl2sol is a popular routine for unconstrained non-linear least-squares. This routine was ported from A. Miller to Fortran 90 with the following warning:
----->
** WARNING **
-------------
Use this code with care.
Some compilers use `copy in, copy out' where the INTENT of an array
is IN OUT. A call such as:
CALL l7vml(p, v(g1:), v(rmat1:), v(qtr1:))
which occurs in routine RN2G, can result in routine l7vml copying the
whole of the array v from location g1 to one place, the whole of the
same array from location rmat1 to another place, and the whole of the
array from location qtr1 to another place. On exit from l7vml, the
contents of these temporary workplaces are then written back to array
v with partial overwriting.
This can be overcome either by replacing the call with something like:
CALL l7vml(p, v(g1:g2), v(rmat1:rmat2), v(qtr1:qtr2))
.......
Try the test programs T_SHORT and T_LONG with your compiler.
If it crashes, then you cannot use this code. Most compilers do not
use `copy in, copy out', so this code works. At least one major compiler
does give trouble. The problem is not with the compiler but with this
code.
<-----
I tried the test program t_long with Visual Fortran (default options). It crashed when calculating one of the last examples.
Finally my question:
Does Visual Fortran use copy in/copy out or does anyone uses nl2sol?
Can I use certain compiler options to avoid copy in/copy out?`
Thanks
Ralf Fritschen
----->
** WARNING **
-------------
Use this code with care.
Some compilers use `copy in, copy out' where the INTENT of an array
is IN OUT. A call such as:
CALL l7vml(p, v(g1:), v(rmat1:), v(qtr1:))
which occurs in routine RN2G, can result in routine l7vml copying the
whole of the array v from location g1 to one place, the whole of the
same array from location rmat1 to another place, and the whole of the
array from location qtr1 to another place. On exit from l7vml, the
contents of these temporary workplaces are then written back to array
v with partial overwriting.
This can be overcome either by replacing the call with something like:
CALL l7vml(p, v(g1:g2), v(rmat1:rmat2), v(qtr1:qtr2))
.......
Try the test programs T_SHORT and T_LONG with your compiler.
If it crashes, then you cannot use this code. Most compilers do not
use `copy in, copy out', so this code works. At least one major compiler
does give trouble. The problem is not with the compiler but with this
code.
<-----
I tried the test program t_long with Visual Fortran (default options). It crashed when calculating one of the last examples.
Finally my question:
Does Visual Fortran use copy in/copy out or does anyone uses nl2sol?
Can I use certain compiler options to avoid copy in/copy out?`
Thanks
Ralf Fritschen
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
CVF will use copy-in/copy-out if, 1) It does not know that the array section being passed is contiguous, 2) there is no interface for the called routine or the interface does not specify a deferred-shape array for the argument
In 6.6, an optional run-time informational can be generated when the compiler chooses to make a copy.
Steve
In 6.6, an optional run-time informational can be generated when the compiler chooses to make a copy.
Steve

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page