예제 #1
0
파일: innblobs.cpp 프로젝트: rkube/feltor
void drawScene( const Solver& solver, target t, draw::RenderHostData& rend)
{
    ParticleDensity particle( solver.getField( TL_IMPURITIES), solver.blueprint());
    double max;
    const typename Solver::Matrix_Type * field;

    if( t == TL_ALL)
    {
        rend.set_multiplot(2,2);
        { //draw electrons
        field = &solver.getField( TL_ELECTRONS);
        visual = field->copy(); 
        map.scale() = fabs(*std::max_element(visual.begin(), visual.end()));
        rend.renderQuad( visual, field->cols(), field->rows(), map);
        window_str << scientific;
        window_str <<"ne / "<<map.scale()<<"\t";
        }

        { //draw Ions
        typename Solver::Matrix_Type ions = solver.getField( TL_IONS);
        particle.linear( ions, solver.getField( TL_POTENTIAL), ions, 0 );
        visual = ions.copy();
        rend.renderQuad( visual, field->cols(), field->rows(), map);
        window_str <<" ni / "<<map.scale()<<"\t";
        }

        if( solver.blueprint().isEnabled( TL_IMPURITY))
        {
            typename Solver::Matrix_Type impurities = solver.getField( TL_IMPURITIES);
            particle.linear( impurities, solver.getField(TL_POTENTIAL), impurities, 0 );
            visual = impurities.copy(); 
            map.scale() = fabs(*std::max_element(visual.begin(), visual.end()));
            rend.renderQuad( visual, field->cols(), field->rows(), map);
            window_str <<" nz / "<<max<<"\t";
        }
        else
            rend.renderEmptyQuad();

        { //draw potential
        typename Solver::Matrix_Type phi = solver.getField( TL_POTENTIAL);
        particle.laplace( phi );
        visual = phi.copy(); 
        map.scale() = fabs(*std::max_element(visual.begin(), visual.end()));
        rend.renderQuad( visual, field->cols(), field->rows(), map);
        window_str <<" phi / "<<max<<"\t";
        }
    }
    else
    {
        rend.set_multiplot(1,1);
        field = &solver.getField( t);
        visual = field->copy(); 
        map.scale() = fabs(*std::max_element(visual.begin(), visual.end()));
        rend.renderQuad( visual, field->cols(), field->rows(), map);
        window_str << scientific;
        window_str <<"Max "<<max<<"\t";
    }

        
}