Skip to content

Commit bce2522

Browse files
authored
Merge pull request #185 from thelfer/147-create-an-integrate_debug-function-which-could-generate-mtest-files-on-integration-errors
147 create an integrate debug function which could generate mtest files on integration errors
2 parents 725405e + d6c57b9 commit bce2522

31 files changed

Lines changed: 1427 additions & 82 deletions

bindings/c/include/MGIS/Behaviour/Integrate.h

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,14 @@ MGIS_C_EXPORT mgis_status mgis_bv_free_behaviour_integration_options(
107107
* \param[in,out] d: behaviour data
108108
* \param[in,out] b: behaviour
109109
*/
110-
111110
MGIS_C_EXPORT mgis_status mgis_bv_integrate(int* const,
112111
mgis_bv_BehaviourDataView* const,
113112
const mgis_bv_Behaviour* const);
113+
//! \brief debugging version
114+
MGIS_C_EXPORT mgis_status
115+
mgis_bv_integrate_debug(int* const,
116+
mgis_bv_BehaviourDataView* const,
117+
const mgis_bv_Behaviour* const);
114118
/*!
115119
* \brief integrate the behaviour. The returned value has the following
116120
* meaning:
@@ -130,6 +134,9 @@ MGIS_C_EXPORT mgis_status mgis_bv_integrate(int* const,
130134
MGIS_C_EXPORT mgis_status mgis_bv_integrate_2(int* const,
131135
mgis_bv_BehaviourData* const,
132136
const mgis_bv_Behaviour* const);
137+
//! \brief debugging version
138+
MGIS_C_EXPORT mgis_status mgis_bv_integrate_debug_2(
139+
int* const, mgis_bv_BehaviourData* const, const mgis_bv_Behaviour* const);
133140
/*!
134141
* \brief integrate the behaviour for a range of integration points. The
135142
* returned value has the following meaning:
@@ -152,6 +159,14 @@ mgis_bv_integrate_material_data_manager_part(int* const,
152159
const mgis_real,
153160
const mgis_size_type,
154161
const mgis_size_type);
162+
//! \brief debugging version
163+
MGIS_C_EXPORT mgis_status
164+
mgis_bv_integrate_debug_material_data_manager_part(int* const,
165+
mgis_bv_MaterialDataManager* const,
166+
const mgis_bv_IntegrationType,
167+
const mgis_real,
168+
const mgis_size_type,
169+
const mgis_size_type);
155170
/*!
156171
* \brief integrate the behaviour for a range of integration points. The
157172
* returned value has the following meaning:
@@ -172,14 +187,29 @@ mgis_bv_integrate_material_data_manager(int* const,
172187
mgis_bv_MaterialDataManager* const,
173188
const mgis_bv_IntegrationType,
174189
const mgis_real);
190+
//! \brief debugging version
191+
MGIS_C_EXPORT mgis_status mgis_bv_integrate_debug_material_data_manager(
192+
int* const,
193+
mgis_ThreadPool* const,
194+
mgis_bv_MaterialDataManager* const,
195+
const mgis_bv_IntegrationType,
196+
const mgis_real);
175197

176198
MGIS_C_EXPORT mgis_status
177199
mgis_bv_integrate_material_data_manager_with_options(int* const,
178200
mgis_ThreadPool* const,
179201
mgis_bv_MaterialDataManager* const,
180202
mgis_bv_BehaviourIntegrationOptions* const,
181203
const mgis_real);
182-
204+
//! \brief debugging version
205+
MGIS_C_EXPORT mgis_status
206+
mgis_bv_integrate_debug_material_data_manager_with_options(
207+
int* const,
208+
mgis_ThreadPool* const,
209+
mgis_bv_MaterialDataManager* const,
210+
mgis_bv_BehaviourIntegrationOptions* const,
211+
const mgis_real);
212+
183213
#ifdef __cplusplus
184214
}
185215
#endif /* __cplusplus */

bindings/c/src/Integrate.cxx

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,31 @@ mgis_status mgis_bv_integrate(int* const r,
115115
return mgis_report_success();
116116
} // end of mgis_bv_integrate
117117

118+
mgis_status mgis_bv_integrate_debug(int* const r,
119+
mgis_bv_BehaviourDataView* const d,
120+
const mgis_bv_Behaviour* const b) {
121+
*r = mgis::behaviour::integrate_debug(*d, *b);
122+
if ((*r != 1) && (*r != 0)) {
123+
return mgis_report_failure("behaviour integration failed");
124+
}
125+
return mgis_report_success();
126+
} // end of mgis_bv_integrate
127+
118128
mgis_status mgis_bv_integrate_2(int* const r,
119129
mgis_bv_BehaviourData* const d,
120130
const mgis_bv_Behaviour* const b) {
121131
auto v = mgis::behaviour::make_view(*d);
122132
auto s = mgis_bv_integrate(r, &v, b);
123133
return s;
124-
} // end of mgis_bv_integrate2
134+
} // end of mgis_bv_integrate_2
135+
136+
mgis_status mgis_bv_integrate_debug_2(int* const r,
137+
mgis_bv_BehaviourData* const d,
138+
const mgis_bv_Behaviour* const b) {
139+
auto v = mgis::behaviour::make_view(*d);
140+
auto s = mgis_bv_integrate_debug(r, &v, b);
141+
return s;
142+
} // end of mgis_bv_integrate_debug_2
125143

126144
mgis_status mgis_bv_integrate_material_data_manager(
127145
int* const r,
@@ -141,6 +159,25 @@ mgis_status mgis_bv_integrate_material_data_manager(
141159
return mgis_report_success();
142160
} // end of mgis_bv_integrate_material_data_manager
143161

162+
mgis_status mgis_bv_integrate_debug_material_data_manager(
163+
int* const r,
164+
mgis_ThreadPool* const p,
165+
mgis_bv_MaterialDataManager* const m,
166+
const mgis_bv_IntegrationType i,
167+
const mgis_real dt) {
168+
*r = -1;
169+
try {
170+
*r =
171+
mgis::behaviour::integrate_debug(*p, *m, convertIntegrationType(i), dt);
172+
if ((*r != 1) && (*r != 0)) {
173+
return mgis_report_failure("behaviour integration failed");
174+
}
175+
} catch (...) {
176+
return mgis_handle_cxx_exception();
177+
}
178+
return mgis_report_success();
179+
} // end of mgis_bv_integrate_debug_material_data_manager
180+
144181
mgis_status mgis_bv_integrate_material_data_manager_with_options(
145182
int* const r,
146183
mgis_ThreadPool* const p,
@@ -159,6 +196,24 @@ mgis_status mgis_bv_integrate_material_data_manager_with_options(
159196
return mgis_report_success();
160197
} // end of mgis_bv_integrate_material_data_manager_with_options
161198

199+
mgis_status mgis_bv_integrate_debug_material_data_manager_with_options(
200+
int* const r,
201+
mgis_ThreadPool* const p,
202+
mgis_bv_MaterialDataManager* const m,
203+
mgis_bv_BehaviourIntegrationOptions* const o,
204+
const mgis_real dt) {
205+
*r = -1;
206+
try {
207+
*r = mgis::behaviour::integrate_debug(*p, *m, *o, dt).exit_status;
208+
if ((*r != 1) && (*r != 0)) {
209+
return mgis_report_failure("behaviour integration failed");
210+
}
211+
} catch (...) {
212+
return mgis_handle_cxx_exception();
213+
}
214+
return mgis_report_success();
215+
} // end of mgis_bv_integrate_debug_material_data_manager_with_options
216+
162217
mgis_status mgis_bv_integrate_material_data_manager_part(
163218
int* const r,
164219
mgis_bv_MaterialDataManager* const m,
@@ -178,4 +233,24 @@ mgis_status mgis_bv_integrate_material_data_manager_part(
178233
return mgis_report_success();
179234
} // end of mgis_bv_integrate_material_data_manager_part
180235

236+
mgis_status mgis_bv_integrate_debug_material_data_manager_part(
237+
int* const r,
238+
mgis_bv_MaterialDataManager* const m,
239+
const mgis_bv_IntegrationType i,
240+
const mgis_real dt,
241+
const mgis_size_type b,
242+
const mgis_size_type e) {
243+
*r = -1;
244+
try {
245+
*r = mgis::behaviour::integrate_debug(*m, convertIntegrationType(i), dt, b,
246+
e);
247+
if ((*r != 1) && (*r != 0)) {
248+
return mgis_report_failure("behaviour integration failed");
249+
}
250+
} catch (...) {
251+
return mgis_handle_cxx_exception();
252+
}
253+
return mgis_report_success();
254+
} // end of mgis_bv_integrate_debug_material_data_manager_part
255+
181256
} // end of extern "C"

bindings/fortran/src/mgis_behaviour.f90

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3718,6 +3718,28 @@ end function integrate_wrapper
37183718
type(mgis_status) :: s
37193719
s = integrate_wrapper(r, d%ptr, b%ptr)
37203720
end function integrate
3721+
! integrate_debug
3722+
function integrate_debug(r, d, b) result(s)
3723+
use mgis, only: mgis_status
3724+
implicit none
3725+
interface
3726+
function integrate_debug_wrapper(r, d, b) &
3727+
bind(c,name = 'mgis_bv_integrate_debug_2') result(s)
3728+
use, intrinsic :: iso_c_binding, only: c_ptr, c_int
3729+
use mgis, only: mgis_status
3730+
implicit none
3731+
integer(kind=c_int), intent(out) :: r
3732+
type(c_ptr), intent(in),value :: d
3733+
type(c_ptr), intent(in),value :: b
3734+
type(mgis_status) :: s
3735+
end function integrate_debug_wrapper
3736+
end interface
3737+
integer, intent(out) :: r
3738+
type(BehaviourData), intent(in) :: d
3739+
type(Behaviour), intent(in) :: b
3740+
type(mgis_status) :: s
3741+
s = integrate_debug_wrapper(r, d%ptr, b%ptr)
3742+
end function integrate_debug
37213743
!
37223744
function integrate_material_data_manager(r, p, m, i, dt) result(s)
37233745
use, intrinsic :: iso_c_binding, only: c_size_t
@@ -3748,6 +3770,35 @@ end function integrate_material_data_manager_wrapper
37483770
s = integrate_material_data_manager_wrapper(r, p%ptr, m%ptr, i, dt)
37493771
end function integrate_material_data_manager
37503772
!
3773+
function integrate_debug_material_data_manager(r, p, m, i, dt) result(s)
3774+
use, intrinsic :: iso_c_binding, only: c_size_t
3775+
use mgis_fortran_utilities, only: convert_to_c_index
3776+
use mgis, only: ThreadPool, mgis_status, report_failure
3777+
implicit none
3778+
interface
3779+
function integrate_debug_material_data_manager_wrapper(r, p, m, i, dt) &
3780+
bind(c,name = 'mgis_bv_integrate_debug_material_data_manager') &
3781+
result(s)
3782+
use, intrinsic :: iso_c_binding, only: c_ptr, c_int, c_double
3783+
use mgis, only: mgis_status
3784+
implicit none
3785+
integer(kind=c_int), intent(out) :: r
3786+
type(c_ptr), intent(in),value :: p
3787+
type(c_ptr), intent(in),value :: m
3788+
integer, intent(in),value :: i
3789+
real(kind = c_double), intent(in),value :: dt
3790+
type(mgis_status) :: s
3791+
end function integrate_debug_material_data_manager_wrapper
3792+
end interface
3793+
integer, intent(out) :: r
3794+
type(ThreadPool), intent(in) :: p
3795+
type(MaterialDataManager), intent(in) :: m
3796+
integer, intent(in) :: i
3797+
real(kind = 8), intent(in) :: dt
3798+
type(mgis_status) :: s
3799+
s = integrate_debug_material_data_manager_wrapper(r, p%ptr, m%ptr, i, dt)
3800+
end function integrate_debug_material_data_manager
3801+
!
37513802
function integrate_material_data_manager_with_options(r, p, m, i, dt) result(s)
37523803
use, intrinsic :: iso_c_binding, only: c_size_t
37533804
use mgis_fortran_utilities, only: convert_to_c_index
@@ -3776,6 +3827,35 @@ end function integrate_material_data_manager_with_options_wrapper
37763827
type(mgis_status) :: s
37773828
s = integrate_material_data_manager_with_options_wrapper(r, p%ptr, m%ptr, i%ptr, dt)
37783829
end function integrate_material_data_manager_with_options
3830+
!
3831+
function integrate_debug_material_data_manager_with_options(r, p, m, i, dt) result(s)
3832+
use, intrinsic :: iso_c_binding, only: c_size_t
3833+
use mgis_fortran_utilities, only: convert_to_c_index
3834+
use mgis, only: ThreadPool, mgis_status, report_failure
3835+
implicit none
3836+
interface
3837+
function integrate_debug_material_data_manager_with_options_wrapper(r, p, m, i, dt) &
3838+
bind(c,name = 'mgis_bv_integrate_debug_material_data_manager_with_options') &
3839+
result(s)
3840+
use, intrinsic :: iso_c_binding, only: c_ptr, c_int, c_double
3841+
use mgis, only: mgis_status
3842+
implicit none
3843+
integer(kind=c_int), intent(out) :: r
3844+
type(c_ptr), intent(in),value :: p
3845+
type(c_ptr), intent(in),value :: m
3846+
type(c_ptr), intent(in),value :: i
3847+
real(kind = c_double), intent(in),value :: dt
3848+
type(mgis_status) :: s
3849+
end function integrate_debug_material_data_manager_with_options_wrapper
3850+
end interface
3851+
integer, intent(out) :: r
3852+
type(ThreadPool), intent(in) :: p
3853+
type(MaterialDataManager), intent(in) :: m
3854+
type(BehaviourIntegrationOptions), intent(in) :: i
3855+
real(kind = 8), intent(in) :: dt
3856+
type(mgis_status) :: s
3857+
s = integrate_debug_material_data_manager_with_options_wrapper(r, p%ptr, m%ptr, i%ptr, dt)
3858+
end function integrate_debug_material_data_manager_with_options
37793859
!
37803860
function integrate_material_data_manager_part(r, m, i, dt, ni, ne) result(s)
37813861
use, intrinsic :: iso_c_binding, only: c_size_t
@@ -3818,4 +3898,46 @@ end function integrate_material_data_manager_part_wrapper
38183898
nec = nec + 1
38193899
s = integrate_material_data_manager_part_wrapper(r, m%ptr, i, dt, nic, nec)
38203900
end function integrate_material_data_manager_part
3901+
!
3902+
function integrate_debug_material_data_manager_part(r, m, i, dt, ni, ne) result(s)
3903+
use, intrinsic :: iso_c_binding, only: c_size_t
3904+
use mgis_fortran_utilities, only: convert_to_c_index
3905+
use mgis, only: mgis_status, report_failure
3906+
implicit none
3907+
interface
3908+
function integrate_debug_material_data_manager_part_wrapper(r, m, i, dt, ni, ne) &
3909+
bind(c,name = 'mgis_bv_integrate_debug_material_data_manager_part') &
3910+
result(s)
3911+
use, intrinsic :: iso_c_binding, only: c_ptr, c_size_t, c_int, c_double
3912+
use mgis, only: mgis_status
3913+
implicit none
3914+
integer(kind=c_int), intent(out) :: r
3915+
type(c_ptr), intent(in),value :: m
3916+
integer, intent(in),value :: i
3917+
real(kind = c_double), intent(in),value :: dt
3918+
integer(kind = c_size_t), intent(in),value :: ni
3919+
integer(kind = c_size_t), intent(in),value :: ne
3920+
type(mgis_status) :: s
3921+
end function integrate_debug_material_data_manager_part_wrapper
3922+
end interface
3923+
integer, intent(out) :: r
3924+
type(MaterialDataManager), intent(in) :: m
3925+
integer, intent(in),value :: i
3926+
real(kind = 8), intent(in) :: dt
3927+
integer :: ni
3928+
integer :: ne
3929+
type(mgis_status) :: s
3930+
integer(kind=c_size_t) :: nic
3931+
integer(kind=c_size_t) :: nec
3932+
if(.not. convert_to_c_index(nic, ni)) then
3933+
s = report_failure("invalid index")
3934+
return
3935+
end if
3936+
if(.not. convert_to_c_index(nec, ne)) then
3937+
s = report_failure("invalid index")
3938+
return
3939+
end if
3940+
nec = nec + 1
3941+
s = integrate_debug_material_data_manager_part_wrapper(r, m%ptr, i, dt, nic, nec)
3942+
end function integrate_debug_material_data_manager_part
38213943
end module mgis_behaviour

bindings/julia/src/Integrate.cxx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ static int integrateBehaviourData1(mgis::behaviour::BehaviourData& d,
2424
auto v = mgis::behaviour::make_view(d);
2525
const auto s = mgis::behaviour::integrate(v, b);
2626
return s;
27-
} // end of integrateBehaviourData
27+
} // end of integrateBehaviourData1
28+
29+
static int integrateDebugBehaviourData1(mgis::behaviour::BehaviourData& d,
30+
const mgis::behaviour::Behaviour& b) {
31+
auto v = mgis::behaviour::make_view(d);
32+
const auto s = mgis::behaviour::integrate_debug(v, b);
33+
return s;
34+
} // end of integrateDebugBehaviourData
2835

2936
void declareIntegrate(jlcxx::Module& m) {
3037
using mgis::behaviour::IntegrationType;
@@ -65,6 +72,9 @@ void declareIntegrate(jlcxx::Module& m) {
6572
int (*integrate_ptr1)(mgis::behaviour::BehaviourDataView&,
6673
const mgis::behaviour::Behaviour&) =
6774
mgis::behaviour::integrate;
75+
int (*integrate_debug_ptr1)(mgis::behaviour::BehaviourDataView&,
76+
const mgis::behaviour::Behaviour&) =
77+
mgis::behaviour::integrate_debug;
6878
// int (*integrate_ptr2)(mgis::behaviour::MaterialDataManager&,
6979
// const IntegrationType, const mgis::real,
7080
// const mgis::size_type, const mgis::size_type) =
@@ -76,6 +86,8 @@ void declareIntegrate(jlcxx::Module& m) {
7686

7787
m.method("integrate", &integrateBehaviourData1);
7888
m.method("integrate", integrate_ptr1);
89+
m.method("integrate_debug", &integrateDebugBehaviourData1);
90+
m.method("integrate_debug", integrate_debug_ptr1);
7991
// boost::python::def("integrate", integrate_ptr2);
8092
// boost::python::def("integrate", integrate_ptr3);
8193
} // end of declareIntegrate

0 commit comments

Comments
 (0)