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); } }
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)); }
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; }
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); } } } } }
void IAGRID::assign_omega(double* omega) { for(int n=0; n<N; n++) omega[n] = get_omega(n); }