3DMA-Rock: Release Notes and Bug Reports

Version Release Note/Bug Report Comments
0903 Must be run with "Reduce Surface Remants = no" otherwise code bombs with segmentation violation Bug not present in jun03 version. Bug may be Linux version dependent - we have been unable to reproduce the bug under RedHat 9.0 using data that causes problems under SUSE
0304 Improvement of pore/throat network algorithms. The 3dma_rock_03_primer document is compatible with the 0903 release. Use the 3dma_rock_04_primer document for the 0304 release.
0903/0304 Segmentation Violation in case1.5krig near the end of the computation (after kriging loop finishes) Line 413 of src/seg_krig/driver.C must be changed from
        char *vtype;
to
        char vtype[256];
and the 3dma executable recompiled.
0903/0304 Segmentation Violation on SUN/Solaris using the g++ compilers:

% g++ -v
Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/specs
gcc version 2.95.2 19991024 (release)

or

% g++ -v
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.9/3.4.0/specs
gcc version 3.4.0

in case4.10 during the loop that iteratively trims the medial axis branches.

Segmentation violation occurs during a recursive subroutine that searches for the terminating entry of a linked list. This linked list expands with the size of the data set and can hold > 100k linked structure entries. All indications point to a bug in implementation of the recursive subroutine handling capability of the Solaris implementation of the g++ compiler (probably in the stack management since the recursive subroutine's argument, a pointer indicating memory location of the next linked list entry, suddenly "goes garbage", tens of thousands of recursive calls down the stack).

Fix: Replace the following subroutine in 3dma_rock/src/ma_cp/masets.c (approximately line 1324)

void    rec_free_MA_set(MA_set *mas)
{
        extern  void    rec_free_MA_set(MA_set *);
        extern  void    free_MA_set(MA_set *);

        if( mas == NULL ) return;
        rec_free_MA_set(mas->next);
	free_MA_set(mas);
}
with the non-recursive version
void    rec_free_MA_set(MA_set *root)
{
        extern  void    free_MA_set(MA_set *);

	MA_set  *mas, *n_mas;

	n_mas = root;
	while( n_mas != NULL )
	{
		mas = n_mas;            n_mas = mas->next;
		free_MA_set(mas);
	}
}
and recompile the 3dma executable.
0805 Code functionality upgrades:
   aggressive pore throat finding
   improved pore-network reconstruction
   pore fluid visualization
   lattive-Boltzman-based throat and pore-body permeability computation
1205 C++ code upgrade for compatibility with the compiler
gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)
Detailed running instructions remain same as for the 0805 version
0106 C code upgrade for compatibility with the compiler
gcc version 4.0.0 (SuSe 10)
Detailed running instructions remain same as for the 0805 version
0506 Correction in src/raster/rasio.c to support Cygwin
output of SUN rasterfile output
Detailed running instructions remain same as for the 0805 version
versions 0506 through 0709 stack "smashing" error correction Line 70 of src/tortuosity/dijk_main.c. Change
	char ..., ftype[30], ....;
to
	char ..., ftype[256], ....;
and recompile.