[cig-commits] r6499 - in short/3D/PyLith/trunk/modulesrc: . solver
brad at geodynamics.org
brad at geodynamics.org
Sat Mar 31 17:51:52 PDT 2007
Author: brad
Date: 2007-03-31 17:51:51 -0700 (Sat, 31 Mar 2007)
New Revision: 6499
Added:
short/3D/PyLith/trunk/modulesrc/solver/
short/3D/PyLith/trunk/modulesrc/solver/Makefile.am
short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src
Log:
Added missing solver dir.
Added: short/3D/PyLith/trunk/modulesrc/solver/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/modulesrc/solver/Makefile.am 2007-04-01 00:49:54 UTC (rev 6498)
+++ short/3D/PyLith/trunk/modulesrc/solver/Makefile.am 2007-04-01 00:51:51 UTC (rev 6499)
@@ -0,0 +1,43 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+subpackage = solver
+include $(top_srcdir)/subpackage.am
+
+subpkgpyexec_LTLIBRARIES = solvermodule.la
+
+solvermodule_la_LDFLAGS = -module
+
+solvermodule_la_SOURCES = solver.pyxe
+
+nodist_solvermodule_la_SOURCES = \
+ solver.c solver_embed.cpp solver_embed.h
+
+solvermodule_la_LIBADD = \
+ $(top_builddir)/libsrc/libpylith.la \
+ $(PETSC_LIB)
+
+INCLUDES += -I$(PYTHON_INCDIR) $(PETSC_INCLUDE)
+
+solver.pyx solver_embed.cpp solver_embed.h: solver.pyxe
+ pyrexembed solver.pyxe
+solver.pyxe: $(srcdir)/solver.pyxe.src
+ cp $(srcdir)/solver.pyxe.src $@
+solver_embed.cpp: solver_embed.h
+solver_embed.h: solver.pyx
+
+.pyx.c:
+ pyrexc $<
+
+CLEANFILES = solver.pyxe solver.pyx solver.c *_embed.*
+
+# End of file
Added: short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src 2007-04-01 00:49:54 UTC (rev 6498)
+++ short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src 2007-04-01 00:51:51 UTC (rev 6499)
@@ -0,0 +1,150 @@
+# -*- Pyrex -*-
+#
+# ======================================================================
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+#header{
+#include <petscksp.h>
+#include <Mesh.hh>
+
+#include <assert.h>
+#include <stdexcept>
+#include <Python.h>
+#}header
+
+# ----------------------------------------------------------------------
+cdef extern from "Python.h":
+ object PyCObject_FromVoidPtr(void*, void (*destruct)(void*))
+ void* PyCObject_AsVoidPtr(object)
+
+cdef void* ptrFromHandle(obj):
+ """Extract pointer from PyCObject."""
+ return PyCObject_AsVoidPtr(obj.handle)
+
+cdef extern from "stdlib.h":
+ ctypedef unsigned long size_t
+ void* malloc(size_t size)
+ void free(void* mem)
+
+cdef void KSP_destructor(void* obj):
+ """
+ Destroy KSP object.
+ """
+ # create shim for destructor
+ #embed{ void KSP_destructor_cpp(void* pObj)
+ #}embed
+ KSP_destructor_cpp(obj)
+ return
+
+
+# ----------------------------------------------------------------------
+cdef class Solver:
+
+ cdef void* thisptr # Pointer to C++ object
+ cdef readonly object handle # PyCObject holding pointer to C++ object
+ cdef readonly object name # Identifier for object base type
+
+ def __init__(self):
+ """
+ Constructor.
+ """
+ self.handle = None
+ self.thisptr = NULL
+ self.name = "pylith_solver_Solver"
+
+ # ADD STUFF HERE (CREATE KSP)
+ return
+
+
+ def initialize(self, mesh, field):
+ """
+ Initialzie solver.
+ """
+ # create shim for method 'initialize'
+ #embed{ void Solver_initialize(void* objVptr, void* meshVptr, void* fieldVptr)
+ try {
+ assert(0 != objVptr);
+ assert(0 != meshVptr);
+ assert(0 != fieldVptr);
+ ALE::Obj<ALE::Field::Mesh>* mesh = (ALE::Obj<ALE::Field::Mesh>*) meshVptr;
+ // STUFF GOES HERE
+ } catch (const std::exception& err) {
+ PyErr_SetString(PyExc_RuntimeError,
+ const_cast<char*>(err.what()));
+ } catch (...) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Caught unknown C++ exception.");
+ } // try/catch
+ #}embed
+
+ if not mesh.name == "pylith_topology_Mesh":
+ raise TypeError, \
+ "Argument must be extension module type " \
+ "'pylith::topology::Mesh'."
+ cdef void* fieldVptr
+ fieldVptr = PyCObject_AsVoidPtr(field)
+ Solver_initialize(self.thisptr, ptrFromHandle(mesh), fieldVptr)
+ return
+
+
+ def _createHandle(self):
+ """
+ Wrap pointer to C++ object in PyCObject.
+ """
+ return PyCObject_FromVoidPtr(self.thisptr, KSP_destructor)
+
+
+# ----------------------------------------------------------------------
+cdef class SolverLinear(Solver):
+
+ def __init__(self):
+ """
+ Constructor.
+ """
+ Solver.__init__(self)
+ return
+
+
+ def solve(self, fieldOut, jacobian, fieldIn):
+ """
+ Solve linear system.
+ """
+ # create shim for method 'solve'
+ #embed{ void SolverLinear_solve(void* objVptr, void* fieldOutVptr, void* jacobianVptr, void* fieldInVptr)
+ try {
+ assert(0 != objVptr);
+ assert(0 != fieldOutVptr);
+ assert(0 != jacobianVptr);
+ assert(0 != fieldInVptr);
+ // STUFF GOES HERE
+ } catch (const std::exception& err) {
+ PyErr_SetString(PyExc_RuntimeError,
+ const_cast<char*>(err.what()));
+ } catch (...) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "Caught unknown C++ exception.");
+ } // try/catch
+ #}embed
+
+ if not mesh.name == "pylith_topology_Mesh":
+ raise TypeError, \
+ "Argument must be extension module type " \
+ "'pylith::topology::Mesh'."
+ cdef void* fieldOutVptr
+ cdef void* jacobianVptr
+ cdef void* fieldInVptr
+ fieldOutVptr = PyCObject_AsVoidPtr(fieldOut)
+ jacobianVptr = PyCObject_AsVoidPtr(jacobian)
+ fieldInVptr = PyCObject_AsVoidPtr(fieldIn)
+ SolverLinear_solve(self.thisptr, fieldOutVptr, jacobianVptr, fieldInVptr)
+ return
+
+
+# End of file
More information about the cig-commits
mailing list