Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • development
  • v10.4.1
  • lcm_nudge
  • m_lcm
  • flexpart_lcm
  • fix_GFS
  • optimise
  • fix_GFS_23
  • feature_gfs_fix
  • wetdepo_bugfix
  • feature/newWetDepo
  • tests
  • christine
  • split_mods
  • openmp
  • anne
  • release-10.4.1
  • dev
  • 10.4.1_pesei
  • v11_beta
  • v10.4
  • v10.4_beta
  • v10.4_alpha
  • v9.2.0.3
  • v9.2
  • FPv9.3.2e
  • FPv9.3.2d
  • FPv9.3.2c
  • FPv9.3.2b
  • v9.2.0.2_Yosemite
  • ICR-1008
  • v10.2beta
  • FPv9.3.2a
  • fp9.3.1-20170412-nc4-coded
  • fp9.3.1-20170408-nc4
  • devlan-20161106
  • FPv9.3.1f
  • FPv9.3.1e
  • FPv9.3.1d
40 results

flexpart

  • Clone with SSH
  • Clone with HTTPS
  • Forked from Flexpart / Flexpart
    Loading
    Michael Blaschek's avatar
    Michael Blaschek authored
    Former-commit-id: 90fa234e
    d6306617
    History

    Welcome to Flexpart - The Lagrangian particle dispersion model

    This is the main development site @ University of Vienna.

    Other references:

    What is this repository for?

    • This repository contains versions of the Lagrangian model FLEXPART
    • Development versions
    • Issues on the FLEXPART model
    • Feature requests for future versions

    Getting started with Flexpart

    The model is written in Fortran. It needs to be compiled for the architecture that runs it.

    1.Configuration

    The Makefiles e.g. src/makefile_gfortran can use environmental variables:

    • CPATH for include directories
    • LIBRARY_PATH for libraries

    This is commonly used on HPC systems. e.g. JET and VSC. These paths will be added via rpath so statically linked. Otherwise edit the makefile with the paths to libraries and include files.

    Required Dependencies:

    • ecCodes from ECMWF (Jasper is not a requirement).
    • NetCDF (optional) from UCAR
    • Fortran Compiler with Fortran 2008 standard, e.g. GCC compiler 8+ or INTEL 19+ or INTEL-ONEAPI
    • make utils

    2.Compilation

    Clone the git repository or download one of the releases

    # clone the repository to your directory or download one of our releases
    git clone https://gitlab.phaidra.org/flexpart/flexpart.git
    # change to the SRC directory
    cd flexpart/src
    # Remember to configure your libraries in the makefile or environmental variables
    # use for example the GCC makefile
    make -f makefile_gfortran
    # this will create the FLEXPART executable
    file ./FLEXPART
    # Check its dependencies:
    ldd ./FLEXPART

    Now you are almost ready to run.

    3.Deployment instructions

    FLEXPART is a standalone executable
    The necessary ECMWF wind fields can be obtained testing flex_ecmwf The AVAILABLE file works with the default ERA 5 retrieved winds In the winds are available in flex_ecmwf/work it should suffice to execute ./src/FLEXPART in the main directory

    Container version

    since version 11, FLEXPART is also available as a container. There is a Dockerfile and some instructions on how to build the container from scratch or you can download the container from our registry using for example podman/docker or singularity/apptainer:

    Specifications:

    • compiled using march=core-avx2, compatible with CPUs above AVX2 (since Haswell or Zen)
    • ecCodes
    # registry download, replace podman to docker or vice versa
    podman pull harbor.wolke.img.univie.ac.at/flexpart/flexpartv11:master
    # using singularity/apptainer for running FLEXPART
    # there might be some warnings about EPERM (can be ignored)
    apptainer pull flexpart.sif docker://harbor.wolke.img.univie.ac.at/flexpart/flexpartv11:master

    running it using podman/docker or singularity/apptainer:

    # simple run the container with default settings
    podman run harbor.wolke.img.univie.ac.at/flexpart/flexpartv11:master
    # running the container requires a writable output directory
    # mounting the local directory to /output inside the container
    apptainer run -B .:/output flexpart.sif
    podman/docker flexpart run log
    
    Welcome, running FLEXPART 
    Using defaults (/pathnames)
    /options/
    /output/
    /inputs/
    /inputs/AVAILABLE
    Mount volumes to change inputs
    Git: c5bdd94 HEAD -> master, origin/master, origin/HEAD Tue Nov 21 16:15:27 2023 +0100
    EXECUTING FLEXPART
    trying to execute: /src/FLEXPART_ETA
    Executing: /src/FLEXPART_ETA
     Welcome to FLEXPART Version 11
     Git: undefined
     FLEXPART is free software released under the GNU General Public License.
     FLEXPART is running with ETA coordinates.
                  ----------------               
      INFORMATION: SUBGRIDSCALE TERRAIN EFFECT IS
      NOT PARAMETERIZED DURING THIS SIMULATION.  
                  ----------------               
    *********** WARNING  **********************************
    
    FLEXPART running in parallel mode                   *
    Number of uncertainty classes in                    *
    set to number of threads:                1          *
    All other computations are done with     8 threads. *
    
    
    FLEXPART WARNING: TIME DIFFERENCE BETWEEN TWO
    WIND FIELDS IS BIG. THIS MAY CAUSE A DEGRADATION
    OF SIMULATION QUALITY.
    ECMWF metdata detected
    NXSHIFT is set to           0
    grid dim:         181          91          92          92          91          92
    Vertical levels in ECMWF data:      92     92
    Mother domain:
    Longitude range: -178.00000 to  182.00000   Grid distance:    2.00000
    Latitude range :  -90.00000 to   90.00000   Grid distance:    2.00000
    Number of receptors:            2
    Releasepoints :            1
    reading SPECIES          24
    Particle shape SPHERE for particle          24
    SPECIES:  24  AIRTRACER   (GAS)
    Wet removal for gases      is turned: OFF
    Dry deposition for gases   is turned: OFF
    Below-cloud scavenging: OFF
    In-cloud scavenging: OFF
    Particles released (numpartmax):        10000
    Total mass released: 1.0000000E+00
    Allocating fields for global output (x,y):           85          65
    Concentrations are calculated using kernel
    WARNING: turbulence switched off.
    Simulated     0.0 hours (            0 s),             0 particles
    Time:            0 seconds. Total spawned:           0 alive:           0 terminated:           0
    Allocating        10000  particles           0           0           0
    Finished allocation
    Time:          900 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         1800 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         2700 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         3600 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    3600 Seconds simulated:         10000 Particles:    Uncertainty:   0.000  0.000  0.000
    Time:         4500 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         5400 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         6300 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         7200 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    7200 Seconds simulated:         10000 Particles:    Uncertainty:   0.000  0.000  0.000
    Time:         8100 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         9000 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         9900 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:        10800 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    10800 Seconds simulated:         10000 Particles:    Uncertainty:   0.000  0.000  0.000
    Read wind fields:   0.609375000      seconds
    Timemanager:    1.17187500      seconds,first timestep:    1.09375000     seconds
    Write particle files:    4.68750000E-02  seconds
    Total running time:    1.81250000      seconds
    tps,io,tot:    1.95312500E-02  0.131249994       1.81250000
    CONGRATULATIONS: YOU HAVE SUCCESSFULLY COMPLETED A FLEXPART MODEL RUN!
    FINISHED
    singularity/apptainer flexpart run log
    
    INFO:    gocryptfs not found, will not be able to use gocryptfs
    Welcome, running FLEXPART 
    Using defaults (/pathnames)
    /options/
    /output/
    /inputs/
    /inputs/AVAILABLE
    Mount volumes to change inputs
    Git: c5bdd94 HEAD -> master, origin/master, origin/HEAD Tue Nov 21 16:15:27 2023 +0100
    EXECUTING FLEXPART
    trying to execute: /src/FLEXPART_ETA
    Executing: /src/FLEXPART_ETA
     Welcome to FLEXPART Version 11
     Git: undefined
     FLEXPART is free software released under the GNU General Public License.
     FLEXPART is running with ETA coordinates.
                  ----------------               
      INFORMATION: SUBGRIDSCALE TERRAIN EFFECT IS
      NOT PARAMETERIZED DURING THIS SIMULATION.  
                  ----------------               
    *********** WARNING  **********************************
    
    FLEXPART running in parallel mode                   *
    Number of uncertainty classes in                    *
    set to number of threads:                1          *
    All other computations are done with     8 threads. *
    
    
    FLEXPART WARNING: TIME DIFFERENCE BETWEEN TWO
    WIND FIELDS IS BIG. THIS MAY CAUSE A DEGRADATION
    OF SIMULATION QUALITY.
    ECMWF metdata detected
    NXSHIFT is set to           0
    grid dim:         181          91          92          92          91          92
    Vertical levels in ECMWF data:      92     92
    Mother domain:
    Longitude range: -178.00000 to  182.00000   Grid distance:    2.00000
    Latitude range :  -90.00000 to   90.00000   Grid distance:    2.00000
    Number of receptors:            2
    Releasepoints :            1
    reading SPECIES          24
    Particle shape SPHERE for particle          24
    SPECIES:  24  AIRTRACER   (GAS)
    Wet removal for gases      is turned: OFF
    Dry deposition for gases   is turned: OFF
    Below-cloud scavenging: OFF
    In-cloud scavenging: OFF
    Particles released (numpartmax):        10000
    Total mass released: 1.0000000E+00
    Allocating fields for global output (x,y):           85          65
    Concentrations are calculated using kernel
    WARNING: turbulence switched off.
    Simulated     0.0 hours (            0 s),             0 particles
    Time:            0 seconds. Total spawned:           0 alive:           0 terminated:           0
    Allocating        10000  particles           0           0           0
    Finished allocation
    Time:          900 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         1800 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         2700 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         3600 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    3600 Seconds simulated:         10000 Particles:    Uncertainty:   0.000  0.000  0.000
    Time:         4500 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         5400 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         6300 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         7200 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    7200 Seconds simulated:         10000 Particles:    Uncertainty:   0.000  0.000  0.000
    Time:         8100 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         9000 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:         9900 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    Time:        10800 seconds. Total spawned:       10000 alive:       10000 terminated:           0
    10800 Seconds simulated:         10000 Particles:    Uncertainty:   0.000  0.000  0.000
    Read wind fields:   0.703125000      seconds
    Timemanager:    1.25000000      seconds,first timestep:    1.15625000     seconds
    Write particle files:    1.56250000E-02  seconds
    Total running time:    2.00000000      seconds
    tps,io,tot:    2.34375000E-02  0.143749997       2.00000000
    CONGRATULATIONS: YOU HAVE SUCCESSFULLY COMPLETED A FLEXPART MODEL RUN!
    FINISHED
    ncdump of default run output
    
    # check the output
    ncdump -h grid_conc_20090101000000.nc
    netcdf grid_conc_20090101000000 {
    dimensions:
    	time = UNLIMITED ; // (3 currently)
    	longitude = 85 ;
    	latitude = 65 ;
    	height = 4 ;
    	numspec = 1 ;
    	pointspec = 1 ;
    	nageclass = 1 ;
    	nchar = 45 ;
    	ncharrec = 16 ;
    	numpoint = 1 ;
    	receptor = UNLIMITED ; // (2 currently)
    variables:
    	int time(time) ;
    		time:units = "seconds since 2009-01-01 00:00" ;
    		time:calendar = "proleptic_gregorian" ;
    	float longitude(longitude) ;
    		longitude:long_name = "longitude in degree east" ;
    		longitude:axis = "Lon" ;
    		longitude:units = "degrees_east" ;
    		longitude:standard_name = "grid_longitude" ;
    		longitude:description = "grid cell centers" ;
    	float latitude(latitude) ;
    		latitude:long_name = "latitude in degree north" ;
    		latitude:axis = "Lat" ;
    		latitude:units = "degrees_north" ;
    		latitude:standard_name = "grid_latitude" ;
    		latitude:description = "grid cell centers" ;
    	float height(height) ;
    		height:units = "meters" ;
    		height:positive = "up" ;
    		height:standard_name = "height" ;
    		height:long_name = "height above ground" ;
    	char RELCOM(numpoint, nchar) ;
    		RELCOM:long_name = "release point name" ;
    	float RELLNG1(numpoint) ;
    		RELLNG1:units = "degrees_east" ;
    		RELLNG1:long_name = "release longitude lower left corner" ;
    	float RELLNG2(numpoint) ;
    		RELLNG2:units = "degrees_east" ;
    		RELLNG2:long_name = "release longitude upper right corner" ;
    	float RELLAT1(numpoint) ;
    		RELLAT1:units = "degrees_north" ;
    		RELLAT1:long_name = "release latitude lower left corner" ;
    	float RELLAT2(numpoint) ;
    		RELLAT2:units = "degrees_north" ;
    		RELLAT2:long_name = "release latitude upper right corner" ;
    	float RELZZ1(numpoint) ;
    		RELZZ1:units = "meters" ;
    		RELZZ1:long_name = "release height bottom" ;
    	float RELZZ2(numpoint) ;
    		RELZZ2:units = "meters" ;
    		RELZZ2:long_name = "release height top" ;
    	int RELKINDZ(numpoint) ;
    		RELKINDZ:long_name = "release kind" ;
    	int RELSTART(numpoint) ;
    		RELSTART:units = "seconds" ;
    		RELSTART:long_name = "release start relative to simulation start" ;
    	int RELEND(numpoint) ;
    		RELEND:units = "seconds" ;
    		RELEND:long_name = "release end relative to simulation start" ;
    	int RELPART(numpoint) ;
    		RELPART:long_name = "number of release particles" ;
    	float RELXMASS(numspec, numpoint) ;
    		RELXMASS:long_name = "total release particle mass" ;
    	int LAGE(nageclass) ;
    		LAGE:units = "seconds" ;
    		LAGE:long_name = "age class" ;
    	int ORO(latitude, longitude) ;
    		ORO:standard_name = "surface altitude" ;
    		ORO:long_name = "outgrid surface altitude" ;
    		ORO:units = "m" ;
    	char receptor(receptor, ncharrec) ;
    		receptor:long_name = "receptor name" ;
    	float spec001_mr(nageclass, pointspec, time, height, latitude, longitude) ;
    		spec001_mr:units = "ng m-3" ;
    		spec001_mr:long_name = "AIRTRACER" ;
    		spec001_mr:decay = -0.07001485f ;
    		spec001_mr:weightmolar = 29.f ;
    		spec001_mr:ohcconst = -9.e-10f ;
    		spec001_mr:ohdconst = -9.9f ;
    		spec001_mr:vsetaver = 0.f ;
    	float receptor_conc001(receptor, time) ;
    		receptor_conc001:units = "ng m-3" ;
    		receptor_conc001:_FillValue = -1.f ;
    		receptor_conc001:positive = "up" ;
    		receptor_conc001:standard_name = "receptor_conc" ;
    		receptor_conc001:long_name = "receptor_concentration" ;
    // global attributes:
    :Conventions = "CF-1.6" ;
    :title = "FLEXPART model output" ;
    :git = "undefined" ;
    :source = "Version 11 model output" ;
    :history = "2023-11-21 16:22 +0100  created by mblaschek on NB513" ;
    :references = "Stohl et al., Atmos. Chem. Phys., 2005, doi:10.5194/acp-5-2461-200" ;
    :outlon0 = -25.f ;
    :outlat0 = 10.f ;
    :dxout = 1.f ;
    :dyout = 1.f ;
    :ldirect = 1 ;
    :ibdate = "20090101" ;
    :ibtime = "000000" ;
    :iedate = "20090101" ;
    :ietime = "030000" ;
    :loutstep = 3600 ;
    :loutaver = 3600 ;
    :loutsample = 900 ;
    :loutrestart = -1 ;
    :lsynctime = 900 ;
    :ctl = -0.2f ;
    :ifine = 1 ;
    :iout = 1 ;
    :ipout = 0 ;
    :lsubgrid = 0 ;
    :lconvection = 0 ;
    :lagespectra = 0 ;
    :ipin = 0 ;
    :ioutputforeachrelease = 0 ;
    :iflux = 0 ;
    :mdomainfill = 0 ;
    :ind_source = 1 ;
    :ind_receptor = 1 ;
    :mquasilag = 0 ;
    :nested_output = 0 ;
    :sfc_only = 0 ;
    :linit_cond = 0 ;
    }

    Contribution guidelines

    • The version contributed should compile on a reference version of the system and compiler.

      • FLEXPART 10.4 used as reference gfortran 5.4 on Ubuntu 16.04
      • FLEXPART 11 uses as reference gfortran 8.5.0 on AlmaLinux 8/RockyLinux 8 or gfortran 11.4.1 on RockyLinux 9
    • Code contribution including new features and bug fixes should be complemented with appropriate tests An essential test consists of a set of input files and directories that allow FLEXPART to run. A test can be accompanied by output files for verification

    • Code review

    • report issues via mail to support

    • become an active developer and request a user account.