Commit Graph
89 Commits
Author SHA1 Message Date
camierjs f01991bf4d Fallback for Eval2D<3> 2020-01-23 23:15:07 -08:00
camierjs 53ea097637 Cleanup with static parameterization surfaces 2020-01-23 23:15:01 -08:00
camierjs 1d5d42ea35 ex1 with star-surf mesh with PA and on GPU 2019-06-11 13:50:58 -07:00
camierjs db6ac1970e Peach 1/4 && Cleanup 2019-06-09 21:23:11 -07:00
camierjs bcce24f6f1 ex24 with PA 2019-06-08 19:30:59 -07:00
camierjs 3e6d242b03 WIP non-square J for sdim=3 and dim=2 2019-06-07 16:00:19 -07:00
camierjs 283264ade4 {Read,Write,ReadWrite}Access => {Read,Write,ReadWrite}
Add shortcut for Host{Read,Write,ReadWrite}
2019-05-24 14:08:45 -07:00
Veselin Dobrev 798ded1f55 Merge branch 'master' into memory-dev 2019-05-22 23:53:04 -07:00
Tzanio 08f1bf7ab7 Updated CHANGELOG 2019-05-22 18:38:52 -07:00
Veselin Dobrev 504f01aa75 Merge branch 'master' into mesh-ext-additions
Moved implementation from fem/bilininteg_ext.cpp into
fem/bilininteg_diffusion.cpp and fem/bilininteg_mass.cpp

Update the layouts used in the shared memory kernels.
2019-05-22 17:31:04 -07:00
Veselin Dobrev cdbcc9e5e1 Integrate class DofToQuad with the FiniteElement class.
Rename class ElemRestriction to ElementRestriction and integrate
it with class FiniteElementSpace; it is accessible with the method
FiniteElementSpace::GetElementRestriction().

Rename class XTMesh to GeometricFactors and remove invJ from the
possible geometric factors.

Introduce class QuadratureInterpolator (created and owned by class
FiniteElementSpace) that interpolates E-vectors to quadrature points,
see FiniteElementSpace::GetQuadratureInterpolator().

Switch the layouts of the E-vectors and Q-vectors to have the
local (element) DOFs and quadrature points, respectively, as the
fastest changing index.
2019-05-22 07:19:44 -07:00
Veselin Dobrev 40378a046b Introduce a new Memory class for handling host + device allocations
and transfers.

The Memory class is now used by some MFEM classes (like Array and
Vector) which can be used on the Device. Such classes now provide
methods to access the underlying Memory object, e.g. GetMemory.

Updated ex1/ex1p and ex6/ex6p to not need to enable/disable the
Device at specific points -- the Device is now enabled just at the
start. Also, the same examples can now run on Device (e.g. -d cuda)
without the partial assembly option (-pa) -- full assembly will
be still done on CPU but the sparse matrix action and vector
operations will be done using the Device.

Reverted changes in class DenseMatrix related to using the Device.
At this point, DenseMatrix operations are only used for small matrices
and using the Device in this case is not a good option.
2019-05-16 14:53:39 -07:00
Tzanio 5b00c3d0e6 Merge branch 'master' into stefanozampini/small-improvements
Conflicts:
	fem/bilininteg.hpp
2019-05-15 11:38:18 -07:00
camierjs 2020335b50 Renaming + free functions in mfem namespace 2019-04-09 18:17:00 -07:00
Will Pazner a5ecb742a0 Revert to using new and delete
Also rename mm::malloc to mm::New and mm::free to mm::Delete.
2019-04-04 13:44:10 -07:00
Tzanio Kolev d9917cb13f Merge branch 'master' into okina 2019-03-29 09:33:16 -07:00
Will Pazner b6029a2b57 Allow for vdim > 1 in L2Projection 2019-03-20 13:22:57 -07:00
Will Pazner 1ea180f981 Fix bug in InterpolationGridTransfer when vdim > 1 2019-03-20 11:34:24 -07:00
Veselin Dobrev 5bcc1ad17e Update the interface for transfers between HO and LOR spaces using
a new abstract base class GridTransfer with derived classes:
InterpolationGridTransfer and L2ProjectionGridTransfer.
2019-03-19 19:01:14 -07:00
Stefano Zampini 0cc2429f20 FiniteElementSpace: prevent GetFE() from segfaulting 2019-03-14 21:17:40 +03:00
Tzanio fcbdbd6bcd Various small edits 2019-03-09 19:18:27 -08:00
Will Pazner be9310322e Add L2 projection and mass-conserving left-inverse 2019-03-06 13:51:54 -08:00
camierjs eb68f79ee2 MM sanitized 2019-02-28 12:47:09 -08:00
Veselin Dobrev 796423b03f Implement LOR-to-HO transfer operator, returned by the new method
FiniteElementSpace::GetReverseTransferOperator().
2019-02-15 17:51:25 -08:00
Tzanio Kolev da7b500db5 Merge pull request #693 from mfem/derefine-vector-spaces
Add support for derefinement of vector (RT + ND) spaces [derefine-vector-spaces]
2019-01-18 16:24:36 -08:00
Veselin Dobrev 9807f9dba6 Add support for derefinement of spaces using RT_FECollection. 2018-11-27 19:46:49 -08:00
Tzanio 4f25a377b4 Minor styling 2018-10-16 11:01:56 -07:00
Tzanio eb5dd736f7 Merge branch 'master' into periodic-nurbs-v2-dev 2018-10-16 10:40:50 -07:00
Ido Akkerman e79074c938 Add read/write periodic capability 2018-10-15 10:14:30 +02:00
Veselin Dobrev 0d6d850e09 Updates related to wedge/prism elements and mixed meshes.
List of changes and additions:

* In class Mesh:
  * Replaced the data fields BaseGeom, BaseBdrGeom, and BaseFaceGeom
    with a new data field: mesh_geoms that is a bitwise mask for all
    Geometry::Types found in the (local) Mesh including entities of
    lower dimensions.
  * The new data field mesh_geoms is set by the method SetMeshGen.
  * Removed the (protected) method InitBaseGeom.
  * Add new methods: HasGeometry, GetNumGeometries, and GetGeometries
    that can be used to query the content of mesh_geoms. Also, added
    class Mesh::GeometryList that can simplify such queries too.
  * The methods GetFaceBaseGeometry, GetElementBaseGeometry, and
    GetBdrElementBaseGeometry no longer have a default value for
    their input parameter (the entity index) and accept only values
    within their respective ranges.
  * Removed the parameter of the method GetRefinementTransforms.
  * Updated the methods PrepareNodeReorder and DoNodeReorder to
    support mixed meshes.
  * In parallel, the data field meshgen is now required to represent
    information about the global mesh - updated relevant ParMesh
    methods.
  * Made any required changes outside of class Mesh due to the above
    changes.
  * Made various tweaks and improvements in the following methods:
      CheckBdrElementOrientation, Mixed2DUniformRefinement,
      Mixed3DUniformRefinement, UniformRefinement, and
      GeneralRefinement.
  * Updated the method PrintCharacteristics to print the types of
    elements, boundary elements and faces used in the mesh.
  * In the method ReadInlineMesh, replace remaining "pri" strings
    with "wedge".
  * In the mesh reader method ReadGmshMesh, recover the term "prism"
    in the comments - it was replaced, unintentionally, I assume,
    by "wedge".

* Add support for refinement of curvilinear mixed meshes:
  * In class FiniteElementSpace, updated the methods:
    GetLocalRefinementMatrices, GetLocalDerefinementMatrices,
    RefinementMatrix, RefinementMatrix_main, as well as class
    RefinementOperator to support mixed meshes.
  * Add two new meshes: star-mixed-p2.mesh and fichera-mixed-p2.mesh
    which represent examples of quadratic mixed meshes in 2D and 3D,
    respectively.
  * Add sample runs in ex1/ex1p using the new quadratic mixed meshes.

* In class Geometry:
  * In the enumeration Type: removed the constant MIXED and added
    new constant: NUM_GEOMETRIES.
  * Add new static data field: DimStart[] that indexes the Types by
    dimension: the Types of dimension 'd' are given by the range
    [ DimStart[d], DimStart[d+1] ).

* In class ParNCMesh, added method GetGhostFaceGeometry that,
  for now, returns Geometry::SQUARE.

* Update the return type of the method DofOrderForOrientation in
  class FiniteElementCollection (and all derived classes) from
  'int *' to 'const int *'.

* Removed the virtual method Element::GetRefinementFlag and made
  the only relevant derived version (in class Tetrahedron),
  non-virtual.

* In class Tetrahedron, added method Init.

* Added FIXME comments for some outstanding issues.

* In the mesh-explorer miniapp:
  * Added option to enable or disable the 'refine' parameter when
    reading a mesh from file.
  * In the 'jitter' menu option, ask the user if the boundary
    nodes should be moved or not.
  * In the 'Print sub-element stats' menu option, count and print
    bad/inverted elements by their Geometry::Type as well.
2018-09-10 14:22:14 -07:00
Veselin Dobrev b4c143c40d A number of proposed tweaks for merging into prism-dev.
* Removed the fixed low-order finite element classes for wedges.
* Replace more cases of 'int' variables with 'Geometry::Type',
  mainly in class FiniteElement and its derived classes.
* Use constants from BasisType (instead of Quadrature1D) in the
  parameters of the *WedgeElement finite element classes.
* Impose ordering on the construction of some global objects by
  moving them into the same translation unit: specifically, moved
  the objects 'TriangleFE', 'TetrahedronFE', 'WedgeFE', and
  'Geometries' into fem/fe.cpp.
* In switchs on 'Geometry::Type', move the 'Geometry::PRISM' case
  last - just to follow the order in the enumeration.
* Add a new method CoarseFineTransformations::GetPointMatrices
  that simplifies some code that uses CoarseFineTransformations.
* Removed the 'INVALID' and 'MIXED' constants from the enum
  Element::Type.
* Remove the static method Element::GeometryType.
* Tweak some doxygen comments in the classes Embedding and
  CoarseFineTransformations.
* Generate an error if the method Wedge::GetNFaces is called:
  its parameter 'nFaceVertices' does not make sense for wedges.
2018-08-30 16:57:23 -07:00
Stowell, Mark L ecfc2b1360 make style 2018-07-20 19:34:26 -07:00
Stowell, Mark L 90968146bb Adding support for uniform refinement of mixed 2D meshes 2018-07-20 11:54:17 -07:00
Stowell, Mark L c3e023deed Merge remote-tracking branch 'origin/master' into prism-dev
# Conflicts:
#	fem/fespace.cpp
2018-07-19 19:51:39 -07:00
Stowell, Mark L b7952fb8ed A few small edits 2018-07-19 19:27:33 -07:00
camierjs 3010a0c492 [fem] GetLocalInterpolation(coarse to fine) to GetTransferMatrix 2018-03-15 17:44:54 -07:00
Veselin Dobrev ecf03c7b06 In class FiniteElementSpace, introduce a new virtual method:
GetTrueTransferOperator() which is similar to GetTransferOperator()
but it works with true-dof input and output vectors. Implemented the
new method both in serial and in parallel including support for
assembled transfer matrices (SparseMatrix in serial, HypreParMatrix
in parallel) as well as matrix-free transfer operators.

Add const qualifiers to the methods GetProlongationMatrix() and
GetRestrictionMatrix() in (Par)FiniteElementSpace.

Add const to the ParFiniteElementSpace constructor parameter in class
ConformingProlongationOperator.

Add a const version of ParFiniteElementSpace::GroupComm().
2018-03-03 18:38:05 -08:00
Veselin Dobrev 24ce200d08 Add a new method, GetTransferOperator, to class FiniteElementSpace that
creates an Operator for transferring GridFunction data from one FE space
on a coarse mesh to another FE space on a refined mesh. This method only
supports the case where both spaces use the same FiniteElement::MapType.
The method can create either a SparseMatrix or a "matrix-free" Operator
of class FiniteElementSpace::RefinementOperator.

This method also works in parallel because the transfer operator is
local to the MPI task when the input is a synchronized ParGridFunction.
2018-02-25 16:16:04 -08:00
Stowell, Mark L 0545862005 Replacing code that was overwritten by merge with master 2018-02-01 10:16:26 -08:00
Stowell, Mark L ef17fa07e9 Switching int to enum type 2018-02-01 09:27:29 -08:00
Veselin Dobrev cf0a0bff13 In (Par)FiniteElementSpace, store the update operators in an
OperatorHandle object. Specifying the type of the update operator
is now done by setting the type of the OperatorHandle.
2018-01-25 19:40:04 -08:00
Jakub Cerveny e7f3d25059 Merge branch 'master' into refine-operator-dev
Conflicts:
	CHANGELOG
	fem/fespace.hpp
	fem/pfespace.cpp
2018-01-25 18:50:49 +01:00
Tzanio 92c18e10b0 Merge branch 'master' into nonlin-form-dev
Conflicts:
  CHANGELOG
2018-01-25 08:19:24 -08:00
Jakub Cerveny 15a89de63d Merge branch 'master' into refine-operator-dev 2018-01-25 16:09:43 +01:00
Jakub Cerveny ed49511e90 Put back the full assembly option (RefinementMatrix). The choice
between the matrix and the operator is controlled by the method
FESpace::PreferActionOnlyUpdateOperator(bool).
2018-01-25 15:57:34 +01:00
Jakub Cerveny 7edfd962e2 Merge branch 'master' into pmatrix-dev 2018-01-19 16:14:47 +01:00
Jakub Cerveny da57f8778f Moved derefinement matrix thresholding to GetLocalDerefinementMatrices. 2018-01-19 15:51:16 +01:00
Veselin Dobrev 27b6f1e2a8 Merge branch 'master' into nonlin-form-dev 2018-01-17 22:53:53 -08:00
Tzanio Kolev a0af142efb Merge branch 'master' into varnurbs-dev 2018-01-16 08:49:04 -08:00
Tzanio Kolev bdbd4f104e Merge branch 'master' into refine-operator-dev 2018-01-11 10:10:15 -08:00