oomph::WarpedCircularDisk Class Reference

#include <geom_obj_with_boundary.h>

+ Inheritance diagram for oomph::WarpedCircularDisk:

Public Member Functions

 WarpedCircularDisk (const double &epsilon, const unsigned &n, const double &z_offset=0.0)
 
 WarpedCircularDisk ()
 Empty default constructor. More...
 
 WarpedCircularDisk (const WarpedCircularDisk &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const WarpedCircularDisk &)=delete
 Broken assignment operator. More...
 
virtual ~WarpedCircularDisk ()
 Destructor. More...
 
doubleepsilon ()
 Access fct to amplitude of disk warping. More...
 
void position (const Vector< double > &zeta, Vector< double > &r) const
 Position Vector at Lagrangian coordinate zeta. More...
 
void position (const unsigned &t, const Vector< double > &zeta, Vector< double > &r) const
 
void boundary_triad (const unsigned &b, const double &zeta_bound, Vector< double > &r, Vector< double > &tangent, Vector< double > &normal, Vector< double > &binormal)
 Boundary triad on boundary b at boundary coordinate zeta_bound. More...
 
- Public Member Functions inherited from oomph::DiskLikeGeomObjectWithBoundaries
 DiskLikeGeomObjectWithBoundaries ()
 Constructor. More...
 
unsigned nboundary () const
 How many boundaries do we have? More...
 
void position_on_boundary (const unsigned &b, const double &zeta_bound, Vector< double > &r) const
 
void zeta_on_boundary (const unsigned &b, const double &zeta_bound, Vector< double > &zeta) const
 
GeomObjectboundary_parametrising_geom_object_pt (const unsigned &b) const
 
double zeta_boundary_start (const unsigned &b) const
 
double zeta_boundary_end (const unsigned &b) const
 
void output_boundaries (const unsigned &nplot, std::ofstream &two_d_boundaries_file, std::ofstream &three_d_boundaries_file)
 
void output_boundaries_and_triads (const unsigned &nplot, std::ofstream &two_d_boundaries_file, std::ofstream &three_d_boundaries_file, std::ofstream &boundaries_tangent_file, std::ofstream &boundaries_normal_file, std::ofstream &boundaries_binormal_file)
 
void add_region_coordinates (const unsigned &r, Vector< double > &zeta_in_region)
 
std::map< unsigned, Vector< double > > zeta_in_region () const
 Return map that stores zeta coordinates of points that identify regions. More...
 
- Public Member Functions inherited from oomph::GeomObject
 GeomObject ()
 Default constructor. More...
 
 GeomObject (const unsigned &ndim)
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim)
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim, TimeStepper *time_stepper_pt)
 
 GeomObject (const GeomObject &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const GeomObject &)=delete
 Broken assignment operator. More...
 
virtual ~GeomObject ()
 (Empty) destructor More...
 
unsigned nlagrangian () const
 Access function to # of Lagrangian coordinates. More...
 
unsigned ndim () const
 Access function to # of Eulerian coordinates. More...
 
void set_nlagrangian_and_ndim (const unsigned &n_lagrangian, const unsigned &n_dim)
 Set # of Lagrangian and Eulerian coordinates. More...
 
TimeStepper *& time_stepper_pt ()
 
TimeSteppertime_stepper_pt () const
 
virtual unsigned ngeom_data () const
 
virtual Datageom_data_pt (const unsigned &j)
 
virtual void position (const double &t, const Vector< double > &zeta, Vector< double > &r) const
 
virtual void dposition_dt (const Vector< double > &zeta, const unsigned &j, Vector< double > &drdt)
 
virtual void dposition (const Vector< double > &zeta, DenseMatrix< double > &drdzeta) const
 
virtual void d2position (const Vector< double > &zeta, RankThreeTensor< double > &ddrdzeta) const
 
virtual void d2position (const Vector< double > &zeta, Vector< double > &r, DenseMatrix< double > &drdzeta, RankThreeTensor< double > &ddrdzeta) const
 
virtual void locate_zeta (const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
 
virtual void interpolated_zeta (const Vector< double > &s, Vector< double > &zeta) const
 

Private Member Functions

double w (const double &r, const double &phi) const
 Vertical deflection. More...
 
double dwdr (const double &r, const double &phi) const
 Deriv of vertical deflection w.r.t. radius. More...
 
double dwdphi (const double &r, const double &phi) const
 Deriv of vertical deflection w.r.t. angle. More...
 

Private Attributes

double Epsilon
 Amplitude of non-axisymmetric deformation. More...
 
unsigned N
 Wavenumber of non-axisymmetric deformation. More...
 
double Z_offset
 Vertical offset. More...
 

Additional Inherited Members

- Protected Attributes inherited from oomph::DiskLikeGeomObjectWithBoundaries
Vector< doubleZeta_boundary_start
 
Vector< doubleZeta_boundary_end
 
Vector< GeomObject * > Boundary_parametrising_geom_object_pt
 
std::map< unsigned, Vector< double > > Zeta_in_region
 Map to store zeta coordinates of points that identify regions. More...
 
- Protected Attributes inherited from oomph::GeomObject
unsigned NLagrangian
 Number of Lagrangian (intrinsic) coordinates. More...
 
unsigned Ndim
 Number of Eulerian coordinates. More...
 
TimeStepperGeom_object_time_stepper_pt
 

Detailed Description

////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// Warped disk in 3d: zeta[0]=x; zeta[1]=y (so it doesn't have coordinate singularities), with specification of two boundaries (b=0,1) that turn the whole thing into a circular disk.

Constructor & Destructor Documentation

◆ WarpedCircularDisk() [1/3]

oomph::WarpedCircularDisk::WarpedCircularDisk ( const double epsilon,
const unsigned n,
const double z_offset = 0.0 
)
inline

Constructor. Pass amplitude and azimuthal wavenumber of warping as arguments. Can specify vertical offset as final, optional argument.

350  : Epsilon(epsilon), N(n), Z_offset(z_offset)
351  {
352  // How many boundaries do we have?
353  unsigned nb = 2;
355  Zeta_boundary_start.resize(nb, 0.0);
356  Zeta_boundary_end.resize(nb, 0.0);
357 
358  // GeomObject<1,2> representing the first boundary
359  Boundary_parametrising_geom_object_pt[0] = new Ellipse(1.0, 1.0);
360  Zeta_boundary_start[0] = 0.0;
362 
363  // GeomObject<1,2> representing the second boundary
364  Boundary_parametrising_geom_object_pt[1] = new Ellipse(1.0, 1.0);
367  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Vector< double > Zeta_boundary_start
Definition: geom_obj_with_boundary.h:315
Vector< GeomObject * > Boundary_parametrising_geom_object_pt
Definition: geom_obj_with_boundary.h:324
Vector< double > Zeta_boundary_end
Definition: geom_obj_with_boundary.h:319
double Epsilon
Amplitude of non-axisymmetric deformation.
Definition: geom_obj_with_boundary.h:487
double & epsilon()
Access fct to amplitude of disk warping.
Definition: geom_obj_with_boundary.h:396
double Z_offset
Vertical offset.
Definition: geom_obj_with_boundary.h:493
unsigned N
Wavenumber of non-axisymmetric deformation.
Definition: geom_obj_with_boundary.h:490
int nb
Definition: level2_impl.h:286
const double Pi
50 digits from maple
Definition: oomph_utilities.h:157

References oomph::DiskLikeGeomObjectWithBoundaries::Boundary_parametrising_geom_object_pt, nb, oomph::MathematicalConstants::Pi, oomph::DiskLikeGeomObjectWithBoundaries::Zeta_boundary_end, and oomph::DiskLikeGeomObjectWithBoundaries::Zeta_boundary_start.

◆ WarpedCircularDisk() [2/3]

oomph::WarpedCircularDisk::WarpedCircularDisk ( )
inline

Empty default constructor.

371  {
372  throw OomphLibError("Don't call default constructor!",
375  }
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ WarpedCircularDisk() [3/3]

oomph::WarpedCircularDisk::WarpedCircularDisk ( const WarpedCircularDisk dummy)
delete

Broken copy constructor.

◆ ~WarpedCircularDisk()

virtual oomph::WarpedCircularDisk::~WarpedCircularDisk ( )
inlinevirtual

Destructor.

386  {
387  unsigned n = nboundary();
388  for (unsigned b = 0; b < n; b++)
389  {
392  }
393  }
Scalar * b
Definition: benchVecAdd.cpp:17
unsigned nboundary() const
How many boundaries do we have?
Definition: geom_obj_with_boundary.h:73

References b, oomph::DiskLikeGeomObjectWithBoundaries::Boundary_parametrising_geom_object_pt, n, and oomph::DiskLikeGeomObjectWithBoundaries::nboundary().

Member Function Documentation

◆ boundary_triad()

void oomph::WarpedCircularDisk::boundary_triad ( const unsigned b,
const double zeta_bound,
Vector< double > &  r,
Vector< double > &  tangent,
Vector< double > &  normal,
Vector< double > &  binormal 
)
inlinevirtual

Boundary triad on boundary b at boundary coordinate zeta_bound.

Reimplemented from oomph::DiskLikeGeomObjectWithBoundaries.

431  {
432  double phi = zeta_bound;
433 
434  // Position Vector
435  r[0] = cos(phi);
436  r[1] = sin(phi);
437  r[2] = Z_offset + w(1.0, phi);
438 
439  Vector<double> dr_dr(3);
440  dr_dr[0] = cos(phi);
441  dr_dr[1] = sin(phi);
442  dr_dr[2] = dwdr(1.0, phi);
443  double inv_norm = 1.0 / sqrt(dr_dr[0] * dr_dr[0] + dr_dr[1] * dr_dr[1] +
444  dr_dr[2] * dr_dr[2]);
445 
446  normal[0] = dr_dr[0] * inv_norm;
447  normal[1] = dr_dr[1] * inv_norm;
448  normal[2] = dr_dr[2] * inv_norm;
449 
450  Vector<double> dr_dphi(3);
451  dr_dphi[0] = -sin(phi);
452  dr_dphi[1] = cos(phi);
453  dr_dphi[2] = dwdphi(1.0, phi);
454 
455  inv_norm = 1.0 / sqrt(dr_dphi[0] * dr_dphi[0] + dr_dphi[1] * dr_dphi[1] +
456  dr_dphi[2] * dr_dphi[2]);
457 
458  tangent[0] = dr_dphi[0] * inv_norm;
459  tangent[1] = dr_dphi[1] * inv_norm;
460  tangent[2] = dr_dphi[2] * inv_norm;
461 
462  binormal[0] = tangent[1] * normal[2] - tangent[2] * normal[1];
463  binormal[1] = tangent[2] * normal[0] - tangent[0] * normal[2];
464  binormal[2] = tangent[0] * normal[1] - tangent[1] * normal[0];
465  }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
double dwdphi(const double &r, const double &phi) const
Deriv of vertical deflection w.r.t. angle.
Definition: geom_obj_with_boundary.h:481
double w(const double &r, const double &phi) const
Vertical deflection.
Definition: geom_obj_with_boundary.h:469
double dwdr(const double &r, const double &phi) const
Deriv of vertical deflection w.r.t. radius.
Definition: geom_obj_with_boundary.h:475
r
Definition: UniformPSDSelfTest.py:20
void normal(const Vector< double > &x, Vector< double > &normal)
Definition: free_surface_rotation.cc:65

References cos(), dwdphi(), dwdr(), WallFunction::normal(), UniformPSDSelfTest::r, sin(), sqrt(), w(), and Z_offset.

◆ dwdphi()

double oomph::WarpedCircularDisk::dwdphi ( const double r,
const double phi 
) const
inlineprivate

Deriv of vertical deflection w.r.t. angle.

482  {
483  return -Epsilon * double(N) * sin(double(N) * phi) * pow(r, 2);
484  }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625

References Epsilon, N, Eigen::bfloat16_impl::pow(), UniformPSDSelfTest::r, and sin().

Referenced by boundary_triad().

◆ dwdr()

double oomph::WarpedCircularDisk::dwdr ( const double r,
const double phi 
) const
inlineprivate

Deriv of vertical deflection w.r.t. radius.

476  {
477  return Epsilon * cos(double(N) * phi) * 2.0 * r;
478  }

References cos(), Epsilon, N, and UniformPSDSelfTest::r.

Referenced by boundary_triad().

◆ epsilon()

double& oomph::WarpedCircularDisk::epsilon ( )
inline

Access fct to amplitude of disk warping.

397  {
398  return Epsilon;
399  }

References Epsilon.

◆ operator=()

void oomph::WarpedCircularDisk::operator= ( const WarpedCircularDisk )
delete

Broken assignment operator.

◆ position() [1/2]

void oomph::WarpedCircularDisk::position ( const unsigned t,
const Vector< double > &  zeta,
Vector< double > &  r 
) const
inlinevirtual

Parametrised position on object: r(zeta). Evaluated at previous timestep. t=0: current time; t>0: previous timestep. Object is steady so calls time-independent version

Reimplemented from oomph::GeomObject.

419  {
420  position(zeta, r);
421  }
void position(const Vector< double > &zeta, Vector< double > &r) const
Position Vector at Lagrangian coordinate zeta.
Definition: geom_obj_with_boundary.h:402
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152

References position(), UniformPSDSelfTest::r, and Eigen::zeta().

◆ position() [2/2]

void oomph::WarpedCircularDisk::position ( const Vector< double > &  zeta,
Vector< double > &  r 
) const
inlinevirtual

Position Vector at Lagrangian coordinate zeta.

Implements oomph::GeomObject.

403  {
404  // Position Vector
405  r[0] = zeta[0];
406  r[1] = zeta[1];
407  double radius = sqrt(r[0] * r[0] + r[1] * r[1]);
408  double phi = atan2(r[1], r[0]);
409  r[2] = Z_offset + w(radius, phi);
410  }
AnnoyingScalar atan2(const AnnoyingScalar &y, const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:139
radius
Definition: UniformPSDSelfTest.py:15

References atan2(), UniformPSDSelfTest::r, UniformPSDSelfTest::radius, sqrt(), w(), Z_offset, and Eigen::zeta().

Referenced by main(), and position().

◆ w()

double oomph::WarpedCircularDisk::w ( const double r,
const double phi 
) const
inlineprivate

Vertical deflection.

470  {
471  return Epsilon * cos(double(N) * phi) * pow(r, 2);
472  }

References cos(), Epsilon, N, Eigen::bfloat16_impl::pow(), and UniformPSDSelfTest::r.

Referenced by boundary_triad(), and position().

Member Data Documentation

◆ Epsilon

double oomph::WarpedCircularDisk::Epsilon
private

Amplitude of non-axisymmetric deformation.

Referenced by dwdphi(), dwdr(), epsilon(), and w().

◆ N

unsigned oomph::WarpedCircularDisk::N
private

Wavenumber of non-axisymmetric deformation.

Referenced by dwdphi(), dwdr(), and w().

◆ Z_offset

double oomph::WarpedCircularDisk::Z_offset
private

Vertical offset.

Referenced by boundary_triad(), and position().


The documentation for this class was generated from the following file: