Skip to content

Commit 6f845b7

Browse files
authored
Merge pull request #702 from lkoeglmeier/Add-output-for-1d-arteries
Add runtime output to 1d arteries
2 parents a5c0a1e + 0143223 commit 6f845b7

File tree

2 files changed

+103
-96
lines changed

2 files changed

+103
-96
lines changed

src/art_net/4C_art_net_explicitintegration.cpp

Lines changed: 95 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "4C_fem_condition_utils.hpp"
1414
#include "4C_fem_general_element.hpp"
1515
#include "4C_global_data.hpp"
16+
#include "4C_io_discretization_visualization_writer_mesh.hpp"
1617
#include "4C_linalg_utils_densematrix_communication.hpp"
1718
#include "4C_linalg_utils_sparse_algebra_assemble.hpp"
1819
#include "4C_linalg_utils_sparse_algebra_create.hpp"
@@ -42,8 +43,19 @@ Arteries::ArtNetExplicitTimeInt::ArtNetExplicitTimeInt(
4243
Core::IO::DiscretizationWriter& output)
4344
: TimInt(actdis, linsolvernumber, probparams, artparams, output)
4445
{
45-
// exit(1);
46+
const int restart_step = Global::Problem::instance()->restart();
47+
if (restart_step > 0)
48+
{
49+
FourC::Core::IO::DiscretizationReader reader(
50+
discret_, Global::Problem::instance()->input_control_file(), restart_step);
51+
52+
time_ = reader.read_double("time");
53+
}
4654

55+
visualization_writer_ = std::make_unique<Core::IO::DiscretizationVisualizationWriterMesh>(
56+
actdis, Core::IO::visualization_parameters_factory(
57+
Global::Problem::instance()->io_params().sublist("RUNTIME VTK OUTPUT"),
58+
*Global::Problem::instance()->output_control_file(), time_));
4759
} // ArtNetExplicitTimeInt::ArtNetExplicitTimeInt
4860

4961

@@ -614,9 +626,84 @@ void Arteries::ArtNetExplicitTimeInt::load_state()
614626
return;
615627
} // ArtNetExplicitTimeInt::LoadState
616628

629+
void Arteries::ArtNetExplicitTimeInt::collect_runtime_output_data(bool CoupledTo3D, int step)
630+
{
631+
visualization_writer_->append_result_data_vector_with_context(
632+
*qanp_, Core::IO::OutputEntity::dof, {"qanp"});
633+
634+
// write domain decomposition for visualization (only once!)
635+
if (step_ == upres_) visualization_writer_->append_element_owner("Owner");
636+
637+
this->calc_postprocessing_values();
638+
639+
visualization_writer_->append_result_data_vector_with_context(
640+
*qn_, Core::IO::OutputEntity::node, {"one_d_artery_flow"});
641+
642+
visualization_writer_->append_result_data_vector_with_context(
643+
*on_, Core::IO::OutputEntity::node, {"one_d_artery_pressure"});
644+
645+
visualization_writer_->append_result_data_vector_with_context(
646+
*an_, Core::IO::OutputEntity::node, {"one_d_artery_area"});
647+
648+
if (solvescatra_)
649+
{
650+
this->calc_scatra_from_scatra_fw(export_scatra_, scatraO2np_);
651+
visualization_writer_->append_result_data_vector_with_context(
652+
*export_scatra_, Core::IO::OutputEntity::node, {"one_d_o2_scatra"});
653+
}
654+
655+
656+
visualization_writer_->append_result_data_vector_with_context(
657+
*Wfnp_, Core::IO::OutputEntity::node, {"forward_speed"});
658+
659+
visualization_writer_->append_result_data_vector_with_context(
660+
*Wfo_, Core::IO::OutputEntity::node, {"forward_speed0"});
661+
662+
visualization_writer_->append_result_data_vector_with_context(
663+
*Wbnp_, Core::IO::OutputEntity::node, {"backward_speed"});
664+
665+
visualization_writer_->append_result_data_vector_with_context(
666+
*Wbo_, Core::IO::OutputEntity::node, {"backward_speed0"});
667+
668+
if (CoupledTo3D)
669+
{
670+
output_.write_int("Actual_RedD_step", step);
671+
}
672+
}
673+
674+
void Arteries::ArtNetExplicitTimeInt::output_restart(bool CoupledTo3D, int step)
675+
{
676+
// step number and time (only after that data output is possible)
677+
output_.new_step(step_, time_);
678+
679+
// "volumetric flow rate/cross-sectional area" vector
680+
output_.write_vector("qanp", qanp_);
681+
682+
// Export postpro results
683+
this->calc_postprocessing_values();
684+
output_.write_vector("one_d_artery_flow", qn_);
685+
output_.write_vector("one_d_artery_pressure", on_);
686+
output_.write_vector("one_d_artery_area", an_);
687+
688+
if (solvescatra_)
689+
{
690+
this->calc_scatra_from_scatra_fw(export_scatra_, scatraO2np_);
691+
output_.write_vector("one_d_o2_scatra", export_scatra_);
692+
}
693+
694+
695+
output_.write_vector("forward_speed", Wfnp_);
696+
output_.write_vector("forward_speed0", Wfo_);
697+
output_.write_vector("backward_speed", Wbnp_);
698+
output_.write_vector("backward_speed0", Wbo_);
699+
700+
if (CoupledTo3D)
701+
{
702+
output_.write_int("Actual_RedD_step", step);
703+
}
704+
}
617705

618706
/*----------------------------------------------------------------------*
619-
| output of solution vector to binio ismail 07/09|
620707
*----------------------------------------------------------------------*/
621708
void Arteries::ArtNetExplicitTimeInt::output(
622709
bool CoupledTo3D, std::shared_ptr<Teuchos::ParameterList> CouplingParams)
@@ -645,103 +732,15 @@ void Arteries::ArtNetExplicitTimeInt::output(
645732

646733
if (step_ % upres_ == 0)
647734
{
648-
// step number and time
649-
output_.new_step(step_, time_);
650-
// output_.write_vector("NodeIDs",nodeIds_);
651-
652-
// "volumetric flow rate/cross-sectional area" vector
653-
output_.write_vector("qanp", qanp_);
735+
visualization_writer_->reset();
654736

737+
collect_runtime_output_data(CoupledTo3D, step);
655738

656-
// write domain decomposition for visualization (only once!)
657-
if (step_ == upres_) output_.write_element_data(true);
658-
659-
// #endif
660-
// ------------------------------------------------------------------
661-
// Export gnuplot format arteries
662-
// ------------------------------------------------------------------
663-
664-
Teuchos::ParameterList params;
665-
// other parameters that might be needed by the elements
666-
params.set("total time", time_);
667-
668-
// set the dof vector values
669-
// discret_->ClearState();
670-
// discret_->set_state("qanp",qanp_);
671-
672-
// call the gnuplot writer
673-
// artgnu_->Write(params);
674-
// discret_->ClearState();
675-
676-
// Export postpro results
677-
this->calc_postprocessing_values();
678-
output_.write_vector("one_d_artery_flow", qn_);
679-
output_.write_vector("one_d_artery_pressure", on_);
680-
output_.write_vector("one_d_artery_area", an_);
681-
682-
if (solvescatra_)
683-
{
684-
this->calc_scatra_from_scatra_fw(export_scatra_, scatraO2np_);
685-
output_.write_vector("one_d_o2_scatra", export_scatra_);
686-
}
687-
688-
output_.write_vector("forward_speed", Wfnp_);
689-
output_.write_vector("forward_speed0", Wfo_);
690-
output_.write_vector("backward_speed", Wbnp_);
691-
output_.write_vector("backward_speed0", Wbo_);
692-
693-
if (CoupledTo3D)
694-
{
695-
output_.write_int("Actual_RedD_step", step);
696-
}
739+
visualization_writer_->write_to_disk(time_, step_);
697740
}
698-
// write restart also when uprestart_ is not a integer multiple of upres_
699-
else if (uprestart_ != 0 && step_ % uprestart_ == 0)
741+
if (uprestart_ != 0 && step_ % uprestart_ == 0)
700742
{
701-
// step number and time
702-
output_.new_step(step_, time_);
703-
704-
// "volumetric flow rate/cross-sectional area" vector
705-
output_.write_vector("qanp", qanp_);
706-
707-
// Export postpro results
708-
this->calc_postprocessing_values();
709-
output_.write_vector("one_d_artery_flow", qn_);
710-
output_.write_vector("one_d_artery_pressure", on_);
711-
output_.write_vector("one_d_artery_area", an_);
712-
713-
if (solvescatra_)
714-
{
715-
this->calc_scatra_from_scatra_fw(export_scatra_, scatraO2np_);
716-
output_.write_vector("one_d_o2_scatra", export_scatra_);
717-
}
718-
719-
720-
output_.write_vector("forward_speed", Wfnp_);
721-
output_.write_vector("forward_speed0", Wfo_);
722-
output_.write_vector("backward_speed", Wbnp_);
723-
output_.write_vector("backward_speed0", Wbo_);
724-
725-
// ------------------------------------------------------------------
726-
// Export gnuplot format arteries
727-
// ------------------------------------------------------------------
728-
// #endif
729-
Teuchos::ParameterList params;
730-
// other parameters that might be needed by the elements
731-
params.set("total time", time_);
732-
733-
// set the dof vector values
734-
// discret_->ClearState();
735-
// discret_->set_state("qanp",qanp_);
736-
737-
// call the gnuplot writer
738-
// artgnu_->Write(params);
739-
// discret_->ClearState();
740-
741-
if (CoupledTo3D)
742-
{
743-
output_.write_int("Actual_RedD_step", step);
744-
}
743+
output_restart(CoupledTo3D, step);
745744
}
746745

747746
// -------------------------------------------------------------------
@@ -756,7 +755,7 @@ void Arteries::ArtNetExplicitTimeInt::output(
756755
time_ = time_backup;
757756
}
758757

759-
return;
758+
760759
} // ArteryExplicitTimeInt::Output
761760

762761

src/art_net/4C_art_net_explicitintegration.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "4C_art_net_timint.hpp"
1515
#include "4C_fem_discretization.hpp"
1616
#include "4C_io.hpp"
17+
#include "4C_io_discretization_visualization_writer_mesh.hpp"
1718
#include "4C_linalg_mapextractor.hpp"
1819
#include "4C_linalg_sparsematrix.hpp"
1920
#include "4C_linalg_vector.hpp"
@@ -102,6 +103,10 @@ namespace Arteries
102103
*/
103104
void output(bool CoupledTo3D, std::shared_ptr<Teuchos::ParameterList> CouplingParams) override;
104105

106+
void output_restart(bool CoupledTo3D, int step);
107+
108+
void collect_runtime_output_data(bool CoupledTo3D, int step);
109+
105110
/*!
106111
\brief Test results
107112
@@ -261,6 +266,9 @@ namespace Arteries
261266
//! @name 1D artery values at the junctions
262267
std::shared_ptr<std::map<const int, std::shared_ptr<Arteries::Utils::JunctionNodeParams>>>
263268
junc_nodal_vals_;
269+
270+
private:
271+
std::unique_ptr<Core::IO::DiscretizationVisualizationWriterMesh> visualization_writer_{nullptr};
264272
//@}
265273

266274
//@}

0 commit comments

Comments
 (0)