[cig-commits] r6500 - in short/3D/PyLith/trunk: . modulesrc/solver

knepley at geodynamics.org knepley at geodynamics.org
Sat Mar 31 18:05:41 PDT 2007


Author: knepley
Date: 2007-03-31 18:05:41 -0700 (Sat, 31 Mar 2007)
New Revision: 6500

Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src
Log:
Trial code for solving


Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-04-01 00:51:51 UTC (rev 6499)
+++ short/3D/PyLith/trunk/TODO	2007-04-01 01:05:41 UTC (rev 6500)
@@ -122,7 +122,10 @@
   the appropriate discretization for a problem. For example, I think
   it would allow us to use spectral elements.
 
+6. Trial run with quadratic elements
 
+7. Trial run with fully interpolated mesh
+
 ======================================================================
 QUESTIONS FOR LEIF
 ======================================================================

Modified: short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src
===================================================================
--- short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src	2007-04-01 00:51:51 UTC (rev 6499)
+++ short/3D/PyLith/trunk/modulesrc/solver/solver.pyxe.src	2007-04-01 01:05:41 UTC (rev 6500)
@@ -60,6 +60,9 @@
     self.name = "pylith_solver_Solver"
 
     # ADD STUFF HERE (CREATE KSP)
+    KSP ksp;
+    ierr = KSPCreate(comm, &ksp);CHKERRQ(ierr);
+    ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);
     return
 
 
@@ -74,8 +77,10 @@
       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) {
+      ALE::Obj<ALE::Field::Mesh::real_section_type>* field = (ALE::Obj<ALE::Field::Mesh::real_section_type>*) fieldVptr;
+      VecScatter scatter;
+      ierr = MeshCreateGlobalScatter(*mesh, *field, &scatter);CHKERRQ(ierr);
+    } catch (const std::exception& err) {
       PyErr_SetString(PyExc_RuntimeError,
                       const_cast<char*>(err.what()));
     } catch (...) {
@@ -123,7 +128,17 @@
       assert(0 != fieldOutVptr);
       assert(0 != jacobianVptr);
       assert(0 != fieldInVptr);
-      // STUFF GOES HERE
+      Vec localVec;
+      ierr = VecCreateSeqWithArray(PETSC_COMM_SELF, fieldIn->size(), fieldIn->restrict(), &localVec);CHKERRQ(ierr);
+      ierr = VecScatterBegin(localVec, vecIn, INSERT_VALUES, SCATTER_FORWARD, scatter);CHKERRQ(ierr);
+      ierr = VecScatterEnd(localVec, vecIn, INSERT_VALUES, SCATTER_FORWARD, scatter);CHKERRQ(ierr);
+      ierr = VecDestroy(localVec);CHKERRQ(ierr);
+      ierr = KSPSetOperators(ksp, jacobian, jacobian, DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
+      ierr = KSPSolve(vecIn, vecOut);CHKERRQ(ierr);
+      ierr = VecCreateSeqWithArray(PETSC_COMM_SELF, fieldOut->size(), fieldOut->restrict(), &localVec);CHKERRQ(ierr);
+      ierr = VecScatterBegin(vecOut, localVec, INSERT_VALUES, SCATTER_REVERSE, scatter);CHKERRQ(ierr);
+      ierr = VecScatterEnd(vecOut, localVec, INSERT_VALUES, SCATTER_REVERSE, scatter);CHKERRQ(ierr);
+      ierr = VecDestroy(localVec);CHKERRQ(ierr);
       } catch (const std::exception& err) {
       PyErr_SetString(PyExc_RuntimeError,
                       const_cast<char*>(err.what()));



More information about the cig-commits mailing list