Skip to content

Commit ce331bc

Browse files
authored
update test_linear_algebra to output the Jacobian mask (#1501)
1 parent 02d46a6 commit ce331bc

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

unit_test/test_linear_algebra/test_linear_algebra.H

+84
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ void create_A(RArray2D& A) {
2121

2222
constexpr_for<1, INT_NEQS+1>([&] (auto irow)
2323
{
24+
2425
constexpr_for<1, INT_NEQS+1>([&] (auto jcol)
2526
{
2627

@@ -134,6 +135,89 @@ void linear_algebra() {
134135
std::cout << std::setw(20) << x(jcol) << " " << std::setw(20) << b(jcol) << std::endl;
135136
}
136137

138+
std::cout << std::endl;
139+
140+
std::cout << "the Jacobian mask seen by RHS::is_jacobian_term_used()" << std::endl;
141+
142+
// now output the Jacobian mask as seen by `is_jacobian_term_used<>()`
143+
144+
std::cout << std::setw(4) << "*" << " ";
145+
146+
constexpr_for<1, INT_NEQS+1>([&] (auto i)
147+
{
148+
if constexpr (i < INT_NEQS) {
149+
std::cout << std::setw(4) << short_spec_names_cxx[i-1] << " ";
150+
} else {
151+
std::cout << std::setw(4) << "enuc" << " ";
152+
}
153+
});
154+
155+
std::cout << std::endl;
156+
157+
constexpr_for<1, INT_NEQS+1>([&] (auto irow)
158+
{
159+
160+
if constexpr (irow < INT_NEQS) {
161+
std::cout << std::setw(4) << short_spec_names_cxx[irow-1] << " ";
162+
} else {
163+
std::cout << std::setw(4) << "enuc" << " ";
164+
}
165+
166+
constexpr_for<1, INT_NEQS+1>([&] (auto jcol)
167+
{
168+
std::cout << std::setw(4) << RHS::is_jacobian_term_used<irow, jcol>() << " ";
169+
});
170+
std::cout << std::endl;
171+
});
172+
173+
std::cout << std::endl;
174+
175+
// now try to output a Jacobian mask based on the actual Jacobian
176+
177+
ArrayUtil::MathArray2D<1, INT_NEQS, 1, INT_NEQS> jac;
178+
179+
burn_t burn_state;
180+
burn_state.rho = 1.e8;
181+
burn_state.T = 1.e9;
182+
for (int i = 0; i < NumSpec; ++i) {
183+
burn_state.xn[i] = 1.0 / static_cast<amrex::Real>(NumSpec);
184+
}
185+
186+
actual_jac(burn_state, jac);
187+
188+
std::cout << "the Jacobian mask from calling actual_jac" << std::endl;
189+
190+
std::cout << std::setw(4) << "*" << " ";
191+
192+
for (int i = 1; i <= INT_NEQS; ++i) {
193+
if (i < INT_NEQS) {
194+
std::cout << std::setw(4) << short_spec_names_cxx[i-1] << " ";
195+
} else {
196+
std::cout << std::setw(4) << "enuc" << " ";
197+
}
198+
}
199+
200+
std::cout << std::endl;
201+
202+
for (int irow = 1; irow <= INT_NEQS; ++irow) {
203+
if (irow < INT_NEQS) {
204+
std::cout << std::setw(4) << short_spec_names_cxx[irow-1] << " ";
205+
} else {
206+
std::cout << std::setw(4) << "enuc" << " ";
207+
}
208+
209+
for (int jcol = 1; jcol <= INT_NEQS; ++jcol) {
210+
211+
if (jac(irow, jcol) != 0.0) {
212+
std::cout << std::setw(4) << 1 << " ";
213+
} else {
214+
std::cout << std::setw(4) << 0 << " ";
215+
}
216+
}
217+
std::cout << std::endl;
218+
}
219+
220+
137221
}
138222

139223
#endif

0 commit comments

Comments
 (0)