On Tue, Oct 6, 2015 at 10:46 AM, Вася Бубликов <gream...@gmail.com> wrote:

> David
>
>
> It pains me to trouble you again but
> dynamic_cast<PetscMatrix<Number>*>(system.matrix);
> returns NULL!
>


Make sure you do the cast after equation_systems.init();

David





> 2015-10-06 17:11 GMT+03:00 David Knezevic <david.kneze...@akselos.com>:
>
>> Please reply to the list as well.
>>
>> Instead of creating a new matrix, you should cast system.matrix to a
>> PetscMatrix and then call MatSetOption on that.
>>
>> David
>>
>>
>>
>>
>> On Tue, Oct 6, 2015 at 10:06 AM, Вася Бубликов <gream...@gmail.com>
>> wrote:
>>
>>> David
>>>
>>> Thank you for your answer. Here is a short program to try out your first
>>> suggestion:
>>>
>>> #include <iostream>
>>> #include <vector>
>>> #include <set>
>>> #include <algorithm>
>>> #include <fstream>
>>> #include <string>
>>> #include <ctime>
>>> // libmesh includes
>>> #include "libmesh/libmesh.h"
>>> #include "libmesh/mesh.h"
>>> #include "libmesh/linear_implicit_system.h"
>>> #include "libmesh/equation_systems.h"
>>> #include "libmesh/fe.h"
>>> #include "libmesh/quadrature_trap.h"
>>> #include "libmesh/dof_map.h"
>>> #include "libmesh/sparse_matrix.h"
>>> #include "libmesh/petsc_matrix.h"
>>> #include "libmesh/numeric_vector.h"
>>> #include "libmesh/dense_matrix.h"
>>> #include "libmesh/dense_submatrix.h"
>>> #include "libmesh/dense_vector.h"
>>> #include "libmesh/dense_subvector.h"
>>> #include "libmesh/perf_log.h"
>>> #include "libmesh/elem.h"
>>> #include "libmesh/boundary_info.h"
>>> #include "libmesh/string_to_enum.h"
>>> #include "libmesh/getpot.h"
>>> #include "libmesh/vtk_io.h"
>>> #include "libmesh/mesh_data.h"
>>> #include "libmesh/mesh_base.h"
>>>
>>> using namespace libMesh;
>>>
>>> int main (int argc, char** argv)
>>> {
>>>     LibMeshInit init (argc, argv);
>>>     SerialMesh mesh(init.comm());
>>>     mesh.read("SquareWithCircle.unv");
>>>     mesh.print_info();
>>>     EquationSystems equation_systems (mesh);
>>>     LinearImplicitSystem& system =
>>> equation_systems.add_system<LinearImplicitSystem> ("Elasticity");
>>>     PetscMatrix<Number> Matrix(init.comm());
>>>     std::cout << "Enable non neighbours interactions" << std::endl;
>>>     MatSetOption( Matrix.mat(), MAT_NEW_NONZERO_ALLOCATION_ERR,
>>> PETSC_FALSE);
>>>     unsigned int u_var = system.add_variable("u", FIRST, LAGRANGE); //
>>> displacement X
>>>     unsigned int v_var = system.add_variable("v", FIRST, LAGRANGE); //
>>> displacement Y
>>>     equation_systems.init();
>>>     equation_systems.print_info();
>>>     Matrix.attach_dof_map(system.get_dof_map());
>>>     std::cout << "Initialize matrix" << std::endl;
>>>     Matrix.init();
>>>     std::cout << "Make my matrix the system matrix" << std::endl;
>>>     system.matrix = &Matrix;
>>>     return 0;
>>> }
>>>
>>>
>>> it compiles fine but then I run it MatSetOption command causes an error:
>>>
>>> [0]PETSC ERROR: --------------------- Error Message
>>> --------------------------------------------------------------
>>> [0]PETSC ERROR: Corrupt argument:
>>> http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
>>> [0]PETSC ERROR: Invalid Pointer to Object: Parameter # 1
>>> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
>>> for trouble shooting.
>>> [0]PETSC ERROR: Petsc Release Version 3.6.1, Jul, 22, 2015
>>> [0]PETSC ERROR: ./error.o on a arch-linux-c-opt named izmailovo by gream
>>> Tue Oct  6 17:01:25 2015
>>> [0]PETSC ERROR: Configure options --prefix=/opt/petsc/linux-c-opt
>>> --PETSC_ARCH=arch-linux-c-opt --with-shared-libraries=1 --COPTFLAGS=-O3
>>> --CXXOPTFLAGS=-O3 --with-mumps=1 --with-hdf5=1 --with-scalapack=1
>>> --with-suitesparse=1 --with-metis=1 --with-parmetis=1 --with-ptscotch=1
>>> --with-ptscotch-lib="[libesmumps.so,libptscotch.so,libptscotcherr.so,libscotch.so,libscotcherr.so,libbz2.so]"
>>> --with-ptscotch-include=/usr/include/scotch --with-superlu=1
>>> --with-superlu-lib=-lsuperlu --with-superlu-include=/usr/include/superlu
>>> --with-ml=1
>>> [0]PETSC ERROR: #1 MatSetOption() line 5261 in
>>> /tmp/yaourt-tmp-gream/aur-petsc/src/petsc-3.6.1/src/mat/interface/matrix.c
>>>
>>> Roman
>>>
>>> 2015-10-06 13:20 GMT+03:00 David Knezevic <david.kneze...@akselos.com>:
>>>
>>>> This is a PETSc error that you're hitting because you're adding new
>>>> non-zeros in the matrix. PETSc tries to help you by throwing an error if
>>>> you do this, because allocating new non-zeros (outside the specified
>>>> sparsity pattern) can slow down your program a lot.
>>>>
>>>> The easy fix is indicated in the PETSc error message:
>>>> "Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to
>>>> turn
>>>> off this check"
>>>> To do this, you need to cast your matrix to a PetscMatrix, then do
>>>> petsc_matrix->mat() to get the PETSc Mat that you can pass to MatSetOption.
>>>>
>>>> The more involved fix is to augment your sparsity pattern (e.g. see
>>>> miscellaneous_ex9).
>>>>
>>>> David
>>>>
>>>>
>>>>
>>>> On Tue, Oct 6, 2015 at 6:13 AM, Вася Бубликов <gream...@gmail.com>
>>>> wrote:
>>>>
>>>>> Dear Sirs,
>>>>>
>>>>> I'm trying to make Libmesh work with a simple linear elasticity problem
>>>>> using linear systems example 4 as an example. I need to force the top
>>>>> boundary remain flat, i.e. all normal displacements are of the same
>>>>> value
>>>>> to be computed.
>>>>> To obtain this, for example to make the displacements for DOFs
>>>>> i1,i2,i3..in
>>>>> the same as for the DOF j, I add penalty (1e10) to K(in,in) and
>>>>> subtract it
>>>>> from K(in,j) meaning to add 1e10*(U_in - U_j) = 0 to the  in'th
>>>>> equation
>>>>> in the assembly function. But as soon as in and j are on different
>>>>> finite
>>>>> elements I get the same error no matter which particular c++ function
>>>>> I use
>>>>> (system.matrix->add(i,j,value)   system.matrix->add_matrix(DenseMatrix)
>>>>> or system.matrix->add(SparseMatrix) ). I would be very mush obliged if
>>>>> you
>>>>> helped me.
>>>>>
>>>>> Kind regards,
>>>>> Roman Khudobin
>>>>> Research Assistant ICHPH RAS
>>>>>
>>>>> [0]PETSC ERROR: --------------------- Error Message
>>>>> --------------------------------------------------------------
>>>>> [0]PETSC ERROR: Argument out of range
>>>>> [0]PETSC ERROR: New nonzero at (17,47) caused a malloc
>>>>> Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to
>>>>> turn
>>>>> off this check
>>>>> [0]PETSC ERROR: See
>>>>> http://www.mcs.anl.gov/petsc/documentation/faq.html for
>>>>> trouble shooting.
>>>>> [0]PETSC ERROR: Petsc Release Version 3.6.1, Jul, 22, 2015
>>>>> [0]PETSC ERROR: ./constrain.o on a arch-linux-c-opt named izmailovo by
>>>>> gream Tue Oct  6 12:55:21 2015
>>>>> [0]PETSC ERROR: Configure options --prefix=/opt/petsc/linux-c-opt
>>>>> --PETSC_ARCH=arch-linux-c-opt --with-shared-libraries=1 --COPTFLAGS=-O3
>>>>> --CXXOPTFLAGS=-O3 --with-mumps=1 --with-hdf5=1 --with-scalapack=1
>>>>> --with-suitesparse=1 --with-metis=1 --with-parmetis=1 --with-ptscotch=1
>>>>>
>>>>> --with-ptscotch-lib="[libesmumps.so,libptscotch.so,libptscotcherr.so,libscotch.so,libscotcherr.so,libbz2.so]"
>>>>> --with-ptscotch-include=/usr/include/scotch --with-superlu=1
>>>>> --with-superlu-lib=-lsuperlu
>>>>> --with-superlu-include=/usr/include/superlu
>>>>> --with-ml=1
>>>>> [0]PETSC ERROR: #1 MatSetValues_SeqAIJ() line 485 in
>>>>>
>>>>> /tmp/yaourt-tmp-gream/aur-petsc/src/petsc-3.6.1/src/mat/impls/aij/seq/aij.c
>>>>> [0]PETSC ERROR: #2 MatSetValues() line 1173 in
>>>>>
>>>>> /tmp/yaourt-tmp-gream/aur-petsc/src/petsc-3.6.1/src/mat/interface/matrix.c
>>>>>
>>>>> --------------------------------------------------------------------------
>>>>> MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
>>>>> with errorcode 1.
>>>>>
>>>>> NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
>>>>> You may or may not see output from other processes, depending on
>>>>> exactly when Open MPI kills them.
>>>>>
>>>>> --------------------------------------------------------------------------
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> Libmesh-users mailing list
>>>>> Libmesh-users@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/libmesh-users
>>>>>
>>>>>
>>>>
>>>
>>
>
------------------------------------------------------------------------------
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to