From 7f7281c01ce4dcec7699f2ab6a9e83edfafb72a8 Mon Sep 17 00:00:00 2001 From: Ankang Gao Date: Mon, 31 Oct 2022 14:51:03 +0800 Subject: [PATCH] Initialize --- .clang-format | 1 + .dockerignore | 8 +- .gitattributes | 1 + .gitignore | 2 + .gitlab-ci.yml | 205 +- .gitlab-ci/build-and-test.sh | 23 +- .gitlab-ci/packaging-exclude | 6 + .gitlab-ci/packaging.yml | 741 ++ CHANGELOG.md | 179 +- CMakeLists.txt | 73 +- CONTRIBUTING.md | 105 +- VERSION | 2 +- cmake/Nektar++Config.cmake.in | 21 +- cmake/NektarSIMD.cmake | 72 +- cmake/ThirdPartyBlasLapack.cmake | 14 +- cmake/ThirdPartyCCM.cmake | 7 +- cmake/ThirdPartyCwipi.cmake | 4 - cmake/ThirdPartyPETSc.cmake | 2 +- cmake/ThirdPartyScotch.cmake | 26 +- cmake/ThirdPartyVTK.cmake | 21 +- ...ch-6_0_4-flex-2_6_3-yy-compatibility.patch | 16 + docker/nektar-env/Dockerfile | 8 +- docker/nektar-env/Dockerfile_centos_full | 4 + .../Dockerfile_debian_documentation | 10 +- docker/nektar-env/Dockerfile_debian_full | 2 + docker/nektar-env/Dockerfile_debian_full_py3 | 16 - docker/nektar-env/Dockerfile_ubuntu_full_py3 | 13 - docker/nektar-env/bionic_full_packages.txt | 1 + ...xt => bullseye_documentation_packages.txt} | 0 docker/nektar-env/bullseye_full_packages.txt | 1 + docker/nektar-env/buster_full_packages.txt | 1 + docker/nektar-env/centos7_full_packages.txt | 1 + docker/nektar-env/focal_full_packages.txt | 1 + docker/nektar-env/jammy_default_packages.txt | 15 + docker/nektar-env/jammy_full_packages.txt | 17 + docker/nektar-env/stretch_full_packages.txt | 1 + docker/nektar-env/xenial_full_packages.txt | 1 + docker/nektar-workbook/Dockerfile | 30 +- docker/nektar-workbook/entrypoint.sh | 6 + docker/nektar/Dockerfile | 17 +- docker/nektar/README.md | 1 + docker/packaging/Dockerfile-centos-7 | 24 + docker/packaging/Dockerfile-centos-8 | 31 + docker/packaging/Dockerfile-debian-bullseye | 45 + docker/packaging/Dockerfile-debian-buster | 42 + docker/packaging/Dockerfile-debian-stretch | 45 + docker/packaging/Dockerfile-debian-unstable | 49 + docker/packaging/Dockerfile-fedora-35 | 10 + docker/packaging/Dockerfile-source-archive | 19 + docker/packaging/Dockerfile-source-doc | 27 + docker/packaging/Dockerfile-ubuntu-bionic | 40 + docker/packaging/Dockerfile-ubuntu-focal | 40 + docker/packaging/Dockerfile-ubuntu-jammy | 40 + docker/packaging/Dockerfile-ubuntu-xenial | 44 + docker/packaging/quiltrc | 10 + docker/packaging/texlive.profile | 30 + docs/developer-guide/CMakeLists.txt | 51 +- ...velopers-guide.bib => developer-guide.bib} | 29 + ...velopers-guide.tex => developer-guide.tex} | 3 +- .../library/LibUtilities/simdlib.tex | 7 +- .../MultiRegions/multireg-preconditioners.tex | 12 + docs/developer-guide/memoir.4ht | 120 - docs/developer-guide/prelims/prelims.tex | 4 +- .../shared/devguide-preamble.tex | 1 + .../solvers/compressible-solver.tex | 448 +- .../solvers/img/DataStructureFinal.png | Bin 0 -> 224238 bytes .../solvers/img/DataStructureFinal.pptx | Bin 0 -> 90020 bytes docs/developer-guide/solvers/img/NS-chart.tex | 116 + docs/doxygen/Doxyfile.in | 1 + docs/refs.bib | 25 +- docs/tutorial | 2 +- docs/user-guide/CMakeLists.txt | 27 +- docs/user-guide/command-line/command-line.tex | 12 + docs/user-guide/memoir.4ht | 120 - docs/user-guide/optimisation/optimisation.tex | 156 +- docs/user-guide/solvers/compressible-flow.tex | 429 +- .../solvers/img/CylinderSubsonic.jpeg | Bin 0 -> 997428 bytes docs/user-guide/solvers/incompressible-ns.tex | 70 +- docs/user-guide/solvers/pulse-wave.tex | 19 +- docs/user-guide/user-guide.tex | 3 + docs/user-guide/utilities/fieldconvert.tex | 200 +- docs/user-guide/utilities/img/Car_mesh.png | Bin 0 -> 794875 bytes docs/user-guide/utilities/nekmesh.tex | 102 +- docs/user-guide/xml/xml-conditions.tex | 10 + docs/user-guide/xml/xml-expansions.tex | 21 +- docs/user-guide/xml/xml-filters.tex | 135 +- docs/user-guide/xml/xml-forcing.tex | 70 +- docs/user-guide/xml/xml-geometry.tex | 7 + library/CMakeLists.txt | 10 +- library/Collections/BwdTrans.cpp | 402 +- library/Collections/CoalescedGeomData.cpp | 234 +- library/Collections/CoalescedGeomData.h | 60 +- library/Collections/Collection.cpp | 49 +- library/Collections/Collection.h | 159 +- .../Collections/CollectionOptimisation.cpp | 516 +- library/Collections/CollectionOptimisation.h | 201 +- library/Collections/CollectionsDeclspec.h | 18 +- library/Collections/Helmholtz.cpp | 820 +- library/Collections/Helmholtz.h | 63 +- library/Collections/IProduct.cpp | 521 +- library/Collections/IProduct.h | 66 +- library/Collections/IProductWRTBase.cpp | 1506 +-- library/Collections/IProductWRTDerivBase.cpp | 2917 +++-- library/Collections/MatrixFreeBase.h | 252 +- library/Collections/Operator.cpp | 44 +- library/Collections/Operator.h | 185 +- library/Collections/PhysDeriv.cpp | 3342 +++-- library/Demos/CMakeLists.txt | 2 +- .../Demos/Collections/CollectionTiming.cpp | 41 +- library/Demos/LibUtilities/CMakeLists.txt | 8 +- library/Demos/LibUtilities/ErrorStream.cpp | 10 +- .../Demos/LibUtilities/FieldIOBenchmarker.cpp | 29 +- library/Demos/LibUtilities/FoundationDemo.cpp | 283 +- library/Demos/LibUtilities/LinSysIterDemo.cpp | 2 +- library/Demos/LibUtilities/MPIInit.cpp | 68 + library/Demos/LibUtilities/NodalDemo.cpp | 50 +- .../Demos/LibUtilities/NonlinSysIterDemo.cpp | 2 +- library/Demos/LibUtilities/Tests/MPIInit.tst | 17 + .../LibUtilities/TimeIntegrationDemo.cpp | 42 +- library/Demos/LocalRegions/LocProject.cpp | 306 +- library/Demos/MatrixFreeOps/CMakeLists.txt | 13 + .../Demos/MatrixFreeOps/Helmholtz2D_MFO.cpp | 277 + .../Demos/MatrixFreeOps/Helmholtz3D_MFO.cpp | 324 + library/Demos/MatrixFreeOps/MFO_Timing.cpp | 407 + library/Demos/MatrixFreeOps/MFO_Timing_3D.cpp | 456 + library/Demos/MultiRegions/Deriv3DHomo1D.cpp | 177 +- .../MultiRegions/Deriv3DHomo1D_SingleMode.cpp | 180 +- library/Demos/MultiRegions/Deriv3DHomo2D.cpp | 189 +- .../ExtraDemos/PostProcessing.cpp | 213 +- .../MultiRegions/ExtraDemos/ProjectCont1D.cpp | 93 +- .../MultiRegions/ExtraDemos/ProjectCont2D.cpp | 117 +- .../MultiRegions/ExtraDemos/ProjectCont3D.cpp | 92 +- .../ExtraDemos/ProjectContField3D.cpp | 99 +- .../MultiRegions/ExtraDemos/ProjectLoc1D.cpp | 69 +- .../MultiRegions/ExtraDemos/ProjectLoc2D.cpp | 109 +- .../MultiRegions/ExtraDemos/ProjectLoc3D.cpp | 76 +- .../SteadyLinearAdvectionReaction2D.cpp | 185 +- library/Demos/MultiRegions/HDGHelmholtz1D.cpp | 92 +- library/Demos/MultiRegions/HDGHelmholtz2D.cpp | 120 +- library/Demos/MultiRegions/HDGHelmholtz3D.cpp | 161 +- .../MultiRegions/HDGHelmholtz3DHomo1D.cpp | 113 +- library/Demos/MultiRegions/Helmholtz1D.cpp | 111 +- library/Demos/MultiRegions/Helmholtz2D.cpp | 184 +- library/Demos/MultiRegions/Helmholtz3D.cpp | 104 +- .../Demos/MultiRegions/Helmholtz3DHomo1D.cpp | 118 +- .../Demos/MultiRegions/Helmholtz3DHomo2D.cpp | 106 +- library/Demos/MultiRegions/Int3DHomo1D.cpp | 123 +- library/Demos/MultiRegions/PostProcHDG2D.cpp | 307 +- library/Demos/MultiRegions/PostProcHDG3D.cpp | 337 +- .../SteadyAdvectionDiffusionReaction2D.cpp | 143 +- .../MultiRegions/SteadyLinearAdvection2D.cpp | 188 +- .../MultiRegions/Tests/Deriv3D_Homo2D.xml | 2 +- .../Tests/Helmholtz3D_Tet_VarP.xml | 8 +- library/Demos/MultiRegions/Tests/test.opt | 25 + .../Demos/Python/FieldUtils/CMakeLists.txt | 4 + .../Tests/Tet_channel_npart_wss.tst | 2 +- .../Python/FieldUtils/Tests/chan3D_div.tst | 22 + .../Tests/chan3D_interppointdatatofld.tst | 2 +- .../FieldUtils/Tests/taylor_vortex_2D.fld | 19 + .../FieldUtils/Tests/taylor_vortex_2D.xml | 105 + .../FieldUtils/Tests/taylor_vortex_2D_div.tst | 20 + .../FieldUtils/Tests/wss_3D_periodic.tst | 6 +- library/Demos/Python/FieldUtils/chan3D_div.py | 10 + .../Python/FieldUtils/taylor_vortex_2D_div.py | 10 + .../Demos/Python/LibUtilities/CMakeLists.txt | 7 + .../Python/LibUtilities/Equation_UnitTest.py | 96 + .../LibUtilities/Interpreter_UnitTest.py | 84 + .../LibUtilities/Tests/Equation_UnitTest.tst | 15 + .../Tests/Interpreter_UnitTest.tst | 15 + .../NekMesh/Tests/test_nekmesh_element.tst | 64 +- .../NekMesh/Tests/test_nekmesh_mesh.tst | 28 +- .../NekMesh/Tests/test_nekmesh_module.tst | 50 +- .../NekMesh/Tests/test_nekmesh_node.tst | 118 +- .../Python/NekMesh/test_nekmesh_element.py | 125 +- .../Demos/Python/NekMesh/test_nekmesh_mesh.py | 99 +- .../Python/NekMesh/test_nekmesh_module.py | 111 +- .../Demos/Python/NekMesh/test_nekmesh_node.py | 189 +- .../Demos/SpatialDomains/PartitionAnalyse.cpp | 30 +- library/Demos/StdRegions/StdDemoSupport.hpp | 132 +- library/Demos/StdRegions/StdEquiToCoeff2D.cpp | 4 +- library/Demos/StdRegions/StdInterp.cpp | 18 +- library/Demos/StdRegions/StdInterpBasis.cpp | 2 +- library/Demos/StdRegions/StdProject.cpp | 175 +- library/FieldUtils/CMakeLists.txt | 28 +- library/FieldUtils/Field.hpp | 238 +- library/FieldUtils/FieldConvertComm.hpp | 4 +- library/FieldUtils/FieldUtilsDeclspec.h | 2 + library/FieldUtils/InputModules/InputDat.cpp | 27 +- library/FieldUtils/InputModules/InputDat.h | 11 +- library/FieldUtils/InputModules/InputFld.cpp | 50 +- library/FieldUtils/InputModules/InputFld.h | 4 +- .../FieldUtils/InputModules/InputNek5000.cpp | 46 +- .../FieldUtils/InputModules/InputNek5000.h | 4 +- library/FieldUtils/InputModules/InputPts.cpp | 6 +- library/FieldUtils/InputModules/InputPts.h | 4 +- .../FieldUtils/InputModules/InputSemtex.cpp | 54 +- library/FieldUtils/InputModules/InputSemtex.h | 4 +- library/FieldUtils/InputModules/InputXml.cpp | 12 +- library/FieldUtils/InputModules/InputXml.h | 4 +- library/FieldUtils/Interpolator.cpp | 220 +- library/FieldUtils/Interpolator.h | 49 +- library/FieldUtils/Module.cpp | 10 +- library/FieldUtils/Module.h | 37 +- library/FieldUtils/Octree.cpp | 191 +- library/FieldUtils/Octree.h | 118 +- .../OutputModules/OutputFileBase.cpp | 2 +- .../FieldUtils/OutputModules/OutputFileBase.h | 7 +- .../FieldUtils/OutputModules/OutputFld.cpp | 51 +- library/FieldUtils/OutputModules/OutputFld.h | 8 +- .../FieldUtils/OutputModules/OutputInfo.cpp | 35 +- library/FieldUtils/OutputModules/OutputInfo.h | 5 +- .../FieldUtils/OutputModules/OutputPts.cpp | 46 +- library/FieldUtils/OutputModules/OutputPts.h | 8 +- .../FieldUtils/OutputModules/OutputStdOut.cpp | 7 +- .../FieldUtils/OutputModules/OutputStdOut.h | 5 +- .../OutputModules/OutputTecplot.cpp | 249 +- .../FieldUtils/OutputModules/OutputTecplot.h | 32 +- .../FieldUtils/OutputModules/OutputVtk.cpp | 1723 ++- library/FieldUtils/OutputModules/OutputVtk.h | 72 +- .../OutputModules/OutputVtkBase.cpp | 462 + .../FieldUtils/OutputModules/OutputVtkBase.h | 94 + .../FieldUtils/OutputModules/OutputXml.cpp | 4 +- library/FieldUtils/OutputModules/OutputXml.h | 5 +- .../ProcessModules/ProcessAddCompositeID.cpp | 18 +- .../ProcessModules/ProcessAddCompositeID.h | 4 +- .../ProcessModules/ProcessAddFld.cpp | 33 +- .../FieldUtils/ProcessModules/ProcessAddFld.h | 7 +- .../ProcessModules/ProcessBoundaryExtract.cpp | 14 +- .../ProcessModules/ProcessBoundaryExtract.h | 5 +- .../ProcessModules/ProcessC0Projection.cpp | 48 +- .../ProcessModules/ProcessC0Projection.h | 4 +- .../FieldUtils/ProcessModules/ProcessCFL.cpp | 284 + .../FieldUtils/ProcessModules/ProcessCFL.h | 91 + .../ProcessModules/ProcessCombineAvg.cpp | 28 +- .../ProcessModules/ProcessCombineAvg.h | 4 +- .../ProcessModules/ProcessConcatenateFld.cpp | 13 +- .../ProcessModules/ProcessConcatenateFld.h | 9 +- .../ProcessModules/ProcessCreateExp.cpp | 69 +- .../ProcessModules/ProcessCreateExp.h | 4 +- .../FieldUtils/ProcessModules/ProcessDOF.cpp | 13 +- .../FieldUtils/ProcessModules/ProcessDOF.h | 5 +- .../ProcessModules/ProcessDeform.cpp | 7 +- .../FieldUtils/ProcessModules/ProcessDeform.h | 5 +- .../ProcessModules/ProcessDisplacement.cpp | 37 +- .../ProcessModules/ProcessDisplacement.h | 5 +- .../ProcessEquiSpacedOutput.cpp | 293 +- .../ProcessModules/ProcessEquiSpacedOutput.h | 7 +- .../ProcessModules/ProcessFieldFromString.cpp | 25 +- .../ProcessModules/ProcessFieldFromString.h | 4 +- .../FieldUtils/ProcessModules/ProcessGrad.cpp | 18 +- .../FieldUtils/ProcessModules/ProcessGrad.h | 7 +- .../ProcessHalfModeToFourier.cpp | 96 +- .../ProcessModules/ProcessHalfModeToFourier.h | 7 +- .../ProcessHomogeneousPlane.cpp | 14 +- .../ProcessModules/ProcessHomogeneousPlane.h | 5 +- .../ProcessHomogeneousStretch.cpp | 6 +- .../ProcessHomogeneousStretch.h | 5 +- .../ProcessModules/ProcessInnerProduct.cpp | 46 +- .../ProcessModules/ProcessInnerProduct.h | 6 +- .../ProcessModules/ProcessInterpField.cpp | 82 +- .../ProcessModules/ProcessInterpField.h | 5 +- .../ProcessInterpPointDataToFld.cpp | 63 +- .../ProcessInterpPointDataToFld.h | 8 +- .../ProcessModules/ProcessInterpPoints.cpp | 291 +- .../ProcessModules/ProcessInterpPoints.h | 13 +- .../ProcessModules/ProcessInterpPtsToPts.cpp | 211 +- .../ProcessModules/ProcessInterpPtsToPts.h | 11 +- .../ProcessModules/ProcessIsoContour.cpp | 784 +- .../ProcessModules/ProcessIsoContour.h | 397 +- .../ProcessModules/ProcessJacobianEnergy.cpp | 18 +- .../ProcessModules/ProcessJacobianEnergy.h | 4 +- .../ProcessModules/ProcessL2Criterion.cpp | 6 +- .../ProcessModules/ProcessL2Criterion.h | 4 +- .../ProcessModules/ProcessMapping.cpp | 32 +- .../ProcessModules/ProcessMapping.h | 5 +- .../FieldUtils/ProcessModules/ProcessMean.cpp | 11 +- .../FieldUtils/ProcessModules/ProcessMean.h | 4 +- .../ProcessModules/ProcessMeanMode.cpp | 7 +- .../ProcessModules/ProcessMeanMode.h | 5 +- .../ProcessModules/ProcessMultiShear.cpp | 35 +- .../ProcessModules/ProcessMultiShear.h | 5 +- .../ProcessModules/ProcessNumModes.cpp | 14 +- .../ProcessModules/ProcessNumModes.h | 7 +- .../ProcessModules/ProcessPhiFromFile.cpp | 94 +- .../ProcessModules/ProcessPhiFromFile.h | 22 +- .../ProcessModules/ProcessPointDataToFld.cpp | 31 +- .../ProcessModules/ProcessPointDataToFld.h | 4 +- .../ProcessModules/ProcessPrintFldNorms.cpp | 9 +- .../ProcessModules/ProcessPrintFldNorms.h | 5 +- .../ProcessModules/ProcessQCriterion.cpp | 63 +- .../ProcessModules/ProcessQCriterion.h | 5 +- .../ProcessModules/ProcessQualityMetric.cpp | 60 +- .../ProcessModules/ProcessQualityMetric.h | 8 +- .../ProcessModules/ProcessRemoveField.h | 4 +- .../ProcessModules/ProcessScalGrad.cpp | 23 +- .../ProcessModules/ProcessScalGrad.h | 5 +- .../ProcessModules/ProcessScaleInFld.cpp | 7 +- .../ProcessModules/ProcessScaleInFld.h | 4 +- .../ProcessModules/ProcessStreamFunction.cpp | 14 +- .../ProcessModules/ProcessStreamFunction.h | 5 +- .../ProcessModules/ProcessSurfDistance.cpp | 34 +- .../ProcessModules/ProcessSurfDistance.h | 5 +- .../ProcessVelocityDivergence.cpp | 233 + .../ProcessVelocityDivergence.h | 88 + .../ProcessModules/ProcessVorticity.cpp | 56 +- .../ProcessModules/ProcessVorticity.h | 9 +- .../FieldUtils/ProcessModules/ProcessWSS.cpp | 154 +- .../FieldUtils/ProcessModules/ProcessWSS.h | 9 +- .../ProcessModules/ProcessWallNormalData.cpp | 658 +- .../ProcessModules/ProcessWallNormalData.h | 186 +- library/FieldUtils/Python/Field.cpp | 7 +- library/FieldUtils/Python/Module.cpp | 7 +- library/GlobalMapping/Deform.cpp | 601 +- library/GlobalMapping/Deform.h | 23 +- library/GlobalMapping/GlobalMappingDeclspec.h | 17 +- library/GlobalMapping/Mapping.cpp | 753 +- library/GlobalMapping/Mapping.h | 963 +- library/GlobalMapping/MappingGeneral.cpp | 314 +- library/GlobalMapping/MappingGeneral.h | 75 +- library/GlobalMapping/MappingTranslation.cpp | 175 +- library/GlobalMapping/MappingTranslation.h | 75 +- library/GlobalMapping/MappingXYofXY.cpp | 368 +- library/GlobalMapping/MappingXYofXY.h | 67 +- library/GlobalMapping/MappingXYofZ.cpp | 196 +- library/GlobalMapping/MappingXYofZ.h | 64 +- library/GlobalMapping/MappingXofXZ.cpp | 280 +- library/GlobalMapping/MappingXofXZ.h | 71 +- library/GlobalMapping/MappingXofZ.cpp | 217 +- library/GlobalMapping/MappingXofZ.h | 69 +- library/LibUtilities/BasicConst/GitRevision.h | 54 +- .../BasicConst/NektarUnivConsts.hpp | 47 +- .../BasicConst/NektarUnivTypeDefs.hpp | 133 +- .../LibUtilities/BasicUtils/ArrayPolicies.hpp | 318 +- .../LibUtilities/BasicUtils/CheckedCast.hpp | 21 +- .../LibUtilities/BasicUtils/CompressData.cpp | 165 +- .../LibUtilities/BasicUtils/CompressData.h | 317 +- .../BasicUtils/ConsistentObjectAccess.hpp | 115 +- library/LibUtilities/BasicUtils/CsvIO.cpp | 93 +- library/LibUtilities/BasicUtils/CsvIO.h | 18 +- .../LibUtilities/BasicUtils/Deprecated.hpp | 18 +- library/LibUtilities/BasicUtils/DomainRange.h | 18 +- library/LibUtilities/BasicUtils/Equation.cpp | 106 +- library/LibUtilities/BasicUtils/Equation.h | 74 +- library/LibUtilities/BasicUtils/ErrorUtil.cpp | 11 +- library/LibUtilities/BasicUtils/ErrorUtil.hpp | 177 +- library/LibUtilities/BasicUtils/FieldIO.cpp | 87 +- library/LibUtilities/BasicUtils/FieldIO.h | 129 +- .../LibUtilities/BasicUtils/FieldIOHdf5.cpp | 268 +- library/LibUtilities/BasicUtils/FieldIOHdf5.h | 69 +- .../LibUtilities/BasicUtils/FieldIOXml.cpp | 130 +- library/LibUtilities/BasicUtils/FieldIOXml.h | 46 +- .../LibUtilities/BasicUtils/FileSystem.cpp | 30 +- library/LibUtilities/BasicUtils/FileSystem.h | 15 +- library/LibUtilities/BasicUtils/H5.cpp | 38 +- library/LibUtilities/BasicUtils/H5.h | 156 +- library/LibUtilities/BasicUtils/HashUtils.hpp | 27 +- .../LibUtilities/BasicUtils/Interpolator.cpp | 76 +- .../LibUtilities/BasicUtils/Interpolator.h | 94 +- library/LibUtilities/BasicUtils/Likwid.hpp | 3 +- library/LibUtilities/BasicUtils/Metis.hpp | 65 +- .../LibUtilities/BasicUtils/NekFactory.hpp | 43 +- library/LibUtilities/BasicUtils/NekInline.hpp | 51 + .../LibUtilities/BasicUtils/NekManager.hpp | 510 +- .../LibUtilities/BasicUtils/ParseUtils.cpp | 52 +- library/LibUtilities/BasicUtils/ParseUtils.h | 8 +- .../LibUtilities/BasicUtils/Progressbar.hpp | 25 +- library/LibUtilities/BasicUtils/PtsField.cpp | 62 +- library/LibUtilities/BasicUtils/PtsField.h | 54 +- library/LibUtilities/BasicUtils/PtsIO.cpp | 65 +- library/LibUtilities/BasicUtils/PtsIO.h | 30 +- library/LibUtilities/BasicUtils/RawType.hpp | 58 +- .../BasicUtils/RealComparison.hpp | 71 +- .../LibUtilities/BasicUtils/SessionReader.cpp | 4228 ++++--- .../LibUtilities/BasicUtils/SessionReader.h | 1238 +- library/LibUtilities/BasicUtils/ShapeType.hpp | 618 +- .../LibUtilities/BasicUtils/SharedArray.hpp | 1459 +-- library/LibUtilities/BasicUtils/Smath.hpp | 2 +- library/LibUtilities/BasicUtils/Tau.hpp | 30 +- library/LibUtilities/BasicUtils/Thread.cpp | 66 +- library/LibUtilities/BasicUtils/Thread.h | 461 +- .../LibUtilities/BasicUtils/ThreadBoost.cpp | 121 +- library/LibUtilities/BasicUtils/ThreadBoost.h | 198 +- library/LibUtilities/BasicUtils/Timer.cpp | 150 +- library/LibUtilities/BasicUtils/Timer.h | 87 +- library/LibUtilities/BasicUtils/VDmath.hpp | 67 +- .../LibUtilities/BasicUtils/VDmathArray.hpp | 54 +- library/LibUtilities/BasicUtils/Vmath.cpp | 1901 +-- library/LibUtilities/BasicUtils/Vmath.hpp | 475 +- .../LibUtilities/BasicUtils/VmathArray.hpp | 1011 +- library/LibUtilities/BasicUtils/VmathSIMD.hpp | 954 +- library/LibUtilities/CMakeLists.txt | 3 +- library/LibUtilities/Communication/Comm.cpp | 10 +- library/LibUtilities/Communication/Comm.h | 12 +- .../LibUtilities/Communication/CommCwipi.cpp | 6 +- .../LibUtilities/Communication/CommCwipi.h | 6 +- .../Communication/CommDataType.cpp | 30 +- .../LibUtilities/Communication/CommDataType.h | 38 +- .../LibUtilities/Communication/CommMpi.cpp | 47 +- library/LibUtilities/Communication/CommMpi.h | 5 +- .../LibUtilities/Communication/CommSerial.cpp | 2 +- .../LibUtilities/Communication/CommSerial.h | 2 +- library/LibUtilities/Communication/GsLib.hpp | 57 +- .../Communication/Transposition.cpp | 6 +- .../Communication/Transposition.h | 8 +- library/LibUtilities/Communication/Xxt.hpp | 23 +- library/LibUtilities/FFT/NekFFTW.cpp | 161 +- library/LibUtilities/FFT/NekFFTW.h | 136 +- library/LibUtilities/FFT/NektarFFT.cpp | 130 +- library/LibUtilities/FFT/NektarFFT.h | 137 +- library/LibUtilities/Foundations/BLPoints.cpp | 204 +- library/LibUtilities/Foundations/BLPoints.h | 178 +- library/LibUtilities/Foundations/Basis.cpp | 1511 +-- library/LibUtilities/Foundations/Basis.h | 659 +- library/LibUtilities/Foundations/BasisType.h | 66 +- .../LibUtilities/Foundations/Foundations.hpp | 113 +- .../Foundations/FoundationsFwd.hpp | 69 +- .../Foundations/FourierPoints.cpp | 272 +- .../LibUtilities/Foundations/FourierPoints.h | 151 +- .../Foundations/FourierSingleModePoints.cpp | 222 +- .../Foundations/FourierSingleModePoints.h | 153 +- .../LibUtilities/Foundations/GaussPoints.cpp | 794 +- .../LibUtilities/Foundations/GaussPoints.h | 327 +- library/LibUtilities/Foundations/Graph.cpp | 51 +- library/LibUtilities/Foundations/Graph.h | 121 +- library/LibUtilities/Foundations/Interp.cpp | 403 +- library/LibUtilities/Foundations/Interp.h | 285 +- .../LibUtilities/Foundations/InterpCoeff.cpp | 256 +- .../LibUtilities/Foundations/InterpCoeff.h | 87 +- .../Foundations/ManagerAccess.cpp | 2 +- .../LibUtilities/Foundations/ManagerAccess.h | 23 +- .../LibUtilities/Foundations/NodalHexElec.cpp | 11 +- .../LibUtilities/Foundations/NodalHexElec.h | 6 +- .../Foundations/NodalPrismElec.cpp | 17 +- .../LibUtilities/Foundations/NodalPrismElec.h | 20 +- .../Foundations/NodalPrismEvenlySpaced.cpp | 699 +- .../Foundations/NodalPrismEvenlySpaced.h | 124 +- .../Foundations/NodalPrismSPI.cpp | 11 +- .../LibUtilities/Foundations/NodalPrismSPI.h | 8 +- .../Foundations/NodalQuadElec.cpp | 11 +- .../LibUtilities/Foundations/NodalQuadElec.h | 8 +- .../LibUtilities/Foundations/NodalTetElec.cpp | 1074 +- .../LibUtilities/Foundations/NodalTetElec.h | 124 +- .../Foundations/NodalTetElecData.h | 263 +- .../Foundations/NodalTetEvenlySpaced.cpp | 576 +- .../Foundations/NodalTetEvenlySpaced.h | 125 +- .../LibUtilities/Foundations/NodalTetSPI.cpp | 11 +- .../LibUtilities/Foundations/NodalTetSPI.h | 8 +- .../Foundations/NodalTetSPIData.h | 1532 ++- .../LibUtilities/Foundations/NodalTriElec.cpp | 538 +- .../LibUtilities/Foundations/NodalTriElec.h | 131 +- .../Foundations/NodalTriElecData.h | 466 +- .../Foundations/NodalTriEvenlySpaced.cpp | 336 +- .../Foundations/NodalTriEvenlySpaced.h | 118 +- .../Foundations/NodalTriFekete.cpp | 531 +- .../LibUtilities/Foundations/NodalTriFekete.h | 134 +- .../Foundations/NodalTriFeketeData.h | 469 +- .../LibUtilities/Foundations/NodalTriSPI.cpp | 11 +- .../LibUtilities/Foundations/NodalTriSPI.h | 6 +- .../Foundations/NodalTriSPIData.h | 294 +- .../LibUtilities/Foundations/NodalUtil.cpp | 270 +- library/LibUtilities/Foundations/NodalUtil.h | 90 +- .../Foundations/PhysGalerkinProject.cpp | 400 +- .../Foundations/PhysGalerkinProject.h | 160 +- library/LibUtilities/Foundations/Points.cpp | 128 +- library/LibUtilities/Foundations/Points.h | 783 +- library/LibUtilities/Foundations/PointsType.h | 106 +- .../LibUtilities/Foundations/PolyEPoints.cpp | 295 +- .../LibUtilities/Foundations/PolyEPoints.h | 103 +- .../LibUtilities/Interpreter/Interpreter.cpp | 3 - .../LibUtilities/Interpreter/Interpreter.h | 55 +- library/LibUtilities/Kernel/kernel.cpp | 742 +- library/LibUtilities/Kernel/kernel.h | 363 +- library/LibUtilities/LibUtilitiesDeclspec.h | 18 +- library/LibUtilities/LinearAlgebra/Arpack.hpp | 224 +- library/LibUtilities/LinearAlgebra/Blas.hpp | 714 +- .../LibUtilities/LinearAlgebra/BlasArray.hpp | 77 +- .../LinearAlgebra/BlockMatrix.cpp | 843 +- .../LinearAlgebra/BlockMatrix.hpp | 303 +- .../LinearAlgebra/CanGetRawPtr.hpp | 43 +- .../LinearAlgebra/ExplicitInstantiation.h | 125 +- library/LibUtilities/LinearAlgebra/Lapack.hpp | 665 +- .../LibUtilities/LinearAlgebra/MatrixBase.cpp | 513 +- .../LibUtilities/LinearAlgebra/MatrixBase.hpp | 218 +- .../LinearAlgebra/MatrixFuncs.cpp | 576 +- .../LibUtilities/LinearAlgebra/MatrixFuncs.h | 469 +- .../LinearAlgebra/MatrixOperations.cpp | 706 +- .../LinearAlgebra/MatrixOperations.hpp | 23 +- .../LinearAlgebra/MatrixStorageType.h | 40 +- .../LibUtilities/LinearAlgebra/MatrixType.h | 16 +- .../MatrixVectorMultiplication.cpp | 976 +- .../LinearAlgebra/NekLinAlgAlgorithms.hpp | 97 +- .../LibUtilities/LinearAlgebra/NekLinSys.hpp | 1115 +- .../LinearAlgebra/NekLinSysIter.cpp | 18 +- .../LinearAlgebra/NekLinSysIter.h | 15 +- .../LinearAlgebra/NekLinSysIterCG.cpp | 4 +- .../LinearAlgebra/NekLinSysIterCG.h | 4 +- .../NekLinSysIterFixedpointJacobi.cpp | 4 +- .../NekLinSysIterFixedpointJacobi.h | 2 +- .../LinearAlgebra/NekLinSysIterGMRES.cpp | 13 +- .../LinearAlgebra/NekLinSysIterGMRES.h | 8 +- .../LibUtilities/LinearAlgebra/NekMatrix.hpp | 99 +- .../LinearAlgebra/NekMatrixFwd.hpp | 61 +- .../LinearAlgebra/NekNonlinSys.cpp | 37 +- .../LibUtilities/LinearAlgebra/NekNonlinSys.h | 28 +- .../LinearAlgebra/NekNonlinSysNewton.cpp | 57 +- .../LinearAlgebra/NekNonlinSysNewton.h | 31 +- .../LibUtilities/LinearAlgebra/NekPoint.hpp | 757 +- library/LibUtilities/LinearAlgebra/NekSys.cpp | 15 +- library/LibUtilities/LinearAlgebra/NekSys.h | 49 +- .../LinearAlgebra/NekTypeDefs.hpp | 175 +- .../LibUtilities/LinearAlgebra/NekVector.cpp | 2017 ++- .../LibUtilities/LinearAlgebra/NekVector.hpp | 540 +- .../LinearAlgebra/NekVectorFwd.hpp | 26 +- .../LinearAlgebra/NistSparseDescriptors.hpp | 87 +- .../LinearAlgebra/PointerWrapper.h | 24 +- .../LinearAlgebra/ScaledMatrix.cpp | 352 +- .../LinearAlgebra/ScaledMatrix.hpp | 235 +- .../LinearAlgebra/SparseDiagBlkMatrix.cpp | 752 +- .../LinearAlgebra/SparseDiagBlkMatrix.hpp | 181 +- .../LinearAlgebra/SparseMatrix.cpp | 358 +- .../LinearAlgebra/SparseMatrix.hpp | 126 +- .../LinearAlgebra/SparseMatrixFwd.hpp | 50 +- .../LinearAlgebra/SparseUtils.cpp | 161 +- .../LinearAlgebra/SparseUtils.hpp | 24 +- .../LinearAlgebra/StandardMatrix.cpp | 1348 +- .../LinearAlgebra/StandardMatrix.hpp | 969 +- .../LinearAlgebra/StorageSmvBsr.cpp | 1002 +- .../LinearAlgebra/StorageSmvBsr.hpp | 267 +- .../LibUtilities/LinearAlgebra/TransF77.hpp | 10 +- library/LibUtilities/LinearAlgebra/blas.cpp | 5 +- .../LibUtilities/Memory/NekMemoryManager.hpp | 160 +- .../Memory/ThreadSpecificPool.cpp | 13 +- .../Memory/ThreadSpecificPool.hpp | 350 +- library/LibUtilities/Polylib/Polylib.cpp | 2813 +++-- library/LibUtilities/Polylib/Polylib.h | 341 +- library/LibUtilities/Polylib/Polylib_test.cpp | 870 +- .../Python/BasicUtils/Equation.cpp | 215 + .../Python/BasicUtils/SessionReader.cpp | 62 +- .../Python/BasicUtils/ShapeType.cpp | 2 +- .../Python/BasicUtils/SharedArray.cpp | 70 +- library/LibUtilities/Python/CMakeLists.txt | 2 + .../Python/Communication/Comm.cpp | 13 +- .../LibUtilities/Python/Foundations/Basis.cpp | 14 +- .../Python/Foundations/Points.cpp | 239 +- .../Python/Interpreter/Interpreter.cpp | 250 + library/LibUtilities/Python/LibUtilities.cpp | 21 +- .../Python/LinearAlgebra/NekMatrix.cpp | 42 +- library/LibUtilities/Python/NekPyConfig.hpp | 85 +- library/LibUtilities/Python/ShPtrFixes.hpp | 430 +- library/LibUtilities/SimdLib/allocator.hpp | 9 +- library/LibUtilities/SimdLib/avx2.hpp | 773 +- library/LibUtilities/SimdLib/avx512.hpp | 858 +- library/LibUtilities/SimdLib/io.hpp | 13 +- library/LibUtilities/SimdLib/scalar.hpp | 213 +- library/LibUtilities/SimdLib/sse2.hpp | 136 +- library/LibUtilities/SimdLib/sve.hpp | 998 ++ library/LibUtilities/SimdLib/tinysimd.hpp | 38 +- library/LibUtilities/SimdLib/traits.hpp | 140 +- .../DIRKTimeIntegrationSchemes.h | 132 +- .../IMEXTimeIntegrationSchemes.h | 2 +- .../IMEXdirkTimeIntegrationSchemes.h | 4 +- .../RungeKuttaTimeIntegrationSchemes.h | 14 + .../TimeIntegration/SchemeInitializer.cpp | 5 +- .../TimeIntegrationAlgorithmGLM.cpp | 149 +- .../TimeIntegration/TimeIntegrationScheme.cpp | 6 +- .../TimeIntegration/TimeIntegrationScheme.h | 30 +- .../TimeIntegrationSchemeFIT.cpp | 727 +- .../TimeIntegrationSchemeFIT.h | 154 +- .../TimeIntegrationSchemeGLM.cpp | 37 +- .../TimeIntegrationSchemeGLM.h | 31 +- .../TimeIntegrationSchemeOperators.h | 10 +- .../TimeIntegrationSolutionGLM.cpp | 16 +- .../TimeIntegrationSolutionGLM.h | 23 +- .../TimeIntegration/TimeIntegrationTypes.hpp | 2 +- library/LocalRegions/Expansion.cpp | 1377 ++- library/LocalRegions/Expansion.h | 867 +- library/LocalRegions/Expansion0D.cpp | 18 +- library/LocalRegions/Expansion0D.h | 58 +- library/LocalRegions/Expansion1D.cpp | 813 +- library/LocalRegions/Expansion1D.h | 148 +- library/LocalRegions/Expansion2D.cpp | 3211 +++-- library/LocalRegions/Expansion2D.h | 305 +- library/LocalRegions/Expansion3D.cpp | 4515 +++---- library/LocalRegions/Expansion3D.h | 294 +- library/LocalRegions/HexExp.cpp | 3398 +++--- library/LocalRegions/HexExp.h | 480 +- library/LocalRegions/IndexMapKey.cpp | 322 +- library/LocalRegions/IndexMapKey.h | 168 +- library/LocalRegions/LinSys.hpp | 48 +- library/LocalRegions/LocalRegions.hpp | 106 +- library/LocalRegions/LocalRegionsDeclspec.h | 17 +- library/LocalRegions/MatrixKey.cpp | 92 +- library/LocalRegions/MatrixKey.h | 88 +- library/LocalRegions/NodalTetExp.cpp | 11 +- library/LocalRegions/NodalTetExp.h | 68 +- library/LocalRegions/NodalTriExp.cpp | 1268 +- library/LocalRegions/NodalTriExp.h | 664 +- library/LocalRegions/PointExp.cpp | 99 +- library/LocalRegions/PointExp.h | 194 +- library/LocalRegions/PrismExp.cpp | 3298 +++-- library/LocalRegions/PrismExp.h | 347 +- library/LocalRegions/PyrExp.cpp | 2771 ++--- library/LocalRegions/PyrExp.h | 301 +- library/LocalRegions/Python/Expansion.cpp | 9 +- library/LocalRegions/Python/LocalElements.cpp | 72 +- library/LocalRegions/Python/LocalRegions.cpp | 2 +- library/LocalRegions/Python/MatrixKey.cpp | 19 +- library/LocalRegions/QuadExp.cpp | 3673 +++--- library/LocalRegions/QuadExp.h | 421 +- library/LocalRegions/SegExp.cpp | 2612 ++-- library/LocalRegions/SegExp.h | 437 +- library/LocalRegions/TetExp.cpp | 2917 +++-- library/LocalRegions/TetExp.h | 360 +- library/LocalRegions/TriExp.cpp | 3134 +++-- library/LocalRegions/TriExp.h | 427 +- library/MatrixFreeOps/BwdTrans.cpp | 36 - library/MatrixFreeOps/BwdTrans.h | 1683 +-- library/MatrixFreeOps/BwdTransKernels.hpp | 676 +- library/MatrixFreeOps/CMakeLists.txt | 97 +- library/MatrixFreeOps/Helmholtz.cpp | 44 - library/MatrixFreeOps/Helmholtz.h | 2554 +--- library/MatrixFreeOps/HelmholtzKernels.hpp | 1479 +++ library/MatrixFreeOps/IProduct.h | 1741 +-- library/MatrixFreeOps/IProductHex.cpp | 15 - library/MatrixFreeOps/IProductKernels.hpp | 956 +- library/MatrixFreeOps/IProductKernelsImp.hpp | 376 + library/MatrixFreeOps/IProductPrism.cpp | 15 - library/MatrixFreeOps/IProductPyr.cpp | 15 - library/MatrixFreeOps/IProductQuad.cpp | 15 - library/MatrixFreeOps/IProductSeg.cpp | 17 - library/MatrixFreeOps/IProductTet.cpp | 15 - library/MatrixFreeOps/IProductTri.cpp | 15 - library/MatrixFreeOps/IProductWRTDerivBase.h | 2735 +---- .../MatrixFreeOps/IProductWRTDerivBaseHex.cpp | 15 - .../IProductWRTDerivBaseKernels.hpp | 541 + .../IProductWRTDerivBasePrism.cpp | 15 - .../MatrixFreeOps/IProductWRTDerivBasePyr.cpp | 15 - .../IProductWRTDerivBaseQuad.cpp | 15 - .../MatrixFreeOps/IProductWRTDerivBaseSeg.cpp | 15 - .../MatrixFreeOps/IProductWRTDerivBaseTet.cpp | 15 - .../MatrixFreeOps/IProductWRTDerivBaseTri.cpp | 15 - library/MatrixFreeOps/MatrixFreeDeclspec.h | 18 +- library/MatrixFreeOps/NektarExpMacros.h | 40 + library/MatrixFreeOps/Operator.cpp | 25 +- library/MatrixFreeOps/Operator.hpp | 205 +- library/MatrixFreeOps/OperatorImp.cpp.in | 26 + library/MatrixFreeOps/PhysDeriv.cpp | 51 - library/MatrixFreeOps/PhysDeriv.h | 1398 +-- library/MatrixFreeOps/PhysDerivKernels.hpp | 725 +- library/MatrixFreeOps/SwitchNodesPoints.h | 1158 ++ library/MatrixFreeOps/SwitchPoints.h | 329 + .../AssemblyMap/AssemblyCommDG.cpp | 157 +- .../MultiRegions/AssemblyMap/AssemblyCommDG.h | 10 +- .../MultiRegions/AssemblyMap/AssemblyMap.cpp | 2719 ++--- .../MultiRegions/AssemblyMap/AssemblyMap.h | 901 +- .../AssemblyMap/AssemblyMapCG.cpp | 4992 ++++---- .../MultiRegions/AssemblyMap/AssemblyMapCG.h | 383 +- .../AssemblyMap/AssemblyMapDG.cpp | 1440 ++- .../MultiRegions/AssemblyMap/AssemblyMapDG.h | 170 +- .../AssemblyMap/LocTraceToTraceMap.cpp | 1574 +-- .../AssemblyMap/LocTraceToTraceMap.h | 203 +- library/MultiRegions/CMakeLists.txt | 2 + library/MultiRegions/ContField.cpp | 1866 ++- library/MultiRegions/ContField.h | 715 +- .../MultiRegions/ContField3DHomogeneous1D.cpp | 496 +- .../MultiRegions/ContField3DHomogeneous1D.h | 132 +- .../MultiRegions/ContField3DHomogeneous2D.cpp | 314 +- .../MultiRegions/ContField3DHomogeneous2D.h | 122 +- library/MultiRegions/DisContField.cpp | 7477 ++++++------ library/MultiRegions/DisContField.h | 716 +- .../DisContField3DHomogeneous1D.cpp | 1172 +- .../DisContField3DHomogeneous1D.h | 566 +- .../DisContField3DHomogeneous2D.cpp | 586 +- .../DisContField3DHomogeneous2D.h | 306 +- library/MultiRegions/ExpList.cpp | 10180 ++++++++-------- library/MultiRegions/ExpList.h | 4918 ++++---- .../MultiRegions/ExpList1DHomogeneous2D.cpp | 562 +- library/MultiRegions/ExpList1DHomogeneous2D.h | 129 +- .../MultiRegions/ExpList2DHomogeneous1D.cpp | 763 +- library/MultiRegions/ExpList2DHomogeneous1D.h | 196 +- .../MultiRegions/ExpList3DHomogeneous1D.cpp | 893 +- library/MultiRegions/ExpList3DHomogeneous1D.h | 230 +- .../MultiRegions/ExpList3DHomogeneous2D.cpp | 701 +- library/MultiRegions/ExpList3DHomogeneous2D.h | 209 +- library/MultiRegions/ExpListHomogeneous1D.cpp | 2460 ++-- library/MultiRegions/ExpListHomogeneous1D.h | 447 +- library/MultiRegions/ExpListHomogeneous2D.cpp | 1692 +-- library/MultiRegions/ExpListHomogeneous2D.h | 420 +- library/MultiRegions/GJPStabilisation.cpp | 397 + library/MultiRegions/GJPStabilisation.h | 107 + library/MultiRegions/GlobalLinSys.cpp | 729 +- library/MultiRegions/GlobalLinSys.h | 387 +- .../GlobalLinSysBlockDiagonal.cpp | 73 +- library/MultiRegions/GlobalLinSysDirect.cpp | 71 +- library/MultiRegions/GlobalLinSysDirect.h | 56 +- .../MultiRegions/GlobalLinSysDirectFull.cpp | 411 +- library/MultiRegions/GlobalLinSysDirectFull.h | 84 +- .../GlobalLinSysDirectStaticCond.cpp | 442 +- .../GlobalLinSysDirectStaticCond.h | 117 +- .../MultiRegions/GlobalLinSysIterative.cpp | 861 +- library/MultiRegions/GlobalLinSysIterative.h | 236 +- .../GlobalLinSysIterativeFull.cpp | 385 +- .../MultiRegions/GlobalLinSysIterativeFull.h | 88 +- .../GlobalLinSysIterativeStaticCond.cpp | 826 +- .../GlobalLinSysIterativeStaticCond.h | 237 +- library/MultiRegions/GlobalLinSysKey.cpp | 235 +- library/MultiRegions/GlobalLinSysKey.h | 166 +- library/MultiRegions/GlobalLinSysPETSc.cpp | 908 +- library/MultiRegions/GlobalLinSysPETSc.h | 182 +- .../MultiRegions/GlobalLinSysPETScFull.cpp | 325 +- library/MultiRegions/GlobalLinSysPETScFull.h | 92 +- .../GlobalLinSysPETScStaticCond.cpp | 524 +- .../GlobalLinSysPETScStaticCond.h | 138 +- .../MultiRegions/GlobalLinSysStaticCond.cpp | 995 +- library/MultiRegions/GlobalLinSysStaticCond.h | 198 +- library/MultiRegions/GlobalLinSysXxt.cpp | 96 +- library/MultiRegions/GlobalLinSysXxt.h | 78 +- library/MultiRegions/GlobalLinSysXxtFull.cpp | 390 +- library/MultiRegions/GlobalLinSysXxtFull.h | 88 +- .../GlobalLinSysXxtStaticCond.cpp | 407 +- .../MultiRegions/GlobalLinSysXxtStaticCond.h | 126 +- library/MultiRegions/GlobalMatrix.cpp | 277 +- library/MultiRegions/GlobalMatrix.h | 100 +- library/MultiRegions/GlobalMatrixKey.cpp | 244 +- library/MultiRegions/GlobalMatrixKey.h | 258 +- library/MultiRegions/MultiRegions.hpp | 359 +- library/MultiRegions/MultiRegionsDeclspec.h | 17 +- library/MultiRegions/Preconditioner.cpp | 353 +- library/MultiRegions/Preconditioner.h | 403 +- library/MultiRegions/PreconditionerBlock.cpp | 1217 +- library/MultiRegions/PreconditionerBlock.h | 88 +- .../MultiRegions/PreconditionerDiagonal.cpp | 361 +- library/MultiRegions/PreconditionerDiagonal.h | 157 +- library/MultiRegions/PreconditionerLinear.cpp | 380 +- library/MultiRegions/PreconditionerLinear.h | 113 +- .../PreconditionerLinearWithBlock.cpp | 132 +- .../PreconditionerLinearWithBlock.h | 85 +- .../PreconditionerLinearWithDiag.cpp | 126 +- .../PreconditionerLinearWithDiag.h | 83 +- .../PreconditionerLinearWithLowEnergy.cpp | 302 +- .../PreconditionerLinearWithLowEnergy.h | 108 +- .../MultiRegions/PreconditionerLowEnergy.cpp | 3885 +++--- .../MultiRegions/PreconditionerLowEnergy.h | 261 +- library/MultiRegions/Python/ContField.cpp | 19 +- library/MultiRegions/Python/DisContField.cpp | 22 +- library/MultiRegions/Python/ExpList.cpp | 113 +- library/MultiRegions/SubStructuredGraph.cpp | 1695 ++- library/MultiRegions/SubStructuredGraph.h | 470 +- library/NekMesh/2DGenerator/2DGenerator.cpp | 41 +- library/NekMesh/2DGenerator/2DGenerator.h | 8 +- library/NekMesh/CADSystem/CADCurve.cpp | 8 +- library/NekMesh/CADSystem/CADCurve.h | 25 +- library/NekMesh/CADSystem/CADObject.h | 8 +- library/NekMesh/CADSystem/CADSurf.cpp | 14 +- library/NekMesh/CADSystem/CADSurf.h | 12 +- library/NekMesh/CADSystem/CADSystem.cpp | 6 +- library/NekMesh/CADSystem/CADSystem.h | 9 +- library/NekMesh/CADSystem/CADVert.cpp | 12 +- library/NekMesh/CADSystem/CADVert.h | 18 +- library/NekMesh/CADSystem/CFI/CADCurveCFI.cpp | 8 +- library/NekMesh/CADSystem/CFI/CADCurveCFI.h | 4 +- library/NekMesh/CADSystem/CFI/CADElementCFI.h | 4 +- library/NekMesh/CADSystem/CFI/CADSurfCFI.cpp | 11 +- library/NekMesh/CADSystem/CFI/CADSurfCFI.h | 6 +- .../NekMesh/CADSystem/CFI/CADSystemCFI.cpp | 18 +- library/NekMesh/CADSystem/CFI/CADSystemCFI.h | 8 +- library/NekMesh/CADSystem/CFI/CADVertCFI.cpp | 14 +- library/NekMesh/CADSystem/CFI/CADVertCFI.h | 12 +- library/NekMesh/CADSystem/OCE/CADCurveOCE.cpp | 25 +- library/NekMesh/CADSystem/OCE/CADCurveOCE.h | 7 +- library/NekMesh/CADSystem/OCE/CADSurfOCE.cpp | 9 +- library/NekMesh/CADSystem/OCE/CADSurfOCE.h | 6 +- .../NekMesh/CADSystem/OCE/CADSystemOCE.cpp | 178 +- library/NekMesh/CADSystem/OCE/CADSystemOCE.h | 12 +- library/NekMesh/CADSystem/OCE/CADVertOCE.cpp | 2 +- library/NekMesh/CADSystem/OCE/CADVertOCE.h | 13 +- library/NekMesh/CADSystem/OCE/GeoParser.hpp | 36 +- library/NekMesh/CADSystem/OCE/OpenCascade.h | 61 +- .../CADSystem/OCE/TransfiniteSurface.h | 283 +- library/NekMesh/CADSystem/ProcessLoadCAD.cpp | 32 +- library/NekMesh/CADSystem/ProcessLoadCAD.h | 4 +- library/NekMesh/CMakeLists.txt | 9 +- .../ExtLibInterface/TetGenInterface.cpp | 14 +- .../NekMesh/ExtLibInterface/TetGenInterface.h | 14 +- .../ExtLibInterface/TriangleInterface.cpp | 91 +- .../ExtLibInterface/TriangleInterface.h | 31 +- .../NekMesh/MeshElements/BooleanOperators.cpp | 20 +- library/NekMesh/MeshElements/Composite.h | 6 +- library/NekMesh/MeshElements/Edge.h | 34 +- library/NekMesh/MeshElements/Element.cpp | 8 +- library/NekMesh/MeshElements/Element.h | 107 +- library/NekMesh/MeshElements/ElementConfig.h | 15 +- library/NekMesh/MeshElements/Face.cpp | 99 +- library/NekMesh/MeshElements/Face.h | 54 +- library/NekMesh/MeshElements/HOAlignment.h | 24 +- library/NekMesh/MeshElements/Hexahedron.cpp | 58 +- library/NekMesh/MeshElements/Hexahedron.h | 20 +- library/NekMesh/MeshElements/Line.cpp | 39 +- library/NekMesh/MeshElements/Line.h | 18 +- library/NekMesh/MeshElements/Mesh.h | 53 +- library/NekMesh/MeshElements/Node.cpp | 14 +- library/NekMesh/MeshElements/Node.h | 29 +- library/NekMesh/MeshElements/Point.cpp | 11 +- library/NekMesh/MeshElements/Point.h | 11 +- library/NekMesh/MeshElements/Prism.cpp | 100 +- library/NekMesh/MeshElements/Prism.h | 20 +- library/NekMesh/MeshElements/Pyramid.cpp | 29 +- library/NekMesh/MeshElements/Pyramid.h | 10 +- .../NekMesh/MeshElements/Quadrilateral.cpp | 56 +- library/NekMesh/MeshElements/Quadrilateral.h | 15 +- library/NekMesh/MeshElements/Tetrahedron.cpp | 106 +- library/NekMesh/MeshElements/Tetrahedron.h | 15 +- library/NekMesh/MeshElements/Triangle.cpp | 83 +- library/NekMesh/MeshElements/Triangle.h | 15 +- .../Module/InputModules/InputCADfix.cpp | 44 +- .../NekMesh/Module/InputModules/InputCADfix.h | 5 +- .../NekMesh/Module/InputModules/InputGmsh.cpp | 432 +- .../NekMesh/Module/InputModules/InputGmsh.h | 14 +- .../NekMesh/Module/InputModules/InputMCF.cpp | 65 +- .../NekMesh/Module/InputModules/InputMCF.h | 12 +- .../NekMesh/Module/InputModules/InputNek.cpp | 61 +- .../NekMesh/Module/InputModules/InputNek.h | 8 +- .../Module/InputModules/InputNek5000.cpp | 128 +- .../Module/InputModules/InputNek5000.h | 6 +- .../Module/InputModules/InputNekpp.cpp | 118 +- .../NekMesh/Module/InputModules/InputNekpp.h | 4 +- .../NekMesh/Module/InputModules/InputPly.cpp | 11 +- .../NekMesh/Module/InputModules/InputPly.h | 4 +- .../NekMesh/Module/InputModules/InputSem.cpp | 59 +- .../NekMesh/Module/InputModules/InputSem.h | 4 +- .../NekMesh/Module/InputModules/InputStar.cpp | 555 +- .../NekMesh/Module/InputModules/InputStar.h | 53 +- .../Module/InputModules/InputStarTec.cpp | 144 +- .../Module/InputModules/InputStarTec.h | 34 +- .../NekMesh/Module/InputModules/InputSwan.cpp | 14 +- .../NekMesh/Module/InputModules/InputSwan.h | 4 +- .../NekMesh/Module/InputModules/InputVtk.cpp | 23 +- .../NekMesh/Module/InputModules/InputVtk.h | 4 +- library/NekMesh/Module/Log.hpp | 80 +- library/NekMesh/Module/Module.cpp | 179 +- library/NekMesh/Module/Module.h | 414 +- .../Module/OutputModules/OutputCADfix.cpp | 18 +- .../Module/OutputModules/OutputCADfix.h | 5 +- .../Module/OutputModules/OutputGmsh.cpp | 31 +- .../NekMesh/Module/OutputModules/OutputGmsh.h | 22 +- .../Module/OutputModules/OutputNekpp.cpp | 381 +- .../Module/OutputModules/OutputNekpp.h | 4 +- .../Module/OutputModules/OutputSTL.cpp | 6 +- .../NekMesh/Module/OutputModules/OutputSTL.h | 6 +- .../Module/OutputModules/OutputStdOut.cpp | 62 + .../Module/OutputModules/OutputStdOut.h | 71 + .../Module/OutputModules/OutputVtk.cpp | 115 +- .../NekMesh/Module/OutputModules/OutputVtk.h | 8 +- .../Module/ProcessModules/ProcessBL.cpp | 464 +- .../NekMesh/Module/ProcessModules/ProcessBL.h | 4 +- .../Module/ProcessModules/ProcessCurve.cpp | 98 +- .../Module/ProcessModules/ProcessCurve.h | 16 +- .../ProcessModules/ProcessCurvedEdges.cpp | 23 +- .../ProcessModules/ProcessCurvedEdges.h | 7 +- .../Module/ProcessModules/ProcessCyl.cpp | 20 +- .../Module/ProcessModules/ProcessCyl.h | 5 +- .../ProcessModules/ProcessDetectSurf.cpp | 16 +- .../Module/ProcessModules/ProcessDetectSurf.h | 5 +- .../ProcessModules/ProcessExtractSurf.cpp | 23 +- .../ProcessModules/ProcessExtractSurf.h | 4 +- .../ProcessExtractTetPrismInterface.cpp | 8 +- .../ProcessExtractTetPrismInterface.h | 4 +- .../Module/ProcessModules/ProcessExtrude.cpp | 118 +- .../Module/ProcessModules/ProcessExtrude.h | 4 +- .../ProcessModules/ProcessInsertSurface.cpp | 80 +- .../ProcessModules/ProcessInsertSurface.h | 4 +- .../Module/ProcessModules/ProcessJac.cpp | 43 +- .../Module/ProcessModules/ProcessJac.h | 4 +- .../Module/ProcessModules/ProcessLinear.cpp | 134 +- .../Module/ProcessModules/ProcessLinear.h | 5 +- .../ProcessModules/ProcessLinkCheck.cpp | 31 +- .../Module/ProcessModules/ProcessLinkCheck.h | 8 +- .../ProcessModules/ProcessOptiExtract.cpp | 28 +- .../ProcessModules/ProcessOptiExtract.h | 8 +- .../Module/ProcessModules/ProcessPerAlign.cpp | 110 +- .../Module/ProcessModules/ProcessPerAlign.h | 5 +- .../ProcessModules/ProcessProjectCAD.cpp | 290 +- .../Module/ProcessModules/ProcessProjectCAD.h | 20 +- .../Module/ProcessModules/ProcessScalar.cpp | 14 +- .../Module/ProcessModules/ProcessScalar.h | 4 +- .../ProcessModules/ProcessSpherigon.cpp | 98 +- .../Module/ProcessModules/ProcessSpherigon.h | 30 +- .../Module/ProcessModules/ProcessTetSplit.cpp | 64 +- .../Module/ProcessModules/ProcessTetSplit.h | 4 +- .../ProcessModules/ProcessVarOpti/ElUtil.cpp | 139 +- .../ProcessModules/ProcessVarOpti/ElUtil.h | 28 +- .../ProcessVarOpti/Evaluator.hxx | 135 +- .../ProcessModules/ProcessVarOpti/Hessian.hxx | 57 +- .../ProcessVarOpti/NodeOpti.cpp | 6 +- .../ProcessModules/ProcessVarOpti/NodeOpti.h | 321 +- .../ProcessVarOpti/NodeOptiCAD.cpp | 18 +- .../ProcessVarOpti/NodeOptiCAD.h | 8 +- .../ProcessVarOpti/NodeOptiJob.h | 8 +- .../ProcessVarOpti/PreProcessing.cpp | 116 +- .../ProcessVarOpti/ProcessVarOpti.cpp | 41 +- .../ProcessVarOpti/ProcessVarOpti.h | 19 +- library/NekMesh/NekMeshDeclspec.h | 17 +- library/NekMesh/Octree/Octant.cpp | 24 +- library/NekMesh/Octree/Octant.h | 37 +- library/NekMesh/Octree/Octree.cpp | 223 +- library/NekMesh/Octree/Octree.h | 124 +- library/NekMesh/Octree/ProcessLoadOctree.cpp | 37 +- library/NekMesh/Octree/ProcessLoadOctree.h | 4 +- library/NekMesh/Octree/SourcePoint.hpp | 113 +- library/NekMesh/Optimisation/BGFS-B.cpp | 10 +- library/NekMesh/Optimisation/BGFS-B.h | 9 +- library/NekMesh/Optimisation/OptimiseObj.h | 100 +- library/NekMesh/Python/Element.cpp | 52 +- library/NekMesh/Python/Mesh.cpp | 13 +- library/NekMesh/Python/Module.cpp | 123 +- library/NekMesh/Python/NekMesh.cpp | 8 +- library/NekMesh/Python/Node.cpp | 15 +- library/NekMesh/SurfaceMeshing/CurveMesh.cpp | 24 +- library/NekMesh/SurfaceMeshing/CurveMesh.h | 12 +- library/NekMesh/SurfaceMeshing/FaceMesh.cpp | 39 +- library/NekMesh/SurfaceMeshing/FaceMesh.h | 28 +- .../NekMesh/SurfaceMeshing/HOSurfaceMesh.cpp | 72 +- .../NekMesh/SurfaceMeshing/HOSurfaceMesh.h | 8 +- .../SurfaceMeshing/OptimiseFunctions.cpp | 20 +- .../SurfaceMeshing/OptimiseFunctions.h | 11 +- .../NekMesh/SurfaceMeshing/SurfaceMesh.cpp | 34 +- library/NekMesh/SurfaceMeshing/SurfaceMesh.h | 9 +- .../VolumeMeshing/BLMeshing/BLMesh.cpp | 6 +- .../NekMesh/VolumeMeshing/BLMeshing/BLMesh.h | 6 +- .../VolumeMeshing/TetMeshing/TetMesh.cpp | 24 +- .../VolumeMeshing/TetMeshing/TetMesh.h | 10 +- library/NekMesh/VolumeMeshing/VolumeMesh.cpp | 14 +- library/NekMesh/VolumeMeshing/VolumeMesh.h | 7 +- library/SolverUtils/Advection/Advection.cpp | 369 +- library/SolverUtils/Advection/Advection.h | 199 +- .../Advection/Advection3DHomogeneous1D.cpp | 374 +- .../Advection/Advection3DHomogeneous1D.h | 96 +- library/SolverUtils/Advection/AdvectionFR.cpp | 3097 +++-- library/SolverUtils/Advection/AdvectionFR.h | 183 +- .../Advection/AdvectionNonConservative.cpp | 185 +- .../Advection/AdvectionNonConservative.h | 61 +- .../SolverUtils/Advection/AdvectionWeakDG.cpp | 500 +- .../SolverUtils/Advection/AdvectionWeakDG.h | 133 +- .../Advection/HomogeneousRSScalar.hpp | 147 +- library/SolverUtils/AdvectionSystem.cpp | 63 +- library/SolverUtils/AdvectionSystem.h | 31 +- library/SolverUtils/CMakeLists.txt | 17 + library/SolverUtils/Core/Coupling.cpp | 13 +- library/SolverUtils/Core/Coupling.h | 32 +- library/SolverUtils/Core/CouplingCwipi.cpp | 188 +- library/SolverUtils/Core/CouplingCwipi.h | 68 +- library/SolverUtils/Core/CouplingFile.cpp | 33 +- library/SolverUtils/Core/CouplingFile.h | 16 +- library/SolverUtils/Core/Misc.cpp | 56 +- library/SolverUtils/Core/Misc.h | 34 +- library/SolverUtils/Core/SessionFunction.cpp | 96 +- library/SolverUtils/Core/SessionFunction.h | 42 +- library/SolverUtils/Diffusion/Diffusion.cpp | 619 +- library/SolverUtils/Diffusion/Diffusion.h | 1093 +- .../Diffusion/Diffusion3DHomogeneous1D.cpp | 479 +- .../Diffusion/Diffusion3DHomogeneous1D.h | 85 +- library/SolverUtils/Diffusion/DiffusionIP.cpp | 366 +- library/SolverUtils/Diffusion/DiffusionIP.h | 101 +- .../SolverUtils/Diffusion/DiffusionLDG.cpp | 189 +- library/SolverUtils/Diffusion/DiffusionLDG.h | 193 +- .../SolverUtils/Diffusion/DiffusionLFR.cpp | 4062 +++--- library/SolverUtils/Diffusion/DiffusionLFR.h | 249 +- .../SolverUtils/Diffusion/DiffusionLFRNS.cpp | 4353 ++++--- .../SolverUtils/Diffusion/DiffusionLFRNS.h | 317 +- library/SolverUtils/Driver.cpp | 117 +- library/SolverUtils/Driver.h | 51 +- library/SolverUtils/DriverAdaptive.cpp | 67 +- library/SolverUtils/DriverAdaptive.h | 15 +- library/SolverUtils/DriverArnoldi.cpp | 251 +- library/SolverUtils/DriverArnoldi.h | 64 +- library/SolverUtils/DriverArpack.cpp | 294 +- library/SolverUtils/DriverArpack.h | 30 +- library/SolverUtils/DriverModifiedArnoldi.cpp | 433 +- library/SolverUtils/DriverModifiedArnoldi.h | 164 +- library/SolverUtils/DriverStandard.cpp | 161 +- library/SolverUtils/DriverStandard.h | 80 +- library/SolverUtils/DriverSteadyState.cpp | 353 +- library/SolverUtils/DriverSteadyState.h | 89 +- library/SolverUtils/EquationSystem.cpp | 2416 ++-- library/SolverUtils/EquationSystem.h | 1257 +- library/SolverUtils/Filters/Filter.cpp | 14 +- library/SolverUtils/Filters/Filter.h | 63 +- .../SolverUtils/Filters/FilterAeroForces.cpp | 1463 ++- .../SolverUtils/Filters/FilterAeroForces.h | 104 +- .../Filters/FilterAverageFields.cpp | 30 +- .../SolverUtils/Filters/FilterAverageFields.h | 21 +- .../SolverUtils/Filters/FilterCheckpoint.cpp | 60 +- .../SolverUtils/Filters/FilterCheckpoint.h | 32 +- library/SolverUtils/Filters/FilterEnergy.cpp | 57 +- library/SolverUtils/Filters/FilterEnergy.h | 33 +- .../SolverUtils/Filters/FilterEnergy1D.cpp | 38 +- library/SolverUtils/Filters/FilterEnergy1D.h | 24 +- library/SolverUtils/Filters/FilterError.cpp | 2 +- library/SolverUtils/Filters/FilterError.h | 2 +- .../Filters/FilterFieldConvert.cpp | 325 +- .../SolverUtils/Filters/FilterFieldConvert.h | 42 +- .../Filters/FilterHistoryPoints.cpp | 717 +- .../SolverUtils/Filters/FilterHistoryPoints.h | 104 +- .../SolverUtils/Filters/FilterIntegral.cpp | 379 + library/SolverUtils/Filters/FilterIntegral.h | 131 + .../SolverUtils/Filters/FilterInterfaces.hpp | 64 +- .../Filters/FilterMaxMinFields.cpp | 237 + .../SolverUtils/Filters/FilterMaxMinFields.h | 118 + library/SolverUtils/Filters/FilterMean.cpp | 56 +- library/SolverUtils/Filters/FilterMean.h | 35 +- .../SolverUtils/Filters/FilterModalEnergy.cpp | 283 +- .../SolverUtils/Filters/FilterModalEnergy.h | 88 +- .../Filters/FilterMovingAverage.cpp | 34 +- .../SolverUtils/Filters/FilterMovingAverage.h | 18 +- .../Filters/FilterThresholdMax.cpp | 70 +- .../SolverUtils/Filters/FilterThresholdMax.h | 31 +- .../Filters/FilterThresholdMin.cpp | 72 +- .../SolverUtils/Filters/FilterThresholdMin.h | 27 +- library/SolverUtils/Forcing/Forcing.cpp | 294 +- library/SolverUtils/Forcing/Forcing.h | 226 +- .../SolverUtils/Forcing/ForcingAbsorption.cpp | 433 +- .../SolverUtils/Forcing/ForcingAbsorption.h | 122 +- library/SolverUtils/Forcing/ForcingBody.cpp | 316 +- library/SolverUtils/Forcing/ForcingBody.h | 97 +- .../Forcing/ForcingMovingReferenceFrame.cpp | 717 +- .../Forcing/ForcingMovingReferenceFrame.h | 137 +- library/SolverUtils/Forcing/ForcingNoise.cpp | 165 +- library/SolverUtils/Forcing/ForcingNoise.h | 81 +- .../Forcing/ForcingProgrammatic.cpp | 79 +- .../SolverUtils/Forcing/ForcingProgrammatic.h | 99 +- library/SolverUtils/MMFSystem.cpp | 113 +- library/SolverUtils/MMFSystem.h | 20 +- .../RiemannSolvers/RiemannSolver.cpp | 901 +- .../RiemannSolvers/RiemannSolver.h | 413 +- .../RiemannSolvers/UpwindLDGSolver.cpp | 120 +- .../RiemannSolvers/UpwindLDGSolver.h | 43 +- .../RiemannSolvers/UpwindSolver.cpp | 119 +- .../SolverUtils/RiemannSolvers/UpwindSolver.h | 43 +- library/SolverUtils/SolverUtils.hpp | 26 +- library/SolverUtils/SolverUtilsDeclspec.h | 18 +- library/SolverUtils/UnsteadySystem.cpp | 1476 ++- library/SolverUtils/UnsteadySystem.h | 83 +- library/SpatialDomains/Conditions.cpp | 76 +- library/SpatialDomains/Conditions.h | 491 +- library/SpatialDomains/Curve.hpp | 37 +- library/SpatialDomains/Domain.cpp | 325 +- library/SpatialDomains/Domain.h | 120 +- library/SpatialDomains/GeomFactors.cpp | 1608 ++- library/SpatialDomains/GeomFactors.h | 587 +- library/SpatialDomains/Geometry.cpp | 76 +- library/SpatialDomains/Geometry.h | 121 +- library/SpatialDomains/Geometry0D.cpp | 15 +- library/SpatialDomains/Geometry0D.h | 11 +- library/SpatialDomains/Geometry1D.cpp | 16 +- library/SpatialDomains/Geometry1D.h | 9 +- library/SpatialDomains/Geometry2D.cpp | 45 +- library/SpatialDomains/Geometry2D.h | 12 +- library/SpatialDomains/Geometry3D.cpp | 70 +- library/SpatialDomains/Geometry3D.h | 16 +- library/SpatialDomains/HexGeom.cpp | 92 +- library/SpatialDomains/HexGeom.h | 12 +- library/SpatialDomains/InterfaceComponent.cpp | 15 +- library/SpatialDomains/InterfaceComponent.h | 35 +- library/SpatialDomains/MeshComponents.cpp | 11 +- library/SpatialDomains/MeshComponents.h | 142 +- library/SpatialDomains/MeshEntities.hpp | 208 +- library/SpatialDomains/MeshGraph.cpp | 738 +- library/SpatialDomains/MeshGraph.h | 91 +- library/SpatialDomains/MeshGraphHDF5.cpp | 755 +- library/SpatialDomains/MeshGraphHDF5.h | 67 +- library/SpatialDomains/MeshGraphXml.cpp | 334 +- library/SpatialDomains/MeshGraphXml.h | 30 +- .../SpatialDomains/MeshGraphXmlCompressed.cpp | 5 +- .../SpatialDomains/MeshGraphXmlCompressed.h | 16 +- library/SpatialDomains/MeshPartition.cpp | 142 +- library/SpatialDomains/MeshPartition.h | 44 +- library/SpatialDomains/MeshPartitionMetis.cpp | 15 +- library/SpatialDomains/MeshPartitionMetis.h | 19 +- .../SpatialDomains/MeshPartitionPtScotch.cpp | 42 +- .../SpatialDomains/MeshPartitionPtScotch.h | 19 +- .../SpatialDomains/MeshPartitionScotch.cpp | 381 +- library/SpatialDomains/MeshPartitionScotch.h | 106 +- library/SpatialDomains/PointGeom.cpp | 69 +- library/SpatialDomains/PointGeom.h | 23 +- library/SpatialDomains/PrismGeom.cpp | 119 +- library/SpatialDomains/PrismGeom.h | 12 +- library/SpatialDomains/PyrGeom.cpp | 79 +- library/SpatialDomains/PyrGeom.h | 14 +- library/SpatialDomains/Python/Curve.cpp | 6 +- .../SpatialDomains/Python/GeomElements.cpp | 54 +- library/SpatialDomains/Python/Geometry.cpp | 55 +- library/SpatialDomains/Python/MeshGraph.cpp | 25 +- library/SpatialDomains/QuadGeom.cpp | 65 +- library/SpatialDomains/QuadGeom.h | 23 +- library/SpatialDomains/SegGeom.cpp | 40 +- library/SpatialDomains/SegGeom.h | 18 +- library/SpatialDomains/SpatialDomains.hpp | 114 +- .../SpatialDomains/SpatialDomainsDeclspec.h | 18 +- library/SpatialDomains/TetGeom.cpp | 70 +- library/SpatialDomains/TetGeom.h | 15 +- library/SpatialDomains/TriGeom.cpp | 138 +- library/SpatialDomains/TriGeom.h | 26 +- library/StdRegions/Python/StdElements.cpp | 68 +- library/StdRegions/Python/StdExpansion.cpp | 43 +- library/StdRegions/Python/StdMatrixKey.cpp | 18 +- library/StdRegions/StdExpansion.cpp | 2852 ++--- library/StdRegions/StdExpansion.h | 3052 +++-- library/StdRegions/StdExpansion0D.cpp | 120 +- library/StdRegions/StdExpansion0D.h | 76 +- library/StdRegions/StdExpansion1D.cpp | 92 +- library/StdRegions/StdExpansion1D.h | 96 +- library/StdRegions/StdExpansion2D.cpp | 702 +- library/StdRegions/StdExpansion2D.h | 307 +- library/StdRegions/StdExpansion3D.cpp | 962 +- library/StdRegions/StdExpansion3D.h | 406 +- library/StdRegions/StdHexExp.cpp | 4348 +++---- library/StdRegions/StdHexExp.h | 469 +- library/StdRegions/StdLinSysKey.hpp | 55 +- library/StdRegions/StdMatrixKey.cpp | 468 +- library/StdRegions/StdMatrixKey.h | 310 +- library/StdRegions/StdNodalPrismExp.cpp | 632 +- library/StdRegions/StdNodalPrismExp.h | 192 +- library/StdRegions/StdNodalTetExp.cpp | 644 +- library/StdRegions/StdNodalTetExp.h | 194 +- library/StdRegions/StdNodalTriExp.cpp | 772 +- library/StdRegions/StdNodalTriExp.h | 290 +- library/StdRegions/StdPointExp.cpp | 439 +- library/StdRegions/StdPointExp.h | 179 +- library/StdRegions/StdPrismExp.cpp | 3711 +++--- library/StdRegions/StdPrismExp.h | 416 +- library/StdRegions/StdPyrExp.cpp | 3517 +++--- library/StdRegions/StdPyrExp.h | 434 +- library/StdRegions/StdQuadExp.cpp | 2885 +++-- library/StdRegions/StdQuadExp.h | 427 +- library/StdRegions/StdRegions.hpp | 650 +- library/StdRegions/StdRegionsDeclspec.h | 18 +- library/StdRegions/StdSegExp.cpp | 1547 ++- library/StdRegions/StdSegExp.h | 365 +- library/StdRegions/StdTetExp.cpp | 3975 +++--- library/StdRegions/StdTetExp.h | 446 +- library/StdRegions/StdTriExp.cpp | 2620 ++-- library/StdRegions/StdTriExp.h | 415 +- library/UnitTests/BlockMatrixUnitTests.cpp | 894 +- .../Collections/TestHexCollection.cpp | 8404 +++++++------ .../Collections/TestPrismCollection.cpp | 6748 +++++----- .../Collections/TestPyrCollection.cpp | 6146 +++++----- .../Collections/TestQuadCollection.cpp | 5338 ++++---- .../Collections/TestSegCollection.cpp | 3341 ++--- .../Collections/TestTetCollection.cpp | 5592 +++++---- .../Collections/TestTriCollection.cpp | 6114 +++++----- library/UnitTests/Collections/main.cpp | 7 +- library/UnitTests/CountedObject.h | 294 +- .../TestBandedMatrixOperations.cpp | 893 +- .../TestBandedMatrixStoragePolicy.cpp | 317 +- .../LinearAlgebra/TestBlockMatrix.cpp | 1652 ++- .../LinearAlgebra/TestCanGetRawPtr.cpp | 28 +- .../LinearAlgebra/TestCombinationRunner.h | 173 +- .../LinearAlgebra/TestDgemmOptimizations.cpp | 397 +- .../TestDiagonalMatrixOperations.cpp | 83 +- .../TestDiagonalMatrixStoragePolicy.cpp | 73 +- .../TestFullMatrixOperations.cpp | 447 +- .../TestFullMatrixStoragePolicy.cpp | 172 +- .../TestLowerTriangularMatrix.cpp | 77 +- ...TestLowerTriangularMatrixStoragePolicy.cpp | 142 +- .../TestNekMatrixMultiplication.cpp | 375 +- .../LinearAlgebra/TestNekMatrixOperations.cpp | 432 +- .../LinearAlgebra/TestNekVector.cpp | 150 +- .../TestScaledBlockMatrixOperations.cpp | 295 +- .../LinearAlgebra/TestScaledMatrix.cpp | 904 +- .../LinearAlgebra/TestStandardMatrix.cpp | 540 +- .../TestSymmetricMatrixStoragePolicy.cpp | 163 +- .../TestTriangularMatrixOperations.cpp | 323 +- .../TestUpperTriangularMatrix.cpp | 78 +- ...TestUpperTriangularMatrixStoragePolicy.cpp | 132 +- .../LibUtilities/LinearAlgebra/main.cpp | 4 +- .../LibUtilities/TestCheckedCast.cpp | 35 +- .../TestConsistentObjectAccess.cpp | 257 +- .../LibUtilities/TestInterpreter.cpp | 18 +- .../UnitTests/LibUtilities/TestRawType.cpp | 162 +- .../LibUtilities/TestRealComparison.cpp | 274 +- .../LibUtilities/TestSharedArray.cpp | 64 +- .../UnitTests/LibUtilities/TestVmathSIMD.cpp | 570 +- .../LibUtilities/VmathTimer/main.cpp | 39 +- library/UnitTests/LibUtilities/main.cpp | 4 +- .../UnitTests/LocalRegions/TestGetCoords.cpp | 326 +- .../LocalRegions/TestReOrientFacePhysMap.cpp | 201 +- library/UnitTests/LocalRegions/main.cpp | 8 +- .../UnitTests/Memory/TestNekMemoryManager.cpp | 221 +- library/UnitTests/SIMD/CMakeLists.txt | 8 +- library/UnitTests/SIMD/TestSimdLib.cpp | 707 -- library/UnitTests/SIMD/TestSimdLibDouble.cpp | 886 ++ library/UnitTests/SIMD/TestSimdLibSingle.cpp | 811 ++ library/UnitTests/SIMD/main.cpp | 7 +- library/UnitTests/ScaledMatrixUnitTests.cpp | 225 +- library/UnitTests/main.cpp | 2 +- library/UnitTests/testLinearSystem.cpp | 509 +- library/UnitTests/testNekLinAlgAlgorithms.cpp | 58 +- library/UnitTests/testNekMatrix.cpp | 960 +- library/UnitTests/testNekPoint.cpp | 189 +- library/UnitTests/testNekSharedArray.cpp | 1277 +- library/UnitTests/testNekVector.cpp | 656 +- library/UnitTests/util.cpp | 23 +- library/UnitTests/util.h | 12 +- pkg/README.md | 7 + pkg/debian/bullseye/compat | 1 + pkg/debian/bullseye/control | 198 + pkg/debian/bullseye/copyright | 27 + pkg/debian/bullseye/gbp.conf | 2 + pkg/debian/bullseye/libnektar++-dev.install | 3 + pkg/debian/bullseye/libnektar++-doc.install | 2 + .../libnektar++-doc.lintian-overrides | 1 + pkg/debian/bullseye/libnektar++.install | 1 + .../bullseye/libnektar++.lintian-overrides | 2 + pkg/debian/bullseye/nekmesh.install | 1 + pkg/debian/bullseye/nekmesh.manpages | 1 + .../bullseye/nektar++-adr-solver.install | 1 + .../bullseye/nektar++-adr-solver.manpages | 1 + .../nektar++-cardiacep-solver.install | 1 + .../nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/debian/bullseye/nektar++-doc.install | 1 + .../bullseye/nektar++-fieldconvert.install | 1 + .../bullseye/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../nektar++-pulsewave-solver.install | 1 + .../nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + .../bullseye/nektar++.lintian-overrides | 2 + .../patches/fix-lib-install-path.patch | 16 + .../bullseye/patches/fix-mpi-allow-root.patch | 16 + pkg/debian/bullseye/patches/series | 1 + pkg/debian/bullseye/rules | 44 + pkg/debian/bullseye/source/format | 1 + pkg/debian/buster/compat | 1 + pkg/debian/buster/control | 198 + pkg/debian/buster/copyright | 27 + pkg/debian/buster/gbp.conf | 2 + pkg/debian/buster/libnektar++-dev.install | 3 + pkg/debian/buster/libnektar++-doc.install | 2 + .../buster/libnektar++-doc.lintian-overrides | 1 + pkg/debian/buster/libnektar++.install | 1 + .../buster/libnektar++.lintian-overrides | 2 + pkg/debian/buster/nekmesh.install | 1 + pkg/debian/buster/nekmesh.manpages | 1 + pkg/debian/buster/nektar++-adr-solver.install | 1 + .../buster/nektar++-adr-solver.manpages | 1 + .../buster/nektar++-cardiacep-solver.install | 1 + .../buster/nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/debian/buster/nektar++-doc.install | 1 + .../buster/nektar++-fieldconvert.install | 1 + .../buster/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../buster/nektar++-pulsewave-solver.install | 1 + .../buster/nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + pkg/debian/buster/nektar++.lintian-overrides | 2 + .../buster/patches/fix-lib-install-path.patch | 16 + .../buster/patches/fix-mpi-allow-root.patch | 16 + pkg/debian/buster/patches/series | 1 + pkg/debian/buster/rules | 44 + pkg/debian/buster/source/format | 1 + pkg/debian/changelog | 48 + pkg/debian/stretch/compat | 1 + pkg/debian/stretch/control | 198 + pkg/debian/stretch/copyright | 27 + pkg/debian/stretch/gbp.conf | 2 + pkg/debian/stretch/libnektar++-dev.install | 3 + pkg/debian/stretch/libnektar++-doc.install | 2 + .../stretch/libnektar++-doc.lintian-overrides | 1 + pkg/debian/stretch/libnektar++.install | 1 + .../stretch/libnektar++.lintian-overrides | 2 + pkg/debian/stretch/nekmesh.install | 1 + pkg/debian/stretch/nekmesh.manpages | 1 + .../stretch/nektar++-adr-solver.install | 1 + .../stretch/nektar++-adr-solver.manpages | 1 + .../stretch/nektar++-cardiacep-solver.install | 1 + .../nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/debian/stretch/nektar++-doc.install | 1 + .../stretch/nektar++-fieldconvert.install | 1 + .../stretch/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../stretch/nektar++-pulsewave-solver.install | 1 + .../nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + pkg/debian/stretch/nektar++.lintian-overrides | 2 + .../patches/fix-lib-install-path.patch | 16 + .../stretch/patches/fix-mpi-allow-root.patch | 16 + pkg/debian/stretch/patches/series | 1 + pkg/debian/stretch/rules | 45 + pkg/debian/stretch/source/format | 1 + pkg/debian/unstable/compat | 1 + pkg/debian/unstable/control | 198 + pkg/debian/unstable/copyright | 27 + pkg/debian/unstable/gbp.conf | 2 + pkg/debian/unstable/libnektar++-dev.install | 3 + pkg/debian/unstable/libnektar++-doc.install | 2 + .../libnektar++-doc.lintian-overrides | 1 + pkg/debian/unstable/libnektar++.install | 1 + .../unstable/libnektar++.lintian-overrides | 2 + pkg/debian/unstable/nekmesh.install | 1 + pkg/debian/unstable/nekmesh.manpages | 1 + .../unstable/nektar++-adr-solver.install | 1 + .../unstable/nektar++-adr-solver.manpages | 1 + .../nektar++-cardiacep-solver.install | 1 + .../nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/debian/unstable/nektar++-doc.install | 1 + .../unstable/nektar++-fieldconvert.install | 1 + .../unstable/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../nektar++-pulsewave-solver.install | 1 + .../nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + .../unstable/nektar++.lintian-overrides | 2 + .../patches/fix-lib-install-path.patch | 16 + .../unstable/patches/fix-mpi-allow-root.patch | 16 + pkg/debian/unstable/patches/series | 1 + pkg/debian/unstable/rules | 44 + pkg/debian/unstable/source/format | 1 + pkg/redhat/nektar-centos-7.spec | 624 + pkg/redhat/nektar-centos-8.spec | 642 + pkg/redhat/nektar-fedora-35.spec | 644 + pkg/redhat/version-tracker.py | 67 + pkg/ubuntu/bionic/compat | 1 + pkg/ubuntu/bionic/control | 198 + pkg/ubuntu/bionic/copyright | 27 + pkg/ubuntu/bionic/gbp.conf | 2 + pkg/ubuntu/bionic/libnektar++-dev.install | 3 + pkg/ubuntu/bionic/libnektar++-doc.install | 2 + .../bionic/libnektar++-doc.lintian-overrides | 1 + pkg/ubuntu/bionic/libnektar++.install | 1 + .../bionic/libnektar++.lintian-overrides | 2 + pkg/ubuntu/bionic/nekmesh.install | 1 + pkg/ubuntu/bionic/nekmesh.manpages | 1 + pkg/ubuntu/bionic/nektar++-adr-solver.install | 1 + .../bionic/nektar++-adr-solver.manpages | 1 + .../bionic/nektar++-cardiacep-solver.install | 1 + .../bionic/nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/ubuntu/bionic/nektar++-doc.install | 1 + .../bionic/nektar++-fieldconvert.install | 1 + .../bionic/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../bionic/nektar++-pulsewave-solver.install | 1 + .../bionic/nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + pkg/ubuntu/bionic/nektar++.lintian-overrides | 2 + .../bionic/patches/fix-lib-install-path.patch | 16 + .../bionic/patches/fix-mpi-allow-root.patch | 16 + pkg/ubuntu/bionic/patches/series | 1 + pkg/ubuntu/bionic/rules | 45 + pkg/ubuntu/bionic/source/format | 1 + pkg/ubuntu/focal/compat | 1 + pkg/ubuntu/focal/control | 198 + pkg/ubuntu/focal/copyright | 27 + pkg/ubuntu/focal/gbp.conf | 2 + pkg/ubuntu/focal/libnektar++-dev.install | 3 + pkg/ubuntu/focal/libnektar++-doc.install | 2 + .../focal/libnektar++-doc.lintian-overrides | 1 + pkg/ubuntu/focal/libnektar++.install | 1 + .../focal/libnektar++.lintian-overrides | 2 + pkg/ubuntu/focal/nekmesh.install | 1 + pkg/ubuntu/focal/nekmesh.manpages | 1 + pkg/ubuntu/focal/nektar++-adr-solver.install | 1 + pkg/ubuntu/focal/nektar++-adr-solver.manpages | 1 + .../focal/nektar++-cardiacep-solver.install | 1 + .../focal/nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/ubuntu/focal/nektar++-doc.install | 1 + .../focal/nektar++-fieldconvert.install | 1 + .../focal/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../focal/nektar++-pulsewave-solver.install | 1 + .../focal/nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + pkg/ubuntu/focal/nektar++.lintian-overrides | 2 + .../focal/patches/fix-lib-install-path.patch | 16 + .../focal/patches/fix-mpi-allow-root.patch | 16 + pkg/ubuntu/focal/patches/series | 1 + pkg/ubuntu/focal/rules | 45 + pkg/ubuntu/focal/source/format | 1 + pkg/ubuntu/jammy/compat | 1 + pkg/ubuntu/jammy/control | 198 + pkg/ubuntu/jammy/copyright | 27 + pkg/ubuntu/jammy/gbp.conf | 2 + pkg/ubuntu/jammy/libnektar++-dev.install | 3 + pkg/ubuntu/jammy/libnektar++-doc.install | 2 + .../jammy/libnektar++-doc.lintian-overrides | 1 + pkg/ubuntu/jammy/libnektar++.install | 1 + .../jammy/libnektar++.lintian-overrides | 2 + pkg/ubuntu/jammy/nekmesh.install | 1 + pkg/ubuntu/jammy/nekmesh.manpages | 1 + pkg/ubuntu/jammy/nektar++-adr-solver.install | 1 + pkg/ubuntu/jammy/nektar++-adr-solver.manpages | 1 + .../jammy/nektar++-cardiacep-solver.install | 1 + .../jammy/nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/ubuntu/jammy/nektar++-doc.install | 1 + .../jammy/nektar++-fieldconvert.install | 1 + .../jammy/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../jammy/nektar++-pulsewave-solver.install | 1 + .../jammy/nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + .../nektar++-shallowwater-solver.manpages | 1 + pkg/ubuntu/jammy/nektar++.lintian-overrides | 2 + .../jammy/patches/fix-lib-install-path.patch | 16 + .../jammy/patches/fix-mpi-allow-root.patch | 16 + pkg/ubuntu/jammy/patches/series | 1 + pkg/ubuntu/jammy/rules | 45 + pkg/ubuntu/jammy/source/format | 1 + pkg/ubuntu/xenial/compat | 1 + pkg/ubuntu/xenial/control | 198 + pkg/ubuntu/xenial/copyright | 27 + pkg/ubuntu/xenial/gbp.conf | 2 + pkg/ubuntu/xenial/libnektar++-dev.install | 4 + pkg/ubuntu/xenial/libnektar++-doc.install | 2 + .../xenial/libnektar++-doc.lintian-overrides | 1 + pkg/ubuntu/xenial/libnektar++.install | 2 + .../xenial/libnektar++.lintian-overrides | 3 + pkg/ubuntu/xenial/nekmesh.install | 1 + pkg/ubuntu/xenial/nekmesh.lintian-overrides | 1 + pkg/ubuntu/xenial/nekmesh.manpages | 1 + pkg/ubuntu/xenial/nektar++-adr-solver.install | 1 + .../nektar++-adr-solver.lintian-overrides | 1 + .../xenial/nektar++-adr-solver.manpages | 1 + .../xenial/nektar++-cardiacep-solver.install | 1 + ...ektar++-cardiacep-solver.lintian-overrides | 1 + .../xenial/nektar++-cardiacep-solver.manpages | 1 + .../nektar++-compressibleflow-solver.install | 1 + ...-compressibleflow-solver.lintian-overrides | 1 + .../nektar++-compressibleflow-solver.manpages | 1 + pkg/ubuntu/xenial/nektar++-doc.install | 1 + .../xenial/nektar++-fieldconvert.install | 1 + .../nektar++-fieldconvert.lintian-overrides | 1 + .../xenial/nektar++-fieldconvert.manpages | 1 + .../nektar++-incnavierstokes-solver.install | 1 + ...+-incnavierstokes-solver.lintian-overrides | 1 + .../nektar++-incnavierstokes-solver.manpages | 1 + .../xenial/nektar++-pulsewave-solver.install | 1 + ...ektar++-pulsewave-solver.lintian-overrides | 1 + .../xenial/nektar++-pulsewave-solver.manpages | 1 + .../nektar++-shallowwater-solver.install | 1 + ...ar++-shallowwater-solver.lintian-overrides | 1 + .../nektar++-shallowwater-solver.manpages | 1 + pkg/ubuntu/xenial/nektar++.lintian-overrides | 2 + .../xenial/patches/fix-lib-install-path.patch | 16 + .../xenial/patches/fix-mpi-allow-root.patch | 16 + pkg/ubuntu/xenial/patches/series | 1 + pkg/ubuntu/xenial/rules | 45 + pkg/ubuntu/xenial/source/format | 1 + solvers/ADRSolver/ADRSolver.cpp | 11 +- solvers/ADRSolver/CMakeLists.txt | 13 +- .../ADRSolver/EquationSystems/CFLtester.cpp | 688 +- solvers/ADRSolver/EquationSystems/CFLtester.h | 248 +- .../EquationSystems/EigenValuesAdvection.cpp | 437 +- .../EquationSystems/EigenValuesAdvection.h | 75 +- .../ADRSolver/EquationSystems/Helmholtz.cpp | 67 +- solvers/ADRSolver/EquationSystems/Helmholtz.h | 57 +- solvers/ADRSolver/EquationSystems/Laplace.cpp | 77 +- solvers/ADRSolver/EquationSystems/Laplace.h | 61 +- .../EquationSystems/MMFAdvection.cpp | 72 +- .../ADRSolver/EquationSystems/MMFAdvection.h | 20 +- solvers/ADRSolver/EquationSystems/Poisson.cpp | 63 +- solvers/ADRSolver/EquationSystems/Poisson.h | 57 +- .../ADRSolver/EquationSystems/Projection.cpp | 10 +- .../ADRSolver/EquationSystems/Projection.h | 10 +- .../SteadyAdvectionDiffusion.cpp | 106 +- .../SteadyAdvectionDiffusion.h | 61 +- .../SteadyAdvectionDiffusionReaction.cpp | 49 +- .../SteadyAdvectionDiffusionReaction.h | 53 +- .../EquationSystems/UnsteadyAdvection.cpp | 634 +- .../EquationSystems/UnsteadyAdvection.h | 151 +- .../UnsteadyAdvectionDiffusion.cpp | 1323 +- .../UnsteadyAdvectionDiffusion.h | 254 +- .../EquationSystems/UnsteadyDiffusion.cpp | 404 +- .../EquationSystems/UnsteadyDiffusion.h | 106 +- .../UnsteadyInviscidBurger.cpp | 419 +- .../EquationSystems/UnsteadyInviscidBurger.h | 104 +- .../UnsteadyReactionDiffusion.cpp | 60 +- .../UnsteadyReactionDiffusion.h | 40 +- .../UnsteadyViscousBurgers.cpp | 637 +- .../EquationSystems/UnsteadyViscousBurgers.h | 184 +- .../ADRSolver/Tests/AdvDiff3D_AllElmt_GJP.tst | 18 + .../ADRSolver/Tests/AdvDiff3D_AllElmt_GJP.xml | 98 + .../ADRSolver/Tests/AdvDiff_QuadTri_GJP.tst | 19 + .../ADRSolver/Tests/AdvDiff_QuadTri_GJP.xml | 137 + .../ADRSolver/Tests/Advection2D_Quad_GJP.tst | 17 + .../ADRSolver/Tests/Advection2D_Quad_GJP.xml | 146 + .../ADRSolver/Tests/Advection2D_Tri_GJP.tst | 18 + .../ADRSolver/Tests/Advection2D_Tri_GJP.xml | 164 + .../ADRSolver/Tests/Advection3D_2_2_hex.xml | 242 + .../Tests/Advection3D_AllElmt_GJP.tst | 18 + .../Tests/Advection3D_AllElmt_GJP.xml | 95 + .../ADRSolver/Tests/Advection3D_DG_prism.tst | 17 + .../ADRSolver/Tests/Advection3D_DG_prism.xml | 158 + .../Tests/Advection3D_m12_DG_tet_VarP.tst | 4 +- .../Tests/Advection3D_m12_DG_tet_VarP_par.tst | 4 +- .../ADRSolver/Tests/Advection3D_m8_DG_hex.xml | 2 +- .../ADRSolver/Tests/Helmholtz1D_800modes.tst | 22 + .../ADRSolver/Tests/Helmholtz1D_800modes.xml | 80 + .../ADRSolver/Tests/Helmholtz3D_CubeDir.xml | 16 +- .../Tests/Helmholtz3D_CubeDirichlet_par.tst | 2 +- .../Tests/Helmholtz3D_CubePeriodic.xml | 4 +- .../Helmholtz3D_CubePeriodic_RotateFace.xml | 4 +- .../Tests/ImDiffusion_Hex_Periodic_m5.xml | 4 - .../Tests/ImDiffusion_Quad_Periodic_m7.xml | 4 - .../InviscidBurger1D_FRDG_GAUSS_LAGRANGE.tst | 2 +- .../InviscidBurger1D_FRDG_GLL_LAGRANGE.tst | 4 +- ...InviscidBurger1D_FRDG_GLL_LAGRANGE_SEM.tst | 4 +- .../Tests/InviscidBurger1D_FRDG_MODIFIED.tst | 4 +- .../InviscidBurger1D_FRHU_GLL_LAGRANGE.tst | 4 +- ...InviscidBurger1D_FRHU_GLL_LAGRANGE_SEM.tst | 4 +- .../Tests/InviscidBurger1D_FRHU_MODIFIED.tst | 4 +- .../InviscidBurger1D_FRSD_GLL_LAGRANGE.tst | 4 +- ...InviscidBurger1D_FRSD_GLL_LAGRANGE_SEM.tst | 4 +- .../Tests/InviscidBurger1D_FRSD_MODIFIED.tst | 4 +- ...InviscidBurger1D_WeakDG_GAUSS_LAGRANGE.tst | 2 +- .../InviscidBurger1D_WeakDG_GLL_LAGRANGE.tst | 4 +- .../InviscidBurger1D_WeakDG_MODIFIED.tst | 4 +- solvers/ADRSolver/Tests/test.opt | 50 + solvers/AcousticSolver/APESolver.cpp | 2 +- solvers/AcousticSolver/AcousticSolver.cpp | 2 +- .../AcousticSolver/EquationSystems/APE.cpp | 6 +- solvers/AcousticSolver/EquationSystems/APE.h | 4 +- .../EquationSystems/AcousticSystem.cpp | 14 +- .../EquationSystems/AcousticSystem.h | 4 +- .../AcousticSolver/EquationSystems/LEE.cpp | 6 +- solvers/AcousticSolver/EquationSystems/LEE.h | 4 +- .../RiemannSolvers/APELaxFriedrichsSolver.cpp | 11 +- .../RiemannSolvers/APELaxFriedrichsSolver.h | 15 +- .../RiemannSolvers/APEUpwindSolver.cpp | 11 +- .../RiemannSolvers/APEUpwindSolver.h | 15 +- .../RiemannSolvers/AcousticSolver.cpp | 34 +- .../RiemannSolvers/AcousticSolver.h | 15 +- .../RiemannSolvers/LEELaxFriedrichsSolver.cpp | 11 +- .../RiemannSolvers/LEELaxFriedrichsSolver.h | 15 +- .../RiemannSolvers/LEESolver.cpp | 35 +- .../RiemannSolvers/LEEUpwindSolver.cpp | 11 +- .../RiemannSolvers/LEEUpwindSolver.h | 15 +- solvers/AcousticSolver/Tests/test.opt | 50 + solvers/CardiacEPSolver/CardiacEPSolver.cpp | 10 +- .../CellModels/AlievPanfilov.cpp | 325 +- .../CellModels/AlievPanfilov.h | 90 +- .../CardiacEPSolver/CellModels/CellModel.cpp | 728 +- .../CardiacEPSolver/CellModels/CellModel.h | 223 +- .../CourtemancheRamirezNattel98.cpp | 1197 +- .../CellModels/CourtemancheRamirezNattel98.h | 182 +- .../CellModels/FentonKarma.cpp | 1422 ++- .../CardiacEPSolver/CellModels/FentonKarma.h | 190 +- .../CellModels/FitzhughNagumo.cpp | 121 +- .../CellModels/FitzhughNagumo.h | 64 +- solvers/CardiacEPSolver/CellModels/Fox02.cpp | 1336 +- solvers/CardiacEPSolver/CellModels/Fox02.h | 69 +- .../CardiacEPSolver/CellModels/LuoRudy91.cpp | 665 +- .../CardiacEPSolver/CellModels/LuoRudy91.h | 61 +- .../CellModels/PanditGilesDemir03.cpp | 1956 ++- .../CellModels/PanditGilesDemir03.h | 56 +- .../CellModels/TenTusscher06.cpp | 1471 ++- .../CellModels/TenTusscher06.h | 94 +- .../CardiacEPSolver/CellModels/Winslow99.cpp | 2313 +++- .../CardiacEPSolver/CellModels/Winslow99.h | 62 +- .../EquationSystems/Bidomain.cpp | 708 +- .../EquationSystems/Bidomain.h | 139 +- .../EquationSystems/BidomainRoth.cpp | 227 +- .../EquationSystems/BidomainRoth.h | 36 +- .../EquationSystems/Monodomain.cpp | 615 +- .../EquationSystems/Monodomain.h | 140 +- .../Filters/FilterBenchmark.cpp | 77 +- .../CardiacEPSolver/Filters/FilterBenchmark.h | 33 +- .../Filters/FilterCellHistoryPoints.cpp | 59 +- .../Filters/FilterCellHistoryPoints.h | 65 +- .../Filters/FilterCheckpointCellModel.cpp | 53 +- .../Filters/FilterCheckpointCellModel.h | 28 +- .../Filters/FilterElectrogram.cpp | 112 +- .../Filters/FilterElectrogram.h | 35 +- solvers/CardiacEPSolver/Stimuli/Protocol.cpp | 61 +- solvers/CardiacEPSolver/Stimuli/Protocol.h | 77 +- .../CardiacEPSolver/Stimuli/ProtocolS1.cpp | 149 +- solvers/CardiacEPSolver/Stimuli/ProtocolS1.h | 66 +- .../CardiacEPSolver/Stimuli/ProtocolS1S2.cpp | 144 +- .../CardiacEPSolver/Stimuli/ProtocolS1S2.h | 71 +- .../Stimuli/ProtocolSingle.cpp | 134 +- .../CardiacEPSolver/Stimuli/ProtocolSingle.h | 63 +- solvers/CardiacEPSolver/Stimuli/Stimulus.cpp | 115 +- solvers/CardiacEPSolver/Stimuli/Stimulus.h | 118 +- .../Stimuli/StimulusCircle.cpp | 235 +- .../CardiacEPSolver/Stimuli/StimulusCircle.h | 79 +- .../CardiacEPSolver/Stimuli/StimulusPoint.cpp | 115 +- .../CardiacEPSolver/Stimuli/StimulusPoint.h | 63 +- .../CardiacEPSolver/Stimuli/StimulusRect.cpp | 215 +- .../CardiacEPSolver/Stimuli/StimulusRect.h | 80 +- .../Utilities/PrePacing/Prepacing.cpp | 39 +- .../ArtificialDiffusion.cpp | 84 +- .../ArtificialDiffusion/ArtificialDiffusion.h | 127 +- .../NonSmoothShockCapture.cpp | 36 +- .../NonSmoothShockCapture.h | 61 +- .../BoundaryConditions/CFSBndCond.cpp | 50 +- .../BoundaryConditions/CFSBndCond.h | 125 +- .../BoundaryConditions/ExtrapOrder0BC.cpp | 62 +- .../BoundaryConditions/ExtrapOrder0BC.h | 60 +- .../BoundaryConditions/IsentropicVortexBC.cpp | 97 +- .../BoundaryConditions/IsentropicVortexBC.h | 77 +- .../PressureInflowFileBC.cpp | 111 +- .../BoundaryConditions/PressureInflowFileBC.h | 65 +- .../PressureMachTemperatureBC.cpp | 85 +- .../PressureMachTemperatureBC.h | 66 +- .../BoundaryConditions/PressureOutflowBC.cpp | 96 +- .../BoundaryConditions/PressureOutflowBC.h | 65 +- .../PressureOutflowNonReflectiveBC.cpp | 95 +- .../PressureOutflowNonReflectiveBC.h | 66 +- .../BoundaryConditions/RiemannInvariantBC.cpp | 126 +- .../BoundaryConditions/RiemannInvariantBC.h | 71 +- .../BoundaryConditions/RinglebFlowBC.cpp | 207 +- .../BoundaryConditions/RinglebFlowBC.h | 67 +- .../BoundaryConditions/StagnationInflowBC.cpp | 117 +- .../BoundaryConditions/StagnationInflowBC.h | 71 +- .../BoundaryConditions/SymmetryBC.cpp | 65 +- .../BoundaryConditions/SymmetryBC.h | 63 +- .../BoundaryConditions/TimeDependentBC.cpp | 28 +- .../BoundaryConditions/TimeDependentBC.h | 60 +- .../BoundaryConditions/WallBC.cpp | 67 +- .../BoundaryConditions/WallBC.h | 63 +- .../BoundaryConditions/WallViscousBC.cpp | 79 +- .../BoundaryConditions/WallViscousBC.h | 71 +- solvers/CompressibleFlowSolver/CMakeLists.txt | 14 +- .../CompressibleFlowSolver.cpp | 24 +- .../Diffusion/DiffusionLDGNS.cpp | 589 +- .../Diffusion/DiffusionLDGNS.h | 245 +- .../CompressibleFlowSystem.cpp | 1603 ++- .../EquationSystems/CompressibleFlowSystem.h | 317 +- .../CompressibleFlowSystemImplicit.cpp | 3023 ++--- .../CompressibleFlowSystemImplicit.h | 702 +- .../EquationSystems/EulerCFE.cpp | 58 +- .../EquationSystems/EulerCFE.h | 56 +- .../EquationSystems/EulerImplicitCFE.cpp | 53 +- .../EquationSystems/EulerImplicitCFE.h | 62 +- .../EquationSystems/IsentropicVortex.cpp | 235 +- .../EquationSystems/IsentropicVortex.h | 82 +- .../EquationSystems/NavierStokesCFE.cpp | 1577 ++- .../EquationSystems/NavierStokesCFE.h | 356 +- .../EquationSystems/NavierStokesCFEAxisym.cpp | 372 +- .../EquationSystems/NavierStokesCFEAxisym.h | 63 +- .../NavierStokesImplicitCFE.cpp | 2357 ++-- .../EquationSystems/NavierStokesImplicitCFE.h | 231 +- .../EquationSystems/RinglebFlow.cpp | 363 +- .../EquationSystems/RinglebFlow.h | 66 +- .../Forcing/ForcingAxiSymmetric.cpp | 102 +- .../Forcing/ForcingAxiSymmetric.h | 71 +- .../Forcing/ForcingQuasi1D.cpp | 102 +- .../Forcing/ForcingQuasi1D.h | 70 +- .../Misc/EquationOfState.cpp | 11 +- .../Misc/EquationOfState.h | 13 +- .../Misc/IdealGasEoS.cpp | 56 +- .../CompressibleFlowSolver/Misc/IdealGasEoS.h | 88 +- .../Misc/PengRobinsonEoS.cpp | 15 +- .../Misc/PengRobinsonEoS.h | 76 +- .../Misc/RedlichKwongEoS.cpp | 15 +- .../Misc/RedlichKwongEoS.h | 95 +- .../Misc/VanDerWaalsEoS.cpp | 15 +- .../Misc/VanDerWaalsEoS.h | 38 +- .../Misc/VariableConverter.cpp | 572 +- .../Misc/VariableConverter.h | 138 +- .../Preconditioner/PreconCfs.h | 2 +- .../Preconditioner/PreconCfsBRJ.cpp | 39 +- .../Preconditioner/PreconCfsBRJ.h | 2 +- .../Preconditioner/PreconCfsOp.h | 2 +- .../RiemannSolvers/AUSM0Solver.cpp | 285 +- .../RiemannSolvers/AUSM0Solver.h | 50 +- .../RiemannSolvers/AUSM1Solver.cpp | 285 +- .../RiemannSolvers/AUSM1Solver.h | 50 +- .../RiemannSolvers/AUSM2Solver.cpp | 310 +- .../RiemannSolvers/AUSM2Solver.h | 51 +- .../RiemannSolvers/AUSM3Solver.cpp | 318 +- .../RiemannSolvers/AUSM3Solver.h | 50 +- .../RiemannSolvers/AverageSolver.cpp | 130 +- .../RiemannSolvers/AverageSolver.h | 32 +- .../RiemannSolvers/CompressibleSolver.cpp | 246 +- .../RiemannSolvers/CompressibleSolver.h | 80 +- .../RiemannSolvers/ExactSolverToro.cpp | 604 +- .../RiemannSolvers/ExactSolverToro.h | 44 +- .../RiemannSolvers/HLLCSolver.cpp | 234 +- .../RiemannSolvers/HLLCSolver.h | 35 +- .../RiemannSolvers/HLLSolver.cpp | 205 +- .../RiemannSolvers/HLLSolver.h | 40 +- .../RiemannSolvers/LaxFriedrichsSolver.cpp | 153 +- .../RiemannSolvers/LaxFriedrichsSolver.h | 41 +- .../RiemannSolvers/RoeSolver.cpp | 73 +- .../RiemannSolvers/RoeSolver.h | 126 +- .../RiemannSolvers/RoeSolverSIMD.cpp | 64 +- .../RiemannSolvers/RoeSolverSIMD.h | 19 +- .../RiemannSolvers/UnitTests/TestRiemann.cpp | 743 +- .../RiemannSolvers/UnitTests/main.cpp | 7 +- .../Couette_WeakDG_IP_MODIFIED_Adiabatic.tst | 16 +- .../Couette_WeakDG_IP_MODIFIED_Adiabatic.xml | 10 +- .../Tests/Couette_WeakDG_IP_MODIFIED_IM.tst | 16 +- .../Tests/Couette_WeakDG_IP_MODIFIED_IM.xml | 73 +- .../Couette_WeakDG_IP_MODIFIED_IM_PRECON.tst | 17 +- .../Couette_WeakDG_IP_MODIFIED_IM_PRECON.xml | 73 +- ...eakDG_IP_MODIFIED_IM_PRECON_NonDim_Pri.tst | 42 + ...eakDG_IP_MODIFIED_IM_PRECON_NonDim_Pri.xml | 227 + ...eakDG_IP_MODIFIED_IM_PRECON_NonDim_Tet.tst | 42 + ...eakDG_IP_MODIFIED_IM_PRECON_NonDim_Tet.xml | 260 + ...uette_WeakDG_IP_MODIFIED_IM_PRECON_par.tst | 23 +- .../Couette_WeakDG_IP_MODIFIED_IM_par.tst | 26 +- .../Tests/Couette_WeakDG_LFRHU_SEM.tst | 2 +- .../CylinderSubsonic_NS_WeakDG_IP_GAUSS.tst | 12 +- .../CylinderSubsonic_NS_WeakDG_IP_GAUSS.xml | 5 +- ...erSubsonic_NS_WeakDG_IP_SEM_VariableMu.tst | 25 + ...erSubsonic_NS_WeakDG_IP_SEM_VariableMu.xml | 4159 +++++++ .../CylinderSubsonic_WeakDG_Implicit.tst | 12 +- .../CylinderSubsonic_WeakDG_Implicit.xml | 1 - .../MMS_Compressible_Poiseuille_testIP.tst | 16 +- ....tst => ShockTube_2D_mixedMesh_AV_Lap.tst} | 4 +- ....xml => ShockTube_2D_mixedMesh_AV_Lap.xml} | 0 .../ShockTube_2D_mixedMesh_AV_Lap_NS.tst | 33 + .../ShockTube_2D_mixedMesh_AV_Lap_NS.xml | 128 + .../ShockTube_2D_mixedMesh_AV_Phys_Dil_IP.tst | 24 + .../ShockTube_2D_mixedMesh_AV_Phys_Dil_IP.xml | 132 + ...kTube_2D_mixedMesh_AV_Phys_Dil_IP_Impl.tst | 29 + ...kTube_2D_mixedMesh_AV_Phys_Dil_IP_Impl.xml | 132 + ...ockTube_2D_mixedMesh_AV_Phys_Dil_LDGNS.tst | 24 + ...ockTube_2D_mixedMesh_AV_Phys_Dil_LDGNS.xml | 132 + .../ShockTube_2D_mixedMesh_AV_Phys_Mod_IP.tst | 24 + .../ShockTube_2D_mixedMesh_AV_Phys_Mod_IP.xml | 133 + ...ockTube_2D_mixedMesh_AV_Phys_Mod_LDGNS.tst | 24 + ...ockTube_2D_mixedMesh_AV_Phys_Mod_LDGNS.xml | 132 + .../Tests/TimeDependentAbsorption.tst | 16 +- .../Tests/TimeDependentAbsorption.xml | 1 - .../Tests/UnitTestRiemann.cpp | 17 +- .../Tests/hump3D_SEM_IP.tst | 8 +- .../Tests/implicitSolverCallsSFD.fld | 19 + .../Tests/implicitSolverCallsSFD.tst | 25 + .../Tests/implicitSolverCallsSFD_mesh.xml | 121 + .../Tests/implicitSolverCallsSFD_session.xml | 107 + solvers/CompressibleFlowSolver/Tests/test.opt | 50 + .../Utilities/CompressibleBL.cpp | 445 +- .../Utilities/ExtractSurface2DCFS.cpp | 718 +- .../Utilities/ExtractSurface3DCFS.cpp | 874 +- .../Utilities/TimeRiemann.cpp | 90 +- .../Utilities/TimeRoeKernel.cpp | 107 +- solvers/DiffusionSolver/CMakeLists.txt | 2 +- solvers/DiffusionSolver/DiffusionSolver.cpp | 72 +- .../DiffusionSolverTimeInt.cpp | 164 +- .../EquationSystems/MMFDiffusion.h | 216 +- solvers/DiffusionSolver/MMFDiffusion.cpp | 1409 +-- .../Tests/TestMMFDiffSphere.xml | 2 +- solvers/DiffusionSolver/Tests/test.opt | 50 + solvers/DummySolver/DummySolver.cpp | 2 +- solvers/DummySolver/EquationSystems/Dummy.cpp | 32 +- solvers/DummySolver/EquationSystems/Dummy.h | 13 +- .../DummySolver/Tests/Dummy_3DCubeCwipi.tst | 32 +- solvers/DummySolver/Tests/test.opt | 50 + .../EquationSystems/ImageWarpingSystem.cpp | 370 +- .../EquationSystems/ImageWarpingSystem.h | 85 +- .../ImageWarpingSolver/ImageWarpingSolver.cpp | 6 +- .../AdvectionTerms/AdjointAdvection.cpp | 101 +- .../AdvectionTerms/AdjointAdvection.h | 24 +- .../AdvectionTerms/AlternateSkewAdvection.cpp | 262 +- .../AdvectionTerms/AlternateSkewAdvection.h | 26 +- .../AdvectionTerms/LinearisedAdvection.cpp | 588 +- .../AdvectionTerms/LinearisedAdvection.h | 114 +- .../AdvectionTerms/NavierStokesAdvection.cpp | 439 +- .../AdvectionTerms/NavierStokesAdvection.h | 37 +- .../AdvectionTerms/NoAdvection.cpp | 33 +- .../AdvectionTerms/NoAdvection.h | 29 +- .../AdvectionTerms/SkewSymmetricAdvection.cpp | 315 +- .../AdvectionTerms/SkewSymmetricAdvection.h | 34 +- solvers/IncNavierStokesSolver/CMakeLists.txt | 15 +- .../EquationSystems/CoupledLinearNS.cpp | 3672 +++--- .../EquationSystems/CoupledLinearNS.h | 361 +- .../CoupledLocalToGlobalC0ContMap.cpp | 1653 +-- .../CoupledLocalToGlobalC0ContMap.h | 44 +- .../EquationSystems/Extrapolate.cpp | 1859 +-- .../EquationSystems/Extrapolate.h | 733 +- .../EquationSystems/IncNavierStokes.cpp | 1740 ++- .../EquationSystems/IncNavierStokes.h | 433 +- .../EquationSystems/MappingExtrapolate.cpp | 125 +- .../EquationSystems/MappingExtrapolate.h | 12 +- .../EquationSystems/SmoothedProfileMethod.cpp | 1030 +- .../EquationSystems/SmoothedProfileMethod.h | 233 +- .../EquationSystems/StandardExtrapolate.cpp | 223 +- .../EquationSystems/StandardExtrapolate.h | 134 +- .../SubSteppingExtrapolate.cpp | 731 +- .../EquationSystems/SubSteppingExtrapolate.h | 184 +- .../SubSteppingExtrapolateWeakPressure.cpp | 123 +- .../SubSteppingExtrapolateWeakPressure.h | 86 +- .../EquationSystems/VCSMapping.cpp | 1473 ++- .../EquationSystems/VCSMapping.h | 235 +- .../VelocityCorrectionScheme.cpp | 1759 +-- .../VelocityCorrectionScheme.h | 395 +- .../VelocityCorrectionSchemeWeakPressure.cpp | 195 +- .../VelocityCorrectionSchemeWeakPressure.h | 93 +- .../WeakPressureExtrapolate.cpp | 154 +- .../EquationSystems/WeakPressureExtrapolate.h | 97 +- .../Filters/FilterAeroForcesSPM.cpp | 53 +- .../Filters/FilterAeroForcesSPM.h | 41 +- .../Filters/FilterMovingBody.cpp | 354 +- .../Filters/FilterMovingBody.h | 145 +- .../Filters/FilterReynoldsStresses.cpp | 38 +- .../Filters/FilterReynoldsStresses.h | 20 +- .../Forcing/ForcingMovingBody.cpp | 750 +- .../Forcing/ForcingMovingBody.h | 220 +- .../Forcing/ForcingStabilityCoupledLNS.cpp | 31 +- .../Forcing/ForcingStabilityCoupledLNS.h | 68 +- .../IncNavierStokesSolver.cpp | 24 +- .../Tests/2DFlow_lineforcing_bcfromfile.xml | 2 +- .../Tests/ChanFlow2D_bcsfromfiles.tst | 9 +- .../Tests/ChanFlow2D_bcsfromfiles.xml | 8 +- .../Tests/ChanFlow2D_bcsfromfiles_uforce.fld | 18 + .../Tests/ChanFlow_3DH1D_FFT_SlipWall.tst | 25 + .../Tests/ChanFlow_3DH1D_FFT_SlipWall.xml | 131 + .../Tests/ChanFlow_3DH1D_Parallel_mode1.xml | 10 + .../Tests/ChanFlow_3DH1D_Parallel_mode2.xml | 11 + .../Tests/ChanFlow_Accelerate.tst | 23 + .../Tests/ChanFlow_Accelerate.xml | 135 + .../Tests/ChanFlow_m8.tst | 10 + .../Tests/ChanFlow_m8.xml | 8 + .../Tests/ChanStabilityMaskFunc.tst | 17 + .../Tests/ChanStabilityMaskFunc.xml | 337 + .../Tests/ChannelFlow_Heating_FlowRate.xml | 148 + .../Tests/ChannelSpongeLNSE.tst | 12 +- .../Tests/Channel_Flow_3modes_rad.tst | 14 +- .../Tests/CylFlow2D_CheckpointFilter_Hdf5.tst | 25 + .../Tests/CylFlow2D_CheckpointFilter_Hdf5.xml | 93 + .../Tests/CylFlow_MovBody.tst | 6 +- .../Tests/Hex_channel_m3.xml | 36 +- .../Tests/Hex_channel_m3_par.tst | 2 +- .../Tests/Hex_channel_m3_par.xml | 36 +- .../KovaFlow_3DH2D_xy_FFT_MovRefFrame.tst | 23 + .../KovaFlow_3DH2D_xy_FFT_MovRefFrame.xml | 116 + .../Tests/KovaFlow_expFromFile_par.tst | 2 +- .../Tests/KovaFlow_m3_BlockPreconIterFull.tst | 27 + .../Tests/KovaFlow_m3_GJP.tst | 22 + .../Tests/KovaFlow_m3_GJP.xml | 157 + .../Tests/MovingRefFrame_Rot_SimpleDomain.rst | 19 + .../Tests/MovingRefFrame_Rot_SimpleDomain.tst | 22 + .../Tests/MovingRefFrame_Rot_SimpleDomain.xml | 133 + .../Tests/MovingRefFrame_Rot_naca0012.rst | 20 + .../Tests/MovingRefFrame_Rot_naca0012.tst | 22 + .../Tests/MovingRefFrame_Rot_naca0012.xml | 151 + ...ame.rst => MovingRefFrame_translation.rst} | 0 .../Tests/MovingRefFrame_translation.tst | 23 + ...ame.xml => MovingRefFrame_translation.xml} | 7 +- .../Tests/Moving_reference_frame.tst | 22 - .../Tests/TaylorVor_dt1.tst | 12 +- .../Tests/TaylorVor_dt2.tst | 10 +- .../Tests/Tet_Kovasnay_GJP.tst | 23 + .../Tests/Tet_Kovasnay_GJP.xml | 123 + .../Tests/Tet_hdf5_multilevel_partition.tst | 25 + .../Tests/channelFlow_Heating_FlowRate.tst | 23 + solvers/IncNavierStokesSolver/Tests/test.opt | 50 + .../Utilities/AddModeTo2DFld.cpp | 129 +- .../Utilities/Aliasing.cpp | 83 +- .../Utilities/CFLStep.cpp | 45 +- .../ExtractMeanModeFromHomo1DFld.cpp | 56 +- .../Utilities/Fld2DTo2D5.cpp | 138 +- .../Utilities/FldAddFalknerSkanBL.cpp | 392 +- .../Utilities/NonLinearEnergy.cpp | 93 +- .../EquationSystems/CoupledAssemblyMap.cpp | 95 +- .../EquationSystems/CoupledAssemblyMap.h | 12 +- .../IterativeElasticSystem.cpp | 52 +- .../EquationSystems/IterativeElasticSystem.h | 24 +- .../EquationSystems/LinearElasticSystem.cpp | 382 +- .../EquationSystems/LinearElasticSystem.h | 45 +- .../LinearElasticSolver.cpp | 8 +- .../MMFSolver/EquationSystems/MMFMaxwell.cpp | 55 +- .../MMFSolver/EquationSystems/MMFMaxwell.h | 14 +- solvers/MMFSolver/MMFSolver.cpp | 2 +- solvers/MMFSolver/Tests/test.opt | 50 + solvers/PulseWaveSolver/CMakeLists.txt | 8 + .../EquationSystems/AInflow.cpp | 10 +- .../PulseWaveSolver/EquationSystems/AInflow.h | 11 +- .../EquationSystems/BetaPressureArea.cpp | 157 +- .../EquationSystems/BetaPressureArea.h | 105 +- .../EquationSystems/EmpiricalPressureArea.cpp | 84 +- .../EquationSystems/EmpiricalPressureArea.h | 115 +- .../EquationSystems/PowerPressureArea.cpp | 87 +- .../EquationSystems/PowerPressureArea.h | 121 +- .../EquationSystems/PulseWaveBoundary.cpp | 2 +- .../EquationSystems/PulseWaveBoundary.h | 81 +- .../EquationSystems/PulseWavePressureArea.cpp | 3 +- .../EquationSystems/PulseWavePressureArea.h | 214 +- .../EquationSystems/PulseWavePropagation.cpp | 211 +- .../EquationSystems/PulseWavePropagation.h | 113 +- .../EquationSystems/PulseWaveSystem.cpp | 1392 ++- .../EquationSystems/PulseWaveSystem.h | 319 +- .../EquationSystems/QInflow.cpp | 18 +- .../PulseWaveSolver/EquationSystems/QInflow.h | 56 +- .../EquationSystems/RCROutflow.cpp | 19 +- .../EquationSystems/RCROutflow.h | 61 +- .../EquationSystems/ROutflow.cpp | 24 +- .../EquationSystems/ROutflow.h | 56 +- .../EquationSystems/TemplatePressureArea.cpp | 88 +- .../EquationSystems/TemplatePressureArea.h | 105 +- .../EquationSystems/TerminalOutflow.cpp | 98 +- .../EquationSystems/TerminalOutflow.h | 51 +- .../EquationSystems/TimeDependentInflow.cpp | 13 +- .../EquationSystems/TimeDependentInflow.h | 50 +- .../EquationSystems/UInflow.cpp | 12 +- .../PulseWaveSolver/EquationSystems/UInflow.h | 10 +- .../EquationSystems/UndefinedInOutflow.cpp | 10 +- .../EquationSystems/UndefinedInOutflow.h | 50 +- solvers/PulseWaveSolver/PulseWaveSolver.cpp | 11 +- .../RiemannSolvers/UpwindPulseSolver.cpp | 11 +- .../RiemannSolvers/UpwindPulseSolver.h | 21 +- .../Tests/55_Artery_Network_par.tst | 22 + .../Tests/TwoBifurcations_par.tst | 22 + solvers/PulseWaveSolver/Tests/test.opt | 50 + .../Tests/test_Junction_base.xml | 105 + .../Tests/test_three_Junction_base.xml | 124 + .../PulseWaveSolver/Utilities/CMakeLists.txt | 6 +- .../PulseWaveSolver/Utilities/Fld2Tecplot.cpp | 50 +- .../Utilities/PulseWaveSystemOutput.cpp | 91 +- .../Utilities/PulseWaveSystemOutput.h | 63 +- .../EquationSystems/LinearSWE.cpp | 1180 +- .../EquationSystems/LinearSWE.h | 163 +- .../EquationSystems/MMFSWE.cpp | 42 +- .../EquationSystems/MMFSWE.h | 10 +- .../EquationSystems/NonlinearPeregrine.cpp | 370 +- .../EquationSystems/NonlinearPeregrine.h | 163 +- .../EquationSystems/NonlinearSWE.cpp | 1268 +- .../EquationSystems/NonlinearSWE.h | 133 +- .../EquationSystems/ShallowWaterSystem.cpp | 256 +- .../EquationSystems/ShallowWaterSystem.h | 204 +- .../RiemannSolvers/AverageSolver.cpp | 84 +- .../RiemannSolvers/AverageSolver.h | 40 +- .../RiemannSolvers/HLLCSolver.cpp | 193 +- .../RiemannSolvers/HLLCSolver.h | 38 +- .../RiemannSolvers/HLLSolver.cpp | 160 +- .../RiemannSolvers/HLLSolver.h | 38 +- .../RiemannSolvers/LaxFriedrichsSolver.cpp | 138 +- .../RiemannSolvers/LaxFriedrichsSolver.h | 39 +- .../RiemannSolvers/LinearAverageSolver.cpp | 78 +- .../RiemannSolvers/LinearAverageSolver.h | 42 +- .../RiemannSolvers/LinearHLLSolver.cpp | 116 +- .../RiemannSolvers/LinearHLLSolver.h | 41 +- .../RiemannSolvers/LinearSWESolver.cpp | 81 +- .../RiemannSolvers/LinearSWESolver.h | 64 +- .../RiemannSolvers/NoSolver.cpp | 20 +- .../RiemannSolvers/NoSolver.h | 30 +- .../RiemannSolvers/NonlinearSWESolver.cpp | 72 +- .../RiemannSolvers/NonlinearSWESolver.h | 63 +- .../ShallowWaterSolver/ShallowWaterSolver.cpp | 15 +- solvers/ShallowWaterSolver/Tests/test.opt | 50 + .../CalcL2ToLinfPressure.cpp | 20 +- .../CalcVWIplusPressure.cpp | 17 +- .../ExtractCriticalLayer.cpp | 263 +- .../VortexWaveInteraction.cpp | 3495 +++--- .../VortexWaveInteraction.h | 440 +- .../VortexWaveInteractionSolver.cpp | 266 +- .../utilities/ExpandMeshByRotation.cpp | 466 +- .../utilities/ExtractCriticalLayer.cpp | 67 +- .../ExtractCriticalLayerFunctions.cpp | 132 +- .../utilities/ExtractCriticalLayerFunctions.h | 9 +- .../utilities/MeshMove.cpp | 7385 +++++------ .../utilities/MoveMeshToCriticalLayer.cpp | 446 +- .../executable/EquationSystems/Laplace.cpp | 28 +- .../executable/EquationSystems/Laplace.h | 10 +- templates/executable/ExampleSolver.cpp | 10 +- templates/executable/test.sh | 10 +- tests/CMakeLists.txt | 5 + tests/Metric.cpp | 64 +- tests/Metric.h | 153 +- tests/MetricEigenvalue.cpp | 154 +- tests/MetricEigenvalue.h | 34 +- tests/MetricFile.cpp | 300 +- tests/MetricFile.h | 46 +- tests/MetricFileExists.cpp | 165 + tests/MetricFileExists.h | 67 + tests/MetricL2.cpp | 175 +- tests/MetricL2.h | 38 +- tests/MetricLInf.cpp | 176 +- tests/MetricLInf.h | 36 +- tests/MetricNoWarning.cpp | 349 +- tests/MetricNoWarning.h | 44 +- tests/MetricPrecon.cpp | 118 +- tests/MetricPrecon.h | 30 +- tests/MetricPyUnitTest.cpp | 95 + tests/MetricPyUnitTest.h | 61 + tests/MetricRegex.cpp | 466 +- tests/MetricRegex.h | 76 +- tests/TestData.cpp | 318 +- tests/TestData.h | 80 +- tests/TestException.hpp | 13 +- tests/Tester.cpp.in | 39 + tests/sha1.cpp | 261 +- tests/sha1.h | 44 +- utilities/Extras/CMakeLists.txt | 18 +- utilities/Extras/CheckXmlFile.cpp | 266 +- utilities/Extras/VtkStripsToPolys.cpp | 29 +- utilities/Extras/VtkToFld.cpp | 149 +- utilities/Extras/VtkToPng.cpp | 77 +- utilities/FieldConvert/CMakeLists.txt | 21 +- utilities/FieldConvert/FieldConvert.cpp | 217 +- .../FieldConvert/Tests/Hex_channel_m3.xml | 239 + .../FieldConvert/Tests/Hex_channel_m3_0.chk | 19 + .../Tests/Tet_channel_npart_wss.tst | 2 +- utilities/FieldConvert/Tests/bfs_tg_hdf5.fld | Bin 0 -> 417520 bytes utilities/FieldConvert/Tests/bfs_tg_hdf5.nekg | Bin 0 -> 45604 bytes utilities/FieldConvert/Tests/bfs_tg_hdf5.xml | 71 + .../FieldConvert/Tests/bfs_vtk_rng_hdf5.tst | 21 + .../FieldConvert/Tests/bfs_vtu_multiblock.tst | 17 + utilities/FieldConvert/Tests/bndextract.tst | 101 + utilities/FieldConvert/Tests/chan3D.xml | 6 +- .../FieldConvert/Tests/chan3DH1D_cfl.tst | 23 + .../Tests/chan3DH1D_cfl_meanmode.tst | 22 + .../Tests/chan3DH1D_interppointsbox.tst | 2 +- .../Tests/chan3DH1D_interppointsbox_par.tst | 2 +- .../Tests/chan3DH1D_interppointsplane.tst | 2 +- .../Tests/chan3DH1D_interppointsplane_par.tst | 2 +- .../FieldConvert/Tests/chan3DH1D_vtu.tst | 17 + .../Tests/chan3DH1D_vtu_legacy.tst | 17 + utilities/FieldConvert/Tests/chan3D_cfl.tst | 24 + utilities/FieldConvert/Tests/chan3D_div.tst | 22 + .../Tests/chan3D_interppointdatatofld.tst | 2 +- .../Tests/chan3D_vtu_highorder.tst | 17 + .../interpfield_chan3DH1D_to_chan3DH1D.tst | 31 + .../Tests/interpfield_chan3DH1D_to_hex.tst | 32 + .../Tests/interpfield_hex_to_chan3DH1D.tst | 32 + utilities/FieldConvert/Tests/surfDist.tst | 22 + utilities/FieldConvert/Tests/surfDist.xml | 133 + .../FieldConvert/Tests/taylor_vortex_2D.fld | 19 + .../FieldConvert/Tests/taylor_vortex_2D.xml | 105 + .../Tests/taylor_vortex_2D_div.tst | 20 + .../FieldConvert/Tests/wss_3D_periodic.tst | 6 +- utilities/NekMesh/CMakeLists.txt | 3 + utilities/NekMesh/NekMesh.cpp | 65 +- .../Tests/MeshGen/STEP/2d_circle_square.mcf | 39 + .../Tests/MeshGen/STEP/2d_circle_square.stp | 257 + .../Tests/MeshGen/STEP/2d_circle_square.tst | 20 + .../MeshGen/StarCCM/projectcad_pyramids.STEP | 328 + .../MeshGen/StarCCM/projectcad_pyramids.ccm | Bin 0 -> 319488 bytes .../MeshGen/StarCCM/projectcad_pyramids.tst | 20 + .../Tests/StarTec/peralign_bl_cube.dat | 2 + 2057 files changed, 265768 insertions(+), 229787 deletions(-) create mode 100644 .gitlab-ci/packaging-exclude create mode 100644 .gitlab-ci/packaging.yml create mode 100644 cmake/thirdparty-patches/scotch-6_0_4-flex-2_6_3-yy-compatibility.patch delete mode 100644 docker/nektar-env/Dockerfile_debian_full_py3 delete mode 100644 docker/nektar-env/Dockerfile_ubuntu_full_py3 rename docker/nektar-env/{buster_documentation_packages.txt => bullseye_documentation_packages.txt} (100%) create mode 100644 docker/nektar-env/jammy_default_packages.txt create mode 100644 docker/nektar-env/jammy_full_packages.txt create mode 100644 docker/nektar-workbook/entrypoint.sh create mode 100644 docker/packaging/Dockerfile-centos-7 create mode 100644 docker/packaging/Dockerfile-centos-8 create mode 100644 docker/packaging/Dockerfile-debian-bullseye create mode 100644 docker/packaging/Dockerfile-debian-buster create mode 100644 docker/packaging/Dockerfile-debian-stretch create mode 100644 docker/packaging/Dockerfile-debian-unstable create mode 100644 docker/packaging/Dockerfile-fedora-35 create mode 100644 docker/packaging/Dockerfile-source-archive create mode 100644 docker/packaging/Dockerfile-source-doc create mode 100644 docker/packaging/Dockerfile-ubuntu-bionic create mode 100644 docker/packaging/Dockerfile-ubuntu-focal create mode 100644 docker/packaging/Dockerfile-ubuntu-jammy create mode 100644 docker/packaging/Dockerfile-ubuntu-xenial create mode 100644 docker/packaging/quiltrc create mode 100644 docker/packaging/texlive.profile rename docs/developer-guide/{developers-guide.bib => developer-guide.bib} (86%) rename docs/developer-guide/{developers-guide.tex => developer-guide.tex} (97%) delete mode 100644 docs/developer-guide/memoir.4ht create mode 100644 docs/developer-guide/solvers/img/DataStructureFinal.png create mode 100644 docs/developer-guide/solvers/img/DataStructureFinal.pptx create mode 100644 docs/developer-guide/solvers/img/NS-chart.tex delete mode 100644 docs/user-guide/memoir.4ht create mode 100644 docs/user-guide/solvers/img/CylinderSubsonic.jpeg create mode 100644 docs/user-guide/utilities/img/Car_mesh.png create mode 100644 library/Demos/LibUtilities/MPIInit.cpp create mode 100644 library/Demos/LibUtilities/Tests/MPIInit.tst create mode 100644 library/Demos/MatrixFreeOps/CMakeLists.txt create mode 100644 library/Demos/MatrixFreeOps/Helmholtz2D_MFO.cpp create mode 100644 library/Demos/MatrixFreeOps/Helmholtz3D_MFO.cpp create mode 100644 library/Demos/MatrixFreeOps/MFO_Timing.cpp create mode 100644 library/Demos/MatrixFreeOps/MFO_Timing_3D.cpp create mode 100644 library/Demos/MultiRegions/Tests/test.opt create mode 100644 library/Demos/Python/FieldUtils/Tests/chan3D_div.tst create mode 100644 library/Demos/Python/FieldUtils/Tests/taylor_vortex_2D.fld create mode 100644 library/Demos/Python/FieldUtils/Tests/taylor_vortex_2D.xml create mode 100644 library/Demos/Python/FieldUtils/Tests/taylor_vortex_2D_div.tst create mode 100644 library/Demos/Python/FieldUtils/chan3D_div.py create mode 100644 library/Demos/Python/FieldUtils/taylor_vortex_2D_div.py create mode 100644 library/Demos/Python/LibUtilities/Equation_UnitTest.py create mode 100644 library/Demos/Python/LibUtilities/Interpreter_UnitTest.py create mode 100644 library/Demos/Python/LibUtilities/Tests/Equation_UnitTest.tst create mode 100644 library/Demos/Python/LibUtilities/Tests/Interpreter_UnitTest.tst mode change 100755 => 100644 library/Demos/StdRegions/StdProject.cpp create mode 100644 library/FieldUtils/OutputModules/OutputVtkBase.cpp create mode 100644 library/FieldUtils/OutputModules/OutputVtkBase.h create mode 100644 library/FieldUtils/ProcessModules/ProcessCFL.cpp create mode 100644 library/FieldUtils/ProcessModules/ProcessCFL.h create mode 100644 library/FieldUtils/ProcessModules/ProcessVelocityDivergence.cpp create mode 100644 library/FieldUtils/ProcessModules/ProcessVelocityDivergence.h mode change 100755 => 100644 library/FieldUtils/ProcessModules/ProcessWallNormalData.cpp mode change 100755 => 100644 library/FieldUtils/ProcessModules/ProcessWallNormalData.h create mode 100644 library/LibUtilities/BasicUtils/NekInline.hpp create mode 100644 library/LibUtilities/Python/BasicUtils/Equation.cpp create mode 100644 library/LibUtilities/Python/Interpreter/Interpreter.cpp create mode 100644 library/LibUtilities/SimdLib/sve.hpp delete mode 100644 library/MatrixFreeOps/BwdTrans.cpp delete mode 100644 library/MatrixFreeOps/Helmholtz.cpp create mode 100644 library/MatrixFreeOps/HelmholtzKernels.hpp delete mode 100644 library/MatrixFreeOps/IProductHex.cpp create mode 100644 library/MatrixFreeOps/IProductKernelsImp.hpp delete mode 100644 library/MatrixFreeOps/IProductPrism.cpp delete mode 100644 library/MatrixFreeOps/IProductPyr.cpp delete mode 100644 library/MatrixFreeOps/IProductQuad.cpp delete mode 100644 library/MatrixFreeOps/IProductSeg.cpp delete mode 100644 library/MatrixFreeOps/IProductTet.cpp delete mode 100644 library/MatrixFreeOps/IProductTri.cpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBaseHex.cpp create mode 100644 library/MatrixFreeOps/IProductWRTDerivBaseKernels.hpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBasePrism.cpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBasePyr.cpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBaseQuad.cpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBaseSeg.cpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBaseTet.cpp delete mode 100644 library/MatrixFreeOps/IProductWRTDerivBaseTri.cpp create mode 100644 library/MatrixFreeOps/NektarExpMacros.h create mode 100644 library/MatrixFreeOps/OperatorImp.cpp.in delete mode 100644 library/MatrixFreeOps/PhysDeriv.cpp create mode 100644 library/MatrixFreeOps/SwitchNodesPoints.h create mode 100644 library/MatrixFreeOps/SwitchPoints.h create mode 100644 library/MultiRegions/GJPStabilisation.cpp create mode 100644 library/MultiRegions/GJPStabilisation.h create mode 100644 library/NekMesh/Module/OutputModules/OutputStdOut.cpp create mode 100644 library/NekMesh/Module/OutputModules/OutputStdOut.h create mode 100644 library/SolverUtils/Filters/FilterIntegral.cpp create mode 100644 library/SolverUtils/Filters/FilterIntegral.h create mode 100644 library/SolverUtils/Filters/FilterMaxMinFields.cpp create mode 100644 library/SolverUtils/Filters/FilterMaxMinFields.h delete mode 100644 library/UnitTests/SIMD/TestSimdLib.cpp create mode 100644 library/UnitTests/SIMD/TestSimdLibDouble.cpp create mode 100644 library/UnitTests/SIMD/TestSimdLibSingle.cpp create mode 100644 pkg/README.md create mode 100644 pkg/debian/bullseye/compat create mode 100644 pkg/debian/bullseye/control create mode 100644 pkg/debian/bullseye/copyright create mode 100644 pkg/debian/bullseye/gbp.conf create mode 100644 pkg/debian/bullseye/libnektar++-dev.install create mode 100644 pkg/debian/bullseye/libnektar++-doc.install create mode 100644 pkg/debian/bullseye/libnektar++-doc.lintian-overrides create mode 100644 pkg/debian/bullseye/libnektar++.install create mode 100644 pkg/debian/bullseye/libnektar++.lintian-overrides create mode 100644 pkg/debian/bullseye/nekmesh.install create mode 100644 pkg/debian/bullseye/nekmesh.manpages create mode 100644 pkg/debian/bullseye/nektar++-adr-solver.install create mode 100644 pkg/debian/bullseye/nektar++-adr-solver.manpages create mode 100644 pkg/debian/bullseye/nektar++-cardiacep-solver.install create mode 100644 pkg/debian/bullseye/nektar++-cardiacep-solver.manpages create mode 100644 pkg/debian/bullseye/nektar++-compressibleflow-solver.install create mode 100644 pkg/debian/bullseye/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/debian/bullseye/nektar++-doc.install create mode 100644 pkg/debian/bullseye/nektar++-fieldconvert.install create mode 100644 pkg/debian/bullseye/nektar++-fieldconvert.manpages create mode 100644 pkg/debian/bullseye/nektar++-incnavierstokes-solver.install create mode 100644 pkg/debian/bullseye/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/debian/bullseye/nektar++-pulsewave-solver.install create mode 100644 pkg/debian/bullseye/nektar++-pulsewave-solver.manpages create mode 100644 pkg/debian/bullseye/nektar++-shallowwater-solver.install create mode 100644 pkg/debian/bullseye/nektar++-shallowwater-solver.manpages create mode 100644 pkg/debian/bullseye/nektar++.lintian-overrides create mode 100644 pkg/debian/bullseye/patches/fix-lib-install-path.patch create mode 100644 pkg/debian/bullseye/patches/fix-mpi-allow-root.patch create mode 100644 pkg/debian/bullseye/patches/series create mode 100755 pkg/debian/bullseye/rules create mode 100644 pkg/debian/bullseye/source/format create mode 100644 pkg/debian/buster/compat create mode 100644 pkg/debian/buster/control create mode 100644 pkg/debian/buster/copyright create mode 100644 pkg/debian/buster/gbp.conf create mode 100644 pkg/debian/buster/libnektar++-dev.install create mode 100644 pkg/debian/buster/libnektar++-doc.install create mode 100644 pkg/debian/buster/libnektar++-doc.lintian-overrides create mode 100644 pkg/debian/buster/libnektar++.install create mode 100644 pkg/debian/buster/libnektar++.lintian-overrides create mode 100644 pkg/debian/buster/nekmesh.install create mode 100644 pkg/debian/buster/nekmesh.manpages create mode 100644 pkg/debian/buster/nektar++-adr-solver.install create mode 100644 pkg/debian/buster/nektar++-adr-solver.manpages create mode 100644 pkg/debian/buster/nektar++-cardiacep-solver.install create mode 100644 pkg/debian/buster/nektar++-cardiacep-solver.manpages create mode 100644 pkg/debian/buster/nektar++-compressibleflow-solver.install create mode 100644 pkg/debian/buster/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/debian/buster/nektar++-doc.install create mode 100644 pkg/debian/buster/nektar++-fieldconvert.install create mode 100644 pkg/debian/buster/nektar++-fieldconvert.manpages create mode 100644 pkg/debian/buster/nektar++-incnavierstokes-solver.install create mode 100644 pkg/debian/buster/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/debian/buster/nektar++-pulsewave-solver.install create mode 100644 pkg/debian/buster/nektar++-pulsewave-solver.manpages create mode 100644 pkg/debian/buster/nektar++-shallowwater-solver.install create mode 100644 pkg/debian/buster/nektar++-shallowwater-solver.manpages create mode 100644 pkg/debian/buster/nektar++.lintian-overrides create mode 100644 pkg/debian/buster/patches/fix-lib-install-path.patch create mode 100644 pkg/debian/buster/patches/fix-mpi-allow-root.patch create mode 100644 pkg/debian/buster/patches/series create mode 100755 pkg/debian/buster/rules create mode 100644 pkg/debian/buster/source/format create mode 100644 pkg/debian/changelog create mode 100644 pkg/debian/stretch/compat create mode 100644 pkg/debian/stretch/control create mode 100644 pkg/debian/stretch/copyright create mode 100644 pkg/debian/stretch/gbp.conf create mode 100644 pkg/debian/stretch/libnektar++-dev.install create mode 100644 pkg/debian/stretch/libnektar++-doc.install create mode 100644 pkg/debian/stretch/libnektar++-doc.lintian-overrides create mode 100644 pkg/debian/stretch/libnektar++.install create mode 100644 pkg/debian/stretch/libnektar++.lintian-overrides create mode 100644 pkg/debian/stretch/nekmesh.install create mode 100644 pkg/debian/stretch/nekmesh.manpages create mode 100644 pkg/debian/stretch/nektar++-adr-solver.install create mode 100644 pkg/debian/stretch/nektar++-adr-solver.manpages create mode 100644 pkg/debian/stretch/nektar++-cardiacep-solver.install create mode 100644 pkg/debian/stretch/nektar++-cardiacep-solver.manpages create mode 100644 pkg/debian/stretch/nektar++-compressibleflow-solver.install create mode 100644 pkg/debian/stretch/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/debian/stretch/nektar++-doc.install create mode 100644 pkg/debian/stretch/nektar++-fieldconvert.install create mode 100644 pkg/debian/stretch/nektar++-fieldconvert.manpages create mode 100644 pkg/debian/stretch/nektar++-incnavierstokes-solver.install create mode 100644 pkg/debian/stretch/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/debian/stretch/nektar++-pulsewave-solver.install create mode 100644 pkg/debian/stretch/nektar++-pulsewave-solver.manpages create mode 100644 pkg/debian/stretch/nektar++-shallowwater-solver.install create mode 100644 pkg/debian/stretch/nektar++-shallowwater-solver.manpages create mode 100644 pkg/debian/stretch/nektar++.lintian-overrides create mode 100644 pkg/debian/stretch/patches/fix-lib-install-path.patch create mode 100644 pkg/debian/stretch/patches/fix-mpi-allow-root.patch create mode 100644 pkg/debian/stretch/patches/series create mode 100755 pkg/debian/stretch/rules create mode 100644 pkg/debian/stretch/source/format create mode 100644 pkg/debian/unstable/compat create mode 100644 pkg/debian/unstable/control create mode 100644 pkg/debian/unstable/copyright create mode 100644 pkg/debian/unstable/gbp.conf create mode 100644 pkg/debian/unstable/libnektar++-dev.install create mode 100644 pkg/debian/unstable/libnektar++-doc.install create mode 100644 pkg/debian/unstable/libnektar++-doc.lintian-overrides create mode 100644 pkg/debian/unstable/libnektar++.install create mode 100644 pkg/debian/unstable/libnektar++.lintian-overrides create mode 100644 pkg/debian/unstable/nekmesh.install create mode 100644 pkg/debian/unstable/nekmesh.manpages create mode 100644 pkg/debian/unstable/nektar++-adr-solver.install create mode 100644 pkg/debian/unstable/nektar++-adr-solver.manpages create mode 100644 pkg/debian/unstable/nektar++-cardiacep-solver.install create mode 100644 pkg/debian/unstable/nektar++-cardiacep-solver.manpages create mode 100644 pkg/debian/unstable/nektar++-compressibleflow-solver.install create mode 100644 pkg/debian/unstable/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/debian/unstable/nektar++-doc.install create mode 100644 pkg/debian/unstable/nektar++-fieldconvert.install create mode 100644 pkg/debian/unstable/nektar++-fieldconvert.manpages create mode 100644 pkg/debian/unstable/nektar++-incnavierstokes-solver.install create mode 100644 pkg/debian/unstable/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/debian/unstable/nektar++-pulsewave-solver.install create mode 100644 pkg/debian/unstable/nektar++-pulsewave-solver.manpages create mode 100644 pkg/debian/unstable/nektar++-shallowwater-solver.install create mode 100644 pkg/debian/unstable/nektar++-shallowwater-solver.manpages create mode 100644 pkg/debian/unstable/nektar++.lintian-overrides create mode 100644 pkg/debian/unstable/patches/fix-lib-install-path.patch create mode 100644 pkg/debian/unstable/patches/fix-mpi-allow-root.patch create mode 100644 pkg/debian/unstable/patches/series create mode 100755 pkg/debian/unstable/rules create mode 100644 pkg/debian/unstable/source/format create mode 100644 pkg/redhat/nektar-centos-7.spec create mode 100644 pkg/redhat/nektar-centos-8.spec create mode 100644 pkg/redhat/nektar-fedora-35.spec create mode 100644 pkg/redhat/version-tracker.py create mode 100644 pkg/ubuntu/bionic/compat create mode 100644 pkg/ubuntu/bionic/control create mode 100644 pkg/ubuntu/bionic/copyright create mode 100644 pkg/ubuntu/bionic/gbp.conf create mode 100644 pkg/ubuntu/bionic/libnektar++-dev.install create mode 100644 pkg/ubuntu/bionic/libnektar++-doc.install create mode 100644 pkg/ubuntu/bionic/libnektar++-doc.lintian-overrides create mode 100644 pkg/ubuntu/bionic/libnektar++.install create mode 100644 pkg/ubuntu/bionic/libnektar++.lintian-overrides create mode 100644 pkg/ubuntu/bionic/nekmesh.install create mode 100644 pkg/ubuntu/bionic/nekmesh.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-adr-solver.install create mode 100644 pkg/ubuntu/bionic/nektar++-adr-solver.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-cardiacep-solver.install create mode 100644 pkg/ubuntu/bionic/nektar++-cardiacep-solver.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-compressibleflow-solver.install create mode 100644 pkg/ubuntu/bionic/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-doc.install create mode 100644 pkg/ubuntu/bionic/nektar++-fieldconvert.install create mode 100644 pkg/ubuntu/bionic/nektar++-fieldconvert.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-incnavierstokes-solver.install create mode 100644 pkg/ubuntu/bionic/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-pulsewave-solver.install create mode 100644 pkg/ubuntu/bionic/nektar++-pulsewave-solver.manpages create mode 100644 pkg/ubuntu/bionic/nektar++-shallowwater-solver.install create mode 100644 pkg/ubuntu/bionic/nektar++-shallowwater-solver.manpages create mode 100644 pkg/ubuntu/bionic/nektar++.lintian-overrides create mode 100644 pkg/ubuntu/bionic/patches/fix-lib-install-path.patch create mode 100644 pkg/ubuntu/bionic/patches/fix-mpi-allow-root.patch create mode 100644 pkg/ubuntu/bionic/patches/series create mode 100755 pkg/ubuntu/bionic/rules create mode 100644 pkg/ubuntu/bionic/source/format create mode 100644 pkg/ubuntu/focal/compat create mode 100644 pkg/ubuntu/focal/control create mode 100644 pkg/ubuntu/focal/copyright create mode 100644 pkg/ubuntu/focal/gbp.conf create mode 100644 pkg/ubuntu/focal/libnektar++-dev.install create mode 100644 pkg/ubuntu/focal/libnektar++-doc.install create mode 100644 pkg/ubuntu/focal/libnektar++-doc.lintian-overrides create mode 100644 pkg/ubuntu/focal/libnektar++.install create mode 100644 pkg/ubuntu/focal/libnektar++.lintian-overrides create mode 100644 pkg/ubuntu/focal/nekmesh.install create mode 100644 pkg/ubuntu/focal/nekmesh.manpages create mode 100644 pkg/ubuntu/focal/nektar++-adr-solver.install create mode 100644 pkg/ubuntu/focal/nektar++-adr-solver.manpages create mode 100644 pkg/ubuntu/focal/nektar++-cardiacep-solver.install create mode 100644 pkg/ubuntu/focal/nektar++-cardiacep-solver.manpages create mode 100644 pkg/ubuntu/focal/nektar++-compressibleflow-solver.install create mode 100644 pkg/ubuntu/focal/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/ubuntu/focal/nektar++-doc.install create mode 100644 pkg/ubuntu/focal/nektar++-fieldconvert.install create mode 100644 pkg/ubuntu/focal/nektar++-fieldconvert.manpages create mode 100644 pkg/ubuntu/focal/nektar++-incnavierstokes-solver.install create mode 100644 pkg/ubuntu/focal/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/ubuntu/focal/nektar++-pulsewave-solver.install create mode 100644 pkg/ubuntu/focal/nektar++-pulsewave-solver.manpages create mode 100644 pkg/ubuntu/focal/nektar++-shallowwater-solver.install create mode 100644 pkg/ubuntu/focal/nektar++-shallowwater-solver.manpages create mode 100644 pkg/ubuntu/focal/nektar++.lintian-overrides create mode 100644 pkg/ubuntu/focal/patches/fix-lib-install-path.patch create mode 100644 pkg/ubuntu/focal/patches/fix-mpi-allow-root.patch create mode 100644 pkg/ubuntu/focal/patches/series create mode 100755 pkg/ubuntu/focal/rules create mode 100644 pkg/ubuntu/focal/source/format create mode 100644 pkg/ubuntu/jammy/compat create mode 100644 pkg/ubuntu/jammy/control create mode 100644 pkg/ubuntu/jammy/copyright create mode 100644 pkg/ubuntu/jammy/gbp.conf create mode 100644 pkg/ubuntu/jammy/libnektar++-dev.install create mode 100644 pkg/ubuntu/jammy/libnektar++-doc.install create mode 100644 pkg/ubuntu/jammy/libnektar++-doc.lintian-overrides create mode 100644 pkg/ubuntu/jammy/libnektar++.install create mode 100644 pkg/ubuntu/jammy/libnektar++.lintian-overrides create mode 100644 pkg/ubuntu/jammy/nekmesh.install create mode 100644 pkg/ubuntu/jammy/nekmesh.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-adr-solver.install create mode 100644 pkg/ubuntu/jammy/nektar++-adr-solver.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-cardiacep-solver.install create mode 100644 pkg/ubuntu/jammy/nektar++-cardiacep-solver.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-compressibleflow-solver.install create mode 100644 pkg/ubuntu/jammy/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-doc.install create mode 100644 pkg/ubuntu/jammy/nektar++-fieldconvert.install create mode 100644 pkg/ubuntu/jammy/nektar++-fieldconvert.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-incnavierstokes-solver.install create mode 100644 pkg/ubuntu/jammy/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-pulsewave-solver.install create mode 100644 pkg/ubuntu/jammy/nektar++-pulsewave-solver.manpages create mode 100644 pkg/ubuntu/jammy/nektar++-shallowwater-solver.install create mode 100644 pkg/ubuntu/jammy/nektar++-shallowwater-solver.manpages create mode 100644 pkg/ubuntu/jammy/nektar++.lintian-overrides create mode 100644 pkg/ubuntu/jammy/patches/fix-lib-install-path.patch create mode 100644 pkg/ubuntu/jammy/patches/fix-mpi-allow-root.patch create mode 100644 pkg/ubuntu/jammy/patches/series create mode 100755 pkg/ubuntu/jammy/rules create mode 100644 pkg/ubuntu/jammy/source/format create mode 100644 pkg/ubuntu/xenial/compat create mode 100644 pkg/ubuntu/xenial/control create mode 100644 pkg/ubuntu/xenial/copyright create mode 100644 pkg/ubuntu/xenial/gbp.conf create mode 100644 pkg/ubuntu/xenial/libnektar++-dev.install create mode 100644 pkg/ubuntu/xenial/libnektar++-doc.install create mode 100644 pkg/ubuntu/xenial/libnektar++-doc.lintian-overrides create mode 100644 pkg/ubuntu/xenial/libnektar++.install create mode 100644 pkg/ubuntu/xenial/libnektar++.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nekmesh.install create mode 100644 pkg/ubuntu/xenial/nekmesh.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nekmesh.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-adr-solver.install create mode 100644 pkg/ubuntu/xenial/nektar++-adr-solver.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-adr-solver.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-cardiacep-solver.install create mode 100644 pkg/ubuntu/xenial/nektar++-cardiacep-solver.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-cardiacep-solver.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-compressibleflow-solver.install create mode 100644 pkg/ubuntu/xenial/nektar++-compressibleflow-solver.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-compressibleflow-solver.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-doc.install create mode 100644 pkg/ubuntu/xenial/nektar++-fieldconvert.install create mode 100644 pkg/ubuntu/xenial/nektar++-fieldconvert.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-fieldconvert.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-incnavierstokes-solver.install create mode 100644 pkg/ubuntu/xenial/nektar++-incnavierstokes-solver.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-incnavierstokes-solver.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-pulsewave-solver.install create mode 100644 pkg/ubuntu/xenial/nektar++-pulsewave-solver.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-pulsewave-solver.manpages create mode 100644 pkg/ubuntu/xenial/nektar++-shallowwater-solver.install create mode 100644 pkg/ubuntu/xenial/nektar++-shallowwater-solver.lintian-overrides create mode 100644 pkg/ubuntu/xenial/nektar++-shallowwater-solver.manpages create mode 100644 pkg/ubuntu/xenial/nektar++.lintian-overrides create mode 100644 pkg/ubuntu/xenial/patches/fix-lib-install-path.patch create mode 100644 pkg/ubuntu/xenial/patches/fix-mpi-allow-root.patch create mode 100644 pkg/ubuntu/xenial/patches/series create mode 100755 pkg/ubuntu/xenial/rules create mode 100644 pkg/ubuntu/xenial/source/format create mode 100644 solvers/ADRSolver/Tests/AdvDiff3D_AllElmt_GJP.tst create mode 100644 solvers/ADRSolver/Tests/AdvDiff3D_AllElmt_GJP.xml create mode 100644 solvers/ADRSolver/Tests/AdvDiff_QuadTri_GJP.tst create mode 100644 solvers/ADRSolver/Tests/AdvDiff_QuadTri_GJP.xml create mode 100644 solvers/ADRSolver/Tests/Advection2D_Quad_GJP.tst create mode 100644 solvers/ADRSolver/Tests/Advection2D_Quad_GJP.xml create mode 100644 solvers/ADRSolver/Tests/Advection2D_Tri_GJP.tst create mode 100644 solvers/ADRSolver/Tests/Advection2D_Tri_GJP.xml create mode 100644 solvers/ADRSolver/Tests/Advection3D_2_2_hex.xml create mode 100644 solvers/ADRSolver/Tests/Advection3D_AllElmt_GJP.tst create mode 100644 solvers/ADRSolver/Tests/Advection3D_AllElmt_GJP.xml create mode 100644 solvers/ADRSolver/Tests/Advection3D_DG_prism.tst create mode 100644 solvers/ADRSolver/Tests/Advection3D_DG_prism.xml create mode 100644 solvers/ADRSolver/Tests/Helmholtz1D_800modes.tst create mode 100644 solvers/ADRSolver/Tests/Helmholtz1D_800modes.xml create mode 100644 solvers/ADRSolver/Tests/test.opt create mode 100644 solvers/AcousticSolver/Tests/test.opt mode change 100755 => 100644 solvers/CompressibleFlowSolver/CompressibleFlowSolver.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/CompressibleFlowSystem.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/CompressibleFlowSystem.h mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/CompressibleFlowSystemImplicit.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/CompressibleFlowSystemImplicit.h mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/EulerCFE.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/EulerCFE.h mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/IsentropicVortex.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/IsentropicVortex.h mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/NavierStokesCFE.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/NavierStokesCFE.h mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/NavierStokesCFEAxisym.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/NavierStokesCFEAxisym.h mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/RinglebFlow.cpp mode change 100755 => 100644 solvers/CompressibleFlowSolver/EquationSystems/RinglebFlow.h create mode 100644 solvers/CompressibleFlowSolver/Tests/Couette_WeakDG_IP_MODIFIED_IM_PRECON_NonDim_Pri.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/Couette_WeakDG_IP_MODIFIED_IM_PRECON_NonDim_Pri.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/Couette_WeakDG_IP_MODIFIED_IM_PRECON_NonDim_Tet.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/Couette_WeakDG_IP_MODIFIED_IM_PRECON_NonDim_Tet.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/CylinderSubsonic_NS_WeakDG_IP_SEM_VariableMu.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/CylinderSubsonic_NS_WeakDG_IP_SEM_VariableMu.xml rename solvers/CompressibleFlowSolver/Tests/{ShockTube_2D_mixedMesh_Lap.tst => ShockTube_2D_mixedMesh_AV_Lap.tst} (95%) rename solvers/CompressibleFlowSolver/Tests/{ShockTube_2D_mixedMesh_Lap.xml => ShockTube_2D_mixedMesh_AV_Lap.xml} (100%) create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Lap_NS.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Lap_NS.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Dil_IP.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Dil_IP.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Dil_IP_Impl.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Dil_IP_Impl.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Dil_LDGNS.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Dil_LDGNS.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Mod_IP.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Mod_IP.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Mod_LDGNS.tst create mode 100644 solvers/CompressibleFlowSolver/Tests/ShockTube_2D_mixedMesh_AV_Phys_Mod_LDGNS.xml create mode 100755 solvers/CompressibleFlowSolver/Tests/implicitSolverCallsSFD.fld create mode 100644 solvers/CompressibleFlowSolver/Tests/implicitSolverCallsSFD.tst create mode 100755 solvers/CompressibleFlowSolver/Tests/implicitSolverCallsSFD_mesh.xml create mode 100755 solvers/CompressibleFlowSolver/Tests/implicitSolverCallsSFD_session.xml create mode 100644 solvers/CompressibleFlowSolver/Tests/test.opt mode change 100755 => 100644 solvers/DiffusionSolver/EquationSystems/MMFDiffusion.h mode change 100755 => 100644 solvers/DiffusionSolver/MMFDiffusion.cpp create mode 100644 solvers/DiffusionSolver/Tests/test.opt create mode 100644 solvers/DummySolver/Tests/test.opt create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanFlow2D_bcsfromfiles_uforce.fld create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanFlow_3DH1D_FFT_SlipWall.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanFlow_3DH1D_FFT_SlipWall.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanFlow_Accelerate.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanFlow_Accelerate.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanStabilityMaskFunc.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/ChanStabilityMaskFunc.xml create mode 100755 solvers/IncNavierStokesSolver/Tests/ChannelFlow_Heating_FlowRate.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/CylFlow2D_CheckpointFilter_Hdf5.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/CylFlow2D_CheckpointFilter_Hdf5.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/KovaFlow_3DH2D_xy_FFT_MovRefFrame.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/KovaFlow_3DH2D_xy_FFT_MovRefFrame.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/KovaFlow_m3_BlockPreconIterFull.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/KovaFlow_m3_GJP.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/KovaFlow_m3_GJP.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_Rot_SimpleDomain.rst create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_Rot_SimpleDomain.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_Rot_SimpleDomain.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_Rot_naca0012.rst create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_Rot_naca0012.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_Rot_naca0012.xml rename solvers/IncNavierStokesSolver/Tests/{Moving_reference_frame.rst => MovingRefFrame_translation.rst} (100%) create mode 100644 solvers/IncNavierStokesSolver/Tests/MovingRefFrame_translation.tst rename solvers/IncNavierStokesSolver/Tests/{Moving_reference_frame.xml => MovingRefFrame_translation.xml} (99%) delete mode 100644 solvers/IncNavierStokesSolver/Tests/Moving_reference_frame.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/Tet_Kovasnay_GJP.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/Tet_Kovasnay_GJP.xml create mode 100644 solvers/IncNavierStokesSolver/Tests/Tet_hdf5_multilevel_partition.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/channelFlow_Heating_FlowRate.tst create mode 100644 solvers/IncNavierStokesSolver/Tests/test.opt create mode 100644 solvers/MMFSolver/Tests/test.opt mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/BetaPressureArea.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/BetaPressureArea.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWaveBoundary.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWaveBoundary.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWavePressureArea.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWavePressureArea.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWavePropagation.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWavePropagation.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWaveSystem.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/PulseWaveSystem.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/QInflow.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/QInflow.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/RCROutflow.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/ROutflow.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/ROutflow.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/TerminalOutflow.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/TerminalOutflow.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/TimeDependentInflow.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/TimeDependentInflow.h mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/UndefinedInOutflow.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/EquationSystems/UndefinedInOutflow.h mode change 100755 => 100644 solvers/PulseWaveSolver/PulseWaveSolver.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/RiemannSolvers/UpwindPulseSolver.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/RiemannSolvers/UpwindPulseSolver.h create mode 100644 solvers/PulseWaveSolver/Tests/55_Artery_Network_par.tst create mode 100644 solvers/PulseWaveSolver/Tests/TwoBifurcations_par.tst create mode 100644 solvers/PulseWaveSolver/Tests/test.opt create mode 100644 solvers/PulseWaveSolver/Tests/test_Junction_base.xml create mode 100644 solvers/PulseWaveSolver/Tests/test_three_Junction_base.xml mode change 100755 => 100644 solvers/PulseWaveSolver/Utilities/Fld2Tecplot.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/Utilities/PulseWaveSystemOutput.cpp mode change 100755 => 100644 solvers/PulseWaveSolver/Utilities/PulseWaveSystemOutput.h create mode 100644 solvers/ShallowWaterSolver/Tests/test.opt create mode 100644 tests/MetricFileExists.cpp create mode 100644 tests/MetricFileExists.h create mode 100644 tests/MetricPyUnitTest.cpp create mode 100644 tests/MetricPyUnitTest.h create mode 100644 utilities/FieldConvert/Tests/Hex_channel_m3.xml create mode 100644 utilities/FieldConvert/Tests/Hex_channel_m3_0.chk create mode 100644 utilities/FieldConvert/Tests/bfs_tg_hdf5.fld create mode 100644 utilities/FieldConvert/Tests/bfs_tg_hdf5.nekg create mode 100644 utilities/FieldConvert/Tests/bfs_tg_hdf5.xml create mode 100644 utilities/FieldConvert/Tests/bfs_vtk_rng_hdf5.tst create mode 100644 utilities/FieldConvert/Tests/bfs_vtu_multiblock.tst create mode 100644 utilities/FieldConvert/Tests/bndextract.tst create mode 100644 utilities/FieldConvert/Tests/chan3DH1D_cfl.tst create mode 100644 utilities/FieldConvert/Tests/chan3DH1D_cfl_meanmode.tst create mode 100644 utilities/FieldConvert/Tests/chan3DH1D_vtu.tst create mode 100644 utilities/FieldConvert/Tests/chan3DH1D_vtu_legacy.tst create mode 100644 utilities/FieldConvert/Tests/chan3D_cfl.tst create mode 100644 utilities/FieldConvert/Tests/chan3D_div.tst create mode 100644 utilities/FieldConvert/Tests/chan3D_vtu_highorder.tst create mode 100644 utilities/FieldConvert/Tests/interpfield_chan3DH1D_to_chan3DH1D.tst create mode 100644 utilities/FieldConvert/Tests/interpfield_chan3DH1D_to_hex.tst create mode 100644 utilities/FieldConvert/Tests/interpfield_hex_to_chan3DH1D.tst create mode 100644 utilities/FieldConvert/Tests/surfDist.tst create mode 100644 utilities/FieldConvert/Tests/surfDist.xml create mode 100644 utilities/FieldConvert/Tests/taylor_vortex_2D.fld create mode 100644 utilities/FieldConvert/Tests/taylor_vortex_2D.xml create mode 100644 utilities/FieldConvert/Tests/taylor_vortex_2D_div.tst create mode 100644 utilities/NekMesh/Tests/MeshGen/STEP/2d_circle_square.mcf create mode 100644 utilities/NekMesh/Tests/MeshGen/STEP/2d_circle_square.stp create mode 100644 utilities/NekMesh/Tests/MeshGen/STEP/2d_circle_square.tst create mode 100755 utilities/NekMesh/Tests/MeshGen/StarCCM/projectcad_pyramids.STEP create mode 100755 utilities/NekMesh/Tests/MeshGen/StarCCM/projectcad_pyramids.ccm create mode 100644 utilities/NekMesh/Tests/MeshGen/StarCCM/projectcad_pyramids.tst diff --git a/.clang-format b/.clang-format index 035851183..00b2824f5 100644 --- a/.clang-format +++ b/.clang-format @@ -14,3 +14,4 @@ IndentCaseLabels: true Standard: Cpp11 AccessModifierOffset: -4 BinPackParameters: true +NamespaceIndentation: None diff --git a/.dockerignore b/.dockerignore index 9ca800161..b8ec92363 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,7 +10,7 @@ builds # Make sure Dockerfiles aren't included in build context to # improve caching. -pkg/docker/nektar/Dockerfile -pkg/docker/nektar-workbook/Dockerfile -pkg/docker/nektar-env/Dockerfile - +docker/nektar/Dockerfile +docker/nektar-dev/Dockerfile +docker/nektar-workbook/Dockerfile +docker/nektar-env/Dockerfile diff --git a/.gitattributes b/.gitattributes index 42a08e3a3..c1fccf87e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,6 @@ # Files to ignore for export .gitlab-ci.yml export-ignore +.gitlab-ci/ export-ignore .gitignore export-ignore .gitattributes export-ignore .gitmodules export-ignore diff --git a/.gitignore b/.gitignore index 9f608ea04..54b93cb42 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ ThirdParty # Sublime project files *.sublime-project *.sublime-workspace +# CLion build directories +cmake-build-* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index df4dba259..c724d0bf7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,14 +1,35 @@ +workflow: + rules: + # Run pipeline on tags for the main project + - if: $CI_COMMIT_TAG && $CI_PROJECT_PATH == "nektar/nektar" + # Run pipeline on the default branch for the main project + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PROJECT_PATH == "nektar/nektar" + # DO NOT run pipeline if WIP + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^WIP:.*/ + when: never + # DO NOT run pipeline if Draft + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^Draft:.*/ + when: never + # Other merge requests trigger pipelines + - if: $CI_PIPELINE_SOURCE == "merge_request_event" + # Manual runs + - if: $CI_PIPELINE_SOURCE == "web" + stages: - build-env-default - build-env-full - build-and-test - - compiler-warnings + - quality-checks - package-env - package-build - package-build-dev - package-test + - package-deploy-dev - package-deploy +include: + - local: .gitlab-ci/packaging.yml + .execution-conditions: &execution-conditions only: refs: @@ -29,8 +50,6 @@ stages: - .gitmodules - .gitlab-ci.yml - CMakeLists.txt - variables: - - $CI_MERGE_REQUEST_TITLE !~ /^WIP:.*/ .build-env-template: &build-env-template <<: *execution-conditions @@ -48,7 +67,7 @@ stages: - OS_VERSION=$(echo $CI_JOB_NAME | cut -d- -f 1) - BUILD_TYPE=$(echo $CI_JOB_NAME | cut -d- -f 2) - export CCACHE_DIR=/cache/nektar/$OS_VERSION/ - - export NUM_CPUS=4 + - export NUM_CPUS=8 - export CONTAINER_NAME=test-$CI_JOB_ID - export ENV_NAME=env-${OS_VERSION}-${BUILD_TYPE} - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY @@ -59,6 +78,10 @@ stages: - if [ ! -d $CCACHE_DIR ]; then mkdir -p $CCACHE_DIR && chown 1000:1000 $CCACHE_DIR; fi - docker run --name $CONTAINER_NAME -v ccache:/cache -e "BUILD_TYPE=$BUILD_TYPE" + -e "BUILD_SIMD=$BUILD_SIMD" + -e "BUILD_CC=$BUILD_CC" + -e "BUILD_CXX=$BUILD_CXX" + -e "BUILD_FC=$BUILD_FC" -e "NUM_CPUS=$NUM_CPUS" -e "CCACHE_DIR=$CCACHE_DIR" $ENV_IMAGE @@ -86,7 +109,7 @@ stages: .compiler-warning-template: &compiler-warning-template <<: *execution-conditions image: debian:10-slim - stage: compiler-warnings + stage: quality-checks variables: WARNING_REGEX: '.*warning[: ].*' GIT_STRATEGY: none @@ -102,6 +125,23 @@ stages: allow_failure: true timeout: 15m +.clang-format-template: &clang-format-template + <<: *execution-conditions + image: debian:11-slim + stage: quality-checks + variables: + CL_F_VER: 11 + TARGETS: library + before_script: + - apt-get update && apt-get install -y clang-format-$CL_F_VER git-core + script: + - echo `which clang-format-$CL_F_VER` + - ln -s `which clang-format-$CL_F_VER` /usr/bin/clang-format + - cd "$CI_PROJECT_DIR" + - find $TARGETS -iname "*.cpp" -o -iname "*.h" -o -iname "*.hpp" | xargs clang-format-11 --dry-run -Werror + allow_failure: true + timeout: 15m + ################################################ ################### DEBIAN ################### ################################################ @@ -129,7 +169,7 @@ stages: bullseye-default-build-env: <<: *build-env-debian-template-default -bullseye-full_py3-build-env: +bullseye-full-build-env: <<: *build-env-debian-template-full variables: OS_DISTRO: debian @@ -154,9 +194,25 @@ bullseye-default-build-and-test: <<: *build-and-test-template needs: ["bullseye-default-build-env"] -bullseye-full_py3-build-and-test: +bullseye-full-build-and-test: <<: *build-and-test-template - needs: ["bullseye-full_py3-build-env"] + needs: ["bullseye-full-build-env"] + +bullseye-full-avx2-build-and-test: + <<: *build-and-test-template + needs: ["bullseye-full-build-env"] + variables: + BUILD_SIMD: avx2 + tags: + - avx2 + +bullseye-full-avx512-build-and-test: + <<: *build-and-test-template + needs: ["bullseye-full-build-env"] + variables: + BUILD_SIMD: avx512 + tags: + - avx512 buster-default-build-and-test: <<: *build-and-test-template @@ -183,9 +239,13 @@ bullseye-default-warnings: <<: *compiler-warning-template needs: ["bullseye-default-build-and-test"] -bullseye-full_py3-warnings: +bullseye-full-warnings: + <<: *compiler-warning-template + needs: ["bullseye-full-build-and-test"] + +bullseye-full-avx2-warnings: <<: *compiler-warning-template - needs: ["bullseye-full_py3-build-and-test"] + needs: ["bullseye-full-avx2-build-and-test"] buster-default-warnings: <<: *compiler-warning-template @@ -204,7 +264,14 @@ stretch-full-warnings: needs: ["stretch-full-build-and-test"] -buster-documentation-build-env: +# CODE FORMATTING +bullseye-clang-format: + <<: *clang-format-template + needs: [] + + +# DOCUMENTATION +bullseye-documentation-build-env: <<: *execution-conditions image: docker:19.03.6 stage: build-env-full @@ -215,12 +282,12 @@ buster-documentation-build-env: - docker pull $IMAGE || true - docker build --pull -t $IMAGE . - docker push $IMAGE - needs: ["buster-default-build-env"] + needs: ["bullseye-default-build-env"] .build-documentation-template: &build-documentation-template <<: *build-and-test-template image: $CI_REGISTRY_IMAGE:env-documentation - needs: ["buster-documentation-build-env"] + needs: ["bullseye-documentation-build-env"] user-guide-build: <<: *build-documentation-template @@ -272,10 +339,17 @@ tutorials-build: <<: *build-env-ubuntu-template-default stage: build-env-full +jammy-default-build-env: + <<: *build-env-ubuntu-template-default + +jammy-full-build-env: + <<: *build-env-ubuntu-template-full + needs: ["jammy-default-build-env"] + focal-default-build-env: <<: *build-env-ubuntu-template-default -focal-full_py3-build-env: +focal-full-build-env: <<: *build-env-ubuntu-template-full needs: ["focal-default-build-env"] @@ -286,13 +360,48 @@ bionic-full-build-env: <<: *build-env-ubuntu-template-full needs: ["bionic-default-build-env"] +jammy-default-build-and-test: + <<: *build-and-test-template + needs: ["jammy-default-build-env"] + +jammy-full-build-and-test: + <<: *build-and-test-template + needs: ["jammy-full-build-env"] + +jammy-full-clang14-build-and-test: + <<: *build-and-test-template + needs: ["jammy-full-build-env"] + variables: + BUILD_CC: clang-14 + BUILD_CXX: clang++-14 + +jammy-full-clang14-avx2-build-and-test: + <<: *build-and-test-template + needs: ["jammy-full-build-env"] + variables: + BUILD_CC: clang-14 + BUILD_CXX: clang++-14 + BUILD_SIMD: avx2 + tags: + - avx2 + +jammy-full-clang14-avx512-build-and-test: + <<: *build-and-test-template + needs: ["jammy-full-build-env"] + variables: + BUILD_CC: clang-14 + BUILD_CXX: clang++-14 + BUILD_SIMD: avx512 + tags: + - avx512 + focal-default-build-and-test: <<: *build-and-test-template needs: ["focal-default-build-env"] -focal-full_py3-build-and-test: +focal-full-build-and-test: <<: *build-and-test-template - needs: ["focal-full_py3-build-env"] + needs: ["focal-full-build-env"] bionic-default-build-and-test: <<: *build-and-test-template @@ -304,13 +413,33 @@ bionic-full-build-and-test: # COMPILER WARNINGS +jammy-default-warnings: + <<: *compiler-warning-template + needs: ["jammy-default-build-and-test"] + +jammy-full-warnings: + <<: *compiler-warning-template + needs: ["jammy-full-build-and-test"] + +jammy-full-clang14-warnings: + <<: *compiler-warning-template + needs: ["jammy-full-clang14-build-and-test"] + +jammy-full-clang14-avx2-warnings: + <<: *compiler-warning-template + needs: ["jammy-full-clang14-avx2-build-and-test"] + +jammy-full-clang14-avx512-warnings: + <<: *compiler-warning-template + needs: ["jammy-full-clang14-avx512-build-and-test"] + focal-default-warnings: <<: *compiler-warning-template needs: ["focal-default-build-and-test"] -focal-full_py3-warnings: +focal-full-warnings: <<: *compiler-warning-template - needs: ["focal-full_py3-build-and-test"] + needs: ["focal-full-build-and-test"] bionic-default-warnings: <<: *compiler-warning-template @@ -414,7 +543,7 @@ win10-default-build-and-test: - cmake.exe -G "Visual Studio 14 2015 Win64" --config Debug .. - cmake.exe --build . --target ALL_BUILD --config Debug - cmake.exe --build . --target INSTALL --config Debug - - ctest --output-on-failure -C Debug -j3 + - ctest --output-on-failure -C Debug -j8 after_script: - Remove-Item -Recurse -Force build needs: [] @@ -432,7 +561,7 @@ win10-mpi-default-build-and-test: - cmake.exe -G "Visual Studio 14 2015 Win64" -DNEKTAR_USE_MPI=ON --config Debug .. - cmake.exe --build . --target ALL_BUILD --config Debug - cmake.exe --build . --target INSTALL --config Debug - - ctest --output-on-failure -C Debug -j3 + - ctest --output-on-failure -C Debug -j8 after_script: - Remove-Item -Recurse -Force build needs: [] @@ -451,10 +580,7 @@ win10-mpi-default-build-and-test: # correct image version can be grabbed from the container registry. .dockerhub_build_template: &dockerhub_build_template image: docker:stable - only: - - master@nektar/nektar - - /^docker\/.*$/@nektar/nektar - - tags@nektar/nektar + <<: *execution-conditions script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - IMAGE=$CI_REGISTRY_IMAGE/${image_name} @@ -469,11 +595,16 @@ win10-mpi-default-build-and-test: # registry on a particular SHA commit. .dockerhub-test-template: &dockerhub_test_template image: ${CI_REGISTRY_IMAGE}/${image_name}:$CI_COMMIT_SHORT_SHA + <<: *execution-conditions stage: package-test - only: - - master@nektar/nektar - - /^docker\/.*$/@nektar/nektar - - tags@nektar/nektar + script: + - mpirun -n 3 IncNavierStokesSolver $CI_PROJECT_DIR/solvers/IncNavierStokesSolver/Tests/ChanFlow_m3_par.xml + - test_output=`IncNavierStokesSolver $CI_PROJECT_DIR/solvers/IncNavierStokesSolver/Tests/ChanFlow_m3_par.xml | grep "L 2 error (variable u)" | awk '{print ($7 < 1e-7)}'` + - if [ "$test_output" -eq 0 ]; then echo "Tolerance test failed on parallel IncNavierStokesSolver run"; exit 1; fi + - cd $CI_PROJECT_DIR/library/Demos/Python/MultiRegions + - mpirun -n 2 python3 Helmholtz2D.py ../../MultiRegions/Tests/Helmholtz2D_P7.xml + - test_output=`mpirun -n 2 python3 Helmholtz2D.py ../../MultiRegions/Tests/Helmholtz2D_P7.xml | grep "L 2 error (variable nek)" | awk '{print ($7 < 1e-4)}'` + - if [ "$test_output" -eq 0 ]; then echo "Tolerance test failed on parallel Python run"; exit 1; fi # Docker Hub deployment template. Only builds for master or tags on the main # Nektar repository. The strategy is to login to the container registry and pull @@ -483,6 +614,7 @@ win10-mpi-default-build-and-test: # runners can be difficult if they are tagged multiple times, so we also perform # a quick rmi to make sure we only keep the images from the registry. .dockerhub-deploy-template: &dockerhub_deploy_template + <<: *execution-conditions image: docker:stable stage: package-deploy only: @@ -506,6 +638,7 @@ win10-mpi-default-build-and-test: dockerhub-build-env: <<: *dockerhub_build_template stage: package-env + needs: [] variables: image_name: nektar-env dockerfile: docker/nektar-env/Dockerfile @@ -540,14 +673,12 @@ dockerhub-build-dev: args: --build-arg ENV_IMAGE=$CI_REGISTRY_IMAGE/nektar-env:$CI_COMMIT_SHORT_SHA --build-arg NEKTAR_IMAGE=$CI_REGISTRY_IMAGE/nektar:$CI_COMMIT_SHORT_SHA dockerfile: docker/nektar-dev/Dockerfile -# Test the dockerhub images +# Test the dockerhub images: runs a quick solve and Python code. dockerhub-test-nektar: <<: *dockerhub_test_template needs: [ "dockerhub-build-nektar" ] variables: image_name: nektar - script: - - mpirun -n 3 IncNavierStokesSolver $CI_PROJECT_DIR/solvers/IncNavierStokesSolver/Tests/ChanFlow_m3_par.xml dockerhub-test-nektar-dev: <<: *dockerhub_test_template @@ -556,22 +687,32 @@ dockerhub-test-nektar-dev: image_name: nektar-dev script: - cd $CI_PROJECT_DIR/templates/executable - - ./test.sh /usr/local/lib64/nektar++/cmake 3 + - ./test.sh /usr/local/lib64/nektar++/cmake 3 /usr/bin/cmake + +dockerhub-test-workbook: + <<: *dockerhub_test_template + needs: [ "dockerhub-build-workbook" ] + variables: + image_name: nektar-workbook # Deployment dockerhub-deploy-nektar: <<: *dockerhub_deploy_template + needs: [ "dockerhub-test-nektar" ] variables: image_name: nektar dockerhub-deploy-nektar-env: <<: *dockerhub_deploy_template + needs: [ "dockerhub-build-env" ] variables: image_name: nektar-env dockerhub-deploy-nektar-dev: <<: *dockerhub_deploy_template + needs: [ "dockerhub-test-nektar-dev" ] variables: image_name: nektar-dev dockerhub-deploy-nektar-workbook: <<: *dockerhub_deploy_template + needs: [ "dockerhub-build-workbook" ] variables: image_name: nektar-workbook diff --git a/.gitlab-ci/build-and-test.sh b/.gitlab-ci/build-and-test.sh index e28e712c4..1892833ac 100644 --- a/.gitlab-ci/build-and-test.sh +++ b/.gitlab-ci/build-and-test.sh @@ -5,13 +5,11 @@ if [[ $BUILD_TYPE == "default" ]]; then BUILD_OPTS="-DCMAKE_BUILD_TYPE=Release \ -DNEKTAR_TEST_ALL=ON \ - -DNEKTAR_BUILD_TIMINGS=ON \ -DNEKTAR_ERROR_ON_WARNINGS=OFF" -elif [[ $BUILD_TYPE == "full" ]] || [[ $BUILD_TYPE == "full_py3" ]]; then +elif [[ $BUILD_TYPE == "full" ]]; then BUILD_OPTS="-DCMAKE_BUILD_TYPE:STRING=Debug \ -DNEKTAR_FULL_DEBUG:BOOL=ON \ -DNEKTAR_TEST_ALL:BOOL=ON \ - -DNEKTAR_BUILD_TIMINGS:BOOL=ON \ -DNEKTAR_USE_ARPACK:BOOL=ON \ -DNEKTAR_USE_FFTW:BOOL=ON \ -DNEKTAR_USE_MPI:BOOL=ON \ @@ -20,15 +18,30 @@ elif [[ $BUILD_TYPE == "full" ]] || [[ $BUILD_TYPE == "full_py3" ]]; then -DNEKTAR_USE_HDF5:BOOL=ON \ -DNEKTAR_USE_MESHGEN:BOOL=ON \ -DNEKTAR_USE_CCM:BOOL=ON \ + -DNEKTAR_CCMIO_URL=https://www.nektar.info/ccmio/libccmio-2.6.1.tar.gz \ -DNEKTAR_USE_CWIPI:BOOL=ON \ + -DNEKTAR_USE_VTK:BOOL=ON \ -DNEKTAR_BUILD_PYTHON:BOOL=ON \ -DNEKTAR_TEST_USE_HOSTFILE=ON \ -DNEKTAR_ERROR_ON_WARNINGS=OFF" - if [[ $BUILD_TYPE == "full_py3" ]]; then - BUILD_OPTS="$BUILD_OPTS -DNEKTAR_USE_PYTHON3:BOOL=ON" + if [[ $BUILD_SIMD == "avx2" ]]; then + BUILD_OPTS="$BUILD_OPTS -DNEKTAR_ENABLE_SIMD_AVX2:BOOL=ON" + elif [[ $BUILD_SIMD == "avx512" ]]; then + BUILD_OPTS="$BUILD_OPTS -DNEKTAR_ENABLE_SIMD_AVX512:BOOL=ON" fi fi +# Custom compiler +if [[ $BUILD_CC != "" ]]; then + BUILD_OPTS="$BUILD_OPTS -DCMAKE_C_COMPILER=${BUILD_CC}" +fi +if [[ $BUILD_CXX != "" ]]; then + BUILD_OPTS="$BUILD_OPTS -DCMAKE_CXX_COMPILER=${BUILD_CXX}" +fi +if [[ $BUILD_FC != "" ]]; then + BUILD_OPTS="$BUILD_OPTS -DCMAKE_Fortran_COMPILER=${BUILD_FC}" +fi + rm -rf build && mkdir -p build && (cd build && cmake -G 'Unix Makefiles' $BUILD_OPTS ..) && \ make -C build -j $NUM_CPUS all 2>&1 && \ make -C build -j $NUM_CPUS install && \ diff --git a/.gitlab-ci/packaging-exclude b/.gitlab-ci/packaging-exclude new file mode 100644 index 000000000..410528cb5 --- /dev/null +++ b/.gitlab-ci/packaging-exclude @@ -0,0 +1,6 @@ +build* +docs/tutorial +docker +pkg +ThirdParty +nektar++*.tar.gz diff --git a/.gitlab-ci/packaging.yml b/.gitlab-ci/packaging.yml new file mode 100644 index 000000000..1e11d7452 --- /dev/null +++ b/.gitlab-ci/packaging.yml @@ -0,0 +1,741 @@ +# ################################################## +# ################# PACKAGING #################### +# ################################################## + +.package-conditions: &package-conditions + only: + refs: + - /^pkg\/.*$/ + - tags@nektar/nektar + - web + +.package-env-build: &package-env-build + <<: *package-conditions + image: docker:stable + stage: package-env + needs: [] + tags: + - pkg + script: + - OS_DIST=$(echo $CI_JOB_NAME | cut -d- -f 2) + - OS_VERSION=$(echo $CI_JOB_NAME | cut -d- -f 3) + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + - IMAGE=$CI_REGISTRY_IMAGE/pkg/${OS_DIST}-${OS_VERSION} + - DOCKERFILE=docker/packaging/Dockerfile-${OS_DIST}-${OS_VERSION} + - docker pull $IMAGE || true + - docker build --pull -t $IMAGE -f ${DOCKERFILE} . + - docker push $IMAGE + +.package-deb-build: &package-deb-build + <<: *package-conditions + image: $CI_REGISTRY_IMAGE/${image_name} + stage: package-build + tags: + - pkg + variables: + GIT_SUBMODULE_STRATEGY: normal + script: + - OS_DIST=$(echo $CI_JOB_NAME | cut -d- -f 2) + - OS_VERSION=$(echo $CI_JOB_NAME | cut -d- -f 3) + - PKG_DIR=pkg/${OS_DIST}/${OS_VERSION} + - OMPI_MCA_btl_vader_single_copy_mechanism=none + - tar -czf nektar++-$( deb/nektar++-$( ${CONTRIB}/binary-amd64/Packages + - gzip -k -f ${CONTRIB}/binary-amd64/Packages + - apt-ftparchive --arch amd64 contents pool/contrib > ${CONTRIB}/binary-amd64/Contents-amd64 + - gzip -k -f ${CONTRIB}/binary-amd64/Contents-amd64 + - apt-ftparchive release ${CONTRIB}/binary-amd64 > ${CONTRIB}/binary-amd64/Release + - apt-ftparchive release -o APT::FTPArchive::Release::Codename="${OS_VERSION}" -c $DPATH/release.conf dists/${OS_VERSION} > dists/${OS_VERSION}/Release + - rm -rf dists/${OS_VERSION}/Release.gpg dists/${OS_VERSION}/InRelease + - gpg --batch --default-key nektar -abs -o dists/${OS_VERSION}/Release.gpg dists/${OS_VERSION}/Release + - gpg --batch --default-key nektar -abs --clearsign -o dists/${OS_VERSION}/InRelease dists/${OS_VERSION}/Release + +.package-deb-deploy: &package-deb-deploy + <<: *package-deb-deploy-dev + stage: package-deploy + only: + refs: + - tags@nektar/nektar + variables: + DPATH: /web/deb + +.package-rpm-build: &package-rpm-build + <<: *package-conditions + image: $CI_REGISTRY_IMAGE/${image_name} + stage: package-build + tags: + - pkg + variables: + GIT_SUBMODULE_STRATEGY: normal + script: + - if [ $image_name = "centos:8" ]; then sed -i -e "s|mirrorlist=|#mirrorlist=|g" -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-Linux-*; fi + - yum -y upgrade + - OS_DIST=$(echo $CI_JOB_NAME | cut -d- -f 2) + - OS_VERSION=$(echo $CI_JOB_NAME | cut -d- -f 3) + - NEKVER=$( ${version_file}; fi + - RPMRELEASE=$(python3 pkg/redhat/version-tracker.py ${version_file} nektar ${NEKVER}) + - mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + - cp pkg/redhat/nektar-${OS_DIST}-${OS_VERSION}.spec ~/rpmbuild/SPECS/nektar.spec + - git archive --format=tgz --prefix=nektar-v${NEKVER}/ -o ~/rpmbuild/SOURCES/nektar-v${NEKVER}.tar.gz HEAD + - pushd ~/rpmbuild/SPECS/ + - rpmbuild -ba --define "_nektar_version ${NEKVER}" --define "_nektar_build_release ${RPMRELEASE}" nektar.spec + - popd + - mv /root/rpmbuild/RPMS ./RPMS + - mv /root/rpmbuild/SRPMS ./SRPMS + artifacts: + paths: + - ./RPMS/*/*.rpm + - ./SRPMS/*.rpm + - ${version_file} + expire_in: 1 week + timeout: 8h + +## +## Test the generated RPM packages: first, run the ADRSolver on a +## randomly-selected test. Then, install the development package and test +## compilation of the standalone executable. +## +.package-rpm-test: &package-rpm-test + <<: *package-conditions + image: ${image_name} + stage: package-test + tags: + - pkg + variables: + needs_epel: 0 + needs_powertools: 0 + cmake_exe: cmake + script: + - if [ $image_name = "centos:8" ]; then sed -i -e "s|mirrorlist=|#mirrorlist=|g" -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-Linux-*; fi + - yum -y upgrade + - if [ "$needs_epel" -eq 1 ]; then yum install -y epel-release; fi + - if [ "$needs_powertools" -eq 1 ]; then yum install -y dnf-plugins-core; yum config-manager --set-enabled powertools; fi + - yum install -y environment-modules RPMS/x86_64/nektar++-openmpi-adr-solver-[1-9]*.rpm RPMS/x86_64/libnektar++-openmpi-[1-9]*.rpm RPMS/x86_64/nektar++-adr-solver-[1-9]*.rpm RPMS/x86_64/libnektar++-[1-9]*.rpm + - cp $CI_PROJECT_DIR/solvers/ADRSolver/Tests/ImDiffusion_m12.xml . + - ADRSolver ImDiffusion_m12.xml + - test_output=`ADRSolver ImDiffusion_m12.xml | grep "L 2 error" | awk '{print ($7 < 2e-7)}'` + - if [ "$test_output" -eq 0 ]; then echo "Tolerance test failed on serial ADRSolver run"; exit 1; fi + - source /etc/profile.d/modules.sh + - module load mpi + - mpirun --allow-run-as-root -n 3 ADRSolver ImDiffusion_m12.xml + - test_output=`mpirun --allow-run-as-root -n 3 ADRSolver ImDiffusion_m12.xml | grep "L 2 error" | awk '{print ($7 < 2e-7)}'` + - if [ "$test_output" -eq 0 ]; then echo "Tolerance test failed on parallel ADRSolver run"; exit 1; fi + - yum install -y RPMS/x86_64/nektar++-openmpi-devel-*.rpm + - cd $CI_PROJECT_DIR/templates/executable + - ./test.sh /usr/lib64/openmpi/lib/nektar++/cmake 3 ${cmake_exe} + +# +# Deploy the generated RPM packages to web server. +# Repository update is done on local filesystem as sqlite locking not reliable +# over NFS. +# +.package-rpm-deploy-dev: &package-rpm-deploy-dev + <<: *package-conditions + image: fedora:30 + stage: package-deploy-dev + variables: + DPATH: /web/rpm-test + tags: + - pkg + - pkg-rpm + script: + - OS_DIST=$(echo $CI_JOB_NAME | cut -d- -f 2) + - OS_VERSION=$(echo $CI_JOB_NAME | cut -d- -f 3) + - RPM_LOC=$DPATH/${OS_DIST}/${OS_VERSION} + - TMP_LOC=/tmp/repo + - if [ ! -d $DPATH ]; then echo "Remote filesystem not accessible"; exit 1; fi + - dnf install -y createrepo rpm-sign rsync + - echo "$RPM_DEPLOY_KEY" | base64 --decode | gpg --import + - for f in RPMS/*/*.rpm SRPMS/*.rpm; do rpm -D '_gpg_name nektar-users@imperial.ac.uk' --addsign $f; done + - mkdir -p $TMP_LOC + - if [ -d $RPM_LOC ]; then rsync -a $RPM_LOC/ $TMP_LOC/; fi + - mkdir -p $TMP_LOC/x86_64 $TMP_LOC/SRPMS + - cp RPMS/x86_64/*.rpm $TMP_LOC/x86_64/ + - cp SRPMS/*.rpm $TMP_LOC/SRPMS + - mkdir -p $TMP_LOC/versions && mv *.json $TMP_LOC/versions + - createrepo --update $TMP_LOC/x86_64/ + - gpg --batch --yes --detach-sign -u nektar-users@imperial.ac.uk --armor $TMP_LOC/x86_64/repodata/repomd.xml + - rsync -a --delete $TMP_LOC/ $RPM_LOC/ + +.package-rpm-deploy: &package-rpm-deploy + <<: *package-rpm-deploy-dev + stage: package-deploy + only: + refs: + - tags@nektar/nektar + variables: + DPATH: /web/rpm + + +## +## Source packages +## +package-source-archive-env: + <<: *package-env-build + +package-source-archive-build: + <<: *package-conditions + stage: package-build + image: $CI_REGISTRY_IMAGE/pkg/source-archive + needs: ["package-source-archive-env"] + tags: + - pkg + variables: + GIT_SUBMODULE_STRATEGY: normal + script: + - VERSION=$(cat VERSION) + - mkdir -p src + - git archive --format=tar --prefix=nektar-v${VERSION}/ --output=src/nektar++-${VERSION}.tar HEAD + - git archive --format=zip --prefix=nektar-v${VERSION}/ --output=src/nektar++-${VERSION}.zip HEAD + - cd src + - gzip --stdout nektar++-${VERSION}.tar > nektar++-${VERSION}.tar.gz + - bzip2 --stdout nektar++-${VERSION}.tar > nektar++-${VERSION}.tar.bz2 + - xz --stdout nektar++-${VERSION}.tar > nektar++-${VERSION}.tar.xz + artifacts: + paths: + - src/nektar++*.tar* + - src/nektar++*.zip + expire_in: 1 week + +package-source-archive-deploy-dev: &package-source-archive-deploy-dev + <<: *package-conditions + stage: package-deploy-dev + image: debian:stable-slim + needs: ["package-source-archive-build"] + tags: + - pkg + - pkg-src + variables: + DPATH: /web/src-test + dependencies: + - package-source-archive-build + script: + - cp src/nektar++*.* $DPATH + +package-source-archive-deploy: + <<: *package-source-archive-deploy-dev + stage: package-deploy + only: + refs: + - tags@nektar/nektar + variables: + DPATH: /web/src + +## +## Documentation +## +package-source-doc-env: + <<: *package-env-build + +package-source-doc-build: + <<: *package-conditions + stage: package-build + image: $CI_REGISTRY_IMAGE/pkg/source-doc + needs: ["package-source-doc-env"] + tags: + - pkg + variables: + GIT_SUBMODULE_STRATEGY: normal + script: + - VERSION=$(cat VERSION) + - mkdir build && cd build + - cmake -DNEKTAR_BUILD_DEMOS:BOOL=OFF -DNEKTAR_BUILD_DOC:BOOL=ON -DNEKTAR_BUILD_LIBRARY:BOOL=OFF -DNEKTAR_BUILD_SOLVERS:BOOL=OFF -DNEKTAR_BUILD_UTILITIES:BOOL=ON -DNEKTAR_USE_MESHGEN:BOOL=ON .. + - make doc + - make user-guide-pdf user-guide-html + - make developer-guide-pdf developer-guide-html + - make tutorials + artifacts: + paths: + - build/docs/doxygen/html + - build/docs/user-guide/user-guide.pdf + - build/docs/user-guide/html + - build/docs/developer-guide/developer-guide.pdf + - build/docs/developer-guide/html + - build/docs/tutorial/*/*/*.pdf + - build/docs/tutorial/*/*/*.tar.gz + - build/docs/tutorial/*/*/html + +package-source-doc-deploy-dev: &package-source-doc-deploy-dev + <<: *package-conditions + stage: package-deploy-dev + image: debian:stable-slim + needs: ["package-source-doc-build"] + variables: + DPATH_DOC: /web/doc-test + DPATH_SRC: /web/src-test + tags: + - pkg + - pkg-src + dependencies: + - package-source-doc-build + script: + - VERSION=$(cat VERSION) + - RSYNC="rsync -a --delete" + - apt -yq update + - apt -yq install rsync + - cd build/docs + - mkdir -p $DPATH_DOC/userguide/${VERSION} + - ${RSYNC} user-guide/html/ $DPATH_DOC/userguide/${VERSION}/ + - ${RSYNC} user-guide/user-guide.pdf $DPATH_SRC/user-guide-${VERSION}.pdf + - mkdir -p $DPATH_DOC/developerguide/${VERSION} + - ${RSYNC} developer-guide/html/ $DPATH_DOC/developerguide/${VERSION}/ + - ${RSYNC} developer-guide/developer-guide.pdf $DPATH_SRC/developer-guide-${VERSION}.pdf + - mkdir -p $DPATH_DOC/tutorials/${VERSION} + - for i in tutorial/*/*; do mv $i/html/* $i/; rmdir $i/html; done + - ${RSYNC} tutorial/ $DPATH_DOC/tutorials/${VERSION}/ + - mkdir -p $DPATH_DOC/doxygen/${VERSION} + - ${RSYNC} doxygen/html/ $DPATH_DOC/doxygen/${VERSION}/ + - cd $DPATH_DOC/userguide && if [ $(ls -1 | grep -v latest | tail -n 1) == "${VERSION}" ]; then rm -f latest; ln -s ${VERSION} latest; fi + - cd $DPATH_DOC/developerguide && if [ $(ls -1 | grep -v latest | tail -n 1) == "${VERSION}" ]; then rm -f latest; ln -s ${VERSION} latest; fi + - cd $DPATH_DOC/tutorials && if [ $(ls -1 | grep -v latest | tail -n 1) == "${VERSION}" ]; then rm -f latest; ln -s ${VERSION} latest; fi + - cd $DPATH_DOC/doxygen && if [ $(ls -1 | grep -v latest | tail -n 1) == "${VERSION}" ]; then rm -f latest; ln -s ${VERSION} latest; fi + +package-source-doc-deploy: + <<: *package-source-doc-deploy-dev + stage: package-deploy + only: + refs: + - tags@nektar/nektar + variables: + DPATH_DOC: /web/doc + DPATH_SRC: /web/src + +## +## Debian unstable +## +#package-debian-unstable-env: +# <<: *package-env-build + +#package-debian-unstable-build: +# <<: *package-deb-build +# needs: ["package-debian-unstable-env"] +# variables: +# image_name: pkg/debian-unstable + +#package-debian-unstable-test: +# <<: *package-deb-test +# needs: ["package-debian-unstable-build"] +# dependencies: +# - package-debian-unstable-build +# variables: +# image_name: debian:unstable + +#package-debian-unstable-deploy-dev: +# <<: *package-deb-deploy-dev +# needs: ["package-debian-unstable-build", "package-debian-unstable-test"] +# dependencies: +# - package-debian-unstable-build + +#package-debian-unstable-deploy: +# <<: *package-deb-deploy +# needs: ["package-debian-unstable-build", "package-debian-unstable-deploy-dev"] +# dependencies: +# - package-debian-unstable-build + +## +## Debian bullseye +## +package-debian-bullseye-env: + <<: *package-env-build + +package-debian-bullseye-build: + <<: *package-deb-build + needs: ["package-debian-bullseye-env"] + variables: + image_name: pkg/debian-bullseye + +package-debian-bullseye-test: + <<: *package-deb-test + needs: ["package-debian-bullseye-build"] + dependencies: + - package-debian-bullseye-build + variables: + image_name: debian:bullseye + +package-debian-bullseye-deploy-dev: + <<: *package-deb-deploy-dev + needs: ["package-debian-bullseye-build", "package-debian-bullseye-test"] + dependencies: + - package-debian-bullseye-build + +package-debian-bullseye-deploy: + <<: *package-deb-deploy + needs: ["package-debian-bullseye-build", "package-debian-bullseye-deploy-dev"] + dependencies: + - package-debian-bullseye-build + +## +## Debian buster +## +package-debian-buster-env: + <<: *package-env-build + +package-debian-buster-build: + <<: *package-deb-build + needs: ["package-debian-buster-env"] + variables: + image_name: pkg/debian-buster + +package-debian-buster-test: + <<: *package-deb-test + needs: ["package-debian-buster-build"] + dependencies: + - package-debian-buster-build + variables: + image_name: debian:buster + +package-debian-buster-deploy-dev: + <<: *package-deb-deploy-dev + needs: ["package-debian-buster-build", "package-debian-buster-test"] + dependencies: + - package-debian-buster-build + +package-debian-buster-deploy: + <<: *package-deb-deploy + needs: ["package-debian-buster-build", "package-debian-buster-deploy-dev"] + dependencies: + - package-debian-buster-build + +## +## Debian stretch +## +package-debian-stretch-env: + <<: *package-env-build + +package-debian-stretch-build: + <<: *package-deb-build + needs: ["package-debian-stretch-env"] + variables: + image_name: pkg/debian-stretch + +package-debian-stretch-test: + <<: *package-deb-test + needs: ["package-debian-stretch-build"] + dependencies: + - package-debian-stretch-build + variables: + image_name: debian:stretch + +package-debian-stretch-deploy-dev: + <<: *package-deb-deploy-dev + needs: ["package-debian-stretch-build", "package-debian-stretch-test"] + dependencies: + - package-debian-stretch-build + +package-debian-stretch-deploy: + <<: *package-deb-deploy + needs: ["package-debian-stretch-build", "package-debian-stretch-deploy-dev"] + dependencies: + - package-debian-stretch-build + +## +## Ubuntu jammy +## +package-ubuntu-jammy-env: + <<: *package-env-build + +package-ubuntu-jammy-build: + <<: *package-deb-build + needs: ["package-ubuntu-jammy-env"] + variables: + image_name: pkg/ubuntu-jammy + +package-ubuntu-jammy-test: + <<: *package-deb-test + needs: ["package-ubuntu-jammy-build"] + dependencies: + - package-ubuntu-jammy-build + variables: + image_name: ubuntu:jammy + +package-ubuntu-jammy-deploy-dev: + <<: *package-deb-deploy-dev + needs: ["package-ubuntu-jammy-build", "package-ubuntu-jammy-test"] + dependencies: + - package-ubuntu-jammy-build + +package-ubuntu-jammy-deploy: + <<: *package-deb-deploy + needs: ["package-ubuntu-jammy-build", "package-ubuntu-jammy-deploy-dev"] + dependencies: + - package-ubuntu-jammy-build + + +## +## Ubuntu focal +## +package-ubuntu-focal-env: + <<: *package-env-build + +package-ubuntu-focal-build: + <<: *package-deb-build + needs: ["package-ubuntu-focal-env"] + variables: + image_name: pkg/ubuntu-focal + +package-ubuntu-focal-test: + <<: *package-deb-test + needs: ["package-ubuntu-focal-build"] + dependencies: + - package-ubuntu-focal-build + variables: + image_name: ubuntu:focal + +package-ubuntu-focal-deploy-dev: + <<: *package-deb-deploy-dev + needs: ["package-ubuntu-focal-build", "package-ubuntu-focal-test"] + dependencies: + - package-ubuntu-focal-build + +package-ubuntu-focal-deploy: + <<: *package-deb-deploy + needs: ["package-ubuntu-focal-build", "package-ubuntu-focal-deploy-dev"] + dependencies: + - package-ubuntu-focal-build + +## +## Ubuntu bionic +## +package-ubuntu-bionic-env: + <<: *package-env-build + +package-ubuntu-bionic-build: + <<: *package-deb-build + needs: ["package-ubuntu-bionic-env"] + variables: + image_name: pkg/ubuntu-bionic + +package-ubuntu-bionic-test: + <<: *package-deb-test + needs: ["package-ubuntu-bionic-build"] + dependencies: + - package-ubuntu-bionic-build + variables: + image_name: ubuntu:bionic + +package-ubuntu-bionic-deploy-dev: + <<: *package-deb-deploy-dev + needs: ["package-ubuntu-bionic-build", "package-ubuntu-bionic-test"] + dependencies: + - package-ubuntu-bionic-build + +package-ubuntu-bionic-deploy: + <<: *package-deb-deploy + needs: ["package-ubuntu-bionic-build", "package-ubuntu-bionic-deploy-dev"] + dependencies: + - package-ubuntu-bionic-build + +## +## Ubuntu xenial +## +#package-ubuntu-xenial-env: +# <<: *package-env-build + +#package-ubuntu-xenial-build: +# <<: *package-deb-build +# needs: ["package-ubuntu-xenial-env"] +# variables: +# image_name: pkg/ubuntu-xenial + +#package-ubuntu-xenial-test: +# <<: *package-deb-test +# needs: ["package-ubuntu-xenial-build"] +# dependencies: +# - package-ubuntu-xenial-build +# variables: +# image_name: ubuntu:xenial + +#package-ubuntu-xenial-deploy-dev: +# <<: *package-deb-deploy-dev +# needs: ["package-ubuntu-xenial-build", "package-ubuntu-xenial-test"] +# dependencies: +# - package-ubuntu-xenial-build + +#package-ubuntu-xenial-deploy: +# <<: *package-deb-deploy +# needs: ["package-ubuntu-xenial-build", "package-ubuntu-xenial-deploy-dev"] +# dependencies: +# - package-ubuntu-xenial-build + + + +## +## CentOS 7 +## +package-centos-7-env: + <<: *package-env-build + +package-centos-7-build: + <<: *package-rpm-build + needs: ["package-centos-7-env"] + variables: + image_name: pkg/centos-7 + version_file: centos-7.json + +package-centos-7-test: + <<: *package-rpm-test + needs: ["package-centos-7-build"] + dependencies: + - package-centos-7-build + variables: + image_name: centos:7 + needs_epel: 1 + cmake_exe: cmake3 + +package-centos-7-deploy-dev: + <<: *package-rpm-deploy-dev + needs: ["package-centos-7-build", "package-centos-7-test"] + dependencies: + - package-centos-7-build + +package-centos-7-deploy: + <<: *package-rpm-deploy + needs: ["package-centos-7-build", "package-centos-7-deploy-dev"] + dependencies: + - package-centos-7-build + +## +## CentOS 8 +## +package-centos-8-env: + <<: *package-env-build + +package-centos-8-build: + <<: *package-rpm-build + needs: ["package-centos-8-env"] + variables: + image_name: pkg/centos-8 + version_file: centos-8.json + +package-centos-8-test: + <<: *package-rpm-test + needs: ["package-centos-8-build"] + dependencies: + - package-centos-8-build + variables: + image_name: centos:8 + needs_epel: 1 + needs_powertools: 1 + cmake_exe: cmake + +package-centos-8-deploy-dev: + <<: *package-rpm-deploy-dev + needs: ["package-centos-8-build", "package-centos-8-test"] + dependencies: + - package-centos-8-build + +package-centos-8-deploy: + <<: *package-rpm-deploy + needs: ["package-centos-8-build", "package-centos-8-deploy-dev"] + dependencies: + - package-centos-8-build + +## +## Fedora 35 +## +package-fedora-35-env: + <<: *package-env-build + +package-fedora-35-build: + <<: *package-rpm-build + needs: ["package-fedora-35-env"] + variables: + image_name: pkg/fedora-35 + version_file: fedora-35.json + +package-fedora-35-test: + <<: *package-rpm-test + needs: ["package-fedora-35-build"] + dependencies: + - package-fedora-35-build + variables: + image_name: fedora:35 + cmake_exe: cmake + +package-fedora-35-deploy-dev: + <<: *package-rpm-deploy-dev + needs: ["package-fedora-35-build", "package-fedora-35-test"] + dependencies: + - package-fedora-35-build + +package-fedora-35-deploy: + <<: *package-rpm-deploy + needs: ["package-fedora-35-build", "package-fedora-35-deploy-dev"] + dependencies: + - package-fedora-35-build + diff --git a/CHANGELOG.md b/CHANGELOG.md index 024ab1fba..d2b97c413 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,154 @@ Changelog ========= +v5.3.0 +------ +**Library** +- Added float and restored SVE back-end for SimdLib (!1373) +- Fix VmathSIMD by adding optional mapping with # of lanes (!1388) +- Added float and restore avx512 back-end for SimdLib (!1387) +- Fix namespace pollution which causes boost 1.74+ errors (!1389) +- Fix missing copy assignment operator warnings in clang 13+ (!1391) +- Added checkpoint file writing start time in the checkpoint filter (!1401) +- Fix boost 1.77 compatibility errors (!1420) +- Replaced depricated "sprintf" with "std::to_string" (!1406) +- Add compatiblity patch to solve conflict between flex 2.6.3 and scotch 6.0.4 (!1410) +- Maintenance for C++-17 compatibility: removed std::unaray_function base class due to removal from the std (!1419) +- Fixed the comment of function Vvtvvtp in VmathArray (!1408) +- Add a FieldConvert utility to compute the divergence of the velocity (!1413) +- Added new filter to calculate variables integral on composite mesh (!1409) + +**Python** +- Add wrappers for Interpreter and Equation classes (!1329) + +**CompressibleFlowSolver** +- Added Laplacian (NonSmooth) AV to the explicit Navier Stokes solver (!1372) +- Added Physical AV to the implicit Navier Stokes solver (!1372) +- Fixed Segmentation Fault when using C0 Smoother with Shock Capturing (!1394) +- The Incomplete IP method was made the default method for the IP method (!1377). +- Improve performance of the perconditioner and diffusion operator (!1393) +- Re-add the SFD test with an updated restart file (!1399) +- ExtractSurface2DCSF utility is updated to use the boost program option (!1407) + +**IncNavierStokesSolver** +- Replaced depricated "sprintf" with "std::to_string" (!1406) + +**VortexWaveInteractionSolver** +- Replaced depricated "sprintf" with "std::to_string" (!1406) + +**NekMesh** +- Replace VTK pointers with VTK smart-pointers to avoid memory leaking, when +exporting in .vtu format (!1386) +- Preserve CAD face labels and save in to session file as a "NAME=" tag on the composites (!1396) +- Fix a header include which caused compilation errors on OCC versions newer than v7.4 (!1395) +- Add option to refine curves in the same manner as the line refinement functionality (!1298) +- Add refined curves and refined lines now prompt the octree to subdivide until the desired refined delta is reached (!1298) +- Fix a segmentation fault with WriteOctree due to missing 'order' parameter (!1418) + +**Miscellaneous** +- Updated gitignore to be friendly with CLion IDE (!1405) +- Correct header section of .cpp, .hpp, and .h files (!1426) + +**CI** +- Enable packaging for Fedora 35, removed Fedora 33/34 from package builds. (!1424) + +**FieldConvert** +- Fix range option so that it also works with hdf5 (!1414) + +v5.2.0 +------ +**Library** +- Add Arm SVE backend to SIMD library (!1282) +- Added support for manifold MatrixFree operators (2D in 3D space) (!1304) +- Put in place automatic selection of explicit operations using an opt file (!1304) +- Fixed the moving reference frame rotation (Solver Utils) (!1305) +- Revised FilterAeroForces to accout for the moving reference frame (!1305) +- Add MaxMinFields filter to record the max/min at each quadrature point and output the max/min fields. (!1256) +- Simplify the logic in the MPI pairwise trace exchange (!1307) +- Fix imaginary mode in HalfModeToFourier module (!1247) +- Added a dummy output module OutputStdOut for NekMesh utilities that don't require an output file (!1318) +- Fix compiler errors on ARCHER2 using PrgEnv-cray (!1315) +- Fix cmake SIMD enable/disable options based on architecture (!1320) +- Restrucutred the communicators to reduce direct dependence on session file communicator (!1337) +- Fixed SIMD mask test (!1324) +- Fix memory leak in Timer.cpp (!1330) +- Fix cmake CWIPI option to remove Fortran check (!1331) +- Fix excessive verbose output in GetBndElmtExpansions method (!1341) +- Timer class was updated with safety checks to avoid wrong measurements (!1347) +- Fix to adjust for warnings/errors from Monterey updated compiler (!1355) +- Update `nektar` and `nektar-env` packages to Debian Bullseye (!1356) +- Reformat code with clang-format (!1359) +- Remove unnecessary IterPerExp methods (!1366) +- Fix erronous call to FwdTrans from MR 1366 (!1374) +- Fixed avx512 back-end for SimdLib (!1333) +- Added float to scalar and avx2 back-end, disable avx512, sse2, sve (!1255) +- Change MPI initialisation to allow MPI_Init call outside Nektar++ (!1376) +- Fixed incorrect summary output for diffusion/reaction terms (!1383) + +**FieldConvert** +- Add calculation of CFL number for the incompressilbe flow (!1332) +- Added conditional to select the eNearestNeighbour method for 3D interpolation (!1335) +- Fixed the output field names of WSS module of FieldConvert (!1352) +- Add VTU output using VTK library (high-order & multi-block options) (!1343) + +**IncNavierStokesSolver** +- Added Boundary conditions for moving reference frame (!1305) +- Added the virtual functions overwriting the FluidInterface for moving reference frame (!1305) +- Add Gradient Jump Penalty (GJP) Stabilisation into the solver (!1290) +- Add a partial slip boundary condition (!1336) +- Equation types are registered to the session reader (!1344) +- Added Block-Preconditioner for Full Matrix solve (!1350) + +**ADRSolver:** +- Add Gradient Jump Penalty (GJP) Stabilisation into the Unsteady Advection and Unsteady Advection Diffusion solvers (!1290) + +**PulseWaveSolver** +- Parallelised solver (!1337) + +**NekMesh** +- Allow for one or more blank lines between sections in Tecplot ascii (.dat) files (!1322) +- Small bug-fix for Python API for unused configuration options (!1348) +- Fix bug in ProcessVarOpti/ElUtil for segfault on non-tri or tet meshes (!1381) + +**CompressibleFlowSolver** +- Added physical AV, dilatation sensor, Ducros's and smoothing (!1180) +- Added timers around important functions using the Timer class. Timers are available by specifying IO_Timer_Level > -1 (!1347) +- Fixed bug in the calculation of the discontinuity penalty factor for the DiffusionIP implementation (!1368) + +**Documentation** +- Fix images not being displayed in HTML documentation and tutorials (!1370) + +**CI** +- Remove unused build options (!1360) +- Enable NEKTAR_USE_VTK across full builds and in docker image (!1358) + +**Packaging** +- Fix various issues with debian unstable and centos8 packaging (!1362) +- Fix missing texlive package dependency for centos packaging (!1382) + +v5.1.1 +------ +**Library** +- Fix a boost headers incompatibility with boost-1.77 (!1297) +- Add RungeKutta4 as an alternate name for ClassicalRungeKutta4 for time integration method (!1294) + +**Python** +- Fix initialisation warning when using HDF5 (!1299) +- Fix issue with implementation of Diffusion IP (!1303) +- Split Helmholtz MatrixFree operator to improve compile times (!1292) +- Fix Boost deprecated header warnings (!1302) +- Add command lines to set starting time and starting checkpoint number of a time-dependent simulation (!1309) +- Fix an index referencing error in the Collections PhysDeriv method for Hex (!1314) + +**Python** +- Updates to workbook, fix bugs in StdExpansion and SessionReader with MPI communication being recreated. (!1296) + +**BuildSystem** +- Updated third party Lapack version 3.7.1 (!1312) + +**CompressibleFlowSolver** +- Fix non-dimensional Sutherland law (!1253) + v5.1.0 ------ **Library** @@ -19,21 +167,29 @@ v5.1.0 - Fix compiler warning of maybe-uninitialized elType in InputStar (!1217) - Extend vectoisation to include all elements and initialise collections on first call (!1162) - Add vectorisation of most element on basix operations (!1158) +- Add constant coefficients to matrix-free Helmholtz operator (!1284) - Limit MPI methods based on core count (!1208) - Split out IProduct.cpp and IProductWRTDerivBase.cpp in order to avoid long time compilations (!1228) - Refactored time integration code using factory pattern (!1034, !1103) +- Fix WriteStream with empty Array/vector (!1233) +- Add interpolation at arbitrary point in 3DH1 (!1233) - Fix to preprocessor logic for boost with Visual Studio >= 2015 (!1115) - Fix type consistency and real comparison in SharedArray.hpp, replaced num_elements with size() (!1127, !1137, !1141) - Use base MPI functions instead of the GS library in the trace exchange for parallel DG simulations (!1112) - Replace PhysIntegral with Integral (!1246) -- Change the way periodic boundary conditions in parallel is setup to reduce excessive memory usage (!1235) +- Change the way periodic boundary conditions in parallel is setup to reduce excessive memory usage (!1235) (!1289) - Add exponential and fractional-in-time integration schemes (!1106, !1111, !1210) - Add nonlinear and linear system solvers (!1196) - Add ESDIRK3 and ESDIRK4 time integration schemes (!1196) - Add a filter to calculate mean value of solution fields (!1211) - Fix the time dependent absorption forcing (!1254) +- Enable very high order (>100) quadrature use (!1262) +- Add rotation and improve performance of MovingReferenceFrame forcing (!1185) +- Fix BODYFORCE defined by a file (!1215, !1264) +- Add multi-level partitioning strategy for HDF5 geometry (!1209) +- Fix the URL of ccmio library (!1288) **FieldConvert**: - Add phifile module to compute shape functions for the SPM solver (!1065) @@ -45,17 +201,27 @@ v5.1.0 - Add QCriterion for 2D flow (!1243) - Fix to interppointsdatatofld to allow for mpi processing of large files (!1191) - Fix the logic of C0Projection:helmsmoothing (!1220) +- Fix extract module for boundaries with periodic boundary conditions (!1277) + +**IncNavierStokesSolver**: +- Add MaxMinFields filter to record the max/min at each quadrature point and output the max/min fields. (!1256) +- Fix imaginary mode in HalfModeToFourier module (!1247) **CardiacEPSolver** - Added additional parameter sets to Fenton-Karma model (!1119) +- Fix electrogram calculation in 1D/2D domains (!1285) **IncNavierStokesSolver** - Add Smoothed Profile Method (SPM) for the formulation of immersed boundaries (!1065) - Add new filter AeroForcesSPM to compute aerodynamic forces in immersed boundaries (!1065) +- Add mask function and more baseflow parameters for the linear stability problem (!1201) +- Fix dudt in high-order pressure boundary condition (!1190) +- Add flow rate forcing with a scalar (!1026) **CompressibleFlowSolver** +- Added the selective frequency damping support for the implicit solver (!!1267) - Added vectorisation of the Interior Penalty method (!!223) - Added a simplified implicit solver with naive preconditioner (!!1196) - Add BRJ preconditioner to the implicit solver (!!1212) @@ -78,6 +244,7 @@ v5.1.0 - Improve .geo reader and support 3D geometries with voids (!1031) - Added r-adaptation code (!1109) - Added Python bindings, change NekMeshUtils to NekMesh (!1149) +- Added pyramid element for the Star-CCM mesh (!1229) - Added option to use absolute tolerance in peralign (!1225) **BuildSystem** @@ -92,7 +259,17 @@ v5.0.3 - Fix repeated output of u,v,w for Euler system **FieldConvert** +- Fix the Filters output files numbering (!1251, !1261) - Fix the Filters output files numbering (!1251) +- Fix 2D surfDistance calculation (!1263) + +**NekMesh** +- Fix VTK Output for 3D meshes and support XML format (!1258) + +**Documentation** +- Fix documentation to note restrictions on use of coupled solver (!1268) +**Library** +- Add robustness to the read expansions (!1239) v5.0.2 ------ diff --git a/CMakeLists.txt b/CMakeLists.txt index 23f0d5d0a..b730056d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,8 +23,8 @@ IF (POLICY CMP0074) CMAKE_POLICY(SET CMP0074 OLD) ENDIF() -# Nektar++ requires C++11. -SET(CMAKE_CXX_STANDARD 11) +# Nektar++ requires C++14. +SET(CMAKE_CXX_STANDARD 14 CACHE STRING "Default value for CXX_STANDARD property of targets") SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_EXTENSIONS OFF) @@ -117,6 +117,12 @@ SET(NEKTAR_SHARE_DIR share/nektar++) SET(NEKTAR_DOC_DIR share/doc/nektar++) SET(NEKTAR_CMAKE_DIR ${LIB_DIR}/nektar++/cmake) +# Set ThirdParty locations for source files, building and collating outputs +SET(TPSRC ${CMAKE_SOURCE_DIR}/ThirdParty) +SET(TPBUILD ${CMAKE_BINARY_DIR}/ThirdParty) +SET(TPDIST ${CMAKE_BINARY_DIR}/ThirdParty/dist) + +# INSTALLATION PATHS # Allow for overriding final include header directory (for Fedora/CentOS # packaging) IF (DEFINED NEKTAR_INCLUDE_ROOT) @@ -124,13 +130,8 @@ IF (DEFINED NEKTAR_INCLUDE_ROOT) ELSE() SET(NEKTAR_INCLUDE_DIST_DIR ${CMAKE_INSTALL_PREFIX}/${NEKTAR_INCLUDE_DIR}) ENDIF() - -# Set ThirdParty locations. -SET(TPSRC ${CMAKE_SOURCE_DIR}/ThirdParty) -SET(TPBUILD ${CMAKE_BINARY_DIR}/ThirdParty) -SET(TPDIST ${CMAKE_BINARY_DIR}/ThirdParty/dist) -SET(TPINC ${NEKTAR_INCLUDE_DIST_DIR}/ThirdParty) -SET(TPLIB ${CMAKE_INSTALL_PREFIX}/${NEKTAR_LIB_DIR}/nektar++/thirdparty) +SET(TP_INCLUDE_DIR ${NEKTAR_INCLUDE_DIR}) +SET(TP_LIB_DIR ${CMAKE_INSTALL_PREFIX}/${NEKTAR_LIB_DIR}/nektar++) # Create ThirdParty source directory if it doesn't exist already. IF (NOT EXISTS ${TPSRC}) @@ -142,14 +143,14 @@ SET(NEKTAR_LIBRARY_TYPE "SHARED") # Set up RPATH SET(CMAKE_SKIP_BUILD_RPATH FALSE) -SET(CMAKE_BUILD_RPATH "${TPLIB}") -SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +SET(CMAKE_BUILD_RPATH "${TP_LIB_DIR}") LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}" isSystemDir) IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}" "${TPLIB}/") + SET(CMAKE_INSTALL_RPATH + "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}" "${TP_LIB_DIR}/") ELSE() - SET(CMAKE_INSTALL_RPATH "${TPLIB}") + SET(CMAKE_INSTALL_RPATH "${TP_LIB_DIR}") ENDIF() # Enable the use of @rpath in macOS install names so that we can use multiple @@ -326,44 +327,62 @@ ENDIF (NEKTAR_BUILD_TESTS) # Compile list of definitions for Nektar++Config.cmake input file. We exclude # vtk definitions which should not be required for external builds. +# We also exclude generator expressions that relate to the RelWithDebugInfo +# config that are added from OCC on fedora 35. SET(NEKTAR_DEFINITIONS "") GET_DIRECTORY_PROPERTY( NEKTAR_DEFINITIONS_LIST DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) FOREACH(def ${NEKTAR_DEFINITIONS_LIST}) - IF (NOT def MATCHES "^vtk") - SET(NEKTAR_DEFINITIONS "${NEKTAR_DEFINITIONS} -D${def}") - ENDIF() + # Build NEKTAR_DEFINITIONS as a list (items separated with ;). The generator + # expression is used to reject blank ${def} entries since these can themselves + # be generator expressions which may evaluate to empty string, in which case + # we'd end up with blank "-D" entries in the definition list. + SET(NEKTAR_DEFINITIONS ${NEKTAR_DEFINITIONS};$<$:-D${def}>) ENDFOREACH() +# Now we convert our defintions from a CMake list (; separated) and convert to +# a space-separated string. +SET(NEKTAR_DEFINITIONS $) + # Write out Nektar++ build configuration CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/Nektar++Config.cmake.in ${CMAKE_BINARY_DIR}/Nektar++Config.cmake @ONLY) +# At this point, our written out config file may still contain generator +# expressions so we process them to generate the final config file. +FILE(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/Nektar++Config.cmake + INPUT ${CMAKE_BINARY_DIR}/Nektar++Config.cmake) + # Install Nektar++ CMake configuration file INSTALL(FILES ${CMAKE_BINARY_DIR}/Nektar++Config.cmake DESTINATION ${NEKTAR_CMAKE_DIR} COMPONENT dev) +# THIRDPARTY SOFTWARE DISTRIBUTION +# Install shared libraries INSTALL(CODE "FILE(GLOB tplibs ${TPDIST}/lib/*${CMAKE_SHARED_LIBRARY_SUFFIX}*) IF (NOT tplibs STREQUAL \"\") - FILE(INSTALL \${tplibs} DESTINATION ${TPLIB}) + FILE(INSTALL \${tplibs} DESTINATION ${TP_LIB_DIR}) + ENDIF() +") + +# Install cmake configuration files +IF (EXISTS ${TPDIST}/lib/cmake) + INSTALL(DIRECTORY ${TPDIST}/lib/cmake/ + DESTINATION ${TP_LIB_DIR}/cmake + COMPONENT libutilities) +ENDIF() +INSTALL(CODE "FILE(GLOB tpcmake ${TPDIST}/lib/*/*.cmake) + IF (NOT tpcmake STREQUAL \"\") + FILE(INSTALL \${tpcmake} DESTINATION ${TP_LIB_DIR}/cmake) ENDIF() ") # Install ThirdParty headers to subdirectory of ${NEKTAR_INCLUDE_DIR} INSTALL(DIRECTORY ${TPDIST}/include/ - DESTINATION ${NEKTAR_INCLUDE_DIR}/ThirdParty + DESTINATION ${TP_INCLUDE_DIR} COMPONENT dev OPTIONAL ) -# Install ThirdParty libraries into ${NEKTAR_LIB_DIR}. These are shipped with -# the LibUtilities library. -IF (EXISTS ${TPDIST}/lib) - INSTALL(DIRECTORY ${TPDIST}/lib/ - DESTINATION ${NEKTAR_LIB_DIR} - COMPONENT libutilities - ) -ENDIF() - ADD_SUBDIRECTORY(docs) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7ae2c5fa8..338c381f0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,13 +40,77 @@ project. It's a pretty simple process: - `tidy/mybrillianttidying`: cosmetic fixes to bring existing files up to the Nektar++ code guidelines. 3. Make sure you've gone through the checklist below. -4. Submit a merge request to merge into `master`. If you just want to see the - diff and are not quite ready to merge, use the `[WIP]` tag in the title to - prevent your code from being accidentally merged. -5. Put a comment in the MR saying that it's ready to be merged. -6. If your branch is a minor fix that could appear in the next patch release, - then add the `Proposed patch` label to the merge request. -7. Respond to any comments in the code review. +4. Submit a request to merge into `master` (Merge Request). If you + just want to see the diff and are not quite ready to merge, use the + `Draft` tag in the title, for instance `Draft: Update + session reader`. This will prevent your code from being + accidentally merged. +5. Respond to any comments in the code review. + +Reviewing Merge Requests can be a arduous and time-consuming process +for reviewers. To allow for efficient code reviews, we ask that you +take particular care of the following points: + +- Submit **small Merge Requests**. Whenever you can, split your work + into multiple self-contained, stacked Merge Requests. Say for + instance that you split your work into two branches `MR1`, and + `MR2`, that branches off `MR1`. Stacked Merge Requests would look + like this: + + ``` + master <- MR1 <- MR2 + ``` + + In the above scenario, changes in `MR1` are first reviewed, before + changes in `MR2`. After code review, `MR2` is first merged into + `MR1`'s branch, which is then merged into `master`. +- Provide a **detailed description** of your changes by filling the + Merge Request template. Please keep the structure of the template + as-is: fill the section with "Non applicable" if needed. Don't be + afraid of "stating the obvious": the more information you provide, + the easier (and quicker) the code review is. +- Give your submission a **descriptive title**. Avoid generic titles like + "Update module X" or "Fix bug in module Y". + +An example of a Merge Request is available +[here](https://gitlab.nektar.info/nektar/nektar/-/merge_requests/1322). + +## Keeping your branch up to date + +Regularly updating your branch with the latest changes on the base +branch (usually `master`) is essential to avoid large conflicts when +merging your work into the main development line. There are two ways +of updating your branch: + +1. If you haven't pushed your branch to the upstream remote + (`nektar/nektar.git`), or if you are sure nobody based work on + your changes, rebase your changes on the latest `master` + ```shell + git checkout feature/mybranch + git pull --rebase master + ``` + + This will rewrite the history of your local branch in order for your + changes to appear on top of the latest changes in master. This leads + to a clean, linear history. See [Git Branching - Rebasing](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) +2. If you pushed your changes and there is a high chance that somebody + based work on top of your -- yet unmerged -- changes, **don't + rebase**. Merge the latest `master` state into your branch instead: + ``` + git checkout feature/mybranch + git fetch origin + git merge origin/master + ``` + + This will create a merge commit joining your branch's history and + the `master` branch's history. The merge approach do not rewrite + your branch's history, at the expanse of making it more complex. + +Provided that you merge your work as soon as possible, i.e. contribute +small Merge Requests, most of the developement can happen in a local +branch that you would rebase on top of master. This is the best case +scenario. Merging becomes necessary if a branch is published and +remains unmerged for more than a couple of days. ## Submission checklist - Did you add regression tests (for fixes) or unit tests and/or normal tests for @@ -67,11 +131,6 @@ project. It's a pretty simple process: to keep test files as small as possible. If so you'll need to rebase or filter-branch to remove those from the commit history. - Is the code formatted correctly? - - **Note:** unfortunately, Nektar++ has pretty inconsistent code formatting at - the moment. To help in reviewing your submission, new files should be - formatted according to the guidelines (or use `clang-format` as described - below) -- otherwise, try to keep formatting consistent with the file you're - working on. ## Git cheatsheet Although Gitlab gives a nice interface to view the diff between a branch and @@ -235,9 +294,15 @@ which accepts the name of the source branch as the sole argument. ## Formatting guidelines Nektar++ uses C++, a language notorious for being easy to make obtuse and difficult to follow code. To hopefully alleviate this problem, there are a -number of fairly simple formatting guidelines you should follow. We are -reasonably relaxed about code formatting, but if you can follow the guidelines -below this would be fantastic. +number of fairly simple formatting guidelines you should follow. + +To help with this, we now require the use of clang-format to ensure all code in +the library is formatted consistently (see below). When adding new +contributions, or making changes to existing code, please ensure you run +clang-format on these files to ensure the formatting complies with our +guidelines. There is a CI job which will verify that no further formatting +changes are required before merging. + ### Basic rules - All code should be wrapped to 80 characters. @@ -247,7 +312,7 @@ below this would be fantastic. but don't use trailing inline comments to save the 80 character limit! - All code blocks (even one-line blocks) should use braces, and braces should be on new lines; for instance - + ```c++ if (someCondition) { @@ -280,12 +345,10 @@ below this would be fantastic. ### Using `clang-format` Code formatting is reasonably boring, so Nektar++ comes with a `.clang-format` -file to allow for automatic code formatting. As noted above, you can use this -for new files, or cosmetic `tidy/*` branches, but try to stick to existing -formatting elsewhere. +file to allow for automatic code formatting. -Installing it is straightforward on most package managers. Nektar++ relies on -options that are used in version 3.7 or later. +Installing it is straightforward on most package managers. Nektar++'s +source code is formatted using **clang-format 11**. There are a number of instructions on how to use `clang-format` inside a number of text editors on the diff --git a/VERSION b/VERSION index 0062ac971..03f488b07 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.0.0 +5.3.0 diff --git a/cmake/Nektar++Config.cmake.in b/cmake/Nektar++Config.cmake.in index c9868857f..9dd8fc842 100644 --- a/cmake/Nektar++Config.cmake.in +++ b/cmake/Nektar++Config.cmake.in @@ -35,7 +35,7 @@ SET(NEKTAR++_LIBRARY_DIRS "${NEKTAR++_ROOT_DIR}/@NEKTAR_LIB_DIR@") SET(NEKTAR++_DEFINITIONS @NEKTAR_DEFINITIONS@) SET(NEKTAR++_LIBRARIES @NEKTAR++_LIBRARIES@) -SET(NEKTAR++_TP_INCLUDE_DIRS "@NEKTAR_INCLUDE_DIST_DIR@/ThirdParty") +SET(NEKTAR++_TP_INCLUDE_DIRS "@NEKTAR_INCLUDE_DIR@") SET(NEKTAR++_TP_LIBRARIES "") SET(NEKTAR++_TP_LIBRARY_DIRS "") @@ -99,9 +99,22 @@ ENDIF( NEKTAR_USE_ARPACK ) SET(NEKTAR_USE_VTK "@NEKTAR_USE_VTK@") IF( NEKTAR_USE_VTK ) - SET(VTK_INCLUDE_DIRS "@VTK_INCLUDE_DIRS@") - SET(NEKTAR++_TP_INCLUDE_DIRS - ${NEKTAR++_TP_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS}) + IF (@THIRDPARTY_BUILD_VTK@) + SET(NEKTAR++_TP_INCLUDE_DIRS + ${NEKTAR++_TP_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS}) + ELSE() + # Make a FIND_DEPENDENCY call to find the relevant version of + # VTK and the required modules. + INCLUDE(CMakeFindDependencyMacro) + SET(VTK_VERSION "@VTK_MAJOR_VERSION@") + IF (VTK_VERSION EQUAL 9) + FIND_DEPENDENCY(VTK 9 QUIET COMPONENTS + FiltersCore IOLegacy IOXML IOImage RenderingCore) + ELSEIF (VTK_VERSION LESS 9) + FIND_DEPENDENCY(VTK ${VTK_VERSION} QUIET COMPONENTS + vtkFiltersGeometry vtkIOLegacy vtkIOXML vtkIOImage vtkRenderingCore) + ENDIF() + ENDIF() ENDIF( NEKTAR_USE_VTK ) SET(NEKTAR_USE_HDF5 "@NEKTAR_USE_HDF5@") diff --git a/cmake/NektarSIMD.cmake b/cmake/NektarSIMD.cmake index 0c029ec48..752a9cc1a 100644 --- a/cmake/NektarSIMD.cmake +++ b/cmake/NektarSIMD.cmake @@ -4,35 +4,57 @@ # Sets up cmake variables needed for the SIMD library in Nektar++ # -OPTION(NEKTAR_ENABLE_SIMD_SSE2 "Enable sse2 vector types" OFF) -OPTION(NEKTAR_ENABLE_SIMD_AVX2 "Enable avx2 vector types" OFF) -OPTION(NEKTAR_ENABLE_SIMD_AVX512 "Enable avx512 vector types" OFF) -MARK_AS_ADVANCED(FORCE NEKTAR_ENABLE_SIMD_SSE2 NEKTAR_ENABLE_SIMD_AVX2 NEKTAR_ENABLE_SIMD_AVX512) -IF (NEKTAR_ENABLE_SIMD_AVX512) - MESSAGE(STATUS "Enabling avx512, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") - ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_AVX512) - SET(CMAKE_CXX_FLAGS "-mavx512 -mfma" CACHE STRING - "Flags used by the CXX compiler during all build types.") - SET(NEKTAR_ENABLE_SIMD_AVX2 "ON" FORCE) - SET(NEKTAR_ENABLE_SIMD_SSE2 "ON" FORCE) +# CMAKE_SYSTEM_PROCESSOR is not available at this point because we want to +# initialize the flags before PROJECT() +EXECUTE_PROCESS(COMMAND uname -m OUTPUT_VARIABLE _SYSTEM_PROCESSOR) +# guard in case uname doesn't work, for instance on win.. +IF(_SYSTEM_PROCESSOR) + STRING(STRIP ${_SYSTEM_PROCESSOR} _SYSTEM_PROCESSOR) ENDIF() -IF (NEKTAR_ENABLE_SIMD_AVX2) - MESSAGE(STATUS "Enabling avx2, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") - ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_AVX2) - SET(CMAKE_CXX_FLAGS "-mavx2 -mfma" CACHE STRING - "Flags used by the CXX compiler during all build types.") - SET(NEKTAR_ENABLE_SIMD_SSE2 "ON" FORCE) -ENDIF() -IF (NEKTAR_ENABLE_SIMD_SSE2) - MESSAGE(STATUS "Enabling sse2, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") - SET(SSE_FLAGS "-msse2") - SET(CMAKE_CXX_FLAGS "${SSE_FLAGS}" CACHE STRING - "Flags used by the CXX compiler during all build types.") - ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_SSE2) + +IF(_SYSTEM_PROCESSOR STREQUAL "x86_64") + OPTION(NEKTAR_ENABLE_SIMD_AVX2 "Enable avx2 vector types" OFF) + OPTION(NEKTAR_ENABLE_SIMD_AVX512 "Enable avx512 vector types" OFF) + MARK_AS_ADVANCED(FORCE NEKTAR_ENABLE_SIMD_SSE2 NEKTAR_ENABLE_SIMD_AVX2 NEKTAR_ENABLE_SIMD_AVX512) + IF (NEKTAR_ENABLE_SIMD_AVX512) + MESSAGE(STATUS "Enabling avx512, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") + ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_AVX512) + SET(CMAKE_CXX_FLAGS "-mavx512f -mfma" CACHE STRING + "Flags used by the CXX compiler during all build types.") + SET(NEKTAR_ENABLE_SIMD_AVX2 "ON" FORCE) + SET(NEKTAR_ENABLE_SIMD_SSE2 "ON" FORCE) + ENDIF() + IF (NEKTAR_ENABLE_SIMD_AVX2) + MESSAGE(STATUS "Enabling avx2, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") + ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_AVX2) + SET(CMAKE_CXX_FLAGS "-mavx2 -mfma" CACHE STRING + "Flags used by the CXX compiler during all build types.") + SET(NEKTAR_ENABLE_SIMD_SSE2 "ON" FORCE) + ENDIF() + IF (NEKTAR_ENABLE_SIMD_SSE2) + MESSAGE(STATUS "Enabling sse2, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") + SET(SSE_FLAGS "-msse2") + SET(CMAKE_CXX_FLAGS "${SSE_FLAGS}" CACHE STRING + "Flags used by the CXX compiler during all build types.") + ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_SSE2) + ENDIF() +ELSEIF(_SYSTEM_PROCESSOR STREQUAL "aarch64") + OPTION(NEKTAR_ENABLE_SIMD_SVE "Enable sve vector types" OFF) + SET(NEKTAR_SVE_BITS 256 CACHE STRING "sve vector bits") + # Toggleable bits options + SET_PROPERTY(CACHE NEKTAR_SVE_BITS PROPERTY STRINGS "128;256;512;1024;2048") + MARK_AS_ADVANCED(FORCE NEKTAR_ENABLE_SIMD_SVE) + IF (NEKTAR_ENABLE_SIMD_SVE) + MESSAGE(STATUS "Enabling sve, you might need to clear CMAKE_CXX_FLAGS or add the appriopriate flags") + ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_SVE) + SET(CMAKE_CXX_FLAGS "-march=armv8-a+sve -msve-vector-bits=${NEKTAR_SVE_BITS}" CACHE STRING + "Flags used by the CXX compiler during all build types.") + ENDIF() ENDIF() + # Vmath Simd OPTION(NEKTAR_ENABLE_SIMD_VMATH "Enable vector types in vmath" OFF) IF (NEKTAR_ENABLE_SIMD_VMATH) ADD_DEFINITIONS(-DNEKTAR_ENABLE_SIMD_VMATH) ENDIF() -MARK_AS_ADVANCED(FORCE NEKTAR_ENABLE_SIMD_VMATH) \ No newline at end of file +MARK_AS_ADVANCED(FORCE NEKTAR_ENABLE_SIMD_VMATH) diff --git a/cmake/ThirdPartyBlasLapack.cmake b/cmake/ThirdPartyBlasLapack.cmake index 8d4213bf5..3017fb908 100644 --- a/cmake/ThirdPartyBlasLapack.cmake +++ b/cmake/ThirdPartyBlasLapack.cmake @@ -57,15 +57,15 @@ ELSE() INCLUDE(ExternalProject) EXTERNALPROJECT_ADD( - lapack-3.7.0 + lapack-3.7.1 PREFIX ${TPSRC} - URL http://www.netlib.org/lapack/lapack-3.7.0.tgz - URL_MD5 "697bb8d67c7d336a0f339cc9dd0fa72f" + URL http://www.netlib.org/lapack/lapack-3.7.1.tgz + URL_MD5 "dcdeeed73de152c4643ccc5b1aeb453c" STAMP_DIR ${TPBUILD}/stamp DOWNLOAD_DIR ${TPSRC} - SOURCE_DIR ${TPSRC}/lapack-3.7.0 - BINARY_DIR ${TPBUILD}/lapack-3.7.0 - TMP_DIR ${TPBUILD}/lapack-3.7.0-tmp + SOURCE_DIR ${TPSRC}/lapack-3.7.1 + BINARY_DIR ${TPBUILD}/lapack-3.7.1 + TMP_DIR ${TPBUILD}/lapack-3.7.1-tmp INSTALL_DIR ${TPDIST} CONFIGURE_COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} @@ -74,7 +74,7 @@ ELSE() -DCMAKE_INSTALL_LIBDIR:PATH=${TPDIST}/lib -DBUILD_SHARED_LIBS:STRING=ON -DBUILD_TESTING:STRING=OFF - ${TPSRC}/lapack-3.7.0 + ${TPSRC}/lapack-3.7.1 ) THIRDPARTY_LIBRARY(BLAS_LAPACK SHARED blas lapack DESCRIPTION "BLAS and LAPACK libraries") diff --git a/cmake/ThirdPartyCCM.cmake b/cmake/ThirdPartyCCM.cmake index e10074fdc..8f1c2f60a 100644 --- a/cmake/ThirdPartyCCM.cmake +++ b/cmake/ThirdPartyCCM.cmake @@ -33,11 +33,16 @@ IF (THIRDPARTY_BUILD_CCMIO) ENDIF() MARK_AS_ADVANCED(PATCH) + SET(CCMIO_URL "https://downloads.sourceforge.net/project/foam-extend/ThirdParty/libccmio-2.6.1.tar.gz") + IF (DEFINED NEKTAR_CCMIO_URL) + SET(CCMIO_URL ${NEKTAR_CCMIO_URL}) + ENDIF() + INCLUDE(ExternalProject) EXTERNALPROJECT_ADD( libccmio-2.6.1 PREFIX ${TPSRC} - URL http://visit.ilight.com/svn/visit/trunk/third_party/libccmio-2.6.1.tar.gz + URL ${CCMIO_URL} URL_MD5 f81fbdfb960b1a4f3bcc7feee491efe4 STAMP_DIR ${TPBUILD}/stamp DOWNLOAD_DIR ${TPSRC} diff --git a/cmake/ThirdPartyCwipi.cmake b/cmake/ThirdPartyCwipi.cmake index f510c88aa..2ded1e2d6 100644 --- a/cmake/ThirdPartyCwipi.cmake +++ b/cmake/ThirdPartyCwipi.cmake @@ -33,10 +33,6 @@ IF ( NEKTAR_USE_CWIPI ) IF (THIRDPARTY_BUILD_CWIPI) INCLUDE(ExternalProject) - IF(NOT CMAKE_Fortran_COMPILER) - MESSAGE(ERROR "MPI_Fortran_COMPILER not set") - ENDIF() - IF(NOT NEKTAR_USE_MPI) MESSAGE(ERROR "NEKTAR_USE_MPI not set") ENDIF() diff --git a/cmake/ThirdPartyPETSc.cmake b/cmake/ThirdPartyPETSc.cmake index 8238dcff8..50c049fec 100644 --- a/cmake/ThirdPartyPETSc.cmake +++ b/cmake/ThirdPartyPETSc.cmake @@ -67,7 +67,7 @@ IF (NEKTAR_USE_PETSC) SET(PETSC_MUMPS ${PETSC_MUMPS} --with-blas-lib=${BLAS} --with-lapack-lib=${LAPACK}) IF(THIRDPARTY_BUILD_BLAS_LAPACK) - SET(PETSC_DEPS ${PETSC_DEPS} lapack-3.7.0) + SET(PETSC_DEPS ${PETSC_DEPS} lapack-3.7.1) ENDIF() ELSE() MESSAGE(STATUS "No suitable blas/lapack found, downloading") diff --git a/cmake/ThirdPartyScotch.cmake b/cmake/ThirdPartyScotch.cmake index 33b508c8c..88ee2774e 100644 --- a/cmake/ThirdPartyScotch.cmake +++ b/cmake/ThirdPartyScotch.cmake @@ -87,7 +87,7 @@ IF (NEKTAR_USE_SCOTCH) TMP_DIR ${TPBUILD}/scotch-6.0.4-tmp INSTALL_DIR ${TPDIST} CONFIGURE_COMMAND rm -f ${SCOTCH_SRC}/Makefile.inc - COMMAND ln -s + COMMAND ln -s ${SCOTCH_SRC}/Make.inc/${SCOTCH_MAKE} ${SCOTCH_SRC}/Makefile.inc BUILD_COMMAND $(MAKE) -C ${SCOTCH_SRC} @@ -101,6 +101,30 @@ IF (NEKTAR_USE_SCOTCH) prefix=${TPDIST} install ) + EXEC_PROGRAM( flex + ARGS --version + OUTPUT_VARIABLE FLEX_VERSION + ) + + # PATCH USED TO SOLVE COMPILATION ERROR (undefined reference to `scotchyywrap') + # WHEN THIRD PARTY SCOTCH IS COMPILED WITH FLEX 2.6.3. THE PROBLEM HAS BEEN SOLVED + # WITH FLEX 2.6.4 + IF (FLEX_VERSION STREQUAL "flex 2.6.3") + UNSET(PATCH CACHE) + FIND_PROGRAM(PATCH patch) + IF(NOT PATCH) + MESSAGE(FATAL_ERROR + "'patch' tool for modifying files not found. Cannot build boost-numpy.") + ENDIF() + MARK_AS_ADVANCED(PATCH) + + EXTERNALPROJECT_ADD_STEP(scotch-6.0.4 patch-flex + WORKING_DIRECTORY ${TPBUILD}/scotch-6.0.4 + COMMAND ${PATCH} -p0 < ${CMAKE_SOURCE_DIR}/cmake/thirdparty-patches/scotch-6_0_4-flex-2_6_3-yy-compatibility.patch + DEPENDERS configure + DEPENDEES patch) + ENDIF() + THIRDPARTY_LIBRARY(SCOTCH_LIBRARY STATIC scotch DESCRIPTION "Scotch library") THIRDPARTY_LIBRARY(SCOTCHERR_LIBRARY STATIC scotcherr diff --git a/cmake/ThirdPartyVTK.cmake b/cmake/ThirdPartyVTK.cmake index 82c931562..8312aece2 100644 --- a/cmake/ThirdPartyVTK.cmake +++ b/cmake/ThirdPartyVTK.cmake @@ -33,19 +33,32 @@ IF( NEKTAR_USE_VTK ) SET(VTK_USE_FILE ${VTK_DIR}/UseVTK.cmake) INCLUDE (${VTK_DIR}/VTKConfig.cmake) ELSE() - FIND_PACKAGE(VTK COMPONENTS - vtkFiltersGeometry vtkIOLegacy vtkIOXML vtkIOImage vtkRenderingCore) + # VTK9 uses modified component names - VTK9 can still be discovered with + # the old names but these are deprecated and produce a number of warnings. + MESSAGE(STATUS "Looking for VTK >= 9...") + FIND_PACKAGE(VTK 9 QUIET COMPONENTS + FiltersCore IOLegacy IOXML IOImage RenderingCore) + IF(NOT VTK_FOUND) + MESSAGE(STATUS "VTK 9+ not found, looking for earlier VTK versions...") + # If we didn't find VTK9+, search VTK<9 using the older component names + FIND_PACKAGE(VTK COMPONENTS + vtkFiltersGeometry vtkIOLegacy vtkIOXML vtkIOImage vtkRenderingCore) + ENDIF() IF (VTK_FOUND) MESSAGE(STATUS "Found VTK: ${VTK_USE_FILE}") IF (VTK_MAJOR_VERSION EQUAL 6 AND VTK_MINOR_VERSION EQUAL 0 AND VTK_BUILD_VERSION EQUAL 0) ADD_DEFINITIONS(-DNEKTAR_HAS_VTK_6_0_0) ENDIF() + + IF (VTK_MAJOR_VERSION LESS 9) + # Not required for VTK9+, see https://vtk.org/doc/nightly/html/ + # md__builds_gitlab-kitware-sciviz-ci_Documentation_Doxygen_ModuleMigration.html + INCLUDE(${VTK_USE_FILE}) + ENDIF() ELSE (VTK_FOUND) MESSAGE(FATAL_ERROR "VTK not found") ENDIF (VTK_FOUND) ENDIF() - - INCLUDE (${VTK_USE_FILE}) # Force VTK headers to be treated as system headers. INCLUDE_DIRECTORIES(SYSTEM ${VTK_INCLUDE_DIRS}) diff --git a/cmake/thirdparty-patches/scotch-6_0_4-flex-2_6_3-yy-compatibility.patch b/cmake/thirdparty-patches/scotch-6_0_4-flex-2_6_3-yy-compatibility.patch new file mode 100644 index 000000000..aaa2bc326 --- /dev/null +++ b/cmake/thirdparty-patches/scotch-6_0_4-flex-2_6_3-yy-compatibility.patch @@ -0,0 +1,16 @@ +--- src/libscotch/parser_ll.l 2022-10-12 10:54:59.704074458 +0100 ++++ src/libscotch/parser_ll.l 2022-10-12 10:54:37.112168311 +0100 +@@ -86,6 +86,13 @@ + #ifdef FLEX_SCANNER + #define YY_ALWAYS_INTERACTIVE 1 /* Set the parser as interactive and read one char at a time */ + #define YY_INPUT(buf,result,max_size) { int c = stratParserInput (); result = (c == 0) ? YY_NULL : ((buf)[0] = c, 1); } ++ ++# if YY_FLEX_MAJOR_VERSION == 2 && YY_FLEX_MINOR_VERSION == 6 && YY_FLEX_SUBMINOR_VERSION == 3 ++ int yywrap() { return 1; } ++# else ++# define yywrap() (1) /* Always return end-of-file on end-of-string */ ++# endif ++ + #else /* FLEX_SCANNER */ + #undef getc /* Redirect I/O functions */ + #define getc yygetc diff --git a/docker/nektar-env/Dockerfile b/docker/nektar-env/Dockerfile index 8e53e1b99..14c4883f0 100644 --- a/docker/nektar-env/Dockerfile +++ b/docker/nektar-env/Dockerfile @@ -1,8 +1,8 @@ -FROM debian:buster-slim +FROM debian:bullseye-slim LABEL maintainer="Nektar++ Development Team " -RUN DEBIAN_RELEASE=buster && \ +RUN DEBIAN_RELEASE=bullseye && \ echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \ /etc/apt/sources.list.d/debian-non-free.list && \ apt-get update && \ @@ -10,8 +10,8 @@ RUN DEBIAN_RELEASE=buster && \ libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev libboost-system-dev \ libboost-program-options-dev libboost-python-dev libboost-numpy-dev libboost-regex-dev \ libfftw3-dev libhdf5-dev libhdf5-mpi-dev liblapack-dev liboce-foundation-dev \ - liboce-modeling-dev liboce-ocaf-dev libtet1.5-dev libtriangle-dev \ - libtinyxml-dev mpi-default-dev petsc-dev zlib1g-dev python-numpy libptscotch-dev \ + liboce-modeling-dev liboce-ocaf-dev libtet1.5-dev libtriangle-dev libvtk9-dev \ + libtinyxml-dev mpi-default-dev petsc-dev zlib1g-dev python3-numpy libptscotch-dev \ libarpack2-dev \ texlive-base texlive-latex-extra texlive-science texlive-fonts-recommended texlive-pstricks \ doxygen graphviz imagemagick diff --git a/docker/nektar-env/Dockerfile_centos_full b/docker/nektar-env/Dockerfile_centos_full index 95cf9c9a0..d7f300e91 100644 --- a/docker/nektar-env/Dockerfile_centos_full +++ b/docker/nektar-env/Dockerfile_centos_full @@ -9,4 +9,8 @@ RUN yum install -y epel-release && \ yum install -y $(cat packages.txt) \ && yum clean all +# Installation of the VTK packages also installs CMake 2.8, overriding the +# previous symlink of cmake3 to cmake. Need to recreate this. +RUN mv /usr/bin/cmake /usr/bin/cmake2 && mv /usr/bin/ctest /usr/bin/ctest2 && mv /usr/bin/cpack /usr/bin/cpack2 && ln -s /usr/bin/cmake3 /usr/bin/cmake && ln -s /usr/bin/ctest3 /usr/bin/ctest && ln -s /usr/bin/cpack3 /usr/bin/cpack + USER nektar:nektar diff --git a/docker/nektar-env/Dockerfile_debian_documentation b/docker/nektar-env/Dockerfile_debian_documentation index ed2bfda12..ace13ee3f 100644 --- a/docker/nektar-env/Dockerfile_debian_documentation +++ b/docker/nektar-env/Dockerfile_debian_documentation @@ -1,15 +1,15 @@ -FROM %%BASE_IMAGE%%:env-buster-default +FROM %%BASE_IMAGE%%:env-bullseye-default USER root -COPY docker/nektar-env/buster_documentation_packages.txt packages.txt +COPY docker/nektar-env/bullseye_documentation_packages.txt packages.txt -RUN echo "deb http://deb.debian.org/debian buster non-free" > \ +RUN echo "deb http://deb.debian.org/debian bullseye non-free" > \ /etc/apt/sources.list.d/debian-non-free.list && \ apt-get update && \ apt-get install -y $(cat packages.txt) \ && rm -rf /var/lib/apt/lists/* -# Patch security policy to allow PDF conversion by ImageMagick -RUN sed -i 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/g' /etc/ImageMagick-6/policy.xml +# Patch security policy to allow PDF, EPS and PS conversion by ImageMagick +RUN sed -i 's/rights="none" pattern="\(PDF\|PS\|EPS\)"/rights="read|write" pattern="\1"/g' /etc/ImageMagick-6/policy.xml USER nektar:nektar diff --git a/docker/nektar-env/Dockerfile_debian_full b/docker/nektar-env/Dockerfile_debian_full index 4f1f9cbe3..cd4fb0ed7 100644 --- a/docker/nektar-env/Dockerfile_debian_full +++ b/docker/nektar-env/Dockerfile_debian_full @@ -1,4 +1,5 @@ FROM %%REGISTRY%%:env-%%OS_VERSION%%-default +ARG REMOVE_UCX LABEL maintainer="Nektar++ Development Team " @@ -10,5 +11,6 @@ RUN echo "deb http://deb.debian.org/debian ${DEBIAN_VERSION} non-free" > \ apt-get update && \ apt-get install -y $(cat packages.txt) \ && rm -rf /var/lib/apt/lists/* +RUN if [ "$REMOVE_UCX" = "1" ]; then rm -f /usr/lib/x86_64-linux-gnu/openmpi/lib/*ucx* && rm /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/*ucx*; fi USER nektar:nektar diff --git a/docker/nektar-env/Dockerfile_debian_full_py3 b/docker/nektar-env/Dockerfile_debian_full_py3 deleted file mode 100644 index cd4fb0ed7..000000000 --- a/docker/nektar-env/Dockerfile_debian_full_py3 +++ /dev/null @@ -1,16 +0,0 @@ -FROM %%REGISTRY%%:env-%%OS_VERSION%%-default -ARG REMOVE_UCX - -LABEL maintainer="Nektar++ Development Team " - -USER root -COPY docker/nektar-env/${DEBIAN_VERSION}_full_packages.txt packages.txt - -RUN echo "deb http://deb.debian.org/debian ${DEBIAN_VERSION} non-free" > \ - /etc/apt/sources.list.d/debian-non-free.list && \ - apt-get update && \ - apt-get install -y $(cat packages.txt) \ - && rm -rf /var/lib/apt/lists/* -RUN if [ "$REMOVE_UCX" = "1" ]; then rm -f /usr/lib/x86_64-linux-gnu/openmpi/lib/*ucx* && rm /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/*ucx*; fi - -USER nektar:nektar diff --git a/docker/nektar-env/Dockerfile_ubuntu_full_py3 b/docker/nektar-env/Dockerfile_ubuntu_full_py3 deleted file mode 100644 index 840fede7c..000000000 --- a/docker/nektar-env/Dockerfile_ubuntu_full_py3 +++ /dev/null @@ -1,13 +0,0 @@ -FROM %%REGISTRY%%:env-%%OS_VERSION%%-default - -LABEL maintainer="Nektar++ Development Team " - -USER root -COPY docker/nektar-env/${UBUNTU_VERSION}_full_packages.txt packages.txt - -RUN export DEBIAN_FRONTEND=noninteractive && \ - apt-get update && \ - apt-get install -y $(cat packages.txt) \ - && rm -rf /var/lib/apt/lists/* - -USER nektar:nektar diff --git a/docker/nektar-env/bionic_full_packages.txt b/docker/nektar-env/bionic_full_packages.txt index a56c17033..659b1c6fd 100644 --- a/docker/nektar-env/bionic_full_packages.txt +++ b/docker/nektar-env/bionic_full_packages.txt @@ -9,6 +9,7 @@ liboce-ocaf-dev libptscotch-dev libtet1.5-dev libtriangle-dev +libvtk7-dev mpi-default-dev petsc-dev python-dev diff --git a/docker/nektar-env/buster_documentation_packages.txt b/docker/nektar-env/bullseye_documentation_packages.txt similarity index 100% rename from docker/nektar-env/buster_documentation_packages.txt rename to docker/nektar-env/bullseye_documentation_packages.txt diff --git a/docker/nektar-env/bullseye_full_packages.txt b/docker/nektar-env/bullseye_full_packages.txt index 282cea5dc..577c7c4d9 100644 --- a/docker/nektar-env/bullseye_full_packages.txt +++ b/docker/nektar-env/bullseye_full_packages.txt @@ -10,6 +10,7 @@ liboce-ocaf-dev libptscotch-dev libtet1.5-dev libtriangle-dev +libvtk9-dev mpi-default-dev petsc-dev python3-dev diff --git a/docker/nektar-env/buster_full_packages.txt b/docker/nektar-env/buster_full_packages.txt index bc5a549f3..5043c72ce 100644 --- a/docker/nektar-env/buster_full_packages.txt +++ b/docker/nektar-env/buster_full_packages.txt @@ -10,6 +10,7 @@ liboce-ocaf-dev libptscotch-dev libtet1.5-dev libtriangle-dev +libvtk7-dev mpi-default-dev petsc-dev python-numpy diff --git a/docker/nektar-env/centos7_full_packages.txt b/docker/nektar-env/centos7_full_packages.txt index a57e9860d..e61a5e1af 100644 --- a/docker/nektar-env/centos7_full_packages.txt +++ b/docker/nektar-env/centos7_full_packages.txt @@ -10,3 +10,4 @@ ptscotch-openmpi-devel python-devel scotch-devel tetgen-devel +vtk-devel diff --git a/docker/nektar-env/focal_full_packages.txt b/docker/nektar-env/focal_full_packages.txt index aec0ef4a3..ef8940a1e 100644 --- a/docker/nektar-env/focal_full_packages.txt +++ b/docker/nektar-env/focal_full_packages.txt @@ -9,6 +9,7 @@ liboce-ocaf-dev libptscotch-dev libtet1.5-dev libtriangle-dev +libvtk7-dev mpi-default-dev petsc-dev python3-dev diff --git a/docker/nektar-env/jammy_default_packages.txt b/docker/nektar-env/jammy_default_packages.txt new file mode 100644 index 000000000..dc9fdc996 --- /dev/null +++ b/docker/nektar-env/jammy_default_packages.txt @@ -0,0 +1,15 @@ +ccache +clang-14 +cmake +g++ +libboost-filesystem-dev +libboost-iostreams-dev +libboost-program-options-dev +libboost-regex-dev +libboost-system-dev +libboost-thread-dev +liblapack-dev +libscotch-dev +libtinyxml-dev +patch +zlib1g-dev diff --git a/docker/nektar-env/jammy_full_packages.txt b/docker/nektar-env/jammy_full_packages.txt new file mode 100644 index 000000000..5050733e8 --- /dev/null +++ b/docker/nektar-env/jammy_full_packages.txt @@ -0,0 +1,17 @@ +libarpack2-dev +libboost-numpy-dev +libboost-python-dev +libfftw3-dev +libhdf5-mpi-dev +liboce-foundation-dev +liboce-modeling-dev +liboce-ocaf-dev +libptscotch-dev +libtet1.5-dev +libtriangle-dev +libvtk9-dev +mpi-default-dev +petsc-dev +python3-dev +python3-numpy +rsh-client diff --git a/docker/nektar-env/stretch_full_packages.txt b/docker/nektar-env/stretch_full_packages.txt index 41398a5ce..27f077f1f 100644 --- a/docker/nektar-env/stretch_full_packages.txt +++ b/docker/nektar-env/stretch_full_packages.txt @@ -9,6 +9,7 @@ liboce-ocaf-dev libptscotch-dev libtet1.5-dev libtriangle-dev +libvtk6-dev mpi-default-dev petsc-dev python-numpy diff --git a/docker/nektar-env/xenial_full_packages.txt b/docker/nektar-env/xenial_full_packages.txt index 2fc4a46a4..5f9d10471 100644 --- a/docker/nektar-env/xenial_full_packages.txt +++ b/docker/nektar-env/xenial_full_packages.txt @@ -8,6 +8,7 @@ liboce-ocaf-dev libptscotch-dev libtet1.5-dev libtriangle-dev +libvtk6-dev mpi-default-dev patch petsc-dev diff --git a/docker/nektar-workbook/Dockerfile b/docker/nektar-workbook/Dockerfile index 3c75a0529..3be0f40b0 100644 --- a/docker/nektar-workbook/Dockerfile +++ b/docker/nektar-workbook/Dockerfile @@ -1,19 +1,28 @@ -FROM jupyter/scipy-notebook:42f4c82a07ff AS build +FROM jupyter/scipy-notebook:hub-1.4.2 AS build LABEL maintainer="Nektar++ Development Team " USER root RUN apt-get update && \ - apt-get install -y libgl1-mesa-dev xvfb && \ + apt-get install -y libgl1-mesa-dev xvfb openssh-client build-essential && \ rm -rf /var/lib/apt/lists/* USER $NB_UID -RUN conda install --quiet --yes cmake=3.19.1 boost=1.74.0 occt=7.4.0 gmsh=4.6.0 pyvista=0.27.2 itkwidgets=0.32.0 arpack=3.7.0 fftw=3.3.8 tinyxml jupyter_contrib_nbextensions && \ +RUN mamba install --quiet --yes jupyterlab=2.3.1 cmake=3.19.1 boost=1.74.0 occt=7.4.0 gmsh=4.6.0 pyvista=0.31.3 \ + arpack=3.7.0 fftw=3.3.8 scotch=6.0.9 openmpi=4.1.0 tinyxml=2.6.2 jupyter_contrib_nbextensions=0.5.1 \ + ptscotch=6.0.9 hdf5=1.10.6=mpi_openmpi* vtk==9.0.1 && \ + pip install --no-cache-dir nbgitpuller itkwidgets && \ jupyter contrib nbextension install --sys-prefix && \ jupyter nbextension enable --sys-prefix hide_input/main && \ jupyter nbextension enable --sys-prefix hide_input_all/main && \ jupyter nbextension enable --sys-prefix init_cell/main && \ - jupyter nbextension enable --sys-prefix equation-numbering/main + jupyter nbextension enable --sys-prefix equation-numbering/main && \ + jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib jupyterlab-datawidgets itkwidgets @jupyterlab/toc && \ + conda clean --all -f -y && \ + jupyter lab clean && \ + rm -rf "/home/${NB_USER}/.cache/yarn" && \ + fix-permissions "${CONDA_DIR}" && \ + fix-permissions "/home/${NB_USER}" USER root COPY . /tmp/nektar @@ -24,11 +33,18 @@ RUN cd /tmp/nektar && mkdir build && cd build && \ -DNEKTAR_BUILD_UTILITIES=ON -DNEKTAR_BUILD_PYTHON=ON \ -DNEKTAR_SOLVER_VORTEXWAVE=OFF -DNEKTAR_LIB_DIR=lib/x86_64-linux-gnu \ -DNEKTAR_BUILD_TESTS=OFF -DNEKTAR_BUILD_UNIT_TESTS=OFF \ - -DNEKTAR_BUILD_DEMOS=OFF -DNEKTAR_USE_SCOTCH=OFF -DNEKTAR_USE_MESHGEN=ON \ + -DNEKTAR_BUILD_DEMOS=OFF -DNEKTAR_USE_SCOTCH=ON -DNEKTAR_USE_MESHGEN=ON \ -DNEKTAR_USE_ARPACK=ON -DNEKTAR_USE_FFTW=ON \ - -DCMAKE_INSTALL_PREFIX=/usr/local .. && \ + -DNEKTAR_USE_MPI=ON -DNEKTAR_USE_HDF5=ON -DNEKTAR_USE_VTK=ON \ + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \ + -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release .. && \ make -j$(nproc) install && \ chown -R $NB_UID:$NB_UID /tmp/nektar && \ cd /tmp/nektar/build && sudo -u $NB_USER make nekpy-install-system && cd && ldconfig && rm -R /tmp/nektar -USER $NB_UID +USER root +COPY docker/nektar-workbook/entrypoint.sh / +RUN chmod +x /entrypoint.sh + +USER $NB_USER +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/nektar-workbook/entrypoint.sh b/docker/nektar-workbook/entrypoint.sh new file mode 100644 index 000000000..94f75a73f --- /dev/null +++ b/docker/nektar-workbook/entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/bash +export DISPLAY=:99.0 +which Xvfb +Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & +sleep 3 +exec "$@" diff --git a/docker/nektar/Dockerfile b/docker/nektar/Dockerfile index 34770dcdc..746d0a869 100644 --- a/docker/nektar/Dockerfile +++ b/docker/nektar/Dockerfile @@ -18,6 +18,7 @@ RUN mkdir build && cd build && \ -DNEKTAR_BUILD_UNIT_TESTS=OFF \ -DNEKTAR_BUILD_SOLVERS=${BUILD_SOLVERS} \ -DNEKTAR_BUILD_PYTHON=ON \ + -DNEKTAR_LIB_DIR=lib \ -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} \ -DNEKTAR_USE_MESHGEN=ON \ -DNEKTAR_USE_MPI=ON \ @@ -25,6 +26,8 @@ RUN mkdir build && cd build && \ -DNEKTAR_USE_FFTW=ON \ -DNEKTAR_USE_HDF5=ON \ -DNEKTAR_USE_CCM=ON \ + -DNEKTAR_USE_PETSC=ON \ + -DNEKTAR_USE_VTK=ON \ .. && \ make -j$(nproc) && \ make -j$(nproc) user-guide-pdf developer-guide-pdf \ @@ -34,18 +37,18 @@ USER root RUN cd build && make install && make nekpy-install-system && cd .. USER nektar -FROM debian:buster-slim -RUN DEBIAN_RELEASE=buster && \ +FROM debian:bullseye-slim +RUN DEBIAN_RELEASE=bullseye && \ echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \ /etc/apt/sources.list.d/debian-non-free.list && \ apt-get update && \ apt-get install -y \ openssh-client nano vim binutils \ - libboost-thread1.67 libboost-iostreams1.67 libboost-filesystem1.67 libboost-system1.67 \ - libboost-program-options1.67 libboost-python1.67 libboost-regex1.67 libboost-numpy1.67 \ + libboost-thread1.74 libboost-iostreams1.74 libboost-filesystem1.74 libboost-system1.74 \ + libboost-program-options1.74 libboost-python1.74 libboost-regex1.74 libboost-numpy1.74 \ libfftw3-3 libhdf5-103 libhdf5-openmpi-103 liblapack3 liboce-foundation11 \ - liboce-modeling11 liboce-ocaf11 libtet1.5 libtriangle-1.6 python-numpy \ - openmpi-bin libpetsc3.10 libptscotch-6.0 libarpack2 libtinyxml2.6.2v5 && \ + liboce-modeling11 liboce-ocaf11 libtet1.5 libtriangle-1.6 python3-numpy libvtk9 \ + openmpi-bin libpetsc-real3.14 libptscotch-6.1 libarpack2 libtinyxml2.6.2v5 && \ apt-get clean && rm -rf /var/lib/apt/lists/* ARG INSTALL_PREFIX=/usr/local COPY --from=build ${INSTALL_PREFIX} ${INSTALL_PREFIX} @@ -56,7 +59,7 @@ RUN chmod +x /usr/local/bin/docker-entrypoint.sh && \ ln -s /usr/local/bin/docker-entrypoint.sh / ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] -RUN groupadd nektar && useradd -m -g nektar nektar +RUN groupadd nektar && useradd -m -g nektar nektar && rm /etc/ld.so.cache && ldconfig USER nektar WORKDIR /home/nektar CMD ["/bin/bash"] diff --git a/docker/nektar/README.md b/docker/nektar/README.md index 347edc96f..fc38ed680 100644 --- a/docker/nektar/README.md +++ b/docker/nektar/README.md @@ -10,6 +10,7 @@ enabled: - `NEKTAR_USE_MESHGEN` - `NEKTAR_USE_PETSC` - `NEKTAR_USE_CCM` +- `NEKTAR_USE_VTK` ## Building diff --git a/docker/packaging/Dockerfile-centos-7 b/docker/packaging/Dockerfile-centos-7 new file mode 100644 index 000000000..79307dd3c --- /dev/null +++ b/docker/packaging/Dockerfile-centos-7 @@ -0,0 +1,24 @@ +FROM centos:7 + +# Set up to use EPEL release files. +RUN yum install -y epel-release + +# Grab docker +COPY docker/packaging/texlive.profile pkg/redhat/nektar-centos-7.spec /root/ +WORKDIR /root + +# Install build dependencies from specfile. +RUN yum install -y yum-builddep ghostscript rpm-build wget perl-Digest-MD5 git && \ + yum-builddep -y nektar-centos-7.spec && \ + rm -f nektar-centos-7.spec + +# Install a reduced version of TeXLive for user/developer guide. +RUN wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl.zip && \ + unzip install-tl.zip && cd install-tl-* && \ + ./install-tl -profile ../texlive.profile && \ + PATH=/usr/local/texlive/2019/bin/x86_64-linux:$PATH \ + tlmgr install lm babel microtype amsmath amsfonts mathtools psnfss graphics \ + import tools xcolor listings lstaddons pgf environ bclogo hyperref memoir ec \ + xkeyval trimspaces mdframed l3packages etoolbox footmisc caption standalone \ + currfile filehook filemod epstopdf zref multirow jknapltx rsfs dirtree \ + svn-prov collectbox diff --git a/docker/packaging/Dockerfile-centos-8 b/docker/packaging/Dockerfile-centos-8 new file mode 100644 index 000000000..e67d05b55 --- /dev/null +++ b/docker/packaging/Dockerfile-centos-8 @@ -0,0 +1,31 @@ +FROM centos:8 + +# Since CentOS 8 is now EOL, we need to update the package repo paths +# before we can run package updates and install dependencies +RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" \ + -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" \ + /etc/yum.repos.d/CentOS-Linux-* + +# Set up to use EPEL release files and PowerTools +RUN yum install -y epel-release dnf-plugins-core && \ + yum config-manager --set-enabled powertools + +# Grab docker +COPY docker/packaging/texlive.profile pkg/redhat/nektar-centos-8.spec /root/ +WORKDIR /root + +# Install build dependencies from specfile. +RUN yum install -y ghostscript rpm-build wget perl-Digest-MD5 git && \ + dnf builddep -y nektar-centos-8.spec && \ + rm -f nektar-centos-8.spec + +# Install a reduced version of TeXLive for user/developer guide. +RUN wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl.zip && \ + unzip install-tl.zip && cd install-tl-* && \ + ./install-tl -profile ../texlive.profile && \ + PATH=/usr/local/texlive/2019/bin/x86_64-linux:$PATH \ + tlmgr install lm babel microtype amsmath amsfonts mathtools psnfss graphics \ + import tools xcolor listings lstaddons pgf environ bclogo hyperref memoir ec \ + xkeyval trimspaces mdframed l3packages etoolbox footmisc caption standalone \ + currfile filehook filemod epstopdf zref multirow jknapltx rsfs dirtree \ + svn-prov collectbox diff --git a/docker/packaging/Dockerfile-debian-bullseye b/docker/packaging/Dockerfile-debian-bullseye new file mode 100644 index 000000000..7a73ceb1b --- /dev/null +++ b/docker/packaging/Dockerfile-debian-bullseye @@ -0,0 +1,45 @@ +# vim: syntax=dockerfile + +FROM debian:bullseye-slim + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN DEBIAN_RELEASE=bullseye && \ + echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \ + /etc/apt/sources.list.d/debian-non-free.list && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-numpy-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN rm -f /usr/lib/x86_64-linux-gnu/openmpi/lib/*ucx* && \ + rm /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/*ucx* + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-debian-buster b/docker/packaging/Dockerfile-debian-buster new file mode 100644 index 000000000..67e79b008 --- /dev/null +++ b/docker/packaging/Dockerfile-debian-buster @@ -0,0 +1,42 @@ +# vim: syntax=dockerfile + +FROM debian:buster-slim + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN DEBIAN_RELEASE=buster && \ + echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \ + /etc/apt/sources.list.d/debian-non-free.list && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-numpy-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-debian-stretch b/docker/packaging/Dockerfile-debian-stretch new file mode 100644 index 000000000..5db1b1a41 --- /dev/null +++ b/docker/packaging/Dockerfile-debian-stretch @@ -0,0 +1,45 @@ +# vim: syntax=dockerfile + +FROM debian:stretch-slim + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN DEBIAN_RELEASE=stretch && \ + echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \ + /etc/apt/sources.list.d/debian-non-free.list && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-regex-dev libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +# Set Python3 to have higher priority than Python2. +RUN update-alternatives --install /usr/bin/python python /usr/bin/python2 1 &&\ + update-alternatives --install /usr/bin/python python /usr/bin/python3 2 + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-debian-unstable b/docker/packaging/Dockerfile-debian-unstable new file mode 100644 index 000000000..2b1b51018 --- /dev/null +++ b/docker/packaging/Dockerfile-debian-unstable @@ -0,0 +1,49 @@ +# vim: syntax=dockerfile + +FROM debian:sid-slim + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN DEBIAN_RELEASE=sid && \ + echo "deb http://deb.debian.org/debian ${DEBIAN_RELEASE} non-free" > \ + /etc/apt/sources.list.d/debian-non-free.list && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-numpy-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN rm -f /usr/lib/x86_64-linux-gnu/openmpi/lib/*ucx* && \ + rm /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/*ucx* + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +# Make sure python3-dev version matches latest installed interpreter +RUN PYTHON_MINOR=$(ls -1 /usr/bin/python3.* | sed -r 's/.*python3\.([0-9]*)$/\1/ g' | sort -n | tail -n 1) && \ + apt-get install -y libpython3.$PYTHON_MINOR-dev + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-fedora-35 b/docker/packaging/Dockerfile-fedora-35 new file mode 100644 index 000000000..5575ff22a --- /dev/null +++ b/docker/packaging/Dockerfile-fedora-35 @@ -0,0 +1,10 @@ +FROM fedora:35 + +# Install some basic build requirements. +RUN dnf install -y rpm-build dnf-plugins-core git + +WORKDIR /root +COPY pkg/redhat/nektar-fedora-35.spec . + +# Install build requirements from spec file. +RUN dnf builddep -y nektar-fedora-35.spec && rm -f nektar-fedora-35.spec diff --git a/docker/packaging/Dockerfile-source-archive b/docker/packaging/Dockerfile-source-archive new file mode 100644 index 000000000..5a8022a9d --- /dev/null +++ b/docker/packaging/Dockerfile-source-archive @@ -0,0 +1,19 @@ +# vim: syntax=dockerfile + +FROM debian:stable-slim + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN apt-get update && \ + apt-get install -y git tar gzip bzip2 xz-utils + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar diff --git a/docker/packaging/Dockerfile-source-doc b/docker/packaging/Dockerfile-source-doc new file mode 100644 index 000000000..f303f93b7 --- /dev/null +++ b/docker/packaging/Dockerfile-source-doc @@ -0,0 +1,27 @@ +# vim: syntax=dockerfile + +FROM debian:stable-slim + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN apt-get update && \ + apt-get install -y \ + build-essential cmake rsync flex \ + liblapack-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +# Patch security policy to allow PDF conversion by ImageMagick +RUN sed -i 's/rights="none" pattern="\(PDF\|PS\|EPS\)"/rights="read|write" pattern="\1"/g' /etc/ImageMagick-6/policy.xml + +USER nektar:nektar +WORKDIR /home/nektar diff --git a/docker/packaging/Dockerfile-ubuntu-bionic b/docker/packaging/Dockerfile-ubuntu-bionic new file mode 100644 index 000000000..1dd9fe35d --- /dev/null +++ b/docker/packaging/Dockerfile-ubuntu-bionic @@ -0,0 +1,40 @@ +# vim: syntax=dockerfile + +FROM ubuntu:bionic + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-numpy-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-ubuntu-focal b/docker/packaging/Dockerfile-ubuntu-focal new file mode 100644 index 000000000..9f2f69eb7 --- /dev/null +++ b/docker/packaging/Dockerfile-ubuntu-focal @@ -0,0 +1,40 @@ +# vim: syntax=dockerfile + +FROM ubuntu:focal + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-numpy-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-ubuntu-jammy b/docker/packaging/Dockerfile-ubuntu-jammy new file mode 100644 index 000000000..545089783 --- /dev/null +++ b/docker/packaging/Dockerfile-ubuntu-jammy @@ -0,0 +1,40 @@ +# vim: syntax=dockerfile + +FROM ubuntu:jammy + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-numpy-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/Dockerfile-ubuntu-xenial b/docker/packaging/Dockerfile-ubuntu-xenial new file mode 100644 index 000000000..a766fc3c2 --- /dev/null +++ b/docker/packaging/Dockerfile-ubuntu-xenial @@ -0,0 +1,44 @@ +# vim: syntax=dockerfile + +FROM ubuntu:xenial + +LABEL maintainer="Nektar++ Development Team " + +WORKDIR /root + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install -y \ + packaging-dev cmake git git-buildpackage vim \ + libboost-thread-dev libboost-iostreams-dev libboost-filesystem-dev \ + libboost-system-dev libboost-program-options-dev \ + libboost-python-dev libboost-regex-dev \ + libboost-timer-dev \ + libarpack2-dev \ + libfftw3-dev \ + libhdf5-mpi-dev \ + liblapack-dev \ + libtinyxml-dev \ + mpi-default-dev \ + zlib1g-dev \ + python3-dev python3-numpy \ + libptscotch-dev \ + liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev libgl-dev \ + libtet1.5-dev libtriangle-dev \ + texlive-base texlive-latex-extra texlive-science \ + texlive-fonts-recommended texlive-pstricks \ + doxygen graphviz imagemagick dvipng + +# Set Python3 to have higher priority than Python2. +RUN update-alternatives --install /usr/bin/python python /usr/bin/python2 1 &&\ + update-alternatives --install /usr/bin/python python /usr/bin/python3 2 + +RUN groupadd nektar && useradd -m -g nektar nektar + +# Force update to always run when building image +ARG INVALIDATE_CACHE +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y + +USER nektar:nektar +WORKDIR /home/nektar +COPY docker/packaging/quiltrc .quiltrc diff --git a/docker/packaging/quiltrc b/docker/packaging/quiltrc new file mode 100644 index 000000000..7f74f4c9f --- /dev/null +++ b/docker/packaging/quiltrc @@ -0,0 +1,10 @@ +d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done +if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then + # if in Debian packaging tree with unset $QUILT_PATCHES + QUILT_PATCHES="debian/patches" + QUILT_PATCH_OPTS="--reject-format=unified" + QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto" + QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" + QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33" + if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi +fi diff --git a/docker/packaging/texlive.profile b/docker/packaging/texlive.profile new file mode 100644 index 000000000..64e6d1405 --- /dev/null +++ b/docker/packaging/texlive.profile @@ -0,0 +1,30 @@ +# texlive.profile written on Sat Nov 23 11:42:20 2019 UTC +# It will NOT be updated and reflects only the +# installation profile at installation time. +selected_scheme scheme-basic +TEXDIR /usr/local/texlive/2019 +TEXMFCONFIG ~/.texlive2019/texmf-config +TEXMFHOME ~/texmf +TEXMFLOCAL /usr/local/texlive/texmf-local +TEXMFSYSCONFIG /usr/local/texlive/2019/texmf-config +TEXMFSYSVAR /usr/local/texlive/2019/texmf-var +TEXMFVAR ~/.texlive2019/texmf-var +binary_x86_64-linux 1 +instopt_adjustpath 0 +instopt_adjustrepo 1 +instopt_letter 0 +instopt_portable 0 +instopt_write18_restricted 1 +tlpdbopt_autobackup 1 +tlpdbopt_backupdir tlpkg/backups +tlpdbopt_create_formats 1 +tlpdbopt_desktop_integration 1 +tlpdbopt_file_assocs 1 +tlpdbopt_generate_updmap 0 +tlpdbopt_install_docfiles 1 +tlpdbopt_install_srcfiles 1 +tlpdbopt_post_code 1 +tlpdbopt_sys_bin /usr/local/bin +tlpdbopt_sys_info /usr/local/share/info +tlpdbopt_sys_man /usr/local/share/man +tlpdbopt_w32_multi_user 1 diff --git a/docs/developer-guide/CMakeLists.txt b/docs/developer-guide/CMakeLists.txt index f6e456a54..8f623cfba 100644 --- a/docs/developer-guide/CMakeLists.txt +++ b/docs/developer-guide/CMakeLists.txt @@ -14,40 +14,45 @@ MARK_AS_ADVANCED(HTLATEX) ADD_CUSTOM_TARGET(developer-guide-html TEXINPUTS=${DEVGUIDESRC}//: - ${HTLATEX} ${DEVGUIDESRC}/developers-guide.tex + ${HTLATEX} ${DEVGUIDESRC}/developer-guide.tex "${DEVGUIDESRC}/styling.cfg,html,3,next,NoFonts" - COMMAND BIBINPUTS=${DEVGUIDESRC} ${BIBTEX} developers-guide.aux + COMMAND BIBINPUTS=${DEVGUIDESRC} ${BIBTEX} developer-guide.aux COMMAND TEXINPUTS=${DEVGUIDESRC}//: - ${HTLATEX} ${DEVGUIDESRC}/developers-guide.tex + ${HTLATEX} ${DEVGUIDESRC}/developer-guide.tex "${DEVGUIDESRC}/styling.cfg,html,3,next,NoFonts" WORKING_DIRECTORY ${DEVGUIDE}/html ) # If tex4ht successful, create img dir and copy images across -FILE(GLOB_RECURSE imgfiles "${DEVGUIDESRC}/*.png" "${DEVGUIDESRC}/*.jpg") -ADD_CUSTOM_COMMAND(TARGET developer-guide-html - POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${DEVGUIDE}/html/img) +FILE(GLOB_RECURSE imgfiles RELATIVE ${DEVGUIDESRC} + "${DEVGUIDESRC}/*.png" "${DEVGUIDESRC}/*.jpg") FOREACH(img ${imgfiles}) - ADD_CUSTOM_COMMAND(TARGET developer-guide-html - POST_BUILD COMMAND - ${CMAKE_COMMAND} -E copy ${img} ${DEVGUIDE}/html/img) + GET_FILENAME_COMPONENT(DIRNAME ${img} DIRECTORY) + ADD_CUSTOM_COMMAND(TARGET developer-guide-html POST_BUILD + COMMENT "Copying ${img} to ${DEVGUIDE}/html/${img}" + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEVGUIDE}/html/${DIRNAME} + COMMAND ${CMAKE_COMMAND} -E copy ${img} ${DEVGUIDE}/html/${img} + WORKING_DIRECTORY ${DEVGUIDESRC}) ENDFOREACH() -FILE(GLOB_RECURSE pdffiles "${DEVGUIDESRC}/*.pdf") +FILE(GLOB_RECURSE pdffiles RELATIVE ${DEVGUIDESRC} "*/img/*.pdf") FIND_PROGRAM(CONVERT convert) FOREACH(pdf ${pdffiles}) - GET_FILENAME_COMPONENT(BASENAME ${pdf} NAME_WE) - ADD_CUSTOM_COMMAND(TARGET developer-guide-html - POST_BUILD COMMAND - ${CONVERT} ${pdf} ${DEVGUIDE}/html/img/${BASENAME}.png) + GET_FILENAME_COMPONENT(BASE ${pdf} NAME_WE) + GET_FILENAME_COMPONENT(DIR ${pdf} DIRECTORY) + ADD_CUSTOM_COMMAND(TARGET developer-guide-html POST_BUILD + COMMENT "Converting ${pdf} to ${DEVGUIDE}/html/${DIR}/${BASE}.png" + COMMAND ${CMAKE_COMMAND} -E make_directory ${DEVGUIDE}/html/${DIR} + COMMAND ${CONVERT} ${pdf} ${DEVGUIDE}/html/${DIR}/${BASE}.png + WORKING_DIRECTORY ${DEVGUIDESRC}) ENDFOREACH() ADD_CUSTOM_TARGET(developer-guide-pdf - ${PDFLATEX} --output-directory ${DEVGUIDE} ${DEVGUIDESRC}/developers-guide.tex - COMMAND TEXMFOUTPUT=${DEVGUIDE} ${BIBTEX} ${DEVGUIDE}/developers-guide.aux - COMMAND TEXMFOUTPUT=${DEVGUIDE} ${MAKEINDEX} ${DEVGUIDE}/developers-guide.idx - COMMAND ${PDFLATEX} --output-directory ${DEVGUIDE} ${DEVGUIDESRC}/developers-guide.tex - COMMAND ${PDFLATEX} --output-directory ${DEVGUIDE} ${DEVGUIDESRC}/developers-guide.tex + ${PDFLATEX} --output-directory ${DEVGUIDE} ${DEVGUIDESRC}/developer-guide.tex + COMMAND TEXMFOUTPUT=${DEVGUIDE} ${BIBTEX} ${DEVGUIDE}/developer-guide.aux + COMMAND TEXMFOUTPUT=${DEVGUIDE} ${MAKEINDEX} ${DEVGUIDE}/developer-guide.idx + COMMAND ${PDFLATEX} --output-directory ${DEVGUIDE} ${DEVGUIDESRC}/developer-guide.tex + COMMAND ${PDFLATEX} --output-directory ${DEVGUIDE} ${DEVGUIDESRC}/developer-guide.tex WORKING_DIRECTORY ${DEVGUIDESRC} ) @@ -57,10 +62,10 @@ INSTALL(CODE "IF (EXISTS ${DEVGUIDE}/html) LIST(LENGTH DGHTML DGHTML_LEN) IF(DGHTML_LEN GREATER 0) FILE(INSTALL ${DEVGUIDE}/html - DESTINATION \${CMAKE_INSTALL_PREFIX}/${NEKTAR_DOC_DIR}/developers-guide) + DESTINATION \${CMAKE_INSTALL_PREFIX}/${NEKTAR_DOC_DIR}/developer-guide) ENDIF() ENDIF() -IF (EXISTS ${DEVGUIDE}/developers-guide.pdf) - FILE(INSTALL ${DEVGUIDE}/developers-guide.pdf - DESTINATION \${CMAKE_INSTALL_PREFIX}/${NEKTAR_DOC_DIR}/developers-guide) +IF (EXISTS ${DEVGUIDE}/developer-guide.pdf) + FILE(INSTALL ${DEVGUIDE}/developer-guide.pdf + DESTINATION \${CMAKE_INSTALL_PREFIX}/${NEKTAR_DOC_DIR}/developer-guide) ENDIF()") diff --git a/docs/developer-guide/developers-guide.bib b/docs/developer-guide/developer-guide.bib similarity index 86% rename from docs/developer-guide/developers-guide.bib rename to docs/developer-guide/developer-guide.bib index 95cce1a5d..796a73458 100644 --- a/docs/developer-guide/developers-guide.bib +++ b/docs/developer-guide/developer-guide.bib @@ -634,3 +634,32 @@ year = "2011" note = "[Accessed 21 March 2018]" } +@article{knoll_jacobian_free_2004, + title = {Jacobian-free {N}ewton-{K}rylov methods: {A} survey of approaches and applications}, + shorttitle = {Jacobian-free {N}ewton-{K}rylov methods}, + author = {Knoll, D. A. and Keyes, D. E.}, + year = 2004, + month = jan, + journal = {Journal of Computational Physics}, + volume = 193, + number = 2, + pages = {357--397}, + doi = {10.1016/j.jcp.2003.08.010}, + issn = {0021-9991}, + url = {http://www.sciencedirect.com/science/article/pii/S0021999103004340}, + urldate = {2019-01-05}, + abstract = {Jacobian-free {N}ewton-{K}rylov (JFNK) methods are synergistic combinations of {N}ewton-type methods for superlinearly convergent solution of nonlinear equations and {K}rylov subspace methods for solving the {N}ewton correction equations. The link between the two methods is the Jacobian-vector product, which may be probed approximately without forming and storing the elements of the true Jacobian, through a variety of means. Various approximations to the Jacobian matrix may still be required for preconditioning the resulting {K}rylov iteration. As with {K}rylov methods for linear problems, successful application of the JFNK method to any given problem is dependent on adequate preconditioning. JFNK has potential for application throughout problems governed by nonlinear partial differential equations and integro-differential equations. In this survey paper, we place JFNK in context with other nonlinear solution algorithms for both boundary value problems (BVPs) and initial value problems (IVPs). We provide an overview of the mechanics of JFNK and attempt to illustrate the wide variety of preconditioning options available. It is emphasized that JFNK can be wrapped (as an accelerator) around another nonlinear fixed point method (interpreted as a preconditioning process, potentially with significant code reuse). The aim of this paper is not to trace fully the evolution of JFNK, nor to provide proofs of accuracy or optimal convergence for all of the constituent methods, but rather to present the reader with a perspective on how JFNK may be applicable to applications of interest and to provide sources of further practical information.}, + file = {ScienceDirect Full Text PDF:/media/zy3416/DATADRIVE1/documents/Zotero/storage/KZUR9KR6/Knoll and Keyes - 2004 - Jacobian-free {N}ewton-{K}rylov methods a survey of a.pdf:application/pdf;ScienceDirect Snapshot:/media/zy3416/DATADRIVE1/documents/Zotero/storage/4HUR5A2J/S0021999103004340.html:text/html} +} + +@article{saad_gmres:_1986, + title = {{GMRES}: {A} Generalized Minimal Residual Algorithm for Solving Nonsymmetric Linear Systems}, + shorttitle = {{GMRES}: {A} {Generalized} {Minimal} {Residual} {Algorithm} for Solving {Nonsymmetric} {Linear} Systems}, + author = {Saad, Youcef and Schultz, Martin H.}, + year = 1986, + journal = {SIAM Journal on Scientific and Statistical Computing}, + volume = 7, + number = 3, + pages = {856--869}, + file = {GMRES_A GENERALIZED MINIMAL RESIDUAL ALGORITHM FOR SOLVING NONSYMMETRIC LINEAR SYSTEMS:/media/zy3416/DATADRIVE1/documents/Zotero/storage/C6VXNKTD/GMRES_A GENERALIZED MINIMAL RESIDUAL ALGORITHM FOR SOLVING NONSYMMETRIC LINEAR SYSTEMS.pdf:application/pdf} +} \ No newline at end of file diff --git a/docs/developer-guide/developers-guide.tex b/docs/developer-guide/developer-guide.tex similarity index 97% rename from docs/developer-guide/developers-guide.tex rename to docs/developer-guide/developer-guide.tex index c628c1a2b..b5bb61a17 100644 --- a/docs/developer-guide/developers-guide.tex +++ b/docs/developer-guide/developer-guide.tex @@ -3,6 +3,7 @@ \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} \usepackage{makeidx} +\usepackage{multirow} \usepackage{hyperref} \hypersetup{ colorlinks=true, @@ -97,7 +98,7 @@ \bibliographystyle{plain} -\bibliography{developers-guide} +\bibliography{developer-guide} \printindex diff --git a/docs/developer-guide/library/LibUtilities/simdlib.tex b/docs/developer-guide/library/LibUtilities/simdlib.tex index 83d2a3332..f9bbeeb3b 100644 --- a/docs/developer-guide/library/LibUtilities/simdlib.tex +++ b/docs/developer-guide/library/LibUtilities/simdlib.tex @@ -2,7 +2,7 @@ \section{SIMDLib} This directory contains the tinysimd library, a header only library. -The library is a light, zero-overhead wrapper based on template meta-programming that automatically selects a SIMD intrinsics from the most specialized x86-64 instruction set extension available among SSE2 (limited support), AVX2 and AVX512 (not tested). +The library is a light, zero-overhead wrapper based on template meta-programming that automatically selects a SIMD intrinsics from the most specialized x86-64 instruction set extension available among SSE2 (limited support), AVX2 and AVX512 (not tested) or SVE for the ARM AArch64 architecture. The library is designed to be easily extended to other architectures. To use the library one needs to import the tinysimd.hpp header. @@ -13,6 +13,11 @@ To enable the vector types in {\nek} you need to set to \verb+ON+ the desired ex This will automatically set the appropriate compiler flags. However notice that currently these are set correctly only for gcc and that you might need to delete the cached variable \verb+CMAKE_CXX_FLAGS+ before configuring cmake. You can check that the desired vector extension was compiled properly by running the \verb+VecDataUnitTests+ which prints out the extension in use. +SVE (for instance \verb+NEKTAR_ENABLE_SIMD_SVE+) is a vector length agnostic ISA extension. +However, in order to wrap the SVE intrinsic types with c++ classes, we fix the size at compile time. +Therefore you need to set appropriate vector size (\verb+NEKTAR_SVE_BITS+) according to your target machine. + +Note, the extensions are advanced options and only the options relevant to the compiling machine architecture are made available (see NektarSIMD.cmake for more details). Vector types are largely used with the same semantic as built-in c++ types. diff --git a/docs/developer-guide/library/MultiRegions/multireg-preconditioners.tex b/docs/developer-guide/library/MultiRegions/multireg-preconditioners.tex index 7834c5996..5a06308dd 100644 --- a/docs/developer-guide/library/MultiRegions/multireg-preconditioners.tex +++ b/docs/developer-guide/library/MultiRegions/multireg-preconditioners.tex @@ -267,6 +267,18 @@ In the HDG system, we take the block corresponding to each face and invert it. Each of these inverse blocks then forms one of the diagonal components of the block matrix $\mathbf{M}^{-1}$. +Applied to the full matrix system $\mathbf{H}$, the preconditioner additionally includes the inverse of the interior modes $\mathbf{H}_{ii}$ and is defined by: +% +\[ +\mathbf{M}^{-1}=\left[\begin{array}{cccc} +(\mathbf{H_{bb}})^{-1}_{vv} & 0 & 0 & 0 \\ +0 & (\mathbf{H_{bb}})^{-1}_{eb} & 0 & 0 \\ +0 & 0 & (\mathbf{H_{bb}})^{-1}_{fb} & 0 \\ +0 & 0 & 0 & (\mathbf{H}_{ii})^{-1} +\end{array}\right] +\] +% + \subsection{Low energy} Low energy basis preconditioning follows the methodology proposed by Sherwin \& diff --git a/docs/developer-guide/memoir.4ht b/docs/developer-guide/memoir.4ht deleted file mode 100644 index ede0e3d33..000000000 --- a/docs/developer-guide/memoir.4ht +++ /dev/null @@ -1,120 +0,0 @@ -% memoir.4ht (2019-01-21-18:34), generated from tex4ht-4ht.tex -% Copyright 2003-2009 Eitan M. Gurari -% Copyright 2009-2019 TeX Users Group -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any -% later version. The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3c or later is part of all distributions -% of LaTeX version 2005/12/01 or later. -% -% This work has the LPPL maintenance status "maintained". -% -% The Current Maintainer of this work -% is the TeX4ht Project . -% -% If you modify this program, changing the -% version identification would be appreciated. -\immediate\write-1{version 2019-01-21-18:34} - -\input book.4ht -\input verse.4ht -\input booktabs.4ht -\let\columnlines\empty - -\let\rm\empty -\let\sf\empty -\let\tt\empty -\let\bf\empty -\let\it\empty - -\def\@chapter[#1]#2{% - \gHAdvance\:mpNum by 1 -\HAssign\minipageNum=\:mpNum \relax -% - {\SkipRefstepAnchor \let\addcontentsline\:gobbleIII\no@chapter[#1]{}% - \global\let\f@rtoc\f@rtoc - \ifx\f@rtoc\empty\gdef\f@rtoc{#2}\fi - \global\let\f@rhdr\f@rhdr }% - \HtmlEnv \Toc:Title{\f@rtoc}\:chapter{#2}} -\def\:tempc{\@ifstar\o:tableofcontents:\o:tableofcontents:} -\HLet\tableofcontents\:tempc -\NewConfigure{poemline}{2} -\NewConfigure{legend}{2} -\renewcommand\legend[1]{\a:legend #1\b:legend} - -\ifx \memgobble\:UnDef - \pend:defI\getthelinenumber{% - \let\sv:thepoemline\thepoemline - \pend:def\thepoemline{\a:poemline}% - \append:def\thepoemline{\b:poemline}} -\append:defI\getthelinenumber{\let\thepoemline\sv:thepoemline} - -\else - \pend:defII\getthelinenumber{% - \let\sv:thepoemline\thepoemline - \pend:def\thepoemline{\a:poemline}% - \append:def\thepoemline{\b:poemline}} -\append:defII\getthelinenumber{\let\thepoemline\sv:thepoemline} - - \let\no@Msect\M@sect -\NewConfigure{@sec @ssect}[1]{% - \def\rdef:sec##1{#1\csname no@##1\endcsname}} -\:CheckOption{sections-} \if:Option - \Configure{@sec @ssect}{} -\else - \Configure{@sec @ssect}{% - \let\sv:Sc\:Sc \let\sv:sect\@sect \let\sv:ssect\@ssect -\let\sv:Msect\M@sect -\let\:Sc\:gobble - \def\M@sect##1##2##3##4##5##6[##7][##8]##9{% - \ifx \o:@seccntformat:\:UnDef - \let\o:@seccntformat:\@seccntformat -\fi -\let\@seccntformat\:gobble -% - \let\M@sect\no@Msect \xdef\c:secnumdepth{##2}% - {\SkipRefstepAnchor \let\addcontentsline\:gobbleIII \let\mark\:gobble - \no@Msect{##1}{##2}{##3}{##4}{##5}{##6}[{##7}][{##8}]{}}% - \let\:Sc\sv:Sc \let\@sect\sv:sect \let\@ssect\sv:ssect -\let\M@sect\sv:Msect -% - \let\@seccntformat=\o:@seccntformat: -% - \HtmlEnv \Toc:Title{##8}\csname no:#1\endcsname{##9}}% -% - \def\@sect##1##2##3##4##5##6[##7]##8{% - \ifx \o:@seccntformat:\:UnDef - \let\o:@seccntformat:\@seccntformat -\fi -\let\@seccntformat\:gobble -% - \let\@sect\no@sect \xdef\c:secnumdepth{##2}% - {\SkipRefstepAnchor \let\addcontentsline\:gobbleIII \let\mark\:gobble - \no@sect{##1}{##2}{##3}{##4}{##5}{##6}[{##7}]{}}% - \let\:Sc\sv:Sc \let\@sect\sv:sect \let\@ssect\sv:ssect -\let\M@sect\sv:Msect -% - \let\@seccntformat=\o:@seccntformat: -% - \HtmlEnv \Toc:Title{##7}\csname no:#1\endcsname{##8}}% -% - \def\@ssect##1##2##3##4##5{% - \gdef\ssect:ttl{##5}% -% - \let\@ssect\no@ssect - {\def\addcontentsline####1####2####3{}% - \no@ssect{##1}{##2}{##3}{##4}{}}% - \let\:Sc\sv:Sc \let\@sect\sv:sect \let\@ssect\sv:ssect -\let\M@sect\sv:Msect -% - \HtmlEnv \csname :like#1\endcsname{##5}}% -\IgnorePar} -\fi - -\fi -\Hinput{memoir} -\endinput - diff --git a/docs/developer-guide/prelims/prelims.tex b/docs/developer-guide/prelims/prelims.tex index b005a1961..40fcdfb5f 100644 --- a/docs/developer-guide/prelims/prelims.tex +++ b/docs/developer-guide/prelims/prelims.tex @@ -241,11 +241,11 @@ To compile the Developer's Guide: \item Configure the Nektar++ build tree as normal. \item Run \begin{lstlisting}[style=BashInputStyle] - make developers-guide-pdf + make developer-guide-pdf \end{lstlisting} to make the PDF version, or run \begin{lstlisting}[style=BashInputStyle] - make developers-guide-html + make developer-guide-html \end{lstlisting} to make the HTML version. \end{enumerate} diff --git a/docs/developer-guide/shared/devguide-preamble.tex b/docs/developer-guide/shared/devguide-preamble.tex index a05aa79fc..d77df999c 100644 --- a/docs/developer-guide/shared/devguide-preamble.tex +++ b/docs/developer-guide/shared/devguide-preamble.tex @@ -23,6 +23,7 @@ openany, % A chapter may start on either a recto or verso page. \usepackage[final]{microtype} % Less badboxes \usepackage[stable]{footmisc} % Footnotes in section titles \usepackage{url} +\usepackage{mathrsfs} % \usepackage{kpfonts} %Font diff --git a/docs/developer-guide/solvers/compressible-solver.tex b/docs/developer-guide/solvers/compressible-solver.tex index 29f799d84..e3097a3e7 100644 --- a/docs/developer-guide/solvers/compressible-solver.tex +++ b/docs/developer-guide/solvers/compressible-solver.tex @@ -3,7 +3,155 @@ In this chapter, we walk the reader through our 2D and 3D compressible Navier-Stokes Solver (CompressibleFlowSolver). \section{Fundamental Theories of CompressibleFlowSolver} -\clearpage +\subsection{{Governing equations}}\label{sec:CompNSEqs} + The governing compressible Navier-Stokes equations, representing conservation of mass, momentum and energy, can be written in abridged form as + \begin{equation}\label{eq:NS-Eqs} + \frac{\partial \textbf{U}}{\partial t} = \textit{L}\left(\textbf{U}\right) = -\mathbf{\nabla}\cdot\mathbf{H}\; ; \qquad \textbf{H}_{i} = + \textbf{F}_{i}(\textbf{U}) - + \textbf{G}_{i}(\textbf{U},\nabla \textbf{U}), + \end{equation} + where $\textit{L}$ is the analytical nonlinear spatial operator, $\textbf{U}$ is the vector of conservative variables, $\textbf{F}=\textbf{F}(\textbf{U})$ is the inviscid flux and $\textbf{G}=\textbf{G}(\textbf{U},\nabla \textbf{U})$ is the viscous flux. + \subsection{{Discretization}}\label{sec:Spatial-discretization} + + \subsubsection{{Spatial discretization}} + Various spatial discretization methods are supported, for example the WeakDG and FR for advection term, LDG and IP methods for the diffusion term. Here, we take the weakDG as example. The computational domain ($\Omega$) + is divided into $N_{e}$ non-overlapping elements ($\Omega_{e}$). + The weak form of Eqs. \eqref{eq:NS-Eqs} is obtained by multiplying the test function $\phi_{p}$ and performing integration by parts in $\Omega_{e}$, + \begin{equation} + \intop_{\Omega_{e}}\frac{\partial\mathbf{U}}{\partial t}\phi_{p}d\Omega_{e}=\intop_{\Omega_{e}}\mathbf{\nabla}\phi_{p}\cdot\mathbf{H}d\Omega_{e}-\intop_{\varGamma_{e}}\phi_{p}\mathbf{H}^{n}d\varGamma_{e}.\label{eq:weak-integration} + \end{equation} + The fluxes are calculated at some quadrature points and a quadrature rule with $N_{Q}$ quadrature points is adopted to calculate the integration in the element and $N_{Q}^{\varGamma}$ quadrature points on element boundaries. This leads to + \begin{equation} + \begin{aligned}\sum_{i=1}^{N_{Q}}\sum_{q=1}^{N}\phi_{p}\left(\mathbf{x}_{i}\right)w_{i}J_{i}\phi_{q}\left(\mathbf{x}_{i}\right)\frac{d\mathbf{u}_{q}}{dt}= & \sum_{i=1}^{N_{Q}}w_{i}J_{i}\mathbf{\nabla}\phi_{p}\left(\mathbf{x}_{i}\right)\cdot\mathbf{H}\left(\mathbf{U}_{\delta,i}\right) + \\ + & -\sum_{i=1}^{N_{Q}^{\varGamma}}\phi_{p}\left(\mathbf{x}_{i}^{\varGamma}\right)w_{i}^{\varGamma}J_{i}^{\varGamma}\hat{\mathbf{H}}_{i}^{n}, + \end{aligned} + \label{eq:discrete-form-Equations} + \end{equation} + where ${\mathbf{u}_{q}}$ is the coefficient vector of the basis function. + The whole discretization can + be written in the following matrix form + \begin{equation} + \begin{aligned} + \frac{d\mathbf{u}}{dt} + & = \,\mathbf{M}^{-1} \textit{L}_{\delta}\left(\mathbf{U}\right) = \mathcal{L}_\delta \left(\textbf{u}_{\delta}\right) \\ + & = \,\mathbf{M}^{-1}\left[\sum_{j=1}^{d}\mathbf{B}^{T}\mathbf{D}_{j}^{T}\mathbf{\Lambda}\left(wJ\right)\mathbf{H}_{j} -\left(\mathbf{B}^{\varGamma}\mathbf{M_{c}}\right)^{T}\mathbf{\Lambda}\left(w^{\varGamma}J^{\varGamma}\right)\hat{\mathbf{H}}^{n} \right], + \end{aligned} + \label{eq:matrix-form-equations} + \end{equation} + where $d$ is the spatial dimension, $\mathbf{M}=\mathbf{B}^{T}\mathbf{\Lambda}\left(wJ\right)\mathbf{B}$ + is the mass matrix, $\mathbf{\Lambda}$ represents + a diagonal matrix, $\mathbf{D}_{j}$ is the derivative matrix in + the $j$th direction, $\mathbf{B}^{\varGamma}$ is the backward transformation + matrix of $\phi^{\varGamma}$ and $\mathbf{M_{c}}$ + is the mapping matrix between $\phi^{\varGamma}$ and $\phi$, $\mathbf{J}$ is the interpolation matrix from quadrature points of a element to quadrature points of its element boundaries. + + The weak DG scheme for the advection term is complete as long as a + Riemann numerical flux is used to calculate the normal flux, + $\hat{\mathbf{F}}^{n}\left(\mathbf{Q}^{+},\mathbf{Q}^{-},\mathbf{n}\right)$, + in which $\mathbf{Q}^{+}$ and $\mathbf{Q}^{-}$ are variable values + on the exterior and interior sides of the element boundaries, respectively. Similarly, LDG or IP methods are needed to provide the numerical fluxes on element boundaries for the diffusion terms. + \subsubsection{{Time discretization}}\label{sec:temporalDiscretization} + Various multi-step and multi-stage methods have been implemented in an object-oriented general linear methods framework. Here, the Runge-Kutta methods are took as examples. The $i$th stage of the Runge-Kutta method is + + \begin{equation}\label{eq:ESDIRKStages_coeffS} + \textbf{s}^{(i)} + =\textbf{u}^{n}+\Delta t \sum^{i-1}_{j=1}{a_{ij}\mathcal{L}_\delta\left(\textbf{u}_{\delta}^{(j)}\right)} + , i=1,2...s + \end{equation} + \begin{equation}\label{eq:ESDIRKStages_coeff} + \textbf{u}^{(i)}=\textbf{s}^{(i)}+\Delta t a_{ii} \mathcal{L}_\delta\left(\textbf{u}^{(i)}\right) + , i=1,2...s + \end{equation} + \begin{equation} + \textbf{U}_{\delta}^{(i)} = \textbf{B} \textbf{u}^{(i)},\label{eq:ESDIRKStages_coeffBWD} + \end{equation} + where $a_{ij}$ is the coefficient of the Runge-Kutta method, $\textbf{s}$ is a source term, $\textbf{B}$ is the backward transform matrix. + Finally, the solution of the new time step ($n+1$) is calculated by + \begin{equation}\label{eq:URKUpdate} + \textbf{U}^{n+1}=\textbf{U}^{n}+\Delta t\sum^{s}_{i=1}{b_{i} \textit{L}\left(\textbf{U}^{(i)}\right)} + , + \end{equation} + For explicit RK methods, $a_{ii} =0$, the discretization is complete and straightforward. + \subsubsection{{Jacobian-free Newton-Krylov method}}\label{sec:Newton-Krylov} + + Eq.~\eqref{eq:ESDIRKStages_coeff} of the implicit stages ($a_{ii} \neq 0$) can be written as the nonlinear system + \begin{equation}\label{eq:NonlinSys} + \textbf{N}(\textbf{u}_{\delta}^{(i)})=\textbf{u}_{\delta}^{(i)} - \textbf{s}^{(i)}-\Delta t a_{ii} \mathcal{L}_\delta\left(\textbf{u}_{\delta}^{(i)}\right) = \textbf{0}. + \end{equation} + This system is iteratively solved by Newton's method \cite{knoll_jacobian_free_2004} with the Newton step, $\Delta \textbf{v}=\textbf{v}^{k+1}-\textbf{v}^{k}$, updated through the solution of the linear system + \begin{equation}\label{eq:NewtonIte} + \frac{\partial \textbf{N}(\textbf{v}^{k})}{\partial \textbf{v}}\Delta \textbf{v}=-\textbf{N}(\textbf{v}^{k}). + \end{equation} + where $\textbf{v}^{0} = \textbf{s}^{(i)}$ is adopted as an initial guess. When the Newton residual is smaller than the convergence tolerance of the Newton iterations $\tau$, which is + \begin{equation}\label{eq:NewtonTol} + \lVert \textbf{N}(\textbf{v}^{k}) \rVert = \lVert \textbf{R}(\textbf{v}^{k}) \rVert \leq \tau, + \end{equation} + $\textbf{u}_{it}^{(i)} = \textbf{v}^{k}$ is regarded as the approximate solution of the nonlinear system, where $\textbf{R}$ is the remaining Newton residual vector $\textbf{N}(\textbf{u}^{(i)}_{it})$ after convergence. + + The restarted generalized minimal residual method (GMRES) \cite{saad_gmres:_1986} is used for solving the linear problem \eqref{eq:NewtonIte}. The Jacobian matrix and vector inner product operator is approximated by the following finite difference + \begin{equation} + \frac{\partial\mathbf{N}}{\partial\mathbf{u}}\left(\mathbf{u}\right)\cdot\mathbf{q} \simeq \frac{\mathbf{N}(\mathbf{u}+\epsilon\mathbf{q})-\mathbf{N}(\mathbf{u})}{\epsilon},\label{eq:Jacobian-free-matrix} + \end{equation} + where $\epsilon$ is the step size of the finite difference approximation. + + The use of good preconditioners in GMRES is very important for efficiently solving stiff linear systems. Instead of solving the system of Eq. \eqref{eq:NewtonIte} directly, one can get the same solution by solving the preconditioned linear system + \begin{equation} + \left(\frac{\partial\mathbf{N}}{\partial\mathbf{u}}\mathbf{P}^{-1}\right)\left(\mathbf{P}\bigtriangleup\bar{\mathbf{u}}^{l}\right)=-\mathbf{N}\left(\bar{\mathbf{u}}^{l}\right),\label{eq:preconditioning} + \end{equation} + where $\mathbf{P}$ is the preconditioning matrix. A low memory block relaxed Jacobi iterative preconditioner is implemented. + + + \section{Functions of the implementation} + + Table \ref{tab:CFSFunctionName} lists the + main functions of the explicit and implicit compressible flow solver. + The discretization of the advection term mainly uses the \texttt{ AdvectVolumeFlux} and + \texttt{ AdvectTraceFlux} to calculate the fluxes on the quadrature points of inside the element and on the element boundaries. + Then, \texttt{ IProductWRTDerivBase} and \texttt{ AddTraceIntegral} are adopted to perform the integrations. + Similarly, in the diffusion discretization, \texttt{ DiffuseVolumeFlux} and \texttt{ DiffuseTraceFlux} are implemented for calculating the fluxes, while \texttt{ IProductWRTDerivBase} and \texttt{ AddTraceIntegral} are for the integrations. For the diffusion term, spatial derivatives are needed and calculated using \texttt{ DiffuseCalcDerivative}. For the interior penalty method an extra symmetric term may be needed and calculated by \texttt{ AddDiffusionSymmFluxToCoeff}. The above functions forms the spatial operator of \texttt{ DoOdeRhs} and the explicit solver in relatively complete coupled with a explicit time integration scheme. For the implicit solver, extra functions are needed. The \texttt{ DoImplicitSolve} solves the nonlinear system, in which the \texttt{ NonlinSysEvaluatorCoeff1D} evaluates the nonlinear system residual, \texttt{ MatrixMultiplyMatrixFreeCoeff} calculates the Jacobian matrix vector inner product and \texttt{ PreconCoeff} perform the preconditioning. Provided a specific implicit time integration scheme, the \texttt{ DoImplicitSolve} helps solve the nonlinear system for implicit stages and the implicit solver is complete. + + \begin {table}[htbp!] + \caption {Table of variable and function mapping used in the compressible flow solver to their mathematical operations} \label{tab:CFSFunctionName} + \begin{center} + \scalebox{0.9}[1.]{ + \begin{tabular}{ | l | l|} + \hline + \textbf{ Variable/Function name} & \textbf{ Physical meaning} \\ + \hline + \texttt{ AdvectVolumeFlux} & Advection Euler flux: $\textbf{F}_{i}$\\ + \hline + \texttt{ AdvectTraceFlux} & Advection (Riemann) numerical flux at trace: $\hat{\textbf{F}}_{i}$\\ + \hline + \texttt{ IProductWRTDerivBase} & $\sum_{j=1}^{d}\mathbf{B}^{T}\mathbf{D}_{j}^{T}\mathbf{\Lambda}\left(wJ\right)$ operator to a vector\\ + \hline + \texttt{ AddTraceIntegral} & $\left(\mathbf{B}^{\varGamma}\mathbf{M_{c}}\right)^{T}\mathbf{\Lambda}\left(w^{\varGamma}J^{\varGamma}\right)$ to a vector\\ + \hline + \texttt{ MultiplyByElmImvMass} & Multiply the inverse of mass matrix to a vector\\ + \hline + \texttt{ DiffuseCalcDerivative} & Calculate the derivatives of a vector\\ + \hline + \texttt{ DiffuseVolumeFlux} & Analytical Diffusion flux: $\textbf{G}_{i}$ \\ + \hline + \texttt{ DiffuseTraceFlux} & Calculate the diffusion numerical flux $ \hat{\textbf{G}}$\\ + \hline + \texttt{ AddDiffusionSymmFluxToCoeff} & Add the integral of symmetric flux (special for IP)\\ + \hline + \texttt{ DoOdeRhs} & Calculate $\mathcal{L}_\delta \left(\textbf{u}_{\delta}\right)$\\ + \hline + \texttt{ DoImplicitSolve} & Solve the nonlinear system in implicit time integrations\\ + \hline + \texttt{ NonlinSysEvaluatorCoeff1D} & Calculate $\textbf{N}(\textbf{u}_{\delta}^{(i)})$\\ + \hline + \texttt{ MatrixMultiplyMatrixFreeCoeff} & Calculate ${\partial\mathbf{N}}/{\partial\mathbf{u}}\left(\mathbf{u}\right)\cdot\mathbf{q}$\\ + \hline + \texttt{ PreconCoeff} & Perform preconditioning\\ + \hline + \end{tabular} + } + \end{center} + \end{table} + \section{Data Structure of CompressibleFlowSolver} \begin{figure} \caption{CompressibleFlowSolver DataStructure} @@ -15,119 +163,199 @@ In this chapter, we walk the reader through our 2D and 3D compressible Navier-St \clearpage \section{Flow Chart of CompressibleFlowSolver} - \begin{figure} - \caption{CompressibleFlowSolver Main Flow Chart} - \centering - \begin{tikzpicture}[scale=0.2,node distance=1cm] -\node (A) -[rectangle, -rounded corners, -minimum width=8cm, -minimum height=1cm, -text centered, -draw=black, -fill=red!30] -{CompressibleFlowSolver$.$cpp}; -\node (B_1) -[rectangle, -rounded corners, -minimum width=8cm, -minimum height=1cm, -text width=8cm, -text centered, -draw=black, -fill=blue!20, -below =of A, -xshift=0cm, -yshift=0cm] -{Initialize Objects\\eg. DriverStandard::v$\_$InitObject\\See Figure \ref{fig1}}; -\draw[arrow](A)--(B_1); -\node (B_2) -[rectangle, -rounded corners, -minimum width=8cm, -minimum height=1cm, -text width=8cm, -text centered, -draw=black, -fill=blue!20, -below =of B_1, -xshift=0cm, -yshift=0cm] -{Execute Solver beginning from driver:\\eg. DriverStandard::v$\_$Execute}; -\draw[arrow](B_1)--(B_2); -\node (C_1) -[rectangle, -rounded corners, -minimum width=8cm, -minimum height=1cm, -text width=8cm, -text centered, -draw=black, -fill=yellow!20, -right= of B_2, -xshift=0cm, -yshift=0cm] -{Initial conditions: \\m$\_$equ[0]-$>$DoInitialise\\ See Figure \ref{fig2}}; -\draw[arrow](B_2.east)--(C_1); -\node (C_2) -[rectangle, -rounded corners, -minimum width=8cm, -minimum height=1cm, -text width=8cm, -text centered, -draw=black, -fill=yellow!20, -below = of C_1, -xshift=0cm, -yshift=0cm] -{Main execution of solver:\\m$\_$equ[0]-$>$DoSolve\\ See Figure \ref{fig3} and Figure \ref{fig4}}; -\draw[arrow](B_2.east)--($(B_2.east)+(2cm,0)$)|-(C_2); -\node (C_3) -[rectangle, -rounded corners, -minimum width=8cm, -minimum height=1cm, -text width=8cm, -text centered, -draw=black, -fill=yellow!20, -below = of C_2, -xshift=0cm, -yshift=0cm] -{Output brief information:\\m$\_$equ[0]-$>$Output}; -\draw[arrow](B_2.east)--($(B_2.east)+(2cm,0)$)|-(C_3); -\end{tikzpicture} - \end{figure} + + \begin{figure}[htbp!] + \begin{centering} + \includegraphics[width=1\textwidth]{./img/DataStructureFinal} + \par\end{centering} + \centering{}\caption{Class structure of the explicit and implicit solvers. The equation system classes ($\texttt{ EulerCFE}$ or $\texttt{ NavierStokesCFE}$) contain access to the main functionalities of the solver, such as time integration, and the solution fields. They make use of numerical methods from the libraries, such as $\texttt{ AdvectionWeakDG}$, and equations system related functions, such as the advection flux ($\texttt{ F}$) and diffusion flux ($\texttt{ G}$), to form the spatial discretization operator $\texttt{ A}$. The spatial operator $\texttt{ A}$ and the time integration method form the explicit solver using the method of lines. For the implicit solver, additional classes like the Newton solver ($\texttt{ NekNonlinSysNewton}$), GMRES solver ($\texttt{ NekLinSysIterGMRES}$) and linear algebra solver of preconditioners (e.g. $\texttt{ PrecondCfsBRJ}$) are instantiated. Together with operators related to the nonlinear system ($\texttt{ C}$), the Jacobian matrix ($\texttt{ D}$) and preconditioning matrix ($\texttt{ E}$), an implicit system solver ($\texttt{ B}$) is constructed, which is linked to the implicit time integration scheme to form the implicit solver.} \label{fig:Class-structure-of} + \end{figure} + -\clearpage - \begin{figure} - \caption{CompressibleFlowSolver InitObject}\label{fig1} - \centering - \includestandalone[width=1\linewidth]{FlowChart1} - \end{figure} + The main procedures for building a solver are briefly introduced using + the explicit solver of the NS equations as an example. Besides the main + solver class ($\texttt{ CompressibleFlowSolver}$) which controls the + solving procedure, an equation system class is needed. The + equation system classes ($\texttt{ EulerCFE}$ or $\texttt{ NavierStokesCFE}$) + are instantiated and initialized dynamically based on user inputs using + a factory method pattern \cite{Cantwell2015}, which is also extensively + used for the dynamic object creation of classes in the solver. The equation + system class inherits instantiations of classes related to geometry + information, solution approximation, time integration and others from + equations system classes in the libraries such as $\texttt{ UnsteadySystem}$ + in $\texttt{ SolverUtils}$. Thus the main functionality of the equation system class + is to offer equation system related functions and to form spatial + discretization operators using numerical methods from the libraries + such as, $\texttt{ AdvectionWeakDG}$. Fig.~\ref{fig:Class-structure-of} + illustrates the class structure of the explicit and implicit solvers. + The equation of state ($\texttt{ EquationOfState}$), boundary conditions + ($\texttt{ CFSBndCond}$), Riemann flux ($\texttt{ RiemmanSolver}$), shock + capturing method ($\texttt{ ArtificialDiffusion}$), forcing term ($\texttt{ Forcing}$), + advection flux (function pointer $\texttt{ F}$) and diffusion flux (function + pointer $\texttt{ G}$) are instantiated or implemented in the equation system class. + Specific numerical schemes like the weak + DG scheme for advection terms ($\texttt{ AdvectionWeakDG}$) and the interior + penalty method for diffusion terms ($\texttt{ DiffusionIP}$) are instantiated + to calculate $\mathbf{\nabla}\cdot\mathbf{F}$ + and $\mathbf{\nabla}\cdot\mathbf{G}$ in Eq. \eqref{eq:NS-Eqs} + provided with all these equation system related functions ($\texttt{ F}$ and $\texttt{ G}$). Finally + the spatial discretization operator $\textit{L}_{\delta}\left(\mathbf{u},t\right)$ + is linked to the time integration class using the pointer-to-function + $\texttt{ A}$ and the explicit solver is complete. -\clearpage - \begin{figure} - \caption{CompressibleFlowSolver Initialize Conditions}\label{fig2} - \centering - \includestandalone[width=1\linewidth]{FlowChart2} - \end{figure} + The main simulation flowchart of the implicit solver is given in Tab. \ref{tab:Cfs-NSFlow-chart}, which also shows the flow between different classes. + \begin {table}[htbp!] + \caption {Nassi--Shneiderman diagram of the implicit solver with the corresponding + class names. Brown: library class ; cyan: solver class.} \label{tab:Cfs-NSFlow-chart} + \begin{tabular}{|l|l|l|l|l|l||ll||l||l||l||l||l|} + \hline + \multicolumn{7}{|l}{Initialization} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{cyan}{\footnotesize{}$\texttt{CompressibleFlowSolver}$}}\tabularnewline + \hline + \multicolumn{7}{|l}{Time step loop $n$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{UnsteadySystem}$}}\tabularnewline + \cline{2-13} \cline{3-13} \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + \multirow{12}{*}{} & \multicolumn{6}{l}{Runge-Kutta loop $m=1,\cdots,M$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{TimeIntegrationScheme}$}}\tabularnewline + \cline{3-13} \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & \multirow{10}{*}{} & \multicolumn{5}{l}{Calculate source term $\mathbf{S}_{m}$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{TimeIntegrationScheme}$}}\tabularnewline + \cline{3-13} \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & \multicolumn{5}{l}{Netwon iteration $l$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{NewtonSolver}$}}\tabularnewline + \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & \multirow{8}{*}{} & \multicolumn{4}{l}{Calculate residual $\mathbf{N}\left(\bar{\mathbf{u}}^{l}\right)$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{cyan}{\footnotesize{}$\texttt{CFSImplicit}$}}\tabularnewline + \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & \multicolumn{4}{l}{GMRES iteration $k$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{NekLinSysIterGMRES}$}}\tabularnewline + \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & \multirow{5}{*}{} & \multicolumn{3}{l}{Calculate search vector $\mathbf{q}_{k}$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{NekLinSysIterGMRES}$}}\tabularnewline + \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & & \multicolumn{3}{l}{BRJ iteration $j=1,\cdots,J$ } & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{PrecondBRJ}$}}\tabularnewline + \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & & & \multicolumn{2}{l}{Calculate {\small{}$\hat{\mathbf{q}}^{j}=\hat{\mathbf{D}}^{-1}\left(\mathbf{q}_{k}-\left(\mathbf{\hat{L}}+\hat{\mathbf{U}}\right)\hat{\mathbf{q}}^{j-1}\right)$}} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{cyan}{\footnotesize{}$\texttt{CFSImplicit}$}}\tabularnewline + \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & & \multicolumn{3}{l}{Calculate $\partial\mathbf{N}/\partial\mathbf{u}\cdot\hat{\mathbf{q}}^{J}$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{cyan}{\footnotesize{}$\texttt{CFSImplicit}$}}\tabularnewline + \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & & \multicolumn{3}{l}{Calculate linear system residual} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{NekLinSysIterGMRES}$}}\tabularnewline + \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & & & \multicolumn{4}{l}{Calculate $\bar{\mathbf{u}}^{l+1}$ by linear combination of $\mathbf{q}_{k}$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{NekLinSysIterGMRES}$}}\tabularnewline + \cline{2-13} \cline{3-13} \cline{4-13} \cline{5-13} \cline{6-13} \cline{7-13} \cline{8-13} \cline{9-13} \cline{10-13} \cline{11-13} \cline{12-13} \cline{13-13} + & \multicolumn{6}{l}{Calculate $\mathbf{u}^{n+1}$} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{brown}{\footnotesize{}$\texttt{TimeIntegrationScheme}$}}\tabularnewline + \hline + \multicolumn{7}{|l}{Output and finalization} & \multicolumn{6}{l|}{{\footnotesize{}in }\textcolor{cyan}{\footnotesize{}$\texttt{CompressibleFlowSolver}$}}\tabularnewline + \hline + \end{tabular} + \end{table} -\clearpage - \begin{figure} - \caption{CompressibleFlowSolver Execute Advection}\label{fig3} - \centering - \includestandalone[width=0.5\linewidth]{FlowChart3} - \end{figure} + %% \begin{figure} + %% \caption{CompressibleFlowSolver Main Flow Chart} + %% \centering + %% \begin{tikzpicture}[scale=0.2,node distance=1cm] + %% \node (A) + %% [rectangle, + %% rounded corners, + %% minimum width=8cm, + %% minimum height=1cm, + %% text centered, + %% draw=black, + %% fill=red!30] + %% {CompressibleFlowSolver$.$cpp}; + %% \node (B_1) + %% [rectangle, + %% rounded corners, + %% minimum width=8cm, + %% minimum height=1cm, + %% text width=8cm, + %% text centered, + %% draw=black, + %% fill=blue!20, + %% below =of A, + %% xshift=0cm, + %% yshift=0cm] + %% {Initialize Objects\\eg. DriverStandard::v$\_$InitObject\\See Figure \ref{fig1}}; + %% \draw[arrow](A)--(B_1); + %% \node (B_2) + %% [rectangle, + %% rounded corners, + %% minimum width=8cm, + %% minimum height=1cm, + %% text width=8cm, + %% text centered, + %% draw=black, + %% fill=blue!20, + %% below =of B_1, + %% xshift=0cm, + %% yshift=0cm] + %% {Execute Solver beginning from driver:\\eg. DriverStandard::v$\_$Execute}; + %% \draw[arrow](B_1)--(B_2); + %% \node (C_1) + %% [rectangle, + %% rounded corners, + %% minimum width=8cm, + %% minimum height=1cm, + %% text width=8cm, + %% text centered, + %% draw=black, + %% fill=yellow!20, + %% right= of B_2, + %% xshift=0cm, + %% yshift=0cm] + %% {Initial conditions: \\m$\_$equ[0]-$>$DoInitialise\\ See Figure \ref{fig2}}; + %% \draw[arrow](B_2.east)--(C_1); + %% \node (C_2) + %% [rectangle, + %% rounded corners, + %% minimum width=8cm, + %% minimum height=1cm, + %% text width=8cm, + %% text centered, + %% draw=black, + %% fill=yellow!20, + %% below = of C_1, + %% xshift=0cm, + %% yshift=0cm] + %% {Main execution of solver:\\m$\_$equ[0]-$>$DoSolve\\ See Figure \ref{fig3} and Figure \ref{fig4}}; + %% \draw[arrow](B_2.east)--($(B_2.east)+(2cm,0)$)|-(C_2); + %% \node (C_3) + %% [rectangle, + %% rounded corners, + %% minimum width=8cm, + %% minimum height=1cm, + %% text width=8cm, + %% text centered, + %% draw=black, + %% fill=yellow!20, + %% below = of C_2, + %% xshift=0cm, + %% yshift=0cm] + %% {Output brief information:\\m$\_$equ[0]-$>$Output}; + %% \draw[arrow](B_2.east)--($(B_2.east)+(2cm,0)$)|-(C_3); + %% \end{tikzpicture} + %% \end{figure} + -\clearpage - \begin{figure} - \caption{CompressibleFlowSolver Execute Diffusion}\label{fig4} - \centering - \includestandalone[width=0.5\linewidth]{FlowChart4} - \end{figure} +%% \clearpage +%% \begin{figure} +%% \caption{CompressibleFlowSolver InitObject}\label{fig1} +%% \centering +%% \includestandalone[width=1\linewidth]{FlowChart1} +%% \end{figure} + +%% \clearpage +%% \begin{figure} +%% \caption{CompressibleFlowSolver Initialize Conditions}\label{fig2} +%% \centering +%% \includestandalone[width=1\linewidth]{FlowChart2} +%% \end{figure} + +%% \clearpage +%% \begin{figure} +%% \caption{CompressibleFlowSolver Execute Advection}\label{fig3} +%% \centering +%% \includestandalone[width=0.5\linewidth]{FlowChart3} +%% \end{figure} + +%% \clearpage +%% \begin{figure} +%% \caption{CompressibleFlowSolver Execute Diffusion}\label{fig4} +%% \centering +%% \includestandalone[width=0.5\linewidth]{FlowChart4} +%% \end{figure} % \section{The Fundamentals Behind the Compressible Flow Solver} diff --git a/docs/developer-guide/solvers/img/DataStructureFinal.png b/docs/developer-guide/solvers/img/DataStructureFinal.png new file mode 100644 index 0000000000000000000000000000000000000000..cec18a597ba14b047fefb5397e86eb37deffb591 GIT binary patch literal 224238 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
?G+&? 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

;HY0J75Yue!4M6^wW8^>G; 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≫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 z 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

c&ky)b8kgJmbG!5CH z;n|CjJe_U}9D)9$J?gJK^hOe|R$<+(_Te>L^fWzCuqIm>n{llpid-5=9riepi9|$! zs%%0NV>$^vvWE@c6jWd!=w_(*yVS?u1+$9rkp+e74>F}CU^%uNi(lktG1@sGrOL@-le?`S)~knDgUXAIvyvF*QN)7su0ms zRn>BjYEis{w0O7(q|xaca3e%~%buFte)c*l8Utl-*39v=pYm9fl=eM>XNrI;nXV>X zTK{V-%JqvI)+Nlb>!*wV$HS{IYsG1}bIa}a3SrgF{xQsHo)%!fB{D%}xFGbXshY#r zA;k}$Envt?0o=keswvzQSD(5z(oKWI9k37r%7|*FJ_7^VY_Ng6c5>EnO(OhswQ*8ENIM zL$S$vsgdyQW%A5K&YCvzAV$_GLJylW3-%r@_~U?c&sq0zlZg(zu4xWWfXr%N=qgqk zPBaM}bw}HKxIhufnT(%d3CVJ|-z+qoBTMt-lf>%@S0^Y9Y^1Wfg5?Ad|b@ zAYqodpB(q5>()SVItW<4MK#~N?Z#d7B?W<~#%FCJ zg29S;h+!mr3N4IKG6(XL?A z8weaWS+xk6>b5@7i-s15oPNaKHR7<~xHQH|l=&Ni`O-*?`T$Fn(`~$O zQ6Ya=1*<86M04If^UbbR?Vn@nm|LG;;T;B^^fn$Xj6IkAG851sEnq6`r>85p3koHr zmY(oNXoQogZA|mA=YJt@OHb=)_SxTb&iZxOjqWn$zMm8?c0|16Lxo{X6{h07oI`8Moq2%oPAw6F=dU?YY< z6D|NQ5F`mB-v%a+{*t6D%OMR<$-+Mii!UhFtC6K0C0`E6xeipe4k0I?naUd!;bXI2 zi*~Bp^xk?j)cfz32kQ3`!pI-QiSd6&oc`H@=u+dqL=5;RS8u7r>jK#WDVL^}bEwhl z`C`K*G_*-(VNQyL{>jo>Tc_1#QUl~?7EwCrObz+h!5}CSdd7*}8 z4)tZ%JU(96r=CSlujAcmoMh~WK_u3#9_4$S>=^Y75+&BpPj>Pa9k6KR7)0ZU8!l*R zooX(8A3Ka|2naFtKu-|c0@iGZhAm38_XyBLKH-ygzn)2{qvQQ1oHTJuPmn)`o3tyH z1015n_c$RU`Y)r$f}-k}l4v(Ki|=`ZCxq=d=nGEsouXl&f^qQFNCN2G#FdVLXIr4| zqgGGhw~=au5YX%jFI5+EwYIvoMY-A$P_(RAI{n`!E*%1I?PVs@Wn&{Gc&48NWOwxd z%U1q8VtwY}A%7tQM2ptV{cuh5*FUTh--t!tMd^@h?QEqQOxICwPk;OVgfCDnf4Z+N z5FdIFyvWZn#@2S9r*0vt2dJ(;qgS23tuiN1t-%foc>yuU7Qfm@9xkn#7C&j!mBud3 zHWsr*`#lO|MSdAA$50T7p;qG>jcG(o>1 zG^Whv^*WgP?e&~~|2%)K$NRMwbIkb_o6Gn8*;;$S?-rvPrR#NnF#TIj*Xw;qkB_&d zkBfqHZdVA==t_H}bczOba7|fX`sjt+n<>&DD9mP7q6C{ne9G{48!g_yr-vU|!%oLa z^hOqv(-25E+t&h~H)^gOA2oKlUf`B{30~gN5kqt(&poj~IFCZM&hCK6C92-U*%g9e&x2o-V&94|tMkt(p&`sz95%*c z6XO~Y!-0tb5%?>sp`+c%DWip!GhA+(xEm#Wa~z(bMbHo41ckh=4XYsi=yy$ouquvA zI~N~w?g*HkV>q7mh3;t6*d9ON(Ojel1XEx7=|^jbln&`&b>AL~J|EBHf-Op(vsxEQ z9PV@>_JJ;m%)ypk*AJKW8Z>G-3MAQ5@($ZC+A*ybxQ?I8S*+qe%5}exFj1L?@#xu> zhZK~&;MajwfRlKj4Ki)&R=a84nuvHl*w|XKvTk?IiPPXDz2%*LmGAC=G?-YwTDevE z;F;|5{Y=??>F)Es)|Fr+Z_!Tmw`I$M2-kKq^oM8)H59nzRnxMEl`-S?6EH8G%4=g! zog{pr$Td#u>yuF`vdT&dmkSGnC1MV=_FDY0Uvazg98N{qv-4IMRN97@-oN-oH}3y# zri{%xsDef9rx}m3Lc&qkYSGyPMyd~dOeTD*encVl$k<7lZp$>k9$>D_ z53*%{fKoT^B;~N#!QI|bwV+Eh4+>GeA&p4MSP^;)9&N9i?eO4i)@A-Lq6zcC_=jjR z`wyaN_CJUwVKvAM_EKxMvUhn#B4*1@B=+IKX*ba3!NV)mS&A+wtZ-(}9l8SQ#-vEx zJq1)d63%qYKf*f;`NTGz4zD7ZW(CZ`_LWQg@LL)VG;ztU(b&YB(u_IMH{vJe%c90b zjZ*S2(o|Kh$*)8Ga|x3Ko1wEW3mgUa52yi%_gE?zeGI!dHKiFMj?z1i#stQdZ(5ep z?H6a)U@9;s`(aarNv_B`f0^16?gC;uC=K&;4lP6cEC|N1c4w7Y)p^Q9*=RaMhYc*3 zdA7wxWsxRTrkRyRTx2>UFqo*<`!uQPmJV1{C*XxT7r4AgH_sE+H7z#Rc=JyX;cp0i zQfl5YVFU_WGXCa~V%Uz?EnIjlT;NQAfabn0G!?`HVnW`lwehfBKA7dL}E*UoS}EY}cy2`!vs; zFX8g{!YgP$Hp&qJxupxEy@DaK^xVc1>-NxfG8@{bm&f9p42gLYmoK&W65E5DjeX{^ znk{N=<}FmXf|ArOTc>Cm%+Ndr)Xic&2==aGa@%Difjn_O&Op6QD$2tQCZH)3f0|Y< z+*mZnET1sH>mCdAaQP?yu814?RZ!w~`33dw7cUZfojtA}N3-?M^UZ%g3fVcBILbTN z+ByEq4pyzKW1C5j?48^64S##J2WKe0P}I;LPg<>n*Mhg>pNNkUWmS5~eAzo4Qe>%$ z`zHU<7wpJ4#q&IHx#?Jn7CYXt^pFX>*=L;pw#IDjyF$#@bIl)5ot5fM)O@-~`dX~* z(E9mt>Y@&(%CYEqDs&R46C~WNH6i2h;Gg&uq3}$KH za7p?~BPr~ttCGhL0*bNEpKtCn%MYbfiswq`!RYf2E;}$Y+v$V9#T7A!4 zb2=^3=1e0q0h^E6BVd=oXLNbGxevaz0UKnA_ffIBAh_u+iFQR9K|TUF6ai%h|C1v66GJYgQ9=ixSNF{CCQ*o=%&#odU+`E9&g0bgeMNSPZhAt_53z{ zr{C%e`0tSx^q%=#^izs4{4rSlXQa89o4Ed0q(v)D+pf_g_sFe%>vz9r1Szr-3ND(j z(eg+KT-vP0?)=bwd_q9JpE)?>P3QToD_>jB6H|LWCtUR-{KKoD6`6>@nuksG)xIf3| z5(Za|JKwoPH#+P-Xa^(ewFT(F<}-;b#Q90XY4d#k$RIl%z?R;>;()hDUJ3ABlC#PS z+QaB@<;LHiTBXEBEPFsmWzVvYmlkU}zZr*AJyT&6B8ji^KcV_{zH`CXYO>_q>kCf~*a*Rbzbo)Z(9#wHT-#`Yx zF7sbMV~x!r*f-@!&w8OH4*ww0Tk=TU>IiEZCeWqUZg)>?$0Q<4cHF6~ex7%b$$Ioc zquYS?5$iZSQ`4pN856Wu(R*dM*DFXf_`rT&J8o_K_#dvpmCxwd;-9Ko%g^gahW#IK zzk#8ZiIS7MmB~Np1Lm&;Yydqv|894lq+r62U3ISs~*7rpfDF z0^KB^WI?L>g)uYG_YNRp2g_y=7-+0#pb`I){ieNnlYSi}lzYo|F}J;(yJID?+WAb0 zS*9Imp`)WpP|!iIG_bdlDJ=X^4;|1nPZULxp1cuqfCMF4(5Q(x)C zVVJo%khTZ&u)XrqVte@~CAANK!#|p}|6OeW@$;{YZH@kk(f?sKh=>lLtog~D$UnFK z|0+cO*D?b;yZ=a>lmF5x_GZ5DNk0{Vt+Wu38+QaH!NYnnyZGPNy|2k`Oj(%@|H@&W zWe!S=FPnv8z!isvf5g8d_>Roid8PB}Tu(t|BSz1}-5Rmo>Us8L;^SF!xWdP=+y`QDMs7q8%97{up01V;t?&_FMK+^>K5c}RY-H==M2p)q}#qy;sTPH zkgm@#G|=ICW%zjWlcNHB2Han`(sWY5ghnpQ#&n8#=MA$#CBwWs9T240$&V4cOmEt& z2apucP%`lswW;~#1gq{vFdjv9Ia88u74W-=FoSQ1ioqtHrG(%IAYw`1lSVJ%4k?y3 z1j}a~H~0O^=9-O_mUiBz9K|7&YyO9 z*MG^hyz#(Bx_Wg+Yl?!&V_>`Pihy)2MSf>uKHE1Rv_ z?Ai;St7*-0BI|gsUKdt}0|`p$c@YN8ym$)vr7W%cL&a}uH&97HyGZ$W0jLk$y(=MV zb+Yn-f{du+ixhArS|mvs+40mrMfU&RVwa%=D&FfSSC{?7_rG%Wf5oL3Xe<852TY4PT`oEH~Q(u3E%UtYy7P+Ybs~wl9DQpV$UyxldwU z9vCVm=lSDxGOBS3yop}%Q~^#0`u&zSBI{W5Zo}*(pM%|Ll$DK9 zLD7I3x{9LT1B4cm__B=L)9k`qg2BZQ8pJhwXGWllrDcZ~`w~1=d*c>ihnAqT4Pct& z8GE^}%_`h1JgGn=1u2safP(%&-tP&PEF0L@lV@e%(>-5dDJ%Hyp7Eh6s&gvEkf7x% zU8%ahqCz&Al|k?eST8#}hpl>8a=8)FPn{Ixas0RswB#4p&z`#{`~6QJ6*BFl-QI*Vr-#~ZJWbtzgPcV<&pBZVBx7+=*3rcg>MbV(#&=KJPQ zyXB^kk#dX{}_|Wj?qh)&lLx4EY$mK)V^yYN0_wvB0it6 z<{NuPxBaRky`AnI>iI{+^53Tl53ziTyA=RnbN~PV?f*ShPG-*5hBgM~RF?ckl*01|@@bh%z% z)7=Dud>C$z3=adE6AQn*z)|2O#KkMg%frJfDJUf< zB_=4veS1TIlHTA@TX9=iaXScl3Eq8A^SSo&6F)P2&nApVkM6{o_Y9gi zlc0UX-F)(9TA6?aFQI3Bu6nlWcY!4-FEBU7va{nk@*p6hB6!o1(mpHd3Mfcuh`dL~ z)a3N|=eGwJCpSk|XLp8{rnbh`>Wz-f)ZK)Qmi;N39-}DN>nZsh9h;n>Bd4aUsi-Nh zuCz6?I=eW#I=y_~{Qm7_=wRVt>SBZ2($Z7k-rU{T8OqMV!`0g+tgG{lg9ZwI&lmd0 zC-xL;9}lqK5gHsE9{ldAjsD!_50wZEl_>%csw|51oK1yMxfA++&;YSb#dWiiW8P1( z)fvr`XN(rWBlv-{<{NeKZKL1+%@=*)3wz-kZHX)F7Y;~`O9}xF-Ld$E@QCiH6v$~u zAc2SB#WS}kicr9zkaAt%DmWT?D@k5eFY*dYY?VsgDV2nO{VrU*YPW^q`1v67KaSir}Pod%Zo5D#`4iaZj_r;Qs;b0wH zp3!FZ6OwA6(wdNXaHv_0{*@;lf7X!!@|0nO?^3!{+DeRQ2)+YLY*Ely`I^6#!X#`> z*u4kw@-cV)qcn-yAwckH?30;VrENNRdhu7Y%oTsIKF-6ti_ZG)F4(x}41_YAPJG=& zEV)esTHiw8S7&8hZ{JoJ*WG=0{g#1r?6!L1@mhy#o*d^$Yt4*Sm4ekVm}mIA#)8o? zvr^F)&~*07BNy&W6r_FwQNj~UqL{p*YaZ|h?G1>)CXSi(A~2S44aN7iu5J8Cx32Ub z_!Pt36SmSIidDC299Z1u>tY{|t(52{D5 ztRu}@M4myXy{^CZV3cxzdRPWRqtduhhsUeS)fWZTS+WTeKyQJ%=?JV0#DLXw~QgrPdbD;x@g z-50%TBt+K(;6hb-sWk}g&wFhfHnPo*U=(wi**M!QFL`)N_;vMi9Hv<^akB*CW#tpN zW_qi6+4o={YA2=-J`g5-h_>g6jjqnFsL6>o)>I8Alvb;hF&?-WK<0bdDUNdJu%=qe zSuu?tCg$^tr{#FZ?xUWStm3|Q>?sY8!j)E3X%QX=hLa7n9rl5b+61_Zb z^Sli7@Dz$WTjZLt`fG!~KFtbj!+fqh87)w-Je>j2Jp6asfODy3)h!oT;PV01BT;Eh zrC(u->bEOCYA{hVrk~H&+Q)TR*q&avV}&`ezXZeCn50whl@h(10yq(tPq@#RFhCP^ zn;lrf@nasiUh^NlNm5vkh{Q`^Lr%N~S16C0ml0o22|+r{D}D)o@L8?cajuyc>Sv3! zYIH-=Kl`xA29k^<6beyfn=0h*TjxeIG3$XPf8HaD(}4Q}*cnmE+gtIbg^+kNBvn?k za=cI!wIf2&GXq(MGt1n14qu=Eg)4TNO4T5YjQL+;JetPKODVszDEC{#8X~x`kmLUk z082o$zkJtO^(9yC4#Z0rk}wgq&xX7y>+-0#&9hm5t!$ORFIm*mZQvw%#fCYwP*XoJ z;iC0|jeREf4%GF)KKo4C_6~%61hD+XzZ6eC1Kxp50DM;!;JfUTO?E~@fzp}H#F_Kc z(D17)vmBJijE5S<*(}ciEoJk~JFC-Pvk~Phna2uOIhqYcZyPbf?4>m#!ZgDD%0KFa zZsnB()amN?rBpt|XRY&wjI&!)_Z{_d3Lh}RJJYsriPNBHJc~QfMj99vDm-${BygQ)~aFl+(YI z!UIr>={a0+wI{U$O1L;H7r;?cXgajLY^F>dq0}K;{NtY2H_RYqG4_qEilvX1$EN7k zi39a2d%3Z~A5q)F|GSlaaJmmALQ3ziFXxrQ$|b#RVGECGETg&Y-(ON$i9|-h$Cava zF&aq}KRxFhwU3%OC&WMt*`rthojSlm%kZZy3N%N!GoDa12z))^iesHR7s;C zW!OqcAQn8@?(m0?gxoltUhI!awd9YQbTwjs25J@H-lDjZlYV*~;P7jzFkvv^?(&0C z2MDwky0-~Lg@SwuI8+sy*$WO1Fiu>Wf8`A@~@U*xA4-h*s4+QA_5XD z`z5-KypH-M*IQ{4y5u%6+eA|dNXlKr~Yy57t0rHYz&0TzVL#MwD4GFMCeSY zhkrbUO#Pqf+^X2}3A;n;&#_$(l=jD)njT|*9!HZSpUERaSE7MMez0?4%Gtbf5&Ith z@%Wwza;fQsDE+E6XNE4}OfZ@pMK$Jm=wyQ5WlAzpdwY4a|YM-BPN%MGEDiHqORKh;&y?c;Id>N$g#sJzG zP=c(6G0b!m6Z^O;z}4y_ei$L%m8%vRi0rcVH=iEzj*+wW$AnW0S`_Y&h3A*Nc^&X- zPc=nUsu@Op2LiP*`#2lH`+|5Rxjl1CnVxBl@d|Bx;1l@JrbI*KL#^3t%OJLEvVbB( zLODas;n7HL8E1S&(RpnJafq3Pftxyla;dpW|w|A$BN0Rwj+JgVO8>xYuKcc9QAKvr?> zagrx~_PYa_&18=G<*%LBpWpf#q^JE~EwL{013bKg@kzCsssTJDx_FOPEuACV)7PB7 z%J9j(-)!#%gC5@RlQYPMCqMuW@g4IQ6luJC2Rg|r+;3w>4tq$wP+n!a_aq=oZLm$W zm7TDFo%rBG_HY$V8LT}NeLszu2ssb17+RsMM>P|UOP+J3>!O-Zet}rEL<#s5O_Muz z&`;sKsZmFgwlF|JZHh@7{#Lr(?d2tI+1fL&9Bf>Z%Ed2fdYbp}CUqT1{0o1=NWI4f#7z#bfZ9;q=&M zj96OZfT3HoGH$qMJQh;E)@w`}YfoIx4pCzmSyeN(CTioJoa(r`OtiInoffY$DT(*p z$6On}oC&AA?(4eF!D$;mJUFwcZ)BquRNxn>mzngUh(*{rlgq)B`a(9J+Pj&}D?5%}#o+fF$|174?(cPcopHIHss{>s_hc~aGGBPF2>vPj7Ub|dU zY&$cbl5LU5yO~*+EL_&auE#-{@{IkZShC3A2PgUa8!nk1_Xi|aN?s!ji2?y=^4e~(cpq?gJJ zOIY=PaF6=2`9qQNu}HNoSSY*at|@Ub6_|E z&UZ9Tj+F=NM_->ZHf3Y^9Ip{aoF9s;XpSA$EYRepsHUbWwL~6{y}0e*gV99p3MQ5f zKYU9GL9{kft)ne&l;g6uBSY^d-M_HSiok znxn}okVb)kHuO;xO>&q$>!&f_UJpTSAJWDRW$B^t#V!hth6OJjolW-#i#<8ElKis( zjp;!)tl&cnZpCg9jF@@>-MY5raol!P*ngR#0sywCbs|2~t4!>6L9 znw_0H5UDiF{B0G3x#Bc$XMQDN@xsmw6^AWWghQ^a*0WkATMC&6pjUNn`33Wesp$!U z;O+L5jpYI`r|7x;ZC~@UPkN{Le@dqgLap_l*N!K(MZ9NT&1xkz@3nm!-YGNq=?SbK zs&wxJicPoR!Tq)1cc30ZGo`lrN`#Qh?!(1L8$W->DSmYtc&l6)*>TfK=o?mvz+bbs z-4~j7JWuO$v5Z?$9pjUpaHUmsCH^!{T_Ep;M-Cfw{r+24$1FhbW*xUXR$DdU?Dl@= zpP4lGy6jvHZ_fF{_4yO-l#})75#Zb8?b0u_5<_yYs@t2a zd{7I8lnM`GG|4G(K~Fw>=<)mFCzMI0TkLGaXv$Bb6*KuZ0Q?thS>?aR_KCj(VXy$k z_9V2+-3K52!IbR|^h*hfJclGP#i1D#%glCXvKVV?ZrD$ZYW52h#hn!s^q)pNQ|uO$ zHhw&tR~=-xSrOAlX(qR|pl@hgfzd6FRX&#J^`qh8Ce6rwI_!Q7_q5t`k@6qt)8sW* z0Y_mZlg>ZeVuCL&-@5~S(~AHM0a7Nklo{u;&jRc-iD*L3{IZF&zImMqb@#aXFv;5` zcDrc4_28IaG4vloBGP-Zh$|6~wxWxX(lhF<^^p(yZqv7Ea-Rcl2~k;nCQjad!t z$XzCSa>Rd3+xXro%jR@tn0Nh6ea(CQEBZphRFE;Z z$f(LkHwCJ!n-{=ip%6{jKA}1>kuAb##VB{D!kVu6h}DX+W! zEm2`^QyAp}du5Ji*HfG}Z=}?X353TPV@F(}8bPJP$Ufmw!ahZMv>L9QhRyygAuN#S zfK+Bb#1t=QXI?Mr3|U*Ip;0~MNvJ5Qy=?L#v7ft`?M@`w_KJdkq84**)%1OHJL)!aC3EK@ibt{t}S>|Lo zQ_@3wjbPF7^pMBZnco|0CJrrilMSrK*k2G>CSM7dAF~xQ!@kn!v6JZXNvgrer{*}v z-v!HC#`N)rTkD<@ExyDE=a6Mkih<0&b&a#R@TlK{y4``EUIQA!_R9GsQ|`+DJJ`qQ zQD7Tne}NuXntf?XjcH+EOe)&*GYdXEcNFhft54kIA;HaN&Ec_<3e)`X#7ROhuQDX8 z&m5L1+R?^0Za(R;M5dND)vw8B8~n7}#p^g$nFh`CcH-g<0B`~`A+w%G;r$;ILG~{b zksGzfRmGOf&Q?B+({>*a&`e#~XZ!#Fip>PDR4v;aS)}V4KQS_nx)dV8kWymfRD0iC z3Cn9poabg1Z#NlSt?Jztm{`#%jnH)fdgr;`^s_pa|ZJDEId%&IfwpS&(v!$qYM zf4l=-QUcI}Wrf@fugAh6>k;95I-^+Lb=ED3P2CSkZSWN?CR6SKlv`EA=kI}jVS?;@mCXg%LRfCGd`#uR_P8(0Y>0Dz(?H2g-9?pTe??6Tw$r*f~lZUg> z?aN|q>s7ZPZOoQk;_?qDiisG~Y(33x~^XPi`sXku;0>7J*1HH>r2DyF3 zpDA%qSNO{JJ^8A4kL-MB`B(G8_=qf4f9~yI3E!Mad_00dN}hM(0&Gb=W|GjaUP#?L zkZbtS9Vi(vK;Y^(|D|E>Ka#vm-I>~EO#nNMK5&9aLFO|)>Gv~zMcc2z2yX6XR zz7RV;XGp-B{tv+}5I4m5I7L2AAXGNc+LJ+Id^;}wD|D5+;y2j4p8Ezs6H^_|h{;WT z#-Rii5qxZo(O%B^@JDO@F)I|CF$%cAbwNhD^w7W&3ac4&i==QsWd%`kMvw2-kWbRoc?Z4 zl=eNht_>LwfIYZKcJsw_Rk9#{6{jgXEcKI*Xjj@woG>*+t<=n{w)JBj0%^E6z4<;g zSKwn6%O-b|FP@u{*a7zYJCOO_%9*%N_8ka^={DAL1?POo3{84Wg7kkqRbHDeVMNEh zZ(9*nGgeb&%$9$y*$8#}Xw6Q#m=J_>mBXjow(of+l)rmgqG+bA*Jmm^R;v+K>M4cU zqi3iWQI=nsGTbNAlydQWLqXw`MSq~D*Tq0lbKlgg!e*HrUT`7AU$JKxyhp;_ebIKW zrN!s-DshdF_L}I1#Z%Mp4^bEV(aU0H7)V^B_TY>01$`sBNFijoi91gbjdL>Iz~N0d zQD=+0aoTZLlhjs4DMSWAQI?#cCN;HDKR|C2B{(emO@{#qdJrM4Z&H(*H}vGBk$q~; z`pu}MW}Z*yL|39u@S1;mX1cQ@1kaZ@%4t}1k+(nAHO|dvUC3aE@o@_x7foaK&{)x( z@?b@6Rki!41K)AV#^ROr=(|QqUFVCcbh?`!Wb_&yZ>fxZB->>D!M#Uc&P<_RJB!v~ z6b2AYi>vTP#vORsKBt@h_jzDpKM&YxOtVid{Fd{t_tU-C`j!FJvKoGkI10ga=IlM|++ zvrE%9C|pDRzi*wQcuI4lqo$*N7Z0r5!v|Qm|`U8`K#@jK2 z=c52VD%TbdFw=u<)K^6mS33>h(>cxoIIsjKV7Tbf1zZ4ni)zV8g!p-04WwmauQ;M* zJy8!c>xsK{A;ET^DH}C26Y?w3IvXLHw)urs%)PNhX+02J>G^Z%WJFdxJg27}-_fiqwT*Gg)7)MtpI1(~GI0(6%iI8W zaM0oN=T8=ci8X@*_kJ|l&bWl+pKF+X?KdK(9TLq^?05zd%i5ab-GbvrKKkHf-AvLJ z@9}2f=_i$LifxxPnUKDri9Aa+xF#Q^0DmyVnd_x~SCgIPpAt&7p=RF7NDKDFkDD&O z6{AgDH~LWibpV&_+EcxnyV_g9I;0(35bdfU6H;UOoHF68`t?DwAmz;hTzMsPA@1O4 z3s9CmHbj~?!1-g!KZ{EQ{8-Wa{O7k@nC#%IPz^ROS2Ita)1IG5vW}*{2+q)Qwu!?m z*9RFi`ozf?hmAjLt>|HRjJcZ691Tz4g#|JG>buySHT4%&KEqa{7Y&Dlrx8GuPKcPpa&&$j_1bso1Xs99gQGLDUozJ7}_L z4->u-)d>j6nnzu2-nh?+WRgR%!2OZ@u#qs2{RJi7^K?g!;qj}r2L@S>gAe(n z;o1$veGK-SkAb$b@f2_4y!5~C{IOGiFU^> zKw(@pOEK#=PXIGqTn>@5CiuG$qGQGIfdyK%){jZUY`qxhNn+UlM|s7xeRIoWszkOp zYD$0m4pfDb0Tg&>Bp^*yUGG5MIz}V-dowd4qGU+!?r}9suB@f@$|Hq7fffsR3##h* z_H@$-(m0zGx?=f!7}*>9DlTxJo;~;ySs1gEi5N zBGyDs-3SBfD@9UQ>b&JKiq(`IzSOz6E1sE|>y}GE|6K3G&+_K57gBgqGR$ib;@c#l zoN^uePt&p@ay$!bl&A>}5oyWQX6EvkWrqugd$905S9D1OHuw)0s@ z*5rm8^9ve;E&J^GMpyjoA1e6>UX9mScyg^sP8JJBHzlH8WeG-)p%u$fVsQSh;}30A z;XPTT$aibps)t%~_PnKD{I10>gWCDxSx(la^}$@*0^3rpOx@XJ?J)ZB8lz+6OO$3Y z)V6CoAYE+&vRfwoMuO9%%N&C2lPvN3i-B~#M7_KNWie6%`kq8Q8mx#C(&*N>g2CcZ zn85y7KigE%^8TE3(_Q)5{0A!D7l8{1!k>~l`8(P0SY(LijdLnsdhkm34ONFgLc#tV zuzDv^QF<<%sulx)gCoD%O9QX|=-kbO*c3&nOLqaF=P~lq7ChqwnEoC&i+ZvDwG&3m z6v)dGpA^8nAws5VREGKAO7F}q@8(U>z6{O$;j>tY`__tpI^<_CE={%J<=5EmGyReE8?M|me0_^a-3{I`0elzeW@ET{z*nLb?wHlYcCMQnGzkMfI;aVX zzSoB)hjy}khmKNd0PCZF2kK0GleDGR$oMCJv9EIiLJN1dBe4@e9xJPktSCzoG22Ug z&AOJT^$r=N0rhPr6Nqvw%gE=|AURi6$(-4xg(uh=; ztAVs+v(EcJQ90NVC$qubZ2Ze$XJCZ?Hr#*jgU+dTli%*{EmRj*!RgW;T@V88^n?N2 z*rNhP7<~tdDh|X$+QTo`^}0t$_83{<6=4uh>w;Zf%AY27X`XH0=}EsjWhss2>ONR_ z^{T_4d_>bs_Mc5w%*`3?!tXo2jhZL<9Y=mY2TtDjoqSSz(k16{zjAAQR-hodA9|lR zkkP)WEf${L=|#Jh`p(teTsrxOjPnyEHcl53=H*`m0NzO)6xa?piM#_ZmKxwp+e5K9<~m7eCi`>B>t*@EFU)*sqZ4k z&g)F?{mJ-6(ihgRTQ-@Okj=S-=K4NT z2v5L{M?J26M8V)thIG)VE*i`mDwd{>UL6Uh8_I%G?{EdM$?jbU7%lWTX&&~UXb*Bo z?K%|CnkOFlJ^X$F#)Xg+I*64M-C5d5b00TQdIMkv ziol$IsfOz?;uvoq`oK#`yX!}D7cb@hO4*6(38m5wfR?q|a4hnscP>*)n= z_sze8x7IjfB^gIT(z^s~Ig|z)G0daJA9wXL<55l%2-2$AuYx~#+9Qu<`gB3@(#kwr z4I0(PYP_9)EECMrL^$8GLdqLYa==|7m#P0g>i^O${w3R-3A6TVR5S718za?$YjpFa zb%!1k2!bm)gNr6BVXCV7&03l0lNZdY6Z0bcQ+27^kS8<29LH+#%41=#_0{$d=iHIG z?TD}taiLVw`)g5H#M`{nuNo6tdKH@A$GFxo(EB+PYD!e(fwAiKc+a)_y5#kKkqN={||xIX?Q4@~VW# zk>`nIfpZF_LmUx`{w>`Fm=NMhRLFNEeEv?jZ-LV&K*1*XRX@lDH|1qQaP^a%pnJ)^ zbjj83xe$3r6^q)*3LXc-$%E2ZdoF?2o-tg(l7u>N)uCyS$o=QcZVQ1=d`dKI+3Q>5 zd`#g&P8UBFs(JJTUa~yym=h&mv|uNz{CwD7sG9k>Eql{>e|SmVSCop&#PbS(hL{HA z6xLU>+U8?JyS<-Q_ogJ8E~%C*(xvyW`@H(7!g^}1MJZFG^xGwyHA{{IsevF>Es^-$ zqKe(R)Y_8J=zkL(!c)$=^4RNzxfUY)L~nypU!$4r{pQwJ1gB=h*pcL|>9Br&!tqBf zeJrsw!lDNoN72q1P~V$DF073p``tEtMDqNO0eWt{+~I&zJa=ZkCP^{CH^Qq%mb;^d z^bvE@A!xO40`CvptzP%=*3WUbT_yG^(amgX<_vYspb?CsS_{DM)~(mO4l%YZv4OX? zTn`Pw6!{xfa9!E(kAGnCrF)lhZon`q~zUecUNlfv#n7D_tP`*YhkWj)_I4sR0{Js+a)`vsOxkTBYv=+&bHsn+zmT2*_po{W1M;nc^e z($N*Nq-m1a@Ue4k{t@jy5J?_3w{Z9{EXe)f<`?u~tyJLl8}wM+ME61Em$G9ETT%+e z`C=GZZk`zfG4m0PZb?7@f=#P!^2}#?&$9M&x0OyXGo12EAKy7k%Qz_!6@DZW+f9kD zJwjx^OLIX%m`+NI+N*nX2u~&&r;Ey(=Y%e7Uhc>&SsepoSQGGugM0R`BA2HfZSO$D z*NjCl297(B@tbw^$DQJcVwJI#Tx-?So_IMnpE?u#v#)xu(rEp zt3z5$B+``^v5K0U>hR_70mR7{y{3%!&0GhF^q9@DLV|oG0_+yL4f`TJB?MgR>J67r zmC?-xj(PJ=Omshzbw+OlLk`Up&;x8}UW4a%pf7DXcc45iy`a7JljlBN=&tK<^k*qY z{jAJGJB1oJ<(1TU&~f73$-EvlD9@wbftQq8ihALq2?iEs7Y+?5a{6`W!L6d<)ATXq@&JwJ9(Ym zu|jCJ>jlVGjrX54oF(0imQ<>^KE5o*bozb8BL7=#oh{3D3`Gb3EGWk#?s0M2xv<_4 zhTalOj^eTW7|raEERVI#nX&CUptm*i4t+G@cKI=o#Wql=ZHniB^w4_3;$-`ok+@=_ z20ja&KH@hnTdN~DN(hRBOqZRiJ=7Xdm|(ea>-Q}*W`9^Bo$VHpw-}23HTlKJqagaU zyl+UbGJL3K^4hU_L27KUYb0T6c*}9YAYxemG-e(18_3C)=|tSd?0iHEFrO@!Y>C?9 zPs|IP?diM~+kBiaz9FC4!e2=Pn;8(Vgqm<8G$7T201YF*3b1Kv_k>>K{{Pi0X9k*}eSiRh_#!x( zi+%jp9w4dYDyLb-JxZu~964^Zl@ed zVpYJUU5MlbLWrS2)SR{f6fr-6WP^JvBWYIg%?NA-`@JX?8k$ zr33R9&@1(BW*1@_tvQB| zQcD>@J0VB3zwJClGrp_G*oZml)A)A*ixte+PG4`zcI@bkj>AMLKMh{cViB?`pjGF8 z4dWloXEU>;3o1O#1;7uDV}dhL>pzQ4eR@SZx9yH6!>V zooh;B!QE*oN%jm8wO=jj>lZkGV9kt&8JY`@)VG9K)@$U3J zokS(I;Yy*8u6ByVh)wbBK<75sARmKc2-t_xoZQQ-`B)i2|(zJU@! zpD;fW=^(F^^G4`6M}YY3K2+ZbJ`ezefNlf;b3u?pbxUlxjm9*DBGQi9sDYSSH1(pX znT)r8$=+o|rD~xaHh$^b4TY$v;^-`O9OYi+Uwxh9L#tf;Wezp%1h&`bLmi(ECQ5l{ z**))&!FJeZK&9OAZvwzh2k^SuZBcD=zc3gdY3sxhuG$)Wa&hw5 zg6krL>_tM(Lm94{t@o{XI>WA}02{my4hO6=z!V7DM^gwLQ*#f%HBK2h${uMJ;I|tw z0uU8Jfj8ijSeilOzq>xhIOim>QR2GYFt1uV%wTkpAePIxv!`9j2~U&1}&8j6OOttC@xyh`Vvc8KJqfF%?(5-^y7<$d-sTE_hnP~kUF{_T#Lkiw*|bheX~ETz8>W_#lMRl{7qAv zgp2-K=L1AZ0L(;ZvVF(j8AT4*`ScZ8<};FlO{W7FkwCN=@py6b+i|VbN!)CnUqMl<((Lq>Fq`10u*kHCrNx zyTm^RdYB5e-0&xpx7#_BEZ&Fu97Uv~4x29()}7oFOp{mRDeTZp(<_Q5Mz7n(g)^nm z%SKYNC#uP@{pnU1>8RX<{=EA0u=lVp7( z6{pp0L%P+Ss5?pWvBbTM+*om}HR;tLaZI!xas}i_NNtUGl8^w(_WWe)jpnwe5TJ2w=F}ptX;f*km77T zXS3O6jPYO zDI?M%1woZd>0R{l1bBxHkOl8SbvOTs9c`cX5yX$WFY+26GI74pkaP+%@NgE5?5$N%q~9^H8Exd-?` z`)_%#nZCC#%v;}LIf9R`??ACk|9TS`V6+60XcAe&YY`A=P-YJwu=hHpl)Q>**rUQ_ z_vjcB?W#AuhcM1)^LrqbEPV_Jg<#IO#Hp_9 zoA@zq|A_J&Qn@E;G&_i&Z=obwdOcXrcT&UuU}?&&%H@aYvH7 z^e7V)6taO^;=#Rtqm?3D%CgoJvI>FNFF`KsDl+qQ^9&$(PCEQ zBe5D*Af4pN8@svLO$oOBP}ff@5qqQY{*B;HOrsW9uf4uzaAGU3*zxnX?T5fc<$c9H;!?fp$(vquaWVanlQTcXA-@rzs4W<-Z(Fw zir(IVE?hI*C(IT*uO+$gqx}^iI8jn?mcwI)Y#9?R)(!N_6p< zizJgI8qOihk99qz?@x7c5)dWvDbj3joNe!F?46~YK)q29FDB4t`$u3M=)aB(BHk0) z9Zjz{J^p)%zHPM_Zy}8SY*_KN{5v~S z!lto9M?U8>u~Nrls(_jq$}r)tE<_veabUkU{Gy~QRIjp^?m$>lHHU$J8#UdjAis@A z85JShSHsdp$~<|`mof)0WVgI{*%NY5>5+S~pBg1Ib0o)%Jy{Mm)@S!(8h_;an~-Z7 zeEypp=v#5f1mw3V_CU{%vaf}?H`*zXY)Xh+M)fjG4Wq+V|&*U8eXC2CD0Fyr1fn^9kvp~)pF0RGPXVBqk z3F*%zg{+uOhd^>0KhymA*wp#b3WJQA>1to21xa*CWuZK0tZ~T|DtHxT*p@ zbQ|t0segN(e~7lPgN9T0`JI9zFX!9RSJQXTI1{B_Dc|cwFk9)^CK#X6f9a$YJ6U1y z%6Q*;d{Ok_5Mr{LsiIlcQ&w>xxdnT9G(AE~wl_fj(eFTbbBfS3BLJ*x8v$tun?Jl_ z>lN0BWaO#-8TDsEseRJluxNBT6xAZZ<_S=htK3#IV4xyD^d(d*oGsStx6l2;|w`)~zy|Ilq0@ z>6vNN2blJ@#=G;qMSNd`x$Pwk%6ZqqwDIa=H$E3!_$Lpf(80UJFsNuMT=^>9*%K2W z@w=L4J_e2z{t-4&?2fk-XuL5e=IO1gO2+Ue3Ho)unCmF*UTk~nli6ZvzD7sQYc(k> zrGS6KZIqHF#LrzCk@#7*D-qLC%WqY00$O!g^Ap8V-QZyncX54vbnjOzymc^4lyR`( zt$!G9s}F7ji$8G$qfk|bueavDo_38|*Zoa*9>;hEMJ%R@JljXUI;Pe+riky#75j31 zwO}kCbKNP9v2zUu(>=qavevwwm{iL5ZfqR-6ywk3xUdI8dJnt2U>^)=>pLVQN?HZ? zHKr$q@GbHl_jCnps3()B9*?Fna=qy=gm z7yYpIqi(9b8Pa)w!%d8vTUFK3nIju!VejJ&)A-0=${QA0s_bw3-W2B~uf8cZ(q>~G zmh&$8@kbBI(<}iVD3*s&#CDw{RKMxvpj)RCOJ`Ep>kf1JAD@b{n?62Xr-=82^P%k{ zc++)5&l+FtyV??H%RACbJnSN6$;`n1iWS5Y^^NiYmCzFRg?sd?wy2FgT8EFXlEnLR zc-yv=)?Qkki^NYamH>j3X?_s|c5<9>4@U%Zb^dBdRowlsCF6SaZ*eP*l=s!?EaLc<| zm)!ccMWWh%B>!q=cJO&Lp~CzTWn=xXmsY%5r=HUlaB+k+ykivG|vhM)_OdCCfcAdl56%(lV*NDDu;z+&hdo3~y z$DP?fW%$F6D1E~tco+J$?H1Cl7Bh1=olONyIoF8s=6u@KDr+YhH;iPS7*ii^+dz7C zfcg-ypLm2F^u-sy!S7K@)#mufV8B*2bs8(%u7tTMfPP`)V z{SdX#E&bldy>E~^Z~#UWn`ig4|6TF&>{16$>Qlvsb-eUWmP^!xBpi~1EB@@R!D7SS zv4Ny}eiwPrfOjQ*7EW6+(f&3Y5qyW0YR{6mxs@-xzGA$T_2xTV(4#&H9P-LPu^m5E z(PXPXT9DUe)Jzm3c(v@bjg|YAuRC+q!3;=@j_dLwtKRled z*w9l`bU{(PR|{ZvT{02@hagCybPb~NxACl>uztjuHMNO z`)Ky#X73uyxBsGhEUfDIa=Fu)IgyLfxiWFJ_ag7wERuCp>V41Y+4vRAUQv2RRd>_ku>ZNS-u@@d{ntZIj1@Mve#K$FXW*tq~SFN zmQZ>`d_RO}y#Av{k~q6NHF=Z5=9Ezb!HeG`5Q6Im*9#Y(p{qzv*u(w$fb6uky@SDm z9i0y-`waj=?H#od`Kcr_fU{$%zO&O~pwYk_-&x~7c?Y7p%512B{gtO|@d&dZh#1Ab z9qmj69}mwFf8ZEl>1hW!zK4$6Zv)X3ZaPR_M28#b7c1Ryupv3rwjteMir3L#GflsH zw2#PwsC?+AO}(E%RDg%#=lx%Os_V!17m;1B>g#LTqE(xMoy8@l!xU2}=k+|~AH|fs zi`aJiq*C>hT`yhqU}wHHW^9k@B0YY-EQd;$^&qcEj-uvmbx^Y=i`6_PDYa9VF6FLc z-A#MmF7i~t&@62R-Cpr5cS;&_*RLC&aJaebi`PR$-=h{=HtKn>K=M0K+cc(^*!^!C z1Uf5(kVkd!l~|&drr4pInrF^8uj4(E`nkbrvaE$q%6FbNcE_e|9f7Tl{0Hy{Y-{ns zXOVf?5JOk9FFh^^iEXx8@1K2F06k=RO)T3M3ur_Sx>j%b9Hr+b4)V8bVNuUN+CFGb znJp%IiYFy7lV|MRetrv0{Z5wJY;g>DOs?w(Cv9tupbvdaO-TQYyq-!mtPz=R3SF3& zVY>B}$p;={H+joko{zb;=R?ONJ*m$P}BJ9x}4H;Y;W*oPCIGYyPP8=Z+r2xJRnB z`!d0y)}!|SKiMmxli}L$1SFqk3G+`N_Yw>NtR&c1z*HXeFws?k8*Nsj}n&p zT)}g%5GpFgy|dCzVlQ==gLC=S^}n3Q&)<_z-4-qKfRDGbA0(eYgO34}Mj6(!1-J7i;{v#_g#& z@}{(`1+JR2b4g+>M5oRsxEvk#vr;_b%ZQFQSgW3#-_{yA9S4VEEVe;fIww6x?G?NH4Fj1=b9W#^00_Ss zX$PveWM8r5pgZfK*Q8@wfn9Yca&XpVMcE>eJa2Z#xzEb=YzSSZP>P-iG*8?gaF^mJ zU^cj?W0PyXz;@SLAwV$|n+$mR!_N)rH*z!?KFQ%ygn5xEAGw*q z3sC@ID{B_s4%flG1Cc1Ao`CQDt#t!CMp4KB0ik+E@@BO~sKG3y3rX%(y)KRWc7{|@ zjHjJxk0yH7hV1UoJBm|r(VD3ghH!Tl2Z44#zbcdf2vTv??3(m%@u1*BFfwZE4rC3u zgHT35x2w$GYocT>QB+<=3$Is@|yQ<}xr>iB||!bjz9ZEtR{@VKD$L-t=F% z9K<>!U$+yq?_~OD0M?*aJIX1O=~s5x&)*eHT_X?JivCpXr2GomBl>e>le3_Mw!RFn z4!2+}lz;H;$%i1&s-DDJd>EPxQQNJJ4Cyjdub1Sm6011K`8wvF`TYwij=x8F+_xLg z`g!!gMMT?Fy?0WJb6@##L+Lt~{4!5nlCCu|0BZt69zlO3CIsN%awarKOR*7g81Pwz zbBhL3rx{_jA+iQ(evobP@d(q9_FcAjav#<}HACGI`pLCcOR*V)&t@Crid_QIpZ3g@ zSNx5x+57bE37i_*+j0TbT98Ukg39|2gd67cS^Gmb>i)Xa+OL8wBykbXaQG zdfoV$`|@1wdorS6 zb&7;v=W!I%lQO&L<3B=N*P4g;SFaFM;aUvNX4SUBRnz6+uNo*7bV2l2zMmYr7?Jym zbtR~gV`6LKO~o%h6RXgmw@A%$6C}9nsn3s#nVwJm;5ni0#3P}2gNWt%m-p_O$304W zniCwQ$Xb8S&*-DrDUFGcst*sOKxTLCdln2ovIpPqcPNMCgBpSOVkr$7(;|4jGqGCk zenFRuvC#s5gs^b4QLwW8m?v|iWj~lJ)t9l`MO?R_TLB*qkXUyHM&1&s#;u#3R*9C% zc#`?+7?bhmj{NIWKWyuw0i<6so`^*z8NSrPuX& z;>3g%L!jFeW`Jwstq3+5v!0$nU1Rjyq=*dQ5PqrhAx3}PWVRU`d z-kM1BwJ4;cNB>&ZulYSw_a&P50xDuR#lbp~=boz<0Ge(Wk8=ka$p=_ia3r*|rTI1T zkp2!-(-ynd@U4mQK^?qxIbE1rRwv>1o%Mm@X^$rcBhW<)I zlbD5PpRuD1fRITORRGl}azs6Y&(kDtBYhFF=%;Ru$2^`~tbu-lR9(b64k3%QXYv1N z`oG*?lplcSz|Bai@5p0wXHt2p50akrHs5u~x}F7na{*DW>Loy4BEma%Yj>Sdaxf^Z zkN2AvX@`6X`&RHFZvH8?r>^-@Wm24SMJ|MReTZs}Bg#{aXtSJmTsK%Jkt0gU@-?2K z0;uF|(S{o}$tRhL5e6&Ol?Wy>lqG#C;YH6h|I4I)p5o$2=DBRHvBg6Vc`caE`*X=< z%9z}ZO-@FWo~SZvS?Rsx5ddHNIIv1}330sxeei~&yyB6s+AyHreN0Fyz-iQH|GSn6 zw=Z`u%_`G-joZiBlf$DXBKGB16~3(v)77_r>xB$T#q*}21^c`Z9+XLedYv{8S<_HJ zrAe|%(28@%@T#E1h9{Pu^$~RYRC2|seS2Ig9Zkj`WVVFpLt`%i3~?R|6GUR)uFykQ zO;+we3>B1Z;~oKg6AU_Wv@g&KTbOJyX=zMEvqLmcq^bw9 zk}9iTvK}Gc*X(qm+lIw=B&hIA@o#HPKv}(ACJhKT;2wHE#!!^>!}o!LBHx1apsO0)+PCerhTxL2wptBLFoYY&+a zi~fO^>t3n?`X9h#5 z7-(i}`T6Zv2;q&oO_Ots;kF?hfuKmvyqz@k{2eFJBM|;^ga+GS%s6PN%5R#2{O#iB zg{Io`CLnBSw|rXS@f)2So8IZ&iR)ctmgWsF#0r4{Ux|~Zhp7Hd6sC(Mg6|GaH(8`b zJ8-=8v0@Hb?EAdbkNwl-8)2g~DT=|DCKcx0{rhtk36C&6|IdLWGgZ_xq*)Gxd+gD~ zSwTxn+M0&=vDV}f?b^}Fi|=v+EPGysAOegyT*LkS@P#+=U3@dAUQ?(M`H7G9@hD=p zbtv);6t{inD?}Y27(zLKU~Px>m?`S<7mtyz6S+lVp-)2oNSC>X zT|ECpdujI{9e8(Odk1>LWpgbRA70aJ^6XVjSf561j68PDeF`?sQPAU(8eOWk(!T}j zUi@pNG+*z7n>!FIkl6`6aG8Og!G!%{|GUrrXMIA7bb-Cfa%bG1fK8`GXUY@bTjR6SHKx~qQ(TTkp$@NrL!q8 zu-;T4Lqzy**vUtTI9xI92qH{{9F@jZ>KeTXWe@+Z;amq$DrI+8O7>;pN#riYfIUF=9?L z1?RUWU(^YQ1(%nkfzZzlWq83lf47M{tRhSpe7Jj5vWE)s@<-pP zRPW^u&6zxlq4oH9K_9`rMTp4MOgG^ge~p~?Z9z_`3IEM&CFZ{D*p+uUyt7M58An$o zJIHr&%j8k)`afc2e=v6zVuCPc^^!+ciD|%H&4(Nsq*&8=2)%E3De3YT`(>bk4gfRcjd?DU_TbzbR%nilB1YxWZy; z;{FT=LN3i=xA-u^k4@KmpLV=BR=P!PJ&uHND6ND(QPLy{!m50awKRuNV#vNV20gWD z_EGfxz3ESKWpRx-QH;BM4Ax$Q`=>%5BH7s3Vd-Ut$Vdc#9~lIU5OPDY%-%v5oh(!#cj7o#H>|-R9(qZ`SnZ_uR%3rVsf#rAkzM%C0)_3Lm(7 zVf!aOeXEO6WUZDbP}0nJiOwh!_tp6JjrD9~>r8@{D5DKG-|Rr|M$ZX1|1ceM%=@;l zfD7ConQ*)E0MKTKw}BiffKmP96WbH;mYJVeYs{hLt1C0L+iw*U8r3N`suP>dS>qDn zaSShVt<-V?TG+c)7fF@$)roX^k5f5Er5TWW+r87(1D^RDUs-#wyKNczGlaDA&)7e| zdfI{Q@?t&7bPQ0ZFA;1vZNT((WCEOx^}l{H<#tukO7`TLy%Gru6B$|Jqt;??YYso{ zVdM_2jo1)PY3>l6(SLjF)Wu!a|s*`BM+( zBjN|wESP>BNO)q!`S6HUvRN~4Ohmge+O zo6jE|Ec=e8yn=nrSEvUxf|`2!U!}#BaoPJijuRv0k8(a>hFyKMiTa-W<>xQVtw2E; zxO{v%C>!ZqXZny|ZOl!M$y0Rtv&fUb#`xFkP44vBPG-XKq2}aj$*XT6S2H9x za&~&+8Xaa-#`7w0b)G0Zw)dr&Pjx%!L&7AZP-pP)&H#ztCIZ^hYGn%xo-C6_PpqQ( z!543Hc=@1)j2Arezu>U18e{cS2sJv zgL19|$;G#v{~A#6kLUtYrjKpJ4Q(~m(LDkKzTQ;X&Q7V{`h|Rk&ons=8t0wzV*n>N!0elSw%6FkhIbzvY>XkndZL9|iLXS8MBzj0ZS(heho zA4lTb>1N@>brY;z4&Vk|Fncj9%_9j6YgvQ3b&xzg@x|CjTEy7yL%DeED~S&fc(Y|s7@>TP$B!1H_y&gqEM5GGq5vVR}(R$ zTS`^mw&F7zT75;e1@ExA;N~{tvk{8Ac4808_(2oQj(kaL7kGYl{K!Dge|Ct;v|uj# z2f5yMDvCRR3LUzF3(WJQg1^|$1iT^`!uxJ*2!~hu7y7}p$Nr(hibmS927#gMFE!R~ z28M@kOP)(^JiLGWDZr$aJaru{7blXDrfa>(D1@+#4??k(`b2B-UN8tws}{ZVS?nOs zEJ?&!AN5Z#BQ*_N1XP!IHMI!942Fm7qy?OjuFU#aYbEaA$nFh`yfs!T+2j^YWmY>1 z{evoW``(r@3AF%1)91soJ?*6Fee4ED$mB1grTD1xqg~kCo*S1CY>-i!?M*Xa7*78&Yp_b-q}sW{n|+D3t6N* zu#bs%uYoN;D*UzVoqqP~$+KDOhK9Fd-d@Iu8mr<2AnuVzx9L#p=V*o%^<{<$Gi65J zr^-cy9N-#7i0992bL|c5-&E{I=C+J_bP-qkcqgaQCb8!J+(-T?N#Ax;fWQ?=oih27 zK9Oo)*e&buwi3v>E|@M;8J2OHp)x~O_#5+itwY1 zceR=N{1<}?-Q9@_m=6{1C&dDJ^2zz=A@DtRWYHS;a|j0P%Ja8}iJ*O%xEd={Rfp5* zO2nfWUmsE>#3J`6Wmf7c0L;?BK@TxiPZ#B&SX;(hByxt#rIM6$%Px{h(hVZ!5@}bz zbXdK)-DYO!{FbvK&9LZ`xUN1;9Jzi{o@zKrI_M~qPU5mQiE68K5R<$<)j|PcAklGc z5{M)`_Pl$3=ys@t@Cok8!A65uef%RFkzO6w1?v7H zG<)D6fEd*rhX-;shr_Z%-=z^g*?W^H#R&Q{fd5ctp#$qR?hjmu{pX;z-Lp zpz<}mJ)|ZR)3|BUk;l4e;;`G`BTre)<10PhU?orn!8Ru2yLJ0A*^!Q>!`{S4;<>tH ztp!O`X=t0+D92X}eO^zWy6@PR3w*RK5_TWx)+?ede&{6)z_npNtN*plzv|w-5%QzE5?2y;W1;H;8gjCSR6|}z#yOZ^Fh%h+A=(F-}vj4WtvQ{E*x;+ON z;(@HY*<>Cx!fGPi>1G^WwGB0`@&;v_uS+%Ss`-~Z-s(iKgbO2H-GOSUdMaq_Qbie= zrVNLd;?wFxymaG!Dkv{B78q}{q#l!ck%eMCIEM!L)pr}wIn(sPm>wX_j3?BaXjNmK zyX(ar2KZ-rPJ*AG-2~~`$Tj=0CyK<}3pBe;%b(64_hhS>UD%yZ%zXkkdS#&*_Qn0v zQ$NIrdTY4l{fYcy)no~``MrHD1cjZr$3|vFKs*4{g)SgY(IKMQNX$Gg&M}%pnnwoe*_b+| zxsb6iN4~9Xle*>^j)q!|>K{9o{y7adQY{~7bXG9347xd-bCw5zj43Qn7KFbZ^q{N% z@F3FIF-A1)rmm0iv>LnWwFmD^izDJmfcVD3&Z)loz89P~E8_^^5QQ*Tv|cV(?Qw!7 zzhT&W+Rx9ar!+tmBEN{$2~?Qc{eD)8QxDxZsaNBb@w;`wr2e5LJb zkoAyGXuD4iGS&9^27PS7!K{^PgqHpnW%?)@19cfJ3lg)elncM9@UA5-hQKRf!k2Ph zkc|a&X{taGH~qUW9HUC|8y-i2NO(LdDvkfvR}L@-ryE`Qo~hVzf!Rho-eff9aQf3u zYRbDXe$$jE2mQ;1(T%c$w_e6dlOxmRC)h~$M0Fi_*R1fj#6NWiDuF7EEi&APAoB2( zd3$2)9&1m6l=_r<(T9shuR__wWVkIEG@f*g&MYxeNZPFsp&9qHSmUr8Q+f#zJuEB+ zbHU{Y?y-Z<;^rzooR36j2_Qp@RLj&>nXv7v)q-ZKY>Bt%LHDXj-QK(n*yJ@Lfc|F3S)7A++b`fdj3X-UzFv;e^=*&`Pp(6M$I~|W=Z{r1KM|(9M zMIp=tPej(EBQ=7-@HbOczj`E2D_Wsnw{KK)(@|33-#G;+1_V)f-lMSeijD^&eQCO} z^-A(TjK2Ii$#bV|s>F3>v%lv~0LDhWD6+iBgxDElA>@_(~Ryg|ax1~Q+hNqg?r#90L+6Gq9@E)P&zW(^s(l^3f zH{+NXfvOUz`Zf%D-S%^kO>0oLI3`gYM6tQ@uLBwL!S5ZnZDX%X>V@J$xIJM9YnwGo zkJBR*0+4M-c4qK2grp$ZM|iOgi=C zgEEw+x3i;T9Y$yrKav9~s#QCd!{q{t zuqNnH-3U1~&-#`yx?~mN!qz>#S-zrVj+-aRV+i9RyHT>m@Hnixq)gHEf0g@zFT7|r?VO{hI zKNsn+2#R{ScUO?gZMe{}CjeB@!2?FQ#sA~JWVUyD2C$Q##VV{gG6~v(u{>M(#y;Ec zKAKD=SzI)}w=*O2J`T(w+i<1Q6LYP!=sGw7A)DILUuuzS(?4Eo(a#lZF*SB#S9PG= zdb$@PV^NJLyBc7`1!LL(I3D)6$sx;whON>6FdRj@CS>iRy@s+H%4! zrC}4-JCGWv^CuIB`aw`Ofb@2%!6ndH(oKa+8Gtp3U zQ`8-32C%D$d{ToT_=P@tZzju+J-PVCx228mIrNaG@D!H(eE9HTlq!AUPAhk5%ebED zWQ$Z@ZO>F;%XAGAvQLvn7tzre&r4S^So)2UK#Y3C?u_XlQ{5CF*2aef6UWr-)Hq|u z6YPr;y{&F-8rS0a{U=a9LDj*EhJIbF*X@N+PQO)>*V!FN&|HDf_B5vnsRtL;Kx*V< zN>6kz^UlZ_(P@jcmM@x$;0>P>ENE$5B)plcPx$@=6AA1bSvi6-yfK z#8`n_)@}$!Xi(IlO~vDD%qWde5dox#24Sps56;}y>CmbDr2>*Zq{jI8^d92U+q}#d zrwo=IHj|AxJ@o_O5J)=#vAH1nwEwKn*R@!r`NFCpQB!1>>ac7(c<2-8?e`!SKu)F_=1v^V zwy(HtCTd&U6kI|Rh2MqI<1o)4^g3IqI+*SUvKj5pw6QnFYmJt#f31xtxARN?MtSmK zQ);L?7Vm2KmArCiqWV;y8oWSlw5FBQL=96bNxMF^n>OQ8OX=zRX8$7EHI`p6cAlIH z^#TAZ1r$E^ie9q|>{bAMCw{?b9&p2m)MY{{@e4WHcc)xWmprQ3_b#)qpYL|*zyF|M zpfNLgQ(@eo9;BqJ+4CMqdgcfCd$<%8;B$9}p6GaG*XYHckKh8Sls`xL+pEgYjfyB$ z&%?wlqMonw$nr$>H)Q7Ul!8WRIvDu@C535?|CU_M3{Vz?M$j+IuOWN*%gVkb=$MmA zvhRnyTDfZncxvXe_sKwf^p2Q<9fs`J=?Xmp>043s_(JB?< zFsd#Acym|1m!KWfeCo_hY=F1N&#TAd)ax-=YD2ZM^3RXFP?`2zzHXP6j!@2C~$uo6PO zf#s0T{*`?RgIUaNt^RCia-Xr{p2&cG33N21$+J4x>fSCTR=du_yf z3=JAs|8m638_4P7ty^Vza@1Z~D%r0qvKkaP2~(y4B{O?=?3!uK&G(txV%KojQEQsZ z?}uW70%hAJJ@|1KA%as>J@M>a{Wt4^~txF1TGrK z&oMU%39=ue%!}-qtg3^D@m-~=WCRy}YaPBi$*tmMy0We{mm~=8A`B+&kZ6l9rl#*R@p+Z?%D{uRTTA zf^y~<)r%ft%!CY&Lqp*{;D!GfOcOuG5|Das9r0~c$Smp_-%gJ?BF7Quhy(gMOj*aE zl}b!H9H-bvrLrZ%p_S?C;kS*0vdfB7DeYB_IJ7`~cp!aM2+TB^FU0oyu5G^EGi2e* znM%5sgQ1jjf9O{op0iDT81gy(Pz9m;LHabXk5UnZrMI|D24AWVfpF*8P^z)b?dras z?Htc&jC(vqp0poIu}XaN#QxeyxIA{POjxL}-$?)1V~$pTedJHfz*B-3zm`5^c$7aM zCUu{l@kZT&2G1+s*r`9&1d4!QZsAu%Fmlx*bPMSH{7fbXY4fP>#DzMufUA!iy6aP`J^01@*2-A( zlzBy~uXU7~bcK&xVuOeWiHN7c@WDVq0A%@_VA^54f(ndBT7hYxqch(D2~zHi2J6|( z@%^2I)bmRNaS9{nIke&snhF_RZf|&ATQ(i`Q@`KkqTNp8*>=y{;KrlNi6O0?JCOi#n~54c_h_mRvMR_6`ItqHov5Ix5}(g3KI|dQ0fX zgnj@Bvi0*47h~bs|^ZQSADo*O(#nB(l zo+YB7zcssbwlz}v+~LhV*`z4>Z|T{zNc>mu{G1D!Cx-L;o$wme7H2mzGt)A``o5tb zI6~6f6V|G=uLXBXeOD$I|8sYAzt^YSXB)C&WyX(2+5sBkb3j7`f^S0lpzyHUX7s}) zel)3>g!KjZ0&ybQatj19-KLj=!v|3INr2rD)5hzQ)FB=)1Jt3CPFkZvF!W@7cMfnD zay7Ia-6Ld5f5_DY%bEiUdCpghH_)liU(jw!(*abgaT{F(?KA++gd;vI(>Q3~YhUj= ztPY62HDf{?Z=7GXx1L%Bi8pQXqUm<0mqn6#xQl!~RBQ}8vd>hQY0#);7<`3%=#%8c z&1#v^140)>JF>Bmvcu~=X?>wbk_tce4JHry%g!0Bj%=_;n_b=6pSG0I`+gQ6DlQ9I z5L%&z@J&dv0mXwDlJkq!R2wR4j4A}xw7d0Y#`9;{`;yrwp2^Q-ezcA`D^G{1x90nV zD9>1qpGBP6l%Zsb=7z{ENQ4k3N{PcRxPs!a+Qky;-P&4e5r75dmF?gNu`}w;`FDZF9Cin=H5WJ%}3SjAk;LfIXE&3vr zYpBWCmR_ey>EeX+!_?K5sFY}&YSu4De0$#sMVhg_K)FGs1HouH<9l-g~ ze$VOcxY}phK|D4YXPQ=#VQa0Zthc(S(g!hREV!A&${cOLVgrt5TObTh8ek4Vwm=!b zE-91{KsQVP-TVUn^FS}h{%=~Xvc6sa%2%eWY4H8?GP1Rl*us}%D?WiEq&*}`Q@o40 z(Ja_sni7>Dte*~61n4j->?;b|0Y5q|bTs}i#nD26`f0$ha8bYKna~&oNSzxM-P)DK z_Q5~;PZGTy8Fk>eFtxr&X?l(#rZ|*IPLF5N9$!kD$$`K^@onAP2RNZ|M9(Hq)F4yv zc9>Ts+`5;M2VUOlT4-WsR7%Lu`wceKZED#&$Lc^h_DPSyMOi!eK2vU5V77hkY=@<} zBVlG{(|uTdeGI$nH|ht)&p||;l_))6e|MRR8+js#LJIcHtVa@O>h{?bGpudd*q+n$ z89#9CmRIpMRE1A(n;1VUQh%!PCeX{LV0CIG0%GD_Dqq^?OmHc%C{>!E%=#yq{xQ7i z>Vrr_I6;T^!yfmVPcG-gAH=6J+{|X}T^9GIzia(z-n?`;2V|ip0r=X$~ni-?XoO;o-HsNPvqWi7x^uRq0HubZt3(jSjjg}lm_ z@Har4pA?5Q{=}8n%m6+8dyw(HwtYB{GjT8kOdq8=qh7D8OU)dS$~+@w3#Wn&#ZKxy zM6$^#|9HF8+xx8c!*4dWLdh9_ZQWc;3hK<~4w8j+8thCp4t%Cd+^TVPUt-`!(_KPY=tZ*#1zYmEj%Ef%Ev|Y2XHmr{aby;r zM#S>HX_Uw%$KW32mQce&^MH#S8^!P61Q={=Y%x*Dk}fpyOdE}DL6_e}bWwSZwd751 z)x;5>JK+H8jl?9SR>xVD1TOX4wJ}3A^ z!TKzi7{TY7wujPLE#vIC(!x&nyyj;?oW2q7B2;Q2@3IjWfEmaibsoS<3mf>JFmg2e8FxELZiZp=@=R)fV!j1SBn zcu+f~Sd6u(+*6|;>-A{vtRzoSe#7zp59n0MEtg(o@o=pW zI^@#CE~(oW&EX`z6JIP%fO=7d&;Y#3L*C_cEA|C1Cys<4-Kfwc+BzomC&>Is>6iSF zc18S3d!0dK#%P+eVN#euR={28)L5yz8r97|bW%8cFAfBHa7_pEK1hPME5oIOua7%d z@D_biOrG=$8&nAS`-l5~{-CSy=yPmOy=C~aWJZ?#FOLAa*KpHR+ixp2;yty~>C`no zuyH<9aMI=&!(RSh^m^epw^!>hoFo&(af_X5K+zG!xM65a`M_;0%N@^)WJ- zRf_NUmCUcGkItF+j^%pG$WbPUs?*ub`!GMVaMZOic0lrmkqz>mx z&l|EE-8FqAU{Dh_zN{v4o>R9>=kntHDx{Aw10x7Tj;;p26}c_XUlV87x26|z%sw_% z>g<^GCPob_(OBUZiMI8H)AkKc8Sdl!2pP_*3YEyI{x zLc=?SbB9Y)1=~}|qtPR$a?WfO#LE*CrD_wZ31{4S1{wpJ%KMut6-&RKZ;Od}j&zz4 zEh$SVfA{&+=jJ#x$fni`)Y-UqKe;dUw;7M?3a1oc{o2->^#n%@4Wi6T?)Uts*4yHdi9vdH3tOW#l*9+O@h4Mddv zh?@7ZT4KZ2W&YWjaWvxDPgBH>w9Ye@tu)s6soG?Fc0yTeXxZgH|0?J=o zI)i64kl^qD@oc1m$I8{}%HKWI5#u8Rk9*sm!nZQgaPr(8geCl=D+BU07#iwhyZX0;3aPN) z#4zT52uZVFFk5MDIU=8IoNCV2Ln^Md2crVsUbfL8tfI>ebHTR0Jp4aCvzx6rmYq~I z{wmRBB7txf?}|3%rAD6F4+##Sr7IlI?`KhiS6mkK5UjcI?I4u!>J5hZcOR(gSZTNE zi{Rej=h_1dWDh_KhvTISK6>)il?~PPV+YLD4ZzW`&J0yNZqSx*Z_&c**{`(#=pq`X zfmFN$)k9&NW9^laBb+y?H?sWI&b#%4OZC!oLzXDE+V*;Q+2YLnVSB{%js9fC!Eu>0 z?H;&t$X}>#tTepFrNy?^t)$v65hM(-(@yRmcOWaM6_9W<3$;F4xzMQQOm3dB63B+= z>`O=lNKZ@H>$BC>$2cmzdl8W{it+0k9&pAiXrqnJCqxs$m|i+mv}>QI>R7f%`MS4K zD9}N`xW!d1Y|rG42&`jRk^C6Yl22YibnZZJ2jXujCly!4au8iU@o3WQhmvZ*DM})Z z@i&rz$JQiQ{_XQOcOd_4yG=>QRk0f42gp-hD1}dmj_MNMDXrIcce?onC+v2Q6551% zIt6{W|M@p!-5(7V#1P?ZnX&V9Tts%1uHZJGi}pkJD5mKX&P-9I*vZKFEwf>yEbb%N87qO2RSb$BcEq15X~`-@SeaypGqR z=JRh)d;f-%i*<=M1N!ba6+?51OJ?fs(i}eT93YfUWh2ojgZz1EQTrOt>4{^WL!(sb{}%b2Zp5OVA{i&BI^uIl5=S*5_w@tPNJ`>@yyNGpL9#h(qpH)Q)(^rNr^m)E33HT=RbWu z$(OVxZuW1DOhP;9*4wWi8;+m}tje93Fpvw%>8~9HEfrdB4|~=n1(uDCzvN*I6w`NB zQ7@QVR1D@kzDFWShTv2S^S5Vszf336oORVwMG!N-{7h0s+L-^dY5?53k%k&4zC!op z=F@E&+B_Gq^F;fgXRm9sQPe{wOdmW)BHHn4zgP6F?Uw}(FVU2r#i}1Evou8zRK@-} zfDkA5$;~i-dI#rAD&MWUEUVbl+7lI2rjE?E`#{@84So{CCFmRDE2a1xla7)34)lpA z?+#=N$c!DFl6@Ucn?FO~N0T2H875|Lf=3MNTSwncjf&3?In=*>dKFB*G%-VQD%E}{ zww`IX%plvP4!=!K9tYH&#U9D=A5Z^;c_zp_XM6sd+r9&hi=1K#I_79X=6sXRbakq> zozCgBOq(B_@1-Q|+;x+~-8kYD`~6$~DqRa+HWDRCwwi0C%4<43C?mD}wNPZ1Z{lDu zh$*>a{wNNE`j20b{YbE8OlC!~Vs%u}^OM3qGmU3V|12R7{b!MRv!_cwxP6xo2k2=# zZHt#(PYyltyqxA-c)QI97!5i0-|8sPy<=ze)}54OLQvF}8IGt=bH>f_hUl*toAuY? z-{uM?&q8|pqf>5z_{86rq#L0QQ$R6Dsf% zdJOt-GUy$=f%5}8(scx_Sdnf42gflte=R$&%VKZV3lpo@#$$ir7R`d|^5nUM(&7vL zE#j0)VdBuX=PhaYDXsO1CvzXdR_&fCioK)QD*@`8Z3quq6kgpY41MjTIdnU9iCYI~ zVPN7Cy^CmMSQjf3e!@hwDo|BlE)ZyZCW$!o*RWU(z{l6mPsSl!2$P=jl6OUWB&NHm z&lXh~T3h=gRr*~{-z6ukbGmb%#AY|B4~8+p;$zQwrRV<~Yu8jo($2U{9MP~uvL;SV z%H5CQaR?Lp{VsMPRq`$C_Vi-O(JA`NlPQLFp8$Z75|Sav&^|uqfEjWGM&25aL2Wgt z4EGJ~_R|8R-Sdr?Wo-E`AntMii!PydF<7Jr4lg4J@~ub)j^!o=oXQoF^5lBjU4P~l ze^+*H{H7tN=oQ%bwBT*2{vf#HRzkbxtHarV5f>``L!rJR)@g|J^vxR?gAZ@baIrQv zuBU%)e*SD|m~^<;Qvtadk3yK?qePKY1v@`GN+ISGo(wXka*zHX)gKWN#AttbiuvG; zIlXz&o+lKBiLCgGd1?T%NDHV)T_JSMHf2-s1fV(MwRQl01q1M_(jDlEH6Hl_%?4btBAKgZC(WnIUO8ks-@hx(7s33-O_x%0^6&BOOIO5-zQ|cVql#h7D6Y%pT_Fm6+|)PKxNIeZ17h zn;O(`Vl-G5)=CJTBjb8BK*4pA;c7AlsSH-OYv!EF;$zLd%}vZKv*%AZ>qGJLM?%kN z067l_g2hmQKU+N4kLgefaI1P)fV1|PlThsYVI#W286{71`lvU_(olkDpZp&Z`n=4( zk1}wzgRbRImTl^1vgslyHk$F`_MJ?$q>w49Rs(!qy?X2}e*&qINBeq{ySSGPFbo59EI9guvpNQQ8jC31zEKPy@zHSCWn!SW?rIy%; z_?f0VQf6D@@2ac+9(}^6)@$&y)h|oUo+%zolH&Pszv=$h&rN-|pBAEmF_?XCG2UIp z8(wv^kt3@lO7L=~el#{m<~Y}z*^wCwS5pq&u%?LW>ETn73;C;9s$^`nK=Du>WzPOo z5ji!JhpQ>nhH5HX2V9>FOJhvs7yoo}Whf|2xigBBlBPQW6lKy12(@4G{>ngV;>i9r zx~_c!3MB160?Ytw0LXenPEZk3F5Rrxu-!Wm*+r>f}Wu`^3@O;g{)(7%b>|GUfQZ_1PP z3J{lZo!=;u3bl!D+p`f`(%qZq?c?crAEzVV-@l5HsNr|0fsXH_7UwRzze)rkOX2tWWzQye>{S7J{*!9IG%I4f7ubo%JP;w-h^a!deoW<>3Qs|4(_}71iV# zu8AT|M0)RCsY>0{h)5Svq_?Ov0U`7n2-15~KtMpGN|hRVq)7*iDVlHD)_M>7+a^-*(^8kNRv{ z{d=b3@-}r-g_021XBn65OAFW3h^TBVc{wcB;#YUa9=>7q_!q1-hHHI$NI&a_f58s@ z!@MZhinX5GNq32PSSW~B@y%?nq&7N17j*8!S9EiLWH4w6uE+^&py~qHV%-iP(>$4N zSTP5TB^XVtkKWNs#o+___zQd-lNkF2MKiD#Lb`zE#FYEzgNke*hy6!eBf!nqfFZ|) zW{Lxu8aVjMv+^RO3AVa`CTnfcIY$uTY<~fQ6$!xahpr&5_(TzaP4vfSU|#>#O6WDb zm6Pxm*7E7=In_*eaqM{^doug;RAA;;`+oz?0sRFuY~B9`@J&YYYhnxFWN3eL2?z-q zDldX#OuS-GevS+!mT#IQ)+O!VlPu#~A0CQil1NOx4?D)O4s;^HPnc#{fm1A+obJcbqH{@(s0>sr? zIlRTqFa*P)9teUR3*pAm5HGUp)Vx{q49J5A1`D^7GU|YmVKpaR&M;f7C9o^~04g!h z1fso#yv_;gkBw8V$*<(mmyUWmH|uvNi4= zAOsH{2=4AA1b2s^!QGu;!QI`R;I6?Pg1fuB!?#K9d6AcMzVrLtW@PV-Jyy-`nqAe^ zUEOP~oG{_B1_7Oiea{^a#4&IgZm5-L*Ipp6@9d(6tEOlGSjCmbf847PKHnW5Ix z1a97mA)xoHa7%*jg$3PSBmsG_@4MnZ>j#ACAZA~r)er8+zPP~?k}Y5AAw!y?(BMjn zCNHJfQ=8fD1v|>jlbQ{TJ`4&889#^=>=lK=0~``|s5n%h+D(m2Nn_SB>NyjPBd<^als7GA78|SN+<8@TXY*Rz#{$~~zY;~*lH3W=&NAr^U3*lfJ&q7Is zcv8<+sXvBODw>qf&VHVaF$qG;O+?P*6=@i3q0W*QQa>-SY0UA9T#{HX?BR(mY9+uT zn}9mxrP_OJlBjs7d{n>N^-G&Uaga5Cjx;1=Arr(eCrm%(2fN&IQ~yuTq|ay`I3b{m^_^i90M! zMH*^EuD*k1?BTbSvvHavYX9gQV8BSu6tZPg2zXc364uXHfiM;MfdYGQ+p5nXxZ0QNQ^8}hA3JX$ z94-(;_I(NXTc~L~(@gVk1n7C8nN08Z1o_84wh9a+mUUiYq-_pR)e_(pB~Ourh}h1& zF>mA=fa216Ot*hFA>x02qZAt*+{?~E?4UHG+ZVS)Qcp114gTQHG}Wu_wiR%E&b z@@IkgR#M_JRmlzw2^5>Nl|-7r8S9XVZyM~PLHzdc65Tw@wB@76SCrSY8#xi9&EZ9O zENm8Quv70kGtWda_TMdU&~y$Dj&5##X25WLSo3O@*v{*wCO2WzP%JQ+KeYn^{VKV! zR$7Thwsyj+Lm!u--HOKA$t0lO@klZC1?qJoYc=fvo)$7~SdEj_VmZ@Q((bOr25WT= zldL9LpRP`1iBkkKkJ%uBS&eh_2FbJxBUL`jhSxhYD@_{g`fGY)d4kTJWyvuuFZx#w z*NqLOLcT(=Sg$G0uRfjcVUya7Z>3$u42m9|bXkwQ*pb2Nub1UjSwKK-z3MvEN5tgK zAES-W48t`dkUvleIpV}dHYeWS+O2z?C{oY$D~FTjTE5MQ^@n8;IK#pFGBJ}7t-dq6^7TGj3(u0kczxaUj>BW& zb0lbvh*oM@y4N?#g_ML*iEr};BBT&gz3itAK+*L|+e8$>N!F~?z_YegZsK$Ha!Un0 zu>N-yc32y|>;jH3iVq#(XaKVY0sAPHTABrUv0>OnyWl4nfxV6Dz7%OL=Z905q=s%S#p`%>xgBR*! zPV2-e)`F`jRL_wsSuW&j@!1{f6iz7G1R~wVxs{^#_AI%-FU&IJEdn|96@Oj9-zFBu zvDq}-XxikntCPeS+ecIGw$P_hgt+I-J`33=z}h8+dGkfq8hXH%FKW|d5iO-k0`IY- z?43!z$Gq}RSKZ~_srt$KEpjB4;zH3C*BKX?uD52izI(QGiO-HNZyq>nT|_cGX3HEZ zBr+aH`lMk4KS8FrPC!g&ctf6C&;7FCBtc;2KBrTx%s~del&0SU^$Rcm88Jko3yc>t zb-E`_+tu>HL2B6kgYqFdDBir4lrfiAs1?Z$Bx0hZSdb{tEcO1?@Z6U#Vd^aUQuhX; z=XXDI50Bb5;R)A_wulBd5+pHW5~R375lKVoP%d0aw52zzz$F^cZaA@Ve2l4ijd z)&t`+a^M3gvH7e?LdRp%UQN)BAbH|nNI$8lvp7BO$;*Nkq|OfpSjhpFftepD9;{n2 zqnD5hfj9UO99vMk%IpZTL&?f8loBdnI;=^z!=t~tvJ2~=`;LUh68kG=KeoY1IZ##^ zNl}fiNvj$06^Odmx{+#Cl85=%7*qPOqKMPWWF$wP_P*K3NkGP;_GuibSp1xl*!wcT zrm*(W(y_>N#Vd!c^ll@yD1b*;d*0KKOZ2j6DFvZH++Se9`FY9VeeG6Y*HM^QV6xY;nq z%s~iQM$mSKc1-n~FCW08e|BFfwxpwGe#UeCmV`W(VNS*o2ZWq}&W z8LMqC={TehzG!-U>Xo|791Fengyxu#w(^=JHa7vK2GGdxgdD7?$EI&~7~F;?B(%=(t>&I@Y!}L= z*H&|v$Rr$jMetWh7+mL6r?-8%iMk2)_B|U>y`pGwJ5#d-QI8%t@}ctXMuc;VrhJfsW+I_uV4qRdZ{_ zrBYYjm912T6=1=ji?xp1h%&j9x2OWox5@HhG3-C@QnPw5mN%k87WnKO6?X8)g_qC1 z1+ph7+uIkMexH{XiTctj-BwHHeWt>e#~ghDVej0h7Cr^^uDI9r28H_shdL|It-Mpx zY{A~BQB_r(GDf?G1vZ1}j3PA+yF!ELZ4xePZiGCOj0g_sT$>n0>7JwHM=D z!LHy4>avTYyq8DD4C#I=PJ9B8+(}dp#ikYM%dH1XDx;pZthUWnJDobW4vEYMXQM1` zDx9pU!T0%gm$PKk+2`PkB;R*f(;_ zq`C4qhvD)+at9a7nb*%eO_)N8=7=la+JTGVL_geqcu<`@p^HE-qyPKYzeWqRvIkqg{H8t8~&F8 zdGkw^wK8hXl^tfyi5Ui=;VwpajM;8~;(o^)qEWp@P)Ijrtzv5nKNn~tyWVFhn{&C{ z5{*MRqMt`@fE5gIGpGc54%-?9x>v7J&CNwiclcu7!x9^=O2ag3n|SY6F#p<&6`>d zRT-BT#>~1Q{WMnTAN3_lj&sZW7+1CcX^%%YhAx|i<$bd$lEC48=R0@dn+W}PDAriY zmxklyk)H3`?N!J*4c^n8Ut^b^t0Y5m?#W9Ha>|?_uDx>BM^pjsx|+a7m)8717gsb@ z@fsNps6xnTo6AGcJ3(ajs}tRaUamQd`QXPie{1E9#&3KW&U!83C|I|V zEpN5xFm|W@Vp9KlW)AR7D!rT%055l6#p zbcrthme8hAwpxv+|6FCD|e9eN81!v9?of-&V-@LVMaz zS<1}ICR%B4oeOWJu7NvgjMVjo-K8J~>z3>BU7Ij;%i1vn2NTHJbX&(^!^UFXwN011pmCU9dF)Fsb5TM(OV?PA{$$gm-+|_+) znyprG?c*cN79@izFLCGTLf^wz{%8FV23<}&GuS>a$zQwn^d1&|aCk8baeuWka)dx~ zvIUbnxC?@pUFni4)H{ePH-Dbb!oWaI!h3O{R(NHlCO!TOyCeFvVZM!$30(cBi72di6j}M0VCo;)* zPX1L7)EhuA!)&U0(F8&4=SE-}j3Qz##qux6)=^=>g()kJYq=A8 ziwh@aPQz)%V<`4MH#8rQeZ;LPfm%|S)6LC}p|5Jo=Y(hOAfU|~!UTd|MCTQ=*DBV2 zMQO@KZEtv-+29B*IWzH+-(=dwie@=v2^VlmLwR16kxp^;lAkNhe(Z6VaLUWZ$s$&} zyJ(vx(l5FB?ZF7tV7v8-bvTxqrhPC!s-6qg5KwApH+N zNv2+Nked;DzcIICgzAyZ`NtTBN7Hi@AQ5xy-F9eE{{|x*i}I?SgCMjG)ANATjJULl z(y(L{Wux=qDDuex{*Q&Cz`2DLW+t}n?;_=u!QD=$Jiw075MPeHY15kB0zMT?W)|pQ zPNCE32aQt&slyuoaw*?A&AuzH5f8`DG3T$STjMSTz2HLPyb&>A7JxvWrx2zXP@gFJp{537RDRg_g^ zL{FAAjED>jBP#n5b&~69A>4R#WR-Tkuf^rO81-!N0v9-(5B51ydQ;7tNNTbuuZy=F zGLQl+S}B}VG2G*EH>nrPN&|K#67IV^H1_MdTD_8eY2w?DK?Pj4@=@Y%&R$P>@a1t% zzp8_mT?aPJvE&XERimkeQ$9bMg_H^ipzMp7Upxgku5hHxZB8_YDyE$U0``)1fRkKWz3eJ z8^U8#iLZU6_HN*u!0N!3jLANY7v2~p&Nc1!WVyHYvBhm5^>YCaVadUwyG7L7fAL

2t}37F>u9rj1_eex<-^gurH6Tf9|6mm8OO-+7f`Q7!9K{?Nv#H~y6G4WB$(dm zOizVtw|Ke!5{naIx`*7R1lxoosl<~_EZ>ORO5M%{b>;I_-2SvmIrELX3MO%4gdzH3 z`5fqBtQf6;t+x&?D#?44Nuy?r)tMSVx?5(p=J1ij7}fp3fb$np5L#~LDI$X=(`u@+%Ea5 z^%q)O++Q&F=2 zz&xQRL~|ro-8qv5rt-K%>9o=A=p^TG)UhMhDk);A7O%OQ?88^fx(MIeiMB^q9 zK3o3O^}tdHpbou?XU|>pnbT1gUgbuKZ6*b4e<-JLQp3fOw;3f35}vEBDXy`c=z2$a zoy{kuEJ~+o@}eI&ve6whWBrn-*D-GBeiP)qeo{=tz~|Ev*C97(htTX6tgv;m7Tj92 z`r|Wu9I)b@LSQ@eXAeo*o z)6aGh#$C4=ybnYH4^#k@u%~ z8^vc^laX$>by1G7v}^io-RipEqTW$RR%td4w@_4Gx0u+y3>C8laSu9Uw$Bv0R_o)G zFr?V@ms%fnTRA3S9`^S9)G>o*_SRg~+~$fC4w2j+ITTB;!k1nX>!Sw4_ymjpM-}qr zSF+H6LC44yL1A=X=3Mn7d;Il?h9Cb&UMvbVSVbAgBf0!I9m`UI2D1_)uKA;Y&jVsC zLiQ>b$a>dH?`o<*a-wd#Hl@oRjG4&R5}28@ohPhMLw#EpTv#P1X;ByXHirS6i``VZhDXSc)w}_n`o-ui*^MhMp*0;TIGDwZsA|;E3)@nxE zmnM$8`knpVnWt58aWnIbW+HMQa}KfW6?g0JT=9S!wD(hGkRgw}U7Ivh3Llk?4lFtR z@_J}?-$ODfj}rPnh{qhfBJ4}gNzPv<5xWtLKt`gOQr2qDj47-^$Dka<%d4zBwTRKj z`wFjq8UH>BbQsH)-S|s@7|(h$vFI2>six0FZq~sZJQ5gQWZuVU^*J-XL+X%&hC*zM z$DXy6D9Sh-S4+1N;WDL2oT%$aY5j`kYmx#(g~$ebc@+6~*+BK~ei5ERRQf@fWT+^$ zsu10K@XD$m#_{!;RC?Yl^4h@IN#ZJ4D;MVOBa-2uv*7yTxK<}P>)&ZK@In)TI7DQy zB%>0AdNuKFadt}MwSKiIl9){8(w{2(&{wu9qIPCr@^WHYD~H+rvn|S(q$_gqqh$4R z9KpE+^-n9=FDP3vqOx*^k|*;JnXHt~4(6hZ+q$i*6^bW}g2z%sbrpc4>GjmG!n0meV|PvE2WLVFQr#$M8OGAQYFi(_vz*1R0NidAAxF$ruxvr`k+0OAyff2j z0WF}a)SGU@u80Q3Ot+@TXf{`+myE$DB)``(Ay-=($ zcO_zwP(9V_oQa|@cuK2v=`l60Z6j4^a7jVC5mm;@H)u#p+C!*bb`h+=FP{(Qf7a@# z1yPuP*|=WC7B#5>vm_-Fo|zzOT}r_i;U$cooGvfdU~<%@ffuTV?z-2uGho;_5vHQt zQg7)lNfFhLNW~s|W8Xl@9Xn>YTtcIOwlLr@`^=@2cy5;?JJB9DjO$V$60r>Zdo=;C=!i06qS~~U!8l#DyjXJtd9Bj zWB0lEU-EWMU`gt#HlOUS8$fq$at*l^x+4!r?KjBrq7r6#5Cv9Yg6B4U*6ZLL+^LZ4 zQO$Kjp=cK0t=Y2p6gI47)0+sq^1aZ*(%|wmbO^Rwna*XVqTODejCNmS?Tq#HiohV;)kVIAITFV&mXa< z>v7T)^&3@@$H)VgHMQl;CSrP76B3S>(?#;NW98tM_kP^m z1BUe)iQM!r>k>g>)yZV_+i0PMaWa555C;u;k>W4t#38Iv6N91U5EBckF)5DOPi7Vz ztT5!t_Oh0AetK6b(gT}1Vr$ym_zV13ZkFd+r>OU+VR$S$WM-a0@{JEG)_l^Q-id{% zv4a=6s+(!;3=Q}dzKxlzGHG`UW1r<(8(J0Uiyf)4%9T|HTG2Bp zw1sIgAyUb=GK8i>^LbnM5fP3ApCQ3yt*Dm|#x~f=J<8^Ui?k@l2j>XeWy&Einz5Pr zdX3h{ao*P&K=7PXa7_iUw9ZYD9bM-@LUm+MV|U|CAjgkssdIH*Y--B{VY+(DrA>Xn zUTj%S@!`HFQ;KIu+D$RI56|#O#YPZt**Rxo0g;2ZMGt=Sd;(oQBjbC`gM zXhc5`c!C3iSKd6lvu_a$^ zy#!R1g?O6%LHd5CibR7VHIs&s9|ox8ukv!o#I)6UfQfc&G=aIP`x+qfR9h-C8ix%j zDstetkbHHU>59Ybh$;tw3ZWi2WLQK@<_4PVNeMp zR9I+o)(YtfhC8JBh-MPh`uQ;F10VTp2DtE4w**SKBVT19lMX8b9>FEG)S`y!L z(h!Ndjc{s4ci7aM9$2g(#>VM<7xp6Q!S~SIeQhDj`0FvFOPbi%2w+l7+6bUt5XzT? zVv~l&^q^P!n2Tyt?bHg-IUYqxxRWnBCelnV#_xMQUXuZy(|C)eSrwHFD^gh+ zlb@l>XBO`KdO0jwc0&)7>f>jQJ$vH@R69l@wTuc`eD>$Q^pKy$8{GNLTVFt#(PMhE^ z<;z?MhPx!$UNs!$lErZUhldC|Jdj23_V-OVgrDkTTEm?AA$c%0rj54a4RYEpgL*Rf zN0p#QJrHMQxrkMJCdmBXN6*zuk3aP5`$P#Q1@CydB?5yF_h!DXTR}JdnrX|4slAN2 z3zuq`_eQ0?9xdUFYM`gk5GzmwwIqK~snXWfPS$TAiy(#C?{Qa8-(*DJdo1teYu7el zQp0hTx70^`eb1n4C^G4Ntu*d=Yi7S}H6NdG4a7ROu?cg8t&s7+-hUuhUzvQf34u^9 zT`v-?=aM8n=O*j}sxF*O6bTuCn${nNLU919;B_ zDZczbI|CouCtJ{L&t+^SQiqzn~YE)^mx*jU~S1)_v#HQAh- z7FFSXSZT0Es2=#LU{h(SY1%X_y;gTv9xn2!Iv!n~6w=8rqd&WCs> zFbPa+Ei1L@a+(g2yc^e=otb58&&`W`NH`}%Tq5hQkAB(}w(F)sBZ*0AIaQvFE!}bv z_O8_L(9%%EsnVw>W$muOY`K9dwCXo~ad*Xa>yyOA5%gR4GI!fqsDg||-}cVC#YDV1 zA?bhl+Hj*I>EL0_`ob5^JfGtYgcNK$ola+2V-(!%uFnF^oekh|3gtaaU1M;J#^uD3 z?+nNbxTMPoC5eizQ}r)P=Qzc2QOe8eWcew;;+?-P-Mtq=@IEW=N`lk}LlRa7(dWXf zIJ${Bv}x_=MS5PgR@^}Aq(o0gRc^45S3iE5U$N@%DWxa&u^u+crhLjzMBB=&8>JAG z&(nK54RPU+8T1vQ_OmU*b7xPsM`;zjWzP|(+8s>1WrIY^+GDdu`KFBNdiQiic38$c z+M@mobtPj{5iC(9_Wt6AJc(UGwA;Ajc}QttLHY^2&SrT(sPV9|ivToSvH0X-NdpeE zu+M1T_Gm_)qKhD^qP1mL62Sg7aY7>(in`j?4m(EPo?FxzUvMq6?^&6v^%Ac#^f`Lw z6i?uNyM@junhWUPXV#PJ)v!gwtXd75Eo%n*#8WcP6uT~Bdn1GgFvXUYp5 ze3wdF*xJi%`%VLU_e+bImyf&bS}VtBmrdwq5)-YO>g2wVt0b_To2k09gLI>ViyUcn zBNVi0tJz;lbsuB$&&EHEwE&-T(3ce-Y9y|65nlIXNQin8zDp2hmFh3p5}(DlNjK^q zU9!qXOsb}&g)F8161q{G&;t`S?d6&k#0hYXvokZ_K868Ev2YR#dLDf3dS__Djz#EwN$s_F$j_MVrDd5O(YuZpB7 zB$yTroJJx=eQmxhV>aS#Q@hS~Q9JZjJ2j06J_xVQt-{SB?#sRcFQe0l%udxc(;boK z8EqQ-RSBz;=Te^u7NTla+N8Gn2o&od%D9OOO_P}wZ8+XzxP3+tN2(+}HH8PlSDa6h zWT&ioSOV5=M9B?t^#T^`EdZ|Fll{Oxwx;k&xruHncd=T;QRYa?&{w$$uBa|^nm{0H>CXP?U^HpeSs7*5%>F<89RMYm{< z>O9nfTC!(fNq=}HoRwqV`xSY>I3$e6BRCJgm0uw#RNmFtiGpzkAA5ejqjQXd?xk_m zF$is>!zI3pgAxv7Yj?y|BSm&$V=Pc;VfV4_;=C5@qoLg~f&j3MI79Nbt$&kB>4o6o z^>dGTD>;HYWsk6#)3upWXCh;fvo4~7VP0Mekhqt9xLqW2A$o^XucpK3ZMF_WRP*5? zu$~jol@T!E=Fqsdmrv54(HzrT@;sl_K^oMqD5bjD=xur7ml?}7e_YT#0)a>`gI)~TP-d(BOeP)8 zI>39`h1{a$DheFYRP?(F@K;o*QdX^q9)Th&nkpc+s?nC`sDm?=PXZ42A^XEt@#G`# zuH8D=wliGG%+sqa7On6R9T>sZY$%AtSGI@c@nnHgDbC^27z`fJQ}~4Mx!Bi8rQAVv zq#p5Y(QsnAajV1DwzjGJ<{s5QF-M%I3(#jFSfywtF`iBONJ1`O>WRCBF^Hb~ACaq} zDPo12NJxjkFcT){4U!@>7)C3dTdDCZv7Hfl5afkioZoS@gL85jjJm;0x zYMVZRZYpor+x^VA;nqTLF_3V;8;xNoo1QnJ7J=~`K~-3pTRy&fmf(ZD_dX|bj0Gah zR71xXCI&%Q5-s!8SH7J?eY&p%tWhi+Y>1UyP7jI(63X=s?Fh+G1~jr;S&&)7Ywx@q8Xnw3+32qWH#ALxvzU|SL2Rt@A9(VzJ3hm4pf^eec$M8hG|Jz=dw>*x$W^uIrTH~ zLIR$X&#r};{q9<@x1}pRsD8S?t+fQE@mX!ff{ff=wVZw*O)VP(i_3z_id!eqmH$U)DOr@e9cGLV`SeL=a>g+8`et?;7Du0-FK*0h;~5 z`4?CUHa_F9_~wIFR{K(?9OwM_SHyL&MQ#EQte>aC^_!wzumgWWIW^LZ4RnI_rY8F6 zV+`TinC!!pi*kWUSF`%*fT6p#u1zYtI&D<71Y+0-q+9kHIN+o=hgv(AK!rUM6qz;=W;@#UaZ>iC8{J0jZ{Q3`7yPi zs0#8@rd&(#Cc!@MAGmX$mGl8CE+lZT3j>DYaqtH6m|YVBQVrW%f6y9ooWV;4CAv{P zq`IF@pGgsmWN- zi4^=LVzvw*?@tyWlbWkoq)I=Zz0H587HHnQs71h?@e!h{Pvp5Z>P!!ax$q^gpg$>u z4KV7t6h~v@{<_AoJokH2ga>;HermJ?oS`40(K4PJ(J{-3uoAYpWv9ee4BQZx`4V1<8Vs*A zD+@rJMxZxu#;QoIEBCTG!ITJVCWvntW25nW$m?y?(eP1?7?1&tCG*5t+89s4k}43p zAIPmQD6^2qIXNVme$-EQ=6<*QSeZ5du$c_GrSNEA22>Dg@|D8|eT0xdg_B$0ev@YB zews&SwQ)3meu6PkT7v%I?6H$WQ8U5SooszS8Wo#uP`P6`34){&k2KHerHJccZJqZ* z$CfS^bYfW`G)f8|dXPSrGgAtX>%)k=0<=ET()A14dow@RM|O~<$F8C2$K(e*NfA&m zR3IQAC?H?)6&}aVFFPc_KtKo}KtRs`zv`H2OIn(lTTyG7rcZY zh*Qz~67bx1K8tyH!BF;5hzLL<4!U}ZmSTyO7!l^b#=21k@m_%9$Kl1#o%o7u#j z(TCo~CQI7ufLrjV*)-yDCS179rHr^l(y;Zs+GB?%4E(aGu{lnoAuknla;|#@O_{rT zcG0Iv@1PvFeW-lRY-Go61PIzE47|zGh~KrHL4?uR(e!J zszUMh>dtPAZj7D35fwarNu+z=7%RorNG#PQhZ?R!+Zq3?1>gWp0jA#jTm<#3DZEfK zujevP%DNwQt{*ilS#D4$*^);*&P^RH6Ujv~Vm= zb8Jy9Op|gM_68HydXqYnKa>yEiseOJWk;Y)yAl}A8iQyNEQ|_`1rQ|6J086*SF=S} z%psZA0c3>6FdvMr)fzn{Ug;+&*S*Zd)}){r-yjn4JeESkj09nUAU0D?>ydi4T8CzH zE(@y(sjv9JPiCoCl2CgVV;`eyN4zo9dMt9q>TI+oiot>1$660-J^}g8K|vf;Yb(hr&4ll_FQzU6Ss3=5?y&h04CmjjN+e-{2 z%CN7)f-w{Qb54524XP$4q+B%Z6ZL$9<*G2&GYJ#p-pNF3k3vLe;p8uZI%6NpMR#y5_@V)?guu`- zgGyI8pz1#m9De#Z)0D3qgs6UrjuWDotNBLSN0RV)_$M^*K!ZJ}yw_49j0n~)Y{SR8 zQGyVlaQ+DkO>Fx0ph3qsuk8JOl`n)8@j&a?s6#J+KSbWqnkRf+z%vLrAE&iR>)7UL zjPER@S3A^`EP|6b@P9NMSh;ajhGhqS_cp#dBT{P>7;Vfys~pFqqJIZYuC z59zB3rg225K&hKq>T}qSG2U^yi~SP=PRZS{{0xJZWCp-sMV5`F@okOuxZ*ro;Z-pa z<=vXCP(f3NJ6Pg$>lrMVc*5CJ-I}63DK7#H+m(cNIA$7NsK)B{(&=wxIlc`lB=;wT zU4%ozA~A46NZS{|pI@;$ajU|D$T(UVvl2>h6)1^x(uC+urL{=4wwX{GnL~@so!($R z2L5}_(0^86#@Ikd_s^8sWE?>c0{uHX1meL(fLf5f}Nd zZ5SEi)Y`-R)LBkIniPHpT3CHp`?Hg0G$>?yWf51zXWRU<^Sa4nh#!t=G4yRf{XK&Q zeOp^5w@=sMBT-?3voWSxqQGtEPe(7hpGDOXWk{rx6Myn3jXVn`vt5f5=xR?Bzlr@o z&bR^mY?>ZEFd^Haqd|wKS}VViKJ?NQbjMok{A6)&>T==aO~oR;@5vIFkD?+1k+)Tc zG;R&Xu;X-$uD;DUq_gqFLr$FN!g25R0&+u)2BKy#EUM{XW@G(l zQyw1)Kdu3E0`pJa{|BL;e)?g|zj?nSQdqXSz|oT68ECZ5EW|94PR7<^f;M>T>K=`m zZT!6vW=8}{{SxC?83^wJ*sk;EWn0eTDtwlVY8D6y%!T$6vzUMlKEe%@l~zG??-ixC zP^-CD9eSzINKgXMqbEU?SZG`C}>lZ4&XT&`&@8m_~Js&l`SQ=G^iw z@(#Lai_V^T#xDf&YAR$n0SSw9DW>!8D=xVDeo=(!n1^dXmc6?@RmBd;`JDD4MPKbh z1z1>S3*erH9c#kn`;)RcU@P_QcjrPGUeGv+{vD&o@J{R7p+@y1wC_g5`F8K^m*%1< z5qgRB1jN`YOFd5*D&g_uuG28rl;St$2I*64`gAtmedJVddLLtuneaHsWHTRiW!$^# zKEqw}vA(I`NKR~H=au|4M57l`+~@jhofIUzEA1C@B+16l!%eh%t6nPM%0&C>B*d19 zy{!sGE&=@S_Kc!hT+x+lKSM zcv_oFPUY?6woJX#itg^T>^iwPM*xL{so%@i;7j2eemH9EUx9sg%Y&&r?aouy>VV1U zth$h#%xliH){hOvSlDg8g@<=RnkYsk!g1Z5F8PU3l(p-5)|7Y+M)XU9s2-%RT9$qW zvLjOx^yxeCdO6Yq?yha9Z*pGZs6nojby{AV*-Mq+ml4z@B@nyzgds95Pa`)W&Gmkk3^>Zr!YBcWzaT@v(I=T#R_)<1s7g0Lx=br_=ygx9eM`yRQIBmk*JXw z+yJo@e_kApUI=Dz__4%P&{Tu@s1|>na%k1w35qbiZ z?grnbP!2GrD4AfN?~ZQDDbt)gQ?b|w>26ab@#PvLTzA_Gmyo6ExlSY)!FDAmFv5(y zVW+~`Ik6u~@^Xk|9iGF;d`DPg)}QuB%>cPcnt=g3c!_@yEu9UYVK`e+nW|S8<*IEQ zwqnCAAmxZB`IgwUw>Ur=7LQL7tsL=_a=i}UzNbYRqsFu{^~gwP>L~(a#bcbooK0<= zJEm3^6@+500;rB7Cr>srs7@U={^&SRTrp(#*@YXuoEg!vX8nt^)BZVqJnK5+p*mNV z3uOFT;$`$n6xGQ_gSUrSM|f;Jw0FtsK4ey2tJ{!cyulQ}%}x%}1>OaT26wTE4*(Yf z20{I{3GjW#<##IqI1Ui-H~*;>1qS+q&3p&=^T_#>=>1-h0AI|k!2gr>{k78H6TeR~ z-z!!5ADM5-pns|i`g=`)&!@`79e&y^`dvx?ppWFmfc+0tKm(sHek$MVv-w#})7<>Y zD}I-z&4vwg1~^hK0O4sIdMe+grJR4NRNKr__fO)#?`i!IH(><+(+=0~_2Z%B4RTZi z0d;=?0(y!~KLGAreyZPE-^N7CRMWti%FtZ*!#^oq5-^CNyzU%N)p8H2w z`BkCcGv+@O8vc8bpKyPKobS#15wZr?;jfm!0clYjAfT5|uz>QNDvdvB_dDi4Y5P~t ze%E$S=O?mczGu4sN%|=>{=Gcm46*;j)qkY_%Jlw9)$f_|Cyeh3fpYvE#-H-$zY`T_ zhy^+gaKRV<$szy1#nk=Zn*E0OJJ|2Lp+CUdnZ7sjchmeGf!IQAg&i;&m;n0jFRT2n zCcE|b<~$*M+qwQRBK&#C{7d|MKM?@h^5l!(rYe8sasR2Kel_YiuJ7&tMf}e_^>Z5Z zDgE_WM_zgJZ;*ea3;sRw+S`AF{9_sZJ2DHpey%!Tv^<9YJ+w#x{PBN{F+cm? zk0I+vq$2S*0ZRaE(?h`l0X+>;PvyH)!;$@e;J&%@@6CH7`YdE0fVcI(@HQ#_KX~7K z_;hhy*V zsXhg?j`DxOg#o(fpIZ0LMSq7&zj(PU0|-6-n7_BK4G>QL3GSO;{tmZLpfL{$XdM?o zwO^H$1B91Uttz_T$>RT$cE4l(leSOieZCif zPXL*4|3uc)F`=hv<-cLsQRF8L|84^RduHgVUSJ@6z-Qi{#J{QW_oM`U=0YPR1_);X z1EB%Fp2~N$=wG$?f%9FTAEW8ieNadiK&%Sz@9CK1Q~3^IZ~vVLYfUX. -% -% If you modify this program, changing the -% version identification would be appreciated. -\immediate\write-1{version 2019-01-21-18:34} - -\input book.4ht -\input verse.4ht -\input booktabs.4ht -\let\columnlines\empty - -\let\rm\empty -\let\sf\empty -\let\tt\empty -\let\bf\empty -\let\it\empty - -\def\@chapter[#1]#2{% - \gHAdvance\:mpNum by 1 -\HAssign\minipageNum=\:mpNum \relax -% - {\SkipRefstepAnchor \let\addcontentsline\:gobbleIII\no@chapter[#1]{}% - \global\let\f@rtoc\f@rtoc - \ifx\f@rtoc\empty\gdef\f@rtoc{#2}\fi - \global\let\f@rhdr\f@rhdr }% - \HtmlEnv \Toc:Title{\f@rtoc}\:chapter{#2}} -\def\:tempc{\@ifstar\o:tableofcontents:\o:tableofcontents:} -\HLet\tableofcontents\:tempc -\NewConfigure{poemline}{2} -\NewConfigure{legend}{2} -\renewcommand\legend[1]{\a:legend #1\b:legend} - -\ifx \memgobble\:UnDef - \pend:defI\getthelinenumber{% - \let\sv:thepoemline\thepoemline - \pend:def\thepoemline{\a:poemline}% - \append:def\thepoemline{\b:poemline}} -\append:defI\getthelinenumber{\let\thepoemline\sv:thepoemline} - -\else - \pend:defII\getthelinenumber{% - \let\sv:thepoemline\thepoemline - \pend:def\thepoemline{\a:poemline}% - \append:def\thepoemline{\b:poemline}} -\append:defII\getthelinenumber{\let\thepoemline\sv:thepoemline} - - \let\no@Msect\M@sect -\NewConfigure{@sec @ssect}[1]{% - \def\rdef:sec##1{#1\csname no@##1\endcsname}} -\:CheckOption{sections-} \if:Option - \Configure{@sec @ssect}{} -\else - \Configure{@sec @ssect}{% - \let\sv:Sc\:Sc \let\sv:sect\@sect \let\sv:ssect\@ssect -\let\sv:Msect\M@sect -\let\:Sc\:gobble - \def\M@sect##1##2##3##4##5##6[##7][##8]##9{% - \ifx \o:@seccntformat:\:UnDef - \let\o:@seccntformat:\@seccntformat -\fi -\let\@seccntformat\:gobble -% - \let\M@sect\no@Msect \xdef\c:secnumdepth{##2}% - {\SkipRefstepAnchor \let\addcontentsline\:gobbleIII \let\mark\:gobble - \no@Msect{##1}{##2}{##3}{##4}{##5}{##6}[{##7}][{##8}]{}}% - \let\:Sc\sv:Sc \let\@sect\sv:sect \let\@ssect\sv:ssect -\let\M@sect\sv:Msect -% - \let\@seccntformat=\o:@seccntformat: -% - \HtmlEnv \Toc:Title{##8}\csname no:#1\endcsname{##9}}% -% - \def\@sect##1##2##3##4##5##6[##7]##8{% - \ifx \o:@seccntformat:\:UnDef - \let\o:@seccntformat:\@seccntformat -\fi -\let\@seccntformat\:gobble -% - \let\@sect\no@sect \xdef\c:secnumdepth{##2}% - {\SkipRefstepAnchor \let\addcontentsline\:gobbleIII \let\mark\:gobble - \no@sect{##1}{##2}{##3}{##4}{##5}{##6}[{##7}]{}}% - \let\:Sc\sv:Sc \let\@sect\sv:sect \let\@ssect\sv:ssect -\let\M@sect\sv:Msect -% - \let\@seccntformat=\o:@seccntformat: -% - \HtmlEnv \Toc:Title{##7}\csname no:#1\endcsname{##8}}% -% - \def\@ssect##1##2##3##4##5{% - \gdef\ssect:ttl{##5}% -% - \let\@ssect\no@ssect - {\def\addcontentsline####1####2####3{}% - \no@ssect{##1}{##2}{##3}{##4}{}}% - \let\:Sc\sv:Sc \let\@sect\sv:sect \let\@ssect\sv:ssect -\let\M@sect\sv:Msect -% - \HtmlEnv \csname :like#1\endcsname{##5}}% -\IgnorePar} -\fi - -\fi -\Hinput{memoir} -\endinput - diff --git a/docs/user-guide/optimisation/optimisation.tex b/docs/user-guide/optimisation/optimisation.tex index 6fb0ef942..ce0026007 100644 --- a/docs/user-guide/optimisation/optimisation.tex +++ b/docs/user-guide/optimisation/optimisation.tex @@ -5,63 +5,95 @@ computation is: how do I make my simulation faster? Or, equivalently, why is my simulation running so slowly? The spectral element method is no exception to this rule. The purpose of this -chapter is to highlight some of the easiest parameters that can be tuned to +section is to highlight some of the easiest parameters that can be tuned to attain optimum performance for a given simulation. Details are kept as untechnical as possible, but some background information on the underlying numerical methods is necessary in order to understand the various options available and the implications that they can have on your simulation. -\section{Collections} -The Collections library adds optimisations to perform certain elemental -operations collectively by applying an operator using a matrix-matrix operation, -rather than a sequence of matrix-vector multiplications. Certain operators -benefit more than other from this treatment, so the following implementations -are available: +In the current version of the library we now attempt to turn on some +of these optimisations automatically and so you will likely observe a +\inltt{session.opt} file appear in your directory which can be viewed to see +what settings are being selected. + +\section{Collections and MatrixFree operations} +The Collections and associated MatrixFree libraries adds optimisations +to perform certain elemental operations collectively by applying an +operator using either matrix-matrix or unrolled matrix free operations, +rather than a sequence of matrix-vector multiplications. Certain +operators benefit more than other from this treatment, so the +following implementations are available: \begin{itemize} - \item StdMat: Perform operations using collated matrix-matrix type elemental - operation. + \item StdMat: Perform operations using collated matrix-matrix type + elemental operation. \item SumFac: Perform operation using collated matrix-matrix type sum - factorisation operations. - \item IterPerExp: Loop through elements, performing matrix-vector operation. - \item NoCollections: Use the original LocalRegions implementation to - perform the operation. + factorisation (i.e. direction by direction) /operations. + \item IterPerExp: Loop through elements, performing matrix-vector + operation utilising StdRegions building blocks. + \item MatrixFree: call matrix free implementations that can + utilise vectorisation by performing SIMD (single instruction + multiple data) operations over multiple elements concurrently. + \item NoCollections: Use the original LocalRegions implementation + to perform the operation which involves looping over the + elements which may subsequently call the StdRegions + implementations. \end{itemize} All configuration relating to Collections is given in the \inltt{COLLECTIONS} -XML element within the \inltt{NEKTAR} XML element. +Xml element within the \inltt{NEKTAR} XML element. -\subsection{Default implementation} -The default implementation for all operators may be chosen through setting the -\inltt{DEFAULT} attribute of the \inltt{COLLECTIONS} XML element to one of -\inltt{StdMat}, \inltt{SumFac}, \inltt{IterPerExp} or \inltt{NoCollection}. For -example, the following uses the collated matrix-matrix type elemental operation -for all operators and expansion orders: +\subsection{Automatic tuning and the --writeoptfile command line option} +By default we now try to select the optimal choice of implementation +when you first run a solver. If you run the solver in verbose mode you +will observe an output of the form: \begin{lstlisting}[style=XmlStyle] - +Collection Implementation for Tetrahedron ( 4 4 4 ) for ngeoms = 428 + Op. : opt. Impl. (IterLocExp, IterStdExp, StdMat, SumFac, MatrixFree) + BwdTrans: MatFree (0.000344303, 0.000336822, 0.000340444, 0.000185503, 6.80494e-05) + Helmholtz: MatFree (0.00227906, 0.00481378, -- , -- , 0.000374155) + IPWrtBase: MatFree (0.000364424, 0.000318054, 0.000291705, 0.000138584, 8.37257e-05) + IPWrtDBase: MatFree (0.00378674, 0.00308545, 0.00100464, 0.000653242, 0.000283372) + PhysDeriv : MatFree (0.000881537, 0.000774604, 0.00407994, 0.000540257, 0.000185529) +Collection Implemenation for Prism ( 4 4 4 ) for ngeoms = 136 + Op. : opt. Impl. (IterLocExp, IterStdExp, StdMat, SumFac, MatrixFree) + BwdTrans: MatFree (0.000131559, 0.000130099, 0.000237854, 8.40501e-05, 2.78436e-05) + Helmholtz: MatFree (0.000988519, 0.00133484, -- , -- , 0.000166906) + IPWrtBase: MatFree (0.000113946, 0.000105544, 0.00022007, 5.74802e-05, 3.18842e-05) + IPWrtDBase: MatFree (0.00148209, 0.000717362, 0.000885148, 0.000257414, 0.00011241) + PhysDeriv : MatFree (0.000295485, 0.000247841, 0.00186362, 0.000219107, 7.38712e-05) \end{lstlisting} -\subsection{Auto-tuning} -The choice of implementation for each operator, for the given mesh and -expansion orders, can be selected automatically through -auto-tuning. To enable this, add the following to the \nekpp session -file: -\begin{lstlisting}[style=XmlStyle] - -\end{lstlisting} +This shows the selected collection operation, in this case +\inltt{MatrixFree}, for the different operators implmentations and the +various approaches. Note that IterLocExp is equivalent to NoCollection +and IterStdExp is directly related to the IterPerExp option. -This will collate elements from the given mesh and given expansion orders, -run and time each implementation strategy in turn, and select the fastest -performing case. Note that the selections will be mesh- and order- specific. -The selections made via auto-tuning are output if the \inlsh{--verbose} -command-line switch is given. +This choice of optimisation is then written into a file called +\inltt{Session.opt} where \inltt{Session} is name of the user defined +xml file. We note that the optimal choice is currently based on the +volumetric elements of the mesh (i.e. Tris and Quads in 2D and Tets, +Pyramids, Prisms and Hexs in 3D) and not on the boundary +conditions. In the case of a parallel run the root process will write +the file based on the optimisation on this processor. In the case one +type of element is not on the root processor the output form the +highest rank process with this element shape will be outputted. Once +this file is present it will be read directly rather than re-running +the auto-tuning. + + +\subsection{Manually selecting the COLLECTIONS section} + +The \inltt{COLLECTIONS} section can be set manually within the +\inltt{COLLECTIONS} tag as shown in the following example. Note this +section can be added in either the input \inltt{Session.xml} file or +the \inltt{Session.opt} file that is auto-generated. + +Different implementations may be chosen for different element shapes and +expansion orders. Specifying \inltt{*} for \inltt{ORDER} sets the +default implementation for any expansion orders not explicitly defined. -\subsection{Manual selection} -The choice of implementation for each operator may be set manually within the -\inltt{COLLECTIONS} tag as shown in the following example. Different implementations may be chosen for different element shapes and expansion orders. -Specifying \inltt{*} for \inltt{ORDER} sets the default implementation for any -expansion orders not explicity defined. \begin{lstlisting}[style=XmlStyle] @@ -74,13 +106,49 @@ expansion orders not explicity defined. \end{lstlisting} -Manual selection is intended to document the optimal selections on a given -hardware platform after extensive prior testing, to avoid the need to run the -auto-tuning for each run. +\subsubsection{Default implementation} +The default implementation for all operators may be chosen through +setting the \inltt{DEFAULT} attribute of the \inltt{COLLECTIONS} XML +element to one of \inltt{StdMat}, \inltt{SumFac}, \inltt{IterPerExp}, +\inltt{NoCollection} or \inltt{Matrixfree}. The \inltt{StdMat} sets up +a standard matrix for the element in the collection as the underlying +operator. The following uses the collated matrix-matrix type elemental +operation for all operators and expansion orders: + +\begin{lstlisting}[style=XmlStyle] + +\end{lstlisting} + +The \inltt{NoCollection} option iterates over each expansion +in the local region calling the local operator which is implemented in +a sum factorization method within the element. The \inltt{IterPerExp} +holds a standard expansion and then also holds an expanded copy of the +geometric factors within the collection operator. \inltt{SumFac} is a +sum factorization implementation which undertakes each direction of +the method over multiple elements in the collection. Finally +\inltt{MatrixFree} implements a vectorisation suitable version of the +sum factorisation which has minimal memory movement but requires some +initial data re-orientation when vectorising over multiple elements. + +\subsubsection{Auto-tuning} +The choice of implementation for each operator, for the given mesh and +expansion orders, can be selected selected automatically through an +attribute in the \inltt{COLLECITON} section. To enable this, add the +following to the \nekpp session file: + +\begin{lstlisting}[style=XmlStyle] + +\end{lstlisting} + +This will collate elements from the given mesh and given expansion orders, +run and time each implementation strategy in turn, and select the fastest +performing case. Note that the selections will be mesh- and order- specific. +The selections made via auto-tuning are output if the \inltt{--verbose} +command-line switch is given. \subsection{Collection size} -The maximum number of elements within a single collection can be enforced using -the \inltt{MAXSIZE} attribute. +The maximum number of elements within a single collection can be +enforced using the \inltt{MAXSIZE} attribute. %%% Local Variables: %%% mode: latex diff --git a/docs/user-guide/solvers/compressible-flow.tex b/docs/user-guide/solvers/compressible-flow.tex index 6a4d96df8..4f92f694b 100644 --- a/docs/user-guide/solvers/compressible-flow.tex +++ b/docs/user-guide/solvers/compressible-flow.tex @@ -167,9 +167,9 @@ a solution with an order of accuracy that is related to the residual in the Newton method, the accuracy of the method may come at high computational cost. The approximated Riemann solvers are simplifications of the exact solver. -Concerning the diffusion term, the coupling between the elements is achieved -by using a local discontinuous Galerkin (LDG) approach as well as five different -FR diffusion terms. +Concerning the diffusion term, the coupling between the elements can be achieved +by using local discontinuous Galerkin (LDG) approach, interior penalty method or +five different FR diffusion terms. The boundary conditions are also implemented by exploiting the numerical interface fluxes just mentioned. @@ -183,6 +183,7 @@ CompressibleFlowSolver session.xml \section{Session file configuration} +\label{sec:sessionFileComp} In the following we describe the session file configuration. Specifically we consider the sections under the tag \inltt{} in the session (.xml) file. \subsection*{Parameters} @@ -197,6 +198,7 @@ Under this section it is possible to set the parameters of the simulation.

Gamma = 1.4

pInf = 101325

rhoInf = 1.225

+

GasConstant = 287.058

TInf = pInf/(287.058*rhoInf)

Twall = pInf/(287.058*rhoInf)+15.0

uInf = 147.4

@@ -205,30 +207,39 @@ Under this section it is possible to set the parameters of the simulation.

mu = 1e-5

Pr = 0.72

thermalConductivity = 0.02

+

IO_Timer_Level = 3

\end{lstlisting} \begin{itemize} -\item \inltt{TimeStep} is the time-step we want to use; -\item \inltt{FinTime} is the final physical time at which we want our simulation to stop; +\item \inltt{TimeStep} is the time-step we want to use. +\item \inltt{FinTime} is the final physical time at which we want our simulation to stop. \item \inltt{NumSteps} is the equivalent of \inltt{FinTime} but instead of specifying the -physical final time we specify the number of time-steps; -\item \inltt{IO\_CheckSteps} sets the number of steps between successive checkpoint files; +physical final time we specify the number of time-steps. +\item \inltt{IO\_CheckSteps} sets the number of steps between successive checkpoint files. +No checkpoint file is written if it is set to 0. \item \inltt{IO\_InfoSteps} sets the number of steps between successive info stats are printed -to screen; -\item \inltt{Gamma} ratio of the specific heats. Default value = 1.4; -\item \inltt{pInf} farfield pressure (i.e. $p_{\infty}$). Default value = 101325 $Pa$; -\item \inltt{rhoInf} farfield density (i.e. $\rho_{\infty}$). Default value = 1.225 $Kg/m^{3}$; -\item \inltt{TInf} farfield temperature (i.e. $T_{\infty}$). Default value = 288.15 $K$; +to screen. +\item \inltt{Gamma} ratio of the specific heats. Default value = 1.4. +\item \inltt{pInf} farfield pressure (i.e. $p_{\infty}$). Default value = 101325 $Pa$. +\item \inltt{rhoInf} farfield density (i.e. $\rho_{\infty}$). Default value = 1.225 $Kg/m^{3}$. +\item \inltt{GasConstant} universal gas contant. Default value = 287.058 $JKg^{-1}K^{-1}$. +\item \inltt{TInf} farfield temperature (i.e. $T_{\infty}$). Default value = 288.15 $K$. \item \inltt{Twall} temperature at the wall when isothermal boundary -conditions are employed (i.e. $T_{w}$). Default value = 300.15$K$; -\item \inltt{uint} farfield $X$-component of the velocity (i.e. $u_{\infty}$). Default value = 0.1 $m/s$; -\item \inltt{vInf} farfield $Y$-component of the velocity (i.e. $v_{\infty}$). Default value = 0.0 $m/s$; -\item \inltt{wInf} farfield $Z$-component of the velocity (i.e. $w_{\infty}$). Default value = 0.0 $m/s$; -\item \inltt{mu} dynamic viscosity (i.e. $\mu_{\infty}$). Default value = 1.78e-05 $Pa s$; -\item \inltt{Pr} Prandtl number. Default value = 0.72; +conditions are employed (i.e. $T_{w}$). Default value = 300.15$K$. +\item \inltt{uInf} farfield $X$-component of the velocity (i.e. $u_{\infty}$). Default value = 0.1 $m/s$. +\item \inltt{vInf} farfield $Y$-component of the velocity (i.e. $v_{\infty}$). Default value = 0.0 $m/s$. +\item \inltt{wInf} farfield $Z$-component of the velocity (i.e. $w_{\infty}$). Default value = 0.0 $m/s$. +\item \inltt{mu} dynamic viscosity (i.e. $\mu_{\infty}$). Default value = 1.78e-05 $Pa s$. +\item \inltt{Pr} Prandtl number. Default value = 0.72. \item \inltt{thermalConductivity} thermal conductivity (i.e. $\kappa_{\infty}$). This can be set as an alternative to \inltt{Pr}, in which case the Prandtl number is calculated from $\kappa_{\infty}$ - (it is only possible to set one of them). By default, this is obtained from the Prandtl number; + (it is only possible to set one of them). By default, this is obtained from the Prandtl number. +\item \inltt{CFL} is the CFL number (explicit and implicit solvers). +\item \inltt{CFLGrowth} is the growing CFL (explicit and implicit solvers). +\item \inltt{CFLEnd} is the maximum value of the CFL number (explicit and implicit solvers). +\item \inltt{Timer\_IO\_Level} defines the amount of timer information that is printed after the solver is finished. + The default value is -1, which disables output. By selecting a value between 0 and 2, more detailed timer + information is printed. \end{itemize} \subsection*{Time Integration Scheme} @@ -242,92 +253,163 @@ information. \end{lstlisting} \begin{itemize} -\item \inltt{TimeIntegrationScheme} is the time-integration scheme we want to use. -Note that only an explicit discretisation is supported: -\begin{itemize} -\item \inltt{Method ForwardEuler, Order 1}; -\item \inltt{Method RungeKutta, Variant SSP, Order 2}; -\item \inltt{Method RungeKutta, Variant SSP, Order 3}; -\item \inltt{Method RungeKutta, Order 4}. -\end{itemize} +\item \inltt{TimeIntegrationScheme} is the time-integration scheme we want to use. +There are implicit and explicit schemes for the Compressible flow solver. +For an explicit discretization, the time-integration schemes supported are as follows +\begin{center} + \begin{tabular}{l|l|l|l} + \toprule + Name & & & \\ + \midrule + Forward Euler & ForwardEuler & - & 1 \\ + Runge Kutta 2 - SSP & RungeKutta & SSP & 2 \\ + Runge Kutta 3 - SSP & RungeKutta & SSP & 3 \\ + Runge Kutta 4 & ClassicalRungeKutta & - & 4 \\ + Runge Kutta 5 & RungeKutta & - & 5 \\ + \bottomrule + \end{tabular} +\end{center} +For an implicit discretization, the time-integration schemes available are +\begin{center} + \begin{tabular}{l|l|l|l} + \toprule + Name & & & \\ + \midrule + Backward Euler & BackwardEuler & - & 1 \\ + Backward Differentiation Formula Implicit & BDFImplicit & - & 1 \\ + Backward Differentiation Formula Implicit & BDFImplicit & - & 2 \\ + Singly Diagonally Implicit Runge Kutta & DIRK & - & 2 \\ + Singly Diagonally Implicit Runge Kutta & DIRK & - & 3 \\ + Singly Diagonally Implicit Runge Kutta & DIRK & ES5 & 3 \\ + Singly Diagonally Implicit Runge Kutta & DIRK & - & 4 \\ + Singly Diagonally Implicit Runge Kutta & DIRK & ES5 & 4 \\ + \bottomrule + \end{tabular} +\end{center} \end{itemize} \subsection*{Solver info} Under this section it is possible to set the solver information. \begin{lstlisting}[style=XmlStyle] - - - - - - - - + + + + + + + + + + \end{lstlisting} \begin{itemize} -\item \inltt{EQType} is the tag which specify the equations we want solve: -\begin{itemize} -\item \inltt{NavierStokesCFE} (Compressible Navier-Stokes equations); -\item \inltt{EulerCFE} (Compressible Euler equations). -\item \inltt{IsentropicVortex} (Isentropic vortex test case). -\item \inltt{RinglebFlow} (Ringleb flow test case). -\end{itemize} -\item \inltt{Projection} is the type of projection we want to use: -\begin{itemize} -\item \inltt{DisContinuous}.\\ -Note that the Continuous projection is not supported in the Compressible Flow Solver. -\end{itemize} -\item \inltt{AdvectionType} is the advection operator we want to use. -\begin{itemize} -\item \inltt{WeakDG} (classical DG in weak form); -\item \inltt{FRDG} (Flux-Reconstruction recovering nodal DG scheme); -\item \inltt{FRSD} (Flux-Reconstruction recovering a spectral difference (SD) scheme); -\item \inltt{FRHU} (Flux-Reconstruction recovering Huynh (G2) scheme); -\item \inltt{FRcmin} (Flux-Reconstruction with $c = c_{min}$); -\item \inltt{FRcinf} (Flux-Reconstruction with $c = \infty$). -\end{itemize} -Note that only \inltt{WeakDG} is fully supported, the other operators work only with quadrilateral elements ($2D$ or $2.5D$). -\item \inltt{DiffusionType} is the diffusion operator we want to use -for the Navier-Stokes equations: -\begin{itemize} -\item \inltt{LDGNS} (LDG with primitive variables. The penalty term is inversely proportional to the element size, proportional to the local viscosity for the momentum equations and to the thermal conductivity for the energy equation, and proportional to an optional parameter \inltt{LDGNSc11} which is by default set to one; proportionality to polynomial order can be manually imposed by setting the parameter \inltt{LDGNSc11} equal to $p^2$); -\item \inltt{LFRDGNS} (Flux-Reconstruction recovering nodal DG scheme); -\item \inltt{LFRSDNS} (Flux-Reconstruction recovering a spectral difference (SD) scheme); -\item \inltt{LFRHUNS} (Flux-Reconstruction recovering Huynh (G2) scheme); -\item \inltt{LFRcminNS} (Flux-Reconstruction with $c = c_{min}$); -\item \inltt{LFRcinfNS} (Flux-Reconstruction with $c = \infty$). -\end{itemize} -Note that only \inltt{LDGNS} is fully supported, the other operators work only with quadrilateral elements ($2D$ or $2.5D$). -\item \inltt{UpwindType} is the numerical interface flux (i.e. Riemann solver) -we want to use for the advection operator: -\begin{itemize} -\item \inltt{AUSM0}; -\item \inltt{AUSM1}; -\item \inltt{AUSM2}; -\item \inltt{AUSM3}; -\item \inltt{Average}; -\item \inltt{ExactToro}; -\item \inltt{HLL}; -\item \inltt{HLLC}; -\item \inltt{LaxFriedrichs}; -\item \inltt{Roe}. -\end{itemize} -\item \inltt{ViscosityType} is the viscosity type we want to use: -\begin{itemize} -\item \inltt{Constant} (Constant viscosity); -\item \inltt{Variable} (Variable viscosity through the Sutherland's law.); -\end{itemize} -\item \inltt{EquationOfState} allows selecting an equation of state for -accounting for non-ideal gas behaviour: -\begin{itemize} -\item \inltt{IdealGas} (default option); -\item \inltt{VanDerWaals} (requires additional parameters \inltt{Tcrit} and \inltt{Pcrit}); -\item \inltt{RedlichKwong} (requires additional parameters \inltt{Tcrit} and \inltt{Pcrit}); -\item \inltt{PengRobinson} (requires additional parameters \inltt{Tcrit}, \inltt{Pcrit} and -\inltt{AcentricFactor}); -\end{itemize} + \item \inltt{EQType} is the tag which specify the equations we want solve: + + Explicit discretization in time: + \begin{itemize} + \item \inltt{NavierStokesCFE} (Compressible Navier-Stokes equations). + \item \inltt{EulerCFE} (Compressible Euler equations). + \item \inltt{IsentropicVortex} (Isentropic vortex test case). + \item \inltt{RinglebFlow} (Ringleb flow test case). + \end{itemize} + + Implicit discretization in time: + \begin{itemize} + \item \inltt{NavierStokesImplicitCFE} (Compressible Navier-Stokes equations). + \item \inltt{EulerImplicitCFE} (Compressible Euler equations). + \end{itemize} + \item \inltt{Projection} is the type of projection we want to use: + \begin{itemize} + \item \inltt{DisContinuous}.\\ + Note that the Continuous projection is not supported in the Compressible Flow Solver. + \end{itemize} + \item \inltt{AdvectionType} is the advection operator we want to use. + \begin{itemize} + \item \inltt{WeakDG} (classical DG in weak form). + \item \inltt{FRDG} (Flux-Reconstruction recovering nodal DG scheme). + \item \inltt{FRSD} (Flux-Reconstruction recovering a spectral difference (SD) scheme). + \item \inltt{FRHU} (Flux-Reconstruction recovering Huynh (G2) scheme). + \item \inltt{FRcmin} (Flux-Reconstruction with $c = c_{min}$). + \item \inltt{FRcinf} (Flux-Reconstruction with $c = \infty$). + \end{itemize} + Note that only \inltt{WeakDG} is fully supported, the other operators work + only with quadrilateral elements ($2D$ or $2.5D$). + \item \inltt{DiffusionType} is the diffusion operator we want to use + for the Navier-Stokes equations: + \begin{itemize} + \item \inltt{LDGNS} (LDG with primitive variables. The penalty term is inversely + proportional to the element size, proportional to the local viscosity for the + momentum equations and to the thermal conductivity for the energy equation, + and proportional to an optional parameter \inltt{LDGNSc11} which is by default + set to one; proportionality to polynomial order can be manually imposed by setting + the parameter \inltt{LDGNSc11} equal to $p^2$). + \item \inltt{LFRDGNS} (Flux-Reconstruction recovering nodal DG scheme). + \item \inltt{LFRSDNS} (Flux-Reconstruction recovering a spectral difference (SD) scheme). + \item \inltt{LFRHUNS} (Flux-Reconstruction recovering Huynh (G2) scheme). + \item \inltt{LFRcminNS} (Flux-Reconstruction with $c = c_{min}$). + \item \inltt{LFRcinfNS} (Flux-Reconstruction with $c = \infty$). + \item \inltt{InteriorPenalty} (Symmetric interior penalty method). + \end{itemize} + Note that only \inltt{LDGNS} and \inltt{InteriorPenalty} are fully supported, the other operators work only + with quadrilateral elements ($2D$ or $2.5D$). + \item \inltt{UpwindType} is the numerical interface flux (i.e. Riemann solver) + we want to use for the advection operator: + \begin{itemize} + \item \inltt{AUSM0}. + \item \inltt{AUSM1}. + \item \inltt{AUSM2}. + \item \inltt{AUSM3}. + \item \inltt{Average}. + \item \inltt{ExactToro}. + \item \inltt{HLL}. + \item \inltt{HLLC}. + \item \inltt{LaxFriedrichs}. + \item \inltt{Roe}. + \end{itemize} + \item \inltt{ViscosityType} is the viscosity type we want to use: + \begin{itemize} + \item \inltt{Constant} (Constant viscosity). + \item \inltt{Variable} (Variable viscosity through the Sutherland's law). + \end{itemize} + \item \inltt{EquationOfState} allows selecting an equation of state for + accounting for non-ideal gas behaviour: + \begin{itemize} + \item \inltt{IdealGas} (default option). + \item \inltt{VanDerWaals} (requires additional parameters \inltt{Tcrit} and \inltt{Pcrit}). + \item \inltt{RedlichKwong} (requires additional parameters \inltt{Tcrit} and \inltt{Pcrit}). + \item \inltt{PengRobinson} (requires additional parameters \inltt{Tcrit}, \inltt{Pcrit} and + \inltt{AcentricFactor}). + \end{itemize} + \item \inltt{Driver} specifies the type of problem to be solved: + \begin{itemize} + \item \inltt{Standard} (default option to solve the unsteady equations). + \item \inltt{SteadyState} (uses the Selective Frequency Damping method + (see Sec. \ref{SectionSFD}) to obtain a steady-state solution of the + Navier-Stokes equations (explicit or implicit)). + \end{itemize} + \item \inltt{ShockCaptureType} specifies the type of operator to be used for shock capturing: + \begin{itemize} + \item \inltt{NonSmooth} add a Laplacian operator to apply artificial diffusion (see Sec.~\ref{subsec:non-smooth-AV}). + This option is only supported for explicit solvers (\inltt{EulerCFE} and \inltt{NavierStokesCFE}). + \item \inltt{Physical} add artificial viscosity to the physical viscosity. + This option is only supported for Navier-Stokes solvers (\inltt{NavierStokesCFE} and \inltt{NavierStokesImplicitCFE}). + \end{itemize} + \item \inltt{ShockSensorType} specifies the sensor type of shock capturing to be used: + \begin{itemize} + \item \inltt{Modal} (default) use a modal sensor to identify where to add viscosity (see Sec.~\ref{subsec:modal-sensor}). + \item \inltt{Dilatation} use a dilatation sensor to identify where to add viscosity. + \end{itemize} + \item \inltt{DucrosSensor} apply a Ducros \cite{ducros1999large} (anti-vorticity) filter to the shock sensor: + \begin{itemize} + \item \inltt{On} + \item \inltt{Off} + \end{itemize} + \item \inltt{Smoothing} apply a smoothing filter to the shock sensor: + \begin{itemize} + \item \inltt{C0} smooth the artificial viscosity to be a continuous field. + \end{itemize} \end{itemize} \subsection*{Boundary conditions} @@ -338,7 +420,7 @@ For a 1D problem we have: rho rhou - E + E \end{lstlisting} @@ -348,7 +430,7 @@ For a 2D problem we have rho rhou rhov - E + E \end{lstlisting} @@ -363,7 +445,7 @@ For a 3D problem we have: \end{lstlisting} -After having defined the variables depending on the dimensions of the problem we want to solve +After having defined the variables depending on the dimensions of the problem we want to solve, it is necessary to specify the boundary regions on which we want to define the boundary conditions: \begin{lstlisting}[style=XmlStyle] @@ -372,7 +454,8 @@ it is necessary to specify the boundary regions on which we want to define the b \end{lstlisting} Finally we can specify the boundary conditions on the regions specified under \inltt{BOUNDARYREGIONS}. -In the following some examples for a 2D problem: +Note that the no-slip, isothermal, wall boundary condition requires Twall to be specified. +In the following are some examples for a 2D problem: \begin{itemize} \item Slip wall boundary conditions: \begin{lstlisting}[style=XmlStyle] @@ -410,12 +493,12 @@ In the following some examples for a 2D problem: \end{lstlisting} -In some cases we need to excite perturbations indide the boundary layer. +In some cases we need to excite perturbations inside the boundary layer. This can be achieved by setting part of the wall as a disturbance strip. In the no-slip/adiabatic wall boundary conditions, if the \inltt{VALUE} is not exact "0" but any expression, which can be time-dependent, the value of the expression will be added to the ghost state of what it should be in the input -boundary conditions, and then generate a non-zero flus through the Riemann +boundary conditions, and then generate a non-zero flux through the Riemann solver. The following is an example to set a disturbance strip of amplitude $A$, frequency $f$, and in the range of $[x_0, x_0+len]$ on a flat plate. \begin{lstlisting}[style=XmlStyle] @@ -439,7 +522,7 @@ $A$, frequency $f$, and in the range of $[x_0, x_0+len]$ on a flat plate. + VALUE="pInf/(Gamma-1)+0.5*rhoInf*(uInf*uInf+vInf*vInf)"/> \end{lstlisting} @@ -455,18 +538,19 @@ $A$, frequency $f$, and in the range of $[x_0, x_0+len]$ on a flat plate. \end{lstlisting} -where pOut is the target static pressure at the boundary. +where \inltt{pOut} is the target static pressure at the boundary. \end{itemize} \subsection*{Initial conditions and exact solution} -Under the two following sections it is possible to define the initial conditions and the exact solution (if existent). +Under the two following sections it is possible to define the initial +conditions and the exact solution (if existent). \begin{lstlisting}[style=XmlStyle] + VALUE="pInf/(Gamma-1)+0.5*rhoInf*(uInf*uInf+vInf*vInf)"/> @@ -474,16 +558,22 @@ Under the two following sections it is possible to define the initial conditions + VALUE="pInf/(Gamma-1)+0.5*rhoInf*(uInf*uInf+vInf*vInf)"/> \end{lstlisting} \section{Examples} \subsection{Shock capturing} -Compressible flows can be characterised by abrupt changes in density within the flow domain often referred to as shocks. These discontinuities can lead to numerical instabilities (Gibbs phenomena). This problem is prevented by locally adding a diffusion term to the equations to damp the numerical oscillations. - -\subsubsection{Non-smooth artificial viscosity model} -For the non-smooth artificial viscosity model the added artificial viscosity is constant in each element and discontinuous between the elements. The Euler system is augmented by an added Laplacian term on right hand side of equation \ref{eq:euler} \cite{persson2006sub}. +Compressible flows can be characterised by abrupt changes in flow variables within the +flow domain often referred to as shocks. These discontinuities can lead to +numerical instabilities (Gibbs phenomena). This problem is prevented by locally +adding a diffusion term to the equations to damp the numerical oscillations. + +\subsubsection{Non-smooth artificial viscosity model}\label{subsec:non-smooth-AV} +For the non-smooth artificial viscosity model the added artificial viscosity is +constant in each element and discontinuous between the elements. The Euler +system is augmented by an added Laplacian term on right hand side of +equation \ref{eq:euler} \cite{persson2006sub}. The diffusivity of the system is controlled by a variable viscosity coefficient $\varepsilon$. For consistency $\varepsilon$ is proportional to the element size and inversely proportional to the polynomial order. Finally, from physical considerations $\varepsilon$ needs to be proportional to the maximum characteristic speed of the problem. @@ -493,6 +583,14 @@ The final form of the artificial viscosity is \end{equation} where $S$ is a sensor. +To enable the non-smooth viscosity model, the following line has to be added to the \inltt{SOLVERINFO} section: +\begin{lstlisting}[style=XmlStyle] + + + +\end{lstlisting} + +\subsubsection{Modal sensor}\label{subsec:modal-sensor} As shock sensor, a modal resolution-based indicator is used \begin{equation}\label{eq:sensor} s_e = log_{10}\left( \frac{\langle q - \tilde{q}, q - \tilde{q} \rangle}{\langle q, q \rangle} \right) , @@ -513,12 +611,13 @@ then the constant element-wise sensor is computed as follows \end{equation} where $s_0 = s_\kappa - 4.25\;log_{10}(p)$. -To enable the non-smooth viscosity model, the following line has to be added to the \inltt{SOLVERINFO} section: +The modal sensor is enabled by default and it can be explicilty set adding the following line to the \inltt{SOLVERINFO} section: \begin{lstlisting}[style=XmlStyle] - + \end{lstlisting} + The diffusivity and the sensor can be controlled by the following parameters: \begin{lstlisting}[style=XmlStyle] @@ -532,16 +631,26 @@ The diffusivity and the sensor can be controlled by the following parameters: \begin{center} \includegraphics[width = 0.47 \textwidth]{img/Mach_P4.pdf} \includegraphics[width = 0.47 \textwidth]{img/ArtVisc_P4.pdf} -\caption{(a) Steady state solution for $M=0.8$ flow at $\alpha = 1.25^\circ$ past a NACA 0012 profile, (b) Artificial viscosity ($\varepsilon$) distribution} +\caption{(a) Steady state solution for $M=0.8$ flow at $\alpha = 1.25^\circ$ +past a NACA 0012 profile, (b) Artificial viscosity ($\varepsilon$) distribution} \label{fig:} \end{center} \end{figure} \subsection{Variable polynomial order} A sensor based $p$-adaptive algorithm is implemented to optimise the computational cost and accuracy. -The DG scheme allows one to use different polynomial orders since the fluxes over the elements are determined using a Riemann solver and there is now further coupling between the elements. Furthermore, the initial $p$-adaptive algorithm uses the same sensor as the shock capturing algorithm to identify the smoothness of the local solution so it rather straightforward to implement both algorithms at the same time.\\ +The DG scheme allows one to use different polynomial orders since the coupling between different elements are determined by common numerical fluxes and there is no further +coupling between the elements. Furthermore, the initial $p$-adaptive algorithm +uses the same sensor as the shock capturing algorithm to identify the smoothness +of the local solution so it rather straightforward to implement both algorithms +at the same time.\\ \\ -The polynomial order in each element can be adjusted based on the sensor value that is obtained. Initially, a converged solution is obtained after which the sensor in each element is calculated. Based on the determined sensor value and the pre-defined sensor thresholds, it is decided to increase, decrease or maintain the degree of the polynomial approximation in each element and a new converged solution is obtained.\\ +The polynomial order in each element can be adjusted based on the sensor value +that is obtained. Initially, a converged solution is obtained after which the sensor +in each element is calculated. Based on the determined sensor value and the +pre-defined sensor thresholds, it is decided to increase, decrease or maintain +the degree of the polynomial approximation in each element and a new converged +solution is obtained.\\ \begin{equation}\label{eq:pswitch} p_e =\left \{ \begin{array}{l} p_e-1\ \ \ \mbox{if}\ \ s_e>s_{ds}\\ @@ -551,7 +660,11 @@ The polynomial order in each element can be adjusted based on the sensor value t \end{array} \right. \end{equation} -For now, the threshold values $s_e$, $s_{ds}$, $s_{sm}$ and $s_{fl}$ are determined empirically by looking at the sensor distribution in the domain. Once these values are set, two .txt files are outputted, one that has the composites called VariablePComposites.txt and one with the expansions called VariablePExpansions.txt. These values have to copied into a new .xml file to create the adapted mesh. +For now, the threshold values $s_e$, $s_{ds}$, $s_{sm}$ and $s_{fl}$ are determined +empirically by looking at the sensor distribution in the domain. Once these values +are set, two .txt files are outputted, one that has the composites called VariablePComposites.txt +and one with the expansions called VariablePExpansions.txt. These values have +to copied into a new .xml file to create the adapted mesh. \subsection{De-Aliasing Techniques} Aliasing effects, arising as a consequence of the nonlinearity of the underlying problem, need to be address to stabilise the simulations. Aliasing @@ -565,7 +678,9 @@ We consider two de-aliasing strategies based on the concept of consistent integr \begin{itemize} \item Local dealiasing: It only targets the PDE-aliasing sources, applying a consistent integration of them locally. -\item Global dealiasing: It targets both the PDE and the geometrical-aliasing sources. It requires a richer quadrature order to consistently integrate the nonlinear fluxes, the geometric factors, the mass matrix and the boundary term. +\item Global dealiasing: It targets both the PDE and the geometrical-aliasing sources. +It requires a richer quadrature order to consistently integrate the nonlinear fluxes, +the geometric factors, the mass matrix and the boundary term. \end{itemize} Since Nektar++ tackles separately the PDE and geometric aliasing during the @@ -601,3 +716,81 @@ points by: where \inltt{NUMMODES} corresponds to $P$+1, where $P$ is the order of the polynomial used to approximate the solution. \inltt{NUMPOINTS} specifies the number of quadrature points. + + +\subsection{Implicit solver} +In this example, we solve a compressible flow past a circular cylinder using an +implicit discontinuous Galerkin compressible flow solver as shown in figure~\ref{fig:fpcc}. +For the implicit time-integration schemes, \inltt{TimeStep} or \inltt{CFL} +can be adopted to control the time step. For the case of using \inltt{CFL}, the CFL number +can grow from \inltt{CFL} to \inltt{CFLEnd} by a ratio of \inltt{CFLGrowth} to adjust +the time step at different stages of the simulation. + +The CFL number, growing CFL number and the maximum value of the CFL number +are controlled by the following parameters as also described in section~\ref{sec:sessionFileComp} +\begin{lstlisting}[style=XmlStyle] + +

CFL = 0.1

+

CFLGrowth = 1.1

+

CFLEnd = 2.0

+
+\end{lstlisting} +In this case, the numerical simulation starts from a CFL number of 0.1 and grows +by a ratio of 1.1 up to a maximum value of CFL number of 2.0. Note that the +\inltt{CFLEnd} parameter may assume higher values, depending on the strategy +adopted. In addition, there is no need to define the \inltt{TimeStep} parameter, +since the time step size is calculated based on the CFL number in each time step. + +Since we are solving an implicit time-integration scheme, we must specify to +the solver information the \inltt{EQType} which corresponds to an implicit solver. +It should be noted that currently the CFS solver only supports +\inltt{NavierStokesImplicitCFE} and \inltt{EulerImplicitCFE}. +\begin{lstlisting}[style=XmlStyle] + + + + +\end{lstlisting} + +There are some other parameters controlling the performance of the implicit +solver. \inltt{NonlinIterTolRelativeL2} determines the convergence tolerance +of the nonlinear system solver relative to the initial nonlinear system residual. +\inltt{NekNonlinSysMaxIterations} is the maximum iteration number of the +nonlinear system solver. \inltt{LinSysRelativeTolInNonlin} determines the +convergence tolerance of linear system solver in each nonlinear iteration. +\inltt{NekLinSysMaxIterations} is the maximum iteration number of the linear +system solver in each nonlinear iteration. \inltt{LinSysMaxStorage} determines +the maximum number of variable vector allowed to store in the linear system +solver. Specifically for GMRES solver, the GMRES solver will be restarted if +\inltt{NekLinSysMaxIterations} is larger than \inltt{LinSysMaxStorage} and thus +\inltt{LinSysMaxStorage} determines the storage consumption of the GMRES solver. +Regarding the parameters to control the preconditioners in GMRES, +\inltt{PreconMatFreezNumb} specifies the number of time steps to freeze the +preconditioning matrices, in other words, the preconditioning matrices will be +updated based on the number of time steps provided by the user. \inltt{PreconItsStep} +determines the number of preconditioning iterations to calculate the +preconditioned vector. The default parameters are listed below. + +\begin{lstlisting}[style=XmlStyle] + +

NonlinIterTolRelativeL2 = 1E-3

+

NekNonlinSysMaxIterations = 10

+

LinSysRelativeTolInNonlin = 5.0E-2

+

NekLinSysMaxIterations = 30

+

LinSysMaxStorage = 30

+

PreconMatFreezNumb = 200

+

PreconItsStep = 7

+
+\end{lstlisting} + + +Here, we choose to solve the compressible Navier-Stokes equations and use the +2nd order Singly Diagonally Implicit Runge–Kutta (SDIRK) method. +\begin{figure}[!htbp] + \begin{center} + \centering + \includegraphics[scale=0.18,trim=0 0 0 0,clip]{img/CylinderSubsonic.jpeg} + \caption{Laminar flow past a circular cylinder at $Re=200$ and $M=0.2$.} + \label{fig:fpcc} + \end{center} +\end{figure} \ No newline at end of file diff --git a/docs/user-guide/solvers/img/CylinderSubsonic.jpeg b/docs/user-guide/solvers/img/CylinderSubsonic.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4f9989b2589fcb8aa09256643626c58123a82f90 GIT binary patch literal 997428 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

h$dgy{XoElwTgzai}e76hA2njoQ6Ju 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