Hello all I am trying to rewrite step-43 in parallel follwing paths of step-32. I want just first to solve the darcy system then after I will move on solving the saturation equation in time. While trying to slove the darcy system I am having this errror message below:
The trace back is easy to follow. As there is no additional information, I am just stuck. Any hint dealii creator? :) An error occurred in line <3635> of file </home/franckm/deal.ii-candi/tmp/unpack/deal.II-v8.5.0/source/fe/fe_values.cc> in function void dealii::FEValues<dim, spacedim>::initialize(dealii::UpdateFlags) [with int dim = 2; int spacedim = 2] The violated condition was: (update_flags & update_normal_vectors) == false Additional information: (none) Stacktrace: ----------- #0 /home/franckm/deal.ii-candi/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0: dealii::FEValues<2, 2>::initialize(dealii::UpdateFlags) #1 /home/franckm/deal.ii-candi/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0: dealii::FEValues<2, 2>::FEValues(dealii::FiniteElement<2, 2> const&, dealii::Quadrature<2> const&, dealii::UpdateFlags) #2 ./darcyparl: Step43::Assembly::Scratch::DarcyPreconditioner<2>::DarcyPreconditioner(dealii::FiniteElement<2, 2> const&, dealii::Quadrature<2> const&, dealii::UpdateFlags, dealii::FiniteElement<2, 2> const&, dealii::UpdateFlags) #3 ./darcyparl: Step43::Assembly::Scratch::DarcySystem<2>::DarcySystem(dealii::FiniteElement<2, 2> const&, dealii::Quadrature<2> const&, dealii::Quadrature<1> const&, dealii::UpdateFlags, dealii::FiniteElement<2, 2> const&, dealii::UpdateFlags) #4 ./darcyparl: Step43::TwoPhaseFlowProblem<2>::assemble_darcy_system() #5 ./darcyparl: Step43::TwoPhaseFlowProblem<2>::solve() #6 ./darcyparl: Step43::TwoPhaseFlowProblem<2>::run() #7 ./darcyparl: main and far down.... [franckm-Inspiron-3543:13997] *** Process received signal *** [franckm-Inspiron-3543:13997] Signal: Aborted (6) [franckm-Inspiron-3543:13997] Signal code: (-6) [franckm-Inspiron-3543:13996] *** Process received signal *** [franckm-Inspiron-3543:13996] Signal: Aborted (6) [franckm-Inspiron-3543:13996] Signal code: (-6) ...... [franckm-Inspiron-3543:13998] *** Process received signal *** [franckm-Inspiron-3543:13998] Signal: Aborted (6) [franckm-Inspiron-3543:13998] Signal code: (-6) [franckm-Inspiron-3543:13996] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10330) [0x7f226587f330] [franckm-Inspiron-3543:13996] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x37) [0x7f2264ed2c37] [franckm-Inspiron-3543:13996] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x148) [0x7f2264ed6028] [franckm-Inspiron-3543:13996] [ 3] /home/franckm/deal.ii-candi/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0(_ZN6dealii18deal_II_exceptions9internals5abortERKNS_13ExceptionBaseEb+0x3b) [0x7f226cf4d4da] [franckm-Inspiron-3543:13996] [ 4] /home/franckm/deal.ii-candi/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0(_ZN6dealii18deal_II_exceptions9internals11issue_errorINS_12FEValuesBaseILi2ELi2EE20ExcInvalidUpdateFlagEEEvNS1_17ExceptionHandlingEPKciS8_S8_S8_T_+0x30) [0x7f226b275b40] [franckm-Inspiron-3543:13996] [ 5] /home/franckm/deal.ii-candi/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0(_ZN6dealii8FEValuesILi2ELi2EE10initializeENS_11UpdateFlagsE+0x95) [0x7f226b557ef5] [franckm-Inspiron-3543:13996] [ 6] /home/franckm/deal.ii-candi/deal.II-v8.5.0/lib/libdeal_II.g.so.8.5.0(_ZN6dealii8FEValuesILi2ELi2EEC1ERKNS_13FiniteElementILi2ELi2EEERKNS_10QuadratureILi2EEENS_11UpdateFlagsE+0x62) [0x7f226b599ab2] here my assembly and local_assemble_darcy_system ect. namespace Assembly { namespace Scratch { template <int dim> struct DarcyPreconditioner { DarcyPreconditioner (const FiniteElement<dim> &darcy_fe, const Quadrature<dim> &darcy_quadrature, const UpdateFlags darcy_update_flags, const FiniteElement<dim> &saturation_fe, const UpdateFlags saturation_update_flags); // constructor DarcyPreconditioner (const DarcyPreconditioner &data); // coppy operation FEValues<dim> darcy_fe_values; FEValues<dim> saturation_fe_values; std::vector<double> saturation_values; std::vector<Tensor<2,dim>> k_inverse_values; std::vector<Tensor<1,dim> > grad_phi_p; std::vector<Tensor<1,dim> > phi_u; }; template <int dim> DarcyPreconditioner<dim>:: DarcyPreconditioner (const FiniteElement<dim> &darcy_fe, const Quadrature<dim> &darcy_quadrature, const UpdateFlags darcy_update_flags, const FiniteElement<dim> &saturation_fe, const UpdateFlags saturation_update_flags) : darcy_fe_values (darcy_fe, darcy_quadrature, darcy_update_flags), saturation_fe_values (saturation_fe, darcy_quadrature, saturation_update_flags), saturation_values (darcy_quadrature.size()), k_inverse_values (darcy_quadrature.size()), grad_phi_p (darcy_fe.dofs_per_cell), phi_u (darcy_fe.dofs_per_cell) {} template <int dim> DarcyPreconditioner<dim>:: DarcyPreconditioner (const DarcyPreconditioner &scratch) : darcy_fe_values (scratch.darcy_fe_values.get_fe(), scratch.darcy_fe_values.get_quadrature(), scratch.darcy_fe_values.get_update_flags()), saturation_fe_values (scratch.saturation_fe_values.get_fe(), scratch.saturation_fe_values.get_quadrature(), scratch.saturation_fe_values.get_update_flags()), saturation_values (scratch.saturation_values), k_inverse_values (scratch.k_inverse_values), grad_phi_p (scratch.grad_phi_p), phi_u (scratch.phi_u) {} // The next one is the scratch object used for the assembly of the full // Stokes system. Observe that we derive the StokesSystem scratch class // from the StokesPreconditioner class above. We do this because all the // objects that are necessary for the assembly of the preconditioner are // also needed for the actual matrix system and right hand side, plus // some extra data. This makes the program more compact. Note also that // the assembly of the Stokes system and the temperature right hand side // further down requires data from temperature and velocity, // respectively, so we actually need two FEValues objects for those two // cases. template <int dim> struct DarcySystem : public DarcyPreconditioner<dim> { DarcySystem (const FiniteElement<dim> &darcy_fe, const Quadrature<dim> &darcy_quadrature, const Quadrature<dim-1> &darcy_face_quadrature, const UpdateFlags darcy_update_flags, const FiniteElement<dim> &saturation_fe, const UpdateFlags saturation_update_flags); DarcySystem (const DarcySystem<dim> &data); FEFaceValues<dim> darcy_fe_face_values; //FEValues<dim> saturation_fe_values; std::vector<double> pressure_rhs_values; std::vector<double> boundary_values ; //std::vector<Tensor<2,dim> > k_inverse_values; //std::vector<double> saturation_values; std::vector<Tensor<1,dim> > phi_i_u; std::vector<double> div_phi_u; std::vector<double> phi_p; }; template <int dim> DarcySystem<dim>:: DarcySystem (const FiniteElement<dim> &darcy_fe, const Quadrature<dim> &darcy_quadrature, const Quadrature<dim-1> &darcy_face_quadrature, const UpdateFlags darcy_update_flags, const FiniteElement<dim> &saturation_fe, const UpdateFlags saturation_update_flags) : DarcyPreconditioner<dim> (darcy_fe, darcy_quadrature, darcy_update_flags, saturation_fe, saturation_update_flags), darcy_fe_face_values (darcy_fe, darcy_face_quadrature, darcy_update_flags), //darcy_fe_face_values (darcy_fe, darcy_face_quadrature, update_normal_vectors), pressure_rhs_values (darcy_quadrature.size()), boundary_values (darcy_face_quadrature.size()), //saturation_values (darcy_quadrature.size()), phi_i_u (darcy_fe.dofs_per_cell), div_phi_u (darcy_fe.dofs_per_cell), phi_p (darcy_fe.dofs_per_cell) {} template <int dim> DarcySystem<dim>:: DarcySystem (const DarcySystem<dim> &scratch) : DarcyPreconditioner<dim> (scratch), darcy_fe_face_values (scratch.darcy_fe_face_values.get_fe(), scratch.darcy_fe_face_values.get_quadrature(), scratch.darcy_fe_face_values.get_update_flags()), phi_i_u (scratch.phi_i_u), div_phi_u (scratch.div_phi_u), phi_p (scratch.phi_p), pressure_rhs_values (scratch.pressure_rhs_values), boundary_values (scratch.boundary_values) {} template <int dim> void TwoPhaseFlowProblem<dim>:: local_assemble_darcy_preconditioner (const typename DoFHandler<dim>::active_cell_iterator &cell, Assembly::Scratch::DarcyPreconditioner<dim> &scratch, Assembly::CopyData::DarcyPreconditioner<dim> &data) { //std::cout << " building darcy preconditioner..." << std::endl; //darcy_preconditioner_matrix = 0; /*const QGauss<dim> quadrature_formula(darcy_degree+2); FEValues<dim> darcy_fe_values (darcy_fe, quadrature_formula, update_JxW_values | update_values | update_gradients | update_quadrature_points);*/ /*FEValues<dim> saturation_fe_values (saturation_fe, quadrature_formula, update_values);*/ //scratch.stokes_fe_values.get_fe().dofs_per_cell; const unsigned int dofs_per_cell = scratch.darcy_fe_values.get_fe().dofs_per_cell; const unsigned int n_q_points = scratch.darcy_fe_values.n_quadrature_points; //std::vector<Tensor<2,dim> > k_inverse_values (n_q_points); //std::vector<double> saturation_values (n_q_points); //FullMatrix<double> local_matrix (dofs_per_cell, dofs_per_cell); //std::vector<types::global_dof_index> local_dof_indices (dofs_per_cell); //std::vector<Tensor<1,dim> > phi_u (dofs_per_cell); //std::vector<Tensor<1,dim> > grad_phi_p (dofs_per_cell); const FEValuesExtractors::Vector velocities (0); const FEValuesExtractors::Scalar pressure (dim); scratch.darcy_fe_values.reinit (cell); typename DoFHandler<dim>::active_cell_iterator saturation_cell (&triangulation, cell->level(), cell->index(), &saturation_dof_handler); scratch.saturation_fe_values.reinit (saturation_cell); //for (; cell!=endc; ++cell, ++saturation_cell) //{ //darcy_fe_values.reinit (cell); //saturation_fe_values.reinit (saturation_cell); data.local_matrix = 0; scratch.saturation_fe_values.get_function_values (saturation_solution, scratch.saturation_values); k_inverse.value_list (scratch.darcy_fe_values.get_quadrature_points(), scratch.k_inverse_values); for (unsigned int q=0; q<n_q_points; ++q) { const double sat_q = scratch.saturation_values[q]; const double inverse_mobility = mobility_inverse(sat_q,viscosity); const double mobility = 1.0 / inverse_mobility; const Tensor<2,dim> permeability = invert(scratch.k_inverse_values[q]); for (unsigned int k=0; k<dofs_per_cell; ++k) { scratch.phi_u[k] = scratch.darcy_fe_values[velocities].value (k,q); scratch.grad_phi_p[k] = scratch.darcy_fe_values[pressure].gradient (k,q); } for (unsigned int i=0; i<dofs_per_cell; ++i) for (unsigned int j=0; j<dofs_per_cell; ++j) { data.local_matrix(i,j) += (scratch.k_inverse_values[q] * inverse_mobility * scratch.phi_u[i] * scratch.phi_u[j] + permeability * mobility * scratch.grad_phi_p[i] * scratch.grad_phi_p[j]) * scratch.darcy_fe_values.JxW(q); } } cell->get_dof_indices (data.local_dof_indices); //darcy_preconditioner_constraints.distribute_local_to_global (local_matrix, // local_dof_indices, darcy_preconditioner_matrix); //} } template <int dim> void TwoPhaseFlowProblem<dim>:: copy_local_to_global_darcy_preconditioner (const Assembly::CopyData::DarcyPreconditioner<dim> &data) { darcy_preconditioner_constraints.distribute_local_to_global (data.local_matrix, data.local_dof_indices, darcy_preconditioner_matrix); } template <int dim> void TwoPhaseFlowProblem<dim>::assemble_darcy_preconditioner () { darcy_preconditioner_matrix = 0; //const QGauss<dim> quadrature_formula(parameters.stokes_velocity_degree+1); const QGauss<dim> quadrature_formula(darcy_degree+2); typedef FilteredIterator<typename DoFHandler<dim>::active_cell_iterator> CellFilter; WorkStream:: run (CellFilter (IteratorFilters::LocallyOwnedCell(), darcy_dof_handler.begin_active()), CellFilter (IteratorFilters::LocallyOwnedCell(), darcy_dof_handler.end()), std_cxx11::bind (&TwoPhaseFlowProblem<dim>:: local_assemble_darcy_preconditioner, this, std_cxx11::_1, std_cxx11::_2, std_cxx11::_3), std_cxx11::bind (&TwoPhaseFlowProblem<dim>:: copy_local_to_global_darcy_preconditioner, this, std_cxx11::_1), Assembly::Scratch:: DarcyPreconditioner<dim> (darcy_fe, quadrature_formula, (update_JxW_values| update_values| update_gradients| update_quadrature_points), saturation_fe, update_values), Assembly::CopyData:: DarcyPreconditioner<dim> (darcy_fe)); darcy_preconditioner_matrix.compress(VectorOperation::add); } template <int dim> void TwoPhaseFlowProblem<dim>::build_darcy_preconditioner () { computing_timer.enter_section (" Build Darcy preconditioner"); pcout << " Rebuilding Darcy preconditioner..." << std::flush; assemble_darcy_preconditioner (); Amg_preconditioner = std_cxx11::shared_ptr<TrilinosWrappers::PreconditionIC> (new TrilinosWrappers::PreconditionIC()); Amg_preconditioner->initialize(darcy_preconditioner_matrix.block(0,0)); Mp_preconditioner = std_cxx11::shared_ptr<TrilinosWrappers::PreconditionIC> (new TrilinosWrappers::PreconditionIC()); Mp_preconditioner->initialize(darcy_preconditioner_matrix.block(1,1)); pcout << std::endl; computing_timer.exit_section(); } template <int dim> void TwoPhaseFlowProblem<dim>:: local_assemble_darcy_system (const typename DoFHandler<dim>::active_cell_iterator &cell, Assembly::Scratch::DarcySystem<dim> &scratch, Assembly::CopyData::DarcySystem<dim> &data) { //darcy_matrix = 0; //darcy_rhs = 0; /*QGauss<dim> quadrature_formula(darcy_degree+2); QGauss<dim-1> face_quadrature_formula(darcy_degree+2); FEValues<dim> darcy_fe_values (darcy_fe, quadrature_formula, update_values | update_gradients | update_quadrature_points | update_JxW_values); FEValues<dim> saturation_fe_values (saturation_fe, quadrature_formula, update_values); FEFaceValues<dim> darcy_fe_face_values (darcy_fe, face_quadrature_formula, update_values | update_normal_vectors | update_quadrature_points | update_JxW_values);*/ //scratch.stokes_fe_values.get_fe().dofs_per_cell; const unsigned int dofs_per_cell = scratch.darcy_fe_values.get_fe().dofs_per_cell; const unsigned int n_q_points = scratch.darcy_fe_values.n_quadrature_points; const unsigned int n_face_q_points = scratch.darcy_fe_face_values.n_quadrature_points; //FullMatrix<double> local_matrix (dofs_per_cell, dofs_per_cell); //Vector<double> local_rhs (dofs_per_cell); std::vector<types::global_dof_index> local_dof_indices (dofs_per_cell); const PressureRightHandSide<dim> pressure_right_hand_side; const PressureBoundaryValues<dim> pressure_boundary_values; /* std::vector<double> pressure_rhs_values (n_q_points); std::vector<double> boundary_values (n_face_q_points); std::vector<Tensor<2,dim> > k_inverse_values (n_q_points); std::vector<double> saturation_values (n_q_points); std::vector<Tensor<1,dim> > phi_u (dofs_per_cell); std::vector<double> div_phi_u (dofs_per_cell); std::vector<double> phi_p (dofs_per_cell);*/ const FEValuesExtractors::Vector velocities (0); const FEValuesExtractors::Scalar pressure (dim); scratch.darcy_fe_values.reinit (cell); typename DoFHandler<dim>::active_cell_iterator saturation_cell (&triangulation, cell->level(), cell->index(), &saturation_dof_handler); scratch.saturation_fe_values.reinit (saturation_cell); //if (rebuild_stokes_matrix) data.local_matrix = 0; data.local_rhs = 0; /*typename DoFHandler<dim>::active_cell_iterator cell = darcy_dof_handler.begin_active(), endc = darcy_dof_handler.end(); typename DoFHandler<dim>::active_cell_iterator saturation_cell = saturation_dof_handler.begin_active();*/ //for (; cell!=endc; ++cell, ++saturation_cell) //{ //darcy_fe_values.reinit (cell); //saturation_fe_values.reinit (saturation_cell); //local_matrix = 0; //local_rhs = 0; scratch.saturation_fe_values.get_function_values (saturation_solution, scratch.saturation_values); pressure_right_hand_side.value_list (scratch.darcy_fe_values.get_quadrature_points(), scratch.pressure_rhs_values); k_inverse.value_list (scratch.darcy_fe_values.get_quadrature_points(), scratch.k_inverse_values); for (unsigned int q=0; q<n_q_points; ++q) { for (unsigned int k=0; k<dofs_per_cell; ++k) { scratch.phi_u[k] = scratch.darcy_fe_values[velocities].value (k,q); scratch.div_phi_u[k] = scratch.darcy_fe_values[velocities].divergence (k,q); scratch.phi_p[k] = scratch.darcy_fe_values[pressure].value (k,q); } for (unsigned int i=0; i<dofs_per_cell; ++i) { const double sat_q = scratch.saturation_values[q]; for (unsigned int j=0; j<=i; ++j) { data.local_matrix(i,j) += (scratch.phi_u[i] * scratch.k_inverse_values[q] * mobility_inverse(sat_q,viscosity) * scratch.phi_u[j] - scratch.div_phi_u[i] * scratch.phi_p[j] - scratch.phi_p[i] * scratch.div_phi_u[j]) * scratch.darcy_fe_values.JxW(q); } data.local_rhs(i) += (-scratch.phi_p[i] * scratch.pressure_rhs_values[q])* scratch.darcy_fe_values.JxW(q); } } for (unsigned int face_no=0; face_no<GeometryInfo<dim>::faces_per_cell; ++face_no) if (cell->at_boundary(face_no)) { scratch.darcy_fe_face_values.reinit (cell, face_no); pressure_boundary_values .value_list (scratch.darcy_fe_face_values.get_quadrature_points(), scratch.boundary_values); for (unsigned int q=0; q<n_face_q_points; ++q) for (unsigned int i=0; i<dofs_per_cell; ++i) { //const Tensor<1,dim> scratch.phi_i_u[i] = scratch.darcy_fe_face_values[velocities].value (i, q); data.local_rhs(i) += -(scratch.phi_i_u[i] * scratch.darcy_fe_face_values.normal_vector(q) * scratch.boundary_values[q] * scratch.darcy_fe_face_values.JxW(q)); } } for (unsigned int i=0; i<dofs_per_cell; ++i) for (unsigned int j=i+1; j<dofs_per_cell; ++j) data.local_matrix(i,j) = data.local_matrix(j,i); cell->get_dof_indices (data.local_dof_indices); /*darcy_constraints.distribute_local_to_global (local_matrix, local_rhs, local_dof_indices, darcy_matrix, darcy_rhs);*/ //} } template <int dim> void TwoPhaseFlowProblem<dim>:: copy_local_to_global_darcy_system (const Assembly::CopyData::DarcySystem<dim> &data) { darcy_constraints.distribute_local_to_global (data.local_matrix, data.local_rhs, data.local_dof_indices, darcy_matrix, darcy_rhs); } template <int dim> void TwoPhaseFlowProblem<dim>::assemble_darcy_system () { computing_timer.enter_section (" Assemble Darcy system"); darcy_matrix=0; darcy_rhs=0; QGauss<dim> quadrature_formula(darcy_degree+2); QGauss<dim-1> face_quadrature_formula(darcy_degree+2); //const QGauss<dim> quadrature_formula(parameters.stokes_velocity_degree+1); typedef FilteredIterator<typename DoFHandler<dim>::active_cell_iterator> CellFilter; WorkStream:: run (CellFilter (IteratorFilters::LocallyOwnedCell(), darcy_dof_handler.begin_active()), CellFilter (IteratorFilters::LocallyOwnedCell(), darcy_dof_handler.end()), std_cxx11::bind (&TwoPhaseFlowProblem<dim>:: local_assemble_darcy_system, this, std_cxx11::_1, std_cxx11::_2, std_cxx11::_3), std_cxx11::bind (&TwoPhaseFlowProblem<dim>:: copy_local_to_global_darcy_system, this, std_cxx11::_1), Assembly::Scratch:: DarcySystem<dim> (darcy_fe, quadrature_formula, face_quadrature_formula, (update_values|update_normal_vectors| update_quadrature_points| update_JxW_values| update_gradients), saturation_fe, update_values), Assembly::CopyData:: DarcySystem<dim> (darcy_fe)); //if (rebuild_stokes_matrix == true) darcy_matrix.compress(VectorOperation::add); darcy_rhs.compress(VectorOperation::add); //rebuild_stokes_matrix = false; pcout << std::endl; computing_timer.exit_section(); std::cout << "assemble ok" << std::endl; } Franck -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to dealii+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.