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

📄 c_geometry.h

📁 矩量法仿真电磁辐射和散射的源代码(c++)
💻 H
字号:
/*	Copyright (C) 2004-2005  Timothy C.A. Molteno		This program 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; either version 2 of the License, or	(at your option) any later version.		This program 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 this program; if not, write to the Free Software	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifndef __c_geometry__#define __c_geometry__#include "math_util.h"#include <vector>#include <iostream>/* Replaces the "10000" limit used to *//* identify segment/patch connections */#define	PCHCON  100000class nec_context;#include "nec_output.h"/**! \brief Use of the c_geometry class.			c_geometry g = new c_geometry();		g.parse_geometry(file);			OR			c_geometry g = new c_geometry();		g.wire(xxxxxxx);		g.arc();		...		g.geometry_complete();		*/class c_geometry{public:	c_geometry();	void set_context(nec_context* m_context);			void wire( 	int tag_id, int segment_count,			nec_float xw1, nec_float yw1, nec_float zw1,	// first co-ordinate			nec_float xw2, nec_float yw2, nec_float zw2,	// second co-ordinate			nec_float rad,					// wire radius (=0 if tapered)			nec_float rdel, nec_float rrad);		// set to 1.0 if not tapered							void arc( int tag_id, int segment_count, nec_float rada,			nec_float ang1, nec_float ang2, nec_float rad );				void helix( nec_float s, nec_float hl, nec_float a1, nec_float b1,			nec_float a2, nec_float b2, nec_float rad, int segment_count, int tag_id );		void move( nec_float rox, nec_float roy, nec_float roz, nec_float xs,			nec_float ys, nec_float zs, int its, int nrpt, int itgi );	void reflect( int ix, int iy, int iz, int itx, int nop );	void patch( int nx, int ny,			nec_float ax1, nec_float ay1, nec_float az1,			nec_float ax2, nec_float ay2, nec_float az2,			nec_float ax3, nec_float ay3, nec_float az3,			nec_float ax4, nec_float ay4, nec_float az4 );			/*! \brief Geometry is complete		\exception nec_exception* If there is an error with the geometry.	*/	void geometry_complete(nec_context* m_context, int card_int_1, int card_int_2);				/*!\brief Parse an NEC geometry description contained in the file input_fp	*/	void parse_geometry(nec_context* m_context, FILE* input_fp);		/*!\brief Helper method to decide whether extended. thin-wire approximation can be used 	*/	int test_ek_approximation(int seg1, int seg2);		int get_segment_number( int in_tag, int m);		void frequency_scale(nec_float freq_mhz);	void tbf( int i, int icap);	void trio( int j );		void get_current_coefficients(nec_float wavelength, complex_array& curx,			real_array& air, real_array& aii,			real_array& bir, real_array& bii,			real_array& cir, real_array& cii,			complex_array& vqds, int nqds,			int_array& iqds);		nec_float patch_angle(int patch_index, nec_float in_ax, nec_float in_ay, nec_float in_az);		/*! \brief Calculate the xyz components of the electric field due to surface currents.	*/	void fflds(nec_float rox, nec_float roy, nec_float roz,		complex_array& scur, 		nec_complex *in_ex, nec_complex *in_ey, nec_complex *in_ez );			int n;	// The number of segments	int np;	int_array segment_tags;	real_array x, y, z, segment_length, segment_radius;	real_array x2, y2, z2, cab, sab, salp;		int m, mp;	// m is the number of patches?	int m_ipsym;		real_array t1x, t1y, t1z, t2x, t2y, t2z;	// t1, t2 basis co-ordinates?	real_array px, py, pz, pbi, psalp;			// patch data	int n_plus_m, n_plus_2m, n_plus_3m; /* n+m,n+2m,n+3m */		int_array icon1, icon2;	// Connected Segment Information (was common  /segj/  in FORTRAN code)	int jsno, nscon, maxcon; /* Max. no. connections */	int_array jco;	real_array ax, bx, cx;		private:	//	The geometry data measured in meters is stored in these arrays	//	and the x,y,z,si,bi arrays are then scaled for each frequency	real_array x_unscaled, y_unscaled, z_unscaled, si_unscaled, bi_unscaled;	real_array px_unscaled, py_unscaled, pz_unscaled, pbi_unscaled;		void sbf( int i, int is, nec_float *aa, nec_float *bb, nec_float *cc );	void divide_patch( int nx );	void connect_segments( int ignd );	void read_geometry_card(FILE* input_fp, char *gm,		int *i1, int *i2, 		nec_float *x1, nec_float *y1,nec_float *z1,		nec_float *x2, nec_float *y2, nec_float *z2, 		nec_float *rad );	nec_context* m_context;	nec_output_file* m_output;};#endif /* __c_geometry__ */

⌨️ 快捷键说明

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