Hi all,
I get the following error on runtime when using a cpp program
(attached), running on different machines (cluster and single
processors), the only thing having in common is a Linux 64 bit OS. When
displaying fluxes with master_printf or printf, in a cluster I get:
flux-resol-10:, 0.6948, 0
flux-resol-10:, 0.6949, 0
flux-resol-10:, 0.695, 0
flux-resol-10:, 0.6951, 0
Signal:11 info.si_errno:0(Success) si_code:128()
Failing at addr:(nil)
[0] func:/usr/lib/libopal.so.0 [0x2b6380738c07]
[1] func:/lib/libpthread.so.0 [0x2b6380ff3720]
[2] func:/usr/lib/libopal.so.0(_int_free+0x75) [0x2b638073ac09]
[3] func:/usr/lib/libopal.so.0(free+0x99) [0x2b638073cc0d]
[4] func:./fbg(_ZN4meep9dft_chunkD1Ev+0x12) [0x41571c]
[5] func:./fbg(_ZN4meep9dft_chunkD1Ev+0x5f) [0x415769]
[6] func:./fbg(_ZN4meep12fields_chunkD1Ev+0x1da) [0x41bfa6]
[7] func:./fbg(_ZN4meep6fieldsD1Ev+0x33) [0x41c0ff]
[8] func:./fbg(main+0xb2b) [0x4145d9]
[9] func:/lib/libc.so.6(__libc_start_main+0xe3) [0x2b63811190e3]
[10] func:./fbg(__gxx_personality_v0+0x99) [0x413869]
*** End of error message ***
Segmentation fault
In a single processor machine I get:
flux-resol-10:, 0.695, 0
flux-resol-10:, 0.6951, 0
*** glibc detected *** ./fbg: double free or corruption (!prev):
0x0000000004ba6270 ***
======= Backtrace: =========
/lib/libc.so.6[0x2b22e107ba8d]
/lib/libc.so.6(__libc_free+0x76)[0x2b22e107d0b6]
./fbg[0x403c1c]
./fbg[0x403be8]
./fbg[0x407105]
./fbg[0x407292]
./fbg[0x402df1]
/lib/libc.so.6(__libc_start_main+0xf4)[0x2b22e102e374]
./fbg(__gxx_personality_v0+0x69)[0x402099]
See attached the code, it has been built after the examples in meep
reference.
Any hint on this will be appreciated.
Regards,
Pascual.
--
Dr. Pascual Muñoz Muñoz - Telecommunication Engineer
Optical Communications Group - iTEAM Research Institute
[EMAIL PROTECTED] - www.gco.upv.es - www.upv.es
-------------------------------------------------------
Proud to be Valencian, http://www.valencian.org/
#include <meep.hpp>
using namespace meep;
const int NN = 10000; // cada cuantas itters saca el campo
const double maxeps = 1.65;
const double An = 5e-4;
const double lbd = 0.244;
const double d = 1.070;
const double mu = 1.0;
const double Aphi = 1.6e-3;
const double nco = 1.45;
const double AN = 0.14;
const double ncl = sqrt(pow(1.45,2)-pow(AN,2));
const double Wg = 9.0;
const double W = 4*Wg;
const double L = 200;
const double xc = W/2;
const double epsilon_cladding = pow(ncl,2);
const double epsilon_core = pow(nco,2);
// const double I[] = {0.05,0.3,0.15};
const double I[] = {0,0.5,0};
const double Ap2u = Aphi / 2 / mu;
const double k = 2 * pi / lbd;
const double pml_thickness = 1.0;
const int resol = 10;
const double freq = 0.6452;
const double df = 0.1;
int nfreq = 1000;
double sinc(double x) {
if (x == 0) {
return 1.0;
} else {
return(sin(pi*x)/pi/x);
}
}
double psi(int n) {
return(asin(double(n)*lbd/d));
}
double corch(double x, double y, int j, int i) {
double psii = psi(i);
double psij = psi(j);
double ky = k*y;
double kx = k*x;
return( 2*sqrt(I[i]*I[j])*cos(ky*(cos(psii)-cos(psij))) * (sinc(ky*Ap2u*(tan(psii)+tan(psij)))*cos(kx*(sin(psii)+sin(psij))) + sinc(ky*Ap2u*(tan(psii)-tan(psij)))*cos(kx*(sin(psii)-sin(psij)))) );
}
double epsfbg_square(const vec &p) {
double y = p.x();
double x = p.y();
double epsilon;
epsilon = pow(nco + An * round(sin(x/d*2)),2);
return(epsilon);
}
double epsfbg(const vec &p) {
double y = p.x();
double x = p.y();
double epsilon;
epsilon = I[0] + corch(x,y,1,0) + corch(x,y,1,1) + corch(x,y,1,2) + corch(x,y,2,0) + corch(x,y,2,1) + corch(x,y,2,2);
epsilon = pow(epsilon,0.33);
epsilon = epsilon / maxeps;
epsilon = pow(nco+An*epsilon,2);
// fprintf(stderr,"%g \t %g\t %g\n",x,y,epsilon);
// printf("%g \t %g\t %g\n",x,y,epsilon);
return(epsilon);
}
double epscl(const vec &p) {
return(epsilon_cladding);
}
double epsco(const vec &p) {
return(epsilon_core);
}
double eps(const vec &p) {
if (abs(p.x()-W/2)<=Wg/2) {
if ( (p.y()>50) && (p.y()<(L-50)) ) {
return( epsfbg(p) );
} else {
return( epsco(p) );
}
} else {
return( epscl(p) );
}
}
double eps0(const vec &p) {
if (abs(p.x()-W/2)<=Wg/2) {
return( epsco(p) );
} else {
return( epscl(p) );
}
}
int main(int argc, char **argv){
// initialize mpi(argc,argv);
//int resol = atoi(argv[1]);
FILE *fid;
int ii = 0;
double freq_min = freq - 0.5 * df;
double freq_max = freq + 0.5 * df;
const volume v = vol2d(W,L,resol);
const symmetry S = mirror(Y,v);
structure s(v, eps, pml(pml_thickness));
structure s0(v, eps0, pml(pml_thickness));
fields f(&s);
fields f0(&s0);
f.output_hdf5(Dielectric, v.surroundings());
// f0.output_hdf5(Dielectric, v.surroundings());
gaussian_src_time src(freq, 0.5/df, 0, 5/df);
f.add_volume_source(Ez, src, geometric_volume(vec(-Wg/2+xc,5),vec(Wg/2+xc,5)));
f0.add_volume_source(Ez, src, geometric_volume(vec(-Wg/2+xc,5),vec(Wg/2+xc,5)));
geometric_volume volOUT(vec(-W/2+xc,L-10),vec(W/2+xc,L-10));
geometric_volume volIN(vec(-W/2+xc,L-10),vec(W/2+xc,L-10));
dft_flux ft0 = f0.add_dft_flux(Y,volOUT,freq_min,freq_max,nfreq);
dft_flux ft = f.add_dft_flux(Y,volOUT,freq_min,freq_max,nfreq);
// dft_flux ft2 = f.add_dft_flux(Y,volIN,freq_min,freq_max,nfreq);
while (f0.time() < 2 ) f0.step();
// f.open_h5file("ez.h5",h5file::WRITE,NULL,false);
while (f.time() < 2) {
f.step();
/* ii++;
if(!((ii*100)%NN))
f.output_hdf5(Ez, v.surroundings(), 0, true, false, 0);*/
}
double *flux = ft.flux();
double *flux0 = ft0.flux();
double dfreq = (freq_max-freq_min) / nfreq;
// for (int i=0; i<nfreq; ++i)
// master_printf("flux0-resol-%i:, %g, %g\n",resol,freq_min+i*dfreq,flux0[i]);
for (int i=0; i<nfreq; ++i)
printf("flux-resol-%i:, %g, %g\n",resol,freq_min+i*dfreq,flux[i]);
// delete [] flux;
// delete [] flux0;
return 0;
}
CXX = g++
CXXOPTS = -g -I/usr/local/include
CXXFLAGS = $(CXXOPTS)
LIBS := -L/usr/local/lib -lmeep -lhdf5 -lz -lgsl -llapack -lblas -lfftw3 -lm
# -L/usr/local/lib -lmeep -lhdf5 -lz -lgsl -lgslcblas -lfftw3 -lm
all: fbg
fbg: fbg.o
$(CXX) -o fbg fbg.o $(LIBS)
png: ez*.h5 eps*.h5
h5topng -ZRc dkbluered -C eps*.h5 -t 0 ez*.h5
eps: eps*.h5
h5topng -c dkbluered eps*.h5
flux: fbg.out
grep flux- fbg.out > flux.dat
grep flux0- fbg.out > flux0.dat
clean:; rm -f *.bak *.o *.h5 *.png *.vtk *.out *.dat fbg *\~
_______________________________________________
meep-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss