+++ /dev/null
-// RUN: %clang_cc1 -emit-llvm %s -o /dev/null
-// PR2917
-
-#include <complex>
-template < int Dim, class T, class EngineTag > class Engine;
-template < class Subject, class Sub1, bool SV > struct View1Implementation;
-template < class LayoutTag, class PatchTag > struct MultiPatch;
-template < class LayoutTag, class PatchTag, int Dim2 > struct MultiPatchView;
-template < class Engine, class SubDomain > struct NewEngine
-{
-};
-template < class T > class DomainTraits;
-template < class DomT, class T, int Dim > struct DomainTraitsDomain
-{
- typedef DomT NewDomain1_t;
-};
-template < int Dim > class Interval;
-template < int Dim > class Loc;
-template < class DT > class DomainBase
-{
-};
-
-template < int Dim, class DT > class Domain:public DomainBase < DT >
-{
-};
-template < int Dim > struct DomainTraits <Interval < Dim >
- >:public DomainTraitsDomain < Interval < Dim >, int, Dim >
-{
- enum
- {
- singleValued = false
- };
-};
-template < class T1 > struct NewDomain1
-{
- typedef typename DomainTraits < T1 >::NewDomain1_t SliceType_t;
-};
-template < class Domain, class Sub > struct TemporaryNewDomain1
-{
- typedef typename NewDomain1 < Sub >::SliceType_t SliceType_t;
-};
-template < int Dim > class Interval:public Domain < Dim,
- DomainTraits < Interval < Dim > > >
-{
-};
-template < int Dim > class GuardLayers
-{
-};
-template < class T > class Observer
-{
-};
-
-template < class T > class Observable
-{
-private:T & observed_m;
- int count_m;
-};
-
-class RefCounted
-{
-};
-template < class T > class RefCountedPtr
-{
-public:typedef RefCountedPtr < T > This_t;
- RefCountedPtr (T * const pT):ptr_m (pT)
- {
- }
- inline T *operator-> () const
- {
- }
- T *ptr_m;
-};
-
-template < class Dom, class T > class DomainMap
-{
-};
-
-template < class LayoutTag, int Dim > struct MultiPatchLayoutTraits
-{
-};
-template < int Dim > class LayoutBaseData
-{
-public:typedef Interval < Dim > Domain_t;
- Domain_t domain_m;
-};
-template < int Dim, class LBD > class LayoutBase
-{
-public:typedef LayoutBaseData < Dim > LayoutData_t;
- typedef typename LayoutData_t::Domain_t Domain_t;
- typedef GuardLayers < Dim > GuardLayers_t;
- inline const Domain_t & domain () const
- {
- return pdata_m->domain_m;
- }
- inline const Domain_t & innerDomain () const
- {
- }
- inline GuardLayers_t externalGuards () const
- {
- }
- RefCountedPtr < LBD > pdata_m;
-};
-template < class Tag > struct Remote;
-struct Brick
-{
-};
-template < class Thing, class Sub > struct View1
-{
-};
-template < int Dim, class T, class LayoutTag,
- class PatchTag > struct NewEngine <Engine < Dim, T, MultiPatch < LayoutTag,
- PatchTag > >, Interval < Dim > >
-{
- typedef Engine < Dim, T, MultiPatchView < LayoutTag, PatchTag,
- Dim > >Type_t;
-};
-template < int Dim, class T, class LayoutTag, class PatchTag,
- int Dim2 > struct NewEngine <Engine < Dim, T, MultiPatchView < LayoutTag,
- PatchTag, Dim2 > >, Interval < Dim > >
-{
- typedef Engine < Dim, T, MultiPatchView < LayoutTag, PatchTag,
- Dim2 > >Type_t;
-};
-template < int Dim, class T, class LayoutTag,
- class PatchTag > class Engine < Dim, T, MultiPatch < LayoutTag,
- PatchTag > >:public Observer < typename MultiPatchLayoutTraits < LayoutTag,
- Dim >::Layout_t >
-{
-public:typedef MultiPatch < LayoutTag, PatchTag > Tag_t;
- typedef Interval < Dim > Domain_t;
-};
-template < int Dim, class T, class LayoutTag, class PatchTag,
- int Dim2 > class Engine < Dim, T, MultiPatchView < LayoutTag, PatchTag,
- Dim2 > >
-{
-public:typedef MultiPatchView < LayoutTag, PatchTag, Dim2 > Tag_t;
- typedef Interval < Dim > Domain_t;
- typedef T Element_t;
- enum
- {
- dimensions = Dim
- };
-};
-class Full;
-template < int Dim, class T = double, class EngineTag = Full > class Vector {
-};
-
-template < int Dim > inline Interval < Dim >
-shrinkRight (const Interval < Dim > &dom, int s)
-{
-}
-
-template < int Dim > class GridLayout;
-struct GridTag
-{
-};
-template < int Dim > struct MultiPatchLayoutTraits <GridTag, Dim >
-{
- typedef GridLayout < Dim > Layout_t;
-};
-template < int Dim > class GridLayoutData:public LayoutBaseData < Dim >,
- public RefCounted, public Observable < GridLayoutData < Dim > >
-{
- typedef int AxisIndex_t;
- mutable DomainMap < Interval < 1 >, AxisIndex_t > mapAloc_m[Dim];
-};
-template < int Dim > class GridLayout:public LayoutBase < Dim,
- GridLayoutData < Dim > >, public Observable < GridLayout < Dim > >,
- public Observer < GridLayoutData < Dim > >
-{
-public:typedef GridLayout < Dim > This_t;
- GridLayout ();
-};
-template < class MeshTag, class T, class EngineTag > class Field;
-enum CenteringType
-{
- VertexType, EdgeType, FaceType, CellType
-};
-enum ContinuityType
-{
- Continuous = 0, Discontinuous
-};
-template < int Dim > class Centering
-{
-public:typedef Loc < Dim > Orientation;
- inline int size () const
- {
- }
-};
-template < int Dim > const Centering < Dim >
-canonicalCentering (const enum CenteringType type,
- const enum ContinuityType discontinuous,
- const int dimension = 0);
-template < class Mesh, class T, class EngineTag > class FieldEngine
-{
-public:enum
- {
- dimensions = Mesh::dimensions
- };
- enum
- {
- Dim = dimensions
- };
- typedef Engine < Dim, T, EngineTag > Engine_t;
- typedef typename Engine_t::Domain_t Domain_t;
- typedef GuardLayers < Dim > GuardLayers_t;
-template < class Layout2 > FieldEngine (const Centering < Dim > ¢ering, const Layout2 & layout, const Mesh & mesh, int materials = 1):num_materials_m (materials), centering_m (centering),
- stride_m (centering.size ()), physicalCellDomain_m (layout.domain ()),
- guards_m (layout.externalGuards ()), mesh_m (mesh)
- {
- }
- unsigned int num_materials_m;
- Centering < Dim > centering_m;
- int stride_m;
- Domain_t physicalCellDomain_m;
- GuardLayers_t guards_m;
- Mesh mesh_m;
-};
-
-template < class Subject > class SubFieldView;
-template < class Mesh, class T,
- class EngineTag > class SubFieldView < Field < Mesh, T, EngineTag > >
-{
-public:typedef Field < Mesh, T, EngineTag > Type_t;
-};
-
-template < int Dim, class Mesh, class Domain > struct NewMeshTag
-{
- typedef Mesh Type_t;
-};
-template < class Mesh, class T, class EngineTag,
- class Domain > struct View1Implementation <Field < Mesh, T, EngineTag >,
- Domain, false >
-{
- typedef Field < Mesh, T, EngineTag > Subject_t;
- typedef typename Subject_t::Engine_t Engine_t;
- typedef typename NewEngine < Engine_t, Domain >::Type_t NewEngine_t;
- typedef typename NewEngine_t::Element_t NewT_t;
- typedef typename NewEngine_t::Tag_t NewEngineTag_t;
- typedef typename NewMeshTag < NewEngine_t::dimensions, Mesh,
- Domain >::Type_t NewMeshTag_t;
- typedef Field < NewMeshTag_t, NewT_t, NewEngineTag_t > Type_t;
-};
-template < class Mesh, class T, class EngineTag,
- class Sub1 > struct View1 <Field < Mesh, T, EngineTag >, Sub1 >
-{
- typedef Field < Mesh, T, EngineTag > Subject_t;
- typedef typename Subject_t::Domain_t Domain_t;
- typedef TemporaryNewDomain1 < Domain_t, Sub1 > NewDomain_t;
- typedef typename NewDomain_t::SliceType_t SDomain_t;
- enum
- {
- sv = DomainTraits < SDomain_t >::singleValued
- };
- typedef View1Implementation < Subject_t, SDomain_t, sv > Dispatch_t;
- typedef typename Dispatch_t::Type_t Type_t;
-};
-template < class Mesh, class T = double, class EngineTag = Brick > class Field {
-public:typedef Mesh MeshTag_t;
- typedef Mesh Mesh_t;
- typedef Field < Mesh, T, EngineTag > This_t;
- typedef FieldEngine < Mesh, T, EngineTag > FieldEngine_t;
- enum
- {
- dimensions = FieldEngine_t::dimensions
- };
- typedef Engine < dimensions, T, EngineTag > Engine_t;
- typedef typename Engine_t::Domain_t Domain_t;
- typedef Centering < dimensions > Centering_t;
- template < class Layout2 > Field (const Centering_t & centering,
- const Layout2 & layout,
- const Mesh_t &
- mesh):fieldEngine_m (centering, layout,
- mesh)
- {
- }
- inline typename SubFieldView < This_t >::Type_t center (int c) const
- {
- }
- inline typename View1 < This_t, Domain_t >::Type_t all () const
- {
- }
- template < class T1 > const This_t & operator= (const T1 & rhs) const
- {
- }
-private: FieldEngine_t fieldEngine_m;
-};
-
-struct UniformRectilinearTag
-{
-};
-struct CartesianTag
-{
-};
-template < class MeshTraits > struct CartesianURM;
-template < class MeshTraits > class UniformRectilinearMeshData;
-template < class MeshTraits > class UniformRectilinearMesh;
-template < int Dim, typename T = double, class MeshTag =
- UniformRectilinearTag, class CoordinateSystemTag = CartesianTag, int CDim =
- Dim > struct MeshTraits;
-template < int Dim, typename T, class MeshTag, class CoordinateSystemTag,
- int CDim > struct MeshTraitsBase
-{
- typedef MeshTraits < Dim, T, MeshTag, CoordinateSystemTag,
- CDim > MeshTraits_t;
- enum
- {
- dimensions = Dim
- };
- typedef Vector < CDim, T > PointType_t;
-};
-template < int Dim, typename T, int CDim > struct MeshTraits <Dim, T,
- UniformRectilinearTag, CartesianTag, CDim >:public MeshTraitsBase < Dim, T,
- UniformRectilinearTag, CartesianTag, CDim >
-{
- typedef typename MeshTraitsBase < Dim, T, UniformRectilinearTag,
- CartesianTag, CDim >::MeshTraits_t MeshTraits_t;
- typedef CartesianURM < MeshTraits_t > CoordinateSystem_t;
- typedef UniformRectilinearMeshData < MeshTraits_t > MeshData_t;
- typedef UniformRectilinearMesh < MeshTraits_t > Mesh_t;
- typedef Vector < CDim, T > SpacingsType_t;
-};
-template < int Dim > class NoMeshData:public RefCounted
-{
-public:NoMeshData ()
- {
- }
- template < class Layout >
- explicit NoMeshData (const Layout &
- layout):physicalVertexDomain_m (layout.
- innerDomain ()),
- physicalCellDomain_m (shrinkRight (physicalVertexDomain_m, 1)),
- totalVertexDomain_m (layout.domain ()),
- totalCellDomain_m (shrinkRight (totalVertexDomain_m, 1))
- {
- }
-private:Interval < Dim > physicalVertexDomain_m, physicalCellDomain_m;
- Interval < Dim > totalVertexDomain_m, totalCellDomain_m;
-};
-
-template < class MeshTraits > class UniformRectilinearMeshData:public NoMeshData <
- MeshTraits::
- dimensions >
-{
-public:typedef typename
- MeshTraits::MeshData_t
- MeshData_t;
- typedef typename
- MeshTraits::PointType_t
- PointType_t;
- typedef typename
- MeshTraits::SpacingsType_t
- SpacingsType_t;
- enum
- {
- dimensions = MeshTraits::dimensions
- };
- template < class Layout > UniformRectilinearMeshData (const Layout & layout,
- const PointType_t &
- origin,
- const SpacingsType_t &
- spacings):
- NoMeshData <
- dimensions > (layout),
- origin_m (origin),
- spacings_m (spacings)
- {
- }
-private:PointType_t origin_m;
- SpacingsType_t
- spacings_m;
-};
-
-template < class MeshTraits > class UniformRectilinearMesh:public MeshTraits::
- CoordinateSystem_t
-{
-public:typedef MeshTraits
- MeshTraits_t;
- typedef typename
- MeshTraits::MeshData_t
- MeshData_t;
- typedef typename
- MeshTraits::PointType_t
- PointType_t;
- typedef typename
- MeshTraits::SpacingsType_t
- SpacingsType_t;
- enum
- {
- dimensions = MeshTraits::dimensions
- };
- template < class Layout >
- inline UniformRectilinearMesh (const Layout & layout,
- const PointType_t & origin,
- const SpacingsType_t & spacings):
- data_m (new MeshData_t (layout, origin, spacings))
- {
- }
-private:RefCountedPtr < MeshData_t > data_m;
-};
-
-template < class MeshTraits > struct GenericURM
-{
-};
-template < class MeshTraits > struct CartesianURM:
- public
- GenericURM <
- MeshTraits >
-{
-};
-template < int
- dim,
- class
- MeshTag = UniformRectilinearTag, class CoordinateSystemTag = CartesianTag > struct ParallelTraits {
- enum
- {
- Dim = dim
- };
- typedef
- GridLayout <
- dim >
- Layout_t;
- typedef
- MeshTraits <
- dim, double,
- MeshTag,
- CoordinateSystemTag >
- MeshTraits_t;
- typedef typename
- MeshTraits_t::Mesh_t
- Mesh_t;
- typedef
- MultiPatch <
- GridTag,
- Remote <
- Brick > >
- Engine_t;
-};
-template < class ComputeTraits > struct RhalkTraits:
- public
- ComputeTraits
-{
- typedef typename
- ComputeTraits::Mesh_t
- Mesh_t;
- typedef typename
- ComputeTraits::Engine_t
- Engine_t;
- enum
- {
- Dim = ComputeTraits::Dim
- };
- typedef
- Centering <
- Dim >
- Centering_t;
- typedef typename
- Mesh_t::SpacingsType_t
- Spacings_t;
- typedef
- Field <
- Mesh_t, double,
- Engine_t >
- Scalar_t;
-};
-enum
-{
- Dim = 3
-};
-typedef
- RhalkTraits <
- ParallelTraits <
- Dim,
- UniformRectilinearTag,
-CartesianTag > >
- Traits_t;
-Vector < Dim > origin;
-Traits_t::Spacings_t spacings;
-int
-main (int argc, char **argv)
-{
- Traits_t::Layout_t layout;
- Traits_t::Mesh_t mesh (layout, origin, spacings);
- Traits_t::Centering_t face =
- canonicalCentering < Traits_t::Dim > (FaceType, Continuous);
- Traits_t::Scalar_t v (face, layout, mesh);
- for (int i = 0; i < Dim; ++i)
- v.center (i).all () = std::numeric_limits < double >::signaling_NaN ();
-}