This example shell script retrieves a GRIB input file from ECFS and then:
compiles and links a Fortran program with the Magics++ library and
executes the program to create a PDF file
The SBATCH directives specify a time at which the job script should be run.
#!/bin/bash # # **************************** LICENSE START *********************************** # # Copyright 2021 ECMWF. This software is distributed under the terms # of the Apache License version 2.0. In applying this license, ECMWF does not # waive the privileges and immunities granted to it by virtue of its status as # an Intergovernmental Organization or submit itself to any jurisdiction. # # ***************************** LICENSE END ************************************ # # magicsjob USER SERVICES NOVEMBER 2021 - ECMWF # # # # This shell-script: # # - gets a GRIB input file from ECFS # - compiles and links a Fortran program with the # MAGICS++ library # - executes the program to create a PDF file # - specifies a time when to run the job script # # This shell script produces the standard output file # # magicsjob.<JOB-ID>.out # # in the workdir directory. # # For more information on MAGICS please refer to # # https://confluence.ecmwf.int/display/MAGP/Magics # # WARNING: In this example, the input data file is taken from ECFS. # #------------------------------- # setting options for SLURM #------------------------------- # Options that are specified within the script file should precede the # first executable shell command in the file. # All options, which are case sensitive, are preceded by #SBATCH. # These lines become active only when the script is submitted # using the "sbatch" command. # All job output is written to the workdir directory, by default. #SBATCH --qos=ef # Specifies that your job will run in the queue (Quality Of # Service) "ef". #SBATCH --job-name=magicsjob # Assigns the specified name to the request #SBATCH --output=magicsjob.%j.out # Specifies the name and location of STDOUT where %j is the job-id # The file will be # written in the workdir directory if it is a # relative path. If not given, the default is slurm-%j.out in the # workdir. #SBATCH --error=magicsjob.%j.out # Specifies the name and location of STDERR where %j is the job-id # The file will be # written in the workdir directory if it is a # relative path. If not given, the default is slurm-%j.outin the # workdir. #SBATCH --chdir=/scratch/... # Sets the working directory of the batch script before it is # executed. #SBATCH --mail-type=FAIL # Specifies that an email should be sent in case the job fails. # Other options include BEGIN, END, REQUEUE and ALL (any state # change). #SBATCH --time=00:05:00 # Specifies that your job my run up to HH:MM:SS of wall clock # time. The job will be killed if it exceeds this limit. If # time is not defined, the default limit for the queue (qos) # will be used. #SBATCH --begin=2021-01-30T13:30:00 # Specifies when you want to run the job step. If not # specified, the current date and time are used. The syntax # is: startdate = DATE TIME. # DATE is expressed as MM/DD/YYYY, and TIME is expressed as # HH:mm(:ss). If you specify DATE but not TIME, the default # start time is 00:00:00. This means that the job will start # as soon as possible on the specified date. If you specify # TIME but not DATE, the default start date is the current # day. #------------------------------- # setting environment variables #------------------------------- export PATH=$PATH:. # Allows you to run any of your programs or # scripts held in the current directory (not # required if already done in your .user_profile # or .user_kshrc) set -ev #------------------------------- # commands to be executed #------------------------------- cd $SCRATCHDIR # All the files created in this directory will # be deleted when the job terminates. # cat is used to read the Fortran program from the input stream # and to write it to the file 'contour.f'. # cat reads line by line until it reaches the line EOF. # cat >contour.f <<\EOF program ex c dimension rlev (5) data rlev /500.,530.,560.,575.,590./ c c open magics and define pdf device c output file name: output.pdf in portrait mode c call popen call psetc ('output_format','pdf') call psetc ('output_name','output') call psetr('super_page_x_length', 21.) call psetr('super_page_y_length', 29.7) call psetr('page_x_length', 21.) call psetr('page_y_length', 29.7) c c define the geographical area c full global mercator projection c call psetc ('subpage_map_projection','mercator') call pseti ('map_coastline_thickness',1) call psetc ('map_coastline_colour','charcoal') call psetc ('map_grid_colour','grey') call psetc ('map_label_colour','charcoal') call psetc ('map_grid_line_style','dash') call pcoast c c pass the data to magics c call psetc ('grib_input_file_name','contour') call pgrib c c solid blue contours defined by list of levels c call psetc ('contour_level_selection_type','level_list') call pset1r ('contour_level_list',rlev,5) call psetc ('contour_line_colour','navy') call psetc ('contour_highlight_colour','navy') call psetc ('contour_line_style','solid') call pseti ('contour_label_frequency',1) call pcont c c set title c call pset1c ('text_lines', + (/'Full global Mercator projection'/), 1) call psetc ('text_colour', 'charcoal') call psetr ('text_font_size', 0.6) call ptext c c close magics c call pclose END EOF #------------------------------- # Retrieve the actual GRIB input data # from ECFS into a target data file 'contour'. #------------------------------- ecp ec:/usc/public/job_ex_in/REG500 contour if [ $? != 0 ] # check ecp exit code then echo " The ECFS retrieve has failed." exit 1 fi #------------------------------- # load the GNU compiler #------------------------------- module load prgenv/gnu # Or "module load pg" #------------------------------- # load the default Magics module #------------------------------- module load ecmwf-toolbox #------------------------------- # compile and link #------------------------------- gfortran -march=native -O3 -o magics_exe contour.f $MAGPLUSLIB_SHARED #------------------------------- # execution #------------------------------- ./magics_exe # The PDF file to be plotted is created and # called 'output.pdf'. mv output.pdf $HOME/contour.pdf # It is recommended to save the PDF file 'contour.pdf' # for example in your $HOME directory. #-------------------------------# To preview on screen type: # previewing # xdg-open $HOME/contour.pdf #-------------------------------# #------------------------------- # tidy up by deleting unwanted files #------------------------------- # This is done automatically when using $SCRATCHDIR. exit 0 # End of example job 'magicsjob'