From 41970608d25ebed89a5fde5655a5ecdedf092478 Mon Sep 17 00:00:00 2001 From: haykh Date: Sun, 28 Jul 2024 20:15:01 -0400 Subject: [PATCH] upd --- docs/assets/images/howto/nt2-demo-5.png | Bin 0 -> 43745 bytes docs/code/problem_generators.md | 95 +++++++++++++++++++- docs/getting-started/compile-run.md | 65 ++++++++++++++ docs/getting-started/docker.md | 2 +- docs/getting-started/faq.md | 68 +++----------- docs/getting-started/vis.md | 105 +++++++++++++--------- extra_sass/elements/_admonitions.css.scss | 22 +++++ 7 files changed, 259 insertions(+), 98 deletions(-) create mode 100644 docs/assets/images/howto/nt2-demo-5.png diff --git a/docs/assets/images/howto/nt2-demo-5.png b/docs/assets/images/howto/nt2-demo-5.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb35681881a5cf58c38171aaaf018ace7f8f5bb GIT binary patch literal 43745 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 buffer,//(2)! + std::size_t index,//(3)! + const Domain& domain) {//(4)! + if (name == "my_field") { + // 1D example (can be easily generalized) + if constexpr (M::Dim == Dim::_1D) { + const auto& EM = domain.fields.em; + Kokkos::parallel_for( + "MyField", + domain.mesh.rangeActiveCells(), + Lambda(index_t i1) { + const auto i1_ = COORD(i1); + coord_t x_Ph { ZERO }; + // convert coordinate to physical basis: + metric.template convert({ i1_ }, x_Ph); + // compute whatever needs to be written + // ... may also depend on the EM fields from the `domain` + // ... in this example -- output Ex * x^2 + buffer(i1, index) = SQR(x_Ph[0]) * + metric.template transform<1, Idx::U, Idx::T>( + { i1_ + HALF }, + EM(i1, em::ex1)); + // here we also convert Ex1(i + 1/2) to Tetrad basis + }); + } + } else { + raise::Error("Custom output not provided", HERE); + } +} +``` + +1. the same name that went into the input file +2. buffer array where the field is going to be written into +3. an index of the buffer array where the field is written into +4. reference of the local subdomain + +Alternatively, you can precompute the desired quantity in the `CustomPostStep` function and then simply copy to the buffer in the same function: + +```c++ +// assuming 2D and that the desired quantity is saved in `cbuff` +template +struct PGen : public arch::ProblemGenerator { + // ... + + array_t cbuff; + + // ... + + void CustomPostStep(std::size_t step, long double, Domain& domain) { + if (step == 0) { + // allocate the array at time = 0 + cbuff = array_t("cbuff", + domain.mesh.n_all(in::x1), + domain.mesh.n_all(in::x2)); + } + // populate the buffer (can be done at specific timesteps) + Kokkos::parallel_for( + "FillCbuff", + domain.mesh.rangeActiveCells(), + Lambda(index_t i1, index_t i2) { + // ... + }); + } + + void CustomFieldOutput(const std::string& name, + ndfield_t buffer, + std::size_t index, + const Domain&) { + if (name == "my_field") { + Kokkos::deep_copy(Kokkos::subview(buffer, Kokkos::ALL, Kokkos::ALL, index), cbuff); + } else { + // ... + } + } +}; +``` + +Keep in mind that the custom field output is written as-is, i.e., no additional interpolation or transformation is applied. So make sure the quantity you output is covariant (i.e., does not depend on the resolution or the stretching of coordinates; essentially, always output "physical" covariant/contravariant vectors or transform them to the tetrad basis). {% include "html/d3js.html" %} -