[cig-commits] [commit] pluggable: Code to C89 for portability. Avoid fixed-length buffers. Take advantage of realloc(), everybody! [Standard says, realloc(NULL, n) is equivalent to malloc(n), and free(NULL) is a no-op.] (0a0011a)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed Apr 9 08:55:53 PDT 2014
Repository : ssh://geoshell/specfem3d_globe
On branch : pluggable
Link : https://github.com/geodynamics/specfem3d_globe/compare/64e1b38f0c5ebb4056cce0b15d41c0b9f94ab6e5...099a4d330d5b173b21e51ad441f9f429e5d37842
>---------------------------------------------------------------
commit 0a0011af440d1c1a13f8f92e16429c0fae25c66e
Author: Leif Strand <leif at geodynamics.org>
Date: Wed May 6 23:36:25 2009 +0000
Code to C89 for portability. Avoid fixed-length buffers. Take
advantage of realloc(), everybody! [Standard says, realloc(NULL, n)
is equivalent to malloc(n), and free(NULL) is a no-op.]
>---------------------------------------------------------------
0a0011af440d1c1a13f8f92e16429c0fae25c66e
UTILS/seis_process/convolve_stf.c | 46 +++++++++++++++++++--------------------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/UTILS/seis_process/convolve_stf.c b/UTILS/seis_process/convolve_stf.c
index 5fb39fb..c3f7d5e 100644
--- a/UTILS/seis_process/convolve_stf.c
+++ b/UTILS/seis_process/convolve_stf.c
@@ -100,9 +100,9 @@ void convolve(float **pconv, sac_int_t *pnconv,
int
main(int argc, char *argv[])
{
- char cstf, *endpt, *outf;
+ char cstf, *endpt;
float hdur, *data;
- int j, len_fn;
+ int j;
sac_int_t datasize;
const int min_nhdur = 10;
@@ -112,12 +112,12 @@ main(int argc, char *argv[])
" This program convolves SAC files with a gaussian(|triangle)\n"
" source time function of given half duration\n",
argv[0]);
- return -1;
+ return 1;
}
if(strcmp(argv[1], "t") != 0 && strcmp(argv[1], "g") != 0) {
fprintf(stderr,"The source time function type could only be triangle(t) or gaussian(g) \n");
- return -1;
+ return 1;
}
cstf = argv[1][0];
@@ -125,14 +125,7 @@ main(int argc, char *argv[])
hdur = (float)strtod(argv[2], &endpt);
if(errno || endpt == argv[2] || *endpt != 0) {
fprintf(stderr,"No floating point number can be formed from %s\n",argv[2]);
- return -1;
- }
-
-
- len_fn = 255;
- if((outf = (char *) malloc(len_fn * sizeof(char))) == NULL) {
- fprintf(stderr,"Out of memory\n");
- return -1;
+ return 1;
}
@@ -144,25 +137,32 @@ main(int argc, char *argv[])
float beg, del, dt, origin, scale, tmp[1];
sac_int_t nstf, nconv, i;
float hstf, *stf, *conv;
+ char *outf;
fprintf(stderr, "convolving sac file %s with half duration %7.3f\n",
argv[j], hdur);
+ if((outf = (char *) malloc(strlen(argv[j]) + strlen(".conv") + 1)) == NULL) {
+ fprintf(stderr,"Out of memory\n");
+ return 1;
+ }
+ strcpy(outf, argv[j]);
+ strcat(outf, ".conv");
+
/* read header to get the length of time series */
max = 1;
rsac1(argv[j], tmp, &nlen, &beg, &del, &max, &nerr, strlen(argv[j]));
if(nerr != -803) {
fprintf(stderr,"Error reading sac file %s\n",argv[j]);
- return -1;
+ return 1;
}
getnhv("npts", &npts, &nerr, strlen("npts"));
/* now we know how much memory we need to allocate */
if(npts > datasize) {
- if(data != NULL) free(data);
- data = (float*) malloc(npts * sizeof(float));
+ data = (float*)realloc(data, npts * sizeof(float));
if(data == NULL) {
fprintf(stderr, "out of memory\n");
return 1;
@@ -175,7 +175,7 @@ main(int argc, char *argv[])
rsac1(argv[j], data, &nlen, &beg, &del, &max, &nerr, strlen(argv[j]));
if(nerr) {
fprintf(stderr,"Error reading sac file %s\n",argv[j]);
- return -1;
+ return 1;
}
/* get additional info */
@@ -184,7 +184,7 @@ main(int argc, char *argv[])
getfhv("scale", &scale, &nerr, strlen("scale"));
if(nerr) {
fprintf(stderr,"No origin time is defined for the sac file\n");
- return -1;
+ return 1;
}
@@ -192,7 +192,7 @@ main(int argc, char *argv[])
/* creat source time function time series */
if(min_nhdur * dt / 2 > hdur) {
fprintf(stderr,"The half duration %f is too small to convolve\n", hdur);
- return -1;
+ return 1;
}
nstf = (int)ceil(2 * hdur/dt)+1;
@@ -200,7 +200,7 @@ main(int argc, char *argv[])
if((stf = (float *) malloc(nstf*sizeof(float))) == NULL) {
fprintf(stderr,"Error in allocating memory for source time function\n");
- return -1;
+ return 1;
}
if(cstf == 't') {
/* triangular */
@@ -212,9 +212,10 @@ main(int argc, char *argv[])
/* gaussian */
const float decay_rate = 1.628;
float alpha = decay_rate / hdur;
+ float divisor = sqrt(4*atan(1.0) /*pi*/);
for (i=0; i<nstf; i++) {
float tao_i = fabs(i*dt - hstf);
- stf[i] = alpha * exp(- alpha*alpha* tao_i*tao_i) / sqrt(M_PI);
+ stf[i] = alpha * exp(- alpha*alpha* tao_i*tao_i) / divisor;
}
}
@@ -249,17 +250,16 @@ main(int argc, char *argv[])
}
/* output to .conv sac file */
- snprintf(outf, len_fn, "%s.conv", argv[j]);
-
wsac0(outf, data, conv, &nerr, strlen(outf));
if(nerr) {
fprintf(stderr, "Not able to write to file %s\n", argv[j]);
- return -1;
+ return 1;
}
free(conv);
free(stf);
+ free(outf);
}
return 0;
More information about the CIG-COMMITS
mailing list