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

📄 polar.cpp

📁 pic 模拟程序!面向对象
💻 CPP
字号:
/*====================================================================POLAR.CPP0.99	(JV 09-13-95) Creation.====================================================================*/#include "polar.h"#include	"fields.h"#include "ptclgrp.h"#include "psolve.h"#ifdef _MSC_VERusing std::cout;using std::endl;#endifextern Evaluator *adv_eval;Polar::Polar(ostring _Phi,oopicList <LineSegment> *segments, Scalar _transmissivity)	: Conductor(segments){	transmissivity=_transmissivity;  //initialize the transmissivity					 //on creation	BoundaryType = CONDUCTOR;		//new boundary type, not	Phi = _Phi + ostring('\n');  //evaluator needs a '/n'}//--------------------------------------------------------------------//	Configure Fields::iC and :: iL for passive BC.  Currently assumes//	conductor, sets iC = 0 along its surface.  Also requires vertical//	or horizontal boundaries.  Note that we must step thru in the//	correct order; this once expended a large amount of effort to//	determine that iC along a conductor with k2 < k1 was not being//	set, causing a leaky boundary.void Polar::setPassives(){  oopicListIter <LineSegment> lsI(*segments);	for(lsI.restart();!lsI.Done();lsI++) {	  int j1,j2,k1,k2,normal,*points;  //local copies of above	  j1=(int)lsI.current()->A.e1();	  k1=(int)lsI.current()->A.e2();	  j2=(int)lsI.current()->B.e1();	  k2=(int)lsI.current()->B.e2();	  points=lsI.current()->points; 	 normal=lsI.current()->normal; 	  if (j1==j2)								//	vertical		 {			for (int k=k1; k<=k2; k++)			  {				 Scalar iC2 = fields->getiC()[j1][k].e2();				 Scalar iC3 = fields->getiC()[j1][k].e3();				 Scalar PhiX = 0;				 Scalar X = (Scalar)(k-k1)/((Scalar)(k2-k1));				 adv_eval->add_variable("X",X);				 PhiX=adv_eval->Evaluate(Phi);				 iC2 *= sin(PhiX * 3.141592654 / 180.0);				 iC3 *= cos(PhiX * 3.141592654 / 180.0);													 				 fields->set_iC2(j1, k, iC2);				 fields->set_iC3(j1, k, iC3);			  }		 }	  else if(k1==k2)											//	horizontal		 {			for (int j=j1; j<=j2; j++)			  {				 Scalar iC1 = fields->getiC()[j][k1].e1();				 Scalar iC3 = fields->getiC()[j][k1].e3();				 Scalar PhiX = 0;				 Scalar X = (Scalar)(j-j1)/((Scalar)(j2-j1));				 adv_eval->add_variable("X",X);				 PhiX=adv_eval->Evaluate(Phi);				 iC1 *= sin(PhiX * 3.141592654 / 180.0);				 iC3 *= cos(PhiX * 3.141592654 / 180.0);				 fields->set_iC1(j, k1, iC1);				 fields->set_iC3(j, k1, iC3);			  }		 }	  else {		 cout << "Polarizers don't support oblique segments!  Check input file.\n";	  }	}}//--------------------------------------------------------------------// collect() #ifndef __linux__#ifndef _MSC_VER#pragma argsused#endif#endifvoid Polar::collect(Particle& p, Vector3& dxMKS){	if((Scalar)frand()<transmissivity) {		Vector2 x=p.get_x();  // not really a function call, this is inlined				x+=p.get_u().e1()/(fabs(p.get_u().e1())+1.0e-20)			*Vector2(  j1*1e-6 + 1.0e-20  ,   0);		Boundary*	bPtr = fields->translateAccumulate(x, dxMKS, 			0);  // small mistake in physical model			//get_q()/dt);		if (bPtr) bPtr->collect(p, dxMKS);		else particleList.add(&p);		Boundary::collect(p,dxMKS);	} else	  Dielectric::collect(p,dxMKS);//	delete &p;  deletion already done in Dielectric::collect}//--------------------------------------------------------------------//	Polar::emit() commented out...  Conductor does this for us.//#pragma argsused//ParticleList& Polar::emit(Scalar t,Scalar dt)//{//	return particleList;//}

⌨️ 快捷键说明

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