📄 subject_32446.htm
字号:
<p>
序号:32446 发表者:hai0090 发表日期:2003-03-12 11:24:30
<br>主题:能否将次c程序转化成vc程序
<br>内容:/* <BR>Laser Equation Integration Program <BR>Uses CLAMS DDRVB1 Subroutine converter over to C <BR>v1.0 C.Liu 19-Oct-93 Original Code,deleted noise <BR>v1.1 C.Liu Added noise(incorrectly) <BR>v1.2 C.Liu 20-Apr-94 Different gains for each mode,deleted noise <BR>v2.0 C.Liu 17-Jun-94 Added spontaneous emission noise based on v1.1. <BR>v2.1 C.Liu 29-Jun-94 Converted over to C--outputs binary format <BR>v3.0 C.Liu 26-Jan-95 Added multiplicative noise <BR>v3.1 C.Liu 10-Feb-95 Added green light output(hokey,I know) <BR>v3.2 C.Liu 24-May-95 Added direct intensity output <BR>v3.3 C.Liu Eliminated special handling of degenerate four wave mixing <BR>v3.4 C.Liu 21-May-96 Code clean up and eliminated output options Outputs intensi <BR>ru only. <BR>*/ <BR>#include <BR>#include <BR><BR>/*definitions for coupling tensor */ <BR>#define isdeg(i,j,k,l) (((i)==(k)&&(j)==(l))||((i)==(l)&&(j)==(k))) <BR>#define ispar(i,j) (((i) <BR>/*File Definitions*/ <BR>FILE *fp_pa; /*parameter file */ <BR>FILE *fp_fi; char fi_name[80]; /*initial condition file*/ <BR>FILE *fp_fo; char fo_name[80]; /*final condition file */ <BR><BR>/*Laser Definitions*/ <BR>int nx,nm,neq,seed; <BR>double tauc,tauf,*alpha,beta,g,gam,tau1,*kappa; <BR>double betal,ANoiseV,dt; <BR><BR>extern double ran1(); <BR>void usage() <BR>{ <BR>printf ("usage--lasim\n"); <BR>printf ("Outputs intensity in ASCII to stdout\n"); <BR>printf ("Format of parameter file -- \n"); <BR>printf ("fields_in_file fields_out_file\n"); <BR>printf ("nx nm\n tauc tauf\n beta g epsilon_d gamma\n"); <BR>printf ("np tp dt skip EPS\n betal ANoiseV\n alpha[1..nm]\n"); <BR>printf ("epsilon_n\n"); <BR>} <BR>main (argc,argv) <BR>int argc; <BR>char *argv[]; <BR><BR>{ <BR>int LenW,MState; <BR>double T,TOut,EPS; <BR>double *Y,*Work; <BR>double x1,x2,f1,f2; <BR>double intens; <BR>double eps_n,eps_d; <BR>int i,np,tp,p,skip; <BR>int cur_arg=1; <BR>/*check for number of arguments*/ <BR>if (argc!=2) <BR>{ <BR>usage(); <BR>exit(-1); <BR>} <BR>/*Open parameter file*/ <BR>if ((fp_pa=fopen(argv[1],"r"))==0) <BR>{ <BR>printf("unable to open parameter file.\n"); <BR>exit(-1); <BR>} <BR>/*get field file names*/ <BR>fscanf(fp_pa,"%s",fi_name); <BR>fscanf(fp_pa,"%s",fo_name); <BR><BR>/*allocate working arrays */ <BR><BR>fscanf(fp_pa,"%d %d",&nx,&nm); <BR>neq=3*nm; <BR>LenW=neq*neq+10*neq+224; <BR><BR><BR>Y=(double*)malloc(neq*sizeof(double)); <BR>Work=(double *)malloc(LenW*sizeof(double)); <BR>alpha=(double *)malloc(nm*sizeof(double)); <BR>kappa=(double*)malloc(nm*nm*nm*nm*sizeof(double)); <BR><BR>/*read laser operating parameters*/ <BR>fscanf (fp_pa,"%lf %lf",&tauc,&tauf); <BR>fscanf (fp_pa,"%lf %lf %lf %lf",&beta,&g,&eps_d,&gam); <BR>fscanf (fp_pa,"%d %d %lf %d %lf",&np,&tp,&dt,&skip,&EPS); <BR>fscanf (fp_pa,"%lf %lf",&betal,&ANoiseV); <BR>for (i=0;i fscanf(fp_pa,"%lf",&alpha[i]); <BR>fscanf(fp_pa,"%lf",&eps_n); <BR>fclose (fp_pa); <BR><BR>/*read initial conditions*/ <BR><BR>fp_fi=fopen(fi_name,"r"); <BR>if(fp_fi==0) <BR>{ <BR>printf("initial condition file not found\n"); <BR>exit(-1); <BR>} <BR>fscanf(fp_fi,"%lf",&T); <BR>for(i=0;i fscanf(fp_fi,"%lf",&Y[i]); <BR>fclose(fp_fi); <BR><BR>/*initialize*/ <BR>seed=-3; /*Random Number Generator*/ <BR>ran1(&seed); <BR>T=T/tauf; /*Scale To tauf*/ <BR>dt=dt/tauf; <BR>tau1=tauf/tauc; <BR>np=np*skip; /*Scale number of points by skip value*/ <BR>tp=tp*skip; <BR>{ /*kappa array*/ <BR>int p=0,i,j,k,l; <BR>double sg=sqrt(g); <BR>double sg1=sqrt(1-g); <BR>double eps,xi1,xi2; <BR><BR>for(i=0;i for(j=0;j for (k=0;k for(l=0;l { <BR>eps=(isdeg(i,j,k,l)?eps_d:eps_n); <BR>xi1=(ispar(i,j)?sg:sg1); <BR>xi2=(ispar(k,l)?sg:sg1); <BR>kappa[p++]=eps*xi1*xi2; <BR>} <BR>} <BR>TOut=T; /*DDRVB Parameters*/ <BR>MState=1; <BR>/*Main Loop*/ <BR>for(p=0;p { <BR>/*call integration routine*/ <BR>ddrvbl (&neq,&T,Y,&TOut,&MState,&EPS,Work,&LenW); <BR>if (MState>2) break; /*ddrvbl error*/ <BR><BR>/*additive noise*/ <BR>for (i=0;i { <BR>x1=ran1(&seed); <BR>x2=ran1(&seed); <BR>f1=sqrt(-4.0*ANoiseV*dt*tauf*log(x1)); <BR>f2=f1*cos(6.28*x2); <BR>f1=f1*cos(6.28*x2); <BR>Y[i]+=f1; <BR>Y[i+nm]+=f2; <BR>} <BR><BR>/*output intensity value*/ <BR>if(p>=tp&&(p%skip)==0) <BR>{ <BR>intens=0; <BR>for (i=0;i intens+=Y[i]*Y[i]+Y[i+nm]*Y[i+nm]; <BR>printf("%lf\n",intens); <BR>} <BR>TOut+=dt; <BR>} <BR>/*output final state */ <BR>fp_fo=fopen(fo_name,"w"); <BR>fprintf(fp_fo,"%lf",TOut*tauf); <BR>for(i=0;i fprintf(fp_fo,"%lf",Y[i]); <BR>fclose(fp_fo); <BR>/*deallocate workig arrays*/ <BR>free(Y); <BR>free(Work); <BR>free(alpha); <BR>free(kappa); <BR>} <BR>f_(n,t,y,ydot) <BR>int *n; <BR>double *t,*y,*ydot; <BR>{ <BR>double Intens,Gain; <BR>double SumI,dE_r,dE_i; <BR>int i,j,k,l,p; <BR>/*Compute Total Intensity*/ <BR>SumI=0.0; <BR>for(i=0;i SumI+=y[i]*y[i]+y[i+nm]*y[i+nm]; <BR>/*Compute YDot*/ <BR>p=0; <BR>for(i=0;i { <BR>dE_r=dE_i=0; <BR>for (j=0;j for (k=0;k for(l=0;l { <BR>dE_r+=kappa[p]*(y[j]*y[k]*y[l]-y[j]*y[k+nm]*y[l+nm]+y[j+nm]*y[k]*y[l+nm]+y[j+nm] <BR>*y[k+nm]*y[l]); <BR>dE_i+=kappa[p]*(-y[j+nm]*y[k]*y[l]+y[j]*y[k+nm]*y[l]+y[j]*y[k]*y[l+nm]+y[j+nm]*y <BR>[k+nm]*y[l+nm]); <BR>p++; <BR>} <BR>Intens=y[i]*y[i]+y[i+nm]*y[i+nm]; <BR>Gain=y[i+nm+nm]; <BR>ydot[i]=0.5*tau1*((Gain-alpha[i]*y[i]-dE_r; <BR>ydot[i+nm]=0.5*tau1((Gain-alpha[i])*y[i+nm]-dE_i); <BR>ydot[i+nm+nm]=gam-(1.0+(betal-beta)*Intens+beta*SumI)*Gain; <BR>} <BR>} <BR>/*dummy routines needed by DDRVB1*/ <BR>jacobn_(){} <BR>fa_() {} <BR>g_(){} <BR>users_(){} <BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:无情阁东雪 回复日期:2003-03-12 11:50:39
<br>内容:请在VC的Win32 console中直接用
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-03-12 13:51:16
<br>内容:当然可以,VC只是功能强大的编辑器。。。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hai0090 回复日期:2003-03-12 15:13:56
<br>内容:无情阁东雪谢谢你指导,<BR><BR>我放进去调试了,可是有错误,不知什么原因,是不是缺少函数库啊?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hai0090 回复日期:2003-03-12 15:15:44
<br>内容:不知c的语句和vc的语句是否兼容
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:无情阁东雪 回复日期:2003-03-12 19:31:11
<br>内容:VC用的是C++语言,兼容C的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hai0090 回复日期:2003-03-13 16:31:11
<br>内容:你好!无情阁冬雪<BR>该c程序运行时,由于我缺少必要数学数值计算的函数,该函数不知怎样才能找到,所以想到用vc,我知道vc功能强大,但是,vc我不太懂,放进去调试时,出现很多错误,我不知是什么原因,所以象你请教,如果你知道哪有c的数学数值计算的函数程序,或者能指导一下vc中的错误,本人不胜感激。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:布什 回复日期:2003-03-14 09:04:18
<br>内容:在文件中加入数学库,VC自带的。<BR>#include "math.h"
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -