эвакуация 3
.docxnk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { elemL = hx; qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
d_tranzit = (qmax_xx-elemxx.d_elem)*elemS; // вместимость элемента, чел.
if ( d_tranzit > ntran ) { elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS; }
else { elemxx.d_elem = elemxx.d_elem + d_tranzit/elemS;
elemk_near.d_elem = elemk_near.d_elem - d_tranzit/elemS; }
} } } } }; break; }; // swicth
if ((direct == 1) | (direct == -1))
{ if ((k_near=elemxx.yincrease) >=0) // сосед +y в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка +y от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == -2 ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!515! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { elemL=hx; qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
if (elemxx.d_elem < qmax_xx) {
d_tranzit = (qmax_xx-elemxx.d_elem)*elemS; // вместимость элемента, чел.
if ( d_tranzit > ntran ) { elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS; }
else { elemxx.d_elem = elemxx.d_elem + d_tranzit/elemS;
elemk_near.d_elem = elemk_near.d_elem - d_tranzit/elemS; } }
} } } };
if ((k_near=elemxx.yreduction) >=0) // сосед -y в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -y от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == 2 ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!525! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { elemL=hx; qin = elemk_near.velem()*elemk_near.d_elem;}
ntran = elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
if (elemxx.d_elem < qmax_xx) {
d_tranzit = (qmax_xx-elemxx.d_elem)*elemS; // вместимость элемента, чел.
if ( d_tranzit > ntran ) { elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS; }
else { elemxx.d_elem = elemxx.d_elem + d_tranzit/elemS;
elemk_near.d_elem = elemk_near.d_elem - d_tranzit/elemS; } }
} } } };
};
if ((direct == 2) | (direct == -2))
{ if ((k_near=elemxx.xincrease) >=0) // сосед +x в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка +x от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == -1 ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!541! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { elemL=hy; qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
if (elemxx.d_elem < qmax_xx) {
d_tranzit = (qmax_xx-elemxx.d_elem)*elemS; // вместимость элемента, чел.
if ( d_tranzit > ntran ) { elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS; }
else { elemxx.d_elem = elemxx.d_elem + d_tranzit/elemS;
elemk_near.d_elem = elemk_near.d_elem - d_tranzit/elemS; } }
} } } };
if ((k_near=elemxx.xreduction) >=0) // сосед -x в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -x от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == 1 ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!555! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { elemL=hy; qin = elemk_near.velem()*elemk_near.d_elem;}
ntran = elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
if (elemxx.d_elem < qmax_xx) {
d_tranzit = (qmax_xx-elemxx.d_elem)*elemS; // вместимость элемента, чел.
if ( d_tranzit > ntran ) { elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS; }
else { elemxx.d_elem = elemxx.d_elem + d_tranzit/elemS;
elemk_near.d_elem = elemk_near.d_elem - d_tranzit/elemS; } }
} } } };
} } } };
}
peopleTotal=0;
for (int kp=0; kp<n_Out; kp++) // Выходы из расчетной области (здания)
{ peopleTotal=peopleTotal+ peopleOut[kp];}
System.out.println(" \n \n Печать распределения людей Time="+time);
// DecimalFormat pip = new DecimalFormat("#.00");
num_people=0; // распределение людей по расчетной области
double pOut=0;
for (int i=1; i<Nx-1; i++) {System.out.println();
for (int j=1; j<Ny-1; j++) {
if (array[i][j]>=0) {number_elem=array[i][j]; people= al.get(number_elem).d_elem; //*hx*hy;
num_people=num_people+people*hx*hy; System.out.print(pip.format(people) +" ");}
else System.out.print(" "); }};
System.out.println("\n Number people "+pip.format(num_people) +" ");
for (int kp=0; kp<n_Out; kp++) // Выходы из расчетной области (здания)
{ pOut=pOut+ peopleOut[kp];
System.out.println(" Number people in out ("+kp+")= "+pip.format(peopleOut[kp])); };
double balance=pOut+ num_people;
System.out.println("\n Common number of people on out "+pip.format(pOut) +
"\n Balance N(in)+N(out) = "+pip.format(balance));
} // do Главный цикл по выходу всех людей из здания */
// while ((nn - peopleTotal)>0);
} }
/*
//оПРЕДЕЛЕНИЕ dmax
elem elemdd =new elem(100,0, 0,0,0,0,0,0);
double vElem, dvElem, dMax, ffElem, ffElemOld, ffMin, ddd, d1, ddp=0.005; // dvMax,
double qmax[]={16.5, 16.5, 19.6, 16.0, 11.0, 19.6}; // м/мин
double dmax[] = new double [10];
int priz=0;
for (int el=0; el<qmax.length; el++ )
{ ffMin=1.0e+5; dMax=0; ffElemOld=0;
ddd=zdan1.dElemMax*0.9;
do
{ elemdd.d_elem = ddd=ddd-ddp/elemS; if ( (el == 2) | (el == 5) ) { elemdd.type_elem = 2; vElem=elemdd.velem(1.0);}
else { elemdd.type_elem = 0; vElem=elemdd.velem();}
dvElem= ddd*vElem; ffElem = dvElem - qmax[el]/(zdan1.fp) ;
if (ffElem*ffElemOld < 0) { priz=0; dMax=ddd; ffMin= ffElem; break; }; ffElemOld=ffElem;
if (Math.abs(ffMin) > (d1=Math.abs(ffElem))) {priz=100; ffMin=ffElem; dMax=ddd; } }
while (ddd > 0.5);
dmax[el]=dMax;
System.out.println(" el= "+pip.format(el)+" priz= "+priz+" ffMin= "+pip.format(ffMin)+ " Dmax= "+ pip.format(dMax));
} System.out.println(Arrays.toString(dmax));
*/
// Отладка (печать)
/*
double dp=0.1;
for(int p= 1; p<30; p++) {
elemdd.d_elem = p*dp/elemS;
System.out.print("\n p= "+pip.format(p*dp)+" D= "+ pip.format(elemdd.d_elem)+
" V= "+ pip.format(elemdd.velem())+
" VD "+ pip.format(elemdd.velem()*elemdd.d_elem)+" dmax= "+ pip.format(elemdd.dmax())); } */
/*
//if (dvElem > dvMax) {dvMax = dvElem; dMax=ddd; }};
*/
//dmaxtt=qmax[el]/(zdan1.fp*vtt);
// if (dmaxtt > dmaxttx) {dmaxttx=dmaxtt; vttx=vtt; dmax[el]= dmaxttx ;
/*if ( (el == 0) | (el == 4) )
System.out.print("\n ff= "+pip.format(ffElem)+ " D= "+ pip.format(ddd)+ " V= "+ pip.format(vElem)+
" VD= "+ pip.format(dvElem) + " ffMin= "+pip.format(ffMin)+ " Dmax= "+ pip.format(dMax) );
версия от 27.04. 2012
{ switch(direct) {
case -1: // Поток по направлению -х
{ if ((k_near=elemxx.xincrease) >=0) // сосед +x в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка справа от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == direct ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!453! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qmax_near=elemk_near.dmax(elemL); qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { qmax_near=elemk_near.dmax(); elemL=hy; qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS;
} } } } }; break;
case 1: // Поток по направлению х
{ if ((k_near=elemxx.xreduction) >=0) // сосед -x в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -x от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == direct ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!466! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qmax_near=elemk_near.dmax(elemL); qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { qmax_near=elemk_near.dmax(); elemL = hy; qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS;
} } } } }; break;
case -2: // Поток по направлению -y
{ if ((k_near=elemxx.yincrease) >=0) // сосед +y в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка справа от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == direct ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!482! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qmax_near=elemk_near.dmax(elemL); qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { qmax_near=elemk_near.dmax(); elemL =hx; qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS;
} } } } }; break;
case 2: // Поток по направлению y
{ if ((k_near=elemxx.yreduction) >=0) // сосед -y в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -y от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if(elemk_near.direct_elem == direct ) { if (elemk_near.d_elem >0)
{ if (elemk_near.type_elem == 5) System.out.println("\n!498! Mistake!!elemk_near.type_elem == 5 ");
nk_near=elemk_near.d_elem*elemS;
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
elemL=al_Door.get(num_Door).l; qmax_near=elemk_near.dmax(elemL); qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem(elemL)*elemk_near.d_elem;}
else { qmax_near=elemk_near.dmax(); elemL = hx; qin=0;
if (elemxx.d_elem <= qmax_near) qin = elemk_near.velem()*elemk_near.d_elem;}
ntran =elemL*qin*tay; if (ntran > nk_near) ntran = nk_near;
elemxx.d_elem = elemxx.d_elem + ntran/elemS;
elemk_near.d_elem = elemk_near.d_elem - ntran/elemS;
} } } } }; break; }; // swicth */
/*
elem elemdd =new elem(100,0, 0,0,0,0,0,0);
for(int p= 1; p<30; p++) {
double elemSS=1;
elemdd.d_elem = p/elemSS;
System.out.print("\n p= "+p+" D= "+ pip.format(elemdd.d_elem)+
" V= "+ pip.format(elemdd.velem())+" dmax= "+ pip.format(elemdd.dmax())); } */
/*
for (int i=1; i<Nx-1; i++)
for (int j=1; j<Ny-1; j++)
if (array[i][j]>=0) {number_elem=array[i][j]; al.get(number_elem).d_elem= al.get(number_elem).d_new;};
*/
/* // ******
if ((direct == 1) | (direct == -1)) {
{qplus2=0;
if ((k_near=elemxx.yincrease) >=0) // сосед + в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка +y от соседа
if(elemk_near.outelem == kk) { // ячейка соседняя относится к выходу kk
if( (elemk_near.d_elem > 0) & (elemk_near.direct_elem == -2) )
{if (elemk_near.type_elem == 5) System.out.println("\n!(439)!! Mist-2!!elemk_near.type_elem == 5 ");
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
double ll=al_Door.get(num_Door).l;
if (elemxx.d_elem <= elemk_near.dmax(ll)) qplus2=elemk_near.velem(ll)*elemk_near.d_elem;} // 2
else { if (elemxx.d_elem <=elemk_near.dmax()) qplus2=elemk_near.velem()*elemk_near.d_elem;} } } } };
{qmin2=0;
if ((k_near=elemxx.yreduction) >=0) // сосед - в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -y от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
if( (elemk_near.d_elem > 0) & (elemk_near.direct_elem == 2) )
{if (elemk_near.type_elem == 5) System.out.println("\n!(449)!! Mist-2!!elemk_near.type_elem == 5 ");
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
double ll=al_Door.get(num_Door).l;
if (elemxx.d_elem <= elemk_near.dmax(ll)) qmin2=elemk_near.velem(ll)*elemk_near.d_elem;} // 2
else { if (elemxx.d_elem <=elemk_near.dmax()) qmin2=elemk_near.velem()*elemk_near.d_elem;} } } };
dqy= (qplus2+qmin2)/hy; }; //((direct == 1) | (direct == -1))
if ((direct == 2) | (direct == -2)) {
{qplus1=0;
if ((k_near=elemxx.xincrease) >=0) // сосед + в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка +x от соседа
if(elemk_near.outelem == kk) { // ячейка соседняя относится к выходу kk
if( (elemk_near.d_elem > 0) & (elemk_near.direct_elem == -1) )
{if (elemk_near.type_elem == 5) System.out.println("\n!(461)!! Mist-2!!elemk_near.type_elem == 5 ");
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
double ll=al_Door.get(num_Door).l;
if (elemxx.d_elem <= elemk_near.dmax(ll)) qplus1=elemk_near.velem(ll)*elemk_near.d_elem;} // 2
else { if (elemxx.d_elem <=elemk_near.dmax()) qplus1=elemk_near.velem()*elemk_near.d_elem;} } } } };
{qmin1=0;
if ((k_near=elemxx.xreduction) >=0) // сосед - в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -x от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
if( (elemk_near.d_elem > 0) & (elemk_near.direct_elem == 1) )
{if (elemk_near.type_elem == 5) System.out.println("\n!(471)!! Mist-2!!elemk_near.type_elem == 5 ");
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
double ll=al_Door.get(num_Door).l;
if (elemxx.d_elem <= elemk_near.dmax(ll)) qmin1=elemk_near.velem(ll)*elemk_near.d_elem;} // 2
else { if (elemxx.d_elem <=elemk_near.dmax()) qmin1=elemk_near.velem()*elemk_near.d_elem;} } } };
dqx= (qplus1+qmin1)/hx; };
//***
*
*/
/* else {qmin1=0;
if ((k_near=elemxx.xreduction) >=0) // сосед слева в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка слева от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if (elemxx.d_elem >0) {
if (elemxx.type_elem == 2){ int num_Door = elemxx.number_Door;
double ll=al_Door.get(num_Door).l;
if (elemk_near.d_elem <= elemxx.dmax(ll)) qmin1=elemxx.velem(ll)*elemxx.d_elem;} // 2
else { if (elemk_near.d_elem <= elemxx.dmax()) qmin1=elemxx.velem()*elemxx.d_elem;} }
} else System.out.println(" !484! elemk_near.outelem != kk "+elemk_near.outelem + " kk "+ kk);
} else System.out.println(" !485! k_near=elemxx.xreduction !>=0 "+k_near); };
*/
/* dvx=-(vplus1-vmin1)/hx;
{vplus2=0;
if ((k_near=elemxx.yincrease) >=0) // сосед + в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка +y от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if (elemk_near.type_elem == 5) System.out.println("\n!!! Mist-2!!elemk_near.type_elem == 5 ");
if (elemk_near.d_elem <= elemxx.dmax()) vplus1= elemxx.velem();}
} };
{vmin2=0;
if ((k_near=elemxx.yreduction) >=0) // сосед - в расчетной области (номер ячейки)
{elemk_near = al.get(k_near); // ячейка -y от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ if (elemk_near.type_elem == 5) System.out.println("\n!!! Mist-3!!elemk_near.type_elem == 5 ");
if (elemxx.d_elem <= elemk_near.dmax()) vmin1= elemk_near.velem();}
} };
dvy= (vplus2-vmin2)/hy;
{ qmax_near=elemk_near.dmax();
if (qmax_near <= elemxx.dmax()) vplus2= elemxx.velem(); }}};
iuyruyrfuff
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
double ll=al_Door.get(num_Door).l; qmax_near=elemk_near.dmax(ll);
if (elemxx.d_elem <= qmax_near) vplus1= -elemk_near.velem(ll);}
else { qmax_near=elemk_near.dmax();
if (elemxx.d_elem <= qmax_near) vplus1= -elemk_near.velem();}
}}};
} };
vmin1=0; // Скорость входа по направлению -1
if ((k_near=elemxx.xincrease) >=0) // сосед справа в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка справа от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_near=elemk_near.dmax(); // максимальная плотность потока в соседней ячейке
if (elemxx.d_elem <= qmax_near) vmin1=elemk_near.velem(); } };
dvx= (vplus1-vmin1)/hx;
vmin2 = vplus2 =0;
if ((k_near=elemxx.yreduction) >=0) // сосед снизу в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка снизу от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_near=elemk_near.dmax(); // максимальная плотность потока в соседней ячейке
if (elemxx.d_elem <= qmax_near) vmin2=elemk_near.velem(); } };
if ((k_near=elemxx.yincrease) >=0) // сосед сверху в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка сверху от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_0=elemxx.dmax(); // максимальная плотность потока в ij ячейке
if (elemk_near.d_elem <= qmax_0) vplus2=elemxx.velem(); } };
dvy= (vplus2-vmin2)/hy; divv=dvx+dvy; break;
kjhgf
case 1: vplus1=elemxx.velem(outL[kk]); // Скорость выхода по направлению 1; ось х направлена по направлению 1, ось y по направлению +2
vmin1=0; // Скорость входа по направлению 1
if ((k_near=elemxx.xreduction) >=0) // сосед слева в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка слева от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_near=elemk_near.dmax(); // максимальная плотность потока в соседней ячейке
if (elemxx.d_elem <= qmax_near) vmin1=elemk_near.velem(); } };
dvx= (vplus1-vmin1)/hx;
vmin2 = vplus2 =0;
if ((k_near=elemxx.yreduction) >=0) // сосед снизу в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка снизу от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_near=elemk_near.dmax(); // максимальная плотность потока в соседней ячейке
if (elemxx.d_elem <= qmax_near) vmin2=elemk_near.velem(); } };
if ((k_near=elemxx.yincrease) >=0) // сосед сверху в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка сверху от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_0=elemxx.dmax(); // максимальная плотность потока в ij ячейке
if (elemk_near.d_elem <= qmax_0) vplus2=elemxx.velem(); } };
dvy= (vplus2-vmin2)/hy;
divv=dvx+dvy; break;
}
{ qmax_near=elemk_near.dmax(); // максимальная плотность потока в соседней ячейке
if (elemxx.d_elem <= qmax_near) vplus1=elemk_near.velem(); } };
break;
case 1: vplus1=elemxx.velem(outL[kk]); // Скорость выхода по направлению 1
vplus1=0; // Скорость входа по направлению 1
if ((k_near=elemxx.xincrease) >=0) // сосед справа в расчетной области (номер ячейки)
{ elemk_near = al.get(k_near); // ячейка справа от соседа
if(elemk_near.outelem == kk) // ячейка соседняя относится к выходу kk
{ qmax_near=elemk_near.dmax(); // максимальная плотность потока в соседней ячейке
if (elemxx.d_elem <= qmax_near) vplus1=elemk_near.velem(); } }; break;
}
}
k_kd = elemk_near.outelem; // предписание выхода для соседа справа
if (k_kd != kk) // сосед подлежит обработке
element =(elem) itrOut_kk.next(); // следующий элемент списка выхода kk
}
while (itrOut_kk.hasNext()) ; // do {}
hxyz=0.5*hx; direct_elem=-1; break;
case 1: hxyz=0.5*hx; direct_elem=1; break;
case -2: hxyz=0.5*hy; direct_elem=-2; break;
case 2: hxyz=0.5*hy; direct_elem=2; break;
// case -3: case 3: hxyz= hxyz=0.5*hz; direct_elem=3; break;
default: {hxyz=-1000; direct_elem=-1000;}; } // ошибка
*/
/*
if (elemk_near.type_elem == 2){ int num_Door = elemk_near.number_Door;
double ll=al_Door.get(num_Door).l; qmax_near=elemk_near.dmax(ll);
if (elemxx.d_elem <= qmax_near) vplus1= elemk_near.velem(ll);}
else
/*
777 if (elemk_near.d_elem <= elemxx.dmax())
{ if (elemxx.type_elem == 2) { int num_Door = elemxx.number_Door;
double ll=al_Door.get(num_Door).l;
vmin1=-elemxx.velem(ll);} else vmin1=-elemxx.velem();
}; } else System.out.println(" !!! elemk_near.outelem != kk "+elemk_near.outelem + " kk "+ kk);
} else System.out.println(" !!! k_near=elemxx.xreduction) < 0"+k_near + " kk "+ kk);
};
// System.out.println("\n klist "+klist); // выходные потоки
/* System.out.println("\n klist "+klist);
for (int i=1; i<Nx-1; i++) {System.out.println();
for (int j=1; j<Ny-1; j++) {
if (array[i][j]>=0) {number_elem=array[i][j]; System.out.print(al.get(number_elem).outelem+" ");} }};*/
// ArrayList<ArrayList<Double>> ddd = new ArrayList<ArrayList<Double>>();// Списки плотности на выход (n_out);
// for (int ii = 0; ii < n_Out; ii++) ddd.add(new ArrayList<Double>());
import java.text.DecimalFormat;
public class elem { // 14.05.2012
// Характеристики элемента (неизменяемые)
int number; // номер элемента
int type_elem; // тип ячейки по наклону и наличию выхода
// type_elem = 0 - горизонтальный путь в здании type_elem = 1 - гор. путь вне здания
// type_elem = 2 - дверной проем в расчетной области
// type_elem = 3 - лестница вниз type_elem = 4 - - лестница вверх
// type_elem = 5 - выход из расчетной области (например, из здания)
int xreduction; // номер элемента - левый (уменьшение по х)
int xincrease; // номер элемента - правый (увеличение по х)
int yreduction; // номер элемента - нижний (уменьшение по у)
int yincrease; // номер элемента - верхний (увеличение по у)
double powerSourse; // мощность источника в ячейке, человек/минуту
int number_Door; // номер (индекс) двери в расчетной области
// Характеристики элемента (изменяемые)
int outelem; // признак выхода - связь с выходом номера k.
// при k=-1, т.е. <0 - номер выхода пока не определен
int direct_elem; // направление прохода по ячейке: 1 по х; 2 по у; 3 по z (0 - е определено)
double time_outelem;// время достижения выхода k из элемента numder, минут
double d_elem; // плотность в элементе, человек/м2
double d_max; // максимальная плотность в элементе, человек/м2
elem(int number, int type_elem, int xreduction, int xincrease,
int yreduction, int yincrease,
double powerSourse,
int outelem ) {
this.number=number;
this.type_elem=type_elem; // тип ячейки по наклону и наличию выхода
this.xreduction =xreduction; // номер элемента - левый
this.xincrease =xincrease; // номер элемента - правый
this.yreduction =yreduction; // номер элемента - нижний
this.yincrease =yincrease; // номер элемента - верхний
this.powerSourse=powerSourse; // мощность источника 0- нет источника
this.outelem=outelem; // признак выхода - связь с выходом k.
// при k=-1, т.е. <0 - номер выхода пока не определен
}
double velem( ){ // Скорость м/мин
// type_elem = 0 - горизонтальный путь в здании type_elem = 1 - гор. путь вне здания
// type_elem = 2 - дверной проем в расчетной области
// type_elem = 3 - лестница вниз type_elem = 4 - - лестница вверх
// type_elem = 5 - выход из расчетной области (например, из здания)
double v0[]={100,100,100,80,50,100}; // м/мин
double d0[]={0.51, 0.7, 0.65, 0.89, 0.67, 0.65};
double a[] = {0.295, 0.407, 0.295, 0.4, 0.305, 0.295};
double v0k=0;
if(d_elem < d0[type_elem]) { v0k=v0[type_elem]; return v0k; }
else {
if (d_elem < zdan1.dElemMax )
{ v0k=v0[type_elem]*(1.0-a[type_elem]*Math.log(d_elem/d0[type_elem])); return v0k; }
else { v0k=zdan1.vMin; return v0k; } }
}
double velem(double l ){ // Скорость м/мин
// l - ширина проема, метр
// type_elem = 0 - горизонтальный путь в здании type_elem = 1 - гор. путь вне здания
// type_elem = 2 - дверной проем в расчетной области
// type_elem = 3 - лестница вниз type_elem = 4 - - лестница вверх
// type_elem = 5 - выход из расчетной области (например, из здания)
double v0[]={100,100,100,80,50,100}; // м/мин
// double sigma[]={5,5,5,5,5,5};
double d0[]={0.51, 0.7, 0.65, 0.89, 0.67, 0.65};
double a[] = {0.295, 0.407, 0.295, 0.4, 0.305, 0.295};
double m, v0k=0;
boolean tt = ((type_elem == 2) | (type_elem == 5));
if ( tt) {
if(d_elem <= d0[type_elem]) v0k= v0[type_elem];
if((d_elem > d0[type_elem]) & (d_elem < 5.0 ))
v0k = v0[type_elem]*(1.0-a[type_elem]*Math.log(d_elem/d0[type_elem]));
if((d_elem >= 5) & (d_elem < 9.0 )) { m=1.25-0.05*d_elem;
v0k = v0[type_elem]*(1.0-a[type_elem]*Math.log(d_elem/d0[type_elem]))*m; }
if((d_elem >= 9) & (d_elem < zdan1.dElemMax ) ) v0k=10*(3.75+2.5*l)/d_elem;
if(d_elem >= zdan1.dElemMax ) v0k = zdan1.vMin;}
else System.out.println("!!!!elem-81 type_elem (velem(l)= "+ type_elem );
return v0k; }
double dmax( ){ // максимально-допустимая плотность, чел/м2
// type_elem = 0 - горизонтальный путь в здании type_elem = 1 - гор. путь вне здания
// type_elem = 2 - дверной проем в расчетной области
// type_elem = 3 - лестница вниз type_elem = 4 - - лестница вверх
// type_elem = 5 - выход из расчетной области (например, из здания)
double qmax[]={16.5, 16.5, 19.6, 16.0, 11.0, 19.6}; // м/мин
// double v_i = velem();
double q_i;
if (d_elem < zdan1.dElemMax ) { q_i = qmax[type_elem]/(zdan1.fp*velem());
if (q_i > zdan1.dElemMax ) q_i = zdan1.dElemMax; } else q_i = zdan1.dElemMax;
return q_i; }
double dmax(double l ){ // максимально-допустимая плотность, чел/м2
// l - ширина проема, метр
// type_elem = 0 - горизонтальный путь в здании type_elem = 1 - гор. путь вне здания
// type_elem = 2 - дверной проем в расчетной области
// type_elem = 3 - лестница вниз type_elem = 4 - - лестница вверх
// type_elem = 5 - выход из расчетной области (например, из здания)
// if ((type_elem != 2) & (type_elem != 5)) System.out.println("!!!! Mistake type_elem != 2,5 (dmax(l)) = "+ type_elem );
double qmax[]={16.5, 16.5, 19.6, 16.0, 11.0, 19.6}; // м/мин
double v_i =0,q_i=0;
boolean tt = ((type_elem == 2) | (type_elem == 5));
if (tt) { if (d_elem < zdan1.dElemMax ) {v_i = velem(l); q_i = (qmax[type_elem]/zdan1.fp)/v_i;
if (q_i > zdan1.dElemMax ) q_i = zdan1.dElemMax; } else q_i = zdan1.dElemMax; }
else System.out.println("!107! Mistake type_elem (dmax(l) )= "+ type_elem );
return q_i; }
void printelem(){
DecimalFormat prpr = new DecimalFormat("#0.00");
DecimalFormat prpr1 = new DecimalFormat("#0.0000");
System.out.println(" \n number "+number+" Type "+ type_elem); // номер элемента
System.out.println(" левый центр правый "+ xreduction+" "+number+" "+xincrease);
System.out.println(" нижний центр верхний "+ yreduction+" "+number+" "+yincrease);
// System.out.println("xreduction "+xreduction); // левый (уменьшение по х)
// System.out.println("xincrease "+xincrease); // правый (увеличение по х)
// System.out.println("yreduction "+yreduction); // нижний (уменьшение по y)
// System.out.println("yincrease "+yincrease); // верхний (увеличение по y)
System.out.println("powerSourse "+powerSourse);// мощность источника в ячейке, чел./минуту
System.out.println("outelem "+outelem + // признак выхода =-k связь с выходом k.
" время достижения выхода outelem "+ prpr1.format(time_outelem)); //, минуты
System.out.println("direct_elem "+prpr.format(direct_elem)); // направление прохода по ячейке
System.out.println("d_elem "+prpr.format(d_elem) // плотность в элементе, человек/м2
+" скорость на плоскости "+prpr.format(velem()));
}
}
/*
}
if((d_elem>d0[type_elem]) & (d_elem <) {
v0k=v0[type_elem]*(1.0-a[type_elem]*Math.log(d_elem/d0[type_elem]));
// if (v0k > v_max) v0k=v_max;
if (v0k <= 0) v0k=10.0;}
else v0k=v0[type_elem];
return v0k ; }*/
/* double qmax[]={16.5, 16.5, 19.6, 16.0, 11.0, 19.6}; // м/мин
* dElmax, v_max;
dElmax = (qmax[type_elem]/zdan1.fp); v_max=dElmax/d_elem;
if(d_elem >= 5) m=1.25-0.05*d_elem; else m=1;
m=1;
if (d_elem>d0[type_elem])
v0k=v0[type_elem]*(1.0-a[type_elem]*Math.log(d_elem/d0[type_elem]))*m;
else v0k=v0[type_elem];
if ((d_elem>=9) & (tt ) ) v0k=10*(3.75+2.5*l)/d_elem;
*/
import java.text.DecimalFormat;
//import java.util.Arrays;
public class doorElem { // класс дверей 14.05.2012
int numElem; // номер элемента с дверью
int elem_type; // тип ячейки, где расположена дверь ( 2 или 5 )
int type_door; // тип двери, (пока не используется)
int direct_elem; // направление движения через дверь
double l; // ширина проема в двери, м
//double dMax; // максимальная плотность, м/мин
// elem elemDoor;
doorElem( int numElem, int elem_type, int direct_elem, double l ) { //, double elemS ) {
this.numElem=numElem;
this.elem_type = elem_type;
this.direct_elem = direct_elem;
this.l=l;
}
double dmax(double l, double hx, double hy ){ // максимально-допустимая плотность, чел/м2
// l - ширина проема, метр
// type_elem = 2 - дверной проем в расчетной области
// type_elem = 5 - выход из расчетной области (например, из здания)
double qmax[]={16.5, 16.5, 19.6, 16.0, 11.0, 19.6}; // м/мин
double vElem, dvElem, ffElem, ddd, ddp=0.005; // dvMax,
int priz=0;
int el=2;
double ffMin=1.0e+5, dMax=0, ffElemOld=0, elemS=hx*hy;
ddd=zdan1.dElemMax*0.99;
elem elemdd =new elem(100,2, 0,0,0,0,0,0);
do
{ elemdd.d_elem = ddd=ddd-ddp/elemS;
vElem=elemdd.velem(l);
if (ddd >= 9) dvElem=10*(3.75+2.5*l); else dvElem= ddd*vElem;
ffElem = dvElem - qmax[el]/(zdan1.fp) ;
if (ffElem*ffElemOld < 0) { priz=0; dMax=ddd; ffMin= ffElem; break; }; ffElemOld=ffElem;
if (Math.abs(ffMin) > (Math.abs(ffElem))) {priz=100; ffMin=ffElem; dMax=ddd; } }
while (ddd > 0.5);
System.out.println(" el= 2 "+" priz= "+priz+" ffMin= "+ffMin+ " Dmax= "+ dMax);
return dMax; }
void printdoor (){
DecimalFormat prpr = new DecimalFormat("#0.00");
System.out.println(" \n Дверь :numElem "+numElem+" elem_type "+elem_type+" direct_elem "+direct_elem+
" Ширина проема "+ prpr.format(l) ); //+" Мак. плотность "+ prpr.format(dMax));
}
}
/*};
double v_i =0,q_i=0;
boolean tt = ((type_elem == 2) | (type_elem == 5));
if (tt) { if (d_elem < zdan1.dElemMax ) {v_i = velem(l); q_i = (qmax[type_elem]/zdan1.fp)/v_i;
if (q_i > zdan1.dElemMax ) q_i = zdan1.dElemMax; } else q_i = zdan1.dElemMax; }
else System.out.println("!107! Mistake type_elem (dmax(l) )= "+ type_elem );
return q_i; }
*/
/*
//double dmax;
elem elemdd =new elem(100,0, 0,0,0,0,0,0);
double vElem, dvElem, dMax_x, ffElem, ffElemOld, ffMin, ddd, d1, ddp=0.005; // dvMax,
double qmax[]={16.5, 16.5, 19.6, 16.0, 11.0, 19.6}; // м/мин
int priz=0;
int el=2;
ffMin=1.0e+5; dMax=0; ffElemOld=0;
ddd=zdan1.dElemMax*0.9;
do
{ elemdd.d_elem = ddd=ddd-ddp/elemS;
if ( (elem_type == 2) | (elem_type == 5) ) { elemdd.type_elem = 2; vElem=elemdd.velem(l);}
else { elemdd.type_elem = 0; vElem=elemdd.velem();}
dvElem= ddd*vElem; ffElem = dvElem - qmax[el]/(zdan1.fp) ;
if (ffElem*ffElemOld < 0) { priz=0; dMax=ddd; ffMin= ffElem; break; }; ffElemOld=ffElem;
if (Math.abs(ffMin) > (d1=Math.abs(ffElem))) {priz=100; ffMin=ffElem; dMax=ddd; } }
while (ddd > 0.5);
// System.out.println(" el= 2 "+" priz= "+priz+" ffMin= "+ffMin+ " Dmax= "+ dMax);
this.dMax = dMax;
}; */