<p>You can follow the instructions I wrote at <a href="https://medium.com/@manmeet20singh11/installing-mom6-on-ubuntu-57918a200293?sk%3D9961d6f8565659b05e007349c47568b7&amp;sa=D&amp;source=hangouts&amp;ust=1576058141492000&amp;usg=AFQjCNH74gi6j9XgT6I3509nb8Y0gtj4-Q" rel="nofollow noreferrer">https://medium.com/@manmeet20singh11/installing-mom6-on-ubuntu-57918a200293?sk%3D9961d6f8565659b05e007349c47568b7&amp;sa=D&amp;source=hangouts&amp;ust=1576058141492000&amp;usg=AFQjCNH74gi6j9XgT6I3509nb8Y0gtj4-Q</a></p>

<p><strong><code>Installing MOM6 on Ubuntu</code></strong></p>

<blockquote>
  <p>Downloading the model and basic libraries</p>
</blockquote>

<p>Following <a href="https://github.com/NOAA-GFDL/MOM6-examples/wiki/Installing-MOM6-in-a-virtual-machine-running-Ubuntu" rel="nofollow noreferrer">https://github.com/NOAA-GFDL/MOM6-examples/wiki/Installing-MOM6-in-a-virtual-machine-running-Ubuntu</a></p>

<p>And the video <a href="https://www.youtube.com/watch?v=a5hKh8s_1b0&amp;t=181s" rel="nofollow noreferrer">https://www.youtube.com/watch?v=a5hKh8s_1b0&amp;t=181s</a></p>

<pre><code>sudo apt-get install git tcsh pkg-config
sudo apt-get install gfortran
sudo apt-get install netcdf-bin libnetcdf-dev libnetcdff-dev
sudo apt-get install openmpi-bin libopenmpi-dev
sudo apt-get install libnetcdff-dev
git clone --recursive https://github.com/NOAA-GFDL/MOM6-examples demo
cd demo
</code></pre>

<p>Open the file src/mkmf/templates/linux-gnu.mk and find the variable LIBS. Now in this file add the syntax</p>

<pre><code># Add -lnetcdff
LIBS += -lnetcdff
</code></pre>

<p><strong>Compiling</strong></p>

<p>Now we are ready to start compiling and that we will do by going to <a href="https://github.com/NOAA-GFDL/MOM6-examples/wiki/Getting-started#compiling-the-models" rel="nofollow noreferrer">https://github.com/NOAA-GFDL/MOM6-examples/wiki/Getting-started#compiling-the-models</a></p>

<p>The instructions are for setting up on an intel compiler so we have to do some editing on these commands because we are going to use gfortran which is GNUs fortran.</p>

<pre><code>Make a directory to work to build the advanced libraries

mkdir -p build/gnu/shared/repro/
cd  build/gnu/shared/repro/
</code></pre>

<p>Next, we will run the mkmf list path tools and we are going to give it the relative path to FMS the source code</p>

<pre><code>../../../../src/mkmf/bin/list_paths -l ../../../../src/FMS
</code></pre>

<p>So what you have done is populated this file <strong>path_names</strong> with all these files and now we are going to run another mkmf tool and care of itself and we are going to specify the linux gnu template that we edited above and we are going to tell it to build FMS</p>

<pre><code>../../../../src/mkmf/bin/mkmf -t ../../../../src/mkmf/templates/linux-gnu.mk -p libfms.a -c "-Duse_libMPI -Duse_netCDF -DSPMD" path_names
</code></pre>

<p>and that makes the Makefile</p>

<p>Finally we can type</p>

<pre><code>make NETCDF=3 REPRO=1 FC=mpif77 CC=mpicc  libfms.a -j
</code></pre>

<p>So that builds the lib FMS code which can be seen by</p>

<pre><code>$ ls -l libfms.a 
-rw-rw-r-- 1 manmeet manmeet 13863094 Dec 10 13:22 libfms.a
</code></pre>

<p>Now we are going to go back and we will make a new set of folders ocean_only/repro</p>

<pre><code>cd ../../
mkdir -p ocean_only/repro
cd ocean_only/repro
</code></pre>

<p>Now we are going to run the list paths command again and that is just down and this time we are going to provide the current directory as a possible supply of sorts and gauge you want to put some source files in here and thats the dot for, and then there is the relative path of source code for MOM6 and we are going to be linking a dynamic executable, so we are putting the dynamic directory out of the config source and we are building a set up using the solo drivers, the driver had a config source, and all of the source code under src is being used.</p>

<pre><code>../../../../src/mkmf/bin/list_paths ./ ../../../../src/MOM6/{config_src/dynamic,config_src/solo_driver,src/{*,*/*}}/
</code></pre>

<p>So this has made a path_names file again which is populated will all the MOM6 source code. Now we are going to run the mkmf tool again and this time the target there is MOM6 and we have to change the template again to the linux-gnu</p>

<pre><code>../../../../src/mkmf/bin/mkmf -t ../../../../src/mkmf/templates/linux-gnu.mk -o '-I../../shared/repro' -p MOM6 -l '-L../../shared/repro -lfms' -c '-Duse_libMPI -Duse_netCDF -DSPMD' path_names
</code></pre>

<p>This will create the Makefile and now we can run the Makefile using a similar command but the target will be MOM6</p>

<pre><code>make NETCDF=3 REPRO=1 FC=mpif77 CC=mpicc LD=mpif77 MOM6 -j
</code></pre>

<p>Now we have the executable just called MOM6 and we will demonstrate that it works.</p>

<p>Going to the top of the directory and then to double_gyre</p>

<pre><code>cd ../../../../
cd ocean_only/double_gyre/
mpirun -n 1 ../../build/gnu/ocean_only/repro/MOM6
</code></pre>

<p>This is a simple 10 day test and will give something like this</p>

<pre><code>$ mpirun -n 1 ../../build/gnu/ocean_only/repro/MOM6
NOTE: MPP_DOMAINS_SET_STACK_SIZE: stack size set to    32768.
&amp;MPP_IO_NML
 HEADER_BUFFER_VAL=      16384,
 GLOBAL_FIELD_ON_ROOT_PE=T,
 IO_CLOCKS_ON=F,
 SHUFFLE=          0,
 DEFLATE_LEVEL=         -1,
 CF_COMPLIANCE=F,
 /
NOTE: MPP_IO_SET_STACK_SIZE: stack size set to     131072.
NOTE: ======== Model being driven by MOM_driver ========
NOTE: callTree: o Program MOM_main, MOM_driver.F90
NOTE: open_param_file: MOM_input has been opened successfully.
NOTE: open_param_file: MOM_override has been opened successfully.
 MOM domain decomposition
whalo =    4, ehalo =    4, shalo =    4, nhalo =    4
  X-AXIS =   44
  Y-AXIS =   40
 MOMc domain decomposition
whalo =    2, ehalo =    2, shalo =    2, nhalo =    2
  X-AXIS =   22
  Y-AXIS =   20
NOTE: diag_manager_mod::diag_manager_init: prepend_date only supported when diag_manager_init is called with time_init present.
 MOM domain decomposition
whalo =    4, ehalo =    4, shalo =    4, nhalo =    4
  X-AXIS =   44
  Y-AXIS =   40
 MOM domain decomposition
whalo =    4, ehalo =    4, shalo =    4, nhalo =    4
  X-AXIS =   44
  Y-AXIS =   40WARNING: depth_list_setup: ./Depth_list.nc does not exist.  Creating a new file.WARNING: depth_list_setup: ./Depth_list.nc does not exist.  Creating a new file.MOM Day       0.000      0: En 1.423707E-13, MaxCFL  0.00000, Mass 5.288178268008E+18
    Total Energy: 4126F9E3C5B6FEAF  7.5288188616176497E+05
    Total Mass:   5.2881782680077681E+18, Change:   0.0000000000000000E+00 Error:  0.00000E+00 ( 0.0E+00)
MOM Day       1.000     72: En 4.580432E-06, MaxCFL  0.00023, Mass 5.288178268008E+18
    Total Energy: 42B607A80A83D4D0  2.4222139843540812E+13
    Total Mass:   5.2881782680077681E+18, Change:  -4.3787057037831573E+01 Error: -4.37871E+01 (-8.3E-18)
MOM Day       2.000    144: En 8.958206E-06, MaxCFL  0.00040, Mass 5.288178268008E+18
    Total Energy: 42C58AE533474153  4.7372590026370648E+13
    Total Mass:   5.2881782680077681E+18, Change:   4.0318344822758547E+00 Error:  4.03183E+00 ( 7.6E-19)
MOM Day       3.000    216: En 1.166708E-05, MaxCFL  0.00045, Mass 5.288178268008E+18
    Total Energy: 42CC0E8B5CE02C7F  6.1697586479192992E+13
    Total Mass:   5.2881782680077681E+18, Change:   3.7798219410031322E+01 Error:  3.77982E+01 ( 7.1E-18)
MOM Day       4.000    288: En 1.542296E-05, MaxCFL  0.00044, Mass 5.288178268008E+18
    Total Energy: 42D28B60D5891799  8.1559337444446391E+13
    Total Mass:   5.2881782680077681E+18, Change:  -5.3715335655123397E+01 Error: -5.37153E+01 (-1.0E-17)
MOM Day       5.000    360: En 1.826022E-05, MaxCFL  0.00053, Mass 5.288178268008E+18
    Total Energy: 42D5F4B97D5D13C3  9.6563312817231047E+13
    Total Mass:   5.2881782680077681E+18, Change:  -2.1099290705067006E+01 Error: -2.10993E+01 (-4.0E-18)
MOM Day       6.000    432: En 2.397431E-05, MaxCFL  0.00062, Mass 5.288178268008E+18
    Total Energy: 42DCD397A5E14CB5  1.2678043163166683E+14
    Total Mass:   5.2881782680077681E+18, Change:  -1.0757841703346941E+01 Error: -1.07578E+01 (-2.0E-18)
MOM Day       7.000    504: En 2.927962E-05, MaxCFL  0.00073, Mass 5.288178268008E+18
    Total Energy: 42E19A5109E607AC  1.5483585791186938E+14
    Total Mass:   5.2881782680077681E+18, Change:   4.6503600220410505E+01 Error:  4.65036E+01 ( 8.8E-18)
MOM Day       8.000    576: En 3.486441E-05, MaxCFL  0.00081, Mass 5.288178268008E+18
    Total Energy: 42E4F5D995BB3999  1.8436920009364478E+14
    Total Mass:   5.2881782680077681E+18, Change:   2.4524203108417453E+01 Error:  2.45242E+01 ( 4.6E-18)
MOM Day       9.000    648: En 4.195565E-05, MaxCFL  0.00090, Mass 5.288178268008E+18
    Total Energy: 42E9393C9CAC4D82  2.2186896584766006E+14
    Total Mass:   5.2881782680077681E+18, Change:  -2.0342624683786397E+01 Error: -2.03426E+01 (-3.8E-18)
MOM Day      10.000    720: En 4.604729E-05, MaxCFL  0.00100, Mass 5.288178268008E+18
    Total Energy: 42EBAEF71B9A7E17  2.4350627232664072E+14
    Total Mass:   5.2881782680077681E+18, Change:   2.2570880028229340E+01 Error:  2.25709E+01 ( 4.3E-18)FATAL: NETCDF ERROR: No such file or directory File=RESTART/MOM.res.ncFATAL: NETCDF ERROR: No such file or directory File=RESTART/MOM.res.nc--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD 
with errorcode 1.NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------
-------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:Process name: [[19779,1],0]
  Exit code:    1
--------------------------------------------------------------------------
</code></pre>

<p>Thus we will get an error when we haven’t created a restart. We will do that now</p>

<pre><code>mkdir -p RESTART
mpirun -n 1 ../../build/gnu/ocean_only/repro/MOM6
</code></pre>

<p>Next we will use two processors and we see that it runs faster now</p>

<pre><code>mpirun -n 2../../build/gnu/ocean_only/repro/MOM6
</code></pre>

<p><a href="https://github.com/NOAA-GFDL/MOM6-examples/wiki/Ubuntu-compiler-environment" rel="nofollow noreferrer">https://github.com/NOAA-GFDL/MOM6-examples/wiki/Ubuntu-compiler-environment</a></p>

CC BY-SA 4.0
2019-12-10T18:53:39.420Z
IMO, it's generally best to include the relevant information & content _in the answer itself_, not just a link to where the content may be. That's more useful for future readers, or in case the link goes down. The link is nice to have in addition for reference or for further information. See also [How to answer](https://earthscience.stackexchange.com/help/how-to-answer).
Jonas Czech
CC BY-SA 4.0
2019-12-10T09:55:55.533Z
2019-12-11T01:59:25.150Z
2019-12-11T01:59:25.150Z
Manmeet Singh
<p>I am learning ocean modelling and have started with MOM6. I needed guidance on where to start from and how to run the model on my local machine (Ubuntu) to perform various tasks such as regridding or creating initial conditions or maybe small runs which might not take much time.</p>

<oceanography><ocean-models>
How do I start with Modular Ocean Model version 6 i.e. MOM6 on my ubuntu linux machine?
tech_climate
# How do I start with Modular Ocean Model version 6 i.e. MOM6 on my ubuntu linux machine?

(Asked by: username_0 on 2019-12-10)

I am learning ocean modelling and have started with MOM6. I needed guidance on where to start from and how to run the model on my local machine (Ubuntu) to perform various tasks such as regridding or creating initial conditions or maybe small runs which might not take much time.

**Tags:** oceanography, ocean-models


---

## 1 answers

### Answer by username_1 on 2019-12-10. Score: 7 | Accepted answer

You can follow the instructions I wrote at <https://medium.com/@manmeet20singh11/installing-mom6-on-ubuntu-57918a200293?sk%3D9961d6f8565659b05e007349c47568b7&sa=D&source=hangouts&ust=1576058141492000&usg=AFQjCNH74gi6j9XgT6I3509nb8Y0gtj4-Q>

**`Installing MOM6 on Ubuntu`**

> Downloading the model and basic libraries

Following <https://github.com/NOAA-GFDL/MOM6-examples/wiki/Installing-MOM6-in-a-virtual-machine-running-Ubuntu>

And the video <https://www.youtube.com/watch?v=a5hKh8s_1b0&t=181s>

```
sudo apt-get install git tcsh pkg-config
sudo apt-get install gfortran
sudo apt-get install netcdf-bin libnetcdf-dev libnetcdff-dev
sudo apt-get install openmpi-bin libopenmpi-dev
sudo apt-get install libnetcdff-dev
git clone --recursive https://github.com/NOAA-GFDL/MOM6-examples demo
cd demo

```

Open the file src/mkmf/templates/linux-gnu.mk and find the variable LIBS. Now in this file add the syntax

```
# Add -lnetcdff
LIBS += -lnetcdff

```

**Compiling**

Now we are ready to start compiling and that we will do by going to <https://github.com/NOAA-GFDL/MOM6-examples/wiki/Getting-started#compiling-the-models>

The instructions are for setting up on an intel compiler so we have to do some editing on these commands because we are going to use gfortran which is GNUs fortran.

```
Make a directory to work to build the advanced libraries

mkdir -p build/gnu/shared/repro/
cd  build/gnu/shared/repro/

```

Next, we will run the mkmf list path tools and we are going to give it the relative path to FMS the source code

```
../../../../src/mkmf/bin/list_paths -l ../../../../src/FMS

```

So what you have done is populated this file **path\_names** with all these files and now we are going to run another mkmf tool and care of itself and we are going to specify the linux gnu template that we edited above and we are going to tell it to build FMS

```
../../../../src/mkmf/bin/mkmf -t ../../../../src/mkmf/templates/linux-gnu.mk -p libfms.a -c "-Duse_libMPI -Duse_netCDF -DSPMD" path_names

```

and that makes the Makefile

Finally we can type

```
make NETCDF=3 REPRO=1 FC=mpif77 CC=mpicc  libfms.a -j

```

So that builds the lib FMS code which can be seen by

```
$ ls -l libfms.a 
-rw-rw-r-- 1 username_1 username_1 13863094 Dec 10 13:22 libfms.a

```

Now we are going to go back and we will make a new set of folders ocean\_only/repro

```
cd ../../
mkdir -p ocean_only/repro
cd ocean_only/repro

```

Now we are going to run the list paths command again and that is just down and this time we are going to provide the current directory as a possible supply of sorts and gauge you want to put some source files in here and thats the dot for, and then there is the relative path of source code for MOM6 and we are going to be linking a dynamic executable, so we are putting the dynamic directory out of the config source and we are building a set up using the solo drivers, the driver had a config source, and all of the source code under src is being used.

```
../../../../src/mkmf/bin/list_paths ./ ../../../../src/MOM6/{config_src/dynamic,config_src/solo_driver,src/{*,*/*}}/

```

So this has made a path\_names file again which is populated will all the MOM6 source code. Now we are going to run the mkmf tool again and this time the target there is MOM6 and we have to change the template again to the linux-gnu

```
../../../../src/mkmf/bin/mkmf -t ../../../../src/mkmf/templates/linux-gnu.mk -o '-I../../shared/repro' -p MOM6 -l '-L../../shared/repro -lfms' -c '-Duse_libMPI -Duse_netCDF -DSPMD' path_names

```

This will create the Makefile and now we can run the Makefile using a similar command but the target will be MOM6

```
make NETCDF=3 REPRO=1 FC=mpif77 CC=mpicc LD=mpif77 MOM6 -j

```

Now we have the executable just called MOM6 and we will demonstrate that it works.

Going to the top of the directory and then to double\_gyre

```
cd ../../../../
cd ocean_only/double_gyre/
mpirun -n 1 ../../build/gnu/ocean_only/repro/MOM6

```

This is a simple 10 day test and will give something like this

```
$ mpirun -n 1 ../../build/gnu/ocean_only/repro/MOM6
NOTE: MPP_DOMAINS_SET_STACK_SIZE: stack size set to    32768.
&MPP_IO_NML
 HEADER_BUFFER_VAL=      16384,
 GLOBAL_FIELD_ON_ROOT_PE=T,
 IO_CLOCKS_ON=F,
 SHUFFLE=          0,
 DEFLATE_LEVEL=         -1,
 CF_COMPLIANCE=F,
 /
NOTE: MPP_IO_SET_STACK_SIZE: stack size set to     131072.
NOTE: ======== Model being driven by MOM_driver ========
NOTE: callTree: o Program MOM_main, MOM_driver.F90
NOTE: open_param_file: MOM_input has been opened successfully.
NOTE: open_param_file: MOM_override has been opened successfully.
 MOM domain decomposition
whalo =    4, ehalo =    4, shalo =    4, nhalo =    4
  X-AXIS =   44
  Y-AXIS =   40
 MOMc domain decomposition
whalo =    2, ehalo =    2, shalo =    2, nhalo =    2
  X-AXIS =   22
  Y-AXIS =   20
NOTE: diag_manager_mod::diag_manager_init: prepend_date only supported when diag_manager_init is called with time_init present.
 MOM domain decomposition
whalo =    4, ehalo =    4, shalo =    4, nhalo =    4
  X-AXIS =   44
  Y-AXIS =   40
 MOM domain decomposition
whalo =    4, ehalo =    4, shalo =    4, nhalo =    4
  X-AXIS =   44
  Y-AXIS =   40WARNING: depth_list_setup: ./Depth_list.nc does not exist.  Creating a new file.WARNING: depth_list_setup: ./Depth_list.nc does not exist.  Creating a new file.MOM Day       0.000      0: En 1.423707E-13, MaxCFL  0.00000, Mass 5.288178268008E+18
    Total Energy: 4126F9E3C5B6FEAF  7.5288188616176497E+05
    Total Mass:   5.2881782680077681E+18, Change:   0.0000000000000000E+00 Error:  0.00000E+00 ( 0.0E+00)
MOM Day       1.000     72: En 4.580432E-06, MaxCFL  0.00023, Mass 5.288178268008E+18
    Total Energy: 42B607A80A83D4D0  2.4222139843540812E+13
    Total Mass:   5.2881782680077681E+18, Change:  -4.3787057037831573E+01 Error: -4.37871E+01 (-8.3E-18)
MOM Day       2.000    144: En 8.958206E-06, MaxCFL  0.00040, Mass 5.288178268008E+18
    Total Energy: 42C58AE533474153  4.7372590026370648E+13
    Total Mass:   5.2881782680077681E+18, Change:   4.0318344822758547E+00 Error:  4.03183E+00 ( 7.6E-19)
MOM Day       3.000    216: En 1.166708E-05, MaxCFL  0.00045, Mass 5.288178268008E+18
    Total Energy: 42CC0E8B5CE02C7F  6.1697586479192992E+13
    Total Mass:   5.2881782680077681E+18, Change:   3.7798219410031322E+01 Error:  3.77982E+01 ( 7.1E-18)
MOM Day       4.000    288: En 1.542296E-05, MaxCFL  0.00044, Mass 5.288178268008E+18
    Total Energy: 42D28B60D5891799  8.1559337444446391E+13
    Total Mass:   5.2881782680077681E+18, Change:  -5.3715335655123397E+01 Error: -5.37153E+01 (-1.0E-17)
MOM Day       5.000    360: En 1.826022E-05, MaxCFL  0.00053, Mass 5.288178268008E+18
    Total Energy: 42D5F4B97D5D13C3  9.6563312817231047E+13
    Total Mass:   5.2881782680077681E+18, Change:  -2.1099290705067006E+01 Error: -2.10993E+01 (-4.0E-18)
MOM Day       6.000    432: En 2.397431E-05, MaxCFL  0.00062, Mass 5.288178268008E+18
    Total Energy: 42DCD397A5E14CB5  1.2678043163166683E+14
    Total Mass:   5.2881782680077681E+18, Change:  -1.0757841703346941E+01 Error: -1.07578E+01 (-2.0E-18)
MOM Day       7.000    504: En 2.927962E-05, MaxCFL  0.00073, Mass 5.288178268008E+18
    Total Energy: 42E19A5109E607AC  1.5483585791186938E+14
    Total Mass:   5.2881782680077681E+18, Change:   4.6503600220410505E+01 Error:  4.65036E+01 ( 8.8E-18)
MOM Day       8.000    576: En 3.486441E-05, MaxCFL  0.00081, Mass 5.288178268008E+18
    Total Energy: 42E4F5D995BB3999  1.8436920009364478E+14
    Total Mass:   5.2881782680077681E+18, Change:   2.4524203108417453E+01 Error:  2.45242E+01 ( 4.6E-18)
MOM Day       9.000    648: En 4.195565E-05, MaxCFL  0.00090, Mass 5.288178268008E+18
    Total Energy: 42E9393C9CAC4D82  2.2186896584766006E+14
    Total Mass:   5.2881782680077681E+18, Change:  -2.0342624683786397E+01 Error: -2.03426E+01 (-3.8E-18)
MOM Day      10.000    720: En 4.604729E-05, MaxCFL  0.00100, Mass 5.288178268008E+18
    Total Energy: 42EBAEF71B9A7E17  2.4350627232664072E+14
    Total Mass:   5.2881782680077681E+18, Change:   2.2570880028229340E+01 Error:  2.25709E+01 ( 4.3E-18)FATAL: NETCDF ERROR: No such file or directory File=RESTART/MOM.res.ncFATAL: NETCDF ERROR: No such file or directory File=RESTART/MOM.res.nc--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD 
with errorcode 1.NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------
-------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus causing
the job to be terminated. The first process to do so was:Process name: [[19779,1],0]
  Exit code:    1
--------------------------------------------------------------------------

```

Thus we will get an error when we haven’t created a restart. We will do that now

```
mkdir -p RESTART
mpirun -n 1 ../../build/gnu/ocean_only/repro/MOM6

```

Next we will use two processors and we see that it runs faster now

```
mpirun -n 2../../build/gnu/ocean_only/repro/MOM6

```

<https://github.com/NOAA-GFDL/MOM6-examples/wiki/Ubuntu-compiler-environment>

> **Comments:**
> **username_2**: IMO, it's generally best to include the relevant information & content _in the answer itself_, not just a link to where the content may be. That's more useful for future readers, or in case the link goes down. The link is nice to have in addition for reference or for further information. See also [How to answer](https://earthscience.stackexchange.com/help/how-to-answer).  

---

