Skip to content

Commit d75e23c

Browse files
committed
Move setting of fine scale velocity
to a dedicated method and use const reference instead of shared pointer Introduce a method that checks when to set the fine scale velocity, based on the checks that have been there already
1 parent e329f50 commit d75e23c

10 files changed

+83
-56
lines changed

src/elch/4C_elch_moving_boundary_algorithm.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ void ElCh::MovingBoundaryAlgorithm::time_loop()
112112
{
113113
// transfer convective velocity = fluid velocity - grid velocity
114114
scatra_field()->set_convective_velocity(*fluid_field()->convective_vel());
115-
scatra_field()->set_velocity_field(
116-
fluid_field()->hist(), fluid_field()->convective_vel(), nullptr);
115+
scatra_field()->set_velocity_field(fluid_field()->hist(), fluid_field()->convective_vel());
117116
}
118117

119118
// transfer moving mesh data
@@ -267,8 +266,7 @@ void ElCh::MovingBoundaryAlgorithm::solve_scatra()
267266
{
268267
// transfer convective velocity = fluid velocity - grid velocity
269268
scatra_field()->set_convective_velocity(*fluid_field()->convective_vel());
270-
scatra_field()->set_velocity_field(
271-
fluid_field()->hist(), fluid_field()->convective_vel(), nullptr);
269+
scatra_field()->set_velocity_field(fluid_field()->hist(), fluid_field()->convective_vel());
272270
}
273271
}
274272
break;

src/fs3i/4C_fs3i_fps3i_partitioned.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ void FS3I::PartFPS3I::set_velocity_fields()
652652
for (unsigned i = 0; i < scatravec_.size(); ++i)
653653
{
654654
scatravec_[i]->scatra_field()->set_convective_velocity(*convel[i]);
655-
scatravec_[i]->scatra_field()->set_velocity_field(nullptr, vel[i], nullptr);
655+
scatravec_[i]->scatra_field()->set_velocity_field(nullptr, vel[i]);
656656
}
657657
break;
658658
}

src/fs3i/4C_fs3i_partitioned.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ void FS3I::PartFS3I::set_velocity_fields() const
705705
scatravec_[i]->scatra_field()->set_convective_velocity(
706706
*vol_mortar_master_to_slavei(i, convel[i]));
707707
scatravec_[i]->scatra_field()->set_velocity_field(
708-
nullptr, vol_mortar_master_to_slavei(i, vel[i]), nullptr);
708+
nullptr, vol_mortar_master_to_slavei(i, vel[i]));
709709
}
710710
}
711711

src/loma/4C_loma_algorithm.cpp

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,11 @@ void LowMach::Algorithm::initial_calculations()
313313
{
314314
// set initial velocity field for evaluation of initial scalar time derivative in SCATRA
315315
scatra_field()->set_convective_velocity(*fluid_field()->velnp());
316-
scatra_field()->set_velocity_field(nullptr, fluid_field()->velnp(), fluid_field()->fs_vel());
316+
scatra_field()->set_velocity_field(nullptr, fluid_field()->velnp());
317+
if (scatra_field()->fine_scale_velocity_field_required())
318+
{
319+
scatra_field()->set_fine_scale_velocity(*fluid_field()->fs_vel());
320+
}
317321

318322
// set initial value of thermodynamic pressure in SCATRA
319323
std::dynamic_pointer_cast<ScaTra::ScaTraTimIntLoma>(scatra_field())->set_initial_therm_pressure();
@@ -540,16 +544,24 @@ void LowMach::Algorithm::set_fluid_values_in_scatra()
540544
case Inpar::FLUID::timeint_afgenalpha:
541545
{
542546
scatra_field()->set_convective_velocity(*fluid_field()->velaf());
543-
scatra_field()->set_velocity_field(
544-
fluid_field()->accam(), fluid_field()->velaf(), fluid_field()->fs_vel());
547+
scatra_field()->set_velocity_field(fluid_field()->accam(), fluid_field()->velaf());
548+
if (scatra_field()->fine_scale_velocity_field_required() and
549+
fluid_field()->fs_vel() != nullptr)
550+
{
551+
scatra_field()->set_fine_scale_velocity(*fluid_field()->fs_vel());
552+
}
545553
}
546554
break;
547555
case Inpar::FLUID::timeint_one_step_theta:
548556
case Inpar::FLUID::timeint_bdf2:
549557
{
550558
scatra_field()->set_convective_velocity(*fluid_field()->velnp());
551-
scatra_field()->set_velocity_field(
552-
fluid_field()->hist(), fluid_field()->velnp(), fluid_field()->fs_vel());
559+
scatra_field()->set_velocity_field(fluid_field()->hist(), fluid_field()->velnp());
560+
if (scatra_field()->fine_scale_velocity_field_required() and
561+
fluid_field()->fs_vel() != nullptr)
562+
{
563+
scatra_field()->set_fine_scale_velocity(*fluid_field()->fs_vel());
564+
}
553565
}
554566
break;
555567
default:

src/poroelast_scatra/4C_poroelast_scatra_base.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ void PoroElastScaTra::PoroScatraBase::set_velocity_fields()
180180
}
181181

182182
scatra_->scatra_field()->set_convective_velocity(*convel);
183-
scatra_->scatra_field()->set_velocity_field(nullptr, velnp, nullptr);
183+
scatra_->scatra_field()->set_velocity_field(nullptr, velnp);
184184
}
185185

186186
/*----------------------------------------------------------------------*

src/scatra/4C_scatra_algorithm.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ void ScaTra::ScaTraAlgorithm::prepare_time_step_convection()
235235
if (step() == 1)
236236
{
237237
scatra_field()->set_convective_velocity(*fluid_field()->velnp());
238-
scatra_field()->set_velocity_field(fluid_field()->hist(), fluid_field()->velnp(), nullptr);
238+
scatra_field()->set_velocity_field(fluid_field()->hist(), fluid_field()->velnp());
239239
}
240240

241241
// prepare time step (+ initialize one-step-theta scheme correctly with
@@ -293,21 +293,19 @@ void ScaTra::ScaTraAlgorithm::set_velocity_field()
293293
// since it is not yet clear how the grid velocity should be interpolated
294294
// properly -> hence, ScaTraAlgorithm does not support moving
295295
// meshes yet
296-
297-
// this is ugly, but FsVel() may give a Null pointer which we canNOT give to the volmortart
298-
// framework
299-
// TODO (thon): make this somehow prettier..
300-
std::shared_ptr<const Core::LinAlg::Vector<double>> fsvel = fluid_field()->fs_vel();
301-
if (fsvel != nullptr) fsvel = fluid_to_scatra(fsvel);
302-
303296
switch (fluid_field()->tim_int_scheme())
304297
{
305298
case Inpar::FLUID::timeint_npgenalpha:
306299
case Inpar::FLUID::timeint_afgenalpha:
307300
{
308301
scatra_field()->set_convective_velocity(*fluid_to_scatra(fluid_field()->velaf()));
309302
scatra_field()->set_velocity_field(
310-
fluid_to_scatra(fluid_field()->accam()), fluid_to_scatra(fluid_field()->velaf()), fsvel);
303+
fluid_to_scatra(fluid_field()->accam()), fluid_to_scatra(fluid_field()->velaf()));
304+
if (scatra_field()->fine_scale_velocity_field_required() and
305+
fluid_field()->fs_vel() != nullptr)
306+
{
307+
scatra_field()->set_fine_scale_velocity(*fluid_to_scatra(fluid_field()->fs_vel()));
308+
}
311309
break;
312310
}
313311
case Inpar::FLUID::timeint_one_step_theta:
@@ -316,13 +314,17 @@ void ScaTra::ScaTraAlgorithm::set_velocity_field()
316314
{
317315
scatra_field()->set_convective_velocity(*fluid_to_scatra(fluid_field()->velnp()));
318316
scatra_field()->set_velocity_field(
319-
fluid_to_scatra(fluid_field()->hist()), fluid_to_scatra(fluid_field()->velnp()), fsvel);
317+
fluid_to_scatra(fluid_field()->hist()), fluid_to_scatra(fluid_field()->velnp()));
318+
if (scatra_field()->fine_scale_velocity_field_required() and
319+
fluid_field()->fs_vel() != nullptr)
320+
{
321+
scatra_field()->set_fine_scale_velocity(*fluid_to_scatra(fluid_field()->fs_vel()));
322+
}
320323
break;
321324
}
322325
default:
323326
{
324327
FOUR_C_THROW("Time integration scheme not supported");
325-
break;
326328
}
327329
}
328330
}

src/scatra/4C_scatra_timint_implicit.cpp

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,13 +1478,46 @@ void ScaTra::ScaTraTimIntImpl::set_convective_velocity(
14781478
discret_->set_state(nds_vel(), "convective velocity field", convective_velocity);
14791479
}
14801480

1481+
/*----------------------------------------------------------------------*
1482+
*----------------------------------------------------------------------*/
1483+
void ScaTra::ScaTraTimIntImpl::set_fine_scale_velocity(
1484+
const Core::LinAlg::Vector<double>& fine_scale_velocity) const
1485+
{
1486+
// time measurement
1487+
TEUCHOS_FUNC_TIME_MONITOR("SCATRA: set fine scale velocity field");
1488+
1489+
// checks
1490+
FOUR_C_ASSERT(velocity_field_type_ == Inpar::ScaTra::velocity_Navier_Stokes,
1491+
"Wrong set_velocity_field() called for velocity field type {}!", velocity_field_type_);
1492+
FOUR_C_ASSERT(nds_vel() < discret_->num_dof_sets(), "Too few dof sets on scatra discretization!");
1493+
1494+
// provide scatra discretization with fine-scale convective velocity if required
1495+
discret_->set_state(nds_vel(), "fine-scale velocity field", fine_scale_velocity);
1496+
}
1497+
1498+
/*----------------------------------------------------------------------*
1499+
*----------------------------------------------------------------------*/
1500+
bool ScaTra::ScaTraTimIntImpl::fine_scale_velocity_field_required() const
1501+
{
1502+
// for smagorinsky_all, the fine scale velocity is not necessary
1503+
if (fssgd_ == Inpar::ScaTra::fssugrdiff_smagorinsky_all) return false;
1504+
1505+
// in case the fine-scale subgrid-viscosity is turned off in the scalar field, the fine scale
1506+
// velocity is not necessary
1507+
if (turbmodel_ == Inpar::FLUID::no_model and fssgd_ == Inpar::ScaTra::fssugrdiff_no) return false;
1508+
1509+
// do not communicate the fine scale velocity field before it was calculated, i.e., in the initial
1510+
// step
1511+
if (step_ < 1) return false;
1512+
1513+
return true;
1514+
}
14811515

14821516
/*----------------------------------------------------------------------*
14831517
*----------------------------------------------------------------------*/
14841518
void ScaTra::ScaTraTimIntImpl::set_velocity_field(
14851519
std::shared_ptr<const Core::LinAlg::Vector<double>> acc,
1486-
std::shared_ptr<const Core::LinAlg::Vector<double>> vel,
1487-
std::shared_ptr<const Core::LinAlg::Vector<double>> fsvel)
1520+
std::shared_ptr<const Core::LinAlg::Vector<double>> vel)
14881521
{
14891522
// time measurement
14901523
TEUCHOS_FUNC_TIME_MONITOR("SCATRA: set velocity fields");
@@ -1494,33 +1527,11 @@ void ScaTra::ScaTraTimIntImpl::set_velocity_field(
14941527
"Wrong set_velocity_field() called for velocity field type {}!", velocity_field_type_);
14951528
FOUR_C_ASSERT(nds_vel() < discret_->num_dof_sets(), "Too few dof sets on scatra discretization!");
14961529

1497-
// boolean indicating whether fine-scale velocity vector exists
1498-
// -> if yes, multifractal subgrid-scale modeling is applied
1499-
bool fsvelswitch = (fsvel != nullptr);
1500-
1501-
// some thing went wrong if we want to use multifractal subgrid-scale modeling
1502-
// and have not got the fine-scale velocity
1503-
if (step_ >= 1 and
1504-
(turbmodel_ == Inpar::FLUID::multifractal_subgrid_scales or
1505-
fssgd_ == Inpar::ScaTra::fssugrdiff_smagorinsky_small) and
1506-
not fsvelswitch)
1507-
FOUR_C_THROW("Fine-scale velocity expected for multifractal subgrid-scale modeling!");
1508-
// as fsvelswitch is also true for smagorinsky_all, we have to reset fsvelswitch
1509-
// as the corresponding vector, which is not necessary, is not provided in scatra
1510-
if (fssgd_ == Inpar::ScaTra::fssugrdiff_smagorinsky_all and fsvelswitch) fsvelswitch = false;
1511-
// as fsvelswitch is true in case of turned-off model in scalar field,
1512-
// we have to ensure false
1513-
if (turbmodel_ == Inpar::FLUID::no_model and fssgd_ == Inpar::ScaTra::fssugrdiff_no)
1514-
fsvelswitch = false;
1515-
15161530
// provide scatra discretization with velocity
15171531
if (vel != nullptr) discret_->set_state(nds_vel(), "velocity field", *vel);
15181532

15191533
// provide scatra discretization with acceleration field if required
15201534
if (acc != nullptr) discret_->set_state(nds_vel(), "acceleration field", *acc);
1521-
1522-
// provide scatra discretization with fine-scale convective velocity if required
1523-
if (fsvelswitch) discret_->set_state(nds_vel(), "fine-scale velocity field", *fsvel);
15241535
}
15251536

15261537
/*----------------------------------------------------------------------*

src/scatra/4C_scatra_timint_implicit.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,17 +247,21 @@ namespace ScaTra
247247
//! set the @convective_velocity vector to the scalar transport discretization
248248
void set_convective_velocity(const Core::LinAlg::Vector<double>& convective_velocity) const;
249249

250+
//! set the @fine_scale_velocity vector to the scalar transport discretization
251+
void set_fine_scale_velocity(const Core::LinAlg::Vector<double>& fine_scale_velocity) const;
252+
253+
//! return whether setting of the fine scale velocity is required
254+
[[nodiscard]] bool fine_scale_velocity_field_required() const;
255+
250256
/*!
251257
* @brief set velocity field (+ pressure and acceleration field as well as fine-scale velocity
252258
* field, if required)
253259
*
254260
* @param acc acceleration vector
255261
* @param vel velocity vector
256-
* @param fsvel fine-scale velocity vector
257262
*/
258263
void set_velocity_field(std::shared_ptr<const Core::LinAlg::Vector<double>> acc,
259-
std::shared_ptr<const Core::LinAlg::Vector<double>> vel,
260-
std::shared_ptr<const Core::LinAlg::Vector<double>> fsvel);
264+
std::shared_ptr<const Core::LinAlg::Vector<double>> vel);
261265

262266
void set_wall_shear_stresses(std::shared_ptr<const Core::LinAlg::Vector<double>> wss);
263267

src/ssi/4C_ssi_coupling.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ void SSI::SSICouplingMatchingVolume::set_velocity_fields(
142142
std::shared_ptr<const Core::LinAlg::Vector<double>> vel)
143143
{
144144
scatra->scatra_field()->set_convective_velocity(*convvel);
145-
scatra->scatra_field()->set_velocity_field(nullptr, vel, nullptr);
145+
scatra->scatra_field()->set_velocity_field(nullptr, vel);
146146
}
147147

148148
/*----------------------------------------------------------------------*/
@@ -290,7 +290,7 @@ void SSI::SSICouplingNonMatchingBoundary::set_velocity_fields(
290290
scatra->scatra_field()->set_convective_velocity(
291291
*adaptermeshtying_->master_to_slave(*extractor_->extract_cond_vector(*convvel)));
292292
scatra->scatra_field()->set_velocity_field(
293-
nullptr, adaptermeshtying_->master_to_slave(*extractor_->extract_cond_vector(*vel)), nullptr);
293+
nullptr, adaptermeshtying_->master_to_slave(*extractor_->extract_cond_vector(*vel)));
294294
}
295295

296296
/*----------------------------------------------------------------------*/
@@ -410,7 +410,7 @@ void SSI::SSICouplingNonMatchingVolume::set_velocity_fields(
410410
scatra->scatra_field()->set_convective_velocity(
411411
*volcoupl_structurescatra_->apply_vector_mapping21(*convvel));
412412
scatra->scatra_field()->set_velocity_field(
413-
nullptr, volcoupl_structurescatra_->apply_vector_mapping21(*vel), nullptr);
413+
nullptr, volcoupl_structurescatra_->apply_vector_mapping21(*vel));
414414
}
415415

416416
/*----------------------------------------------------------------------*/
@@ -606,7 +606,7 @@ void SSI::SSICouplingMatchingVolumeAndBoundary::set_velocity_fields(
606606
std::shared_ptr<const Core::LinAlg::Vector<double>> vel)
607607
{
608608
scatra->scatra_field()->set_convective_velocity(*convvel);
609-
scatra->scatra_field()->set_velocity_field(nullptr, vel, nullptr);
609+
scatra->scatra_field()->set_velocity_field(nullptr, vel);
610610
}
611611

612612
/*----------------------------------------------------------------------*/

src/ssti/4C_ssti_algorithm.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,9 +290,9 @@ void SSTI::SSTIAlgorithm::distribute_structure_solution() const
290290
const auto convective_velocity = Core::LinAlg::create_vector(*structure_->dof_row_map());
291291

292292
scatra_field()->set_convective_velocity(*convective_velocity);
293-
scatra_field()->set_velocity_field(nullptr, structure_->velnp(), nullptr);
293+
scatra_field()->set_velocity_field(nullptr, structure_->velnp());
294294
thermo_field()->set_convective_velocity(*convective_velocity);
295-
thermo_field()->set_velocity_field(nullptr, structure_->velnp(), nullptr);
295+
thermo_field()->set_velocity_field(nullptr, structure_->velnp());
296296
}
297297

298298
/*----------------------------------------------------------------------*/

0 commit comments

Comments
 (0)