Hello.
I have downloaded SMOKE (v4.8.1 and v4.8) for GCC but they are compiled with the Intel compiler (the own tar file name indicates so). I checked, just in case, and the executables don’t work as they cannot find the libraries, which of course makes sense.
Thanks.
Basically, to build SMOKE using gcc/gfortran:
- If you don’t have gfortran installed, install it for your Linux distribution. (Note by the way that it is really the Fortran compiler which is significant for this, not the C compiler: different Fortran compilers (and sometimes even different versions of the “same” Fortran compiler) are generally not link-compatible…)
- Do the command setenv BIN Linux2_x86_64gfort to set up the environment for building 64-bit gcc/gfortran libraries and executables
- Install netCDF and I/O API libraries, as described in the I/O API installation instructions https://cjcoats.github.io/ioapi/AVAIL.html#build
- Download the SMOKE source code, if necessary
- In the resulting SMOKE subsys/smoke directory, do the command mkdir $BIN
- In the subsys/smoke/src directory, adjust the Makeinclude file for the locations of the installed libraries
- In the subsys/smoke/src directory, do the command make
Hi @cjcoats,
Thank you for your prompt answer. This starts the compilation although there is some problem with the linker and modbiog, which I have to troubleshoot. Will let you know if I have any further question.
P.S. By GCC I meant GNU compiler collection, not the C compiler per se (yep, it’s usually confusing)
It would be useful to see that part of the make-output, starting with the command-line for the step that failed, together with all the output from it…
The output from the part that fails reads:
cd /home/centos/PREPRO/SMOKE/subsys/smoke/src/../Linux2_x86_64gfort11; /opt/praetorium/openmpi/bin/mpif90 -I/home/centos/ioapi-3.2/ioapi/fixed_src -I/home/centos/PREPRO/SMOKE/subsys/smoke/src/inc -I/home/centos/ioapi-3.2/Linux2_x86_64gfort11 -extend-source 132 -zero -O3 -fallow-argument-mismatch -fallow-invalid-boz -DAUTO_ARRAYS=1 -DF90=1 -DFLDMN=1 -DFSTR_L=int -DIOAPI_NO_STDOUT=1 -DNEED_ARGS=1 -c /home/centos/PREPRO/SMOKE/subsys/smoke/src/emmod/modbiog.f
gfortran: warning: 132: linker input file unused because linking not done
gfortran: error: 132: linker input file not found: No such file or directory
make: *** [Makefile:349: modbiog.o] Error 1
It seems like it compiles modbiog (it has the -c flag so it shouldn’t link at this point). However, it’s unclear (at least to me) what is trying to do with modbiog.o as there are still a bunch of other .f files to be compiled.
Somehow, there’s a missing “-c
” flag in this compiler command: it should have
.../opt/praetorium/openmpi/bin/mpif90 -c -I/home/centos/ioapi-3.2/ioapi/fixed_src...
In your Makefile, the .f.o
rule should have that -c
; It should read
.f.o:
cd ${OBJDIR}; ${FC} ${FFLAGS} -c $<
That rule is correctly defined with -c (it actually appears at the very end of the command line). Something else is triggering the error (will take a fresh look at it tomorrow).
Did you try the package on the EPA FTP? I think they are statically compiled:
https://gaftp.epa.gov/Air/emismod/2016/v2/smoke_2016v2_platform_core_01oct2021.zip
Hi @cjcoats.
The problem was my own fault as I forgot to fix EFLAG. Thanks.
Hi @eyth.alison.
I took a look at the link earlier this morning. You’re right in that they seem to be statically compiled. Will compare vs. my own compilation. Thanks.
Actually, I ran into an error while compiling:
/home/centos/PREPRO/SMOKE/subsys/smoke/src/smkinven/rdemspd.f:304:15:
304 | LFIP = ''
| 1
Error: Cannot convert CHARACTER(0) to INTEGER(4) at (1)
make: *** [Makefile:349: rdemspd.o] Error 1
/home/centos/PREPRO/SMOKE/subsys/smoke/src/smkinven/rdorlfr.f:493:15:
493 | LFIP = ''
| 1
Error: Cannot convert CHARACTER(0) to INTEGER(4) at (1)
make: *** [Makefile:349: rdorlfr.o] Error 1
LFIP is defined as an integer so the error makes sense. I was able to compile by simply substituting with LFIP=0
but I have no clue if this is the intended use.
That is a known bug and has been fixed for an upcoming release. You are correct. It should be set it to zero. LFIP=0.
Wow, thank you. I’ve succeeded in installing SMOKE 4.8.1 with AMD CPU.