[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