CustomWeakForm::CustomWeakForm(CustomRightHandSide* rhs, std::string bdy_left_right, double K) : WeakForm(1) { add_matrix_form(new CustomMatrixFormVol(0, 0)); add_vector_form(new CustomVectorFormVol(0, rhs)); add_vector_form_surf(new CustomVectorFormSurfRight(0, K, bdy_left_right)); add_vector_form_surf(new CustomVectorFormSurfLeft(0, K, bdy_left_right)); }
CustomWeakFormHeatMoistureRK::CustomWeakFormHeatMoistureRK(double c_TT, double c_ww, double d_TT, double d_Tw, double d_wT, double d_ww, double k_TT, double k_ww, double T_ext, double w_ext, const std::string bdy_ext) : WeakForm<double>(2) { // Jacobian - volumetric. add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion<double>(0, 0, HERMES_ANY, new Hermes1DFunction<double>(-d_TT / c_TT), HERMES_SYM, HERMES_AXISYM_Y)); add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion<double>(0, 1, HERMES_ANY, new Hermes1DFunction<double>(-d_Tw / c_TT), HERMES_NONSYM, HERMES_AXISYM_Y)); add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion<double>(1, 0, HERMES_ANY, new Hermes1DFunction<double>(-d_wT / c_ww), HERMES_NONSYM, HERMES_AXISYM_Y)); add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion<double>(1, 1, HERMES_ANY, new Hermes1DFunction<double>(-d_ww / c_ww), HERMES_SYM, HERMES_AXISYM_Y)); // Jacobian - surface. add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf<double>(0, 0, bdy_ext, new Hermes2DFunction<double>(-k_TT / c_TT), HERMES_AXISYM_Y)); add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf<double>(1, 1, bdy_ext, new Hermes2DFunction<double>(-k_ww / c_ww), HERMES_AXISYM_Y)); // Residual - volumetric add_vector_form(new WeakFormsH1::DefaultResidualDiffusion<double>(0, HERMES_ANY, new Hermes1DFunction<double>(-d_TT / c_TT), HERMES_AXISYM_Y)); add_vector_form(new WeakFormsH1::DefaultResidualDiffusion<double>(0, HERMES_ANY, new Hermes1DFunction<double>(-d_Tw / c_TT), HERMES_AXISYM_Y)); add_vector_form(new WeakFormsH1::DefaultResidualDiffusion<double>(1, HERMES_ANY, new Hermes1DFunction<double>(-d_wT / c_ww), HERMES_AXISYM_Y)); add_vector_form(new WeakFormsH1::DefaultResidualDiffusion<double>(1, HERMES_ANY, new Hermes1DFunction<double>(-d_ww / c_ww), HERMES_AXISYM_Y)); // Residual - surface. add_vector_form_surf(new WeakFormsH1::DefaultVectorFormSurf<double>(0, bdy_ext, new Hermes2DFunction<double>(k_TT / c_TT * T_ext), HERMES_AXISYM_Y)); add_vector_form_surf(new WeakFormsH1::DefaultResidualSurf<double>(0, bdy_ext, new Hermes2DFunction<double>(-k_TT / c_TT), HERMES_AXISYM_Y)); add_vector_form_surf(new WeakFormsH1::DefaultVectorFormSurf<double>(1, bdy_ext, new Hermes2DFunction<double>(k_ww / c_ww * w_ext), HERMES_AXISYM_Y)); add_vector_form_surf(new WeakFormsH1::DefaultResidualSurf<double>(1, bdy_ext, new Hermes2DFunction<double>(-k_ww / c_ww), HERMES_AXISYM_Y)); }
CustomWeakFormHeatRK1(std::string bdy_air, double alpha, double lambda, double heatcap, double rho, double time_step, double* current_time_ptr, double temp_init, double t_final, Solution* prev_time_sln) : WeakForm(1) { /* Jacobian */ // Contribution of the time derivative term. add_matrix_form(new WeakFormsH1::DefaultMatrixFormVol(0, 0, HERMES_ANY, new HermesFunction(1.0 / time_step))); // Contribution of the diffusion term. add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion(0, 0, HERMES_ANY, new HermesFunction(lambda / (rho * heatcap)))); // Contribution of the Newton boundary condition. add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf(0, 0, bdy_air, new HermesFunction(alpha / (rho * heatcap)))); // Residual. // Contribution of the time derivative term. add_vector_form(new WeakFormsH1::DefaultResidualVol(0, HERMES_ANY, new HermesFunction(1.0 / time_step))); // Contribution of the diffusion term. add_vector_form(new WeakFormsH1::DefaultResidualDiffusion(0, HERMES_ANY, new HermesFunction(lambda / (rho * heatcap)))); CustomVectorFormVol* vec_form_vol = new CustomVectorFormVol(0, time_step); vec_form_vol->ext.push_back(prev_time_sln); add_vector_form(vec_form_vol); // Contribution of the Newton boundary condition. add_vector_form_surf(new WeakFormsH1::DefaultResidualSurf(0, bdy_air, new HermesFunction(alpha / (rho * heatcap)))); // Contribution of the Newton boundary condition. add_vector_form_surf(new CustomVectorFormSurf(0, bdy_air, alpha, rho, heatcap, current_time_ptr, temp_init, t_final)); };
CustomWeakFormPoisson::CustomWeakFormPoisson(std::string omega_1, std::string omega_2, std::string omega_3, std::string omega_4, std::string omega_5, std::string bdy_left, std::string bdy_top, std::string bdy_right, std::string bdy_bottom, MeshSharedPtr mesh) : WeakForm<double>(1), omega_1(omega_1), omega_2(omega_2), omega_3(omega_3), omega_4(omega_4), omega_5(omega_5), mesh(mesh), p_1(25.0), p_2(7.0), p_3(5.0), p_4(0.2), p_5(0.05), q_1(25.0), q_2(0.8), q_3(0.0001), q_4(0.2), q_5(0.05), f_1(0.0), f_2(1.0), f_3(1.0), f_4(0.0), f_5(0.0), bdy_left(bdy_left), bdy_top(bdy_top), bdy_right(bdy_right), bdy_bottom(bdy_bottom), c_left(0.0), c_top(1.0), c_right(2.0), c_bottom(3.0), g_n_left(0.0), g_n_top(3.0), g_n_right(2.0), g_n_bottom(1.0) { add_matrix_form(new CustomMatrixFormVol(0, 0, mesh)); add_vector_form(new CustomVectorFormVol(0, mesh)); add_matrix_form_surf(new CustomMatrixFormSurf(0, 0, bdy_bottom)); add_matrix_form_surf(new CustomMatrixFormSurf(0, 0, bdy_right)); add_matrix_form_surf(new CustomMatrixFormSurf(0, 0, bdy_top)); add_vector_form_surf(new CustomVectorFormSurf(0, bdy_bottom)); add_vector_form_surf(new CustomVectorFormSurf(0, bdy_top)); add_vector_form_surf(new CustomVectorFormSurf(0, bdy_left)); add_vector_form_surf(new CustomVectorFormSurf(0, bdy_right)); }
CustomWeakFormLinearElasticity::CustomWeakFormLinearElasticity(double E, double nu, double rho_g, std::string surface_force_bdy, double f0, double f1) : WeakForm(2) { double lambda = (E * nu) / ((1 + nu) * (1 - 2*nu)); double mu = E / (2*(1 + nu)); #ifdef USE_MULTICOMPONENT_FORMS // Jacobian matrix. // There is one multi-component and one single-component form since we want to exploit symmetry of the forms. add_multicomponent_matrix_form(new WeakFormsElasticity::DefaultJacobianElasticity_00_11( Hermes::vector<std::pair<unsigned int, unsigned int> >(make_pair(0, 0), make_pair(1, 1)), HERMES_ANY, lambda, mu)); add_matrix_form(new WeakFormsElasticity::DefaultJacobianElasticity_0_1(0, 1, lambda, mu)); // Residual. add_multicomponent_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_00_11( Hermes::vector<unsigned int>(0, 1), lambda, mu)); add_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_0_1(0, lambda, mu)); add_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_1_0(1, lambda, mu)); // Gravity loading. add_vector_form(new WeakFormsH1::DefaultVectorFormVol(1, HERMES_ANY, new HermesFunction(-rho_g))); // External forces. add_multicomponent_vector_form_surf(new WeakFormsH1::DefaultMultiComponentVectorFormSurf( Hermes::vector<unsigned int>(0, 1), surface_force_bdy, Hermes::vector<double>(f0, f1))); #else // SINGLE-COMPONENT FORMS. USEFUL FOR MULTIMESH, DO NOT REMOVE. // Jacobian. add_matrix_form(new WeakFormsElasticity::DefaultJacobianElasticity_0_0(0, 0, lambda, mu)); add_matrix_form(new WeakFormsElasticity::DefaultJacobianElasticity_0_1(0, 1, lambda, mu)); add_matrix_form(new WeakFormsElasticity::DefaultJacobianElasticity_1_1(1, 1, lambda, mu)); // Residual - first equation. add_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_0_0(0, HERMES_ANY, lambda, mu)); add_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_0_1(0, HERMES_ANY, lambda, mu)); // Surface force (first component). add_vector_form_surf(new WeakFormsH1::DefaultVectorFormSurf(0, surface_force_bdy, new HermesFunction(f0))); // Residual - second equation. add_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_1_0(1, HERMES_ANY, lambda, mu)); add_vector_form(new WeakFormsElasticity::DefaultResidualElasticity_1_1(1, HERMES_ANY, lambda, mu)); // Gravity loading in the second vector component. add_vector_form(new WeakFormsH1::DefaultVectorFormVol(1, HERMES_ANY, new HermesFunction(rho_g))); // Surface force (second component). add_vector_form_surf(new WeakFormsH1::DefaultVectorFormSurf(1, surface_force_bdy, new HermesFunction(f1))); #endif }
CustomWeakForm(double mu_r, double kappa) : WeakForm(1) { std::complex<double> ii = std::complex<double>(0.0, 1.0); // Jacobian. add_matrix_form(new WeakFormsHcurl::DefaultJacobianCurlCurl<std::complex<double> >(0, 0, HERMES_ANY, 1.0/mu_r)); add_matrix_form(new WeakFormsHcurl::DefaultMatrixFormVol<std::complex<double> >(0, 0, HERMES_ANY, -sqr(kappa))); add_matrix_form_surf(new WeakFormsHcurl::DefaultMatrixFormSurf<std::complex<double> >(0, 0, HERMES_ANY, -kappa*ii)); // Residual. add_vector_form(new WeakFormsHcurl::DefaultResidualCurlCurl<std::complex<double> >(0, HERMES_ANY, 1.0/mu_r)); add_vector_form(new WeakFormsHcurl::DefaultResidualVol<std::complex<double> >(0, HERMES_ANY, -sqr(kappa))); add_vector_form_surf(new WeakFormsHcurl::DefaultResidualSurf<std::complex<double> >(0, HERMES_ANY, -kappa*ii)); add_vector_form_surf(new CustomVectorFormSurf()); };
CustomWeakForm::CustomWeakForm(double Le, double alpha, double beta, double kappa, double x1, double tau, bool JFNK, int PRECOND, Hermes::Hermes2D::MeshFunctionSharedPtr<double> omega, Hermes::Hermes2D::MeshFunctionSharedPtr<double> omega_dt, Hermes::Hermes2D::MeshFunctionSharedPtr<double> omega_dc, MeshFunctionSharedPtr<double> t_prev_time_1, MeshFunctionSharedPtr<double> c_prev_time_1, MeshFunctionSharedPtr<double> t_prev_time_2, MeshFunctionSharedPtr<double> c_prev_time_2) : WeakForm<double>(2, JFNK ? true : false), Le(Le), alpha(alpha), beta(beta), kappa(kappa), x1(x1) { this->set_ext(Hermes::vector<MeshFunctionSharedPtr<double> >(omega_dt, omega_dc, t_prev_time_1, t_prev_time_2, c_prev_time_1, c_prev_time_2, omega)); if (!JFNK || (JFNK && PRECOND == 1)) { MatrixFormVol<double>* mfv = new JacobianFormVol_0_0(tau); add_matrix_form(mfv); MatrixFormSurf<double>* mfs = new JacobianFormSurf_0_0("Outer", kappa); add_matrix_form_surf(mfs); mfv = new JacobianFormVol_0_1(tau); add_matrix_form(mfv); mfv = new JacobianFormVol_1_0(tau); add_matrix_form(mfv); mfv = new JacobianFormVol_1_1(tau, Le); add_matrix_form(mfv); } else if (PRECOND == 2) { MatrixFormVol<double>* mfv = new PreconditionerForm_0(tau, Le); add_matrix_form(mfv); mfv = new PreconditionerForm_1(tau, Le); add_matrix_form(mfv); } VectorFormVol<double>* vfv = new ResidualFormVol_0(tau); add_vector_form(vfv); VectorFormSurf<double>* vfs = new ResidualFormSurf_0("Outer", kappa); add_vector_form_surf(vfs); vfv = new ResidualFormVol_1(tau, Le); add_vector_form(vfv); }
CustomWeakForm::CustomWeakForm(std::string left_bottom_bnd_part) : WeakForm(1) { add_matrix_form(new MatrixFormVol(0, 0)); add_vector_form(new VectorFormVol(0)); add_matrix_form_surf(new MatrixFormSurface(0, 0)); add_matrix_form_surf(new MatrixFormInterface(0, 0)); add_vector_form_surf(new VectorFormSurface(0, left_bottom_bnd_part)); }
CustomWeakFormDiscontinuousGalerkin::CustomWeakFormDiscontinuousGalerkin(const EssentialBCs& boundary_values, double epsilon, int theta, int C_W) : WeakForm(1), theta(theta), C_W(C_W), fn_epsilon(new HermesFunction(epsilon)) { add_matrix_form(new Advection::VolumetricJacobian); add_vector_form(new Advection::VolumetricResidual); add_matrix_form_surf(new Advection::BoundaryJacobian); add_vector_form_surf(new Advection::BoundaryResidual(boundary_values)); add_matrix_form_surf(new Advection::InterfaceJacobian); add_vector_form_surf(new Advection::InterfaceResidual); add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion(0,0,HERMES_ANY,fn_epsilon,HERMES_SYM)); add_vector_form(new WeakFormsH1::DefaultResidualDiffusion(0,HERMES_ANY,fn_epsilon)); add_matrix_form_surf(new Diffusion::BoundaryJacobian(epsilon, theta, C_W)); add_vector_form_surf(new Diffusion::BoundaryResidual(boundary_values, epsilon, theta, C_W)); add_matrix_form_surf(new Diffusion::InterfaceJacobian(epsilon, theta, C_W)); add_vector_form_surf(new Diffusion::InterfaceResidual(epsilon, theta, C_W)); }
CustomWeakForm::CustomWeakForm(std::string left_bottom_bnd_part, Mesh* mesh) : WeakForm<double>(1), mesh(mesh) { add_matrix_form(new CustomMatrixFormVol(0, 0)); add_vector_form(new CustomVectorFormVol(0)); add_matrix_form_surf(new CustomMatrixFormSurface(0, 0)); add_matrix_form_DG(new CustomMatrixFormInterface(0, 0)); add_vector_form_surf(new CustomVectorFormSurface(0, left_bottom_bnd_part)); }
WeakFormHelmholtz::WeakFormHelmholtz(double eps, double mu, double omega, double sigma, double beta, double E0, double h) : WeakForm<double>(2) { // Jacobian. add_matrix_form(new MatrixFormHelmholtzEquation_real_real(0, 0, eps, omega, mu)); add_matrix_form(new MatrixFormHelmholtzEquation_real_imag(0, 1, mu, omega, sigma)); add_matrix_form(new MatrixFormHelmholtzEquation_imag_real(1, 0, mu, omega, sigma)); add_matrix_form(new MatrixFormHelmholtzEquation_imag_imag(1, 1, eps, mu, omega)); add_matrix_form_surf(new MatrixFormSurfHelmholtz_real_imag(0, 1, "Bdy_impedance", beta)); add_matrix_form_surf(new MatrixFormSurfHelmholtz_imag_real(1, 0, "Bdy_impedance", beta)); // Residual. add_vector_form(new VectorFormHelmholtzEquation_real(0, eps, omega, mu, sigma)); add_vector_form(new VectorFormHelmholtzEquation_imag(1, eps, omega, mu, sigma)); add_vector_form_surf(new VectorFormSurfHelmholtz_real(0, "Bdy_impedance", beta)); add_vector_form_surf(new VectorFormSurfHelmholtz_imag(1, "Bdy_impedance", beta)); }
CustomWeakFormPoisson::CustomWeakFormPoisson(std::string bdy_marker_right) : WeakForm(1) { // Jacobian. add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion(0, 0)); // Residual. add_vector_form(new WeakFormsH1::DefaultResidualDiffusion(0)); add_vector_form(new WeakFormsH1::DefaultVectorFormVol(0, HERMES_ANY, new CustomFunction)); add_vector_form_surf(new WeakFormsH1::DefaultVectorFormSurf(0, bdy_marker_right, new HermesFunction(1.0))); }
CustomWeakForm::CustomWeakForm(std::string marker_bdy_right) : WeakForm<double>(1) { // Jacobian. add_matrix_form(new DefaultJacobianDiffusion<double>(0, 0)); add_matrix_form(new CustomJacobian(0, 0)); // Residual. add_vector_form(new DefaultResidualDiffusion<double>(0)); add_vector_form(new CustomResidual(0)); add_vector_form_surf(new DefaultVectorFormSurf<double>(0, marker_bdy_right, new Hermes::Hermes2DFunction<double>(1.0))); }
CustomWeakFormGeneral::CustomWeakFormGeneral(std::string bdy_vertical) : WeakForm<double>(1) { // Jacobian forms - volumetric. add_matrix_form(new MatrixFormVolGeneral(0, 0)); // Residual forms - volumetric. add_vector_form(new VectorFormVolGeneral(0)); // Residual forms - surface. add_vector_form_surf(new VectorFormSurfGeneral(0, bdy_vertical)); }
CustomWeakForm::CustomWeakForm( const MaterialPropertyMaps& matprop, Hermes::vector<Solution*>& iterates, double init_keff, std::string bdy_vacuum ) : DefaultWeakFormSourceIteration(matprop, iterates, init_keff, HERMES_AXISYM_Y) { for (unsigned int g = 0; g < matprop.get_G(); g++) { add_matrix_form_surf(new VacuumBoundaryCondition::Jacobian(g, bdy_vacuum, HERMES_AXISYM_Y)); add_vector_form_surf(new VacuumBoundaryCondition::Residual(g, bdy_vacuum, HERMES_AXISYM_Y)); } }
CustomWeakForm::CustomWeakForm(double e_0, double mu_0, double mu_r, double kappa, double omega, double J, bool align_mesh, MeshSharedPtr mesh, std::string current_bdy) : WeakForm<::complex>(1), marker(mesh->get_element_markers_conversion().get_internal_marker("e1").marker) { // Jacobian forms - volumetric. add_matrix_form(new CustomMatrixForm(0, 0, e_0, mu_0, mu_r, kappa, omega, J, align_mesh)); // Residual forms - volumetric. add_vector_form(new CustomResidualForm(0, e_0, mu_0, mu_r, kappa, omega, J, align_mesh)); // Residual forms - surface. add_vector_form_surf(new CustomVectorFormSurf(omega, J, current_bdy)); }
CustomWeakFormPoissonNewton::CustomWeakFormPoissonNewton(std::string mat_al, Hermes::Hermes1DFunction<double>* lambda_al, std::string mat_cu, Hermes::Hermes1DFunction<double>* lambda_cu, Hermes::Hermes2DFunction<double>* vol_src_term, std::string bdy_heat_flux, double alpha, double t_exterior) : Hermes::Hermes2D::WeakForm<double>(1) { // Jacobian forms - volumetric. add_matrix_form(new Hermes::Hermes2D::WeakFormsH1::DefaultJacobianDiffusion<double>(0, 0, mat_al, lambda_al)); add_matrix_form(new Hermes::Hermes2D::WeakFormsH1::DefaultJacobianDiffusion<double>(0, 0, mat_cu, lambda_cu)); // Jacobian forms - surface. add_matrix_form_surf(new Hermes::Hermes2D::WeakFormsH1::DefaultMatrixFormSurf<double>(0, 0, bdy_heat_flux, new Hermes::Hermes2DFunction<double>(alpha))); // Residual forms - volumetric. add_vector_form(new Hermes::Hermes2D::WeakFormsH1::DefaultResidualDiffusion<double>(0, mat_al, lambda_al)); add_vector_form(new Hermes::Hermes2D::WeakFormsH1::DefaultResidualDiffusion<double>(0, mat_cu, lambda_cu)); add_vector_form(new Hermes::Hermes2D::WeakFormsH1::DefaultVectorFormVol<double>(0, Hermes::HERMES_ANY, vol_src_term)); // Residual forms - surface. add_vector_form_surf(new Hermes::Hermes2D::WeakFormsH1::DefaultResidualSurf<double>(0, bdy_heat_flux, new Hermes::Hermes2DFunction<double>(alpha))); add_vector_form_surf(new Hermes::Hermes2D::WeakFormsH1::DefaultVectorFormSurf<double>(0, bdy_heat_flux, new Hermes::Hermes2DFunction<double>(-alpha * t_exterior))); };
CustomWeakFormAcoustics(std::string bdy_newton, double rho, double sound_speed, double omega) : WeakForm(1) { scalar ii = cplx(0.0, 1.0); // Jacobian. add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion(0, 0, HERMES_ANY, new HermesFunction(1.0/rho), HERMES_SYM)); add_matrix_form(new WeakFormsH1::DefaultMatrixFormVol(0, 0, HERMES_ANY, new HermesFunction(-sqr(omega) / rho / sqr(sound_speed)), HERMES_SYM)); add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf(0, 0, bdy_newton, new HermesFunction(-ii * omega / rho / sound_speed))); // Residual. add_vector_form(new WeakFormsH1::DefaultResidualDiffusion(0, HERMES_ANY, new HermesFunction(1.0/rho))); add_vector_form(new WeakFormsH1::DefaultResidualVol(0, HERMES_ANY, new HermesFunction(-sqr(omega) / rho / sqr(sound_speed)))); add_vector_form_surf(new WeakFormsH1::DefaultResidualSurf(0, bdy_newton, new HermesFunction(-ii * omega / rho / sound_speed))); };
CustomWeakFormHeatRK::CustomWeakFormHeatRK(std::string bdy_fire, std::string bdy_air, double alpha_fire, double alpha_air, double rho, double heatcap, double temp_ext_air, double temp_init, double* current_time_ptr) : WeakForm<double>(1) { // Jacobian - volumetric part. add_matrix_form(new CustomJacobianVol(0, 0, rho, heatcap)); // Jacobian - surface part. add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf<double>(0, 0, bdy_fire, new Hermes2DFunction<double>(-alpha_fire/(rho*heatcap)))); add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf<double>(0, 0, bdy_air, new Hermes2DFunction<double>(-alpha_air/(rho*heatcap)))); // Residual - volumetric part. add_vector_form(new CustomFormResidualVol(0, rho, heatcap)); // Surface residual - bottom boundary. CustomFormResidualSurfFire* vec_form_surf_1 = new CustomFormResidualSurfFire(0, bdy_fire, alpha_fire, rho, heatcap, current_time_ptr); add_vector_form_surf(vec_form_surf_1); // Surface residual - top boundary. add_vector_form_surf(new WeakFormsH1::DefaultResidualSurf<double>(0, HERMES_ANY, new Hermes2DFunction<double>(-alpha_air / (rho*heatcap)))); add_vector_form_surf(new WeakFormsH1::DefaultVectorFormSurf<double>(0, HERMES_ANY, new Hermes2DFunction<double>(alpha_air* temp_ext_air / (rho*heatcap)))); }
CustomWeakFormAcoustics::CustomWeakFormAcoustics(std::string bdy_newton, double rho, double sound_speed, double omega) : WeakForm<::complex>(1) { std::complex<double> ii = std::complex<double>(0.0, 1.0); // Jacobian. add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion<::complex>(0, 0, HERMES_ANY, new Hermes1DFunction<::complex>(1.0 / rho), HERMES_SYM)); add_matrix_form(new WeakFormsH1::DefaultMatrixFormVol<::complex>(0, 0, HERMES_ANY, new Hermes2DFunction<::complex>(-sqr(omega) / rho / sqr(sound_speed)), HERMES_SYM)); add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf<::complex>(0, 0, bdy_newton, new Hermes2DFunction<::complex>(-ii * omega / rho / sound_speed))); // Residual. add_vector_form(new WeakFormsH1::DefaultResidualDiffusion<::complex>(0, HERMES_ANY, new Hermes1DFunction<::complex>(1.0 / rho))); add_vector_form(new WeakFormsH1::DefaultResidualVol<::complex>(0, HERMES_ANY, new Hermes2DFunction<::complex>(-sqr(omega) / rho / sqr(sound_speed)))); add_vector_form_surf(new WeakFormsH1::DefaultResidualSurf<::complex>(0, bdy_newton, new Hermes2DFunction<::complex>(-ii * omega / rho / sound_speed))); }
CustomWeakFormHeatRK::CustomWeakFormHeatRK(std::string bdy_air, double alpha, double lambda, double heatcap, double rho, double* current_time_ptr, double temp_init, double t_final) : Hermes::Hermes2D::WeakForm<double>(1) { // Jacobian volumetric part. add_matrix_form(new WeakFormsH1::DefaultJacobianDiffusion<double>(0, 0, HERMES_ANY, new Hermes1DFunction<double>(-lambda / (heatcap * rho)))); // Jacobian surface part. add_matrix_form_surf(new WeakFormsH1::DefaultMatrixFormSurf<double>(0, 0, bdy_air, new Hermes2DFunction<double>(-alpha / (heatcap * rho)))); // Residual - volumetric. add_vector_form(new WeakFormsH1::DefaultResidualDiffusion<double>(0, HERMES_ANY, new Hermes1DFunction<double>(-lambda / (heatcap * rho)))); // Residual - surface. add_vector_form_surf(new CustomFormResidualSurf(0, bdy_air, alpha, rho, heatcap, current_time_ptr, temp_init, t_final)); }
CustomWeakForm::CustomWeakForm(Hermes::vector<std::string> newton_boundaries, double heatcap, double rho, double tau, double lambda, double alpha, double temp_ext, Solution<double>* sln_prev_time, bool JFNK) : WeakForm<double>(1, JFNK) { // Jacobian forms - volumetric. add_matrix_form(new JacobianFormVol(0, 0, heatcap, rho, lambda, tau)); // Jacobian forms - surface. add_matrix_form_surf(new JacobianFormSurf(0, 0, newton_boundaries, alpha, lambda)); // Residual forms - volumetric. ResidualFormVol* res_form = new ResidualFormVol(0, heatcap, rho, lambda, tau); res_form->ext.push_back(sln_prev_time); add_vector_form(res_form); // Residual forms - surface. add_vector_form_surf(new ResidualFormSurf(0, newton_boundaries, alpha, lambda, temp_ext)); }
CustomWeakFormPoissonNeumann::CustomWeakFormPoissonNeumann(std::string mat_al, Hermes1DFunction<double>* lambda_al, std::string mat_cu, Hermes1DFunction<double>* lambda_cu, Hermes2DFunction<double>* vol_src_term, std::string bdy_heat_flux, Hermes2DFunction<double>* surf_src_term) : WeakForm<double>(1) { // Jacobian forms - volumetric. add_matrix_form(new DefaultJacobianDiffusion<double>(0, 0, mat_al, lambda_al)); add_matrix_form(new DefaultJacobianDiffusion<double>(0, 0, mat_cu, lambda_cu)); // Residual forms - volumetric. add_vector_form(new DefaultResidualDiffusion<double>(0, mat_al, lambda_al)); add_vector_form(new DefaultResidualDiffusion<double>(0, mat_cu, lambda_cu)); add_vector_form(new DefaultVectorFormVol<double>(0, HERMES_ANY, vol_src_term)); // Residual forms - surface. add_vector_form_surf(new DefaultVectorFormSurf<double>(0, bdy_heat_flux, surf_src_term)); };
CustomWeakForm::CustomWeakForm(double Le, double alpha, double beta, double kappa, double x1, double tau, bool JFNK, bool PRECOND, Hermes::Hermes2D::Filter<double>* omega, Hermes::Hermes2D::Filter<double>* omega_dt, Hermes::Hermes2D::Filter<double>* omega_dc, Solution<double>* t_prev_time_1, Solution<double>* c_prev_time_1, Solution<double>* t_prev_time_2, Solution<double>* c_prev_time_2) : WeakForm<double>(2, JFNK ? true : false), Le(Le), alpha(alpha), beta(beta), kappa(kappa), x1(x1) { if (!JFNK || (JFNK && PRECOND == 1)) { MatrixFormVol<double>* mfv = new JacobianFormVol_0_0(tau); mfv->ext.push_back(omega_dt); add_matrix_form(mfv); MatrixFormSurf<double>* mfs = new JacobianFormSurf_0_0("Neumann", kappa); add_matrix_form_surf(mfs); mfv = new JacobianFormVol_0_1(tau); mfv->ext.push_back(omega_dc); add_matrix_form(mfv); mfv = new JacobianFormVol_1_0(tau); mfv->ext.push_back(omega_dt); add_matrix_form(mfv); mfv = new JacobianFormVol_1_1(tau, Le); mfv->ext.push_back(omega_dc); add_matrix_form(mfv); } else if (PRECOND == 2) { MatrixFormVol<double>* mfv = new PreconditionerForm_0(tau, Le); add_matrix_form(mfv); mfv = new PreconditionerForm_1(tau, Le); add_matrix_form(mfv); } VectorFormVol<double>* vfv = new ResidualFormVol_0(tau); vfv->ext.push_back(t_prev_time_1); vfv->ext.push_back(t_prev_time_2); vfv->ext.push_back(omega); add_vector_form(vfv); VectorFormSurf<double>* vfs = new ResidualFormSurf_0("Neumann", kappa); add_vector_form_surf(vfs); vfv = new ResidualFormVol_1(tau, Le); vfv->ext.push_back(c_prev_time_1); vfv->ext.push_back(c_prev_time_2); vfv->ext.push_back(omega); add_vector_form(vfv); }
CustomWeakForm(double e_0, double mu_0, double mu_r, double kappa, double omega, double J, bool align_mesh) : WeakForm(1) { add_matrix_form(new CustomMatrixForm(0, 0, e_0, mu_0, mu_r, kappa, align_mesh)); add_vector_form_surf(new CustomVectorFormSurf(omega, J)); };
CustomWeakFormGeneral() : WeakForm(1) { add_matrix_form(new MatrixFormVolGeneral(0, 0)); add_vector_form(new VectorFormVolGeneral(0)); add_vector_form_surf(new VectorFormSurfGeneral(0, BDY_VERTICAL)); }
void registerForms() { // boundary conditions for (int i = 0; i<Util::scene()->edges.count(); i++) { SceneBoundaryHeat *boundary = dynamic_cast<SceneBoundaryHeat *>(Util::scene()->edges[i]->boundary); if (boundary && Util::scene()->edges[i]->boundary != Util::scene()->boundaries[0]) { if (boundary->type == PhysicFieldBC_Heat_Flux) { // vector flux term double flux = boundary->heatFlux.number + boundary->h.number * boundary->externalTemperature.number; if (fabs(flux) > EPS_ZERO) add_vector_form_surf(new WeakFormsH1::SurfaceVectorForms::DefaultVectorFormSurf(0, QString::number(i + 1).toStdString(), flux, convertProblemType(Util::scene()->problemInfo()->problemType))); if (fabs(boundary->h.number) > EPS_ZERO) add_matrix_form_surf(new WeakFormsH1::SurfaceMatrixForms::DefaultMatrixFormSurf(0, 0, QString::number(i + 1).toStdString(), boundary->h.number, convertProblemType(Util::scene()->problemInfo()->problemType))); } } } // materials for (int i = 0; i<Util::scene()->labels.count(); i++) { SceneMaterialHeat *material = dynamic_cast<SceneMaterialHeat *>(Util::scene()->labels[i]->material); if (material && Util::scene()->labels[i]->material != Util::scene()->materials[0]) { add_matrix_form(new WeakFormsH1::VolumetricMatrixForms::DefaultLinearDiffusion(0, 0, QString::number(i).toStdString(), material->thermal_conductivity.number, HERMES_SYM, convertProblemType(Util::scene()->problemInfo()->problemType))); if (fabs(material->volume_heat.number) > EPS_ZERO) add_vector_form(new WeakFormsH1::VolumetricVectorForms::DefaultVectorFormConst(0, QString::number(i).toStdString(), material->volume_heat.number, convertProblemType(Util::scene()->problemInfo()->problemType))); // transient analysis if (Util::scene()->problemInfo()->analysisType == AnalysisType_Transient) { if ((fabs(material->density.number) > EPS_ZERO) && (fabs(material->specific_heat.number) > EPS_ZERO)) { if (solution.size() > 0) { add_matrix_form(new WeakFormsH1::VolumetricMatrixForms::DefaultLinearMass(0, 0, QString::number(i).toStdString(), material->density.number * material->specific_heat.number / Util::scene()->problemInfo()->timeStep.number, HERMES_SYM, convertProblemType(Util::scene()->problemInfo()->problemType))); add_vector_form(new CustomVectorFormTimeDep(0, QString::number(i).toStdString(), material->density.number * material->specific_heat.number / Util::scene()->problemInfo()->timeStep.number, solution[0], convertProblemType(Util::scene()->problemInfo()->problemType))); } } } } } }