OK.
I'll dig into the matter a bit further to see if I can solve where the
problem arises. It might be an incorrect cast somewhere that screws up
memory locations.

Best regards,

Edscott


2018-08-17 15:31 GMT-05:00 Flemisch, Bernd <
bernd.flemi...@iws.uni-stuttgart.de>:

> Hi Edscott,
>
> can you please open an issue at https://git.iws.uni-stuttgart.
> de/dumux-repositories/dumux/issues ? Due to holiday season, it might take
> us some time to look at this. By opening an issue, it won't be forgotten.
>
> Kind regards
> Bernd
>
> Von: Edscott Wilson
> Gesendet: Donnerstag, 16. August, 23:47
> Betreff: [DuMuX] memory corruption in brookscorey.hh?
> An: DuMuX User Forum
>
>
> This is weird and should not be happening. I explain.
>
> While debugging a generalized Dirichlet type problem, I am encountering a
> problem with the BrooksCorey material law (dumux/material/
> fluidmatrixinteractions/2p/brookscorey.hh).
>
> Here is the code from brookscorey.hh:
>
> 181             using std::min;
> 182             using std::max;
> 183
> 184             swe = min(max(swe, 0.0), 1.0); // the equation below is
> only defined for 0.0 <= sw <= 1.0
> 185
> 186             return pow(swe, 2.0/params.lambda() + 3);
> 187         }
>
> Inserting a break before the min(max()) call, I examine the value of swe:
>
> Thread 1 "lswf-chem11" hit Breakpoint 2, Dumux::BrooksCorey<double, Dumux::
> RegularizedBrooksCoreyParams<double> >::krw (params=...,
>     swe=6.9319619419652626e-17) at /opt/dune/include/dumux/material/
> fluidmatrixinteractions/2p/brookscorey.hh:184
> 184             swe = min(max(swe, 0.0), 1.0); // the equation below is
> only defined for 0.0 <= sw <= 1.0
> (gdb) print swe
> $11 = 6.9319619419652626e-17
>
>
> Then I step over the min(max() call and re-examine swe and get a corrupted
> value:
>
> (gdb) next
> 186             return pow(swe, 2.0/params.lambda() + 3);
> (gdb) print swe
> $12 = -3.9159195083267944e+240
>
> Stepping into the min(max()) function I see that the value which should be
> "1.0" arrives corrupted:
>
> (gdb)
> std::min<double> (__a=@0x7fffffffae00: 6.9319619419652626e-17,
> __b=@0x7fffffffae10: -3.9159195083267944e+240)
>     at /usr/include/c++/6.3.1/bits/stl_algobase.h:200
> 200           if (__b < __a)
> (gdb) print __b
> $16 = (const double &) @0x7fffffffae10: -3.9159195083267944e+240
>
>
> Looks like the "1.0" is being placed on the stack and being optimized away
> after the max() part completes.
>
> Doing some changes to the code and doing the simple eff2abs law conversion
> within the regularizedbrooksCorey class template, the problem disappears,
> as the following gdb output shows:
>
> Thread 1 "lswf-chem11" hit Breakpoint 3, Dumux::BrooksCoreyV<double,
> Dumux::RegularizedBrooksCoreyVParams<double> >::krw (params=...,
>     swe=6.9319619419652626e-17, iS=4.2262753399999999) at
> /home/edscott/GIT/LSWF/include/2pncs/materiallaw/brookscoreyV.hh:91
> 91              swe = min(max(swe, 0.0), 1.0); // the equation below is
> only defined for 0.0 <= sw <= 1.0
> (gdb) step
> std::max<double> (__a=@0x7fffffffade0: 6.9319619419652626e-17,
> __b=@0x7fffffffadf8: 0) at /usr/include/c++/6.3.1/bits/stl_algobase.h:224
> 224           if (__a < __b)
> (gdb) next
> 226           return __a;
> (gdb)
> 227         }
> (gdb)
> Dumux::BrooksCoreyV<double, Dumux::RegularizedBrooksCoreyVParams<double>
> >::krw (params=..., swe=6.9319619419652626e-17, iS=4.2262753399999999)
>     at /home/edscott/GIT/LSWF/include/2pncs/materiallaw/brookscoreyV.hh:92
> 92              return pow(swe, 2.0/params.lambda(iS) + 3);
> (gdb) print swe
> $18 = 6.9319619419652626e-17
>
>
> Opinions?
>
> Could there be something amiss in the EffToAbsLaw class template?
>
> Or could it be a gcc bug? (using "gcc (GCC) 6.3.1 20170109" and "GNU gdb
> (GDB) 7.12.1").
>
> I tried to use gdb within a docker container with "gcc (GCC) 7.3.1
> 20180312" and "GNU gdb (GDB) 8.1" but I get:
>
> (gdb) run
> Starting program: /home/dumux/projects/lswf-chem11-USE_BC-CACO3_CASO4_
> MGCO3-SIMPLIFIED-UMF/build-cmake/src/lswf-chem11 -ParameterFile
> ../SW-b.input
> warning: Error disabling address space randomization: Operation not
> permitted
> warning: Could not trace the inferior process.
> Error:
> warning: ptrace: Operation not permitted
> During startup program exited with code 127.
>
> Has anybody had luck debugging with gdb within a docker container?
>
>
> The full g++ compiler command is as follows:
>
> /usr/bin/c++  -Wno-deprecated -ggdb -I/home/dumux/problems/lswf-chem11
> -I/home/dumux/include -I/home/dumux -I/opt/dune/include -DUSE_BC
> -DCACO3_CASO4_MGCO3 -DSIMPLIFIED -DUMF   -pthread -rdynamic
> CMakeFiles/lswf-chem11.dir/lswf-chem11.cc.o  -o lswf-chem11
> -Wl,-rpath,/usr/lib/openmpi /opt/dune/lib64/libdunefem.a 
> /opt/dune/lib64/libdunealugrid.a
> /opt/dune/lib64/libdunegrid.a /opt/dune/lib64/libugS3.a
> /opt/dune/lib64/libugS2.a /opt/dune/lib64/libugL.a 
> /opt/dune/lib64/libdunegeometry.a
> /opt/dune/lib64/libdunecommon.a -lumfpack -lspqr -lldl -lcholmod -lamd
> -lcamd -lcolamd -lccolamd -lsuitesparseconfig -pthread
> /usr/lib/openmpi/libmpi.so -lmetis -lm -pthread /usr/lib/openmpi/libmpi.so
> -lz -lldl -lspqr -lumfpack -lcholmod -lamd -lcamd -lcolamd -lccolamd
> -lsuitesparseconfig -lsuperlu -lblas -lparmetis -lmetis -lm -pthread
> /usr/lib/openmpi/libmpi.so -lmetis -lm -lpsurface
> /opt/dune/lib64/libdunegrid.a /opt/dune/lib64/libugS3.a
> /opt/dune/lib64/libugS2.a /opt/dune/lib64/libugL.a 
> /opt/dune/lib64/libdunegeometry.a
> /opt/dune/lib64/libdunecommon.a -lparmetis -lmetis -lm -pthread
> /usr/lib/openmpi/libmpi.so -lmetis -lm -Wl,-Bstatic -lVc -Wl,-Bdynamic
> -lgmp -lgmpxx -llapack -lblas -pthread /usr/lib/openmpi/libmpi.so
> /opt/dune/lib64/libdunefem.a /opt/dune/lib64/libdunealugrid.a
> /opt/dune/lib64/libdunegrid.a /opt/dune/lib64/libugS3.a
> /opt/dune/lib64/libugS2.a /opt/dune/lib64/libugL.a 
> /opt/dune/lib64/libdunegeometry.a
> /opt/dune/lib64/libdunecommon.a -pthread -lpsurface -lmetis -lm -lz
> -Wl,-Bstatic -lVc -Wl,-Bdynamic -lgmp -lgmpxx /usr/lib/openmpi/libmpi.so
> -llapack -lblas
>
> Any pointer would be greatly appreciated.
>
> kind regards,
>
>
> Edscott
>
>
>
> --
> ------------------------------------------------------------
> ------------------------
> Dr. Edscott Wilson Garcia
> Reservoir Engineering
> Mexican Petroleum Institute
>
>
>
> _______________________________________________
> Dumux mailing list
> Dumux@listserv.uni-stuttgart.de
> https://listserv.uni-stuttgart.de/mailman/listinfo/dumux
>
>


-- 
------------------------------------------------------------------------------------
Dr. Edscott Wilson Garcia
Reservoir Engineering
Mexican Petroleum Institute
_______________________________________________
Dumux mailing list
Dumux@listserv.uni-stuttgart.de
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux

Reply via email to