Commit b1fb02f5 authored by Chris Cantwell's avatar Chris Cantwell
Browse files

Merge branch 'master' into feature/CompressedIO

parents 2e224639 90177b4f
Changelog
=========
v4.3.0
------
**Library:**
- Various fixes for 3D homogeneous post-processing (!531, !529, !528, !526, !521)
- Fix range with variable p option (!522)
- Fix bug with hexahedra of heterogeneous order (!520) and reading files (!522)
- Fix history point output formatting (!518)
- Fix for OS X 10.11 (!512)
- Fix `HexGeom::v_GetDir` to support heterogeneous basis functions (!520)
- Fix initialisation bug in ExpList2DH1D and ExpListHomogeneous2D (!528, !529)
- Fix bug in ExpList1D which may lead to invalid .vtu files (!531)
- Make `GetBoundaryToElmtMap` consistent for 3DH1D (!526)
**APESolver:**
- Fix restarting from checkpoint file (!517)
**FieldConvert:**
- Small fixes in interpolation routine (!515)
- Add support for surface extraction in 3DH1D case (!521)
- Add support for isocontour extraction for 3DH1D (!525)
- Add module to enable mean mode of 3DH1D to be extracted (!530)
- Fix bug in C^0 projection (!541))
- Add command line option to set number of homogeneous planes (!540)
**MeshConvert:**
- Enable face curvature inside core MeshConvert objects (!511)
- Add linearise processing module to remove all curvature from high order
elements (!509)
v4.2.0
------
**Library:**
- Add Runge-Kutta SSP schemes for 2nd/3rd order using keys `RungeKutta2_SSP` and
`RungeKutta3_SSP`. `ClassicalRungeKutta4` is now called `RungeKutta4`. (!481)
- Add rudimentary support for 3D CAD models using OpenCascade - work in progress
(!486)
- Allow filters to evaluate expressions in their parameter definitions (!489)
- Fix block preconditioner to work with periodic boundary conditions (!420)
- Dump a backtrace when crash occurs and Nektar++ is compiled in FullDebug mode
(!495)
- Stop the execution of a time-dependent solver if NaN is detected in the
solution field (!496)
- Fixes to improve robustness of interpolation routines (!499)
- Allow solvers to use multi-level static condensation with Xxt, most useful
when running a 3DH1D simulation (!502)
**IncNavierStokesSolver:**
- A range of fixes for the coupled stability solver, which now works in parallel
(!508)
**MeshConvert:**
- Add module to extract prismatic boundary layer elements from mixed prism-tet
mesh (!493).
**FieldConvert:**
- Add a processing module to calculate height of an element connected to a
surface, allowing for calculation of y plus values (!488)
- Fixes for equispaced output (!510)
v4.1.0
------
**Library:**
- Add support for interpolating point data from .pts files (!433)
- Fixes for curvilinear element normals (!443)
- Fix consistency issues between FFT and MVM approaches for homogeneous
expansions (!444)
- Fix a bug in Tecplot output (!445)
- Fix a bug with PETSc and MPI_Finalize (!456)
- Fix bugs with mesh partitioning (!449, !480)
- Fix a bug with non-symmetric SVV parameters for curvilinear elements (!451)
- Fix detection of Intel MKL 2013/2015 (453)
- Fix linearised stability solver in parallel (!454)
- Add a filter for 1D energy spectra (!457)
- Add an incomplete developer guide containing most information from the wiki
(!459)
- Change user defined boundary conditions to remove dependency on enumerator
inside SpatialDomains (!460)
- Add a new collections library for optimised evaluation of operators (!461)
- Change minimum version of boost to 1.52.
- Add initial multithreading support (!463)
- Fix third-party boost compilation on OS X (!467)
- Disable some regression tests on 32-bit systems (!468)
- Fix memory issues inside collections (!473)
- Fix collections autotuning (!476)
- Fix VtkToPng utility (!477)
- Add PulseWaveSolver to packaging (!478)
- Fix bug in iterative static condensation solver (!483)
- Fix zlib install path on OS X (!484)
- Fix documentation HTML styling for user and developer guide (!485)
- Add fixes to support native Nektar++ extension in VisIt visulisation software
(!490)
- Fix warnings on OS X (!491)
**CardiacEPSolver:**
- Fixes for stimuli (!442, !446), conductivity (!441), cell restarts (!458)
- Add a new filter for outputting cell states at specific points over time (!465)
**Linear elastic solver (new):**
- Add solver for linear elasticity equations (!400)
**IncNavierStokesSolver:**
- Add support for moving bodies (!344, !448)
- Fixes for modal energy filter (!427)
- Fix import of mesh file in the Adaptive SFD driver (!440) and other general
fixes (!452)
- Documentation for high order pressure and outflow boundary conditions (!447)
- Update examples to use correct forcing terms (!470)
- Fixes for half-mode stability (!471)
- Fix static initialisation problem in extrapolation classes (!492)
**CompressibleFlowSolver:**
- Add support for sponge region (!396)
- Add support for adiabiatic walls (!430)
- Add utility to generate boundary layer from similarity solution (!438)
**ShallowWaterSolver:**
- Added a DG solver for the Boussinesq equations of Peregrine (!431)
**APESolver:**
- Add support for variable speed of sound (!438)
**MeshConvert:**
- Fix Star file input for highly stretched elements (!455)
- Add Star input from binary format (!474)
- Tidy up files to align with FieldConvert (!479)
**FieldConvert:**
- Major re-organisation of modules, most post-processing utilities now available
within FieldConvert (!475)
v4.0.1
------
**Library:**
- Change hybrid parallelisation to use command line options (!368)
- Add support for multi-variable functions in expression evaluator: new
functions include rad and ang for polar coordinates (!375)
- Add more documentation (!376, !383)
- Various OS X (!377, !378, !382, !425), compiler warning (!432), documentation
(!434) Windows 7 (!391, !407), CMake (!392, !415), packaging (!435, !436) and
Intel compiler (!414, !416) fixes
- Refactor of CG and DG assembly maps (!380)
- Fixes for PETSc running in serial (!381, !420)
- Fixes for running Arnoldi solver in parallel (!384)
- Enable MPI tests on Cray machines such as ARCHER (!386)
- Fix issues with extracting face physical values (!393)
- Fix threshold filter (!395)
- HDG can now use block preconditioner (!397)
- Fix issue with singular vertices in parallel (!398)
- Timing executables now use `Timer` class from LibUtilities (!402)
- Fix manifold history points again (!410)
- Fix time output inside energy filter (!412)
- Fix GetExpIndex function (!417)
- Fixes to external project compilation (!419)
- Fixes from CPC paper review (!422)
- Fixes for scotch partitioner tests (!423)
- Fixes for ACML BLAS libraries (!424)
- Allow prepartitioned meshes to be used (!426)
- Enable variable names to be remapped inside files to different names in XML
functions (!428)
**APESolver:**
- Fixes for tests (!404)
- Add support for advection classes (!408)
**CardiacEPSolver:**
- Add benchmark (!411)
- Fix cardiac exmplaes (!418)
**CompressibleFlowSolver:**
- Add filter for kinetic energy/enstrophy calculation (!388)
**FieldConvert:**
- Support equi-spaced output for simplex elements to reduce storage (!421)
**IncNavierStokesSolver:**
- Unify advection classes with those in `SolverUtils` (!403, !408)
**MeshConvert:**
- Boundary layer refinement now supports hexahedra (!390)
- Improve support for Gmsh high order elements (!401)
- Many fixes for face-interior curvature (!401)
- Add rudimentary test suite (!401)
- New module for imposing curvature based on a scalar function (!401)
v4.0.0
------
**Library:**
- Update boost to 1.55 (!289)
- Fix parallel history points on manifold (!298)
- Add support for scotch partitioner (!311)
- Fixes for thirdparty builds (!319, !330, !353)
- Fix CMake >= 3.0.0 warnings (!320)
- Add support for PETSc library and tidy up global system classes (!322)
- Fixes for 1D Helmholtz solver (!326)
- Fixes for history points (!327) and solver output (!331)
- Fix issue with mesh IDs that do not start from zero (!354)
**CardiacEPSolver:**
- Simplify support for global conductiity (!295)
**FieldConvert:**
- Fixes for parallel operation and interpolation of points (!351)
**IncNavierStokesSolver:**
- Fixes for sponge layer (!272)
- Fix setting of initial conditions (!298)
v3.4.0
------
**Library:**
- New parallel output format. Parallel files are now stored in directories which
contain partition information. (!100, !102, !236, !242, !249, !256).
- gzip-compressed XML mesh files are now supported with extension .xml.gz (!116,
!140, !186).
- HDG solvers now run in parallel and have post-processing utilities (!188,
!230).
- Partitioning can be done only on root process if shared filesystem is
present with use of `--shared-filesystem` command line option (!220, !250).
- A variety of preconditioners are now supported, including linear space and
low-energy preconditioning (!148).
- Many changes to geometric factors storage and interpolation (!99, !197).
- Improvements to identification of invalid elements (!208, !227).
- Removed elemental storage to reduce memory consumption by 30-50% for large
problems (!240).
- Various performance and design improvements for discontinuous formulation (!134).
- Periodic boundary conditions are supported in 3D for both continuous and
discontinuous formulations (!139, !150, !152, !155, !196).
- Utilities added to mesh converter to help identify pairs of periodic faces
(!214).
- Preconditioner support for periodic boundary conditions (!231, !239).
- New radiation boundary condition type (!74).
- Some solvers (compressible flow solver, advection-diffusion-reaction solver)
now support dealiasing options (!78, !146, !167).
- BLAS and vectorisation performance improvements for static-condensed iterative
solver (!86, !109).
- New driver to improve steady state convergence and add parallel support (!91,
!235).
- Updated to METIS v5.1.0 (!97, !142, !189).
- Iterative solvers now use previous timestep (when available) to improve
convergence speed (!106).
- Added CPU timing for timestep loop (!156).
- Added provenance information (date, time, code version, git revision, etc) to
field file output (!179).
- Disabled long-running regression tests by default (!183).
- Support for command line arguments without parameters (!187).
- Added support for reading boundary conditions from files, and appropriate
utilities in MeshConvert to extract surfaces (!226).
- Updated XXt and Gs libraries to latest version (!232).
- Fix singularity check for Poisson equations (!74, !154).
- Fixes for 2D Gauss points (!73, !149, !157).
- Fixes to parallel I/O (!77, !218, !264).
- Fixes for parallel implementation (!93, !107, !121, !169, !217, !245, !246).
- Fixes for normal calculation (!94, !135).
- Improved compilation techniques, particularly when compiler includes MPI
automatically (!80, !82, !84, !85, !113, !114, !131, !141, !166, !210, !241).
- Updated zlib to v1.2.7 (!115).
- Fix for boost 1.5.3 compilation (!120).
- Most compiler warnings silenced with clang/gcc (!81, !92, !103, !123, !201,
!243).
- Attempts to improve mesh partitioning/load balancing (!160, !170, !175).
- Fixes for Newton iteration to interpolate inside deformed elements (!216,
!251).
- Fixed curved tetrahedron and hexahedron issue (!219, !248).
- Fixed reading of field files for tetrahedron (!228).
- Fixed uninitialised variable inside SessionrReader (!233).
- Various improvements to support use of Nektar++ externally (!111, !260, !261).
- Fixed base flow reading (!112).
**CardiacEPSolver:**
- Cardiac electrophysiology solver improvements (!87, !95, !96, !108, !119,
!165, !173, !174, !199, !222).
**CompressibleFlowSolver:**
- Compressible Navier-Stokes equations are now available for both DG and FR
discretisations (!110, !125, !128).
- Meshes with spatially varying p in both 2D and 3D are now supported (!158).
- Homogeneous Fourier extension is now supported (!180).
- Various fixes (!90, !98, !147, !172).
**DiffusionSolver (new):**
- Added small solver to demonstrate usage of higher library levels outside of
EquationSystem (!225).
**IncNavierStokesSolver:**
- Major refactoring of time-integration classes (!181, !184).
- Summary information now generated via callbacks (!182).
- Implemented new generic forcing function classes (!194).
- Current time now written out in field files (!198).
- Major refactoring of incompressible Navier-Stokes solver to improve
readability and performance (212, !213).
- Spectral vanishing viscosity for stabilisation (!101, !104, !211, !263).
- Added filter to compute aerodynamic forces on surfaces (!168, !203, !204).
- Added filter to compute kinetic energy and enstrophy (!207, !257).
**ShallowWaterSolver:**
- Various improvements/modernisations to shallow water solver (!190).
**Utilities:**
- VTK to PNG converter (!122)
- Added scalar gradient utility (!129, !252).
- Added utility to calculate Q-criterion field (!153).
- Added support to XmlToVtk to write Jacobian field (!223).
- Added utility to calculate wall shear stress (!224).
- Fixed vorticity calculator (!138).
**MeshConvert:**
- Added face-interior quadrature and 2D/3D manifold support to spherigon code
(!130).
- Fixes for boundary layer refinement and prism-to-tetrahedron splitting (!137,
!202, !206, !244).
**FieldConvert (new):**
- Added new FieldConvert utility which will eventually encompass most existing
utilities (!255).
......@@ -104,6 +104,7 @@ Specifically, FieldConvert has these additional functionalities
\item \inltt{interppoints}: Interpolates a set of points to another, requires fromfld and fromxml to be defined, a line or plane of points can be defined;
\item \inltt{isocontour}: Extract an isocontour of ``fieldid'' variable and at value ``fieldvalue''. Optionally ``fieldstr'' can be specified for a string defiition or ``smooth'' for smoothing;
\item \inltt{jacobianenergy}: Shows high frequency energy of Jacobian;
\item \inltt{meanmode}: Extract mean mode (plane zero) of 3DH1D expansions;
\item \inltt{printfldnorms}: Print L2 and LInf norms to stdout;
\item \inltt{scalargrad}: Computes scalar gradient field;
\item \inltt{scaleinputfld}: Rescale input field by a constant factor;
......@@ -444,6 +445,22 @@ to visualise it either in Tecplot or in Paraview the result.
%
%
\subsection{Extract mean mode of 3Dh1D expansion: \textit{meanmode} module}
To obtain a 2D expansion containing the mean mode (plane zero in Fourier space) of a
3DH1D field file, use the command:
\begin{lstlisting}[style=BashInputStyle]
FieldConvert -m meanmode file.xml file.fld file-mean.fld
\end{lstlisting}
The output file \inltt{file-mean.fld} can be processed in a similar
way as described in section \ref{s:utilities:fieldconvert:sub:convert}
to visualise it either in Tecplot or in Paraview.
%
%
%
\subsection{Print L2 and LInf norms: \textit{printfldnorms} module}
\begin{lstlisting}[style=BashInputStyle]
......
......@@ -350,14 +350,26 @@ namespace Nektar
// If this mesh (or partition) has no BCs, skip this step
if (MapSize > 0)
{
for(int i = 0; i < nplanes; i++)
int i ,j, n, cnt;
int cntPlane = 0;
for (cnt=n=0; n < m_bndCondExpansions.num_elements(); ++n)
{
for(int j = 0; j < MapSize; j++)
int planeExpSize = m_planes[0]
->GetBndCondExpansions()[n]
->GetExpSize();
for (i = 0; i < planeExpSize ; ++i, ++cntPlane)
{
ElmtID[j+i*MapSize] = ElmtID_tmp[j]+i*nel_per_plane;
EdgeID[j+i*MapSize] = EdgeID_tmp[j];
for(j = 0; j < nplanes; j++)
{
ElmtID[cnt+i+j*planeExpSize] =
ElmtID_tmp[cntPlane]+j*nel_per_plane;
EdgeID[cnt+i+j*planeExpSize] =
EdgeID_tmp[cntPlane];
}
}
cnt += m_bndCondExpansions[n]->GetExpSize();
}
m_BCtoElmMap = Array<OneD, int>(nplanes*MapSize);
m_BCtoEdgMap = Array<OneD, int>(nplanes*MapSize);
......
......@@ -1184,9 +1184,9 @@ namespace Nektar
int ntotminus = (nquad0-1);
Array<OneD,NekDouble> coords[3];
coords[0] = Array<OneD,NekDouble>(ntot);
coords[1] = Array<OneD,NekDouble>(ntot);
coords[2] = Array<OneD,NekDouble>(ntot);
coords[0] = Array<OneD,NekDouble>(ntot, 0.0);
coords[1] = Array<OneD,NekDouble>(ntot, 0.0);
coords[2] = Array<OneD,NekDouble>(ntot, 0.0);
(*m_exp)[expansion]->GetCoords(coords[0],coords[1],coords[2]);
outfile << " <Piece NumberOfPoints=\""
......
......@@ -97,6 +97,7 @@ IF( NEKTAR_SOLVER_INCNAVIERSTOKES )
ADD_NEKTAR_TEST(ChanFlow_3DH2D_FFT)
ADD_NEKTAR_TEST(CylFlow_MovBody)
ADD_NEKTAR_TEST(KovaFlow_3DH1D_MVM_FFTW_Consistency)
ADD_NEKTAR_TEST(KovaFlow_m8_short_HOBC_3D1H)
ENDIF (NEKTAR_USE_FFTW)
IF (NEKTAR_USE_MPI)
......
<
......@@ -473,7 +473,6 @@ namespace Nektar
m_session->LoadParameter("Delta_HighOrderBC",delta,1/20.0);
cnt = 0;
int count = 0;
for(int n = 0; n < m_PBndConds.num_elements(); ++n)
{
cnt_start = cnt;
......@@ -484,17 +483,9 @@ namespace Nektar
if (m_fields[0]->GetExpType() == MultiRegions::e3DH1D)
{
int cnt_exp = 0; int cnt_plane = 0;
int veloffset = 0;
for(int i = 0; i < m_PBndExp[n]->GetExpSize(); ++i, cnt_exp++)
for(int i = 0; i < m_PBndExp[n]->GetExpSize(); ++i, cnt++)
{
// count the expansion list in each plane for e3DH1D case
if(cnt_exp == m_expsize_per_plane[n])
{
cnt_exp = 0; cnt_plane++;
}
int cnt = cnt_plane * m_totexps_per_plane + cnt_exp + count;
// find element and edge of this expansion.
Bc = boost::dynamic_pointer_cast<StdRegions::StdExpansion>
(m_PBndExp[n]->GetExp(i));
......@@ -532,16 +523,10 @@ namespace Nektar
m_PhyoutfVel[j][0]);
}
cnt_plane = 0; cnt_exp = 0;
cnt = cnt_start;
veloffset = 0;
for(int i = 0; i < m_PBndExp[n]->GetExpSize(); ++i, cnt_exp++)
for(int i = 0; i < m_PBndExp[n]->GetExpSize(); ++i, cnt++)
{
// count the expansion list for each plane for e3DH1D
if(cnt_exp == m_expsize_per_plane[n])
{
cnt_exp = 0; cnt_plane++;
}
cnt = cnt_plane * m_totexps_per_plane + cnt_exp + count;
int elmtid = m_pressureBCtoElmtID[cnt];
elmt = m_fields[0]->GetExp(elmtid);
......@@ -622,21 +607,10 @@ namespace Nektar
}
}
cnt = cnt_start;
veloffset = 0;
int cnt_exp = 0; int cnt_plane = 0; //only useful in e3DH1D case
for(int i = 0; i < m_PBndExp[n]->GetExpSize(); ++i,cnt++)
{
if (m_fields[0]->GetExpType() == MultiRegions::e3DH1D)
{
// count the expansion list for e3DH1D
if(cnt_exp == m_expsize_per_plane[n])
{
cnt_exp = 0; cnt_plane++;
}
cnt = cnt_plane * m_totexps_per_plane + cnt_exp + count;
cnt_exp++;
}
// find element and edge of this expansion.
Bc = boost::dynamic_pointer_cast<StdRegions::StdExpansion>
(m_PBndExp[n]->GetExp(i));
......@@ -824,23 +798,9 @@ namespace Nektar
if(boost::iequals(UBndConds[j][n]->GetUserDefined(),"HOutflow"))
{
cnt = cnt_start;
int cnt_exp = 0; int cnt_plane = 0; //only useful in e3DH1D case
for(int i = 0; i < UBndExp[0][n]->GetExpSize();
++i, cnt++)
{
if(m_fields[0]->GetExpType() == MultiRegions::e3DH1D)
{
// count the expansion order for e3DH1D
if(cnt_exp == m_expsize_per_plane[n])
{
cnt_exp = 0; cnt_plane++;
}
cnt = cnt_plane * m_totexps_per_plane + cnt_exp + count;
cnt_exp++;
}
Pbc = StdRegions::StdExpansionSharedPtr
(m_PBndExp[n]->GetExp(i));
Bc = StdRegions::StdExpansionSharedPtr
......@@ -879,10 +839,6 @@ namespace Nektar
else
{
cnt += m_PBndExp[n]->GetExpSize();
if(m_fields[0]->GetExpType() == MultiRegions::e3DH1D)
{
count += m_expsize_per_plane[n];
}
}
}
}
......@@ -1194,7 +1150,7 @@ namespace Nektar
m_negWavenumberSq = Array<OneD, NekDouble>(HBCnumber);
int exp_size, exp_size_per_plane;
int j=0;
int i, j, k, n;
int K;
NekDouble sign = -1.0;
int cnt = 0;
......@@ -1232,31 +1188,19 @@ namespace Nektar
m_npointsZ = m_session->GetParameter("HomModesZ");
}
Array<OneD, int> coeff_count(m_PBndConds.num_elements(),0);
Array<OneD, int> coeffPlaneOffset(m_PBndConds.num_elements(),0);
cnt = 0;
for(int n = 0 ; n < m_PBndConds.num_elements(); ++n)
{
coeffPlaneOffset[n] = cnt;
if(boost::iequals(m_PBndConds[n]->GetUserDefined(),"H"))
{
cnt += m_PBndExp[n]->GetNcoeffs();
}
}
cnt = 0;
for(int k = 0; k < num_planes; k++)
int coeff_count = 0;
for(n = 0, j= 0, cnt = 0; n < m_PBndConds.num_elements(); ++n)
{
K = planes[k]/2;
for(int n = 0 ; n < m_PBndConds.num_elements(); ++n)
exp_size = m_PBndExp[n]->GetExpSize();
exp_size_per_plane = exp_size/num_planes;
if(boost::iequals(m_PBndConds[n]->GetUserDefined(),"H"))
{
exp_size = m_PBndExp[n]->GetExpSize();
exp_size_per_plane = exp_size/num_planes;
if(boost::iequals(m_PBndConds[n]->GetUserDefined(),"H"))
for(k = 0; k < num_planes; k++)
{
for(int i = 0; i < exp_size_per_plane; ++i,cnt++)
K = planes[k]/2;
for(i = 0; i < exp_size_per_plane; ++i, ++j, ++cnt)
{
m_HBCdata[j].m_globalElmtID = m_pressureBCtoElmtID[cnt];
elmt = m_pressure->GetExp(m_HBCdata[j].m_globalElmtID);
......@@ -1265,8 +1209,8 @@ namespace Nektar
m_HBCdata[j].m_bndElmtOffset = i+k*exp_size_per_plane;
m_HBCdata[j].m_elmtTraceID = m_pressureBCtoTraceID[cnt];
m_HBCdata[j].m_bndryElmtID = n;
m_HBCdata[j].m_coeffOffset = coeffPlaneOffset[n] + coeff_count[n];
coeff_count[n] += elmt->GetEdgeNcoeffs(m_HBCdata[j].m_elmtTraceID);
m_HBCdata[j].m_coeffOffset = coeff_count;
coeff_count += elmt->GetEdgeNcoeffs(m_HBCdata[j].m_elmtTraceID);
if(m_SingleMode)
{
......@@ -1283,15 +1227,15 @@ namespace Nektar
m_wavenumber[j] = 2*M_PI*sign*(NekDouble(K))/m_LhomZ;
m_negWavenumberSq[j] = -1.0*m_wavenumber[j]*m_wavenumber[j];
}
int assElmtID;
if(k%2==0)
{
if(m_HalfMode)
{
assElmtID = m_HBCdata[j].m_globalElmtID;
}
else
{
......@@ -1302,18 +1246,16 @@ namespace Nektar
{
assElmtID = m_HBCdata[j].m_globalElmtID - num_elm_per_plane;
}
m_HBCdata[j].m_assPhysOffset = m_pressure->GetPhys_Offset(assElmtID);
j = j+1;
}
sign = -1.0*sign;
}
else // setting if just standard BC no High order
{
cnt += exp_size_per_plane;
}
}
sign = -1.0*sign;
else