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

Reply via email to