Q. What exactly happens when switching from single to double precision in CFX-11, specifically on a 64bit machine? Also, is the behaviour any different between solver and partitioner? And what about coordinates?

A. When running CFX-11, the solver code (whether partitioning or not) writes out a header to the outfile which includes a line something like this:

| single-int32-64bit-novc6-optimised-supfort-noprof-nospag-lcomp |

The first three entries are of interest and these represent floating point precision, integer precision and then addressing.
If you are running on a 64bit machine with an appropriate OS, then your addressing will be 64bit allowing you to access large amounts of memory and solve larger and more complex models. However, it does not imply anything about the size of floating point variables or integers. With Fortran (which is used for the CFX solver), the default for these is always 4 bytes. If you request double precision, then within the solver this means all floating point is done with 8 bytes precision. It doesnt affect integers or addressing... the latter being a function of the architecture and OS. The drawback with running in double precision is that there is usually a significant CPU overhead from moving around double the quantity of data. However, there is some evidence to suggest that on 64bit operating systems the overhead is much reduced.

With partitioning, the default behaviour is to ignore any double requests because there is very little to be gained within the partitioning methods by having 8byte floating point (the RCB method being a possible exception). However, you can work around this by explicitly specifying the partitioning executable and pointing it to the double precision executable in the installation. Also, you can over-ride the default 4byte integer default for the partitioner by specifying '-part-large' which gives 8byte integers (and logicals) and allows the partitioning of much larger problems up to


Q. What exactly happens when switching from single to double precision in CFX-11, specifically on a 64bit machine? Also, is the behaviour any different between solver and partitioner? And what about coordinates?

A. When running CFX-11, the solver code (whether partitioning or not) writes out a header to the outfile which includes a line something like this:

| single-int32-64bit-novc6-optimised-supfort-noprof-nospag-lcomp |

The first three entries are of interest and these represent floating point precision, integer precision and then addressing.
If you are running on a 64bit machine with an appropriate OS, then your addressing will be 64bit allowing you to access large amounts of memory and solve larger and more complex models. However, it does not imply anything about the size of floating point variables or integers. With Fortran (which is used for the CFX solver), the default for these is always 4 bytes. If you request double precision, then within the solver this means all floating point is done with 8 bytes precision. It doesnt affect integers or addressing... the latter being a function of the architecture and OS. The drawback with running in double precision is that there is usually a significant CPU overhead from moving around double the quantity of data. However, there is some evidence to suggest that on 64bit operating systems the overhead is much reduced.

With partitioning, the default behaviour is to ignore any double requests because there is very little to be gained within the partitioning methods by having 8byte floating point (the RCB method being a possible exception). However, you can work around this by explicitly specifying the partitioning executable and pointing it to the double precision executable in the installation. Also, you can over-ride the default 4byte integer default for the partitioner by specifying '-part-large' which gives 8byte integers (and logicals) and allows the partitioning of much larger problems up to2^32-1 elements.

With regards to the coordinates, for a few releases now the coords have been generated within the mesher, and stored within the def file, in double precision. However, if you are running a single precision floating point solver then these will get truncated when manipulated within the CFX memory management system. Hence you could get problems with v.small elements at the extents of a v.large domain. Within a double precision solver, there would be no truncation, and hopefully no problems.





Show Form
No comments yet. Be the first to add a comment!