How can I stop the solver gracefully from user Fortran in a steady state run?
Create an 'stp' file in the run directory from user Fortran. A complete working
example is provided, which demonstrates this method. See attached zip archive
file and description below.
README This file
run.ccl CCL file for use with the -ccl option
solvercontrol.def Definition file
usr_stp_solver.F User Fortran source code
This example demonstrates how to stop a steady state run of the solver from
user Fortran. In this case the criteria used to stop the solver is when a
variable falls within a specified range. In principle however, any criteria
could be used, the main purpose of the example being to demonstrate how to stop
A steady state iteration is actually time step with one coefficient loop. It
should be possible to stop the solver using a similar method as for a transient
simulation, but unfortunately at time of writing, the 'End of Time Step'
location isn't called for steady state simulations.
Therefore, a different approach must be adopted to stop steady state cases,
which is to create a file called 'stp' in the run directory. This is basically
all the solver manager does when stopping a run. Firstly, the next free Fortran
unit is obtained using GET_FORTRAN_UNIT. A file called 'stp' then opened
(creating the file) and closed.
A working example is provided, which also writes a diagnostic message to the
output file when the solver is stopped.
The method outlined stops the solver 'gracefully'. It is sometimes necessary to
stop the solver immediately (e.g. in case of an error), in which case the
routine CFXSTP should be called.
RUNNING THE EXAMPLE
- Open a command prompt/shell. If running on a Windows based machine, obtain
this from the CFX-5 launcher using 'Tools > Command Line'.
- Use the cfx5mkext command to create a shared library from the user Fortran
source code supplied with this example.
cfx5mkext -name scontrol usr_stp_solver.F
-Run the simulation using the CFX-5 solver. The command is:
cfx5solve -def solvercontrol.def -ccl run.ccl
Note that in this example, the library path is set to .. which is adequate
for a simple example run sequentially. For real cases, particularly when
running in parallel, it is strongly recommended to use an absolute path.
Note also that a similar example is available showing how to stop a transient
simulation, which requires a simpler procedure.