[Debian-astro-commits] [gyoto] 33/221: MPI: Get requested quantities from data pointer instead of Scenery.

Thibaut Jean-Claude Paumard thibaut at moszumanska.debian.org
Fri May 22 20:52:31 UTC 2015


This is an automated email from the git hooks/post-receive script.

thibaut pushed a commit to branch master
in repository gyoto.

commit 82a24f08b062eac91741703d1bda199c681788e9
Author: Thibaut Paumard <paumard at users.sourceforge.net>
Date:   Sat Oct 11 12:53:11 2014 +0200

    MPI: Get requested quantities from data pointer instead of Scenery.
---
 include/GyotoScenery.h |  2 +-
 lib/Scenery.C          | 23 ++++++++++++++++++-----
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/include/GyotoScenery.h b/include/GyotoScenery.h
index ea2017c..c697295 100644
--- a/include/GyotoScenery.h
+++ b/include/GyotoScenery.h
@@ -295,7 +295,7 @@ class Gyoto::Scenery : protected Gyoto::SmartPointee {
   /**
    * This is all quantities except Spectrum, BinSpectrum and ImpactCoords.
    */
-  size_t getScalarQuantitiesCount() const ;
+  size_t getScalarQuantitiesCount(Quantity_t *q=NULL) const ;
 
   /// Get ph_.tmin_
   double tMin() const ;
diff --git a/lib/Scenery.C b/lib/Scenery.C
index 46df2ca..2c83b6b 100644
--- a/lib/Scenery.C
+++ b/lib/Scenery.C
@@ -268,13 +268,22 @@ void Scenery::rayTrace(size_t imin, size_t imax,
     size_t ij[2]={imin, jmin};
 
     size_t nbnuobs=0;
-    Quantity_t quantities = getRequestedQuantities();
+    Quantity_t quantities = GYOTO_QUANTITY_NONE;
+    
+    if (mpi_workers_) {
+      if (data) quantities=Quantity_t(*data);
+      for (int w=0; w<mpi_workers_->remote_size(); ++w)
+	mpi_workers_->send(w, raytrace, quantities);
+    } else {
+      mpi_manager_->recv(0, raytrace, quantities);
+    }
+
     if (quantities & (GYOTO_QUANTITY_SPECTRUM | GYOTO_QUANTITY_BINSPECTRUM)) {
       if (!spr) throwError("Spectral quantity requested but "
 			     "no spectrometer specified!");
       nbnuobs = spr -> nSamples();
     }
-    size_t nelt= getScalarQuantitiesCount();
+    size_t nelt= getScalarQuantitiesCount(&quantities);
     if (quantities & GYOTO_QUANTITY_SPECTRUM)     nelt += nbnuobs;
     if (quantities & GYOTO_QUANTITY_BINSPECTRUM)  nelt += nbnuobs;
     //    if (quantities & GYOTO_QUANTITY_IMPACTCOORDS) nelt += 16;
@@ -700,10 +709,14 @@ std::string Scenery::getRequestedQuantitiesString() const {
   return squant;
 }
 
-size_t Scenery::getScalarQuantitiesCount() const {
+size_t Scenery::getScalarQuantitiesCount(Quantity_t *q) const {
   size_t nquant=0;
-  Quantity_t quantities
-    = quantities_?quantities_:(astrobj()?astrobj()->getDefaultQuantities():0);
+  Quantity_t quantities;
+  if (q) quantities=*q;
+  else
+    quantities=quantities_?
+      quantities_:
+      (astrobj()?astrobj()->getDefaultQuantities():GYOTO_QUANTITY_NONE);
   if (quantities & GYOTO_QUANTITY_INTENSITY   ) ++nquant;
   if (quantities & GYOTO_QUANTITY_EMISSIONTIME) ++nquant;
   if (quantities & GYOTO_QUANTITY_MIN_DISTANCE) ++nquant;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-astro/packages/gyoto.git



More information about the Debian-astro-commits mailing list