|
QC Method - version 1.3 release
|
tad-@techunix.technion.ac.il
|
May 24, 2007 11:05 PDT
|
Dear Colleague,
You are receiving this email because you downloaded a copy of the
Quasicontinuum (QC) Method code. We hope that you are finding the code
useful.
It is a pleasure to announce the release of version 1.3 of the QC code.
The main focus of this release is improved portability. The code has been
significantly rewritten and restructured to meet the Fortran 90 standard.
As a result the code compiles without modification on ten different
compilers and runs on a variety of platforms. The new code structure will
serve as the basis for future code development. In addition, the code has
been improved and extended in a number of ways as detailed below.
Together with the new code, the Reference Manual and Tutorial Guide have
been significantly expanded, providing much more information on developing
user routines.
Main features in the new version:
* Improved code portability. The new code compiles and runs on a large
number of platforms and compilers.
* Improved makefile system allowing for easy porting from one system to
another. (We thank Dr. Marcel Arndt at the University of Minnesota for his
assistance with this aspect of the new release.)
* Various code optimizations were performed resulting in a speed up of
about %30-40 (depending on the platform).
* Significant reduction in memory usage allowing for larger problems to be
run.
* New "fully-nonlocal zone" option added to the zone macro.
* New user capabilities allowing the user to apply boundary conditions
through an external potential and to construct specialized plots. The
entire user code interface has been streamlined and made more robust (i.e.
less likely to cause the code to fail through user programming errors).
* Greatly expanded Reference Manual and Tutorial Guide.
* Numerous minor bugs fixed. One particularly important bug that could
result in incorrect repatom status after adaption was found and corrected.
THE OLD CODE COULD GIVE INCORRECT RESULTS IN CERTAIN CASES.
A more detailed explanation of the changes is given at the end of this
email and in the README file bundled with the code. You may download the
new version from:
http://www.qcmethod.com/NewVersion/QCv1.3.tar.gz
This download site will be available for the next two week (until June 7,
2007). After that you will be able to get the code from the QC site
(www.qcmethod.com) by clicking on "downloads" and reregistering.
Best wishes,
Ellad Tadmor and Ron Miller
---------------------------
www.qcmethod.com
Detailed list of changes in QC version 1.3:
1. The QC Code was largely rewritten and restructured to conform to the
Fortran 90 standard. As a result the code is very portable. It has been
tested with ten different Fortran compilers. In all cases it compiles and
runs without modifications. Some of the main changes introduced are:
(a) All functions and subroutines were placed within modules. This ensures
explicit interfaces for called subroutines and functions.. As a result,
a variety of potentially non-portable Fortran 77 "tricks" no longer work.
These have been removed.
(b) "double precision" variables were replaced with "real(kind=dp)", where
dp is defined in mod_global as "selected_real_kind(p=15,r=307)". This
ensures that the same precision is used on any machine. The change
to "dp" means generic routines must be used such as sin(x), sqrt(x)
and not the specific double precision routines dsin(x), dsqrt(x), etc.
Also, type change to "dp" precision is done with real(n,dp), where n is
an integer, and not dble(n).
(c) Obsolete features in Fortran 90 were removed. For example,
"character*n" were changed to "character(len=n)". Arithmetic
if statements removed, etc.
(d) Passing of array sections to subroutines were replaced by passing a
temporary array containing the relevant section. Technically, this
is not necessary since Fortran 90 allows passing array sections.
However, in practice some compilers failed to do do this correctly
especially, when the array was part of a derived type.
(e) Dynamic memory allocation of variables was done automatically
whenever possible, otherwise the "allocatable" clause was used.
The use of pointers was limited to cases where this was unavoidable.
2. Greatly improved streamlined make architecture designed to allow easy
porting from one platform to another. The new approach is very easy
to use and robust. It has been tested on a variety of Unix and Linux
systems as well as OS X 10.4.9.
3. The code was optimized in a number of ways. A speed-up of about 30-40%
was observed for typical applications when switching from version 1.2 to
1.3.
4. The memory requirement of the code were greatly reduced. This was done
by doing the following:
(a) A number of memory leaks were detected and fixed.
(b) The irel() array was reduced from storing all neighbors of
a repatom within the cutoff radius to only its nearest neighbors.
(c) The arrays xl() and ul() were removed.
5. Restart file size was greatly reduced due to the changes in item 4. Note
that version 1.3 will still read in restart files from older versions
of the code. This is done automatically without user intervention.
6. Numerous bugs fixed. Most are minor and will not be mentioned. The more
major ones are listed below. The subroutine containing the bug appears
in parentheses.
(a) (StatusCalc) The calculation of deformation gradients and
eigenvalues could be corrupted after adaption. As a result
repatom status (local or nonlocal) could be incorrectly computed.
This would be corrected in subsequent steps but could explain some
"jerky" behavior that was sometimes observed in simulations. This was
fixed. Note: The corrected code gives results that can be different
from earlier versions because the set of nonlocal atoms can be different.
(b) (pmacr) When calling restart b() was stored in blstat()
for 'read' but not for 'txrd'. This was fixed.
(c) (delaunay) Bug related to convex hull triangulation for the special
case where ncb=0 and nce/=0 fixed.
(d) (GetCellData) For "bad" crystallographic orientations with very large
repeat distance the algorithm to find the repeating cell could fail.
This was fixed.
7. A number of changes were introduced to the structure of the required
user routines that interface with QC. The changes make the routines
easier to work with and safer (i.e. less likely to "break" QC due
to any errors in them). The main changes are:
(a) All user routines are now in a single file called "user_APP.f" where
APP is a particular application (e.g. user_gb.f). This file contains:
user_mesh -- mesh generator
user_bcon -- boundary conditions
user_pdel -- force versus displacement
user_potential -- user-specified external potential
user_plot -- user-specified plot option
The last two are new in this release. See the reference manual for
details.
(b) Direct access to many module variables is no longer possible to
prevent a user inadvertently "breaking" the code. Instead routines
were added to allow a user to query a module for the value of a
particular variable. These routines include:
In mode_grain:
NumGrains - return number of grains
GetGrainCellSize - Get the repeating cell dimensions for a
given grain
GetGrainNumCell - Get the number of atoms in the repeating cell
for a given grain
GetGrainCellAtom - Get coordinates of a given atom in the repeating
cell for a given grain
GetGrainRefStiff - reference stiffness matrix for a given grain
GetGrainBvec - Get Bravais vector matrix for a given grain
GetGrainBinv - Get inverse Bravais vector matrix for a given
grain
GetGrainRefatom - Get reference atom for a given grain
GetGrainSpecies - Get species for a given grain
GetGrainNumVrts - Get number of vertices for polygon of a given
grain
GetGrainVertex - Get given vertex of the polygon of a given grain
GetGrainXlatvect - Get crystallographic axes for a given grain
In mod_pload:
GetLoadTime - Get current loading time
GetLoadTimeStep - Get current loading timestep
GetLoadPropFact - Get current loading proportional factor
GetLoadOldPropFact - Get previous loading proportional factor
(c) "only" clause added to all use statements.
(d) Calling header to subroutine qsortr() (called from user_mesh)
was changed to:
subroutine qsortr(n,list,xkey,sign,listdim,keydim)
The variables 'ndim' and 'ind' that appeared between 'xkey' and 'sign'
in the old header were dropped.
A file user_template.f is included in the QC directory as an aid to
porting user routines from older versions to version 1.3. The file
contains a skeleton of the file along with instructions on where and
how to place the older user routines.
8. The version 1.3 release is focused more on a restructuring of the code
as a basis for future development. However, there are a number of
minor extensions in this version:
(a) Two user routines user_potential and user_plot were added, allowing
the user to define a user-specified external potential and plot option.
See the reference manual for more information.
(b) The zone macro (formerly used to defined no-adaption zones) was
generalized to describe "special-attribute" zones. This currently
includes nonlocal zones and no-adaption zones. See the reference manual
for details.
(c) More input verification was added to the code to catch user input
errors.
Version 1.3 is downward compatible being able to read input files
used with earlier versions of the code.
9. The QC Reference Manual and QC Tutorial Guide were significantly
expanded. The Reference Manual, in particular, has an entirely new
chapter on the structure of the QC code and on writing the user
routines.
10. The utility program "dynpots.f" was updated from f77 to conform to
the f90 standard.
__________________________________________________________________
Ellad B. Tadmor, Professor
Aerospace Engineering and Mechanics tel 612-625-6642
University of Minnesota fax 612-626-1558
107 Akerman Hall, 110 Union St SE
Minneapolis, MN 55455, USA
on leave from
Department of Mechanical Engineering
Technion -- Israel Institute of Technology
32000 Haifa, Israel
tel +972-4-829-3466 email tad-@tx.technion.ac.il
fax +972-4-829-5711 web http://tx.technion.ac.il/~tadmor
__________________________________________________________________
|
|
 |
|