Dear Sergey,
Long time.. Hope everything is going good at your end..
Very recently, I started putting some effort on moving my code to ZDPlasKin2.0a from ZDPlasKin1.3b. I'm facing the following issue during a call to
ZDPlasKin_bolsig_rates(lbolsig_force):
A successful call example (In subroutine "ZDPlasKin_bolsig_rates(lbolsig_force)" from "ZDPlasKin_get_conditions" subroutine):
**********************************************
Error BEFORE lforce call = 3.21258545E+000 (= reduced field)
lforce = T
F (= lbolsig_Maxwell_EEDF)
Error AFTER lforce call = 2.00000000E+000 (= error)
**********************************************
i, j, k = *** 31 84 (print out of 31 variables stored in "bolsig_cfg" variable)
5.00000000E+003 0.00000000E+000 3.21258545E+000 0.00000000E+000 7.16916196E+019 4.94722405E-005
2.69222788E-004 1.41844831E-001 1.41348313E-006 1.09350748E-006 8.51454177E-007
6.67281675E-007 0.00000000E+000 8.57332051E-001 5.28183823E-010 5.57735959E-010
0.00000000E+000 5.45072311E-010 0.00000000E+000 4.82899625E-010 4.87139713E-010
4.80064033E-007 5.49386057E-004 0.00000000E+000 0.00000000E+000 0.00000000E+000
0.00000000E+000 0.00000000E+000 0.00000000E+000 0.00000000E+000 0.00000000E+000
Completed calling ZDPlasKin_bolsig_SolveBoltzmann !!!
***************************************************************
(Print out of variables after returning from
ZDPlasKin_bolsig_rates -> Tgas, EbyN etc.)
5.00000000E+003 3.21258545E+000 0.00000000E+000 1.94568021E+004 6.71039570E+005
2.44343017E+004 2.08878357E+022 2.15577182E-011 8.33803347E-012 1.07347740E-011
***************************************************************
**********************************************
Error BEFORE lforce call = 3.21258545E+000
lforce = F
F
Error AFTER lforce call = 0.00000000E+000
**********************************************
An unsuccessful call example:
**********************************************
Error BEFORE lforce call = 3.30413208E+000
(= reduced field)
lforce = T
F
(= lbolsig_Maxwell_EEDF)
Error AFTER lforce call = 2.00000000E+000
(= error)
**********************************************
i, j, k = *** 31 84
(print out of 31 variables stored in "bolsig_cfg" variable)
5.00000000E+003 0.00000000E+000 3.30413208E+000 0.00000000E+000 7.16916196E+019 4.94722405E-005
2.69222788E-004 1.41844831E-001 1.41348313E-006 1.09350748E-006 8.51454177E-007
6.67281675E-007 0.00000000E+000 8.57332051E-001 5.28183823E-010 5.57735959E-010
0.00000000E+000 5.45072311E-010 0.00000000E+000 4.82899625E-010 4.87139713E-010
4.80064033E-007 5.49386057E-004 0.00000000E+000 0.00000000E+000 0.00000000E+000
0.00000000E+000 0.00000000E+000 0.00000000E+000 0.00000000E+000 0.00000000E+000
Code throws division by zero error inside ZDPlasKin_bolsig_SolveBoltzmann !!!
Program received signal SIGFPE, Arithmetic exception.
0x00007fffe31b435a in bolsig_mp_solvebol_ () from obj/bolsig_x86_64.so
Missing separate debuginfos, use: debuginfo-install glibc-2.17-307.el7.1.x86_64
(gdb) bt
#0 0x00007fffe31b435a in bolsig_mp_solvebol_ () from obj/bolsig_x86_64.so
#1 0x00007fffe31ae94e in zdplaskin_bolsig_solveboltzmann_ () from obj/bolsig_x86_64.so
#2 0x000000000046afca in zdplaskin::zdplaskin_bolsig_rates (
lbolsig_force=<error reading variable: Cannot access memory at address 0x2>) at src/zdplaskin_m.F90:496
#3 0x00000000004699d7 in zdplaskin::zdplaskin_get_conditions (
gas_temperature=<error reading variable: Cannot access memory at address 0x2>,
reduced_frequency=<error reading variable: Cannot access memory at address 0x64>,
reduced_field=<error reading variable: Cannot access memory at address 0x1>,
elec_temperature=<error reading variable: Cannot access memory at address 0x64>,
elec_drift_velocity=<error reading variable: Cannot access memory at address 0x2>,
elec_diff_coeff=1.0609978956802624e-313, elec_mobility_n=2.0887835689110546e+22,
elec_mu_eps_n=<error reading variable: Cannot access memory at address 0x0>,
elec_diff_eps_n=<error reading variable: Cannot access memory at address 0x0>,
elec_frequency_n=<error reading variable: Cannot access memory at address 0x0>, elec_power_n=2.1557718236194595e-11,
elec_power_elastic_n=8.3380334720825002e-12, elec_power_inelastic_n=1.0734774037669559e-11, elec_eedf=...)
at src/zdplaskin_m.F90:794
#4 0x000000000047536a in equil_mixture () at src/Ecrit_vs_T.F90:164
#5 0x0000000000403632 in main ()
#6 0x00007fffe26d1555 in __libc_start_main () from /lib64/libc.so.6
#7 0x0000000000403539 in _start ()
As you can see clearly, a very tiny change in the E/N value from
3.21258545E+000Td to
3.30413208E+000Td is resulting in an arithmetic exception (division by zero) inside the BOLSIG+ library / shared object. This doesn't make sense, but I'm helpless considering the call ends inside the shared object. The "elec_diff_coeff" reaches a value close to 1e-313, for example.
I'm running the code on Linux
3.10.0-1062.12.1.el7.x86_64, ifort version 2019.1.144.
If you could provide the debug version of the shared object, if possible, I'd be able to determine precisely which line is causing the issue.
What remedy would you suggest here? Kindly let me know your thoughts. That'd be very much appreciated. Thanks!
Regards,
Venkat
what you give is what you get returned..
Dil Se...