Hoe compileer ik RIVM-OPS naar uitvoerbare code?

Instructies op basis van patches op OPS v5.0.0 ontwikkeld door Gerard Cats.

Voer de volgende stappen uit om RIVM OPS om te zetten in uitvoerbare code:

  • (Windows) Neem een Windows 10 PC.
  • (Windows) Installeer Cygwin, bij voorkeur in de 64-bit versie.
  • (Windows) Selecteer in ieder geval ‘gcc-fortran’, perl, zip en ‘make’.
  • (Windows) Start de Cygwin shell via het Start menu.
  • (Linux) Neem een Linux PC en start een terminalvenster.
  • Maak een nieuwe map OPS in je gewenste map, bijvoorbeeld Documents.
  • Download de broncode van RIVM OPS v5.0.0 en pak de broncode uit in de code OPS.
  • Of gebruik Git, bijvoorbeeld TortoiseGit op Windows of Git via de commandoregel.
  • Ga naar de OPS map met bijvoorbeeld:
cd /cygdrive/c/users/ACCOUNT/Documents/OPS
  • Stel de omgeving in met:
MAKECONF=GNU_Linux
export MAKECONF
  • Pas de bijgevoegde patch toe.
  • Kopieer uit math77 de bestanden mess.f, optchk.f, silup.f, silupm.f en smess.f naar de OPS map.
  • Draai make (of make -j 8 voor parallel compileren):
$ make
perl makedependencies.pl binas.f90 m_aps.f90 m_commonconst.f90 m_commonfile.f90 m_depac.f90 m_error.f90 m_fileutils.f90 m_geoutils.f90 m_getkey.f90 m_ops_building.f90 m_ops_emis.f90 m_ops_plumerise.f90 m_ops_utils.f90 m_ops_vchem.f90 m_string.f90 m_utils.f90 ops_bgcon.f90 ops_bgcon_tra.f90 ops_bron_rek.f90 ops_brondepl.f90 ops_calc_stats.f90 ops_conc_ini.f90 ops_conc_rek.f90 ops_conltexp.f90 ops_convec.f90 ops_depoparexp.f90 ops_depos_rc.f90 ops_depu.f90 ops_gen_fnames.f90 ops_gen_precip.f90 ops_gen_rcp.f90 ops_get_arg.f90 ops_get_dim.f90 ops_getlu.f90 ops_getlu_tra.f90 ops_getz0.f90 ops_getz0_tra.f90 ops_init.f90 ops_logfile.f90 ops_main.f90 ops_neutral.f90 ops_outp_prep.f90 ops_par_chem.f90 ops_plot_uitv.f90 ops_plrise71.f90 ops_print_grid.f90 ops_print_info.f90 ops_print_kop.f90 ops_print_recep.f90 ops_print_table.f90 ops_rcp_char_1.f90 ops_rcp_char_all.f90 ops_read_bg.f90 ops_read_ctr.f90 ops_read_emis.f90 ops_read_meteo.f90 ops_read_source.f90 ops_reken.f90 ops_resist_rek.f90 ops_scalefac.f90 ops_seccmp.f90 ops_src_char.f90 ops_stab_rek.f90 ops_statparexp.f90 ops_surface.f90 ops_tra_char.f90 ops_vertdisp.f90 ops_virtdist.f90 ops_write_progress.f90 ops_wv_powerlaw.f90 ops_wvprofile.f90 ops_z0corr.f90 r1mach.f90 inum.f90          > dependencies
Warning: no source found for ifport needed by m_utils.o
Warning: no source found for ifport needed by ops_main.o
gfortran -DUNIX -DGNU -O3 -ffree-line-length-0 -finit-local-zero -cpp -c binas.f90
gfortran -DUNIX -DGNU -O3 -ffree-line-length-0 -finit-local-zero -cpp -c m_commonconst.f90
...
gfortran -DUNIX -DGNU -O3 -ffree-line-length-0 -finit-local-zero -cpp -c r1mach.f90
gfortran -DUNIX -DGNU -O3 -ffree-line-length-0 -finit-local-zero -cpp -c inum.f90
gfortran -O3 -ffree-line-length-0 -finit-local-zero -cpp  -c -o mess.o mess.f
gfortran -O3 -ffree-line-length-0 -finit-local-zero -cpp  -c -o silup.o silup.f
silup.f:456:72:

  456 |       if (ILI + 2) 1300, 1200, 100
      |                                                                        1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
silup.f:464:72:

  464 |             if (XT(NTABI) - XT(1)) 110, 1220, 130
      |                                                                        1
Warning: Fortran 2018 deleted feature: Arithmetic IF statement at (1)
gfortran -O3 -ffree-line-length-0 -finit-local-zero -cpp  -c -o silupm.o silupm.f
gfortran -O3 -ffree-line-length-0 -finit-local-zero -cpp  -c -o optchk.o optchk.f
gfortran -O3 -ffree-line-length-0 -finit-local-zero -cpp  -c -o smess.o smess.f
gfortran -L /usr/local/lib binas.o m_aps.o m_commonconst.o m_commonfile.o m_depac.o m_error.o m_fileutils.o m_geoutils.o m_getkey.o m_ops_building.o m_ops_emis.o m_ops_plumerise.o m_ops_utils.o m_ops_vchem.o m_string.o m_utils.o ops_bgcon.o ops_bgcon_tra.o ops_bron_rek.o ops_brondepl.o ops_calc_stats.o ops_conc_ini.o ops_conc_rek.o ops_conltexp.o ops_convec.o ops_depoparexp.o ops_depos_rc.o ops_depu.o ops_gen_fnames.o ops_gen_precip.o ops_gen_rcp.o ops_get_arg.o ops_get_dim.o ops_getlu.o ops_getlu_tra.o ops_getz0.o ops_getz0_tra.o ops_init.o ops_logfile.o ops_main.o ops_neutral.o ops_outp_prep.o ops_par_chem.o ops_plot_uitv.o ops_plrise71.o ops_print_grid.o ops_print_info.o ops_print_kop.o ops_print_recep.o ops_print_table.o ops_rcp_char_1.o ops_rcp_char_all.o ops_read_bg.o ops_read_ctr.o ops_read_emis.o ops_read_meteo.o ops_read_source.o ops_reken.o ops_resist_rek.o ops_scalefac.o ops_seccmp.o ops_src_char.o ops_stab_rek.o ops_statparexp.o ops_surface.o ops_tra_char.o ops_vertdisp.o ops_virtdist.o ops_write_progress.o ops_wv_powerlaw.o ops_wvprofile.o ops_z0corr.o r1mach.o inum.o mess.o silup.o silupm.o optchk.o smess.o  -o OPS.exe
  • Start OPS:
./OPS.exe -v -i STUURBESTAND
  • Als je alles opnieuw wilt compileren, bijvoorbeeld omdat je met andere optimalisaties wilt compileren, verwijder dan alle gecompileerde bestanden met:
make clean