16 #include "discrete_problem/discrete_problem_helpers.h"
25 template<
typename Scalar>
30 template<
typename Scalar>
33 this->rungeKutta =
true;
34 this->RK_original_spaces_count = original_spaces_count;
35 this->force_diagonal_blocks = force_diagonal_blocks_;
36 this->block_weights = block_weights_;
39 template<
typename Scalar>
43 return block_weights->get_A(form->i / this->RK_original_spaces_count, form->j / this->RK_original_spaces_count);
47 template<
typename Scalar>
51 return block_weights->get_A(form->i / this->RK_original_spaces_count, form->j / this->RK_original_spaces_count);
55 template<
typename Scalar>
56 DiscreteProblemWeakForm<Scalar>::DiscreteProblemWeakForm(WeakFormSharedPtr<Scalar> wf_) : wf(wf_)
60 template<
typename Scalar>
61 void DiscreteProblemWeakForm<Scalar>::set_weak_formulation(WeakFormSharedPtr<Scalar> wf_)
64 throw Hermes::Exceptions::NullException(0);
69 template<
typename Scalar>
70 WeakFormSharedPtr<Scalar> DiscreteProblemWeakForm<Scalar>::get_weak_formulation()
const
75 template<
typename Scalar>
76 DiscreteProblemMatrixVector<Scalar>::DiscreteProblemMatrixVector() : current_mat(nullptr), current_rhs(nullptr)
80 template<
typename Scalar>
81 bool DiscreteProblemMatrixVector<Scalar>::set_matrix(SparseMatrix<Scalar>* mat)
83 this->current_mat = mat;
87 template<
typename Scalar>
88 bool DiscreteProblemMatrixVector<Scalar>::set_rhs(Vector<Scalar>* rhs)
90 this->current_rhs = rhs;
94 template class HERMES_API DiscreteProblemRungeKutta < double > ;
95 template class HERMES_API DiscreteProblemRungeKutta < std::complex<double> > ;
97 template class HERMES_API DiscreteProblemWeakForm < double > ;
98 template class HERMES_API DiscreteProblemWeakForm < std::complex<double> > ;
100 template class HERMES_API DiscreteProblemMatrixVector < double > ;
101 template class HERMES_API DiscreteProblemMatrixVector < std::complex<double> > ;
106 RefMap* rep_reference_mapping =
nullptr;
107 for (
int i = 0; i < reference_mapping_count; i++)
109 if (reference_mapping[i])
111 if (reference_mapping[i]->get_active_element())
113 rep_reference_mapping = reference_mapping[i];
123 Element* e = rep_reference_mapping->get_active_element();
125 Quad2D* quad = rep_reference_mapping->get_quad_2d();
127 double3* pt = quad->get_points(order, mode);
128 unsigned char np = quad->get_num_points(order, mode);
133 if (rep_reference_mapping->is_jacobian_const())
135 double jac = rep_reference_mapping->get_const_jacobian();
136 for (
unsigned char i = 0; i < np; i++)
137 jacobian_x_weights[i] = pt[i][2] * jac;
141 double* jac = rep_reference_mapping->get_jacobian(order);
142 for (
unsigned char i = 0; i < np; i++)
143 jacobian_x_weights[i] = pt[i][2] * jac[i];
148 unsigned char init_surface_geometry_points_allocated(RefMap** reference_mapping,
unsigned short reference_mapping_count,
int& order,
unsigned char isurf,
int marker, GeomSurf<double>& geometry,
double* jacobian_x_weights)
150 RefMap* rep_reference_mapping =
nullptr;
151 for (
int i = 0; i < reference_mapping_count; i++)
153 if (reference_mapping[i])
155 if (reference_mapping[i]->get_active_element())
157 rep_reference_mapping = reference_mapping[i];
162 return init_surface_geometry_points_allocated(rep_reference_mapping, order, isurf, marker, geometry, jacobian_x_weights);
165 unsigned char init_surface_geometry_points_allocated(RefMap* rep_reference_mapping,
int& order,
unsigned char isurf,
int marker, GeomSurf<double>& geometry,
double* jacobian_x_weights)
167 Element* e = rep_reference_mapping->get_active_element();
169 Quad2D* quad = rep_reference_mapping->get_quad_2d();
171 int eo = quad->get_edge_points(isurf, order, mode);
172 double3* pt = quad->get_points(eo, mode);
173 unsigned char np = quad->get_num_points(eo, mode);
178 for (
unsigned char i = 0; i < np; i++)
179 jacobian_x_weights[i] = pt[i][2] * tan[i][2];
HERMES_API void init_geom_surf_allocated(GeomSurf< double > &geom, RefMap *rm, unsigned char isurf, int marker, const int order, double3 *&tan)
Init element geometry for surface integrals.
HERMES_API void init_geom_vol_allocated(GeomVol< double > &geom, RefMap *rm, const int order)
Init element geometry for volumetric integrals.
virtual void set_RK(int original_spaces_count, bool force_diagonal_blocks=nullptr, Table *block_weights=nullptr)
Set the special handling of external functions of Runge-Kutta methods, including information how many...
Represents the reference mapping.
DiscreteProblemRungeKutta()
Constructor for multiple components / equations.
HERMES_API unsigned char init_geometry_points_allocated(RefMap **reference_mapping, unsigned short reference_mapping_count, int order, GeomVol< double > &geometry, double *jacobian_x_weights)