Exemplo n.º 1
0
static void test_omega(FILE *fp,int *seed)
{
  int i;

  fprintf(fp,"Testing the energy loss tables\n");
  for(i=0; (i<1000); i++) {
    (void) get_omega(500*rando(seed),seed,fp,NULL);
  }
}
Exemplo n.º 2
0
void init_tables(int nfile,t_filenm fnm[],real rho)
{
  int  seed  = 1993;
  real ekin  = 20;
  real omega = 10;
  
  (void) band_ener(&seed,NULL,opt2fn("-band",nfile,fnm));
  (void) cross_el(ekin,rho,opt2fn("-sigel",nfile,fnm));
  (void) cross_inel(ekin,rho,opt2fn("-sigin",nfile,fnm));
  (void) get_theta_el(ekin,&seed,NULL,opt2fn("-thetael",nfile,fnm));
  (void) get_omega(ekin,&seed,NULL,opt2fn("-eloss",nfile,fnm));
  (void) get_q_inel(ekin,omega,&seed,NULL,opt2fn("-qtrans",nfile,fnm));
}
Exemplo n.º 3
0
int main()
{
	/*	Табличные значения	*/
	/*		Октавы:								1		2		3		4		5		6	*/
	const u_int16_t	FREQUENCY[OCT_NUM]		= {250,		500,	1000,	2000,	4000,	6000};
	const float		VOICE[OCT_NUM]			= {67.9,	66.9,	61.5,	57.0,	53.0,	48.5};
	const float		PS_25[OCT_NUM]			= {35,		29,		25,		22,		20,		18};
	const float		PS_35[OCT_NUM]			= {45,		39,		35,		32,		30,		28};
	const int8_t	DB_MODIFIERS[OCT_NUM]	= {-6,		0,		0,		0,		6,		6};
	const float 	AF_RUS_QS[OCT_NUM]		= {1.34,	2.5,	4.24,	5.88,	5,		1.04};
	/**/

	int i;

	/*	1. 	Смежная стена.
	 * 		Перегородка: 0.5 кирпича ПС-25
	 */
	const	float   Q_1				= 48;
			float   L2_1[OCT_NUM];
			int16_t Q1[OCT_NUM];
			float   E1[OCT_NUM];
			float   OM_1[OCT_NUM];
			float 	AF_1			= 0;

	for ( i = 0; i < OCT_NUM; i++ )
	{
		Q1[i] 		= Q_1 + DB_MODIFIERS[i];
		L2_1[i]		= VOICE[i] + 6 - Q1[i];
		E1[i]		= L2_1[i] - PS_25[i];
		OM_1[i]		= get_omega( E1[i] );
		AF_1	   += OM_1[i] * AF_RUS_QS[i];
	}
	AF_1 = AF_1 * 0.05;

	printf("\n1. Смежная стена.\n");
	printf("O\tFreq\tVoice\tQ_1  L2_1\t~Ef~\t~Om_1~\n");
	for ( i = 0; i < OCT_NUM; i++ )
	{
		printf("%d\t%u\t%.1f\t%d   %.1f\t%.1f\t%.3f\n", i+1,
			FREQUENCY[i], VOICE[i], Q1[i], L2_1[i], E1[i], OM_1[i]);
	}
	print_af(AF_1);




	/* 	2.	Внешняя стена.
	 * 		Перегородка: 1 кирпич ПС-35
	 * 		Окно одинарное стеклянное без уплотняющих прокладок.
	 * 		So = 40%
	 */

	const int16_t	Q_2_wall		= 53;
	const int16_t	Q_2_window		= 22;
	const	float	S0_2			=0.4;
			float	L2_2[OCT_NUM];
		  int16_t	Q2[OCT_NUM];
			float	E2[OCT_NUM];
			float	OM_2[OCT_NUM];
			float	AF_2			= 0;
			float	Q_2;

	Q_2 = Q_2_wall - 10 * log10f( ( 1 + S0_2 ) * ( powf( 10, 0.1 * (Q_2_wall - Q_2_window) ) ) - 1 );

	for ( i = 0; i < OCT_NUM; i++ )
	{
		Q2[i] 		= Q_2 + DB_MODIFIERS[i];
		L2_2[i]		= VOICE[i] + 6 - Q2[i];
		E2[i]		= L2_2[i] - PS_35[i];
		OM_2[i]		= get_omega( E2[i] );
		AF_2	   += OM_2[i] * AF_RUS_QS[i];
	}
	AF_2 = AF_2 * 0.05;

	printf("\n2. Внешняя стена.\n");
	printf("O\tFreq\tVoice\tQ_2  L2_2\t~Ef~\t~Om_2~\n");

	for ( i = 0; i < OCT_NUM; i++ )
	{
		printf("%d\t%u\t%.1f\t%d   %.1f\t%.1f\t%.3f\n", i+1,
			FREQUENCY[i], VOICE[i], Q2[i], L2_2[i], E2[i], OM_2[i]);
	}
	print_af(AF_2);



	/*		3. Коридор.
	 * 		Перегородка: 0.5 кирпича ПС-25
	 * 		Дверь с филенкой из 2.5см досок ( с двумя панелями )
	 * 			с обвязкой толщиной 4.5см без уплотняющих прокладок.
	 * 		So = 20%
	 */
	const int16_t	Q_3_wall		= 48;
	const int16_t	Q_3_door		= 18;
	const	float	S0_3			=0.2;
			float	L2_3[OCT_NUM];
		  int16_t	Q3[OCT_NUM];
			float	E3[OCT_NUM];
			float	OM_3[OCT_NUM];
			float	AF_3			= 0;
			float	Q_3;

	Q_3 = Q_3_wall - 10 * log10f( ( 1 + S0_3 ) * ( powf(10,  0.1*(Q_3_wall - Q_3_door)) ) - 1 );

	for ( i = 0; i < OCT_NUM; i++ )
	{
		Q3[i] 		= Q_3 + DB_MODIFIERS[i];
		L2_3[i]		= VOICE[i] + 6 - Q3[i];
		E3[i]		= L2_3[i] - PS_25[i];
		OM_3[i]		= get_omega( E3[i] );
		AF_3	   += OM_3[i] * AF_RUS_QS[i];
	}
	AF_3 = AF_3 * 0.05;

	printf("\n3. Коридор.\n");
	printf("O\tFreq\tVoice\tQ_3  L2_3\t~Ef~\t~Om_3~\n");

	for ( i = 0; i < OCT_NUM; i++ )
	{
		printf("%d\t%u\t%.1f\t%d   %.1f\t%.1f\t%.3f\n", i+1,
			FREQUENCY[i], VOICE[i], Q3[i], L2_3[i], E3[i], OM_3[i]);
	}
	print_af(AF_3);

	printf("\n");
	return 0;
}
Exemplo n.º 4
0
void set_wcell( struct domain * theDomain ){
   struct cell ** theCells = theDomain->theCells;
   int mesh_motion = theDomain->theParList.Mesh_Motion;
   int Nr = theDomain->Nr;
   int Nz = theDomain->Nz;
   int * Np = theDomain->Np;
   double * r_jph = theDomain->r_jph;
   double * z_kph = theDomain->z_kph;

   int i,j,k;
   for( j=0 ; j<Nr ; ++j ){
      for( k=0 ; k<Nz ; ++k ){
         int jk = j+Nr*k;
         double rm = r_jph[j-1];
         double rp = r_jph[j];
         double zm = z_kph[k-1];
         double zp = z_kph[k];
         for( i=0 ; i<Np[jk] ; ++i ){
            struct cell * cL = &(theCells[jk][i ]);  
            double w = 0.0;
            if( mesh_motion ){
               int ip = (i+1)%Np[jk];
               double phip = cL->piph;
               double phim = phip-cL->dphi;
               double xp[3] = {rp,phip,zp};
               double xm[3] = {rm,phim,zm};
               double r = get_moment_arm( xp , xm );
               double x[3] = {r, 0.5*(phim+phip), 0.5*(zm+zp)};
               double wL = get_omega( cL->prim , x );

               struct cell * cR = &(theCells[jk][ip]);
               phip = cR->piph;
               phim = phip-cR->dphi;
               xp[1] = phip;
               xm[1] = phim;
               r = get_moment_arm( xp , xm );
               x[0] = r;
               x[1] = 0.5*(phim+phip);
               double wR = get_omega( cR->prim , x );

               w = .5*(wL + wR); 
            }
            cL->wiph = w;
         }
      }    
   }
   if( mesh_motion == 3 ){
      for( j=0 ; j<Nr ; ++j ){
         for( k=0 ; k<Nz ; ++k ){
            int jk = j+Nr*k;
            double w = 0.0;
            for( i=0 ; i<Np[jk] ; ++i ){
               w += theCells[jk][i].wiph; 
            }    
            w /= (double)Np[jk];
            for( i=0 ; i<Np[jk] ; ++i ){
               theCells[jk][i].wiph = w; 
            }    
         }    
      } 
   }
   if( mesh_motion == 4 ){
      for( j=0 ; j<Nr ; ++j ){
         double r = .5*(r_jph[j]+r_jph[j-1]);
         for( k=0 ; k<Nz ; ++k ){
            int jk = j+Nr*k;
            for( i=0 ; i<Np[jk] ; ++i ){
               theCells[jk][i].wiph = r*mesh_om(r); 
            }    
         }    
      } 
   }

}
Exemplo n.º 5
0
void IAGRID::assign_omega(double* omega)
{
  for(int n=0; n<N; n++)
    omega[n] = get_omega(n);
}