diff options
-rw-r--r-- | .gitignore | 8 | ||||
-rw-r--r-- | Docs/source/conf.py | 2 | ||||
-rw-r--r-- | Docs/source/developers/developers.rst | 1 | ||||
-rw-r--r-- | Docs/source/developers/workflow.rst | 19 | ||||
-rwxr-xr-x | Examples/Modules/laser_injection_from_file/analysis.py | 4 | ||||
-rw-r--r-- | LICENSE.txt | 2 | ||||
-rw-r--r-- | Python/setup.py | 2 | ||||
-rw-r--r-- | Regression/WarpX-GPU-tests.ini | 38 | ||||
-rw-r--r-- | Source/Diagnostics/FieldIO.cpp | 39 | ||||
-rwxr-xr-x | Tools/update_release.sh | 52 |
10 files changed, 130 insertions, 37 deletions
diff --git a/.gitignore b/.gitignore index 718bc7b94..5d3c7cce0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +Bin/ main?d.*.ex Python/pywarpx/libwarpx*.so d/ @@ -23,6 +24,13 @@ chk* *.pyc __pycache__ +########## +# Sphinx # +########## +Docs/doxyhtml/ +Docs/doxyxml/ +Docs/source/_static/ + ####### # IDE # ####### diff --git a/Docs/source/conf.py b/Docs/source/conf.py index 380b08833..e8e5d96e2 100644 --- a/Docs/source/conf.py +++ b/Docs/source/conf.py @@ -59,7 +59,7 @@ author = 'WarpX collaboration' # built documents. # # The short X.Y version. -version = '19.10' +version = '20.01' # The full version, including alpha/beta/rc tags. release = '' diff --git a/Docs/source/developers/developers.rst b/Docs/source/developers/developers.rst index 777c2f77b..152359318 100644 --- a/Docs/source/developers/developers.rst +++ b/Docs/source/developers/developers.rst @@ -20,3 +20,4 @@ Our Doxygen API documentation in classic formatting `is located here <../_static portability profiling documentation + workflow diff --git a/Docs/source/developers/workflow.rst b/Docs/source/developers/workflow.rst new file mode 100644 index 000000000..c24185cd1 --- /dev/null +++ b/Docs/source/developers/workflow.rst @@ -0,0 +1,19 @@ +.. _developers-workflow: + +Workflow +======== + +Make a new Github release +------------------------- + +WarpX has one release per month. To make the release, you need to: + + * Update the version number in all source files. There is a script for that, so you can do: + + .. code-block:: sh + cd Tools/ + ./update_release.sh + + * Merge ``dev`` branch into ``master`` branch. + + * Click the `Draft a new release` button at https://github.com/ECP-WarpX/WarpX/releases and follow instructions. diff --git a/Examples/Modules/laser_injection_from_file/analysis.py b/Examples/Modules/laser_injection_from_file/analysis.py index 87ef197dd..9c8629215 100755 --- a/Examples/Modules/laser_injection_from_file/analysis.py +++ b/Examples/Modules/laser_injection_from_file/analysis.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # This file is part of the WarpX automated test suite. It is used to test the # injection of a laser pulse from an external binary file. @@ -10,6 +10,8 @@ import yt ; yt.funcs.mylog.setLevel(50) import numpy as np +import matplotlib +matplotlib.use('Agg') import matplotlib.pyplot as plt from scipy.signal import hilbert import glob diff --git a/LICENSE.txt b/LICENSE.txt index 9836bf148..88360ef8a 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -WarpX v19.10 Copyright (c) 2018, The Regents of the University of California, through Lawrence Berkeley National Laboratory, and Lawrence Livermore National Security, LLC, for the operation of Lawrence Livermore National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved. +WarpX v20.01 Copyright (c) 2018, The Regents of the University of California, through Lawrence Berkeley National Laboratory, and Lawrence Livermore National Security, LLC, for the operation of Lawrence Livermore National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/Python/setup.py b/Python/setup.py index 0309962ab..309d25b92 100644 --- a/Python/setup.py +++ b/Python/setup.py @@ -20,7 +20,7 @@ else: package_data = {} setup (name = 'pywarpx', - version = '19.10', + version = '20.01', packages = ['pywarpx'], package_dir = {'pywarpx':'pywarpx'}, description = """Wrapper of WarpX""", diff --git a/Regression/WarpX-GPU-tests.ini b/Regression/WarpX-GPU-tests.ini index cc8679bea..e4a2b4194 100644 --- a/Regression/WarpX-GPU-tests.ini +++ b/Regression/WarpX-GPU-tests.ini @@ -70,6 +70,7 @@ useOMP = 0 numthreads = 2 compileTest = 0 doVis = 0 +tolerance = 1e-9 analysisRoutine = Examples/Tests/PML/analysis_pml_yee.py [pml_x_ckc] @@ -85,6 +86,7 @@ useOMP = 0 numthreads = 2 compileTest = 0 doVis = 0 +tolerance = 1e-9 analysisRoutine = Examples/Tests/PML/analysis_pml_ckc.py #[pml_x_psatd] @@ -419,24 +421,24 @@ particleTypes = electrons positrons analysisRoutine = Examples/Tests/Langmuir/analysis_langmuir_multi_2d.py analysisOutputImage = langmuir_multi_2d_analysis.png -[Langmuir_multi_2d_psatd_nodal] -buildDir = . -inputFile = Examples/Tests/Langmuir/inputs_2d_multi_rt -dim = 2 -addToCompileString = USE_PSATD=TRUE USE_GPU=TRUE -restartTest = 0 -useMPI = 1 -numprocs = 4 -useOMP = 0 -numthreads = 1 -compileTest = 0 -tolerance = 5e-11 -doVis = 0 -compareParticles = 0 -runtime_params = psatd.fftw_plan_measure=0 warpx.do_nodal=1 algo.current_deposition=direct electrons.plot_vars=w ux uy uz Ex Ey Ez positrons.plot_vars=w ux uy uz Ex Ey Ez warpx.fields_to_plot=Ex Ey Ez jx jy jz part_per_cell -particleTypes = electrons positrons -analysisRoutine = Examples/Tests/Langmuir/analysis_langmuir_multi_2d.py -analysisOutputImage = langmuir_multi_2d_analysis.png +# [Langmuir_multi_2d_psatd_nodal] +# buildDir = . +# inputFile = Examples/Tests/Langmuir/inputs_2d_multi_rt +# dim = 2 +# addToCompileString = USE_PSATD=TRUE USE_GPU=TRUE +# restartTest = 0 +# useMPI = 1 +# numprocs = 4 +# useOMP = 0 +# numthreads = 1 +# compileTest = 0 +# tolerance = 5e-11 +# doVis = 0 +# compareParticles = 0 +# runtime_params = psatd.fftw_plan_measure=0 warpx.do_nodal=1 algo.current_deposition=direct electrons.plot_vars=w ux uy uz Ex Ey Ez positrons.plot_vars=w ux uy uz Ex Ey Ez warpx.fields_to_plot=Ex Ey Ez jx jy jz part_per_cell +# particleTypes = electrons positrons +# analysisRoutine = Examples/Tests/Langmuir/analysis_langmuir_multi_2d.py +# analysisOutputImage = langmuir_multi_2d_analysis.png # [Langmuir_multi_rz] # buildDir = . diff --git a/Source/Diagnostics/FieldIO.cpp b/Source/Diagnostics/FieldIO.cpp index be0e719cc..9c38f1d68 100644 --- a/Source/Diagnostics/FieldIO.cpp +++ b/Source/Diagnostics/FieldIO.cpp @@ -476,6 +476,15 @@ AddToVarNames (Vector<std::string>& varnames, for(auto coord:coords) varnames.push_back(name+coord+suffix); } +/** \brief Add RZ variable names to the list. + */ +void +AddToVarNamesRZ (Vector<std::string>& varnames, + std::string name, std::string suffix) { + auto coords = {"r", "theta", "z"}; + for(auto coord:coords) varnames.push_back(name+coord+suffix); +} + /** \brief Write the different fields that are meant for output, * into the vector of MultiFab `mf_avg` (one MultiFab per level) * after averaging them to the cell centers. @@ -551,31 +560,31 @@ WarpX::AverageAndPackFields ( Vector<std::string>& varnames, if(lev==0) varnames.push_back(fieldname); if (fieldname == "Ex"){ MultiFab::Copy( mf_avg[lev], mf_tmp_E, 0, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_E, 0, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_E, 0, dcomp, ngrow, "Er", varnames); } else if (fieldname == "Ey"){ MultiFab::Copy( mf_avg[lev], mf_tmp_E, 1, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_E, 1, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_E, 1, dcomp, ngrow, "Etheta", varnames); } else if (fieldname == "Ez"){ MultiFab::Copy( mf_avg[lev], mf_tmp_E, 2, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_E, 2, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_E, 2, dcomp, ngrow, "Ez", varnames); } else if (fieldname == "Bx"){ MultiFab::Copy( mf_avg[lev], mf_tmp_B, 0, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_B, 0, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_B, 0, dcomp, ngrow, "Br", varnames); } else if (fieldname == "By"){ MultiFab::Copy( mf_avg[lev], mf_tmp_B, 1, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_B, 1, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_B, 1, dcomp, ngrow, "Btheta", varnames); } else if (fieldname == "Bz"){ MultiFab::Copy( mf_avg[lev], mf_tmp_B, 2, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_B, 2, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_B, 2, dcomp, ngrow, "Bz", varnames); } else if (fieldname == "jx"){ MultiFab::Copy( mf_avg[lev], mf_tmp_J, 0, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_J, 0, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_J, 0, dcomp, ngrow, "jr", varnames); } else if (fieldname == "jy"){ MultiFab::Copy( mf_avg[lev], mf_tmp_J, 1, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_J, 1, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_J, 1, dcomp, ngrow, "jtheta", varnames); } else if (fieldname == "jz"){ MultiFab::Copy( mf_avg[lev], mf_tmp_J, 2, dcomp++, 1, ngrow); - CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_J, 2, dcomp, ngrow, fieldname, varnames); + CopyVectorFieldComponentsToMultiFab(lev, mf_avg, mf_tmp_J, 2, dcomp, ngrow, "jz", varnames); } else if (fieldname == "rho"){ AverageAndPackScalarField( mf_avg[lev], *rho_fp[lev], dcomp++, ngrow ); CopyScalarFieldComponentsToMultiFab(lev, mf_avg, *rho_fp[lev], dcomp, ngrow, n_rz_azimuthal_modes, @@ -651,10 +660,10 @@ WarpX::AverageAndPackFields ( Vector<std::string>& varnames, if (lev == 0) { AddToVarNames(varnames, "E", "_fp"); if (n_rz_azimuthal_modes > 1) { - AddToVarNames(varnames, "E", ComponentName("_fp", 0, "real")); + AddToVarNamesRZ(varnames, "E", ComponentName("_fp", 0, "real")); for (int mode=1 ; mode < n_rz_azimuthal_modes ; mode++) { - AddToVarNames(varnames, "E", ComponentName("_fp", mode, "real")); - AddToVarNames(varnames, "E", ComponentName("_fp", mode, "imag")); + AddToVarNamesRZ(varnames, "E", ComponentName("_fp", mode, "real")); + AddToVarNamesRZ(varnames, "E", ComponentName("_fp", mode, "imag")); } } } @@ -664,10 +673,10 @@ WarpX::AverageAndPackFields ( Vector<std::string>& varnames, if (lev == 0) { AddToVarNames(varnames, "B", "_fp"); if (n_rz_azimuthal_modes > 1) { - AddToVarNames(varnames, "B", ComponentName("_fp", 0, "real")); + AddToVarNamesRZ(varnames, "B", ComponentName("_fp", 0, "real")); for (int mode=1 ; mode < n_rz_azimuthal_modes ; mode++) { - AddToVarNames(varnames, "B", ComponentName("_fp", mode, "real")); - AddToVarNames(varnames, "B", ComponentName("_fp", mode, "imag")); + AddToVarNamesRZ(varnames, "B", ComponentName("_fp", mode, "real")); + AddToVarNamesRZ(varnames, "B", ComponentName("_fp", mode, "imag")); } } } diff --git a/Tools/update_release.sh b/Tools/update_release.sh new file mode 100755 index 000000000..d45efd15c --- /dev/null +++ b/Tools/update_release.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# This script updates release version number in all source files. +# +# updates occurences like "version = '??.??'" where ??.?? is the version number +# updates occurences like "WarpX v??.??" where ??.?? is the version number +# +# Requirements: +# - gnu grep (default grep on MacOS does not have same -P option) +# - gnu sed (default grep on MacOS does not have same -i option) + +set -e + +# Get old tag number from git +git_tag=`git describe --tags` +old_release_number="${git_tag%%-*}" + +# Construct new tag number from current date +d=`date +%Y.%m` +new_release_number=${d:2} + +echo "Replace release number $old_release_number by $new_release_number" + +# Loop over files and sed patterns with version number +pattern="\.c$|\.cpp$|\.F90$|\.h$|\.H$|\.ini$|\.md$|\.py$|"\ +"\.rst$|\.sh$|\.tex$|\.txt$|\.xml$|\.yml$|"\ +"CMakeLists\.txt|inputs" +for i in $(find .. \ + -not -path "../.git/*" \ + -not -path "../.idea/*" \ + -not -path "../Docs/source/api/*" \ + -not -path "../Docs/build/*" \ + -not -path "../Docs/doxyxml/*" \ + -not -path "*wp_parse*" \ + -not -path "../tmp_build_dir/*" \ + -type f | \ + grep -P "${pattern}") +do + echo $i + # update occurences like "version = '??.??'" where ??.?? is the version number + # Note: sleep is required due to a bug in sed: without, the file + # permissions are modified + sed -i "s/version = "\'"$old_release_number"\'"/version = "\'"$new_release_number"\'"/g" $i && sleep .001 + # update occurences like "WarpX v??.??" where ??.?? is the version number + sed -i "s/WarpX v$old_release_number/WarpX v$new_release_number/g" $i && sleep .001 +done + +echo "" +echo "WARNING: Remaining occurences of $old_release_number are listed below." +echo " Is this expected? Or should these be updated too?" +echo "" +git grep "$old_release_number" . |