Compiling SMOKE for UNIX

Hi. I am using ubuntu 20.04 LTS and I followed this chapter to install SMOKE (
and installed completely without issues.
the next step is ( Download and compile the I/O API library from the I/O API home page. The I/O API can be installed in $SMK_HOME /subsys/ioapi**)**
but I saw ioapi-3.2 on that path and their directories was there.
My question is do I need to install ioapi-3.2 (like run configure or make or make install)or not and it is installed automatically by following the steps in section 12.3?
Thanks. is a broken link. It should be

The I/O API installation instructions are at or the matching page []](])on the CMAS site.

I knew these sites exist, my question is something else.
in section 12.3 of smoke documentation, the second step is to download and compile the I/O API library on the recommending path ($SMK_HOME /subsys/ioapi ).
but I/O API lib exists in the path.
what should I do?
It means ioapi has installed completely and I do not need to install it
or it is just a package of ioapi that it has just extracted.

Sorry for misunderstanding your question.

In the SMOKE src directory is a file Makeinclude that sets various options for compiling SMOKE. In it, there is a make-variable IOBASE. Edit the file to set that variable to the installation directory for the I/O API. In my case, for example, I’ve installed the I/O API under my home directory for use by “evrything”, so that I have

IOBASE = ${HOME}/ioapi-3.2

Thanks a lot. :upside_down_face: :pray: :pray:
I have another question about creating the symbolic link that is written on this page (
after downloading and installing I/O API lib. what symbolic link did you create for yourself with regarding you installed I/O API lib in ${HOME}/ioapi-3.2

BIN is probably Linux2_x86_64ifort. If not, you will need to adjust
your ASSIGNS file. Assuming your I*/O API is installed at base
directory ${HOME}/ioapi-3.2:

ln -s ${HOME}/ioapi-3.2/ioapi  $SMK_HOME/subsys/ioapi/ioapi
ln -s ${HOME}/ioapi-3.2/${BIN} $SMK_HOME/subsys/ioapi/${BIN}
1 Like

I installed ioapi-3.2-gompi-nocpl by EasyBuild yesterday and I changed IOBASE from Makeinclude.
now I run ln -S /home/farzad/.local/easybuild/software/ioapi/3.2-2020111-gompi-2020a/${BIN} $SMK_HOME/subsys/ioapi/${BIN}
but I received this error BIN: Undefined variable.
tree-of-ioapi3.2-EasyBuild.txt (2.8 KB)

The build-instructions for the I/O API are here:, or at the matching CMAS-site page.

In particular:

  1. setenv BIN …, followed by one of the make commands below, as appropriate for your configuration(s).
    Alternatively, make BIN= (where note that a command-line variable-definition overrides the environment variable definition).

On second thought, you’re talking about running SMOKE. See the SMOKE instructions, but generally your ASSIGNS file is responsible for setting this environment variable…

I run this source ASSIGNS.nctox.cmaq.cb05_soa.us12-nc
I received this:
NOTE: AUTO_DELETE script setting is not set.
Default is N to not delete I/O API intermediate and output files
Is there any problem?

What does

env | grep BIN



did you source the ASSIGNS file before you did the link-operation?

I just followed
and installed ioapi3.2, I changed IOBASE, created two symbolic links that the second one had an error and I changed my ASSIGNS file(Linux2_x86_64ifort to Linux2_x86_64gfort)

sorry, because of my bad programming.

So the problem was in the programming? I’ve had similar errors but was never abel to resolve them…

@OneStone. Hi
What problem you have?

@cjcoats. Hi again. :slightly_smiling_face:

How can I adjust my ASSIGNS file to change Linux2_x86_64ifort to Linux2_x86_64gfort?

Because I have a problem to create this symbolic link
ln -s ${HOME}/ioapi-3.2/${BIN} $SMK_HOME/subsys/ioapi/${BIN}

This env | grep BIN says BIN=Linux2_x86_64gfort

Could you help me?
Thanks and Best regards.

With vi or emacs or gedit or kate or nano or (my favorite) nedit or …

Make a backup first, of course.

@cjcoats. I solved it by changing on ASSIGNS.nctox.cmaq.cb05_soa.us12-nc in line 25.