Advanced Multi-Physics (AMP)
On-Line Documentation
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Types | Private Attributes | List of all members
AMP::Operator::PowerShape Class Referenceabstract

Provides the specific power distribution by node for a given mesh. More...

#include <PowerShape.h>

Inheritance diagram for AMP::Operator::PowerShape:
Inheritance graph
[legend]

Public Types

typedef std::shared_ptr< AMP::Operator::Operatorshared_ptr
 

Public Member Functions

void apply (AMP::LinearAlgebra::Vector::const_shared_ptr u, AMP::LinearAlgebra::Vector::shared_ptr f) override
 
virtual void apply (std::shared_ptr< const AMP::LinearAlgebra::Vector > u, std::shared_ptr< AMP::LinearAlgebra::Vector > f)=0
 
double choose (int, int)
 
virtual std::shared_ptr< AMP::LinearAlgebra::VectorcreateInputVector () const
 Get a input vector ( For \(\mathbf{A(x)}\), \(\mathbf{x}\) is a input vector )
 
virtual std::shared_ptr< AMP::LinearAlgebra::VectorcreateOutputVector () const
 Get a left vector ( For \(\mathbf{y=A(x)}\), \(\mathbf{y}\) is an output vector )
 
double evalFactorial (const int n)
 
double evalLegendre (const int n, const double x)
 
double evalZernike (const int m, const int n, const double rho, const double phi)
 
double getFrapconFr (double radius, double rmax)
 
double getGaussianF (double x, double y)
 
virtual std::shared_ptr< AMP::LinearAlgebra::VariablegetInputVariable () const
 Return the input variable.
 
AMP::Utilities::MemoryType getMemoryLocation () const
 
std::shared_ptr< AMP::Mesh::MeshgetMesh ()
 Return the mesh.
 
std::shared_ptr< const AMP::Mesh::MeshgetMesh () const
 Return the mesh.
 
virtual std::shared_ptr< AMP::LinearAlgebra::VariablegetOutputVariable () const
 Return the output variable.
 
virtual std::shared_ptr< OperatorParametersgetParameters (const std::string &type, std::shared_ptr< const AMP::LinearAlgebra::Vector > u, std::shared_ptr< OperatorParameters > params=nullptr)
 
double getVolumeIntegralSum (double rmax, double cx, double cy)
 
double getZernike (double rho, double phi)
 
double getZernikeRadial (double rho)
 
virtual bool isValidVector (std::shared_ptr< const AMP::LinearAlgebra::Vector >)
 given a vector return whether it is valid or not
 
virtual void makeConsistent (std::shared_ptr< AMP::LinearAlgebra::Vector > vec)
 
 PowerShape (std::shared_ptr< PowerShapeParameters > parameters)
 
void printClassData (std::ostream &os) const
 
void putToDatabase (std::shared_ptr< AMP::Database > db)
 
virtual void reInitializeVector (std::shared_ptr< AMP::LinearAlgebra::Vector >)
 
void reset (std::shared_ptr< const OperatorParameters > parameters) override
 
virtual void residual (std::shared_ptr< const AMP::LinearAlgebra::Vector > f, std::shared_ptr< const AMP::LinearAlgebra::Vector > u, std::shared_ptr< AMP::LinearAlgebra::Vector > r)
 
virtual std::shared_ptr< AMP::LinearAlgebra::VectorSelectorselectInputVector () const
 Return the selector for input vectors.
 
virtual std::shared_ptr< AMP::LinearAlgebra::VectorSelectorselectOutputVector () const
 Return the selector for output vectors.
 
virtual void setDebugPrintInfoLevel (int level)
 
std::shared_ptr< AMP::LinearAlgebra::VectorsubsetInputVector (std::shared_ptr< AMP::LinearAlgebra::Vector > vec) const
 Subset input vector.
 
std::shared_ptr< const AMP::LinearAlgebra::VectorsubsetInputVector (std::shared_ptr< const AMP::LinearAlgebra::Vector > vec) const
 Subset input vector.
 
std::shared_ptr< AMP::LinearAlgebra::VectorsubsetOutputVector (std::shared_ptr< AMP::LinearAlgebra::Vector > vec) const
 Subset output vector.
 
std::shared_ptr< const AMP::LinearAlgebra::VectorsubsetOutputVector (std::shared_ptr< const AMP::LinearAlgebra::Vector > vec) const
 Subset output vector.
 
std::string type () const override
 Return the name of the operator.
 
virtual ~PowerShape ()
 

Protected Member Functions

void createCurrentLibMeshElement ()
 
void destroyCurrentLibMeshElement ()
 
void getBackendFromInput (std::shared_ptr< AMP::Database > db)
 
virtual std::shared_ptr< OperatorParametersgetJacobianParameters (std::shared_ptr< const AMP::LinearAlgebra::Vector >)
 
void setMemoryAndBackendParameters (std::shared_ptr< AMP::Database > db)
 

Protected Attributes

AMP::Utilities::Backend d_backend = AMP::Utilities::Backend::Serial
 
libMesh::Elem * d_currElemPtr
 
AMP::Mesh::MeshElementVectorPtr d_currNodes
 
std::shared_ptr< AMP::Databased_db
 
std::shared_ptr< libMesh::FEBase > d_fe
 
std::shared_ptr< libMesh::FEType > d_feType
 
int d_iDebugPrintInfoLevel = 0
 
int d_iObject_id
 
AMP::Utilities::MemoryType d_memory_location = AMP::Utilities::MemoryType::none
 
std::shared_ptr< AMP::Mesh::Meshd_Mesh
 
std::shared_ptr< libMesh::QBase > d_qrule
 

Static Protected Attributes

static int d_iInstance_id
 

Private Types

enum class  PowerShape_Types { LINEAR , QUADRATIC , CUBIC , NUM_POWER_SHAPES }
 

Private Attributes

double d_angularConstant
 
std::string d_coordinateSystem
 
double d_frapconConstant
 
std::vector< doubled_Moments
 
double d_muX
 
double d_muY
 
unsigned int d_numMNmoments
 
unsigned int d_numMoments
 
unsigned int d_numXmoments
 
unsigned int d_numYmoments
 
unsigned int d_numZmoments
 
std::vector< doubled_radialBoundingBox
 
double d_sigmaX
 
double d_sigmaY
 
std::string d_type
 
bool d_useFixedPower
 
std::vector< doubled_Xmoments
 
std::vector< doubled_Ymoments
 
std::vector< doubled_Zmoments
 

Detailed Description

Provides the specific power distribution by node for a given mesh.

Definition at line 39 of file PowerShape.h.

Member Typedef Documentation

◆ shared_ptr

Definition at line 29 of file Operator.h.

Member Enumeration Documentation

◆ PowerShape_Types

Enumerator
LINEAR 
QUADRATIC 
CUBIC 
NUM_POWER_SHAPES 

Definition at line 110 of file PowerShape.h.

Constructor & Destructor Documentation

◆ PowerShape()

AMP::Operator::PowerShape::PowerShape ( std::shared_ptr< PowerShapeParameters parameters)
explicit

◆ ~PowerShape()

virtual AMP::Operator::PowerShape::~PowerShape ( )
virtual

Empty destructor for PowerShape

Member Function Documentation

◆ apply() [1/2]

void AMP::Operator::PowerShape::apply ( AMP::LinearAlgebra::Vector::const_shared_ptr  u,
AMP::LinearAlgebra::Vector::shared_ptr  f 
)
override

The function that computes the residual.

Parameters
umultivector of the state.
fspecific power in Watts per gram The result of apply is f = A(u)

◆ apply() [2/2]

virtual void AMP::Operator::Operator::apply ( std::shared_ptr< const AMP::LinearAlgebra::Vector u,
std::shared_ptr< AMP::LinearAlgebra::Vector f 
)
pure virtualinherited

This base class can not give a meaningful definition of apply. See the derived classes for how they define apply. Each operator is free to define apply in a way that is appropriate for that operator.

Parameters
ushared pointer to const input vector u
fshared pointer to output vector storing result of applying this operator

Implemented in AMP::Operator::RadDifOp, AMP::Operator::RadDifOpPJac, AMP::Operator::FunctionOperator, AMP::Operator::MemorySpaceMigrationLinearOperator, and AMP::Operator::MemorySpaceMigrationOperator.

◆ choose()

double AMP::Operator::PowerShape::choose ( int  ,
int   
)

◆ createCurrentLibMeshElement()

void AMP::Operator::PowerShape::createCurrentLibMeshElement ( )
protected

◆ createInputVector()

virtual std::shared_ptr< AMP::LinearAlgebra::Vector > AMP::Operator::Operator::createInputVector ( ) const
virtualinherited

◆ createOutputVector()

virtual std::shared_ptr< AMP::LinearAlgebra::Vector > AMP::Operator::Operator::createOutputVector ( ) const
virtualinherited

Get a left vector ( For \(\mathbf{y=A(x)}\), \(\mathbf{y}\) is an output vector )

Returns
A newly created output vector

Reimplemented in AMP::Operator::IdentityOperator, AMP::Operator::LinearOperator, AMP::Operator::MemorySpaceMigrationLinearOperator, and AMP::Operator::MemorySpaceMigrationOperator.

◆ destroyCurrentLibMeshElement()

void AMP::Operator::PowerShape::destroyCurrentLibMeshElement ( )
protected

◆ evalFactorial()

double AMP::Operator::PowerShape::evalFactorial ( const int  n)

◆ evalLegendre()

double AMP::Operator::PowerShape::evalLegendre ( const int  n,
const double  x 
)

◆ evalZernike()

double AMP::Operator::PowerShape::evalZernike ( const int  m,
const int  n,
const double  rho,
const double  phi 
)

◆ getBackendFromInput()

void AMP::Operator::Operator::getBackendFromInput ( std::shared_ptr< AMP::Database db)
protectedinherited

◆ getFrapconFr()

double AMP::Operator::PowerShape::getFrapconFr ( double  radius,
double  rmax 
)

◆ getGaussianF()

double AMP::Operator::PowerShape::getGaussianF ( double  x,
double  y 
)

◆ getInputVariable()

virtual std::shared_ptr< AMP::LinearAlgebra::Variable > AMP::Operator::Operator::getInputVariable ( ) const
inlinevirtualinherited

◆ getJacobianParameters()

virtual std::shared_ptr< OperatorParameters > AMP::Operator::Operator::getJacobianParameters ( std::shared_ptr< const AMP::LinearAlgebra::Vector )
inlineprotectedvirtualinherited

This function returns a OperatorParameters object constructed by the operator which contains parameters from which new Jacobian operators can be created. Returning a parameter object instead of an Operator itself is meant to give users more flexibility.

Definition at line 180 of file Operator.h.

◆ getMemoryLocation()

AMP::Utilities::MemoryType AMP::Operator::Operator::getMemoryLocation ( ) const
inlineinherited

Definition at line 89 of file Operator.h.

References AMP::Operator::Operator::d_memory_location.

◆ getMesh() [1/2]

std::shared_ptr< AMP::Mesh::Mesh > AMP::Operator::Operator::getMesh ( )
inlineinherited

Return the mesh.

Definition at line 149 of file Operator.h.

References AMP::Operator::Operator::d_Mesh.

◆ getMesh() [2/2]

std::shared_ptr< const AMP::Mesh::Mesh > AMP::Operator::Operator::getMesh ( ) const
inlineinherited

Return the mesh.

Definition at line 152 of file Operator.h.

References AMP::Operator::Operator::d_Mesh.

◆ getOutputVariable()

virtual std::shared_ptr< AMP::LinearAlgebra::Variable > AMP::Operator::Operator::getOutputVariable ( ) const
inlinevirtualinherited

Return the output variable.

Reimplemented in AMP::Operator::DirichletMatrixCorrection, AMP::Operator::NeumannVectorCorrection, AMP::Operator::ColumnOperator, AMP::Operator::ConstraintsEliminationOperator, AMP::Operator::ContactResidualCorrection, AMP::Operator::CoupledOperator, AMP::Operator::DiffusionNonlinearFEOperator, AMP::Operator::FickSoretNonlinearFEOperator, AMP::Operator::GradientOperator, AMP::Operator::MassLinearFEOperator, AMP::Operator::NodeToGaussPointOperator, AMP::Operator::VolumeIntegralOperator, AMP::Operator::LinearBVPOperator, AMP::Operator::LinearOperator, AMP::Operator::AsyncMapOperator, AMP::Operator::Map1Dto3D, AMP::Operator::Map3Dto1D, AMP::Operator::MapSurface, AMP::Operator::MechanicsNonlinearFEOperator, AMP::Operator::MemorySpaceMigrationLinearOperator, AMP::Operator::MemorySpaceMigrationOperator, AMP::Operator::NeutronicsRhs, AMP::Operator::FirstOperator, AMP::Operator::SecondOperator, AMP::Operator::NonlinearBVPOperator, AMP::Operator::PetscMatrixShellOperator, AMP::Operator::CoupledChannelToCladMapOperator, AMP::Operator::CoupledFlowFrapconOperator, AMP::Operator::FlowFrapconJacobian, AMP::Operator::FlowFrapconOperator, AMP::Operator::SubchannelFourEqNonlinearOperator, AMP::Operator::SubchannelToPointMap, AMP::Operator::SubchannelTwoEqNonlinearOperator, AMP::Operator::TrilinosMatrixShellOperator, AMP::Operator::VectorCopyOperator, AMP::TimeIntegrator::LinearTimeOperator, and AMP::TimeIntegrator::TimeOperator.

Definition at line 100 of file Operator.h.

◆ getParameters()

virtual std::shared_ptr< OperatorParameters > AMP::Operator::Operator::getParameters ( const std::string &  type,
std::shared_ptr< const AMP::LinearAlgebra::Vector u,
std::shared_ptr< OperatorParameters params = nullptr 
)
virtualinherited

This function returns a OperatorParameters object constructed by the operator which contains parameters from which new operators can be created. Returning a parameter object instead of an Operator itself is meant to give users more flexibility. Examples of how this functionality might be used would be the construction of Jacobian, frozen Jacobian, preconditioner approximations to the Jacobian, adjoint operators etc

Parameters
typestd:string specifying type of return operator parameters being requested. Currently the valid option is Jacobian
uconst pointer to current solution vector
paramspointer to additional parameters that might be required to construct the return parameters

Reimplemented in AMP::Operator::IdentityOperator, AMP::Operator::MemorySpaceMigrationLinearOperator, and AMP::Operator::MemorySpaceMigrationOperator.

◆ getVolumeIntegralSum()

double AMP::Operator::PowerShape::getVolumeIntegralSum ( double  rmax,
double  cx,
double  cy 
)

◆ getZernike()

double AMP::Operator::PowerShape::getZernike ( double  rho,
double  phi 
)

◆ getZernikeRadial()

double AMP::Operator::PowerShape::getZernikeRadial ( double  rho)

◆ isValidVector()

virtual bool AMP::Operator::Operator::isValidVector ( std::shared_ptr< const AMP::LinearAlgebra::Vector )
inlinevirtualinherited

◆ makeConsistent()

virtual void AMP::Operator::Operator::makeConsistent ( std::shared_ptr< AMP::LinearAlgebra::Vector vec)
virtualinherited

virtual interface used to make a vector consistent in an operator defined way. An example of where an operator is required to make a vector consistent is in the context of AMR where ghost values on coarse-fine interfaces are filled in an operator dependent way. The default implementation is to simply call the vector makeConsistent(SET)

Reimplemented in AMP::Operator::MemorySpaceMigrationLinearOperator, AMP::Operator::MemorySpaceMigrationOperator, and AMP::TimeIntegrator::TimeOperator.

◆ printClassData()

void AMP::Operator::PowerShape::printClassData ( std::ostream &  os) const

Print out all members of integrator instance to given output stream.

◆ putToDatabase()

void AMP::Operator::PowerShape::putToDatabase ( std::shared_ptr< AMP::Database db)

Write out state of object to given database.

When assertion checking is active, the database pointer must be non-null.

◆ reInitializeVector()

virtual void AMP::Operator::Operator::reInitializeVector ( std::shared_ptr< AMP::LinearAlgebra::Vector )
inlinevirtualinherited

re-initialize a vector, e.g. after a regrid operation has happened. This is useful for example when numerical overshoots or undershoots have happened due to interpolation for example The default is a null op

Reimplemented in AMP::TimeIntegrator::TimeOperator, AMP::Operator::MemorySpaceMigrationLinearOperator, and AMP::Operator::MemorySpaceMigrationOperator.

Definition at line 167 of file Operator.h.

◆ reset()

void AMP::Operator::PowerShape::reset ( std::shared_ptr< const OperatorParameters parameters)
overridevirtual

A function to reinitialize this object.

Reimplemented from AMP::Operator::Operator.

◆ residual()

virtual void AMP::Operator::Operator::residual ( std::shared_ptr< const AMP::LinearAlgebra::Vector f,
std::shared_ptr< const AMP::LinearAlgebra::Vector u,
std::shared_ptr< AMP::LinearAlgebra::Vector r 
)
virtualinherited

Default base class implementation of the residual: f-L(u)

Parameters
fshared pointer to const vector rhs
ushared pointer to const vector u
rshared pointer to vector residual

Reimplemented in AMP::Solver::AMG::HasDeferConsistency< AMP::Operator::LinearOperator >, AMP::Operator::MemorySpaceMigrationLinearOperator, AMP::Operator::MemorySpaceMigrationOperator, AMP::TimeIntegrator::IDATimeOperator, and AMP::TimeIntegrator::TimeOperator.

◆ selectInputVector()

virtual std::shared_ptr< AMP::LinearAlgebra::VectorSelector > AMP::Operator::Operator::selectInputVector ( ) const
virtualinherited

◆ selectOutputVector()

virtual std::shared_ptr< AMP::LinearAlgebra::VectorSelector > AMP::Operator::Operator::selectOutputVector ( ) const
virtualinherited

◆ setDebugPrintInfoLevel()

virtual void AMP::Operator::Operator::setDebugPrintInfoLevel ( int  level)
inlinevirtualinherited

Specify level of diagnostic information printed during iterations.

Parameters
levelzero prints none or minimal information, higher numbers provide increasingly verbose debugging information.

Reimplemented in AMP::Operator::MemorySpaceMigrationLinearOperator, and AMP::Operator::MemorySpaceMigrationOperator.

Definition at line 97 of file Operator.h.

References AMP::Operator::Operator::d_iDebugPrintInfoLevel.

◆ setMemoryAndBackendParameters()

void AMP::Operator::Operator::setMemoryAndBackendParameters ( std::shared_ptr< AMP::Database db)
protectedinherited

◆ subsetInputVector() [1/2]

std::shared_ptr< AMP::LinearAlgebra::Vector > AMP::Operator::Operator::subsetInputVector ( std::shared_ptr< AMP::LinearAlgebra::Vector vec) const
inherited

Subset input vector.

◆ subsetInputVector() [2/2]

std::shared_ptr< const AMP::LinearAlgebra::Vector > AMP::Operator::Operator::subsetInputVector ( std::shared_ptr< const AMP::LinearAlgebra::Vector vec) const
inherited

Subset input vector.

◆ subsetOutputVector() [1/2]

std::shared_ptr< AMP::LinearAlgebra::Vector > AMP::Operator::Operator::subsetOutputVector ( std::shared_ptr< AMP::LinearAlgebra::Vector vec) const
inherited

Subset output vector.

◆ subsetOutputVector() [2/2]

std::shared_ptr< const AMP::LinearAlgebra::Vector > AMP::Operator::Operator::subsetOutputVector ( std::shared_ptr< const AMP::LinearAlgebra::Vector vec) const
inherited

Subset output vector.

◆ type()

std::string AMP::Operator::PowerShape::type ( ) const
inlineoverridevirtual

Return the name of the operator.

Implements AMP::Operator::Operator.

Definition at line 53 of file PowerShape.h.

Member Data Documentation

◆ d_angularConstant

double AMP::Operator::PowerShape::d_angularConstant
private

Definition at line 125 of file PowerShape.h.

◆ d_backend

AMP::Utilities::Backend AMP::Operator::Operator::d_backend = AMP::Utilities::Backend::Serial
protectedinherited

Definition at line 197 of file Operator.h.

◆ d_coordinateSystem

std::string AMP::Operator::PowerShape::d_coordinateSystem
private

Definition at line 113 of file PowerShape.h.

◆ d_currElemPtr

libMesh::Elem* AMP::Operator::PowerShape::d_currElemPtr
protected

Definition at line 106 of file PowerShape.h.

◆ d_currNodes

AMP::Mesh::MeshElementVectorPtr AMP::Operator::PowerShape::d_currNodes
protected

Definition at line 104 of file PowerShape.h.

◆ d_db

std::shared_ptr<AMP::Database> AMP::Operator::PowerShape::d_db
protected

Definition at line 94 of file PowerShape.h.

◆ d_fe

std::shared_ptr<libMesh::FEBase> AMP::Operator::PowerShape::d_fe
protected

Definition at line 97 of file PowerShape.h.

◆ d_feType

std::shared_ptr<libMesh::FEType> AMP::Operator::PowerShape::d_feType
protected

Definition at line 96 of file PowerShape.h.

◆ d_frapconConstant

double AMP::Operator::PowerShape::d_frapconConstant
private

Definition at line 124 of file PowerShape.h.

◆ d_iDebugPrintInfoLevel

int AMP::Operator::Operator::d_iDebugPrintInfoLevel = 0
protectedinherited

Definition at line 187 of file Operator.h.

Referenced by AMP::Operator::Operator::setDebugPrintInfoLevel().

◆ d_iInstance_id

int AMP::Operator::Operator::d_iInstance_id
staticprotectedinherited

Definition at line 191 of file Operator.h.

◆ d_iObject_id

int AMP::Operator::Operator::d_iObject_id
protectedinherited

Definition at line 189 of file Operator.h.

◆ d_memory_location

AMP::Utilities::MemoryType AMP::Operator::Operator::d_memory_location = AMP::Utilities::MemoryType::none
protectedinherited

Definition at line 195 of file Operator.h.

Referenced by AMP::Operator::Operator::getMemoryLocation().

◆ d_Mesh

std::shared_ptr<AMP::Mesh::Mesh> AMP::Operator::Operator::d_Mesh
protectedinherited

◆ d_Moments

std::vector<double> AMP::Operator::PowerShape::d_Moments
private

Definition at line 123 of file PowerShape.h.

◆ d_muX

double AMP::Operator::PowerShape::d_muX
private

Definition at line 134 of file PowerShape.h.

◆ d_muY

double AMP::Operator::PowerShape::d_muY
private

Definition at line 135 of file PowerShape.h.

◆ d_numMNmoments

unsigned int AMP::Operator::PowerShape::d_numMNmoments
private

Definition at line 119 of file PowerShape.h.

◆ d_numMoments

unsigned int AMP::Operator::PowerShape::d_numMoments
private

Definition at line 118 of file PowerShape.h.

◆ d_numXmoments

unsigned int AMP::Operator::PowerShape::d_numXmoments
private

Definition at line 115 of file PowerShape.h.

◆ d_numYmoments

unsigned int AMP::Operator::PowerShape::d_numYmoments
private

Definition at line 116 of file PowerShape.h.

◆ d_numZmoments

unsigned int AMP::Operator::PowerShape::d_numZmoments
private

Definition at line 117 of file PowerShape.h.

◆ d_qrule

std::shared_ptr<libMesh::QBase> AMP::Operator::PowerShape::d_qrule
protected

Definition at line 98 of file PowerShape.h.

◆ d_radialBoundingBox

std::vector<double> AMP::Operator::PowerShape::d_radialBoundingBox
private

Definition at line 131 of file PowerShape.h.

◆ d_sigmaX

double AMP::Operator::PowerShape::d_sigmaX
private

Definition at line 136 of file PowerShape.h.

◆ d_sigmaY

double AMP::Operator::PowerShape::d_sigmaY
private

Definition at line 137 of file PowerShape.h.

◆ d_type

std::string AMP::Operator::PowerShape::d_type
private

Definition at line 114 of file PowerShape.h.

◆ d_useFixedPower

bool AMP::Operator::PowerShape::d_useFixedPower
private

Definition at line 112 of file PowerShape.h.

◆ d_Xmoments

std::vector<double> AMP::Operator::PowerShape::d_Xmoments
private

Definition at line 120 of file PowerShape.h.

◆ d_Ymoments

std::vector<double> AMP::Operator::PowerShape::d_Ymoments
private

Definition at line 121 of file PowerShape.h.

◆ d_Zmoments

std::vector<double> AMP::Operator::PowerShape::d_Zmoments
private

Definition at line 122 of file PowerShape.h.


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



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:44.
Comments on this page