Logbook  (07-04-2025)
Static problems
exact_solution.cpp
1 /******************************************************************************
2  * Copyright (C) Siarhei Uzunbajakau, 2023.
3  *
4  * This program is free software. You can use, modify, and redistribute it under
5  * the terms of the GNU Lesser General Public License as published by the Free
6  * Software Foundation, either version 3 or (at your option) any later version.
7  * This program is distributed without any warranty.
8  *
9  * Refer to COPYING.LESSER for more details.
10  ******************************************************************************/
11 
12 #include "exact_solution.hpp"
13 
14 #pragma GCC diagnostic push
15 #pragma GCC diagnostic ignored "-Wunused-parameter"
16 
17 using namespace dealii;
18 
19 ExactSolutionMMSVTI_Jf::ExactSolutionMMSVTI_Jf()
20  : Function<3>(3)
21 {
22 }
23 
24 void
25 ExactSolutionMMSVTI_Jf::vector_value_list(
26  const std::vector<Point<3>>& r,
27  std::vector<Vector<double>>& values) const
28 {
29  Assert(values.size() == r.size(),
30  ExcDimensionMismatch(values.size(), r.size()));
31 
32  Tensor<1, 3> Jf;
33 
34  for (unsigned int i = 0; i < values.size(); i++) {
35  Jf = volume_free_current_density(r[i][0], r[i][1], mu_0, k);
36 
37  values[i][0] = Jf[0];
38  values[i][1] = Jf[1];
39  values[i][2] = Jf[2];
40  }
41 }
42 
43 ExactSolutionMMSVTI_B::ExactSolutionMMSVTI_B()
44  : Function<3>(3)
45 {
46 }
47 
48 void
49 ExactSolutionMMSVTI_B::vector_value_list(
50  const std::vector<Point<3>>& r,
51  std::vector<Vector<double>>& values) const
52 {
53  Assert(values.size() == r.size(),
54  ExcDimensionMismatch(values.size(), r.size()));
55 
56  Tensor<1, 3> B;
57 
58  for (unsigned int i = 0; i < values.size(); i++) {
59  B = magnetic_field(r[i][0], r[i][1], k);
60 
61  values[i][0] = B[0];
62  values[i][1] = B[1];
63  values[i][2] = B[2];
64  }
65 }
66 
67 DirichletBC_MMSVTI_T::DirichletBC_MMSVTI_T()
68  : Function<3>(3)
69 {
70 }
71 
72 void
73 DirichletBC_MMSVTI_T::vector_value_list(
74  const std::vector<Point<3>>& r,
75  std::vector<Vector<double>>& values) const
76 {
77  Assert(values.size() == r.size(),
78  ExcDimensionMismatch(values.size(), r.size()));
79 
80  Tensor<1, 3> T;
81 
82  for (unsigned int i = 0; i < values.size(); i++) {
83  T = current_vector_potential(r[i][0], r[i][1], mu_0, k);
84 
85  values[i][0] = T[0];
86  values[i][1] = T[1];
87  values[i][2] = T[2];
88  }
89 }
90 
91 DirichletBC_MMSVTI_A::DirichletBC_MMSVTI_A()
92  : Function<3>(3)
93 {
94 }
95 
96 void
97 DirichletBC_MMSVTI_A::vector_value_list(
98  const std::vector<Point<3>>& r,
99  std::vector<Vector<double>>& values) const
100 {
101  Assert(values.size() == r.size(),
102  ExcDimensionMismatch(values.size(), r.size()));
103 
104  Tensor<1, 3> A;
105 
106  for (unsigned int i = 0; i < values.size(); i++) {
107  A = magnetic_vector_potential(r[i][0], r[i][1], k);
108 
109  values[i][0] = A[0];
110  values[i][1] = A[1];
111  values[i][2] = A[2];
112  }
113 }
const double k
The scaling parameter.
Definition: settings.hpp:44
const double mu_0
The permeability of free space.
Definition: settings.hpp:39