From 9479950d5c3cea85a5d53fd5a2bb9f12baa752ff Mon Sep 17 00:00:00 2001
From: JanThorbecke <janth@xs4all.nl>
Date: Fri, 13 Mar 2015 16:24:40 +0100
Subject: [PATCH] minor bug fix

---
 fdelmodc/demo/fdelmodc_circ.scr |  2 +-
 fdelmodc/recvPar.c              | 14 +++++++++-----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/fdelmodc/demo/fdelmodc_circ.scr b/fdelmodc/demo/fdelmodc_circ.scr
index 1597e09..421682f 100755
--- a/fdelmodc/demo/fdelmodc_circ.scr
+++ b/fdelmodc/demo/fdelmodc_circ.scr
@@ -35,7 +35,7 @@ export OMP_NUM_THREADS=1
 	file_src=wavelet.su verbose=5 \
 	file_rcv=$file_rcv \
 	file_snap=snap.su \
-	rrcv=1200 arcv=2800 oxrcv=0 ozrcv=0 dphi=2.0 \
+	arcv=1200 rrcv=2800 oxrcv=0 ozrcv=0 dphi=2.0 \
 	rec_type_vx=1 rec_type_p=1 rec_int_vx=3 \
 	dtrcv=0.004 \
 	xsrc=-1600 zsrc=0 nshot=1 nsrc=1 \
diff --git a/fdelmodc/recvPar.c b/fdelmodc/recvPar.c
index f967d9a..0cfb7df 100644
--- a/fdelmodc/recvPar.c
+++ b/fdelmodc/recvPar.c
@@ -25,7 +25,8 @@ int recvPar(recPar *rec, float sub_x0, float sub_z0, float dx, float dz, int nx,
 	float *xrcv1, *xrcv2, *zrcv1, *zrcv2;
 	int ix0, ix1, iz0, iz1, i, ix, iz, ir, isign, verbose;
 	float dxrcv, dzrcv, *dxr, *dzr, r, rr;
-	float rrcv, dphi, oxrcv, ozrcv, arcv, circ, h, a, b, e, s, xr, zr, dr, srun;
+	float rrcv, dphi, oxrcv, ozrcv, arcv;
+	double circ, h, a, b, e, s, xr, zr, dr, srun, phase;
 	float xrange, zrange;
 	int Nx1, Nx2, Nz1, Nz2, Ndx, Ndz, iarray, nskip, nrec, nh;
 	int nxrcv, nzrcv, ncrcv, nrcv, max_nrec;
@@ -62,23 +63,26 @@ int recvPar(recPar *rec, float sub_x0, float sub_z0, float dx, float dz, int nx,
 			a = MAX(rrcv, arcv);
 			b = MIN(rrcv, arcv);
 			e = sqrt(a*a-b*b)/a;
+			//fprintf(stderr,"a=%f b=%f e=%f\n", a, b, e);
 			circ = 0.0;
 			for (ir=0; ir<nh; ir++) {
 				s = sin(ir*h);
 				circ += sqrt(1.0-e*e*s*s);
 			}
-			//circ = a*h*circ;
+			circ = a*h*circ;
 			//fprintf(stderr,"circ = %f circle=%f\n", circ, 2.0*M_PI*rrcv);
 			/* define distance between receivers on ellipse */
 			dr = circ/ncrcv;
 			ix = 0;
 			srun = 0.0;
+			if (arcv >= rrcv) phase=0.0;
+			else phase=0.5*M_PI;
 			for (ir=0; ir<nh; ir++) {
 				s = sin(ir*h);
 				srun += sqrt(1.0-e*e*s*s);
-				if (srun >= ix*dr ) {
-					xr = rrcv*cos(ir*h);
-					zr = arcv*sin(ir*h);
+				if (a*h*srun >= ix*dr ) {
+					xr = rrcv*cos(ir*h+phase);
+					zr = arcv*sin(ir*h+phase);
 					rec->xr[ix] = oxrcv-sub_x0+xr;
 					rec->zr[ix] = ozrcv-sub_z0+zr;
 					rec->x[ix] = NINT(rec->xr[ix]/dx);
-- 
GitLab