41 using VectorType = dealii::LinearAlgebra::distributed::Vector<Number>;
46 double const speed_of_sound,
51 parameters = parameters_in;
52 acoustic_solver = acoustic_solver_in;
53 fluid_solver = fluid_solver_in;
54 field_functions = field_functions_in;
56 acoustic_solver_in->pde_operator->initialize_dof_vector_pressure(source_term_acoustic);
57 fluid_solver_in->pde_operator->initialize_vector_pressure(source_term_fluid);
60 if(parameters.fluid_to_acoustic_coupling_strategy ==
61 FluidToAcousticCouplingStrategy::ConservativeInterpolation)
63 non_nested_grid_transfer.reinit(fluid_solver_in->pde_operator->get_dof_handler_p(),
64 acoustic_solver_in->pde_operator->get_dof_handler_p(),
65 *fluid_solver_in->pde_operator->get_mapping(),
66 *acoustic_solver_in->pde_operator->get_mapping());
70 AssertThrow(
false, dealii::ExcMessage(
"FluidToAcousticCouplingStrategy not implemented."));
75 data.dof_index_pressure = fluid_solver_in->pde_operator->get_dof_index_pressure();
76 data.dof_index_velocity = fluid_solver_in->pde_operator->get_dof_index_velocity();
77 data.quad_index = fluid_solver_in->pde_operator->get_quad_index_pressure();
78 data.speed_of_sound = speed_of_sound;
79 data.density = parameters_in.density;
80 data.consider_convection = parameters_in.source_term_with_convection;
81 data.blend_in = parameters.blend_in_source_term;
82 data.blend_in_function = field_functions_in->source_term_blend_in;
84 source_term_calculator.setup(fluid_solver_in->pde_operator->get_matrix_free(), data);
90 if(parameters.fluid_to_acoustic_coupling_strategy ==
91 FluidToAcousticCouplingStrategy::ConservativeInterpolation)
93 if(parameters.acoustic_source_term_computation ==
94 AcousticSourceTermComputation::FromAnalyticSourceTerm)
96 source_term_calculator.evaluate_integrate(
98 *field_functions->analytical_aero_acoustic_source_term,
99 fluid_solver->time_integrator->get_time());
101 else if(parameters.acoustic_source_term_computation ==
102 AcousticSourceTermComputation::FromFluid)
104 source_term_calculator.evaluate_integrate(source_term_fluid,
105 fluid_solver->time_integrator->get_velocity(),
106 fluid_solver->time_integrator->get_pressure(),
107 fluid_solver->get_pressure_time_derivative(),
108 fluid_solver->time_integrator->get_time());
112 AssertThrow(
false, dealii::ExcMessage(
"AcousticSourceTermComputation not implemented."));
115 source_term_acoustic = 0.0;
116 non_nested_grid_transfer.restrict_and_add(source_term_acoustic, source_term_fluid);
120 AssertThrow(
false, dealii::ExcMessage(
"FluidToAcousticCouplingStrategy not implemented."));
123 acoustic_solver->pde_operator->set_aero_acoustic_source_term(source_term_acoustic);
130 std::shared_ptr<SolverAcoustic<dim, Number>> acoustic_solver;
131 std::shared_ptr<SolverFluid<dim, Number>> fluid_solver;
135 std::shared_ptr<FieldFunctions<dim>> field_functions;
138 bool compute_acoustic_from_analytical_source_term;
141 dealii::MGTwoLevelTransferNonNested<dim, VectorType> non_nested_grid_transfer;
147 VectorType source_term_acoustic;
150 VectorType source_term_fluid;