void Navierstokes::exportResults( double time, element_type& U ) { auto u = U.element<0>(); auto p = U.element<1>(); auto v = V.element<0>(); auto q = V.element<1>(); #if defined( FEELPP_USE_LM ) auto lambda = U.element<2>(); auto nu = V.element<2>(); LOG(INFO) << "value of the Lagrange multiplier lambda= " << lambda( 0 ) << "\n"; #endif double div_u_error_L2 = normL2( _range=elements( u.mesh() ), _expr=divv( u ) ); LOG(INFO) << "[navierstokes] ||div(u)||_2=" << div_u_error_L2 << "\n"; if ( exporter->doExport() ) { exporter->step( time )->setMesh( U.functionSpace()->mesh() ); exporter->step( time )->addRegions(); exporter->step( time )->add( {"u","p","l"}, U ); exporter->save(); } } // NavierStokes::export
V3 V3::unit() const { V3 out(*this); out /= normL2(); return out; }
static inline float normL2(const Point3f& a, const Point3f& b) { return normL2(a - b); }