Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

Sommaire

Create an executable

In the tutorial below you will have to replace everything that is in cursive red with your own personal names. The rest is just copy-paste.

1) Create directory

First you should come up with a name for your executable. To make the rest of this tutorial easier set the variable 'My_Abs' to the name of your choice:

             My_Abs=name_of_my_executable

Then create yourself a directory under your home(!) (so it gets backup up) in which you want to create the executable.
I usually call mine:     ~/gem/v_5.1.1/Abs/...

For example:

           mkdir -p ~/gem/v_5.1.1/Abs/${My_Abs      # Set 'My_Abs' to whatever you like. But make sure to give every executable directory a different 'my_Abs' name!}

2) Populate directory

Go into the executable directory you just created above. For example:

            cd ~/gem/v_5.1.1/Abs/${My_Abs

a) Get the basename of abs-directory

Get the basename (last part of your directory path) of your abs-directory for later use:

             base_dir=$( basename $(pwd) )

'base_dir' should now be set to 'My_Abs'. You can verify it with:

            echo $base_dir

...

}

a) Clone the Git repository you want

Before cloning anything make sure the owner of the code you want to clone has commited all modifications! Otherwise you will not get them. Then you can clone the source code with, for example:

             git clone ~winger/gem/v_5.1.1/Abs/UQAM_latest/gem

...

full_Abs_directory_of_sourcecode_to_clone/gem

Or you can clone my latest verison with:

            

...

git clone ~winger/gem/v_5.1.1/Abs/

...

UQAM_

...

latest/gem

...

b) Uncommited changes

Only ifIf there were uncommited changes to the code you would like to get as well you will have to copy the modified files by hand. This is not elegant at all, but if you want to make sure you got all modifications you can also remove your source code and then copy the source code you want by hand. For example:

             cd ~/gem/v_5.1.1/Abs/${My_Abs}/gem/src
             rm -rf
gemdyn modelutils rpnphy
             cd ~/gem/v_5.1.1/Abs/full_Abs_directory_of_sourcecode_to_clone_from/gem/src
            
rsync -ruvt gemdyn modelutils rpnphy ~/gem/v_5.1.1/Abs/${My_Abs}/gem/src

c) Create working directories

First change Change into 'gem' directory that came with the clone:

             cd ~/gem/v_5.1.1/Abs/${My_Abs}/gem

So the object files, libraries and executables will not be under your home, create links for the directories 'build' and 'work'. Pick a place under which you want to keep the object files, libraries and executables. Preferably under the default(!) space of you professors, for example:

            work_space=/project/def-professor/${USER}/GEM_WORK_DIR     # Set 'professor' to the CC name of your professor. You can find all of them under ~/projects.

Create the directories and the links (using ${baseMy_dirAbs} from above) :

            mkdir -p ${work_space}/${baseMy_dirAbs}/build
            mkdir -p ${work_space}/${baseMy_dirAbs}/work
            ln -s ${work_space}/${baseMy_dirAbs}/build
            ln -s ${work_space}/${baseMy_dirAbs}/work

3) Create the executable

...

            cd ~/gem/v_5.1.1/Abs/${My_Abs}/gem

c) Set the variable 'abs_dir' to the name of your executable directory, including the 'gem' directory (needed under e))

...


If you just want to compile a one routine without creating the executable (to save time) you can just compile a routine, for example utils/sfclayer_mod.F90 with:

...

            GEM_ovbin=~/gem/v_5.1.1/Abs/my_abs${My_Abs}

Modify compiler flags

Compile one routine without optimization, '-O0'

  • edit the file named CMakeLists.txt in the main directory where the subroutine is situated (for example, src/rpnphy/CMakeLists.txt if the subroutine is situated in the physics directory)
  • copy the following example before the last line (add_library...) and modify it according to your needs:

set_source_files_properties(utils/sfclayer_mod.F90 PROPERTIES COMPILE_OPTIONS "-O0")

  • make sure you use a recent version of cmake (at least 3.11) - on Narval we do
  • you can verify the option was passed by looking at the file flags.make situated in the corresponding directory in the build directory, for example build/src/rpnphy/CMakeFiles/phy.dir/flags.make:

# Custom options: src/rpnphy/CMakeFiles/phy.dir/utils/sfclayer_mod.F90.o_OPTIONS = -O0

Then go back into your 'build' directory and compile with the usual:

    make maingemdm
or
    make -j4 maingemdm

When compiling this routine now you should see something like the following:
Building Fortran object src/rpnphy/CMakeFiles/phy.dir/utils/sfclayer_mod.F90.o
...  -O2 -g   -O0 -c ...

The second '-O0' should overwrite the first '-O2'.

Set 'fp-model' to 'precise' or 'strict'

In project/Linux-x86_64-intel.cmake change in line 24 '-fp-model source' to '-fp-model precise' (Vivian) resp. '-fp-model strict' (Ron).

precise

Disables optimizations that are not value-safe on floating-point data.

strict

Enables precise and except, disables contractions, and enables pragma stdc fenv_access.

source

Rounds intermediate results to source-defined precision.