void Geometry::Update_All(Grid* p,Grid* u,Grid* v,real_t pL,real_t pR) const { Iterator it = Iterator(this); it.First(); while (it.Valid()){ //cout<<it.Value()<<"b:"<< _b->Cell(it)<<endl; if(_b->Cell(it)==0){ //Mach nichts da keine Randpunkt } else if(_b->Cell(it)==1){//no Slip Bedingung if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //nichts tun da alle Ränder auch Rand sind. } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts ist Wasser p->Cell(it)=p->Cell(it.Right()); u->Cell(it)=0; v->Cell(it)=-1*(v->Cell(it.Right())); } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Oben ist Wasser p->Cell(it)=p->Cell(it.Top()); u->Cell(it)=-1*(u->Cell(it.Top())); v->Cell(it)=0; } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Links ist Wasser p->Cell(it)=p->Cell(it.Left()); u->Cell(it)=0; u->Cell(it.Left())=0; v->Cell(it)=-1*(v->Cell(it.Left())); } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten ist Wasser p->Cell(it)=p->Cell(it.Down()); u->Cell(it)=-1*(u->Cell(it.Down())); v->Cell(it)=0; v->Cell(it.Down())=0; } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts und Oben ist Wasser p->Cell(it)=( p->Cell(it.Right())+p->Cell(it.Top()) )/2.0; // Mittelwert des Druckes u->Cell(it)=0; v->Cell(it)=0; } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Oben und Links ist Wasser p->Cell(it)=( p->Cell(it.Left())+p->Cell(it.Top()) )/2.0; // Mittelwert des Druckes u->Cell(it)=0; u->Cell(it.Left())=0;; v->Cell(it)=0; } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){ //Links und Unten ist Wasser p->Cell(it)=( p->Cell(it.Left())+p->Cell(it.Down()) )/2.0; // Mittelwert des Druckes u->Cell(it)=0; u->Cell(it.Left())=0;; v->Cell(it)=0; v->Cell(it.Down())=0; } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten und Rechts ist Wasser p->Cell(it)=( p->Cell(it.Down())+p->Cell(it.Right()) )/2.0; // Mittelwert des Druckes u->Cell(it)=0; v->Cell(it)=0; v->Cell(it.Down())=0; } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Links und Rechts ist Wasser //Rechts ist Wasser p->Cell(it)= 0.5*(p->Cell(it.Right()) + p->Cell(it.Left())); //p->Cell(it)=p->Cell(it.Right()); u->Cell(it)= 0; v->Cell(it)= -0.5*(v->Cell(it.Right()) + v->Cell(it.Left())); //v->Cell(it)= -(v->Cell(it.Right())); //v->Cell(it.Down())= -(v->Cell(it.Down().Right())); } else{ cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl; } } else if(_b->Cell(it)==2){//Slip Bedingung cout<<"2 not implemented!"<<endl; if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //nichts tun da alle Ränder auch Rand sind. } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts und Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Oben und Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){ //Links und Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten und Rechts ist Wasser } else{ cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl; } } else if(_b->Cell(it)==3){//linker Rand OUTFLOW Bedingung if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //nichts tun da alle Ränder auch Rand sind. } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts ist Wasser p->Cell(it)= 2.0*pL - p->Cell(it.Right()); //u->Cell(it.Right()) = u->Cell(it.Right().Right()); u->Cell(it)= u->Cell(it.Right()); v->Cell(it)= v->Cell(it.Right()); //u->Cell(it) = 1.0; //v->Cell(it) = 0.0;//2.0*0.0 - v->Cell(it.Right()); //p->Cell(it) = p->Cell(it.Right()); } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts und Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Oben und Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){ //Links und Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten und Rechts ist Wasser } else{ cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl; } } else if(_b->Cell(it)==4){//rechter Rand OUTFLOW Bedingung if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //nichts tun da alle Ränder auch Rand sind. } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Links ist Wasser //real_t tmp = 1.0; //p->Cell(it.Left());//2.0*1.0 - p->Cell(it.Left()); //cout << p->Cell(it.Left()) << endl; p->Cell(it)= 2.0*pR - p->Cell(it.Left()); //u->Cell(it.Left())=u->Cell(it.Left().Left()); u->Cell(it)=u->Cell(it.Left()); v->Cell(it)=v->Cell(it.Left()); } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts und Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Oben und Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){ //Links und Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten und Rechts ist Wasser } else{ cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl; } } else if(_b->Cell(it)==5){//oben INFLOW Bedingung (driven Cavity) if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //nichts tun da alle Ränder auch Rand sind. } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts ist Wasser p->Cell(it)= p->Cell(it.Right()); u->Cell(it)=1.0;//u->Cell(it.Right()); v->Cell(it)= 0;//v-> } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten ist Wasser p->Cell(it)=p->Cell(it.Down()); u->Cell(it)=2.0-(u->Cell(it.Down())); v->Cell(it)=0; v->Cell(it.Down())=0; } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){ //Rechts und Oben ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){ //Oben und Links ist Wasser } else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){ //Links und Unten ist Wasser } else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){ //Unten und Rechts ist Wasser } else{ cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl; } } it.Next(); } }