Thank you for your help so far. It looks like this problem is close to being finished. Your recommendation of using #include "libmesh/foo.h" worked for compiling the program (I used the full path for libmesh_nullptr.h in the include part and that fixed those errors) but now when I run the executable I get the following error:
ERROR: This example requires libMesh to be compiled with SLEPc eigen solvers support! I already have SLEPc though. I would think to fix this problem I would need to either add a compiler flag for SLEPc or add the program I have to the example programs. I would think linking would work just as well as adding to my example programs so I added -L/opt/slepc-3.7.0/sys to the compiling command but this didn't fix the problem. Harry Pearce On Mon, Aug 8, 2016 at 11:20 AM, Mike Marchywka <marchy...@hotmail.com> wrote: > > > > > ________________________________ > > From: harroontheg...@gmail.com > > Date: Mon, 8 Aug 2016 10:35:42 -0700 > > Subject: Re: [Libmesh-users] FW: libmesh problem: libmesh_nullptr was > > not declared in scope > > To: marchy...@hotmail.com; royst...@ices.utexas.edu > > CC: libmesh-users@lists.sourceforge.net > > > > Oops I thought I replied to everyone. > > > >>Did it complain it can't find the header file first? > > > > It did complain about the libmesh.h header before I added the following > > to set my environment: > > export PATH=/opt/petsc-3.7.1:/opt/slepc-3.7.0:/opt/libmesh-1.0. > 0-rc1:$PATH > > export PATH=/opt/petsc-3.7.1:/opt/libmesh-1.0.0-rc1:$PATH > > export PATH=$PETSC_DIR/arch-linux2-c-debug:$PATH > > export CPATH=/opt/libmesh-1.0.0-rc1/include/libmesh/:$CPATH > > without the libmesh dir on the include it could be a name collision. > There is probably some way to get the compiler to tell you which dir > it includes from. Also you can get all of include paths, use "find" or > something and check for duplicate header names. > > The examples inlcuded "libmesh/foo.h" which is probably a good idea > to stick with although maybe someone who has used it more can comment :) > > > > > >>if you run "make -n example-opt" and copy the output it should work > > > > I tried running that command in the directory where my example program > > is and it said > > "make: *** No rule to make target `example-opt'. Stop." > > Well, the idea was using the makefile for a working example. > Maybe I mistyped the target name but you can look through the > examples. > > > > > > > > >>although without the libmesh dir in the includes I guess you would have > >>to add it to the include paths. > > libmesh.h is in the includes file. > > > > I still have the question about how to add my example file to the > > configure.ac<http://configure.ac> file in the section AC_CONFIG_FILES > > since it's required in order to add a new example file according to > > https://github.com/libMesh/libmesh/wiki/Adding-a-new-example. If you > > don't know how to add the example to the AC_CONFIG_FILES (for example > > do I add the directory of the Makefile I want to create in it?) Is > > there another potential way to compile my program? I did try editing > > the example makefile to include the directory of my project under > > SUBDIRS but when I tried to run the makefile the compiler said: > > What are you using for a makefile now? I'm not sure this is even relevant > for what you are doing. Getting your code to compile AFAICT is a standalone > activity that will just need libmesh include files and libs for linking. > > --- end of new comments --- > > > > > Making all in eigenproblems/eigenproblems_femviblibtests_ex1 > > make[1]: Entering directory > > `/opt/libmesh-1.0.0-rc1/examples/eigenproblems/ > eigenproblems_femviblibtests_ex1' > > make[1]: *** No rule to make target `all'. Stop. > > make[1]: Leaving directory > > `/opt/libmesh-1.0.0-rc1/examples/eigenproblems/ > eigenproblems_femviblibtests_ex1' > > make: *** [all-recursive] Error 1 > > > > On Mon, Aug 8, 2016 at 10:34 AM, Harry Pearce > > <harroontheg...@gmail.com<mailto:harroontheg...@gmail.com>> wrote: > >>Did it complain it can't find the header file first? > > > > It did complain about the libmesh.h header before I added the following > > to set my environment: > > export PATH=/opt/petsc-3.7.1:/opt/slepc-3.7.0:/opt/libmesh-1.0. > 0-rc1:$PATH > > export PATH=/opt/petsc-3.7.1:/opt/libmesh-1.0.0-rc1:$PATH > > export PATH=$PETSC_DIR/arch-linux2-c-debug:$PATH > > export CPATH=/opt/libmesh-1.0.0-rc1/include/libmesh/:$CPATH > > > >>if you run "make -n example-opt" and copy the output it should work > > > > I tried running that command in the directory where my example program > > is and it said > > "make: *** No rule to make target `example-opt'. Stop." > > > > > > > >>although without the libmesh dir in the includes I guess you would have > >>to add it to the include paths. > > libmesh.h is in the includes file. > > > > I still have the question about how to add my example file to the > > configure.ac<http://configure.ac> file in the section AC_CONFIG_FILES > > since it's required in order to add a new example file according to > > https://github.com/libMesh/libmesh/wiki/Adding-a-new-example. If you > > don't know how to add the example to the AC_CONFIG_FILES (for example > > do I add the directory of the Makefile I want to create in it?) Is > > there another potential way to compile my program? I did try editing > > the example makefile to include the directory of my project under > > SUBDIRS but when I tried to run the makefile the compiler said: > > > > Making all in eigenproblems/eigenproblems_femviblibtests_ex1 > > make[1]: Entering directory > > `/opt/libmesh-1.0.0-rc1/examples/eigenproblems/ > eigenproblems_femviblibtests_ex1' > > make[1]: *** No rule to make target `all'. Stop. > > make[1]: Leaving directory > > `/opt/libmesh-1.0.0-rc1/examples/eigenproblems/ > eigenproblems_femviblibtests_ex1' > > make: *** [all-recursive] Error 1 > > > > Harry Pearce > > > > > > On Fri, Aug 5, 2016 at 2:32 PM, Mike Marchywka > > <marchy...@hotmail.com<mailto:marchy...@hotmail.com>> wrote: > > > > > > > > Did it complain it can't find the header file first? > > My includes for libmesh all start libmesh/foo.h > > > > if you run "make -n example-opt" and copy the output it should work > > although without the libmesh dir in the includes I guess you would have > > to add it to the include paths. > > > > > > ________________________________ > >> From: harroontheg...@gmail.com<mailto:harroontheg...@gmail.com> > >> Date: Fri, 5 Aug 2016 14:07:58 -0700 > >> Subject: Re: [Libmesh-users] FW: libmesh problem: libmesh_nullptr was > >> not declared in scope > >> To: marchy...@hotmail.com<mailto:marchy...@hotmail.com> > >> CC: royst...@ices.utexas.edu<mailto:royst...@ices.utexas.edu>; > > libmesh-users@lists.sourceforge.net<mailto:libmesh > -us...@lists.sourceforge.net> > >> > >>>"I skimmed most of the messages and it did sound like it would be > something > >>>easy to find by looking at the exact code so I was a bit surprised > >> with that last post :)" > >> > >> Just in case it is something easy to spot I have the code at the bottom > >> of the email highlighted. If you don't need the code you can just > >> ignore the highlighted part of the email. > >> > >>>The linking is a bit unorthodox, indeed I think you had some specific > >>>recommendations for linking to libmesh that hid most of the details, but > >>>actually building it and compiling with it were pretty easy. I turned > >> on some debug info > >>>from the example make script, just copied its invokation of g++ and > libtool > >>>and that seems to work for some simple case. > >> > >> This is my first time compiling a libmesh code so I tried to figure out > >> what compiler flags to use in the suggested manner > >> for simple codes (according to > >> http://libmesh.github.io/installation.html) which is libmesh-config > >> --cxx` -o HPeigenproblems_PZ_8_2_16_2 HPeigenproblems_PZ_8_2_16_2.C > >> `libmesh-config --cxxflags --include --ldflags --libs`. > >> > >> This is my first time compiling a libmesh code so I thought maybe I > >> should use a Makefile.am from a regular libmesh example. > >> (My other example files compiled properly) so I was thinking that it > >> might work to follow the instructions for adding a new libmesh example > >> (https://github.com/libMesh/libmesh/wiki/Adding-a-new-example) which > >> invoves changing the Makefile.am and run.sh from another example file > >> to run the program. > >> > >> I started following the directions for adding a new example and am not > >> sure what line to put into AC_CONFIG_FILES in > >> configure.ac<http://configure.ac><http://configure.ac> at the top > > level of libmesh. I would > >> have thought it would have been the directory of the example file I am > >> adding or the Makefile that goes with it but I do not see the > >> directories of any other example programs in AC_CONFIG_FILES within the > >> configure.ac<http://configure.ac><http://configure.ac> program. > >> > >> > >> > >> > >> > >> Harry Pearce > >> > >> Just in case highlighting doesn't show up on the libmesh users archive, > >> the highlighted code is below: > >> #include <fstream> > >> #include "libmesh.h" > >> #include "mesh.h" > >> #include "libmesh_config.h" > >> //#include "mesh_generation.h" > >> // #include "exodusII_io.h" > >> #include "eigen_system.h" > >> #include "equation_systems.h" > >> // #include "fe.h" > >> // #include "quadrature_gauss.h" > >> // #include "dense_matrix.h" > >> // #include "sparse_matrix.h" > >> // #include "numeric_vector.h" > >> // #include "dof_map.h" > >> #include "libmesh_nullptr.h" > >> #include <string.h> > >> // #include "parallel_algebra.h" > >> //#include "parallel.h" > >> //#include <auto_ptr.h> > >> > >> > >> using namespace libMesh; > >> > >> char prefix[80]; > >> > >> void assemble_mass(EquationSystems& es, > >> > >> const std::string& system_name); > >> > >> int main (int argc, char** argv) > >> > >> { > >> > >> LibMeshInit init (argc, argv); > >> > >> #ifndef LIBMESH_HAVE_SLEPC > >> > >> if (libMesh::processor_id() == 0) > >> > >> std::cerr << "ERROR: This example requires libMesh to be\n" > >> > >> << "compiled with SLEPc eigen solvers support!" > >> > >> << std::endl; > >> > >> return 0; > >> > >> #else > >> > >> #ifdef LIBMESH_DEFAULT_SINGLE_PRECISION > >> > >> libmesh_example_assert(false, "--disable-singleprecision"); > >> > >> #endif > >> > >> if (argc < 3) > >> > >> { > >> > >> if (libMesh::processor_id() == 0) > >> > >> std::cerr << "\nUsage: " << argv[0] > >> > >> << " -n <number of eigen values>" > >> > >> << std::endl; > >> > >> libmesh_error(); > >> > >> } > >> > >> > >> > >> else > >> > >> { > >> > >> std::cout << "Running " << argv[0]; > >> > >> > >> > >> for (int i=1; i<argc; i++) > >> > >> std::cout << " " << argv[i]; > >> > >> > >> > >> std::cout << std::endl << std::endl; > >> > >> } > >> > >> const unsigned int nev = std::atoi(argv[2]); > >> > >> // libmesh_example_assert(3 <= LIBMESH_DIM, "2D support"); > >> > >> > >> > >> Mesh mesh; > >> > >> MeshTools::Generation::build_cube (mesh, > >> > >> 10, 10, 10, > >> > >> -1., 1., > >> > >> -1., 1., > >> > >> -1., 1., > >> > >> HEX27); > >> > >> mesh.print_info(); > >> > >> > >> > >> char xyzfilename[80]; > >> > >> strcpy(prefix,argv[3]); > >> > >> strcpy(xyzfilename,argv[3]); > >> > >> strcat(xyzfilename,".xyz"); > >> > >> std::cout << "Writing nodal xyz coordinates to file: " << > >> xyzfilename << std::endl; > >> > >> std::ofstream xyzfile; > >> > >> xyzfile.open (xyzfilename); > >> > >> MeshBase::const_node_iterator node_it = mesh.nodes_begin(); > >> > >> > >> > >> > >> const MeshBase::const_node_iterator node_end = mesh.nodes_end(); > >> > >> xyzfile << "Number of nodes: " << mesh.n_nodes() << "\n"; > >> > >> for (; node_it != node_end; ++node_it) > >> > >> { > >> > >> //count++; > >> > >> const Point& p = **node_it; > >> > >> const Real px = p(0); > >> > >> const Real py = p(1); > >> > >> xyzfile << px << " " << py << " \n"; > >> > >> } > >> > >> xyzfile.close(); > >> > >> std::cout << "Finished writing nodal xyz coordinates to file: " << > >> xyzfilename << std::endl; > >> > >> > >> EquationSystems equation_systems (mesh); > >> > >> EigenSystem & eigen_system = > >> > >> equation_systems.add_system<EigenSystem> ("Eigensystem"); > >> > >> > >> > >> > >> eigen_system.add_variable("u", SECOND); > >> > >> eigen_system.attach_assemble_function (assemble_mass); > >> > >> > > equation_systems.parameters.se<http://equation_systems.parameters.se > >t<unsigned > > int>("eigenpairs") = nev; > >> > >> > > equation_systems.parameters.se<http://equation_systems.parameters.se > >t<unsigned > > int>("basis vectors") = nev*3; > >> > >> eigen_system.eigen_solver->set_eigensolver_type(KRYLOVSCHUR); > >> > >> // eigen_system.eigen_solver->set_eigensolver_type(LAPACK); > >> > >> eigen_system.eigen_solver->set_position_of_spectrum(SMALLEST_REAL); > >> > >> > > equation_systems.parameters.se<http://equation_systems.parameters.se > >t<Real>("linear > > solver tolerance") = > >> pow(TOLERANCE, 5./3.); > >> > >> > > equation_systems.parameters.se<http://equation_systems.parameters.se > >t<unsigned > > int> > >> > >> ("linear solver maximum iterations") = 1000; > >> > >> eigen_system.set_eigenproblem_type(GHEP); > >> > >> equation_systems.init(); > >> > >> equation_systems.print_info(); > >> > >> > >> > >> eigen_system.solve(); > >> > >> unsigned int nconv = eigen_system.get_n_converged(); > >> > >> std::cout << "Number of converged eigenpairs: " << nconv > >> > >> << "\n" << std::endl; > >> > >> if (nconv != 0) > >> > >> { > >> > >> eigen_system.get_eigenpair(nconv-1); > >> > >> > >> > >> #ifdef LIBMESH_HAVE_EXODUS_API > >> > >> ExodusII_IO (mesh).write_equation_systems ("out.e", equation_systems); > >> > >> #endif // #ifdef LIBMESH_HAVE_EXODUS_API > >> > >> } > >> > >> else > >> > >> { > >> > >> std::cout << "WARNING: Solver did not converge!\n" << nconv << > >> std::endl; > >> > >> } > >> > >> #endif // LIBMESH_HAVE_SLEPC > >> > >> return 0; > >> > >> } > >> > >> void assemble_mass(EquationSystems& es, > >> > >> const std::string& system_name) > >> > >> { > >> > >> char potfilename[80]; > >> > >> strcpy(potfilename,prefix); > >> > >> strcat(potfilename,".pot.out"); > >> > >> std::fstream potfile; > >> > >> potfile.open(potfilename, std::ios::out); > >> > >> if(!potfile) {std::cerr << "Error opening PES output file."; return;} > >> > >> libmesh_assert (system_name == "Eigensystem"); > >> > >> #ifdef LIBMESH_HAVE_SLEPC > >> > >> const MeshBase& mesh = es.get_mesh(); > >> > >> const unsigned int dim = mesh.mesh_dimension(); > >> > >> EigenSystem & eigen_system = es.get_system<EigenSystem> (system_name); > >> > >> FEType fe_type = eigen_system.get_dof_map().variable_type(0); > >> > >> SparseMatrix<Number>& matrix_A = *eigen_system.matrix_A; > >> > >> SparseMatrix<Number>& matrix_B = *eigen_system.matrix_B; > >> > >> AutoPtr<FEBase> fe (FEBase::build(dim, fe_type)); > >> > >> QGauss qrule (dim, fe_type.default_quadrature_order()); > >> > >> fe->attach_quadrature_rule (&qrule); > >> > >> const std::vector<Real>& JxW = fe->get_JxW(); > >> > >> const std::vector<Point>& q_point = fe->get_xyz(); > >> > >> const std::vector<std::vector<Real>>& phi = fe->get_phi(); > >> > >> const std::vector<std::vector<RealGradient>>& dphi = fe->get_dphi(); > >> > >> const DofMap& dof_map = eigen_system.get_dof_map(); > >> > >> DenseMatrix<Number> Me; > >> > >> DenseMatrix<Number> Ke; > >> > >> std::vector<unsigned int> dof_indices; > >> > >> MeshBase::const_element_iterator el = > >> mesh.active_local_elements_begin(); > >> > >> const MeshBase::const_element_iterator end_el = > >> mesh.active_local_elements_end(); > >> > >> > >> > >> std::cout << "Writing PES data to file: " << potfilename << std::endl; > >> > >> double V, gxx, gxy, gyy, gzx, gzy, gzz; > >> > >> for ( ; el != end_el; ++el) > >> > >> { > >> > >> const Elem* elem = *el; > >> > >> dof_map.dof_indices (elem, dof_indices); > >> > >> fe->reinit (elem); > >> > >> Ke.resize (dof_indices.size(), dof_indices.size()); > >> > >> Me.resize (dof_indices.size(), dof_indices.size()); > >> > >> for (unsigned int qp=0; qp<qrule.n_points(); qp++) > >> > >> { > >> > >> const double x = q_point[qp](0); > >> > >> const double y = q_point[qp](1); > >> > >> const double z = q_point[qp](2); > >> > >> /* > >> > >> Doub potpoint(ndim); > >> > >> potpoint[0] = x; > >> > >> potpoint[1] = y; > >> > >> potpoint[2] = z; > >> > >> */ > >> > >> V=x*x + y*y + z*z; > >> > >> gxx=0.10; > >> > >> gyy=1.20; > >> > >> gxy=1.10; > >> > >> gzx=0.003; > >> > >> gzy=0.40; > >> > >> gzz=0.50; > >> > >> > >> potfile << x << '\t' << y << '\t' << z << '\t' << V << '\t' << "\n"; > >> > >> > >> /* > >> > >> const Elem* elem = *el; > >> > >> dof_map.dof_indices (elem, dof_indices); > >> > >> fe->reinit (elem); > >> > >> Ke.resize (dof_indices.size(), dof_indices.size()); > >> > >> Me.resize (dof_indices.size(), dof_indices.size()); > >> > >> */ > >> > >> // for (unsigned int qp=0; qp<qrule.n_points(); qp++) > >> > >> for (unsigned int i=0; i<phi.size(); i++) > >> > >> for (unsigned int j=0; j<phi.size(); j++) > >> > >> { > >> > >> > >> Ke(i,j) += JxW[qp]*( > >> > >> 0.5*( gxx*dphi[i][qp](0)*dphi[j][qp](0) > >> > >> + gyy*dphi[i][qp](1)*dphi[j][qp](1) > >> > >> + gzz*dphi[i][qp](2)*dphi[j][qp](2) > >> > >> + gxy*dphi[i][qp](0)*dphi[j][qp](1) > >> > >> + gxy*dphi[i][qp](1)*dphi[j][qp](0) > >> > >> + gzx*dphi[i][qp](0)*dphi[j][qp](2) > >> > >> + gzx*dphi[i][qp](2)*dphi[j][qp](0) > >> > >> + gzy*dphi[i][qp](1)*dphi[j][qp](2) > >> > >> + gzy*dphi[i][qp](2)*dphi[j][qp](1) > >> > >> // + dgxxdx*dphi[i][qp](0) > >> > >> // + dgyydy*dphi[i][qp](1) > >> > >> // + dgzzdz*dphi[i][qp](2) > >> > >> // + dgxydx*dphi[i][qp](1) > >> > >> // + dgxydy*dphi[i][qp](0) > >> > >> // + dgxzdx*dphi[i][qp](2) > >> > >> // + dgzxdz*dphi[i][qp](0) > >> > >> // + dgyzdy*dphi[i][qp](2) > >> > >> // + dgzydz*dphi[i][qp](1) > >> > >> )*33.71526 + V*phi[i][qp]*phi[j][qp]); > >> > >> > >> > >> Me(i,j) += JxW[qp]*phi[i][qp]*phi[j][qp]; > >> > >> } > >> > >> matrix_A.add_matrix (Ke, dof_indices); > >> > >> matrix_B.add_matrix (Me, dof_indices); > >> > >> } > >> > >> } // end of element loop > >> > >> std::cout << "Finished writing PES data to file: " << potfilename > >> << std::endl; > >> > >> potfile.close(); > >> > >> std::cout << "Matrix A assembly completed! " << "\n" << std::endl; > >> > >> std::cout << "Matrix B assembly completed! " << "\n" << std::endl; > >> > >> std::cout << "Exporting Matrix A in matlab sparse matrix format... > >> " << "\n" << std::endl; > >> > >> char buf1[14]; > >> > >> sprintf (buf1, "A.m"); > >> > >> matrix_A.print_matlab(buf1); > >> > >> std::cout << "Matrix A Exported! " << "\n" << std::endl; > >> > >> // matrix_A.clear(); > >> > >> std::cout << "Matrix A Cleared from Memory! " << "\n" << std::endl; > >> > >> std::cout << "Exporting Matrix B in matlab sparse matrix format... > >> " << "\n" << std::endl; > >> > >> char buf2[14]; > >> > >> sprintf (buf2, "B.m"); > >> > >> matrix_B.print_matlab(buf2); > >> > >> std::cout << "Matrix B Exported! " << "\n" << std::endl; > >> > >> // matrix_B.clear(); > >> > >> std::cout << "Matrix B Cleared from Memory! " << "\n" << std::endl; > >> > >> #endif // LIBMESH_HAVE_SLEPC > >> > >> /** > >> > >> * All done! > >> > >> */ > >> > >> return; > >> > >> On Thu, Aug 4, 2016 at 5:41 PM, Mike Marchywka > >> > > <marchy...@hotmail.com<mailto:marchy...@hotmail.com><mailto: > marchy...@hotmail.com<mailto:marchy...@hotmail.com>>> > > wrote: > >> > >> > >> > >> > >> ---------------------------------------- > >>> Date: Thu, 4 Aug 2016 19:11:03 -0500 > >>> From: > > royst...@ices.utexas.edu<mailto:royst...@ices.utexas.edu><mailto: > royst...@ices.utexas.edu<mailto:royst...@ices.utexas.edu>> > >>> To: > > marchy...@hotmail.com<mailto:marchy...@hotmail.com><mailto:m > archy...@hotmail.com<mailto:marchy...@hotmail.com>> > >>> CC: > >> > > libmesh-users@lists.sourceforge.net<mailto:libmesh > -us...@lists.sourceforge.net><mailto:libmesh-users@lists.sourceforge.net > <mailto:libmesh-users@lists.sourceforge.net>> > >>> Subject: Re: [Libmesh-users] FW: libmesh problem: libmesh_nullptr was > >> not declared in scope > >>> > >>> > >>> > >>> On Thu, 4 Aug 2016, Mike Marchywka wrote: > >>> > >>>>> I have not followed the exchange but sometimes I end up including > >> headers within a namespace or > >>>>> something. Is libmesh being included within something? Not sure > >> what that does with some > >>>>> macros and others not lol. > >>> > >>> That was my first guess, too! That's actually why I was asking about > >>> the config macros - if he was in the nullptr-workaround case, then > >>> accidentally including a libMesh header within a namespace would have > >>> exactly the effect seen: the class we define wouldn't exist in the > >>> global namespace and the compiler wouldn't recognize it. > >> > >> I skimmed most of the messages and it did sound like it would be > something > >> easy to find by looking at the exact code so I was a bit surprised with > >> that last post :) > >> > >> For problems in unfamiliar code grep can be amazingly > >> useful even if you expect 1000's of hits they usually end up being easy > >> to sort out. > >> > >> The linking is a bit unorthodox, indeed I think you had some specific > >> recommendations for linking to libmesh that hid most of the details, but > >> actually building it and compiling with it were pretty easy. I turned > >> on some debug info > >> from the example make script, just copied its invokation of g++ and > libtool > >> and that seems to work for some simple case. > >> > >> > >> > >> > >>> --- > >>> Roy > >> > >> > > ------------------------------------------------------------ > ------------------ > >> _______________________________________________ > >> Libmesh-users mailing list > >> > > Libmesh-users@lists.sourceforge.net<mailto:Libmesh > -us...@lists.sourceforge.net><mailto:Libmesh-users@lists.sourceforge.net > <mailto:Libmesh-users@lists.sourceforge.net>> > >> https://lists.sourceforge.net/lists/listinfo/libmesh-users > >> > > > > > > > ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. http://sdm.link/zohodev2dev _______________________________________________ Libmesh-users mailing list Libmesh-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libmesh-users