ConMan is a finite element program for the solution of the equations of incompressible, infinite-Prandtl number convection in two dimensions, originally written by Scott King, Arthur Raefsky, and Brad Hager.
ConMan is a public domain program and is distributed free of charge to anyone who wishes to use it, and may be freely copied and modified. ConMan is written in Standard Fortran 77 with cray pointers and runs on most UNIX systems with many Fortran compilers. Porting it to other systems should be straightforward. As with anything free, ConMan comes with no guarantees, but it has been benchmarked against other existing codes.
There are several significant differences that the user familiar with past versions of ConMan will find in the 3.0 version. First, we removed the clunky memory manager library (a set of routines wrapped around the c function malloc) and replaced them with FORTRAN 90's allocate and deallocate functions.?This eliminates many of the compilation problems people experienced with the 2.0 version.?Most of these routines were in files subroutines input and elminp.
As part of a general clean up, we replaced the separate input and elminp (both input subroutines) and created a new input subroutine. As part of this we removed the `element library' function (eglib.F and eg2.F) which was a structure originally designed for different formulations 2D Cartesian, 3D Cartesian, spherical axysymmetric, ...). Because these were never fully developed, it made on sense to retain the cumbersome structure. We also moved all out the subroutines associated with output, into new output subroutine. The user does not need to hunt through the time_driver subroutine to find out where the specific output subroutines are called. Thus, subroutines geoid, fluxke, masflx, print, output_rheol, print_compbm_data, and stress are all in subroutine output.
We also changed the names of many of the subroutines to take advantage of longer subroutine names allowed by modern FORTRAN. Thus f_tlhs has become form_temp_matrix, f_vres has become form_vel-ocity_rhs, f_vstf has become form_velocity_stiffness_matrix. Similarly, subroutine timdrv has become time_driver. As you look through the code there are examples where this could have been carried further.
Second, Picard iteration for the temperature equation is now a runtime option as opposed to a compiler option. This necessitated specifying both implicit and explicit subroutines for the temperature right hand side, form_temp_rhs_implicit and form_temp_rhs_explicit, a well as a form_temp_matrix for the implicit temperature matrix and form_temp_mass_matrix for the lumped mass matrix that has traditionally been used for the explicit version of the temperature solver.
Third, we added the EBA, TALA, and ALA formulations as described in [King et al, 2010]. The compressible formulation is described in Chapter 3 of the manual. This required a number of changes throughout the form_temperature and form_velocity subroutines. We provide a test suite that runs a subset of the problems from [King et al., 2010] that can be used to verify the installation version 3.0.0
Finally, we have added a cookbook of subduction wedge problems based on problems from the subduction zone benchmark paper [vanKeken et al., 2008] and one based on the compressible convection benchmark paper [King et al., 2010]. This required adding a new 'fault' subroutine and a subroutine to implement the Batchelor corner flow boundary conditions. These can be found in the subduct.src directory.