CAMx v7.3 compiling with GFortran 13.2

Hello all,

I have been practicing with CAMx v6.5 since June 2024 and have run test cases successfully, and with v7.1 since August 2024 with similar results. Both tests used preexisting GFortran and PGFortran compilers on our Dell T640 40- and 88-core computing clusters running CentOS 7 Linux. We are anticipating a hardware upgrade for our Linux clusters within the year, so I am learning to install and administer an OS upgrade to either Linux Mint or Rocky Linux.

I have Linux experience as a user but none as administrator, so I am practicing on a Windows PC running VirtualBox 7.1. I created a virtual machine and installed Linux Mint 22 on it, and it has been updated and upgraded to the newest build versions. At this early stage I have only installed the GFortran libraries to meet the minimal requirements for compiling CAMx v7.3, which is reflected in the minimal makefile configuration I used.

I have attached the error messages I get when trying to compile CAMx v7.3 – I have not encountered this problem before, so I’d like to ask if anyone else has had similar issues. I don’t think it has anything to do with the VirtualBox environment, but suspect it might be a GFortran 13.2 problem – I did update and upgrade my version after installing. I don’t think the MPI and NCF libraries are to blame as they haven’t been installed yet and aren’t invoked during compilation.

I have not found any relevant discussions online or on GFortran or CAMx forums. Does anyone have any suggestions or comments? Thanks!

Compiling CAMx 7.3 using GFortran 13.2 on Linux Mint 22 on VirtualBox 7.1

make clean
make COMPILER=gfortran MPI=false NCF=false IEEE=false

GFORTRAN 13.2 COMPILE ERRORS FROM STDOUT


  •                                                           *
    
  • MPI will NOT be built in *
  •                                                           *
    
  • NetCDF will NOT be built in *
  •                                                           *
    
  • The IEEE option NOT will be used *
  •                                                           *
    
  •  Executable is: CAMx.v7.30.noMPI.gfortran
    
  •                                                           *
    

make modules
make[1]: Entering directory ‘/home/enzo/Desktop/src.v7.31’
gfortran -c -o Mod_src/camx_includes.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/camx_includes.f
gfortran -c -o Mod_src/grid_dims_mod.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/grid_dims_mod.f
gfortran -c -o Mod_src/node_mod.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/node_mod.f
gfortran -c -o Mod_src/o3colmap.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/o3colmap.f
gfortran -c -o Mod_src/bndary.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/bndary.f
gfortran -c -o Mod_src/camxcom.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/camxcom.f
gfortran -c -o Mod_src/camxfld.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/camxfld.f
gfortran -c -o Mod_src/chmstry.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/chmstry.f
gfortran -c -o Mod_src/filunit.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/filunit.f
gfortran -c -o Mod_src/grid.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/grid.f
gfortran -c -o Mod_src/grid_nodes.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/grid_nodes.f
gfortran -c -o Mod_src/master_mod.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/master_mod.f
gfortran -c -o Mod_src/ncf_iomod.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/ncf_iomod.f
gfortran -c -o Mod_src/pigsty.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/pigsty.f
gfortran -c -o Mod_src/ptemiss.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/ptemiss.f
gfortran -c -o Mod_src/procan.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/procan.f
gfortran -c -o Mod_src/rtracchm.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/rtracchm.f
gfortran -c -o Mod_src/rtcmcchm.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/rtcmcchm.f
gfortran -c -o Mod_src/tracer.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules Mod_src/tracer.f
make[1]: Leaving directory ‘/home/enzo/Desktop/src.v7.31’
make model
make[1]: Entering directory ‘/home/enzo/Desktop/src.v7.31’
gfortran -c -o CAMx/CAMx.o -I./Includes -I./Dummy_MPI -I./Dummy_NCF -O2 -mcmodel=medium -J./Modules -fno-align-commons -fconvert=big-endian -frecord-marker=4 -ffixed-line-length-0 -I./Modules CAMx/CAMx.f
make[1]: Leaving directory ‘/home/enzo/Desktop/src.v7.31’

GFORTRAN 13.2 COMPILE ERRORS FROM STDERR

CAMx/CAMx.f:195:24:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2
195 | call nodes_pass(time,1,MPI_REAL,itag,numprocs,iproc_id)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (REAL(4)/INTEGER(4)).
CAMx/CAMx.f:213:24:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2

213 | call nodes_pass(bndtim,1,MPI_REAL,itag,numprocs,iproc_id)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (REAL(4)/INTEGER(4)).
CAMx/CAMx.f:215:24:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2

215 | call nodes_pass(toptim,1,MPI_REAL,itag,numprocs,iproc_id)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (REAL(4)/INTEGER(4)).
CAMx/CAMx.f:217:24:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2

217 | call nodes_pass(inptim,1,MPI_REAL,itag,numprocs,iproc_id)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (REAL(4)/INTEGER(4)).
CAMx/CAMx.f:219:24:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2

219 | call nodes_pass(emstim,1,MPI_REAL,itag,numprocs,iproc_id)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (REAL(4)/INTEGER(4)).
CAMx/CAMx.f:232:26:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2

232 | call nodes_pass(lupdtdep,ngrid,MPI_INTEGER,
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (LOGICAL(4)/INTEGER(4)).
CAMx/CAMx.f:254:26:

194 | call nodes_pass(date,1,MPI_INTEGER,itag,numprocs,iproc_id)
| 2

254 | call nodes_pass(ozntim,1,MPI_REAL,itag,numprocs,iproc_id)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (REAL(4)/INTEGER(4)).
CAMx/CAMx.f:740:28:

469 | call zeros(rtsolmas(ipsa2d(igrd)),nodes)
| 2

740 | call zeros(nkill,9)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (INTEGER(4)/REAL(4)).
CAMx/CAMx.f:741:28:

469 | call zeros(rtsolmas(ipsa2d(igrd)),nodes)
| 2

741 | call zeros(nage,ngrid)
| 1
Error: Type mismatch between actual argument at (1) and actual argument at (2) (INTEGER(4)/REAL(4)).
make[1]: *** [Makefile:1221: CAMx/CAMx.o] Error 1
make: *** [Makefile:549: comp_gfortran] Error 2

We’ve seen this before, with I/O API stuff: see https://cjcoats.github.io/ioapi/ERRORS.html#gfort10: starting with Version 10, gfortran takes a particularly idiosyncratic interpretation of the (latest) Fortran-2018 Standard (not Fortran-90 nor Fortran-95).

You need to add the compile flag

-std=legacy

so that this interpretation does not cause a compile-error.

Thank you very much, this solved the problem and I now have a CAMx v7.3 executable!