oomph::SolarRadiationBase Class Reference

#include <temporary_stefan_boltzmann_elements.h>

+ Inheritance diagram for oomph::SolarRadiationBase:

Public Member Functions

 SolarRadiationBase ()
 Constructor. More...
 
void enable_smoothed_sun_shadow (const double &alpha_tanh_smooth_sun_shadow=100.0)
 
void disable_smoothed_sun_shadow ()
 Disable smoothing of shadow. More...
 
bool smoothed_sun_shadow_is_enabled ()
 Disable smoothing of shadow. More...
 
double alpha_tanh_smooth_sun_shadow ()
 
void update_limiting_angles (const Vector< Node * > &shielding_node_pt)
 
virtual double atmospheric_radiation (const unsigned &intpt, const double &time, const Vector< double > &x, const Vector< double > &n)
 
void output_diffuse_radiation_cone (std::ostream &outfile, const double &radius)
 Output cone of diffuse radiation for all integration points. More...
 
void output_diffuse_radiation_cone_min_angle (std::ostream &outfile, const double &radius)
 
void output_diffuse_radiation_cone_max_angle (std::ostream &outfile, const double &radius)
 
void output_limiting_angles (std::ostream &outfile)
 Output illumination angles for all integration points. More...
 
void output_atmospheric_radiation (std::ostream &outfile)
 Output diffuse and direct radiation. More...
 
- Public Member Functions inherited from oomph::FiniteElement
void set_dimension (const unsigned &dim)
 
void set_nodal_dimension (const unsigned &nodal_dim)
 
void set_nnodal_position_type (const unsigned &nposition_type)
 Set the number of types required to interpolate the coordinate. More...
 
void set_n_node (const unsigned &n)
 
int nodal_local_eqn (const unsigned &n, const unsigned &i) const
 
double dJ_eulerian_at_knot (const unsigned &ipt, Shape &psi, DenseMatrix< double > &djacobian_dX) const
 
 FiniteElement ()
 Constructor. More...
 
virtual ~FiniteElement ()
 
 FiniteElement (const FiniteElement &)=delete
 Broken copy constructor. More...
 
virtual bool local_coord_is_valid (const Vector< double > &s)
 Broken assignment operator. More...
 
virtual void move_local_coord_back_into_element (Vector< double > &s) const
 
void get_centre_of_gravity_and_max_radius_in_terms_of_zeta (Vector< double > &cog, double &max_radius) const
 
virtual void local_coordinate_of_node (const unsigned &j, Vector< double > &s) const
 
virtual void local_fraction_of_node (const unsigned &j, Vector< double > &s_fraction)
 
virtual double local_one_d_fraction_of_node (const unsigned &n1d, const unsigned &i)
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt)
 
MacroElementmacro_elem_pt ()
 Access function to pointer to macro element. More...
 
void get_x (const Vector< double > &s, Vector< double > &x) const
 
void get_x (const unsigned &t, const Vector< double > &s, Vector< double > &x)
 
virtual void get_x_from_macro_element (const Vector< double > &s, Vector< double > &x) const
 
virtual void get_x_from_macro_element (const unsigned &t, const Vector< double > &s, Vector< double > &x)
 
virtual void set_integration_scheme (Integral *const &integral_pt)
 Set the spatial integration scheme. More...
 
Integral *const & integral_pt () const
 Return the pointer to the integration scheme (const version) More...
 
virtual void shape (const Vector< double > &s, Shape &psi) const =0
 
virtual void shape_at_knot (const unsigned &ipt, Shape &psi) const
 
virtual void dshape_local (const Vector< double > &s, Shape &psi, DShape &dpsids) const
 
virtual void dshape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids) const
 
virtual void d2shape_local (const Vector< double > &s, Shape &psi, DShape &dpsids, DShape &d2psids) const
 
virtual void d2shape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids, DShape &d2psids) const
 
void check_J_eulerian_at_knots (bool &passed) const
 
void check_jacobian (const double &jacobian) const
 
double dshape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx) const
 
virtual double dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx) const
 
virtual double dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsi, DenseMatrix< double > &djacobian_dX, RankFourTensor< double > &d_dpsidx_dX) const
 
double d2shape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
 
virtual double d2shape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
 
virtual void assign_nodal_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void describe_nodal_local_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 
Node *& node_pt (const unsigned &n)
 Return a pointer to the local node n. More...
 
Node *const & node_pt (const unsigned &n) const
 Return a pointer to the local node n (const version) More...
 
unsigned nnode () const
 Return the number of nodes. More...
 
virtual unsigned nnode_1d () const
 
double raw_nodal_position (const unsigned &n, const unsigned &i) const
 
double raw_nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position (const unsigned &n, const unsigned &i) const
 
double nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double dnodal_position_dt (const unsigned &n, const unsigned &i) const
 Return the i-th component of nodal velocity: dx/dt at local node n. More...
 
double dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual void get_dresidual_dnodal_coordinates (RankThreeTensor< double > &dresidual_dnodal_coordinates)
 
virtual void disable_ALE ()
 
virtual void enable_ALE ()
 
virtual unsigned required_nvalue (const unsigned &n) const
 
unsigned nnodal_position_type () const
 
bool has_hanging_nodes () const
 
unsigned nodal_dimension () const
 Return the required Eulerian dimension of the nodes in this element. More...
 
virtual unsigned nvertex_node () const
 
virtual Nodevertex_node_pt (const unsigned &j) const
 
virtual Nodeconstruct_node (const unsigned &n)
 
virtual Nodeconstruct_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
virtual Nodeconstruct_boundary_node (const unsigned &n)
 
virtual Nodeconstruct_boundary_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
int get_node_number (Node *const &node_pt) const
 
virtual Nodeget_node_at_local_coordinate (const Vector< double > &s) const
 
double raw_nodal_value (const unsigned &n, const unsigned &i) const
 
double raw_nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double nodal_value (const unsigned &n, const unsigned &i) const
 
double nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const
 
unsigned dim () const
 
virtual ElementGeometry::ElementGeometry element_geometry () const
 Return the geometry type of the element (either Q or T usually). More...
 
unsigned ngeom_data () const
 
Datageom_data_pt (const unsigned &j)
 
void position (const Vector< double > &zeta, Vector< double > &r) const
 
void position (const unsigned &t, const Vector< double > &zeta, Vector< double > &r) const
 
void dposition_dt (const Vector< double > &zeta, const unsigned &t, Vector< double > &drdt)
 
void interpolated_zeta (const Vector< double > &s, Vector< double > &zeta) const
 
void locate_zeta (const Vector< double > &zeta, GeomObject *&geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
 
virtual void node_update ()
 
virtual void identify_field_data_for_interactions (std::set< std::pair< Data *, unsigned >> &paired_field_data)
 
virtual void identify_geometric_data (std::set< Data * > &geometric_data_pt)
 
virtual double s_min () const
 Min value of local coordinate. More...
 
virtual double s_max () const
 Max. value of local coordinate. More...
 
double size () const
 
virtual double compute_physical_size () const
 
virtual void point_output_data (const Vector< double > &s, Vector< double > &data)
 
void point_output (std::ostream &outfile, const Vector< double > &s)
 
virtual unsigned nplot_points_paraview (const unsigned &nplot) const
 
virtual unsigned nsub_elements_paraview (const unsigned &nplot) const
 
void output_paraview (std::ofstream &file_out, const unsigned &nplot) const
 
virtual void write_paraview_output_offset_information (std::ofstream &file_out, const unsigned &nplot, unsigned &counter) const
 
virtual void write_paraview_type (std::ofstream &file_out, const unsigned &nplot) const
 
virtual void write_paraview_offsets (std::ofstream &file_out, const unsigned &nplot, unsigned &offset_sum) const
 
virtual unsigned nscalar_paraview () const
 
virtual void scalar_value_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
 
virtual void scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
 
virtual void scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt) const
 
virtual std::string scalar_name_paraview (const unsigned &i) const
 
virtual void output (std::ostream &outfile)
 
virtual void output (std::ostream &outfile, const unsigned &n_plot)
 
virtual void output (const unsigned &t, std::ostream &outfile, const unsigned &n_plot) const
 
virtual void output (FILE *file_pt)
 
virtual void output (FILE *file_pt, const unsigned &n_plot)
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
 Output an exact solution over the element. More...
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
 Output a time-dependent exact solution over the element. More...
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, const SolutionFunctorBase &exact_soln) const
 Output a time-dependent exact solution over the element. More...
 
virtual void get_s_plot (const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
 
virtual std::string tecplot_zone_string (const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (std::ostream &outfile, const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (FILE *file_pt, const unsigned &nplot) const
 
virtual unsigned nplot_points (const unsigned &nplot) const
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 Calculate the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 Calculate the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_abs_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error)
 
void integrate_fct (FiniteElement::SteadyExactSolutionFctPt integrand_fct_pt, Vector< double > &integral)
 Integrate Vector-valued function over element. More...
 
void integrate_fct (FiniteElement::UnsteadyExactSolutionFctPt integrand_fct_pt, const double &time, Vector< double > &integral)
 Integrate Vector-valued time-dep function over element. More...
 
virtual void build_face_element (const int &face_index, FaceElement *face_element_pt)
 
virtual unsigned self_test ()
 
virtual unsigned get_bulk_node_number (const int &face_index, const unsigned &i) const
 
virtual int face_outer_unit_normal_sign (const int &face_index) const
 Get the sign of the outer unit normal on the face given by face_index. More...
 
virtual unsigned nnode_on_face () const
 
void face_node_number_error_check (const unsigned &i) const
 Range check for face node numbers. More...
 
virtual CoordinateMappingFctPt face_to_bulk_coordinate_fct_pt (const int &face_index) const
 
virtual BulkCoordinateDerivativesFctPt bulk_coordinate_derivatives_fct_pt (const int &face_index) const
 
- Public Member Functions inherited from oomph::GeneralisedElement
 GeneralisedElement ()
 Constructor: Initialise all pointers and all values to zero. More...
 
virtual ~GeneralisedElement ()
 Virtual destructor to clean up any memory allocated by the object. More...
 
 GeneralisedElement (const GeneralisedElement &)=delete
 Broken copy constructor. More...
 
void operator= (const GeneralisedElement &)=delete
 Broken assignment operator. More...
 
Data *& internal_data_pt (const unsigned &i)
 Return a pointer to i-th internal data object. More...
 
Data *const & internal_data_pt (const unsigned &i) const
 Return a pointer to i-th internal data object (const version) More...
 
Data *& external_data_pt (const unsigned &i)
 Return a pointer to i-th external data object. More...
 
Data *const & external_data_pt (const unsigned &i) const
 Return a pointer to i-th external data object (const version) More...
 
unsigned long eqn_number (const unsigned &ieqn_local) const
 
int local_eqn_number (const unsigned long &ieqn_global) const
 
unsigned add_external_data (Data *const &data_pt, const bool &fd=true)
 
bool external_data_fd (const unsigned &i) const
 
void exclude_external_data_fd (const unsigned &i)
 
void include_external_data_fd (const unsigned &i)
 
void flush_external_data ()
 Flush all external data. More...
 
void flush_external_data (Data *const &data_pt)
 Flush the object addressed by data_pt from the external data array. More...
 
unsigned ninternal_data () const
 Return the number of internal data objects. More...
 
unsigned nexternal_data () const
 Return the number of external data objects. More...
 
unsigned ndof () const
 Return the number of equations/dofs in the element. More...
 
void dof_vector (const unsigned &t, Vector< double > &dof)
 Return the vector of dof values at time level t. More...
 
void dof_pt_vector (Vector< double * > &dof_pt)
 Return the vector of pointers to dof values. More...
 
void set_internal_data_time_stepper (const unsigned &i, TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
void assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt)
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 
void add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 
virtual void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void complete_setup_of_dependencies ()
 
virtual void get_residuals (Vector< double > &residuals)
 
virtual void get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void get_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void get_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void get_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
virtual void compute_norm (Vector< double > &norm)
 
virtual void compute_norm (double &norm)
 
virtual unsigned ndof_types () const
 
virtual void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
 
- 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 void position (const double &t, const Vector< double > &zeta, Vector< double > &r) const
 
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
 
- Public Member Functions inherited from oomph::FaceElement
 FaceElement ()
 Constructor: Initialise all appropriate member data. More...
 
virtual ~FaceElement ()
 Empty virtual destructor. More...
 
 FaceElement (const FaceElement &)=delete
 Broken copy constructor. More...
 
const unsignedboundary_number_in_bulk_mesh () const
 Broken assignment operator. More...
 
void set_boundary_number_in_bulk_mesh (const unsigned &b)
 Set function for the boundary number in bulk mesh. More...
 
double zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double J_eulerian (const Vector< double > &s) const
 
double J_eulerian_at_knot (const unsigned &ipt) const
 
void check_J_eulerian_at_knots (bool &passed) const
 
double interpolated_x (const Vector< double > &s, const unsigned &i) const
 
double interpolated_x (const unsigned &t, const Vector< double > &s, const unsigned &i) const
 
void interpolated_x (const Vector< double > &s, Vector< double > &x) const
 
void interpolated_x (const unsigned &t, const Vector< double > &s, Vector< double > &x) const
 
double interpolated_dxdt (const Vector< double > &s, const unsigned &i, const unsigned &t)
 
void interpolated_dxdt (const Vector< double > &s, const unsigned &t, Vector< double > &dxdt)
 
intnormal_sign ()
 
int normal_sign () const
 
intface_index ()
 
int face_index () const
 
const Vector< double > * tangent_direction_pt () const
 Public access function for the tangent direction pointer. More...
 
void set_tangent_direction (Vector< double > *tangent_direction_pt)
 Set the tangent direction vector. More...
 
void turn_on_warning_for_discontinuous_tangent ()
 
void turn_off_warning_for_discontinuous_tangent ()
 
void continuous_tangent_and_outer_unit_normal (const Vector< double > &s, Vector< Vector< double >> &tang_vec, Vector< double > &unit_normal) const
 
void continuous_tangent_and_outer_unit_normal (const unsigned &ipt, Vector< Vector< double >> &tang_vec, Vector< double > &unit_normal) const
 
void outer_unit_normal (const Vector< double > &s, Vector< double > &unit_normal) const
 Compute outer unit normal at the specified local coordinate. More...
 
void outer_unit_normal (const unsigned &ipt, Vector< double > &unit_normal) const
 Compute outer unit normal at ipt-th integration point. More...
 
FiniteElement *& bulk_element_pt ()
 Pointer to higher-dimensional "bulk" element. More...
 
FiniteElementbulk_element_pt () const
 Pointer to higher-dimensional "bulk" element (const version) More...
 
CoordinateMappingFctPtface_to_bulk_coordinate_fct_pt ()
 
CoordinateMappingFctPt face_to_bulk_coordinate_fct_pt () const
 
BulkCoordinateDerivativesFctPtbulk_coordinate_derivatives_fct_pt ()
 
BulkCoordinateDerivativesFctPt bulk_coordinate_derivatives_fct_pt () const
 
Vector< doublelocal_coordinate_in_bulk (const Vector< double > &s) const
 
void get_local_coordinate_in_bulk (const Vector< double > &s, Vector< double > &s_bulk) const
 
void get_ds_bulk_ds_face (const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction) const
 
unsignedbulk_position_type (const unsigned &i)
 
const unsignedbulk_position_type (const unsigned &i) const
 
void bulk_node_number_resize (const unsigned &i)
 Resize the storage for the bulk node numbers. More...
 
unsignedbulk_node_number (const unsigned &n)
 
const unsignedbulk_node_number (const unsigned &n) const
 
void bulk_position_type_resize (const unsigned &i)
 Resize the storage for bulk_position_type to i entries. More...
 
unsignednbulk_value (const unsigned &n)
 
unsigned nbulk_value (const unsigned &n) const
 
void nbulk_value_resize (const unsigned &i)
 
void resize_nodes (Vector< unsigned > &nadditional_data_values)
 
void output_zeta (std::ostream &outfile, const unsigned &nplot)
 Output boundary coordinate zeta. More...
 
- Public Member Functions inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
 TemplateFreeUnsteadyHeatBaseFaceElement ()
 Constructor. More...
 
virtual ~TemplateFreeUnsteadyHeatBaseFaceElement ()
 Destrutor. More...
 
UnsteadyHeatPrescribedFluxFctPtflux_fct_pt ()
 Access function for the prescribed-flux function pointer. More...
 

Public Attributes

void(*&)(const double &time, double &solar_flux_magnitude, Vector< double > &solar_flux_unit_vector, double &total_diffuse_radiation) atmospheric_radiation_fct_pt ()
 Reference to the atmospheric radiation function pointer. More...
 

Protected Attributes

bool Smoothed_sun_shadow
 Use tanh profile to smooth solar shadows. More...
 
double Alpha_tanh_smooth_sun_shadow
 Factor for tanh profile to smooth solar shadows. More...
 
Vector< std::pair< double, double > > Diffuse_limit_angles
 
void(* Atmospheric_radiation_fct_pt )(const double &time, double &solar_flux_magnitude, Vector< double > &solar_flux_unit_vector, double &total_diffuse_radiation)
 
- Protected Attributes inherited from oomph::FiniteElement
MacroElementMacro_elem_pt
 Pointer to the element's macro element (NULL by default) 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
 
- Protected Attributes inherited from oomph::FaceElement
unsigned Boundary_number_in_bulk_mesh
 The boundary number in the bulk mesh to which this element is attached. More...
 
FiniteElementBulk_element_pt
 Pointer to the associated higher-dimensional "bulk" element. More...
 
Vector< unsignedBulk_node_number
 
Vector< unsignedNbulk_value
 
Vector< double > * Tangent_direction_pt
 
- Protected Attributes inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
unsigned U_index_ust_heat
 Index at which temperature is stored. More...
 
unsigned Dim
 The spatial dimension of the problem. More...
 
UnsteadyHeatPrescribedFluxFctPt Flux_fct_pt
 Function pointer to the (global) prescribed-flux function. More...
 

Private Member Functions

void check_quadrant_jump (const double &x_prev, const double &y_prev, const double &x_next, const double &y_next, bool &crossing_quadrants, int &n_winding_increment, std::string &error_string, bool &no_problem)
 

Additional Inherited Members

- Public Types inherited from oomph::FiniteElement
typedef void(* SteadyExactSolutionFctPt) (const Vector< double > &, Vector< double > &)
 
typedef void(* UnsteadyExactSolutionFctPt) (const double &, const Vector< double > &, Vector< double > &)
 
- Public Types inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
typedef void(* UnsteadyHeatPrescribedFluxFctPt) (const double &time, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
 
- Static Public Attributes inherited from oomph::FiniteElement
static double Tolerance_for_singular_jacobian = 1.0e-16
 Tolerance below which the jacobian is considered singular. More...
 
static bool Accept_negative_jacobian = false
 
static bool Suppress_output_while_checking_for_inverted_elements
 
- Static Public Attributes inherited from oomph::GeneralisedElement
static bool Suppress_warning_about_repeated_internal_data
 
static bool Suppress_warning_about_repeated_external_data = true
 
static double Default_fd_jacobian_step = 1.0e-8
 
- Protected Member Functions inherited from oomph::FiniteElement
virtual void assemble_local_to_eulerian_jacobian (const DShape &dpsids, DenseMatrix< double > &jacobian) const
 
virtual void assemble_local_to_eulerian_jacobian2 (const DShape &d2psids, DenseMatrix< double > &jacobian2) const
 
virtual void assemble_eulerian_base_vectors (const DShape &dpsids, DenseMatrix< double > &interpolated_G) const
 
template<unsigned DIM>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual double invert_jacobian_mapping (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
double local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_eulerian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual void dJ_eulerian_dnodal_coordinates (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<unsigned DIM>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
virtual void d_dshape_eulerian_dnodal_coordinates (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
 
template<unsigned DIM>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
 
virtual void transform_derivatives (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
 
void transform_derivatives_diagonal (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
 
virtual void transform_second_derivatives (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<unsigned DIM>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<unsigned DIM>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
virtual void fill_in_jacobian_from_nodal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_from_nodal_by_fd (DenseMatrix< double > &jacobian)
 
virtual void update_before_nodal_fd ()
 
virtual void reset_after_nodal_fd ()
 
virtual void update_in_nodal_fd (const unsigned &i)
 
virtual void reset_in_nodal_fd (const unsigned &i)
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 Zero-d specialisation of function to calculate inverse of jacobian mapping. More...
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 One-d specialisation of function to calculate inverse of jacobian mapping. More...
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 Two-d specialisation of function to calculate inverse of jacobian mapping. More...
 
template<>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
 
template<>
void d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const
 
template<>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
- Protected Member Functions inherited from oomph::GeneralisedElement
unsigned add_internal_data (Data *const &data_pt, const bool &fd=true)
 
bool internal_data_fd (const unsigned &i) const
 
void exclude_internal_data_fd (const unsigned &i)
 
void include_internal_data_fd (const unsigned &i)
 
void clear_global_eqn_numbers ()
 
void add_global_eqn_numbers (std::deque< unsigned long > const &global_eqn_numbers, std::deque< double * > const &global_dof_pt)
 
virtual void assign_internal_and_external_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void assign_additional_local_eqn_numbers ()
 
int internal_local_eqn (const unsigned &i, const unsigned &j) const
 
int external_local_eqn (const unsigned &i, const unsigned &j)
 
virtual void fill_in_contribution_to_residuals (Vector< double > &residuals)
 
void fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
virtual void update_before_internal_fd ()
 
virtual void reset_after_internal_fd ()
 
virtual void update_in_internal_fd (const unsigned &i)
 
virtual void reset_in_internal_fd (const unsigned &i)
 
virtual void update_before_external_fd ()
 
virtual void reset_after_external_fd ()
 
virtual void update_in_external_fd (const unsigned &i)
 
virtual void reset_in_external_fd (const unsigned &i)
 
virtual void fill_in_contribution_to_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void fill_in_contribution_to_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void fill_in_contribution_to_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void fill_in_contribution_to_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void fill_in_contribution_to_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
- Protected Member Functions inherited from oomph::FaceElement
void add_additional_values (const Vector< unsigned > &nadditional_values, const unsigned &id)
 
- Protected Member Functions inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
virtual void get_flux (const unsigned &ipt, const double &time, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
 
- Static Protected Attributes inherited from oomph::FiniteElement
static const unsigned Default_Initial_Nvalue = 0
 Default value for the number of values at a node. More...
 
static const double Node_location_tolerance = 1.0e-14
 
static const unsigned N2deriv [] = {0, 1, 3, 6}
 
- Static Protected Attributes inherited from oomph::GeneralisedElement
static DenseMatrix< doubleDummy_matrix
 
static std::deque< double * > Dof_pt_deque
 

Detailed Description

/////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// Template-free base class for elements that are illuminated by solar radiation

Constructor & Destructor Documentation

◆ SolarRadiationBase()

oomph::SolarRadiationBase::SolarRadiationBase ( )
inline

Constructor.

156  {
157  // Don't use tanh profile to smooth solar shadows
158  Smoothed_sun_shadow=false;
159 
160  // Factor for tanh profile to smooth solar shadows
162 
163  // Assign default zero atmospheric radiation fct...
166 
167  // Make space for limiting angles for diffuse radiation
168  unsigned n_intpt = integral_pt()->nweight();
169  Diffuse_limit_angles.resize(n_intpt);
170  for (unsigned i=0;i<n_intpt;i++)
171  {
172  Diffuse_limit_angles[i].first=0.0;
174  }
175  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
Vector< std::pair< double, double > > Diffuse_limit_angles
Definition: temporary_stefan_boltzmann_elements.h:270
bool Smoothed_sun_shadow
Use tanh profile to smooth solar shadows.
Definition: temporary_stefan_boltzmann_elements.h:261
double Alpha_tanh_smooth_sun_shadow
Factor for tanh profile to smooth solar shadows.
Definition: temporary_stefan_boltzmann_elements.h:264
void(* Atmospheric_radiation_fct_pt)(const double &time, double &solar_flux_magnitude, Vector< double > &solar_flux_unit_vector, double &total_diffuse_radiation)
Definition: temporary_stefan_boltzmann_elements.h:276
const double Pi
50 digits from maple
Definition: oomph_utilities.h:157
void Zero_atmospheric_radiation_fct(const double &time, double &solar_flux_magnitude, Vector< double > &solar_flux_unit_vector, double &total_diffuse_radiation)
Default atmospheric radiation function in terms of time.
Definition: temporary_stefan_boltzmann_elements.h:123

References Alpha_tanh_smooth_sun_shadow, Atmospheric_radiation_fct_pt, Diffuse_limit_angles, i, oomph::FiniteElement::integral_pt(), oomph::Integral::nweight(), oomph::MathematicalConstants::Pi, Smoothed_sun_shadow, and oomph::SolarRadiationHelper::Zero_atmospheric_radiation_fct().

Member Function Documentation

◆ alpha_tanh_smooth_sun_shadow()

double oomph::SolarRadiationBase::alpha_tanh_smooth_sun_shadow ( )
inline

Value for tanh smoothing factor (read only – set with enable... fct; only used if enabled!)

203  {
205  }

References Alpha_tanh_smooth_sun_shadow.

Referenced by enable_smoothed_sun_shadow().

◆ atmospheric_radiation()

double oomph::SolarRadiationBase::atmospheric_radiation ( const unsigned intpt,
const double time,
const Vector< double > &  x,
const Vector< double > &  n 
)
virtual

Get the atmospheric radiation as fct of integration point index, time, Eulerian coordinate and outer unit normal. Virtual so it can be overloaded in multiphysics problems

313 {
314  double radiation=0.0;
315  unsigned n_dim = this->nodal_dimension();
316  double solar_flux_magnitude=0.0;
317  Vector<double> solar_flux_unit_vector(n_dim);
318  double total_diffuse_radiation=0.0;
319  Atmospheric_radiation_fct_pt(time,solar_flux_magnitude,
320  solar_flux_unit_vector,
321  total_diffuse_radiation);
322 
323  // Diffuse radiation from opening angle
324  //-------------------------------------
325  double phi_exposed=Diffuse_limit_angles[intpt].second-
326  Diffuse_limit_angles[intpt].first;
327  if (phi_exposed>0.0)
328  {
329  radiation+=total_diffuse_radiation*phi_exposed/
331 
332 #ifdef PARANOID
333  double tol=1.0e-5;
334  if (phi_exposed-MathematicalConstants::Pi>tol)
335  {
336  std::stringstream error_message;
337  error_message << "Exposure angle " << phi_exposed
338  << " greater than 180^o at ( "
339  << x[0] << " , " << x[1] << " )\n"
340  << "Actual difference is: "
341  << phi_exposed-MathematicalConstants::Pi
342  << " which exceeds tolerance " << tol << std::endl;
343  //throw
344  OomphLibError(error_message.str(),
347  }
348 #endif
349  }
350 
351  // Direct radiation (with directional cosine and ignore
352  //-----------------------------------------------------
353  // shielded bits)
354  //---------------
355 
356 
357  // Cos of angle between outer unit normal and direct solar flux
358  double cos_angle=-(n[0]*solar_flux_unit_vector[0]+
359  n[1]*solar_flux_unit_vector[1]);
360 
361  // No further contributions if we're pointing away from the sun
362  if (cos_angle>0.0)
363  {
364  // Angle that the incoming solar radiation makes
365  // with the horizontal
366  double theta=atan2(solar_flux_unit_vector[0],-solar_flux_unit_vector[1]);
367  double phi=0.5*MathematicalConstants::Pi+theta;
368 
369 
370  // Bounding angles of visibility
371  double phi_min=Diffuse_limit_angles[intpt].first;
372  double phi_max=Diffuse_limit_angles[intpt].second;
373 
374  // Is the sun visible?
376  {
377  // Smooth shadow
378  double tanh_factor=
379  0.5*(-tanh(Alpha_tanh_smooth_sun_shadow*(phi-phi_max))
380  -tanh(Alpha_tanh_smooth_sun_shadow*(phi_min-phi)));
381  radiation+=cos_angle*solar_flux_magnitude*tanh_factor;
382  }
383  else
384  {
385  // Hard shadow
386  if (phi>phi_min)
387  {
388  if (phi<phi_max)
389  {
390  radiation+=cos_angle*solar_flux_magnitude;
391  }
392  }
393  }
394  }
395 
396  return radiation;
397 }
AnnoyingScalar atan2(const AnnoyingScalar &y, const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:139
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
Definition: elements.h:2484
double theta
Definition: two_d_biharmonic.cc:236
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 tanh(const bfloat16 &a)
Definition: BFloat16.h:639
list x
Definition: plotDoE.py:28
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References Alpha_tanh_smooth_sun_shadow, atan2(), Atmospheric_radiation_fct_pt, Diffuse_limit_angles, n, oomph::FiniteElement::nodal_dimension(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::MathematicalConstants::Pi, Smoothed_sun_shadow, Eigen::bfloat16_impl::tanh(), BiharmonicTestFunctions2::theta, and plotDoE::x.

Referenced by oomph::StefanBoltzmannUnsteadyHeatFluxElement< ELEMENT >::get_flux(), and output_atmospheric_radiation().

◆ check_quadrant_jump()

void oomph::SolarRadiationBase::check_quadrant_jump ( const double x_prev,
const double y_prev,
const double x_next,
const double y_next,
bool crossing_quadrants,
int n_winding_increment,
std::string &  error_string,
bool no_problem 
)
private

Private helper function to check if the straight line connecting (x_prev,y_prev) and (x_next,y_next) jumps quadrants (in which case crossing_quadrants is returned as true) and what increment to the winding number this results in. Error (indicated by no_problem being false) occurs if the line crosses the origin exactly in which case we're stuffed. Diagnostics are returned in error string.

417 {
418  // Sanity check: We have to keep track of winding numbers
419  // but we're stuffed if we our discrete increments in coordinates
420  // jump diagonally across quadrants...
421  std::stringstream error_message;
422  no_problem=true;
423  crossing_quadrants=false;
424 
425  // y coordinate of intersection with x axis
426  double y_intersect=0.0;
427  double denom=x_next-x_prev;
428 
429  // If denominator is zero then we're intersection exactly
430  // at the sample point and we're absolutely screwed. This
431  // really shouldn't happen.
432  if (denom!=0.0)
433  {
434  y_intersect=y_prev-(y_next-y_prev)*x_prev/denom;
435  }
436  if ((x_prev>0.0)&&(y_prev>0.0)&&(x_next<0.0)&&(y_next<0.0))
437  {
438  crossing_quadrants=true;
439  error_message << "Jumped from upper right quadrant to lower left one\n";
440  oomph_info << "Jumped from upper right quadrant to lower left one\n";
441  if (y_intersect==0.0)
442  {
443  error_message << "..and cannot be repaired!\n";
444  no_problem=false;
445  }
446  // Path crosses the positive x axis: No winding
447  else if (y_intersect<0.0)
448  {
449  n_winding_increment=0;
450  }
451  // Path crosses the negative x axis from above: increase winding number
452  else if (y_intersect>0.0)
453  {
454  n_winding_increment=1;
455  }
456  }
457  else if ((x_prev<0.0)&&(y_prev<0.0)&&(x_next>0.0)&&(y_next>0.0))
458  {
459  crossing_quadrants=true;
460  error_message << "Jumped from lower left quadrant to upper right one\n";
461  oomph_info << "Jumped from lower left quadrant to upper right one\n";
462  if (y_intersect==0.0)
463  {
464  error_message << "..and cannot be repaired!\n";
465  no_problem=false;
466  }
467  // Path crosses the positive x axis: No winding
468  else if (y_intersect<0.0)
469  {
470  n_winding_increment=0;
471  }
472  // Path crosses the negative x axis from below: reduce winding number
473  else if (y_intersect>0.0)
474  {
475  n_winding_increment=-1;
476  }
477  }
478  else if ((x_prev<0.0)&&(y_prev>0.0)&&(x_next>0.0)&&(y_next<0.0))
479  {
480  crossing_quadrants=true;
481  error_message << "Jumped from upper left quadrant to lower right one\n";
482  oomph_info << "Jumped from upper left quadrant to lower right one\n";
483  if (y_intersect==0.0)
484  {
485  error_message << "..and cannot be repaired!\n";
486  no_problem=false;
487  }
488  // Path crosses the positive x axis: No winding
489  else if (y_intersect>0.0)
490  {
491  n_winding_increment=0;
492  }
493  // Path crosses the negative x axis from above: increase winding number
494  else if (y_intersect<0.0)
495  {
496  n_winding_increment=1;
497  }
498  }
499  else if ((x_prev>0.0)&&(y_prev<0.0)&&(x_next<0.0)&&(y_next>0.0))
500  {
501  crossing_quadrants=true;
502  error_message << "Jumped from lower right quadrant to upper left one\n";
503  oomph_info << "Jumped from lower right quadrant to upper left one\n";
504  if (y_intersect==0.0)
505  {
506  error_message << "..and cannot be repaired!\n";
507  no_problem=false;
508  }
509  // Path crosses the positive x axis: No winding
510  else if (y_intersect>0.0)
511  {
512  n_winding_increment=0;
513  }
514  // Path crosses the negative x axis from below: decrease winding number
515  else if (y_intersect<0.0)
516  {
517  n_winding_increment=-1;
518  }
519  }
520 }
OomphInfo oomph_info
Definition: oomph_definitions.cc:319

References oomph::oomph_info.

Referenced by update_limiting_angles().

◆ disable_smoothed_sun_shadow()

void oomph::SolarRadiationBase::disable_smoothed_sun_shadow ( )
inline

Disable smoothing of shadow.

189  {
190  Smoothed_sun_shadow=false;
191  }

References Smoothed_sun_shadow.

◆ enable_smoothed_sun_shadow()

void oomph::SolarRadiationBase::enable_smoothed_sun_shadow ( const double alpha_tanh_smooth_sun_shadow = 100.0)
inline

Enable smoothing of shadow; optional argument provides value for tanh smoothing factor (defaults to 100)

182  {
183  Smoothed_sun_shadow=true;
185  }
double alpha_tanh_smooth_sun_shadow()
Definition: temporary_stefan_boltzmann_elements.h:202

References alpha_tanh_smooth_sun_shadow(), Alpha_tanh_smooth_sun_shadow, and Smoothed_sun_shadow.

◆ output_atmospheric_radiation()

void oomph::SolarRadiationBase::output_atmospheric_radiation ( std::ostream &  outfile)

Output diffuse and direct radiation.

Output illumination angles for all integration points.

1069 {
1070 
1071  // Get time from first node
1072  double time=node_pt(0)->time_stepper_pt()->time_pt()->time();
1073 
1074  //Set the value of n_intpt
1075  unsigned n_intpt = integral_pt()->nweight();
1076 
1077  // Spatial dimension of the nodes
1078  unsigned n_dim = this->nodal_dimension();
1079  Vector<double> x(n_dim);
1080  Vector<double> s(n_dim-1);
1081  Vector<double> normal(n_dim);
1082 
1083  //Loop over the integration points
1084  for(unsigned ipt=0;ipt<n_intpt;ipt++)
1085  {
1086  outfile << "ZONE\n";
1087 
1088  // Local coordinate of integration point
1089  for (unsigned i=0;i<n_dim-1;i++)
1090  {
1091  s[i]=integral_pt()->knot(ipt,i);
1092  }
1093 
1094  // No recycling of shape fcts -- may as well call interpolated_x
1095  // directly
1096  this->interpolated_x(s,x);
1097 
1098  // Get outer unit normal
1099  this->outer_unit_normal(s,normal);
1100 
1101  // Get radiation
1102  double radiation=atmospheric_radiation(ipt,
1103  time,
1104  x,
1105  normal);
1106  // output
1107  outfile << x[0] << " "
1108  << x[1] << " "
1109  << radiation << " "
1110  << normal[0] << " "
1111  << normal[1] << "\n";
1112 
1113  }
1114 }
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
void outer_unit_normal(const Vector< double > &s, Vector< double > &unit_normal) const
Compute outer unit normal at the specified local coordinate.
Definition: elements.cc:6006
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual double atmospheric_radiation(const unsigned &intpt, const double &time, const Vector< double > &x, const Vector< double > &n)
Definition: temporary_stefan_boltzmann_elements.h:309
Time *const & time_pt() const
Access function for the pointer to time (const version)
Definition: timesteppers.h:572
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
RealScalar s
Definition: level1_cplx_impl.h:130
void normal(const Vector< double > &x, Vector< double > &normal)
Definition: free_surface_rotation.cc:65

References atmospheric_radiation(), i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), oomph::Integral::knot(), oomph::FiniteElement::nodal_dimension(), oomph::FiniteElement::node_pt(), WallFunction::normal(), oomph::Integral::nweight(), oomph::FaceElement::outer_unit_normal(), s, oomph::Time::time(), oomph::TimeStepper::time_pt(), oomph::Data::time_stepper_pt(), and plotDoE::x.

◆ output_diffuse_radiation_cone()

void oomph::SolarRadiationBase::output_diffuse_radiation_cone ( std::ostream &  outfile,
const double radius 
)

Output cone of diffuse radiation for all integration points.

867 {
868  //Set the value of n_intpt
869  unsigned n_intpt = integral_pt()->nweight();
870 
871  // Spatial dimension of the nodes
872  unsigned n_dim = this->nodal_dimension();
873  Vector<double> x(n_dim);
874  Vector<double> s(n_dim-1);
875 
876  //Loop over the integration points
877  for(unsigned ipt=0;ipt<n_intpt;ipt++)
878  {
879  outfile << "ZONE\n";
880 
881  // Local coordinate of integration point
882  for (unsigned i=0;i<n_dim-1;i++)
883  {
884  s[i]=integral_pt()->knot(ipt,i);
885  }
886 
887  // No recycling of shape fcts -- may as well call interpolated_x
888  // directly
889  this->interpolated_x(s,x);
890 
891  double phi_min=Diffuse_limit_angles[ipt].first;
892  double phi_max=Diffuse_limit_angles[ipt].second;
893 
894  if (phi_max>phi_min)
895  {
896  outfile << x[0]+radius*cos(phi_min) << " "
897  << x[1]+radius*sin(phi_min) << "\n"
898  << x[0] << " "
899  << x[1] << "\n"
900  << x[0]+radius*cos(phi_max) << " "
901  << x[1]+radius*sin(phi_max) << "\n";
902  }
903  else
904  {
905  outfile << x[0] << " "
906  << x[1] << "\n"
907  << x[0] << " "
908  << x[1] << "\n"
909  << x[0] << " "
910  << x[1] << "\n";
911  }
912  }
913 }
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
radius
Definition: UniformPSDSelfTest.py:15

References cos(), Diffuse_limit_angles, i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), oomph::Integral::knot(), oomph::FiniteElement::nodal_dimension(), oomph::Integral::nweight(), UniformPSDSelfTest::radius, s, sin(), and plotDoE::x.

◆ output_diffuse_radiation_cone_max_angle()

void oomph::SolarRadiationBase::output_diffuse_radiation_cone_max_angle ( std::ostream &  outfile,
const double radius 
)

Output max angle of cone of diffuse radiation for all integration points

922 {
923  //Set the value of n_intpt
924  unsigned n_intpt = integral_pt()->nweight();
925 
926  // Spatial dimension of the nodes
927  unsigned n_dim = this->nodal_dimension();
928  Vector<double> x(n_dim);
929  Vector<double> s(n_dim-1);
930 
931  //Loop over the integration points
932  for(unsigned ipt=0;ipt<n_intpt;ipt++)
933  {
934  outfile << "ZONE\n";
935 
936  // Local coordinate of integration point
937  for (unsigned i=0;i<n_dim-1;i++)
938  {
939  s[i]=integral_pt()->knot(ipt,i);
940  }
941 
942  // No recycling of shape fcts -- may as well call interpolated_x
943  // directly
944  this->interpolated_x(s,x);
945 
946  double phi_max=Diffuse_limit_angles[ipt].second;
947 
948  unsigned nplot=100;
949  double fract=0.1;
950  for (unsigned j=0;j<nplot;j++)
951  {
952  double phi=phi_max*double(j)/double(nplot-1);
953 
954  outfile
955  << x[0]+fract*(1.0+0.1*double(j)/double(nplot-1))*radius*cos(phi) << " "
956  << x[1]+fract*(1.0+0.1*double(j)/double(nplot-1))*radius*sin(phi) << "\n";
957  }
958  outfile << x[0] << " "
959  << x[1] << "\n"
960  << x[0]+radius*cos(phi_max) << " "
961  << x[1]+radius*sin(phi_max) << "\n";
962 
963  }
964 }
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References cos(), Diffuse_limit_angles, i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), j, oomph::Integral::knot(), oomph::FiniteElement::nodal_dimension(), oomph::Integral::nweight(), UniformPSDSelfTest::radius, s, sin(), and plotDoE::x.

◆ output_diffuse_radiation_cone_min_angle()

void oomph::SolarRadiationBase::output_diffuse_radiation_cone_min_angle ( std::ostream &  outfile,
const double radius 
)

Output min angle of cone of diffuse radiation for all integration points

971 {
972  //Set the value of n_intpt
973  unsigned n_intpt = integral_pt()->nweight();
974 
975  // Spatial dimension of the nodes
976  unsigned n_dim = this->nodal_dimension();
977  Vector<double> x(n_dim);
978  Vector<double> s(n_dim-1);
979 
980  //Loop over the integration points
981  for(unsigned ipt=0;ipt<n_intpt;ipt++)
982  {
983  outfile << "ZONE\n";
984 
985  // Local coordinate of integration point
986  for (unsigned i=0;i<n_dim-1;i++)
987  {
988  s[i]=integral_pt()->knot(ipt,i);
989  }
990 
991  // No recycling of shape fcts -- may as well call interpolated_x
992  // directly
993  this->interpolated_x(s,x);
994 
995  double phi_min=Diffuse_limit_angles[ipt].first;
996 
997  unsigned nplot=100;
998  double fract=0.13;
999  for (unsigned j=0;j<nplot;j++)
1000  {
1001  double phi=phi_min*double(j)/double(nplot-1);
1002 
1003  outfile
1004  << x[0]+fract*(1.0+0.1*double(j)/double(nplot-1))*radius*cos(phi) << " "
1005  << x[1]+fract*(1.0+0.1*double(j)/double(nplot-1))*radius*sin(phi) << "\n";
1006  }
1007  outfile << x[0] << " "
1008  << x[1] << "\n"
1009  << x[0]+radius*cos(phi_min) << " "
1010  << x[1]+radius*sin(phi_min) << "\n";
1011 
1012  }
1013 }

References cos(), Diffuse_limit_angles, i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), j, oomph::Integral::knot(), oomph::FiniteElement::nodal_dimension(), oomph::Integral::nweight(), UniformPSDSelfTest::radius, s, sin(), and plotDoE::x.

◆ output_limiting_angles()

void oomph::SolarRadiationBase::output_limiting_angles ( std::ostream &  outfile)

Output illumination angles for all integration points.

1021 {
1022  //Set the value of n_intpt
1023  unsigned n_intpt = integral_pt()->nweight();
1024 
1025  // Spatial dimension of the nodes
1026  unsigned n_dim = this->nodal_dimension();
1027  Vector<double> x(n_dim);
1028  Vector<double> s(n_dim-1);
1029  Vector<double> normal(n_dim);
1030 
1031  //Loop over the integration points
1032  for(unsigned ipt=0;ipt<n_intpt;ipt++)
1033  {
1034  outfile << "ZONE\n";
1035 
1036  // Local coordinate of integration point
1037  for (unsigned i=0;i<n_dim-1;i++)
1038  {
1039  s[i]=integral_pt()->knot(ipt,i);
1040  }
1041 
1042  // No recycling of shape fcts -- may as well call interpolated_x
1043  // directly
1044  this->interpolated_x(s,x);
1045 
1046  // Get outer unit normal
1047  this->outer_unit_normal(s,normal);
1048 
1049  double phi_min=Diffuse_limit_angles[ipt].first;
1050  double phi_max=Diffuse_limit_angles[ipt].second;
1051 
1052  outfile << x[0] << " "
1053  << x[1] << " "
1054  << normal[0] << " "
1055  << normal[1] << " "
1056  << phi_min << " "
1057  << phi_max << "\n";
1058 
1059  }
1060 }

References Diffuse_limit_angles, i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), oomph::Integral::knot(), oomph::FiniteElement::nodal_dimension(), WallFunction::normal(), oomph::Integral::nweight(), oomph::FaceElement::outer_unit_normal(), s, and plotDoE::x.

◆ smoothed_sun_shadow_is_enabled()

bool oomph::SolarRadiationBase::smoothed_sun_shadow_is_enabled ( )
inline

Disable smoothing of shadow.

195  {
196  return Smoothed_sun_shadow;
197  }

References Smoothed_sun_shadow.

◆ update_limiting_angles()

void oomph::SolarRadiationBase::update_limiting_angles ( const Vector< Node * > &  shielding_node_pt)

Update limiting angles for diffuse radiation, given the pointers to nodes that make up the "upper boundary" that can potentially shield the integration points from diffuse radiation

Update limiting angles for diffuse radiation, given the Vector of pointers to nodes that make up the "upper boundary" that can potentially shield the integration points from diffuse radiation

530 {
531 
532  // Search through all shielding nodes and find the
533  // bounding ones for this element
534  Node* first_vertex_node_pt=node_pt(0);
535  unsigned nnod_el=nnode();
536  Node* second_vertex_node_pt=node_pt(nnod_el-1);
537 
538  // Find left and rightmost node of element in shielding_node_pt vector:
539  unsigned j_left=0;
540  bool found=false;
541  unsigned nnod=shielding_node_pt.size();
542  for (unsigned j=0;j<nnod;j++)
543  {
544  // We come from the left so we're definitely meeting the leftmost
545  // node
546  if ((shielding_node_pt[j]==first_vertex_node_pt)||
547  (shielding_node_pt[j]==second_vertex_node_pt))
548  {
549  j_left=j;
550  found=true;
551  break;
552  }
553  }
554  unsigned j_right=j_left+1;
555 
556  // Did we succeed?
557  if (!found)
558  {
559  throw OomphLibError("Failed to find leftmost node in shielding_node_pt",
562  }
563 
564  //Set the value of n_intpt
565  unsigned n_intpt = integral_pt()->nweight();
566 
567  // Spatial dimension of the nodes
568  unsigned n_dim = this->nodal_dimension();
569  Vector<double> x(n_dim);
570  Vector<double> s(n_dim-1);
571 
572  //Loop over the integration points
573  for(unsigned ipt=0;ipt<n_intpt;ipt++)
574  {
575 
576  // Local coordinate of integration point
577  for (unsigned i=0;i<n_dim-1;i++)
578  {
579  s[i]=integral_pt()->knot(ipt,i);
580  }
581 
582  // No recycling of shape fcts -- may as well call interpolated_x
583  // directly
584  this->interpolated_x(s,x);
585 
586  oomph_info << "Integration point: " << x[0] << " " << x[1] << std::endl;
587 
588  // Loop over all potential shielding nodes to the left to find
589  // minimum angle
590  int n_winding=0;
591 
592  // Initial point
593  Node* nod_pt=shielding_node_pt[0];
594 
595  // Coordinate relative to sampling point
596  double x_prev=nod_pt->x(0)-x[0];
597  double y_prev=nod_pt->x(1)-x[1];
598 
599 #ifdef PARANOID
600  // Check that initial point is to the left of current point
601  // for calibration purposes...
602  if (x_prev>0.0)
603  {
604  throw OomphLibError(
605  "Leftmost point in shielding nodes is not to the left of current int pt",
608  }
609 #endif
610 
611  // Angle against x-axis relative to sampling point
612  double phi_prev=atan2(y_prev,x_prev);
613 
614  oomph_info << "Vertex point " << 0 << " : "
615  << nod_pt->x(0) << " " << nod_pt->x(1)
616  << " phi_raw: " << phi_prev;
617  oomph_info << " wind1 " << n_winding << " ";
618 
619  // Want a positive angle!
620  if (phi_prev<0.0)
621  {
622  n_winding+=1;
623  phi_prev+=2.0*MathematicalConstants::Pi;
624  }
625 
626  oomph_info << " wind2 " << n_winding << " ";
627  oomph_info << " phi_adj: " << phi_prev << std::endl;
628 
629 
630  // Current best guess for minimum angle to the left
631  double phi_left=phi_prev;
632 
633 
634 
635  // Loop over all other nodes
636  for (unsigned j=1;j<=j_left;j++)
637  {
638  Node* nod_pt=shielding_node_pt[j];
639  double x_next=nod_pt->x(0)-x[0];
640  double y_next=nod_pt->x(1)-x[1];
641  double phi_next=atan2(y_next,x_next);
642 
643  oomph_info << "Vertex point " << j << " : "
644  << nod_pt->x(0) << " " << nod_pt->x(1)
645  << " phi_raw: " << phi_next;
646 
647  // Sanity check: We have to keep track of winding numbers
648  // but we're stuffed if we our discrete increments in coordinates
649  // jump diagonally across quadrants...
650  std::string error_string;
651  bool no_problem=true;
652  bool crossing_quadrants=false;
653  int n_winding_increment=0;
654 
655  // Check if we've crossed quadrants
656  check_quadrant_jump(x_prev,
657  y_prev,
658  x_next,
659  y_next,
660  crossing_quadrants,
661  n_winding_increment,
662  error_string,
663  no_problem);
664 
665  // Success?
666  if (no_problem)
667  {
668  n_winding+=n_winding_increment;
669  }
670  // Complain bitterly
671  else
672  {
673  std::stringstream error_message;
674  error_message << error_string;
675  error_message << "\n x/y_prev, x/y_next:"
676  << x_prev << " "
677  << y_prev << " "
678  << x_next << " "
679  << y_next << " "<< std::endl;
680  error_message << "for point at "
681  << x[0] << " " << x[1] << std::endl;
682  error_message << "chain of shielding nodes on left:\n";
683  for (unsigned jj=1;jj<=j_left;jj++)
684  {
685  Node* nnod_pt=shielding_node_pt[jj];
686  error_message << nnod_pt->x(0) << " "
687  << nnod_pt->x(1) << "\n";
688  }
689  throw OomphLibError(error_message.str(),
692  }
693 
694  oomph_info << " wind1 " << n_winding << " ";
695 
696  // If we're crossing the x axis to the left of the origin
697  // without jumping across quadrants we
698  // have to adjust the winding number
699  if (!crossing_quadrants)
700  {
701  if ((x_prev<0.0)&&(x_next<0.0))
702  {
703  if ((y_prev>=0.0)&&(y_next<0.0))
704  {
705  n_winding+=1;
706  }
707  else if ((y_prev<0.0)&&(y_next>=0.0))
708  {
709  n_winding-=1;
710  }
711  }
712  }
713 
714 
715  // Correct angle by winding
716  phi_next+=double(n_winding)*2.0*MathematicalConstants::Pi;
717 
718  oomph_info << " wind2 " << n_winding << " ";
719  oomph_info << " phi_adj: " << phi_next << std::endl;
720 
721  // Is it smaller?
722  if (phi_next<phi_left)
723  {
724  phi_left=phi_next;
725  }
726 
727  // Bump up
728  x_prev=x_next;
729  y_prev=y_next;
730  phi_prev=phi_next;
731  }
732 
733 
734  // Loop over all potential shielding nodes to the right to find
735  // maximum angle
736  n_winding=0;
737 
738  // Initial point
739  nod_pt=shielding_node_pt[nnod-1];
740 
741  // Coordinate relative to sampling point
742  x_prev=nod_pt->x(0)-x[0];
743  y_prev=nod_pt->x(1)-x[1];
744 
745 #ifdef PARANOID
746  // Check that initial point is to the right of current point
747  // for calibration purposes...
748  if (x_prev<0.0)
749  {
750  throw OomphLibError(
751  "Rightmost point in shielding nodes is not to the right of current int pt",
754  }
755 #endif
756 
757  // Angle against x-axis relative to sampling point
758  phi_prev=atan2(y_prev,x_prev);
759 
760  // Current best guess for maximum angle to the right
761  double phi_right=phi_prev;
762 
763  // Loop over all other nodes
764  //for (unsigned j=j_right+1;j<nnod;j++)
765  for (unsigned j=nnod-2;j>=j_right;j--)
766  {
767  Node* nod_pt=shielding_node_pt[j];
768  double x_next=nod_pt->x(0)-x[0];
769  double y_next=nod_pt->x(1)-x[1];
770  double phi_next=atan2(y_next,x_next);
771 
772  // Sanity check: We have to keep track of winding numbers
773  // but we're stuffed if we our discrete increments in coordinates
774  // jump diagonally across quadrants...
775  std::string error_string;
776  bool no_problem=true;
777  bool crossing_quadrants=false;
778  int n_winding_increment=0;
779 
780  // Check if we've crossed quadrants
781  check_quadrant_jump(x_prev,
782  y_prev,
783  x_next,
784  y_next,
785  crossing_quadrants,
786  n_winding_increment,
787  error_string,
788  no_problem);
789 
790  // Success?
791  if (no_problem)
792  {
793  n_winding+=n_winding_increment;
794  }
795  // Complain bitterly
796  else
797  {
798  std::stringstream error_message;
799  error_message << error_string;
800  error_message << "\n x/y_prev, x/y_next:"
801  << x_prev << " "
802  << y_prev << " "
803  << x_next << " "
804  << y_next << " "<< std::endl;
805  error_message << "for point at "
806  << x[0] << " " << x[1] << std::endl;
807  error_message << "chain of shielding nodes on right:\n";
808  for (unsigned jj=j_right;jj<nnod;jj++)
809  {
810  Node* nnod_pt=shielding_node_pt[jj];
811  error_message << nnod_pt->x(0) << " "
812  << nnod_pt->x(1) << "\n";
813  }
814  throw OomphLibError(error_message.str(),
817  }
818 
819 
820  // If we're crossing the x axis to the left of the origin
821  // without jumping across quadrants we
822  // have to adjust the winding number
823  if (!crossing_quadrants)
824  {
825  if ((x_prev<0.0)&&(x_next<0.0))
826  {
827  if ((y_prev>=0.0)&&(y_next<0.0))
828  {
829  n_winding+=1;
830  }
831  else if ((y_prev<0.0)&&(y_next>=0.0))
832  {
833  n_winding-=1;
834  }
835  }
836  }
837 
838  // Correct angle by winding
839  phi_next+=double(n_winding)*2.0*MathematicalConstants::Pi;
840 
841  // Is it bigger?
842  if (phi_next>phi_right)
843  {
844  phi_right=phi_next;
845  }
846 
847  // Bump up
848  x_prev=x_next;
849  y_prev=y_next;
850  phi_prev=phi_next;
851  }
852 
853 //---
854 
855  Diffuse_limit_angles[ipt].first=phi_right;
856  Diffuse_limit_angles[ipt].second=phi_left;
857  }
858 }
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void check_quadrant_jump(const double &x_prev, const double &y_prev, const double &x_next, const double &y_next, bool &crossing_quadrants, int &n_winding_increment, std::string &error_string, bool &no_problem)
Definition: temporary_stefan_boltzmann_elements.h:409
bool found
Definition: MergeRestartFiles.py:24
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286

References atan2(), check_quadrant_jump(), Diffuse_limit_angles, MergeRestartFiles::found, i, oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), j, oomph::Integral::knot(), oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_dimension(), oomph::FiniteElement::node_pt(), oomph::Integral::nweight(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, oomph::MathematicalConstants::Pi, s, oomph::Global_string_for_annotation::string(), plotDoE::x, and oomph::Node::x().

Member Data Documentation

◆ Alpha_tanh_smooth_sun_shadow

double oomph::SolarRadiationBase::Alpha_tanh_smooth_sun_shadow
protected

Factor for tanh profile to smooth solar shadows.

Referenced by alpha_tanh_smooth_sun_shadow(), atmospheric_radiation(), enable_smoothed_sun_shadow(), and SolarRadiationBase().

◆ atmospheric_radiation_fct_pt

void(* &)(const double& time, double &solar_flux_magnitude, Vector<double>& solar_flux_unit_vector, double& total_diffuse_radiation) oomph::SolarRadiationBase::atmospheric_radiation_fct_pt()
inline

Reference to the atmospheric radiation function pointer.

Referenced by SolarRadiationProblem< ELEMENT >::complete_problem_setup().

◆ Atmospheric_radiation_fct_pt

void(* oomph::SolarRadiationBase::Atmospheric_radiation_fct_pt) (const double &time, double &solar_flux_magnitude, Vector< double > &solar_flux_unit_vector, double &total_diffuse_radiation)
protected

Pointer to function that specifies atmospheric radiation in terms of directional solar flux (unit vector and magnitude) and total diffusive radiation (which is later weighted by diffuse limiting angles). Input argument: time.

Referenced by atmospheric_radiation(), and SolarRadiationBase().

◆ Diffuse_limit_angles

Vector<std::pair<double,double> > oomph::SolarRadiationBase::Diffuse_limit_angles
protected

Vector of pairs storing max. and minimum angle for exposure to diffuse atmospheric radiation for each integration point. Initialised to 0 and pi (full radiation from semicircle above integration point)

Referenced by atmospheric_radiation(), output_diffuse_radiation_cone(), output_diffuse_radiation_cone_max_angle(), output_diffuse_radiation_cone_min_angle(), output_limiting_angles(), SolarRadiationBase(), and update_limiting_angles().

◆ Smoothed_sun_shadow

bool oomph::SolarRadiationBase::Smoothed_sun_shadow
protected

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