catseis.c 2.03 KB
Newer Older
tilman.metz's avatar
tilman.metz committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
/*------------------------------------------------------------------------
 * Copyright (C) 2011 For the list of authors, see file AUTHORS.
 *
 * This file is part of SOFI2D.
 * 
 * SOFI2D is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 2.0 of the License only.
 * 
 * SOFI2D is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with SOFI2D. See file COPYING and/or 
  * <http://www.gnu.org/licenses/gpl-2.0.html>.
--------------------------------------------------------------------------*/
/*-------------------------------------------------------------
 * Cat seismograms for collecitve output of seismograms
 *
 *------------------------------------------------------------- */

#include "fd.h"

void	catseis(float **data, float **fulldata, int *recswitch, int ntr_glob, int ns) {

	//extern FILE *FP;

	int		i, j, k;
	float		**fulldata2;

	/*fprintf(FP," Message from function catseis \n\n");
	fprintf(FP,"\n PE 0 is merging seismogram traces \n");
	fprintf(FP,"\n Allocating memory \n");*/

	/* temporary global data array for MPI-exchange */
	fulldata2 = matrix(1,ntr_glob,1,ns);

	k = 0;	/* trace counter for local data array */

	//fprintf(FP," Start loop over ntr_glob = %d traces with each ns = %d samples \n",ntr_glob,ns);

	/* loop over global traces: copy traces of local array	*/
	/* to appropriate locations in the global array		*/
	for(i=1;i<=ntr_glob;i++)
	{
		if (recswitch[i]) {
			k++;
			for(j=1;j<=ns;j++)	fulldata2[i][j] = data[k][j];
		}}

	//fprintf(FP," Start MPI_Allreduce \n");
	MPI_Allreduce(&fulldata2[1][1], &fulldata[1][1], ntr_glob*ns, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD);

	//fprintf(FP," De-allocating memory \n");
	free_matrix(fulldata2, 1,ntr_glob,1,ns);
}