⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fxymcal.c

📁 seismic software,very useful
💻 C
字号:
#include "su.h"#include "segy.h"#include "par.h"char *sdoc = "FXYMCAL - Calculation of Frequency Ranges for multiple-machine FXYMIG run	\n" "\n""fxymcal [parameters] <input-data 	\n""\n""Required parameters:							\n""njobs=                    number of jobs to run \n""\n""Optional parameters:							\n""nfft=trace_length*1.5     fft length of trace in samples \n""fmin=(0.5/dt)/20          minimum frequency to migrate (Hz) \n""fmax=(0.5/dt)*1/2         maximum frequency to migrate (Hz) at surface \n""fmaxend=fmax              maximum frequency to migrate at bottom \n""ratio=1,1,...,1           relative work ratio of the jobs \n" "                          for example, njobs=3 ratio=2,1,2 will make \n""                          the program to print frequency ranges for \n""                          the three jobs, assuming machines 1 and 3 are \n""                          going to do twice as much work as machine 2 \n""\n""Notes: \n""1. dt is the input trace sampling rate in secends \n""\n""AUTHOR:		Zhiming Li,       ,	1/25/99   \n"		    ;void radix_(int *ntmp, int *nfft);main(int argc, char **argv){	segytrace tr;	FILE *infp=stdin;	int njobs, nfft, nt, ntmp;	float fmin, fmax, fmaxend;	int *ratio;	float dt, df, dw, pi;	int i1, i2, iwnum, iwmin, iwmax, i;	float f1, f2, fjob, tmp, sum;	int nfftq, iwend;	int j;  	/* get parameters */   	initargs(argc,argv);   	askdoc(1);   	if (!getparint("njobs",&njobs)) err(" njobs missing ");	j = countparval("ratio");	if ( njobs != j && j > 0 ) err(" check ratio ");	ratio = (int *)malloc(njobs*sizeof(int));	if(!getparint("ratio",ratio)) {		for(i=0;i<njobs;i++) ratio[i] = 1;	}	/* make file size to be able to exceed 2 G */	file2g(infp);	/* read in first trace for nt and dt */    if (!fgettr(infp,&tr))  err("can't get first trace");	nt = tr.ns; 	dt = (float)tr.dt/1000000.; 	/* optional parameters */	if(!getparfloat("fmin",&fmin)) fmin = 0.05 * 0.5 / dt;	if(!getparfloat("fmax",&fmax)) fmax = 1./2.0 * 0.5 / dt;	if(!getparfloat("fmaxend",&fmaxend)) fmaxend = fmax;	if(!getparint("nfft",&nfft)) nfft = nt * 3 / 2;	ntmp = (nfft+1)/2*2;	radix_(&ntmp,&nfft);	nfftq = nfft/2+1;	pi = 3.141592654;	df = 1./(nfft*dt); 	dw = 2.*pi/(nfft*dt); 	tmp = fmin*2.*pi/dw;	iwmin = tmp;	if(iwmin<1) iwmin=1;	if(iwmin>=nfftq) iwmin=nfftq-1;	tmp = fmax*2.*pi/dw;	iwmax = tmp;	if(iwmax<1) iwmax=1;	if(iwmax>=nfftq) iwmax=nfftq-1;	tmp = fmaxend*2.*pi/dw;	iwend = tmp;	if(iwend<1) iwend=1;	if(iwend>=nfftq) iwend=nfftq-1;	if(iwmax<iwmin) iwmax = iwmin;	if(iwend<iwmin) iwend = iwmin;	tmp = (iwmax+iwend)/2. - iwmin;	sum = 0.;	for(i=0;i<njobs;i++) sum = sum + ratio[i];	fjob = tmp / sum;	printf(" ======= FXYMCAL ======= \n");	printf(" ifmin_global=%d ifmax_global=%d ifend_global=%d nf_global=%d \n",		iwmin,iwmax,iwend,iwmax-iwmin+1);	i1 = iwmin;	for(i=0;i<njobs;i++) {		f1 = i1 * df;		tmp = fjob * ratio[i] + 0.5;		iwnum = tmp;		i2 = i1 + iwnum -1;		j = iwnum;		if(i2>iwend && iwend<iwmax) {			if(i1<iwend) {				j = iwend - i1;				i2 = iwend;				do {					i2 = i2 + 1;					j = (iwend-i1) + 						(2*(iwmax-iwend)-(i2-iwend))*(i2-iwend)/(iwmax-iwend)/2;				} while (j<iwnum && i2<=iwmax);			} else {				i2 = i1;				j = 0;				do { 					i2 = i2 + 1;					j = (2*(iwmax-iwend)-(i1-iwend)-(i2-iwend))*						(i2-i1)/(iwmax-iwend)/2;				} while (j<iwnum && i2<=iwmax);			}		}		if(i2>iwmax) i2 = iwmax;		if(i==njobs-1) i2 = iwmax;		iwnum = i2 - i1 + 1;		f2 = i2*df;		printf("ijob=%-2d:  ifmin=%-5d    ifmax=%-5d    nf=%-5d   fmin_i=%f fmax_i=%f \n",i+1,i1,i2,iwnum,f1,f2);		i1 = i2 + 1;	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -