Back to SimWalk2 Overview

SimWalk2: Compiling and Data Constraints


Executable versions of this program are available for common platforms at the distribution sites and The executables posted there are capable of all the analysis options. The ANSI standard Fortran 77 source code is also available there.

Compiling this source code has been successful on all known platforms, given sufficient RAM. However, please note the caveat in the Unix section below.

The only difference between simwalk2.f and simwalk2snp.f is that the two parameters MXMKLC and MXMKAL have been changed as described in the section below on "Data Constraints". That section also describes how to modify parameters.

When compiling the SimWalk2 files, to enable the location score option one also needs the general pedigree analysis computer package Mendel version 3.35 (not version 4.0 or later). To obtain the Mendel package written by Ken Lange, please see the
Additional Resources section.

If one does not have the Mendel package, then to create the SimWalk2 executable, simply compile together the two files simwalk2.f and nomendel.f. If one does have the Mendel package, then to create the SimWalk2 executable simply compile together the two files simwalk2.f and mendel.f.

At least the standard optimization level, usually invoked with the flag -O, is highly recommended. (The additional optimization invoked by the common flag -fast or -ffast-math has not caused any problems, as far as we know.)


For Unix-derived systems a simple c-shell script is provided, called make.sw2, to automatically compile SimWalk2 using the Fortran compiler g77. This script uses mendel.f if available and otherwise uses nomendel.f. Invoke this script in the directory containing the source code files simply by typing its filename. (N.B.: this file is not a proper "make" file just a simple c-shell script.)

Some Unix-derived installations, by default, limit the amount of memory available to programs created by some Fortran compilers. (The gory details are that some Fortran compilers create applications that grab all the memory they need from the stack at start-up, rather than dynamically from the heap, as is more common.) If SimWalk2 or SimWalk2snp immediately halts, perhaps with the message 'Segmentation Fault', 'Killed', or 'Core Dump', then you may need to increase the resources available to your session. The command to do this depends on which shell you are running. If you are using the csh or tcsh shells, then the command is 'unlimit stacksize'. (In these shells the command 'limit' will report the current limitations in your session.) If you are using the bash shell, then the command is 'ulimit -s unlimited'. (In bash the command 'ulimit -a' will report the current limitations in your session.) The GNU Fortran compiler, g77, does not seem to have this problem.

Data Constraints:

Due to the nature of Fortran 77 (e.g., the lack of dynamic memory allocation) some arbitrary constraints on the data must be included in the program. These upper bounds can be increased by altering simwalk2.f and recompiling. For example, to change the maximum number of alleles per locus, search in simwalk2.f for the string 'MXMKAL =' and change all occurrences accordingly and then recompile SimWalk2. There will usually be two, and at most six, occurrences of such a string. The program will inform the user if the data exceeds any of the upper bounds. The maximum number of pedigrees that can be analyzed is set at 1000000.

The default major constraints in the regular simwalk2 executables, and their PARAMETER names, are:

  Maximum number of marker loci (not including trait) MXMKLC =


  Maximum number of alleles    per locus MXMKAL =


  Maximum number of phenotypes per locus MXMKPH =


  Maximum number of genotypes  per phenotype MXMKGN =


  Maximum number of individuals per pedigree MXPEO =


  Maximum number of founders    per pedigree MXFNDR =


  Maximum number of generations per pedigree MXDPTH =


  Maximum number of children per individual MXKIDS =


  Maximum number of spouses  per individual MXMATE =


In most simwalk2snp executables, the only differences are:
  Maximum number of marker loci (not including trait) MXMKLC =


  Maximum number of alleles per locus MXMKAL =


For Unix-derived platforms, please see the discussion on default memory limits in the Compiling section above.

Back to SimWalk2 Overview