Skip to content

MPI-dev [WIP] #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/run_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ conda activate $CONDA_ENV
$PYTHON -m unittest discover -v
$PYTHON -m unittest discover -v -p 'ptest_*'

mpirun -n 2 --oversubscribe $PYTHON ptest_augmentedVector.py
mpirun -n 2 --oversubscribe $PYTHON ptest_mpiUtils.py
mpirun -n 2 --oversubscribe $PYTHON ptest_meanVarRiskMeasureSAA.py
mpirun -n 2 --oversubscribe $PYTHON ptest_scipyCostWrapper.py
mpirun -n 2 --oversubscribe $PYTHON ptest_superquantileSAA.py
mpirun -n 2 --oversubscribe $PYTHON ptest_transformedMeanRiskMeasureSAA.py



29 changes: 29 additions & 0 deletions doc/soupy.cost.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
soupy.cost
=========================


soupy.cost.controlCostFunctional
---------------------------------------

.. automodule:: soupy.cost.controlCostFunctional
:members:
:undoc-members:
:show-inheritance:

soupy.cost.controlCostHessian
---------------------------------------

.. automodule:: soupy.cost.controlCostHessian
:members:
:undoc-members:
:show-inheritance:


soupy.cost.penalization
---------------------------------------

.. automodule:: soupy.cost.penalization
:members:
:undoc-members:
:show-inheritance:

66 changes: 0 additions & 66 deletions doc/soupy.modeling.rst
Original file line number Diff line number Diff line change
Expand Up @@ -37,47 +37,6 @@ soupy.modeling.controlModelHessian
:show-inheritance:


soupy.modeling.controlCostFunctional
---------------------------------------

.. automodule:: soupy.modeling.controlCostFunctional
:members:
:undoc-members:
:show-inheritance:

soupy.modeling.controlCostHessian
---------------------------------------

.. automodule:: soupy.modeling.controlCostHessian
:members:
:undoc-members:
:show-inheritance:

soupy.modeling.riskMeasure
---------------------------------------

.. automodule:: soupy.modeling.riskMeasure
:members:
:undoc-members:
:show-inheritance:


soupy.modeling.meanVarRiskMeasureStochastic
--------------------------------------------

.. automodule:: soupy.modeling.meanVarRiskMeasureStochastic
:members:
:undoc-members:
:show-inheritance:

soupy.modeling.meanVarRiskMeasureSAA
---------------------------------------

.. automodule:: soupy.modeling.meanVarRiskMeasureSAA
:members:
:undoc-members:
:show-inheritance:


soupy.modeling.augmentedVector
-------------------------------------------
Expand All @@ -87,31 +46,6 @@ soupy.modeling.augmentedVector
:undoc-members:
:show-inheritance:

soupy.modeling.superquantileRiskMeasureSAA
-------------------------------------------

.. automodule:: soupy.modeling.superquantileRiskMeasureSAA
:members:
:undoc-members:
:show-inheritance:

soupy.modeling.transformedMeanRiskMeasureSAA
----------------------------------------------

.. automodule:: soupy.modeling.transformedMeanRiskMeasureSAA
:members:
:undoc-members:
:show-inheritance:

soupy.modeling.penalization
---------------------------------------

.. automodule:: soupy.modeling.penalization
:members:
:undoc-members:
:show-inheritance:



soupy.modeling.variables
-------------------------------------------
Expand Down
43 changes: 43 additions & 0 deletions doc/soupy.risk.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
soupy.risk
=========================

soupy.risk.riskMeasure
---------------------------------------

.. automodule:: soupy.risk.riskMeasure
:members:
:undoc-members:
:show-inheritance:


soupy.risk.meanVarRiskMeasureStochastic
--------------------------------------------

.. automodule:: soupy.risk.meanVarRiskMeasureStochastic
:members:
:undoc-members:
:show-inheritance:

soupy.risk.meanVarRiskMeasureSAA
---------------------------------------

.. automodule:: soupy.risk.meanVarRiskMeasureSAA
:members:
:undoc-members:
:show-inheritance:

soupy.risk.superquantileRiskMeasureSAA
-------------------------------------------

.. automodule:: soupy.risk.superquantileRiskMeasureSAA
:members:
:undoc-members:
:show-inheritance:

soupy.risk.transformedMeanRiskMeasureSAA
----------------------------------------------

.. automodule:: soupy.risk.transformedMeanRiskMeasureSAA
:members:
:undoc-members:
:show-inheritance:
2 changes: 2 additions & 0 deletions doc/soupy.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ Submodules
.. toctree::

soupy.modeling
soupy.risk
soupy.cost
soupy.optimization
soupy.solver
soupy.collectives
Expand Down
4 changes: 4 additions & 0 deletions soupy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@

from .collectives import *

from .cost import *

from .modeling import *

from .optimization import *

from .risk import *

from .solver import *

from .utils import *
Expand Down
23 changes: 18 additions & 5 deletions soupy/collectives/mpiUtils.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import numpy as np
from mpi4py import MPI
from ..modeling.augmentedVector import AugmentedVector

def allocate_process_sample_sizes(sample_size, comm_sampler):
"""
Expand Down Expand Up @@ -63,11 +64,23 @@ def set_local_from_global(v, v_np):
:param v_np: numpy array for global entries
:type v_np: np.ndarray
"""

local_range = v.local_range()
if len(local_range) > 0:
v.set_local(v_np[local_range[0] : local_range[1]])
v.apply("")

if isinstance(v, AugmentedVector):
# Set the vector component
local_range = v.get_vector().local_range()
if len(local_range) > 0:
v.get_vector().set_local(v_np[local_range[0] : local_range[1]])
v.apply("")

# Set the scalar component
v.set_scalar(v_np[-1])
else:
local_range = v.local_range()
if len(local_range) > 0:
v.set_local(v_np[local_range[0] : local_range[1]])
v.apply("")



def get_global(v):
"""
Expand Down
5 changes: 5 additions & 0 deletions soupy/cost/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from .controlCostFunctional import ControlCostFunctional, DeterministicControlCostFunctional, RiskMeasureControlCostFunctional, PenalizationControlCostFunctional

from .controlCostHessian import ControlCostHessian

from .penalization import Penalization, L2Penalization, WeightedL2Penalization, MultiPenalization, VariationalPenalization
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
import numpy as np
import dolfin as dl

from .variables import STATE, PARAMETER, ADJOINT, CONTROL
from .augmentedVector import AugmentedVector
from ..modeling import STATE, PARAMETER, ADJOINT, CONTROL, AugmentedVector

class ControlCostFunctional:
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# Software Foundation) version 3.0 dated June 2007.


from .variables import STATE, ADJOINT, PARAMETER, CONTROL
from ..modeling import STATE, ADJOINT, PARAMETER, CONTROL

class ControlCostHessian:
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
# Software Foundation) version 3.0 dated June 2007.

import dolfin as dl
from .variables import STATE, CONTROL
from .augmentedVector import AugmentedVector
from ..modeling import STATE, CONTROL, AugmentedVector


class Penalization:
Expand Down
18 changes: 0 additions & 18 deletions soupy/modeling/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,11 @@

from .augmentedVector import AugmentedVector

from .controlCostFunctional import ControlCostFunctional, DeterministicControlCostFunctional, RiskMeasureControlCostFunctional, PenalizationControlCostFunctional

from .controlCostHessian import ControlCostHessian

from .controlModel import ControlModel

from .controlModelHessian import ControlModelHessian

from .controlQoI import ControlQoI, L2MisfitVarfHandler, VariationalControlQoI, L2MisfitControlQoI

from .meanVarRiskMeasureStochastic import meanVarRiskMeasureStochasticSettings, MeanVarRiskMeasureStochastic

from .meanVarRiskMeasureSAA import meanVarRiskMeasureSAASettings, MeanVarRiskMeasureSAA

from .penalization import Penalization, L2Penalization, WeightedL2Penalization, MultiPenalization, VariationalPenalization

from .riskMeasure import RiskMeasure

from .smoothPlusApproximation import SmoothPlusApproximationQuartic, SmoothPlusApproximationSoftplus

from .superquantileRiskMeasureSAA import SuperquantileRiskMeasureSAA, superquantileRiskMeasureSAASettings, sample_superquantile, sample_superquantile_by_minimization

from .transformedMeanRiskMeasureSAA import TransformedMeanRiskMeasureSAA, transformedMeanRiskMeasureSAASettings, IdentityFunction, FunctionWrapper

from .variables import STATE, PARAMETER, ADJOINT, CONTROL

20 changes: 15 additions & 5 deletions soupy/modeling/augmentedVector.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ def __init__(self, v, copy_vector=True):
:param v: :code:`dolfin.Vector` to be augmented
:param copy_vector: If :code:`True`, copy the vector, otherwise use the same memory
"""
assert v.mpi_comm().Get_size() == 1
# assert v.mpi_comm().Get_size() == 1 # Working towards removing this constraint
self._mpi_comm = v.mpi_comm()
if copy_vector:
self.v = v.copy()
else:
Expand All @@ -40,7 +41,9 @@ def copy(self):
x = AugmentedVector(self.v, copy_vector=True)
x.set_scalar(self.t)


def mpi_comm(self):
return self._mpi_comm

def add_local(self, vt_array):
self.v.add_local(vt_array[:-1])
self.v.apply("")
Expand All @@ -51,9 +54,6 @@ def set_local(self, vt_array):
self.v.apply("")
self.t = vt_array[-1]

def apply(self, method):
self.v.apply(method)

def get_local(self):
return np.append(self.v.get_local(), self.t)

Expand Down Expand Up @@ -84,4 +84,14 @@ def inner(self, vt):

def apply(self, method):
self.v.apply(method)

def gather_on_zero(self):
v_np = self.v.gather_on_zero()
if self._mpi_comm.Get_rank() == 0:
v_np = np.append(v_np, self.t)
return v_np


def size(self):
return self.v.size() + 1

2 changes: 1 addition & 1 deletion soupy/optimization/inexactNewtonCG.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

from hippylib import ParameterList

from ..modeling.controlCostHessian import ControlCostHessian
from ..cost.controlCostHessian import ControlCostHessian
from ..modeling.variables import CONTROL
from .cgSolverSteihaug import CGSolverSteihaug

Expand Down
12 changes: 12 additions & 0 deletions soupy/risk/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from .meanVarRiskMeasureStochastic import meanVarRiskMeasureStochasticSettings, MeanVarRiskMeasureStochastic

from .meanVarRiskMeasureSAA import meanVarRiskMeasureSAASettings, MeanVarRiskMeasureSAA

from .riskMeasure import RiskMeasure

from .smoothPlusApproximation import SmoothPlusApproximationQuartic, SmoothPlusApproximationSoftplus

from .superquantileRiskMeasureSAA import SuperquantileRiskMeasureSAA, superquantileRiskMeasureSAASettings, sample_superquantile, sample_superquantile_by_minimization

from .transformedMeanRiskMeasureSAA import TransformedMeanRiskMeasureSAA, transformedMeanRiskMeasureSAASettings, IdentityFunction, FunctionWrapper

Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
from hippylib import ParameterList, Random

from .riskMeasure import RiskMeasure
from .variables import STATE, PARAMETER, ADJOINT, CONTROL
from .controlModelHessian import ControlModelHessian
from ..modeling import STATE, PARAMETER, ADJOINT, CONTROL, ControlModelHessian

from ..collectives import NullCollective, MultipleSamePartitioningPDEsCollective, \
MultipleSerialPDEsCollective, allocate_process_sample_sizes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

from .riskMeasure import RiskMeasure

from .variables import STATE, PARAMETER, ADJOINT, CONTROL
from ..modeling import STATE, PARAMETER, ADJOINT, CONTROL


def meanVarRiskMeasureStochasticSettings(data = {}):
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,12 @@
from hippylib import ParameterList, Random

from .riskMeasure import RiskMeasure
from .variables import STATE, PARAMETER, ADJOINT, CONTROL
from .controlModelHessian import ControlModelHessian

from ..modeling import STATE, PARAMETER, ADJOINT, CONTROL, ControlModelHessian, AugmentedVector

from ..collectives import NullCollective, MultipleSamePartitioningPDEsCollective, \
MultipleSerialPDEsCollective, allocate_process_sample_sizes
from .smoothPlusApproximation import SmoothPlusApproximationQuartic, SmoothPlusApproximationSoftplus
from .augmentedVector import AugmentedVector



Expand Down
Loading