Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
SolverStat.cc
1/*
2 * Copyright 2020 IFPEN-CEA
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * SPDX-License-Identifier: Apache-2.0
17 */
18
19/* Author : havep at Wed Sep 5 15:48:15 2012
20 * Generated by createNew
21 */
22
23#include "SolverStat.h"
24
25#include <iomanip>
26
27#include <arccore/trace/TraceMessage.h>
28
29/*---------------------------------------------------------------------------*/
30
31namespace Alien
32{
33
34using namespace Arccore;
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
39class SolverStat::InternalTraceSizer : public Arccore::ITraceMessageListener
40{
41 public:
42 InternalTraceSizer(Integer& m)
43 : m_size(m)
44 {}
45
46 public:
48 bool visitMessage(const Arccore::TraceMessageListenerArgs& args) override;
49
50 private:
51 Integer& m_size;
52};
53
54/*---------------------------------------------------------------------------*/
55
57const Arccore::TraceMessageListenerArgs& args)
58{
59 // const TraceMessage * message = args.message();
60 ConstArrayView<char> input = args.buffer();
61 m_size = input.size();
62 return true; // Le ITraceMessageMng won't write this message when leaving
63 // ITraceMessageListener
64}
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67
69: m_solve_count(0)
70, m_iteration_count(0)
71, m_last_iteration_count(0)
72, m_initialization_time(0)
73, m_initialization_cpu_time(0)
74, m_prepare_time(0)
75, m_prepare_cpu_time(0)
76, m_last_prepare_time(0)
77, m_last_prepare_cpu_time(0)
78, m_solve_time(0)
79, m_solve_cpu_time(0)
80, m_last_solve_time(0)
81, m_last_solve_cpu_time(0)
82{}
83
84/*---------------------------------------------------------------------------*/
85void SolverStat::reset()
86{
87 m_solve_count = 0;
88 m_iteration_count = 0;
89 m_last_iteration_count = 0;
90 m_initialization_time = m_initialization_cpu_time = 0;
91 m_prepare_time = m_prepare_cpu_time = 0;
92 m_last_prepare_time = m_last_prepare_cpu_time = 0;
93 m_solve_time = m_solve_cpu_time = 0;
94 m_last_solve_time = m_last_solve_cpu_time = 0;
95}
96
97Integer
98SolverStat::solveCount() const
99{
100 return m_solve_count;
101}
102
103/*---------------------------------------------------------------------------*/
104
105Integer
106SolverStat::iterationCount() const
107{
108 return m_iteration_count;
109}
110
111/*---------------------------------------------------------------------------*/
112
113Real SolverStat::initializationTime() const
114{
115 return m_initialization_time;
116}
117
118/*---------------------------------------------------------------------------*/
119
120Real SolverStat::initializationCpuTime() const
121{
122 return m_initialization_cpu_time;
123}
124
125/*---------------------------------------------------------------------------*/
126
127Real SolverStat::prepareTime() const
128{
129 return m_prepare_time;
130}
131
132/*---------------------------------------------------------------------------*/
133
134Real SolverStat::prepareCpuTime() const
135{
136 return m_prepare_cpu_time;
137}
138
139/*---------------------------------------------------------------------------*/
140
141Real SolverStat::solveTime() const
142{
143 return m_solve_time;
144}
145
146/*---------------------------------------------------------------------------*/
147
148Real SolverStat::solveCpuTime() const
149{
150 return m_solve_cpu_time;
151}
152
153/*---------------------------------------------------------------------------*/
154
155Integer
156SolverStat::lastIterationCount() const
157{
158 return m_last_iteration_count;
159}
160
161/*---------------------------------------------------------------------------*/
162
163Real SolverStat::lastPrepareTime() const
164{
165 return m_last_prepare_time;
166}
167
168/*---------------------------------------------------------------------------*/
169
170Real SolverStat::lastPrepareCpuTime() const
171{
172 return m_last_prepare_cpu_time;
173}
174
175/*---------------------------------------------------------------------------*/
176
177Real SolverStat::lastSolveTime() const
178{
179 return m_last_solve_time;
180}
181
182/*---------------------------------------------------------------------------*/
183
184Real SolverStat::lastSolveCpuTime() const
185{
186 return m_last_solve_cpu_time;
187}
188
189/*---------------------------------------------------------------------------*/
190
191void SolverStat::print(
192ITraceMng* traceMng, const Alien::SolverStatus& status, String title) const
193{
194 Integer prefix_size = 0;
195 InternalTraceSizer sizer(prefix_size);
196 if (!traceMng)
197 return;
198 traceMng->addListener(&sizer);
199 traceMng->info() << " ";
200 traceMng->removeListener(&sizer);
201 if (prefix_size > 0)
202 --prefix_size; // remove whitespace
203
204 std::ostringstream oss;
205 _internalPrint(oss, prefix_size, status, title);
206 traceMng->info() << oss.str();
207}
208
209/*---------------------------------------------------------------------------*/
210
211void SolverStat::_internalPrint(std::ostream& o, const Integer prefix_size,
212 const Alien::SolverStatus& status, String title = String()) const
213{
214 char* prefix = NULL;
215 if (prefix_size == 0) {
216 prefix = new char[2];
217 prefix[0] = '\n';
218 prefix[1] = 0;
219 }
220 else {
221 prefix = new char[prefix_size + 1];
222 prefix[0] = '\n';
223 for (Integer i = 1; i < prefix_size; ++i)
224 prefix[i] = ' ';
225 prefix[prefix_size] = 0;
226 }
227
228 auto ss = o.precision();
229 o << "|--------------------------------------------------------|";
230 if (!title.null()) {
231 o << prefix << "| " << title << prefix
232 << "|--------------------------------------------------------|";
233 }
234 o << prefix << "| Last convergence : " << std::boolalpha << status.succeeded
235 << prefix << "| Last iteration number : " << status.iteration_count << prefix
236 << "| Last relative residual: " << status.residual << std::setprecision(5) << prefix
237 << "| Last prepare time : wct:" << std::setw(10) << lastPrepareTime()
238 << " ; cpu:" << std::setw(10) << lastPrepareCpuTime() << prefix
239 << "| Last solve time : wct:" << std::setw(10) << lastSolveTime()
240 << " ; cpu:" << std::setw(10) << lastSolveCpuTime() << prefix
241 << "| Initialization time : wct:" << std::setw(10) << initializationTime()
242 << " ; cpu:" << std::setw(10) << initializationCpuTime() << prefix
243 << "| Total prepare time : wct:" << std::setw(10) << prepareTime()
244 << " ; cpu:" << std::setw(10) << prepareCpuTime() << prefix
245 << "| Total solve time : wct:" << std::setw(10) << solveTime()
246 << " ; cpu:" << std::setw(10) << solveCpuTime() << prefix
247 << "| Total iterations : " << iterationCount() << prefix
248 << "| Solve count : " << solveCount() << prefix
249 << "|--------------------------------------------------------|";
250 o.precision(ss);
251 delete[] prefix;
252}
253
254/*---------------------------------------------------------------------------*/
255
256} // namespace Alien
257
258/*---------------------------------------------------------------------------*/
bool visitMessage(const Arccore::TraceMessageListenerArgs &args) override
Implement ITraceMessageListener.
Definition SolverStat.cc:56
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17
Arccore::Integer iteration_count
The number of iterations.
Arccore::Real residual
The residual.
bool succeeded
Whether or not the solver succeeded.