diff --git a/.github/build_real.sh b/.github/build_real.sh
index 0482dcc3..27404ea3 100755
--- a/.github/build_real.sh
+++ b/.github/build_real.sh
@@ -14,4 +14,4 @@ touch ~/.config/pip/constraints.txt
pip install .[optview,testing] -v
# move pip constraints file back
-mv ~/.config/pip/constraints.txt.bkup ~/.config/pip/constraints.txt
\ No newline at end of file
+mv ~/.config/pip/constraints.txt.bkup ~/.config/pip/constraints.txt
diff --git a/.github/workflows/linux-build.yml b/.github/workflows/linux-build.yml
index ba4f70a6..b1822820 100644
--- a/.github/workflows/linux-build.yml
+++ b/.github/workflows/linux-build.yml
@@ -18,7 +18,7 @@ jobs:
versions: [{python: "3.10", numpy: "1.22"}, {python: "3.11", numpy: "1.25"}, {python: "3.12", numpy: "2.1"}]
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-python@v5
+ - uses: actions/setup-python@v5
with:
python-version: ${{ matrix.versions.python }}
- name: Install runtime numpy ${{ matrix.versions.numpy }}
diff --git a/.gitignore b/.gitignore
index 079a5034..5eb691a8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,8 @@
syntax: glob
+
+# Ignore ruff and pre-commit config files
+.pre-commit-config.yaml
+
build
doc/_build
*.pyc
diff --git a/.zenodo.json b/.zenodo.json
index 3d302559..0b6773d0 100644
--- a/.zenodo.json
+++ b/.zenodo.json
@@ -16,4 +16,4 @@
"name": "Joaquim R. R. A. Martins"
}
]
-}
\ No newline at end of file
+}
diff --git a/doc/_static/pyOptSparse_logo.svg b/doc/_static/pyOptSparse_logo.svg
index 8785599b..98fffeee 100644
--- a/doc/_static/pyOptSparse_logo.svg
+++ b/doc/_static/pyOptSparse_logo.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/doc/changes.rst b/doc/changes.rst
index df441b89..b85309b7 100644
--- a/doc/changes.rst
+++ b/doc/changes.rst
@@ -15,8 +15,8 @@ The following list summarizes some of the changes/improvements made to pyOpt to
* User specification of design variable scaling
* User specification of constraint scaling
* Design variable returns in dictionary format only
-* Specification of linear constraints, dense or sparse
-* Sparse non-linear Jacobians
+* Specification of linear constraints, dense or sparse
+* Sparse non-linear Jacobians
* New history file format. Uses SQLite dictionaries.
* Fixed hot start bug where first call to user functions is a gradient. It is now guaranteed, that the first call is to the function evaluation, not the gradient.
* Various bug fixes in SNOPT
diff --git a/doc/guide.rst b/doc/guide.rst
index 5140e7c6..0b22f0f4 100644
--- a/doc/guide.rst
+++ b/doc/guide.rst
@@ -210,7 +210,7 @@ Linear constraints in pyOptSparse are defined exclusively by ``jac``, ``lower``,
For linear constraint :math:`g_L \leq Ax + b \leq g_U`, the constraint definition would look like:
.. code-block:: python
-
+
optProb.addConGroup("con", num_cons, linear=True, wrt=["xvars"], jac={"xvars": A}, lower=gL - b, upper=gU - b)
Users should not provide the linear constraint values (i.e., :math:`g = Ax + b`) in a user-defined objective/constraint function.
@@ -310,4 +310,4 @@ See the optimizer-specific documentation page for more details.
Postprocessing
++++++++++++++
-The result of the optimization is returned in a :class:`pyoptsparse.pyOpt_solution.Solution` object.
\ No newline at end of file
+The result of the optimization is returned in a :class:`pyoptsparse.pyOpt_solution.Solution` object.
diff --git a/doc/index.rst b/doc/index.rst
index 6edc934a..47c4ed5e 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -12,7 +12,7 @@ Some key features of pyOptSparse include:
pyOptSparse is a fork of `pyOpt `_.
-However, it is not backwards compatible with pyOpt and thus optimization scripts will need to be modified to use pyOptSparse.
+However, it is not backwards compatible with pyOpt and thus optimization scripts will need to be modified to use pyOptSparse.
Getting Started
===============
diff --git a/doc/install.rst b/doc/install.rst
index 6d425399..836d9a3f 100644
--- a/doc/install.rst
+++ b/doc/install.rst
@@ -93,7 +93,7 @@ To install pyOptSparse including those dependencies, run
pip install .[optview]
-If you encounter a ``no module named tkinter`` error when trying to run optview, you may need to `install tkinter on your system `__.
+If you encounter a ``no module named tkinter`` error when trying to run optview, you may need to `install tkinter on your system `__.
Testing
-------
diff --git a/doc/optimizers/CONMIN.rst b/doc/optimizers/CONMIN.rst
index b8e334b2..63c1dbd6 100644
--- a/doc/optimizers/CONMIN.rst
+++ b/doc/optimizers/CONMIN.rst
@@ -16,4 +16,3 @@ API
.. autoclass:: CONMIN
:members: __call__
-
diff --git a/doc/optimizers/IPOPT.rst b/doc/optimizers/IPOPT.rst
index e68aec04..e317ac7a 100644
--- a/doc/optimizers/IPOPT.rst
+++ b/doc/optimizers/IPOPT.rst
@@ -34,4 +34,3 @@ API
.. autoclass:: IPOPT
:members: __call__
-
diff --git a/doc/optimizers/NLPQLP.rst b/doc/optimizers/NLPQLP.rst
index 9a15b2b1..d6f65028 100644
--- a/doc/optimizers/NLPQLP.rst
+++ b/doc/optimizers/NLPQLP.rst
@@ -32,4 +32,3 @@ API
.. autoclass:: NLPQLP
:members: __call__
-
diff --git a/doc/optimizers/NSGA2.rst b/doc/optimizers/NSGA2.rst
index 56b3d2a7..2e324a89 100644
--- a/doc/optimizers/NSGA2.rst
+++ b/doc/optimizers/NSGA2.rst
@@ -26,4 +26,3 @@ API
.. autoclass:: NSGA2
:members: __call__
-
diff --git a/doc/optimizers/PSQP.rst b/doc/optimizers/PSQP.rst
index 526b068c..b6a0a9f2 100644
--- a/doc/optimizers/PSQP.rst
+++ b/doc/optimizers/PSQP.rst
@@ -22,4 +22,3 @@ API
.. autoclass:: PSQP
:members: __call__
-
diff --git a/doc/optimizers/SLSQP.rst b/doc/optimizers/SLSQP.rst
index 68494d8b..246d9c9c 100644
--- a/doc/optimizers/SLSQP.rst
+++ b/doc/optimizers/SLSQP.rst
@@ -27,4 +27,3 @@ API
.. autoclass:: SLSQP
:members: __call__
-
diff --git a/doc/optimizers/SLSQP_options.yaml b/doc/optimizers/SLSQP_options.yaml
index 1027287e..75a777eb 100644
--- a/doc/optimizers/SLSQP_options.yaml
+++ b/doc/optimizers/SLSQP_options.yaml
@@ -1,10 +1,10 @@
-ACC:
+ACC:
desc: Convergence Accurancy
-MAXIT:
+MAXIT:
desc: Maximum Iterations
-IPRINT:
+IPRINT:
desc: Output Level (<0 - None, 0 - Screen, 1 - File)
-IOUT:
+IOUT:
desc: Output Unit Number
-IFILE:
+IFILE:
desc: Output File Name
diff --git a/doc/optimizers/SNOPT.rst b/doc/optimizers/SNOPT.rst
index beeb42ec..c48aa536 100644
--- a/doc/optimizers/SNOPT.rst
+++ b/doc/optimizers/SNOPT.rst
@@ -16,7 +16,7 @@ Installation
Building from source
********************
-SNOPT is available for purchase `here
+SNOPT is available for purchase `here
`_. Upon purchase, you should receive a zip file. Within the zip file, there is a folder called ``src``. To use SNOPT with pyoptsparse, paste all files from ``src`` except snopth.f into ``pyoptsparse/pySNOPT/source``.
From v2.0 onwards, only SNOPT v7.7.x is officially supported.
@@ -65,4 +65,3 @@ API
.. autoclass:: SNOPT
:members: __call__
-
diff --git a/doc/postprocessing.rst b/doc/postprocessing.rst
index c85a109a..ffb1de86 100644
--- a/doc/postprocessing.rst
+++ b/doc/postprocessing.rst
@@ -26,7 +26,7 @@ Requirements
\-axisartist (OptView)
numpy (OptView)
-For installation instructions, see :ref:`install_optview`.
+For installation instructions, see :ref:`install_optview`.
Although not necessary for most usage, the ``dill`` package is needed if you wish to save an editable version of the graph produced in ``OptView``.
``dill`` can be installed via ``pip`` in a terminal using
diff --git a/doc/pyoptsparse.bib b/doc/pyoptsparse.bib
index b467d87b..499c92c9 100644
--- a/doc/pyoptsparse.bib
+++ b/doc/pyoptsparse.bib
@@ -608,4 +608,4 @@ @article{Lyu2015b
volume = {53},
year = {2015},
keywords = {MACH}
-}
\ No newline at end of file
+}
diff --git a/doc/quickstart.rst b/doc/quickstart.rst
index 29f6b4a0..118fc95a 100644
--- a/doc/quickstart.rst
+++ b/doc/quickstart.rst
@@ -27,15 +27,15 @@ For the TP37, the objective function is a simple analytic function:
Notes:
-* The ``xdict`` variable is a dictionary whose keys are the names from each
- :meth:`~pyoptsparse.pyOpt_optimization.Optimization.addVar` and
+* The ``xdict`` variable is a dictionary whose keys are the names from each
+ :meth:`~pyoptsparse.pyOpt_optimization.Optimization.addVar` and
:meth:`~pyoptsparse.pyOpt_optimization.Optimization.addVarGroup` call. The line
.. code-block:: python
x = xdict["xvars"]
- retrieves an array of length 3 which are all the variables for this optimization.
+ retrieves an array of length 3 which are all the variables for this optimization.
* The line
@@ -62,7 +62,7 @@ Now the optimization problem can be initialized:
:end-before: # rst begin addVar
This creates an instance of the optimization class with a name and a reference to the objective function.
-To complete the setup of the optimization problem, the design variables and constraints need to be defined.
+To complete the setup of the optimization problem, the design variables and constraints need to be defined.
Design variables and constraints can be added either one-by-one or as a group.
Adding variables by group is generally recommended for related variables:
@@ -84,7 +84,7 @@ It is recommended that related constraints are added by group where possible:
:end-before: # rst begin addObj
This call adds two variables with name ``con``.
-There is no lower bound for the variables and the upper bound is 0.0.
+There is no lower bound for the variables and the upper bound is 0.0.
We must also assign the the key value for the objective using the
:meth:`~pyoptsparse.pyOpt_optimization.Optimization.addObj` call:
@@ -112,9 +112,9 @@ which produces the following table::
Variables (c - continuous, i - integer, d - discrete)
Index Name Type Lower Bound Value Upper Bound Status
- 0 xvars_0 c 0.000000E+00 1.000000E+01 4.200000E+01
- 1 xvars_1 c 0.000000E+00 1.000000E+01 4.200000E+01
- 2 xvars_2 c 0.000000E+00 1.000000E+01 4.200000E+01
+ 0 xvars_0 c 0.000000E+00 1.000000E+01 4.200000E+01
+ 1 xvars_1 c 0.000000E+00 1.000000E+01 4.200000E+01
+ 2 xvars_2 c 0.000000E+00 1.000000E+01 4.200000E+01
Constraints (i - inequality, e - equality)
Index Name Type Lower Value Upper Status Lagrange Multiplier (N/A)
@@ -152,7 +152,7 @@ which produces the following output::
================================================================================
Objective Function: objfunc
- Solution:
+ Solution:
--------------------------------------------------------------------------------
Total Time: 0.0062
User Objective Time : 0.0001
@@ -169,9 +169,9 @@ which produces the following output::
Variables (c - continuous, i - integer, d - discrete)
Index Name Type Lower Bound Value Upper Bound Status
- 0 xvars_0 c 0.000000E+00 2.399997E+01 4.200000E+01
- 1 xvars_1 c 0.000000E+00 1.200001E+01 4.200000E+01
- 2 xvars_2 c 0.000000E+00 1.200000E+01 4.200000E+01
+ 0 xvars_0 c 0.000000E+00 2.399997E+01 4.200000E+01
+ 1 xvars_1 c 0.000000E+00 1.200001E+01 4.200000E+01
+ 2 xvars_2 c 0.000000E+00 1.200000E+01 4.200000E+01
Constraints (i - inequality, e - equality)
Index Name Type Lower Value Upper Status Lagrange Multiplier (N/A)
diff --git a/doc/requirements.txt b/doc/requirements.txt
index 324d3ea5..cabb14f0 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,2 +1,2 @@
sphinx_mdolab_theme>=1.2
-sphinx-codeautolink
\ No newline at end of file
+sphinx-codeautolink
diff --git a/meson.build b/meson.build
index 1524e924..a2219cd3 100644
--- a/meson.build
+++ b/meson.build
@@ -42,4 +42,4 @@ else
endif
py3_dep = py3_target.dependency()
-subdir('pyoptsparse')
\ No newline at end of file
+subdir('pyoptsparse')
diff --git a/meson_options.txt b/meson_options.txt
index e41d6cc3..a768c27b 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -6,4 +6,4 @@ option('python_target', type: 'string', value: '',
to be built for is different than the Python installation that is used to run Meson. For example, Meson may be installed
on the user's system which is run using the system Python installation, but the user may want build PyOptSparse for
a Python installation in a virtual environment. Leave as an empty string to build for Python installation running
- Meson.''')
\ No newline at end of file
+ Meson.''')
diff --git a/paper/paper.md b/paper/paper.md
index a6eda955..a2731b10 100644
--- a/paper/paper.md
+++ b/paper/paper.md
@@ -49,7 +49,7 @@ At time of writing, the latest released version of pyOptSparse is v2.2.0.
pyOptSparse provides built-in support for several popular proprietary and open-source optimizers.
Each optimizer usually has its own way to specify the problem:
It might require different constraint ordering, have different ways of specifying equality constraints, or use a sparse matrix format to represent the constraint Jacobian.
-pyOptSparse provides a common Python interface for the various optimizers that hides these differences from the user.
+pyOptSparse provides a common Python interface for the various optimizers that hides these differences from the user.
By isolating the optimization problem definition from the optimizer, the user can easily switch between different optimizers applied to the same optimization problem.
The optimizer can be switched by editing a single line of code.
diff --git a/pyoptsparse/postprocessing/assets/base-styles.css b/pyoptsparse/postprocessing/assets/base-styles.css
index feb92cab..18af5b1f 100644
--- a/pyoptsparse/postprocessing/assets/base-styles.css
+++ b/pyoptsparse/postprocessing/assets/base-styles.css
@@ -390,4 +390,4 @@ there.
@media (min-width: 1000px) {}
/* Larger than Desktop HD */
-@media (min-width: 1200px) {}
\ No newline at end of file
+@media (min-width: 1200px) {}
diff --git a/pyoptsparse/postprocessing/assets/custom-styles.css b/pyoptsparse/postprocessing/assets/custom-styles.css
index 2a552058..84db49b1 100644
--- a/pyoptsparse/postprocessing/assets/custom-styles.css
+++ b/pyoptsparse/postprocessing/assets/custom-styles.css
@@ -12,4 +12,4 @@
.plot-container {
height: 90vh;
width: 100vh;
-}
\ No newline at end of file
+}
diff --git a/pyoptsparse/postprocessing/meson.build b/pyoptsparse/postprocessing/meson.build
index 837a8257..22e7114e 100644
--- a/pyoptsparse/postprocessing/meson.build
+++ b/pyoptsparse/postprocessing/meson.build
@@ -24,4 +24,4 @@ py3_target.install_sources(
asset_sources,
pure: true,
subdir: 'pyoptsparse/postprocessing/assets'
-)
\ No newline at end of file
+)
diff --git a/pyoptsparse/pyALPSO/LICENSE b/pyoptsparse/pyALPSO/LICENSE
index f87e922f..b9198e68 100644
--- a/pyoptsparse/pyALPSO/LICENSE
+++ b/pyoptsparse/pyALPSO/LICENSE
@@ -2,7 +2,7 @@ ALPSO - Augmented Lagrangian Particle Swarm Optimizer
Copyright (c) 2011, Dr. Ruben E. Perez (Ruben.Perez@rmc.ca)
and Peter W. Jansen (Peter.Jansen@rmc.ca)
-ALPSO is free software: you can redistribute it and/or modify it
+ALPSO is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
any later version.
@@ -15,19 +15,19 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-Non-free versions of ALPSO are available under terms different
-from those of the General Public License. For more information
-related to such a license, future developments and/or technical
-support, contact Dr. Ruben E. Perez (Ruben.Perez@rmc.ca) or
+Non-free versions of ALPSO are available under terms different
+from those of the General Public License. For more information
+related to such a license, future developments and/or technical
+support, contact Dr. Ruben E. Perez (Ruben.Perez@rmc.ca) or
Peter W. Jansen (Peter.Jansen@rmc.ca).
-In addition, we kindly ask you to acknowledge the code authors in
-any program, application or publication in which you use it. For
+In addition, we kindly ask you to acknowledge the code authors in
+any program, application or publication in which you use it. For
published works that use ALPSO we suggest referencing:
-P. Jansen and R. Perez, "Constrained Structural Design Optimization
-via a Parallel Augmented Lagrangian Particle Swarm Optimization
-Approach", International Journal of Computers and Structures,
+P. Jansen and R. Perez, "Constrained Structural Design Optimization
+via a Parallel Augmented Lagrangian Particle Swarm Optimization
+Approach", International Journal of Computers and Structures,
Vol. 89, No. 13-14, pp. 1352–1366, 2011.
----------------------------------------------------------------------
diff --git a/pyoptsparse/pyALPSO/meson.build b/pyoptsparse/pyALPSO/meson.build
index b49fafe2..3a967556 100644
--- a/pyoptsparse/pyALPSO/meson.build
+++ b/pyoptsparse/pyALPSO/meson.build
@@ -10,4 +10,4 @@ py3_target.install_sources(
python_sources,
pure: true,
subdir: 'pyoptsparse/pyALPSO'
-)
\ No newline at end of file
+)
diff --git a/pyoptsparse/pyALPSO/pyALPSO.py b/pyoptsparse/pyALPSO/pyALPSO.py
index 25af1761..482c94d4 100644
--- a/pyoptsparse/pyALPSO/pyALPSO.py
+++ b/pyoptsparse/pyALPSO/pyALPSO.py
@@ -211,8 +211,8 @@ def _on_setOption(self, name, value):
from . import alpso_ext
self.alpso = alpso_ext
- except ImportError:
- raise ImportError("pyALPSO: ALPSO EXT shared library failed to import.")
+ except ImportError as e:
+ raise ImportError("pyALPSO: ALPSO EXT shared library failed to import.") from e
def _communicateSolution(self, sol):
if sol is not None:
diff --git a/pyoptsparse/pyCONMIN/LICENSE b/pyoptsparse/pyCONMIN/LICENSE
index d7f6886b..80a73843 100644
--- a/pyoptsparse/pyCONMIN/LICENSE
+++ b/pyoptsparse/pyCONMIN/LICENSE
@@ -14,7 +14,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA.
----------------------------------------------------------------------
diff --git a/pyoptsparse/pyCONMIN/source/README b/pyoptsparse/pyCONMIN/source/README
index cbdad0c4..194952ce 100644
--- a/pyoptsparse/pyCONMIN/source/README
+++ b/pyoptsparse/pyCONMIN/source/README
@@ -1,4 +1,4 @@
-This directory contains the Fortran 77 source for CONMIN
-modified for pyOpt interfacing by Dr. Ruben E. Perez,
-plus two helper files called openunit.f and closeunit.f
+This directory contains the Fortran 77 source for CONMIN
+modified for pyOpt interfacing by Dr. Ruben E. Perez,
+plus two helper files called openunit.f and closeunit.f
to manipulate Fortran units from Python.
diff --git a/pyoptsparse/pyCONMIN/source/cnmn00.f b/pyoptsparse/pyCONMIN/source/cnmn00.f
index b20377f3..7dc9cc8c 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn00.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn00.f
@@ -3,9 +3,9 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX
1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT
- 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
- COMMON /OUTPUT/ IOUT
-C
+ 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
+ COMMON /OUTPUT/ IOUT
+C
C NFEASCT ADDED TO COMMON BLOCK BY KCYOUNG ON 4/14/92 TO ALLOW MORE
C THAN 10 ITERATION ATTEMPTS. NFEASCT BECOMES AN INPUT VALUE
C
@@ -17,23 +17,23 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
2LP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,CV1,CV2,CV3,CV4,APP,ALPCA,ALPFES,AL
3PLN,ALPMIN,ALPNC,ALPSAV,ALPSID,ALPTOT,RSPACE,IDM1,IDM2,IDM3,JDIR,I
4OBJ,KOBJ,KCOUNT,NCAL(2),NFEAS,MSCAL,NCOBJ,NVC,KOUNT,ICOUNT,IGOOD1,
- 5IGOOD2,IGOOD3,IGOOD4,IBEST,III,NLNC,JGOTO,ISPACE(2)
+ 5IGOOD2,IGOOD3,IGOOD4,IBEST,III,NLNC,JGOTO,ISPACE(2)
C ROUTINE TO SOLVE CONSTRAINED OR UNCONSTRAINED FUNCTION
-C MINIMIZATION.
-C BY G. N. VANDERPLAATS APRIL, 1972.
+C MINIMIZATION.
+C BY G. N. VANDERPLAATS APRIL, 1972.
C * * * * * * * * * * * JUNE, 1979 VERSION * * * * * * * * * * *
C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
-C REFERENCE; CONMIN - A FORTRAN PROGRAM FOR CONSTRAINED FUNCTION
-C MINIMIZATION: USER'S MANUAL, BY G. N. VANDERPLAATS,
-C NASA TM X-62,282, AUGUST, 1973.
-C STORAGE REQUIREMENTS:
-C PROGRAM - 7000 DECIMAL WORDS (CDC COMPUTER)
-C ARRAYS - APPROX. 2*(NDV**2)+26*NDV+4*NCON,
-C WHERE N3 = NDV+2.
-C RE-SCALE VARIABLES IF REQUIRED.
+C REFERENCE; CONMIN - A FORTRAN PROGRAM FOR CONSTRAINED FUNCTION
+C MINIMIZATION: USER'S MANUAL, BY G. N. VANDERPLAATS,
+C NASA TM X-62,282, AUGUST, 1973.
+C STORAGE REQUIREMENTS:
+C PROGRAM - 7000 DECIMAL WORDS (CDC COMPUTER)
+C ARRAYS - APPROX. 2*(NDV**2)+26*NDV+4*NCON,
+C WHERE N3 = NDV+2.
+C RE-SCALE VARIABLES IF REQUIRED.
IF (NSCAL.EQ.0.OR.IGOTO.EQ.0) GO TO 20
- DO 10 I=1,NDV
-10 X(I)=C(I)
+ DO 10 I=1,NDV
+10 X(I)=C(I)
20 CONTINUE
C CONSTANTS.
NDV1=NDV+1
@@ -42,158 +42,158 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
C ------------------------------------------------------------------
C CHECK FOR UNBOUNDED SOLUTION
C ------------------------------------------------------------------
-C STOP IF OBJ IS LESS THAN -1.0E+20
- IF (OBJ.GT.-1.0E+20) GO TO 30
- WRITE (IOUT,980)
- GO TO 810
+C STOP IF OBJ IS LESS THAN -1.0E+20
+ IF (OBJ.GT.-1.0E+20) GO TO 30
+ WRITE (IOUT,980)
+ GO TO 810
30 CONTINUE
- GO TO (160,390,380,670,690),IGOTO
+ GO TO (160,390,380,670,690),IGOTO
C ------------------------------------------------------------------
C SAVE INPUT CONTROL PARAMETERS
C ------------------------------------------------------------------
40 CONTINUE
- IF (IPRINT.GT.0) WRITE (IOUT,1220)
+ IF (IPRINT.GT.0) WRITE (IOUT,1220)
IF (LINOBJ.EQ.0.OR.(NCON.GT.0.OR.NSIDE.GT.0)) GO TO 50
-C TOTALLY UNCONSTRAINED FUNCTION WITH LINEAR OBJECTIVE.
+C TOTALLY UNCONSTRAINED FUNCTION WITH LINEAR OBJECTIVE.
C SOLUTION IS UNBOUNDED.
- WRITE (IOUT,970) LINOBJ,NCON,NSIDE
+ WRITE (IOUT,970) LINOBJ,NCON,NSIDE
RETURN
50 CONTINUE
- IDM1=ITRM
+ IDM1=ITRM
IDM2=ITMAX
- IDM3=ICNDIR
+ IDM3=ICNDIR
DM1=DELFUN
DM2=DABFUN
DM3=CT
- DM4=CTMIN
- DM5=CTL
+ DM4=CTMIN
+ DM5=CTL
DM6=CTLMIN
- DM7=THETA
- DM8=PHI
+ DM7=THETA
+ DM8=PHI
DM9=FDCH
DM10=FDCHM
- DM11=ABOBJ1
- DM12=ALPHAX
+ DM11=ABOBJ1
+ DM12=ALPHAX
C ------------------------------------------------------------------
-C DEFAULTS
+C DEFAULTS
C ------------------------------------------------------------------
- IF (ITRM.LE.0) ITRM=3
+ IF (ITRM.LE.0) ITRM=3
IF (ITMAX.LE.0) ITMAX=20
NDV1=NDV+1
IF (ICNDIR.EQ.0) ICNDIR=NDV1
IF (DELFUN.LE.0.) DELFUN=.0001
- CT=-ABS(CT)
+ CT=-ABS(CT)
IF (CT.GE.0.) CT=-.1
CTMIN=ABS(CTMIN)
- IF (CTMIN.LE.0.) CTMIN=.004
- CTL=-ABS(CTL)
+ IF (CTMIN.LE.0.) CTMIN=.004
+ CTL=-ABS(CTL)
IF (CTL.GE.0.) CTL=-0.01
CTLMIN=ABS(CTLMIN)
- IF (CTLMIN.LE.0.) CTLMIN=.001
- IF (THETA.LE.0.) THETA=1.
- IF (ABOBJ1.LE.0.) ABOBJ1=.1
- IF (ALPHAX.LE.0.) ALPHAX=.1
+ IF (CTLMIN.LE.0.) CTLMIN=.001
+ IF (THETA.LE.0.) THETA=1.
+ IF (ABOBJ1.LE.0.) ABOBJ1=.1
+ IF (ALPHAX.LE.0.) ALPHAX=.1
IF (FDCH.LE.0.) FDCH=.01
IF (FDCHM.LE.0.) FDCHM=.01
C ------------------------------------------------------------------
C INITIALIZE INTERNAL PARAMETERS
C ------------------------------------------------------------------
- INFOG=0
+ INFOG=0
ITER=0
JDIR=0
IOBJ=0
KOBJ=0
NDV2=NDV+2
KCOUNT=0
- NCAL(1)=0
- NCAL(2)=0
- NAC=0
- NFEAS=0
- MSCAL=NSCAL
+ NCAL(1)=0
+ NCAL(2)=0
+ NAC=0
+ NFEAS=0
+ MSCAL=NSCAL
CT1=ITRM
CT1=1./CT1
DCT=(CTMIN/ABS(CT))**CT1
- DCTL=(CTLMIN/ABS(CTL))**CT1
+ DCTL=(CTLMIN/ABS(CTL))**CT1
PHI=5.
ABOBJ=ABOBJ1
- NCOBJ=0
- CTAM=ABS(CTMIN)
+ NCOBJ=0
+ CTAM=ABS(CTMIN)
CTBM=ABS(CTLMIN)
-C CALCULATE NUMBER OF LINEAR CONSTRAINTS, NLNC.
+C CALCULATE NUMBER OF LINEAR CONSTRAINTS, NLNC.
NLNC=0
- IF (NCON.EQ.0) GO TO 70
+ IF (NCON.EQ.0) GO TO 70
DO 60 I=1,NCON
IF (ISC(I).GT.0) NLNC=NLNC+1
60 CONTINUE
70 CONTINUE
C ------------------------------------------------------------------
-C CHECK TO BE SURE THAT SIDE CONSTRAINTS ARE SATISFIED
+C CHECK TO BE SURE THAT SIDE CONSTRAINTS ARE SATISFIED
C ------------------------------------------------------------------
- IF (NSIDE.EQ.0) GO TO 110
+ IF (NSIDE.EQ.0) GO TO 110
DO 100 I=1,NDV
IF (VLB(I).LE.VUB(I)) GO TO 80
- XX=.5*(VLB(I)+VUB(I))
- X(I)=XX
- VLB(I)=XX
- VUB(I)=XX
+ XX=.5*(VLB(I)+VUB(I))
+ X(I)=XX
+ VLB(I)=XX
+ VUB(I)=XX
WRITE (IOUT,1120) I
80 CONTINUE
XX=X(I)-VLB(I)
IF (XX.GE.0.) GO TO 90
-C LOWER BOUND VIOLATED.
+C LOWER BOUND VIOLATED.
WRITE (IOUT,1130) X(I),VLB(I),I
- X(I)=VLB(I)
- GO TO 100
+ X(I)=VLB(I)
+ GO TO 100
90 CONTINUE
XX=VUB(I)-X(I)
- IF (XX.GE.0.) GO TO 100
+ IF (XX.GE.0.) GO TO 100
WRITE (IOUT,1140) X(I),VUB(I),I
- X(I)=VUB(I)
+ X(I)=VUB(I)
100 CONTINUE
110 CONTINUE
C ------------------------------------------------------------------
C INITIALIZE SCALING VECTOR, SCAL
C ------------------------------------------------------------------
- IF (NSCAL.EQ.0) GO TO 150
- IF (NSCAL.LT.0) GO TO 130
+ IF (NSCAL.EQ.0) GO TO 150
+ IF (NSCAL.LT.0) GO TO 130
DO 120 I=1,NDV
120 SCAL(I)=1.
- GO TO 150
+ GO TO 150
130 CONTINUE
DO 140 I=1,NDV
- SI=ABS(SCAL(I))
+ SI=ABS(SCAL(I))
IF (SI.LT.1.0E-20) SI=1.0E-5
SCAL(I)=SI
SI=1./SI
X(I)=X(I)*SI
- IF (NSIDE.EQ.0) GO TO 140
+ IF (NSIDE.EQ.0) GO TO 140
VLB(I)=VLB(I)*SI
VUB(I)=VUB(I)*SI
140 CONTINUE
150 CONTINUE
C ------------------------------------------------------------------
-C ***** CALCULATE INITIAL FUNCTION AND CONSTRAINT VALUES *****
+C ***** CALCULATE INITIAL FUNCTION AND CONSTRAINT VALUES *****
C ------------------------------------------------------------------
INFO=1
- NCAL(1)=1
- IGOTO=1
- GO TO 950
+ NCAL(1)=1
+ IGOTO=1
+ GO TO 950
160 CONTINUE
OBJ1=OBJ
IF (DABFUN.LE.0.) DABFUN=.001*ABS(OBJ)
- IF (DABFUN.LT.1.0E-10) DABFUN=1.0E-10
+ IF (DABFUN.LT.1.0E-10) DABFUN=1.0E-10
IF (IPRINT.LE.0) GO TO 270
C ------------------------------------------------------------------
-C PRINT INITIAL DESIGN INFORMATION
+C PRINT INITIAL DESIGN INFORMATION
C ------------------------------------------------------------------
IF (IPRINT.LE.1) GO TO 230
IF (NSIDE.EQ.0.AND.NCON.EQ.0) WRITE (IOUT,1290)
- IF (NSIDE.NE.0.OR.NCON.GT.0) WRITE (IOUT,1230)
+ IF (NSIDE.NE.0.OR.NCON.GT.0) WRITE (IOUT,1230)
WRITE (IOUT,1240) IPRINT,NDV,ITMAX,NCON,NSIDE,ICNDIR,NSCAL,NFDG
- 1,LINOBJ,ITRM,N1,N2,N3,N4,N5
+ 1,LINOBJ,ITRM,N1,N2,N3,N4,N5
WRITE (IOUT,1260) CT,CTMIN,CTL,CTLMIN,THETA,PHI,DELFUN,DABFUN
- WRITE (IOUT,1250) FDCH,FDCHM,ALPHAX,ABOBJ1
- IF (NSIDE.EQ.0) GO TO 190
+ WRITE (IOUT,1250) FDCH,FDCHM,ALPHAX,ABOBJ1
+ IF (NSIDE.EQ.0) GO TO 190
WRITE (IOUT,1270)
DO 170 I=1,NDV,6
M1=MIN0(NDV,I+5)
@@ -203,7 +203,7 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
M1=MIN0(NDV,I+5)
180 WRITE (IOUT,1010) I,(VUB(J),J=I,M1)
190 CONTINUE
- IF (NSCAL.GE.0) GO TO 200
+ IF (NSCAL.GE.0) GO TO 200
WRITE (IOUT,1300)
WRITE (IOUT,1460) (SCAL(I),I=1,NDV)
200 CONTINUE
@@ -213,73 +213,73 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
DO 210 I=1,NCON,15
M1=MIN0(NCON,I+14)
210 WRITE (IOUT,1030) I,(ISC(J),J=I,M1)
- GO TO 230
+ GO TO 230
220 IF (NLNC.EQ.NCON) WRITE (IOUT,1040)
- IF (NLNC.EQ.0) WRITE (IOUT,1050)
+ IF (NLNC.EQ.0) WRITE (IOUT,1050)
230 CONTINUE
WRITE (IOUT,1440) OBJ
WRITE (IOUT,1450)
DO 240 I=1,NDV
- X1=1.
+ X1=1.
IF (NSCAL.NE.0) X1=SCAL(I)
-240 G1(I)=X(I)*X1
+240 G1(I)=X(I)*X1
DO 250 I=1,NDV,6
M1=MIN0(NDV,I+5)
-250 WRITE (IOUT,1010) I,(G1(J),J=I,M1)
+250 WRITE (IOUT,1010) I,(G1(J),J=I,M1)
IF (NCON.EQ.0) GO TO 270
WRITE (IOUT,1470)
- DO 260 I=1,NCON,6
- M1=MIN0(NCON,I+5)
+ DO 260 I=1,NCON,6
+ M1=MIN0(NCON,I+5)
260 WRITE (IOUT,1010) I,(G(J),J=I,M1)
270 CONTINUE
- IF (IPRINT.GT.1) WRITE (IOUT,1360)
+ IF (IPRINT.GT.1) WRITE (IOUT,1360)
C ------------------------------------------------------------------
C ******************** BEGIN MINIMIZATION ************************
C ------------------------------------------------------------------
280 CONTINUE
- ITER=ITER+1
- IF (ABOBJ1.LT..0001) ABOBJ1=.0001
- IF (ABOBJ1.GT..2) ABOBJ1=.2
- IF (ALPHAX.GT.1.) ALPHAX=1.
- IF (ALPHAX.LT..001) ALPHAX=.001
-C
-C THE FOLLOWING TWO LINES OF CODE WERE COMMENTED OUT ON 3/5/81
-C
-C NFEAS=NFEAS+1
+ ITER=ITER+1
+ IF (ABOBJ1.LT..0001) ABOBJ1=.0001
+ IF (ABOBJ1.GT..2) ABOBJ1=.2
+ IF (ALPHAX.GT.1.) ALPHAX=1.
+ IF (ALPHAX.LT..001) ALPHAX=.001
+C
+C THE FOLLOWING TWO LINES OF CODE WERE COMMENTED OUT ON 3/5/81
+C
+C NFEAS=NFEAS+1
C IF (NFEAS.GT.10) GO TO 810
IF (IPRINT.GT.2) WRITE (IOUT,1310) ITER
IF (IPRINT.GT.3.AND.NCON.GT.0) WRITE (IOUT,1320) CT,CTL,PHI
- CTA=ABS(CT)
- IF (NCOBJ.EQ.0) GO TO 340
+ CTA=ABS(CT)
+ IF (NCOBJ.EQ.0) GO TO 340
C ------------------------------------------------------------------
C NO MOVE ON LAST ITERATION. DELETE CONSTRAINTS THAT ARE NO
C LONGER ACTIVE.
C ------------------------------------------------------------------
NNAC=NAC
- DO 290 I=1,NNAC
+ DO 290 I=1,NNAC
IF (IC(I).GT.NCON) NAC=NAC-1
290 CONTINUE
- IF (NAC.LE.0) GO TO 420
+ IF (NAC.LE.0) GO TO 420
NNAC=NAC
- DO 330 I=1,NNAC
-300 NIC=IC(I)
+ DO 330 I=1,NNAC
+300 NIC=IC(I)
CT1=CT
IF (ISC(NIC).GT.0) CT1=CTL
IF (G(NIC).GT.CT1) GO TO 330
- NAC=NAC-1
- IF (I.GT.NAC) GO TO 420
+ NAC=NAC-1
+ IF (I.GT.NAC) GO TO 420
DO 320 K=I,NAC
II=K+1
- DO 310 J=1,NDV2
+ DO 310 J=1,NDV2
310 A(J,K)=A(J,II)
320 IC(K)=IC(II)
- GO TO 300
+ GO TO 300
330 CONTINUE
- GO TO 420
+ GO TO 420
340 CONTINUE
- IF (MSCAL.LT.NSCAL.OR.NSCAL.EQ.0) GO TO 360
+ IF (MSCAL.LT.NSCAL.OR.NSCAL.EQ.0) GO TO 360
IF (NSCAL.LT.0.AND.KCOUNT.LT.ICNDIR) GO TO 360
- MSCAL=0
+ MSCAL=0
KCOUNT=0
C ------------------------------------------------------------------
C SCALE VARIABLES
@@ -293,7 +293,7 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
SCAL(I)=SI
SI=1./SI
X(I)=XI*SI
- IF (NSIDE.EQ.0) GO TO 350
+ IF (NSIDE.EQ.0) GO TO 350
VLB(I)=SIB*SI*VLB(I)
VUB(I)=SIB*SI*VUB(I)
350 CONTINUE
@@ -301,23 +301,23 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
WRITE (IOUT,1330)
WRITE (IOUT,1460) (SCAL(I),I=1,NDV)
360 CONTINUE
- MSCAL=MSCAL+1
- NAC=0
+ MSCAL=MSCAL+1
+ NAC=0
C ------------------------------------------------------------------
-C OBTAIN GRADIENTS OF OBJECTIVE AND ACTIVE CONSTRAINTS
+C OBTAIN GRADIENTS OF OBJECTIVE AND ACTIVE CONSTRAINTS
C ------------------------------------------------------------------
INFO=2
- NCAL(2)=NCAL(2)+1
+ NCAL(2)=NCAL(2)+1
IF (NFDG.NE.1) GO TO 370
- IGOTO=2
- GO TO 950
+ IGOTO=2
+ GO TO 950
370 CONTINUE
- JGOTO=0
+ JGOTO=0
380 CONTINUE
CALL CNMN01 (JGOTO,X,DF,G,ISC,IC,A,G1,VLB,VUB,SCAL,C,NCAL,DX,DX1
- 1,FI,XI,III,N1,N2,N3,N4)
- IGOTO=3
- IF (JGOTO.GT.0) GO TO 950
+ 1,FI,XI,III,N1,N2,N3,N4)
+ IGOTO=3
+ IF (JGOTO.GT.0) GO TO 950
390 CONTINUE
INFO=1
IF (NAC.GE.N3) GO TO 810
@@ -325,118 +325,118 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
C ------------------------------------------------------------------
C SCALE GRADIENTS
C ------------------------------------------------------------------
-C SCALE GRADIENT OF OBJECTIVE FUNCTION.
+C SCALE GRADIENT OF OBJECTIVE FUNCTION.
DO 400 I=1,NDV
-400 DF(I)=DF(I)*SCAL(I)
+400 DF(I)=DF(I)*SCAL(I)
IF (NFDG.EQ.2.OR.NAC.EQ.0) GO TO 420
C SCALE GRADIENTS OF ACTIVE CONSTRAINTS.
DO 410 J=1,NDV
- SCJ=SCAL(J)
+ SCJ=SCAL(J)
DO 410 I=1,NAC
-410 A(J,I)=A(J,I)*SCJ
+410 A(J,I)=A(J,I)*SCJ
420 CONTINUE
- IF (IPRINT.LT.3.OR.NCON.EQ.0) GO TO 470
+ IF (IPRINT.LT.3.OR.NCON.EQ.0) GO TO 470
C ------------------------------------------------------------------
-C PRINT
+C PRINT
C ------------------------------------------------------------------
-C PRINT ACTIVE AND VIOLATED CONSTRAINT NUMBERS.
+C PRINT ACTIVE AND VIOLATED CONSTRAINT NUMBERS.
M1=0
- M2=N3
- IF (NAC.EQ.0) GO TO 450
+ M2=N3
+ IF (NAC.EQ.0) GO TO 450
DO 440 I=1,NAC
- J=IC(I)
+ J=IC(I)
IF (J.GT.NCON) GO TO 440
- GI=G(J)
- C1=CTAM
+ GI=G(J)
+ C1=CTAM
IF (ISC(J).GT.0) C1=CTBM
GI=GI-C1
- IF (GI.GT.0.) GO TO 430
+ IF (GI.GT.0.) GO TO 430
C ACTIVE CONSTRAINT.
- M1=M1+1
- MS1(M1)=J
- GO TO 440
-430 M2=M2+1
+ M1=M1+1
+ MS1(M1)=J
+ GO TO 440
+430 M2=M2+1
C VIOLATED CONSTRAINT.
- MS1(M2)=J
+ MS1(M2)=J
440 CONTINUE
450 M3=M2-N3
- WRITE (IOUT,1060) M1
+ WRITE (IOUT,1060) M1
IF (M1.EQ.0) GO TO 460
WRITE (IOUT,1070)
WRITE (IOUT,1480) (MS1(I),I=1,M1)
-460 WRITE (IOUT,1080) M3
+460 WRITE (IOUT,1080) M3
IF (M3.EQ.0) GO TO 470
WRITE (IOUT,1070)
- M3=N3+1
- WRITE (IOUT,1480) (MS1(I),I=M3,M2)
+ M3=N3+1
+ WRITE (IOUT,1480) (MS1(I),I=M3,M2)
470 CONTINUE
C ------------------------------------------------------------------
-C CALCULATE GRADIENTS OF ACTIVE SIDE CONSTRAINTS
+C CALCULATE GRADIENTS OF ACTIVE SIDE CONSTRAINTS
C ------------------------------------------------------------------
- IF (NSIDE.EQ.0) GO TO 530
- MCN1=NCON
+ IF (NSIDE.EQ.0) GO TO 530
+ MCN1=NCON
M1=0
DO 510 I=1,NDV
C LOWER BOUND.
- XI=X(I)
+ XI=X(I)
XID=VLB(I)
X12=ABS(XID)
- IF (X12.LT.1.) X12=1.
- GI=(XID-XI)/X12
+ IF (X12.LT.1.) X12=1.
+ GI=(XID-XI)/X12
IF (GI.LT.-1.0E-6) GO TO 490
- M1=M1+1
+ M1=M1+1
MS1(M1)=-I
- NAC=NAC+1
+ NAC=NAC+1
IF (NAC.GE.N3) GO TO 810
- MCN1=MCN1+1
+ MCN1=MCN1+1
DO 480 J=1,NDV
-480 A(J,NAC)=0.
+480 A(J,NAC)=0.
A(I,NAC)=-1.
IC(NAC)=MCN1
G(MCN1)=GI
- ISC(MCN1)=1
+ ISC(MCN1)=1
C UPPER BOUND.
490 XID=VUB(I)
X12=ABS(XID)
- IF (X12.LT.1.) X12=1.
- GI=(XI-XID)/X12
+ IF (X12.LT.1.) X12=1.
+ GI=(XI-XID)/X12
IF (GI.LT.-1.0E-6) GO TO 510
- M1=M1+1
- MS1(M1)=I
- NAC=NAC+1
+ M1=M1+1
+ MS1(M1)=I
+ NAC=NAC+1
IF (NAC.GE.N3) GO TO 810
- MCN1=MCN1+1
+ MCN1=MCN1+1
DO 500 J=1,NDV
-500 A(J,NAC)=0.
- A(I,NAC)=1.
+500 A(J,NAC)=0.
+ A(I,NAC)=1.
IC(NAC)=MCN1
G(MCN1)=GI
- ISC(MCN1)=1
+ ISC(MCN1)=1
510 CONTINUE
C ------------------------------------------------------------------
C PRINT
C ------------------------------------------------------------------
-C PRINT ACTIVE SIDE CONSTRAINT NUMBERS.
+C PRINT ACTIVE SIDE CONSTRAINT NUMBERS.
IF (IPRINT.LT.3) GO TO 530
- WRITE (IOUT,1090) M1
+ WRITE (IOUT,1090) M1
IF (M1.EQ.0) GO TO 530
WRITE (IOUT,1100)
- WRITE(6,1480) (MS1(J),J=1,M1)
+ WRITE(6,1480) (MS1(J),J=1,M1)
530 CONTINUE
-C PRINT GRADIENTS OF ACTIVE AND VIOLATED CONSTRAINTS.
+C PRINT GRADIENTS OF ACTIVE AND VIOLATED CONSTRAINTS.
IF (IPRINT.LT.4) GO TO 570
WRITE (IOUT,1340)
DO 540 I=1,NDV,6
M1=MIN0(NDV,I+5)
-540 WRITE (IOUT,1010) I,(DF(J),J=I,M1)
- IF (NAC.EQ.0) GO TO 570
+540 WRITE (IOUT,1010) I,(DF(J),J=I,M1)
+ IF (NAC.EQ.0) GO TO 570
WRITE (IOUT,1350)
DO 560 I=1,NAC
M1=IC(I)
M2=M1-NCON
M3=0
- IF (M2.GT.0) M3=IABS(MS1(M2))
- IF (M2.LE.0) WRITE (IOUT,990) M1
+ IF (M2.GT.0) M3=IABS(MS1(M2))
+ IF (M2.LE.0) WRITE (IOUT,990) M1
IF (M2.GT.0) WRITE (IOUT,1000) M3
DO 550 K=1,NDV,6
M1=MIN0(NDV,K+5)
@@ -446,107 +446,107 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
C ------------------------------------------------------------------
C ****************** DETERMINE SEARCH DIRECTION *******************
C ------------------------------------------------------------------
- ALP=1.0E+20
- IF (NAC.GT.0) GO TO 580
+ ALP=1.0E+20
+ IF (NAC.GT.0) GO TO 580
C ------------------------------------------------------------------
-C UNCONSTRAINED FUNCTION
+C UNCONSTRAINED FUNCTION
C ------------------------------------------------------------------
C FIND DIRECTION OF STEEPEST DESCENT OR CONJUGATE DIRECTION.
-C
-C S. N. 575 ADDED ON 2/25/81
-C
- 575 NVC=0
- NFEAS=0
- KCOUNT=KCOUNT+1
-C IF KCOUNT.GT.ICNDIR RESTART CONJUGATE DIRECTION ALGORITHM.
- IF (KCOUNT.GT.ICNDIR.OR.IOBJ.EQ.2) KCOUNT=1
- IF (KCOUNT.EQ.1) JDIR=0
-C IF JDIR = 0 FIND DIRECTION OF STEEPEST DESCENT.
- CALL CNMN02 (JDIR,SLOPE,DFTDF1,DF,S,N1)
- GO TO 630
+C
+C S. N. 575 ADDED ON 2/25/81
+C
+ 575 NVC=0
+ NFEAS=0
+ KCOUNT=KCOUNT+1
+C IF KCOUNT.GT.ICNDIR RESTART CONJUGATE DIRECTION ALGORITHM.
+ IF (KCOUNT.GT.ICNDIR.OR.IOBJ.EQ.2) KCOUNT=1
+ IF (KCOUNT.EQ.1) JDIR=0
+C IF JDIR = 0 FIND DIRECTION OF STEEPEST DESCENT.
+ CALL CNMN02 (JDIR,SLOPE,DFTDF1,DF,S,N1)
+ GO TO 630
580 CONTINUE
C ------------------------------------------------------------------
-C CONSTRAINED FUNCTION
+C CONSTRAINED FUNCTION
C ------------------------------------------------------------------
-C FIND USABLE-FEASIBLE DIRECTION.
+C FIND USABLE-FEASIBLE DIRECTION.
KCOUNT=0
JDIR=0
- PHI=10.*PHI
- IF (PHI.GT.1000.) PHI=1000.
-C
-C THE FOLLOWING LINE OF CODE WAS COMMENTED OUT ON 3/5/81
-C
+ PHI=10.*PHI
+ IF (PHI.GT.1000.) PHI=1000.
+C
+C THE FOLLOWING LINE OF CODE WAS COMMENTED OUT ON 3/5/81
+C
C IF (NFEAS.EQ.1) PHI=5.
-C CALCULATE DIRECTION, S.
+C CALCULATE DIRECTION, S.
CALL CNMN05 (G,DF,A,S,B,C,SLOPE,PHI,ISC,IC,MS1,NVC,N1,N2,N3,N4,N5)
-C
+C
C THE FOLLOWING LINE WAS ADDED ON 2/25/81
-C
+C
IF(NAC.EQ.0) GO TO 575
-C
+C
C THE FOLLOWING FIVE LINES WERE COMMENTED OUT ON 3/5/81
C REASON : THEY WERE NOT IN G. VANDERPLAATS LISTING
-C
-C IF THIS DESIGN IS FEASIBLE AND LAST ITERATION WAS INFEASIBLE,
-C SET ABOBJ1=.05 (5 PERCENT).
-C IF (NVC.EQ.0.AND.NFEAS.GT.1) ABOBJ1=.05
-C IF (NVC.EQ.0) NFEAS=0
+C
+C IF THIS DESIGN IS FEASIBLE AND LAST ITERATION WAS INFEASIBLE,
+C SET ABOBJ1=.05 (5 PERCENT).
+C IF (NVC.EQ.0.AND.NFEAS.GT.1) ABOBJ1=.05
+C IF (NVC.EQ.0) NFEAS=0
IF (IPRINT.LT.3) GO TO 600
WRITE (IOUT,1370)
DO 590 I=1,NAC,6
M1=MIN0(NAC,I+5)
-590 WRITE (IOUT,1010) I,(A(NDV1,J),J=I,M1)
+590 WRITE (IOUT,1010) I,(A(NDV1,J),J=I,M1)
WRITE (IOUT,1210) S(NDV1)
600 CONTINUE
C ------------------------------------------------------------------
C ****************** ONE-DIMENSIONAL SEARCH ************************
C ------------------------------------------------------------------
- IF (S(NDV1).LT.1.0E-6.AND.NVC.EQ.0) GO TO 710
+ IF (S(NDV1).LT.1.0E-6.AND.NVC.EQ.0) GO TO 710
C ------------------------------------------------------------------
C FIND ALPHA TO OBTAIN A FEASIBLE DESIGN
C ------------------------------------------------------------------
- IF (NVC.EQ.0) GO TO 630
- ALP=-1.
+ IF (NVC.EQ.0) GO TO 630
+ ALP=-1.
DO 620 I=1,NAC
- NCI=IC(I)
- C1=G(NCI)
+ NCI=IC(I)
+ C1=G(NCI)
CTC=CTAM
- IF (ISC(NCI).GT.0) CTC=CTBM
+ IF (ISC(NCI).GT.0) CTC=CTBM
IF (C1.LE.CTC) GO TO 620
- ALP1=0.
+ ALP1=0.
DO 610 J=1,NDV
-610 ALP1=ALP1+S(J)*A(J,I)
- ALP1=ALP1*A(NDV2,I)
- IF (ABS(ALP1).LT.1.0E-20) GO TO 620
- ALP1=-C1/ALP1
- IF (ALP1.GT.ALP) ALP=ALP1
+610 ALP1=ALP1+S(J)*A(J,I)
+ ALP1=ALP1*A(NDV2,I)
+ IF (ABS(ALP1).LT.1.0E-20) GO TO 620
+ ALP1=-C1/ALP1
+ IF (ALP1.GT.ALP) ALP=ALP1
620 CONTINUE
630 CONTINUE
C ------------------------------------------------------------------
C LIMIT CHANCE TO ABOBJ1*OBJ
C ------------------------------------------------------------------
ALP1=1.0E+20
- SI=ABS(OBJ)
- IF (SI.LT..01) SI=.01
- IF (ABS(SLOPE).GT.1.0E-20) ALP1=ABOBJ1*SI/SLOPE
+ SI=ABS(OBJ)
+ IF (SI.LT..01) SI=.01
+ IF (ABS(SLOPE).GT.1.0E-20) ALP1=ABOBJ1*SI/SLOPE
ALP1=ABS(ALP1)
- IF (NVC.GT.0) ALP1=10.*ALP1
- IF (ALP1.LT.ALP) ALP=ALP1
+ IF (NVC.GT.0) ALP1=10.*ALP1
+ IF (ALP1.LT.ALP) ALP=ALP1
C ------------------------------------------------------------------
C LIMIT CHANGE IN VARIABLE TO ALPHAX
C ------------------------------------------------------------------
- ALP11=1.0E+20
+ ALP11=1.0E+20
DO 640 I=1,NDV
SI=ABS(S(I))
XI=ABS(X(I))
- IF (SI.LT.1.0E-10.OR.XI.LT.0.1) GO TO 640
- ALP1=ALPHAX*XI/SI
- IF (ALP1.LT.ALP11) ALP11=ALP1
+ IF (SI.LT.1.0E-10.OR.XI.LT.0.1) GO TO 640
+ ALP1=ALPHAX*XI/SI
+ IF (ALP1.LT.ALP11) ALP11=ALP1
640 CONTINUE
- IF (NVC.GT.0) ALP11=10.*ALP11
- IF (ALP11.LT.ALP) ALP=ALP11
- IF (ALP.GT.1.0E+20) ALP=1.0E+20
- IF (ALP.LE.1.0E-20) ALP=1.0E-20
+ IF (NVC.GT.0) ALP11=10.*ALP11
+ IF (ALP11.LT.ALP) ALP=ALP11
+ IF (ALP.GT.1.0E+20) ALP=1.0E+20
+ IF (ALP.LE.1.0E-20) ALP=1.0E-20
IF (IPRINT.LT.3) GO TO 660
WRITE (IOUT,1380)
DO 650 I=1,NDV,6
@@ -558,27 +558,27 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
C ------------------------------------------------------------------
C DO ONE-DIMENSIONAL SEARCH FOR UNCONSTRAINED FUNCTION
C ------------------------------------------------------------------
- JGOTO=0
+ JGOTO=0
670 CONTINUE
CALL CNMN03 (X,S,SLOPE,ALP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,APP,N1
- 1,NCAL,KOUNT,JGOTO)
- IGOTO=4
- IF (JGOTO.GT.0) GO TO 950
+ 1,NCAL,KOUNT,JGOTO)
+ IGOTO=4
+ IF (JGOTO.GT.0) GO TO 950
JDIR=1
-C PROCEED TO CONVERGENCE CHECK.
- GO TO 700
+C PROCEED TO CONVERGENCE CHECK.
+ GO TO 700
C ------------------------------------------------------------------
-C SOLVE ONE-DIMENSIONAL SEARCH PROBLEM FOR CONSTRAINED FUNCTION
+C SOLVE ONE-DIMENSIONAL SEARCH PROBLEM FOR CONSTRAINED FUNCTION
C ------------------------------------------------------------------
680 CONTINUE
- JGOTO=0
+ JGOTO=0
690 CONTINUE
CALL CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP,A2,A3
1,A4,F1,F2,F3,CV1,CV2,CV3,CV4,ALPCA,ALPFES,ALPLN,ALPMIN,ALPNC,ALPSA
2V,ALPSID,ALPTOT,ISC,N1,N2,NCAL,NVC,ICOUNT,IGOOD1,IGOOD2,IGOOD3,IGO
- 3OD4,IBEST,III,NLNC,JGOTO)
- IGOTO=5
- IF (JGOTO.GT.0) GO TO 950
+ 3OD4,IBEST,III,NLNC,JGOTO)
+ IGOTO=5
+ IF (JGOTO.GT.0) GO TO 950
IF (NAC.EQ.0) JDIR=1
C ------------------------------------------------------------------
C ******************* UPDATE ALPHAX **************************
@@ -586,84 +586,84 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
700 CONTINUE
710 CONTINUE
IF (ALP.GT.1.0E+19) ALP=0.
-C UPDATE ALPHAX TO BE AVERAGE OF MAXIMUM CHANGE IN X(I)
-C AND ALHPAX.
+C UPDATE ALPHAX TO BE AVERAGE OF MAXIMUM CHANGE IN X(I)
+C AND ALHPAX.
ALP11=0.
DO 720 I=1,NDV
SI=ABS(S(I))
XI=ABS(X(I))
IF (XI.LT.1.0E-10) GO TO 720
ALP1=ALP*SI/XI
- IF (ALP1.GT.ALP11) ALP11=ALP1
+ IF (ALP1.GT.ALP11) ALP11=ALP1
720 CONTINUE
- ALP11=.5*(ALP11+ALPHAX)
- ALP12=5.*ALPHAX
- IF (ALP11.GT.ALP12) ALP11=ALP12
+ ALP11=.5*(ALP11+ALPHAX)
+ ALP12=5.*ALPHAX
+ IF (ALP11.GT.ALP12) ALP11=ALP12
ALPHAX=ALP11
- NCOBJ=NCOBJ+1
-C ABSOLUTE CHANGE IN OBJECTIVE.
- OBJD=OBJ1-OBJ
+ NCOBJ=NCOBJ+1
+C ABSOLUTE CHANGE IN OBJECTIVE.
+ OBJD=OBJ1-OBJ
OBJB=ABS(OBJD)
IF (OBJB.LT.1.0E-10) OBJB=0.
- IF (NAC.EQ.0.OR.OBJB.GT.0.) NCOBJ=0
- IF (NCOBJ.GT.1) NCOBJ=0
+ IF (NAC.EQ.0.OR.OBJB.GT.0.) NCOBJ=0
+ IF (NCOBJ.GT.1) NCOBJ=0
C ------------------------------------------------------------------
C PRINT
C ------------------------------------------------------------------
-C PRINT MOVE PARAMETER, NEW X-VECTOR AND CONSTRAINTS.
+C PRINT MOVE PARAMETER, NEW X-VECTOR AND CONSTRAINTS.
IF (IPRINT.LT.3) GO TO 730
WRITE (IOUT,1390) ALP
730 IF (IPRINT.LT.2) GO TO 800
- IF (OBJB.GT.0.) GO TO 740
+ IF (OBJB.GT.0.) GO TO 740
IF (IPRINT.EQ.2) WRITE (IOUT,1400) ITER,OBJ
- IF (IPRINT.GT.2) WRITE (IOUT,1410) OBJ
- GO TO 760
+ IF (IPRINT.GT.2) WRITE (IOUT,1410) OBJ
+ GO TO 760
740 IF (IPRINT.EQ.2) GO TO 750
WRITE (IOUT,1420) OBJ
- GO TO 760
-750 WRITE (IOUT,1430) ITER,OBJ
+ GO TO 760
+750 WRITE (IOUT,1430) ITER,OBJ
760 WRITE (IOUT,1450)
DO 770 I=1,NDV
FF1=1.
- IF (NSCAL.NE.0) FF1=SCAL(I)
+ IF (NSCAL.NE.0) FF1=SCAL(I)
770 G1(I)=FF1*X(I)
DO 780 I=1,NDV,6
M1=MIN0(NDV,I+5)
-780 WRITE (IOUT,1010) I,(G1(J),J=I,M1)
+780 WRITE (IOUT,1010) I,(G1(J),J=I,M1)
IF (NCON.EQ.0) GO TO 800
WRITE (IOUT,1470)
- DO 790 I=1,NCON,6
- M1=MIN0(NCON,I+5)
+ DO 790 I=1,NCON,6
+ M1=MIN0(NCON,I+5)
790 WRITE (IOUT,1010) I,(G(J),J=I,M1)
800 CONTINUE
-C
-C THE FOLLOWING CODE WAS ADDED ON 3/5/81
-C
+C
+C THE FOLLOWING CODE WAS ADDED ON 3/5/81
+C
C IT HAD NOT BEEN REPORTED AS A FIX TO MAOB
-C BUT WAS SENT TO JEFF STROUD A YEAR AGO
+C BUT WAS SENT TO JEFF STROUD A YEAR AGO
C SEE OTHER COMMENTS IN CONMIN SUBROUTINE FOR DELETIONS OF CODE
-C ON 3/5/81 PERTAINING TO THIS FIX
-C
-C
-C CHECK FEASIBILITY
-C
+C ON 3/5/81 PERTAINING TO THIS FIX
+C
+C
+C CHECK FEASIBILITY
+C
IF(NCON.LE.0) GO TO 808
NFEASCT=10
- DO 804 I=1,NCON
- C1=CTAM
- IF(ISC(I).GT.0) C1=CTBM
+ DO 804 I=1,NCON
+ C1=CTAM
+ IF(ISC(I).GT.0) C1=CTBM
IF(G(I).LE.C1) GO TO 804
- NFEAS=NFEAS+1
- GO TO 806
+ NFEAS=NFEAS+1
+ GO TO 806
804 CONTINUE
- IF(NFEAS.GT.0) ABOBJ1=.05
- NFEAS=0
+ IF(NFEAS.GT.0) ABOBJ1=.05
+ NFEAS=0
PHI=5.
- 806 IF(NFEAS.GE.NFEASCT) GO TO 810
+ 806 IF(NFEAS.GE.NFEASCT) GO TO 810
808 CONTINUE
-C
+C
C END OF INSERTED FIX
-C
+C
C ------------------------------------------------------------------
C CHECK CONVERGENCE
C ------------------------------------------------------------------
@@ -673,44 +673,44 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
C ABSOLUTE CHANGE IN OBJECTIVE
C ------------------------------------------------------------------
OBJB=ABS(OBJD)
- KOBJ=KOBJ+1
+ KOBJ=KOBJ+1
IF (OBJB.GE.DABFUN.OR.NFEAS.GT.0) KOBJ=0
C ------------------------------------------------------------------
C RELATIVE CHANGE IN OBJECTIVE
C ------------------------------------------------------------------
- IF (ABS(OBJ1).GT.1.0E-10) OBJD=OBJD/ABS(OBJ1)
+ IF (ABS(OBJ1).GT.1.0E-10) OBJD=OBJD/ABS(OBJ1)
ABOBJ1=.5*(ABS(ABOBJ)+ABS(OBJD))
- ABOBJ=ABS(OBJD)
- IOBJ=IOBJ+1
+ ABOBJ=ABS(OBJD)
+ IOBJ=IOBJ+1
IF (NVC.GT.0.OR.OBJD.GE.DELFUN) IOBJ=0
- IF (IOBJ.GE.ITRM.OR.KOBJ.GE.ITRM) GO TO 810
+ IF (IOBJ.GE.ITRM.OR.KOBJ.GE.ITRM) GO TO 810
OBJ1=OBJ
C ------------------------------------------------------------------
C REDUCE CT IF OBJECTIVE FUNCTION IS CHANGING SLOWLY
C ------------------------------------------------------------------
IF (IOBJ.LT.1.OR.NAC.EQ.0) GO TO 280
- CT=DCT*CT
+ CT=DCT*CT
CTL=CTL*DCTL
- IF (ABS(CT).LT.CTMIN) CT=-CTMIN
- IF (ABS(CTL).LT.CTLMIN) CTL=-CTLMIN
- GO TO 280
+ IF (ABS(CT).LT.CTMIN) CT=-CTMIN
+ IF (ABS(CTL).LT.CTLMIN) CTL=-CTLMIN
+ GO TO 280
810 CONTINUE
- IF (NAC.GE.N3) WRITE (IOUT,1490)
+ IF (NAC.GE.N3) WRITE (IOUT,1490)
C ------------------------------------------------------------------
C **************** FINAL FUNCTION INFORMATION ********************
C ------------------------------------------------------------------
- IF (NSCAL.EQ.0) GO TO 830
+ IF (NSCAL.EQ.0) GO TO 830
C UN-SCALE THE DESIGN VARIABLES.
DO 820 I=1,NDV
XI=SCAL(I)
- IF (NSIDE.EQ.0) GO TO 820
+ IF (NSIDE.EQ.0) GO TO 820
VLB(I)=XI*VLB(I)
VUB(I)=XI*VUB(I)
820 X(I)=XI*X(I)
C ------------------------------------------------------------------
-C PRINT FINAL RESULTS
+C PRINT FINAL RESULTS
C ------------------------------------------------------------------
-830 IF (IPRINT.EQ.0.OR.NAC.GE.N3) GO TO 940
+830 IF (IPRINT.EQ.0.OR.NAC.GE.N3) GO TO 940
WRITE (IOUT,1500)
WRITE (IOUT,1420) OBJ
WRITE (IOUT,1450)
@@ -719,124 +719,124 @@ SUBROUTINE CNMN00 (X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,C,ISC,IC,MS1,N1
840 WRITE (IOUT,1010) I,(X(J),J=I,M1)
IF (NCON.EQ.0) GO TO 900
WRITE (IOUT,1470)
- DO 850 I=1,NCON,6
- M1=MIN0(NCON,I+5)
+ DO 850 I=1,NCON,6
+ M1=MIN0(NCON,I+5)
850 WRITE (IOUT,1010) I,(G(J),J=I,M1)
-C DETERMINE WHICH CONSTRAINTS ARE ACTIVE AND PRINT.
- NAC=0
- NVC=0
- DO 870 I=1,NCON
+C DETERMINE WHICH CONSTRAINTS ARE ACTIVE AND PRINT.
+ NAC=0
+ NVC=0
+ DO 870 I=1,NCON
CTA=CTAM
- IF (ISC(I).GT.0) CTA=CTBM
- GI=G(I)
+ IF (ISC(I).GT.0) CTA=CTBM
+ GI=G(I)
IF (GI.GT.CTA) GO TO 860
- IF (GI.LT.CT.AND.ISC(I).EQ.0) GO TO 870
+ IF (GI.LT.CT.AND.ISC(I).EQ.0) GO TO 870
IF (GI.LT.CTL.AND.ISC(I).GT.0) GO TO 870
- NAC=NAC+1
- IC(NAC)=I
- GO TO 870
-860 NVC=NVC+1
+ NAC=NAC+1
+ IC(NAC)=I
+ GO TO 870
+860 NVC=NVC+1
MS1(NVC)=I
870 CONTINUE
WRITE (IOUT,1060) NAC
- IF (NAC.EQ.0) GO TO 880
+ IF (NAC.EQ.0) GO TO 880
WRITE (IOUT,1070)
WRITE (IOUT,1480) (IC(J),J=1,NAC)
880 WRITE (IOUT,1080) NVC
- IF (NVC.EQ.0) GO TO 890
+ IF (NVC.EQ.0) GO TO 890
WRITE (IOUT,1070)
- WRITE (IOUT,1480) (MS1(J),J=1,NVC)
+ WRITE (IOUT,1480) (MS1(J),J=1,NVC)
890 CONTINUE
900 CONTINUE
- IF (NSIDE.EQ.0) GO TO 930
+ IF (NSIDE.EQ.0) GO TO 930
C DETERMINE WHICH SIDE CONSTRAINTS ARE ACTIVE AND PRINT.
- NAC=0
+ NAC=0
DO 920 I=1,NDV
- XI=X(I)
+ XI=X(I)
XID=VLB(I)
X12=ABS(XID)
- IF (X12.LT.1.) X12=1.
- GI=(XID-XI)/X12
+ IF (X12.LT.1.) X12=1.
+ GI=(XID-XI)/X12
IF (GI.LT.-1.0E-6) GO TO 910
- NAC=NAC+1
- MS1(NAC)=-I
+ NAC=NAC+1
+ MS1(NAC)=-I
910 XID=VUB(I)
X12=ABS(XID)
- IF (X12.LT.1.) X12=1.
- GI=(XI-XID)/X12
+ IF (X12.LT.1.) X12=1.
+ GI=(XI-XID)/X12
IF (GI.LT.-1.0E-6) GO TO 920
- NAC=NAC+1
+ NAC=NAC+1
MS1(NAC)=I
920 CONTINUE
WRITE (IOUT,1090) NAC
- IF (NAC.EQ.0) GO TO 930
+ IF (NAC.EQ.0) GO TO 930
WRITE (IOUT,1100)
- WRITE (IOUT,1480) (MS1(J),J=1,NAC)
+ WRITE (IOUT,1480) (MS1(J),J=1,NAC)
930 CONTINUE
WRITE (IOUT,1150)
- IF (ITER.GE.ITMAX) WRITE (IOUT,1160)
- IF (NFEAS.GE.NFEASCT) WRITE (IOUT,1170)
- IF (IOBJ.GE.ITRM) WRITE (IOUT,1180) ITRM
- IF (KOBJ.GE.ITRM) WRITE (IOUT,1190) ITRM
- WRITE (IOUT,1200) ITER
+ IF (ITER.GE.ITMAX) WRITE (IOUT,1160)
+ IF (NFEAS.GE.NFEASCT) WRITE (IOUT,1170)
+ IF (IOBJ.GE.ITRM) WRITE (IOUT,1180) ITRM
+ IF (KOBJ.GE.ITRM) WRITE (IOUT,1190) ITRM
+ WRITE (IOUT,1200) ITER
WRITE (IOUT,1510) NCAL(1)
- IF (NCON.GT.0) WRITE (IOUT,1520) NCAL(1)
- IF (NFDG.NE.0) WRITE (IOUT,1530) NCAL(2)
- IF (NCON.GT.0.AND.NFDG.EQ.1) WRITE (IOUT,1540) NCAL(2)
+ IF (NCON.GT.0) WRITE (IOUT,1520) NCAL(1)
+ IF (NFDG.NE.0) WRITE (IOUT,1530) NCAL(2)
+ IF (NCON.GT.0.AND.NFDG.EQ.1) WRITE (IOUT,1540) NCAL(2)
C ------------------------------------------------------------------
-C RE-SET BASIC PARAMETERS TO INPUT VALUES
+C RE-SET BASIC PARAMETERS TO INPUT VALUES
C ------------------------------------------------------------------
-940 ITRM=IDM1
+940 ITRM=IDM1
ITMAX=IDM2
- ICNDIR=IDM3
+ ICNDIR=IDM3
DELFUN=DM1
DABFUN=DM2
CT=DM3
- CTMIN=DM4
- CTL=DM5
+ CTMIN=DM4
+ CTL=DM5
CTLMIN=DM6
- THETA=DM7
- PHI=DM8
+ THETA=DM7
+ PHI=DM8
FDCH=DM9
FDCHM=DM10
- ABOBJ1=DM11
- ALPHAX=DM12
- IGOTO=0
+ ABOBJ1=DM11
+ ALPHAX=DM12
+ IGOTO=0
950 CONTINUE
IF (NSCAL.EQ.0.OR.IGOTO.EQ.0) RETURN
-C UN-SCALE VARIABLES.
+C UN-SCALE VARIABLES.
DO 960 I=1,NDV
- C(I)=X(I)
-960 X(I)=X(I)*SCAL(I)
+ C(I)=X(I)
+960 X(I)=X(I)*SCAL(I)
RETURN
C ------------------------------------------------------------------
C FORMATS
C ------------------------------------------------------------------
-C
-C
+C
+C
970 FORMAT (///5X,72HA COMPLETELY UNCONSTRAINED FUNCTION WITH A LINEAR
1 OBJECTIVE IS SPECIFIED//10X,8HLINOBJ =,I5/10X,8HNCON =,I5/10X,8
2HNSIDE =,I5//5X,35HCONTROL RETURNED TO CALLING PROGRAM)
980 FORMAT (///5X,56HCONMIN HAS ACHIEVED A SOLUTION OF OBJ LESS THAN -
- 11.0E+40/5X,32HSOLUTION APPEARS TO BE UNBOUNDED/5X,26HOPTIMIZATION
+ 11.0E+40/5X,32HSOLUTION APPEARS TO BE UNBOUNDED/5X,26HOPTIMIZATION
2IS TERMINATED)
-990 FORMAT (5X,17HCONSTRAINT NUMBER,I5)
-1000 FORMAT (5X,27HSIDE CONSTRAINT ON VARIABLE,I5)
+990 FORMAT (5X,17HCONSTRAINT NUMBER,I5)
+1000 FORMAT (5X,27HSIDE CONSTRAINT ON VARIABLE,I5)
1010 FORMAT (3X,I5,1H),2X,6E13.5)
-1020 FORMAT (/5X,35HLINEAR CONSTRAINT IDENTIFIERS (ISC)/5X,36HNON-ZERO
+1020 FORMAT (/5X,35HLINEAR CONSTRAINT IDENTIFIERS (ISC)/5X,36HNON-ZERO
1INDICATES LINEAR CONSTRAINT)
1030 FORMAT (3X,I5,1H),2X,15I5)
1040 FORMAT (/5X,26HALL CONSTRAINTS ARE LINEAR)
1050 FORMAT (/5X,30HALL CONSTRAINTS ARE NON-LINEAR)
1060 FORMAT (/5X,9HTHERE ARE,I5,19H ACTIVE CONSTRAINTS)
-1070 FORMAT (5X,22HCONSTRAINT NUMBERS ARE)
+1070 FORMAT (5X,22HCONSTRAINT NUMBERS ARE)
1080 FORMAT (/5X,9HTHERE ARE,I5,21H VIOLATED CONSTRAINTS)
-1090 FORMAT (/5X,9HTHERE ARE,I5,24H ACTIVE SIDE CONSTRAINTS)
+1090 FORMAT (/5X,9HTHERE ARE,I5,24H ACTIVE SIDE CONSTRAINTS)
1100 FORMAT (5X,43HDECISION VARIABLES AT LOWER OR UPPER BOUNDS,30H (MIN
1US INDICATES LOWER BOUND))
1110 FORMAT (/5X,22HONE-DIMENSIONAL SEARCH/5X,15HINITIAL SLOPE =,E12.4,
- 12X,16HPROPOSED ALPHA =,E12.4)
-1120 FORMAT (///5X,35H* * CONMIN DETECTS VLB(I).GT.VUB(I)/5X,57HFIX IS
+ 12X,16HPROPOSED ALPHA =,E12.4)
+1120 FORMAT (///5X,35H* * CONMIN DETECTS VLB(I).GT.VUB(I)/5X,57HFIX IS
1SET X(I)=VLB(I)=VUB(I) = .5*(VLB(I)+VUB(I) FOR I =,I5)
1130 FORMAT (///5X,41H* * CONMIN DETECTS INITIAL X(I).LT.VLB(I)/5X,6HX(
1I) =,E12.4,2X,8HVLB(I) =,E12.4/5X,35HX(I) IS SET EQUAL TO VLB(I) F
@@ -844,20 +844,20 @@ 970 FORMAT (///5X,72HA COMPLETELY UNCONSTRAINED FUNCTION WITH A LINEAR
1140 FORMAT (///5X,41H* * CONMIN DETECTS INITIAL X(I).GT.VUB(I)/5X,6HX(
1I) =,E12.4,2X,8HVUB(I) =,E12.4/5X,35HX(I) IS SET EQUAL TO VUB(I) F
2OR I =,I5)
-1150 FORMAT (/5X,21HTERMINATION CRITERION)
-1160 FORMAT (10X,17HITER EQUALS ITMAX)
-1170 FORMAT (10X,'NFEASCT CONSECUTIVE ITERATIONS FAILED TO PRODUCE A
+1150 FORMAT (/5X,21HTERMINATION CRITERION)
+1160 FORMAT (10X,17HITER EQUALS ITMAX)
+1170 FORMAT (10X,'NFEASCT CONSECUTIVE ITERATIONS FAILED TO PRODUCE A
1FEASIBLE DESIGN')
-1180 FORMAT (10X,43HABS(1-OBJ(I-1)/OBJ(I)) LESS THAN DELFUN FOR,I3,11H
- 1ITERATIONS)
-1190 FORMAT (10X,43HABS(OBJ(I)-OBJ(I-1)) LESS THAN DABFUN FOR,I3,11H
- 1ITERATIONS)
-1200 FORMAT (/5X,22HNUMBER OF ITERATIONS =,I5)
+1180 FORMAT (10X,43HABS(1-OBJ(I-1)/OBJ(I)) LESS THAN DELFUN FOR,I3,11H
+ 1ITERATIONS)
+1190 FORMAT (10X,43HABS(OBJ(I)-OBJ(I-1)) LESS THAN DABFUN FOR,I3,11H
+ 1ITERATIONS)
+1200 FORMAT (/5X,22HNUMBER OF ITERATIONS =,I5)
1210 FORMAT (/5X,28HCONSTRAINT PARAMETER, BETA =,E14.5)
-1220 FORMAT (1H1,////12X,27(2H* )/12X,1H*,51X,1H*/12X,1H*,20X,11HC O N
- 1M I N,20X,1H*/12X,1H*,51X,1H*/12X,1H*,15X,21H FORTRAN PROGRAM FOR
+1220 FORMAT (1H1,////12X,27(2H* )/12X,1H*,51X,1H*/12X,1H*,20X,11HC O N
+ 1M I N,20X,1H*/12X,1H*,51X,1H*/12X,1H*,15X,21H FORTRAN PROGRAM FOR
2,15X,1H*/12X,1H*,51X,1H*/12X,1H*,9X,33HCONSTRAINED FUNCTION MINIMI
- 3ZATION,9X,1H*/12X,1H*,51X,1H*/12X,27(2H* ))
+ 3ZATION,9X,1H*/12X,1H*,51X,1H*/12X,27(2H* ))
1230 FORMAT (////5X,33HCONSTRAINED FUNCTION MINIMIZATION//5X,18HCONTROL
1 PARAMETERS)
1240 FORMAT (/5X,60HIPRINT NDV ITMAX NCON NSIDE ICNDIR NSC
@@ -871,34 +871,34 @@ 1230 FORMAT (////5X,33HCONSTRAINED FUNCTION MINIMIZATION//5X,18HCONTROL
1280 FORMAT (/5X,40HUPPER BOUNDS ON DECISION VARIABLES (VUB))
1290 FORMAT (////5X,35HUNCONSTRAINED FUNCTION MINIMIZATION//5X,18HCONTR
1OL PARAMETERS)
-1300 FORMAT (/5X,21HSCALING VECTOR (SCAL))
+1300 FORMAT (/5X,21HSCALING VECTOR (SCAL))
1310 FORMAT (////5X,22HBEGIN ITERATION NUMBER,I5)
-1320 FORMAT (/5X,4HCT =,E14.5,5X,5HCTL =,E14.5,5X,5HPHI =,E14.5)
-1330 FORMAT (/5X,25HNEW SCALING VECTOR (SCAL))
-1340 FORMAT (/5X,15HGRADIENT OF OBJ)
+1320 FORMAT (/5X,4HCT =,E14.5,5X,5HCTL =,E14.5,5X,5HPHI =,E14.5)
+1330 FORMAT (/5X,25HNEW SCALING VECTOR (SCAL))
+1340 FORMAT (/5X,15HGRADIENT OF OBJ)
1350 FORMAT (/5X,44HGRADIENTS OF ACTIVE AND VIOLATED CONSTRAINTS)
1360 FORMAT (1H )
-1370 FORMAT (/5X,37HPUSH-OFF FACTORS, (THETA(I), I=1,NAC))
-1380 FORMAT (/5X,27HSEARCH DIRECTION (S-VECTOR))
+1370 FORMAT (/5X,37HPUSH-OFF FACTORS, (THETA(I), I=1,NAC))
+1380 FORMAT (/5X,27HSEARCH DIRECTION (S-VECTOR))
1390 FORMAT (/5X,18HCALCULATED ALPHA =,E14.5)
1400 FORMAT (////5X,6HITER =,I5,5X,5HOBJ =,E14.5,5X,16HNO CHANGE IN OBJ
- 1)
-1410 FORMAT (/5X,5HOBJ =,E15.6,5X,16HNO CHANGE ON OBJ)
+ 1)
+1410 FORMAT (/5X,5HOBJ =,E15.6,5X,16HNO CHANGE ON OBJ)
1420 FORMAT (/5X,5HOBJ =,E15.6)
1430 FORMAT (////5X,6HITER =,I5,5X,5HOBJ =,E14.5)
-1440 FORMAT (//5X,28HINITIAL FUNCTION INFORMATION//5X,5HOBJ =,E15.6)
-1450 FORMAT (/5X,29HDECISION VARIABLES (X-VECTOR))
+1440 FORMAT (//5X,28HINITIAL FUNCTION INFORMATION//5X,5HOBJ =,E15.6)
+1450 FORMAT (/5X,29HDECISION VARIABLES (X-VECTOR))
1460 FORMAT (3X,7E13.4)
1470 FORMAT (/5X,28HCONSTRAINT VALUES (G-VECTOR))
1480 FORMAT (5X,15I5)
1490 FORMAT (/5X,59HTHE NUMBER OF ACTIVE AND VIOLATED CONSTRAINTS EXCEE
- 1DS N3-1./5X,66HDIMENSIONED SIZE OF MATRICES A AND B AND VECTOR IC
+ 1DS N3-1./5X,66HDIMENSIONED SIZE OF MATRICES A AND B AND VECTOR IC
2IS INSUFFICIENT/5X,61HOPTIMIZATION TERMINATED AND CONTROL RETURNED
3 TO MAIN PROGRAM.)
-1500 FORMAT (1H1,////4X,30HFINAL OPTIMIZATION INFORMATION)
-1510 FORMAT (/5X,32HOBJECTIVE FUNCTION WAS EVALUATED,8X,I5,2X,5HTIMES)
+1500 FORMAT (1H1,////4X,30HFINAL OPTIMIZATION INFORMATION)
+1510 FORMAT (/5X,32HOBJECTIVE FUNCTION WAS EVALUATED,8X,I5,2X,5HTIMES)
1520 FORMAT (/5X,35HCONSTRAINT FUNCTIONS WERE EVALUATED,I10,2X,5HTIMES)
1530 FORMAT (/5X,36HGRADIENT OF OBJECTIVE WAS CALCULATED,I9,2X,5HTIMES)
1540 FORMAT (/5X,40HGRADIENTS OF CONSTRAINTS WERE CALCULATED,I5,2X,5HTI
1MES)
- END
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn01.f b/pyoptsparse/pyCONMIN/source/cnmn01.f
index 694c7359..389ba0d9 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn01.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn01.f
@@ -3,36 +3,36 @@ SUBROUTINE CNMN01 (JGOTO,X,DF,G,ISC,IC,A,G1,VLB,VUB,SCAL,C,NCAL,DX
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX
1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT
- 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
+ 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
DIMENSION X(N1), DF(N1), G(N2), ISC(N2), IC(N3), A(N1,N3), G1(N2),
- 1 VLB(N1), VUB(N1), SCAL(N1), NCAL(2), C(N4)
-C ROUTINE TO CALCULATE GRADIENT INFORMATION BY FINITE DIFFERENCE.
-C BY G. N. VANDERPLAATS JUNE, 1972.
-C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
+ 1 VLB(N1), VUB(N1), SCAL(N1), NCAL(2), C(N4)
+C ROUTINE TO CALCULATE GRADIENT INFORMATION BY FINITE DIFFERENCE.
+C BY G. N. VANDERPLAATS JUNE, 1972.
+C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
IF (JGOTO.EQ.1) GO TO 10
IF (JGOTO.EQ.2) GO TO 70
- INFOG=0
+ INFOG=0
INF=INFO
- NAC=0
- IF (LINOBJ.NE.0.AND.ITER.GT.1) GO TO 10
+ NAC=0
+ IF (LINOBJ.NE.0.AND.ITER.GT.1) GO TO 10
C ------------------------------------------------------------------
-C GRADIENT OF LINEAR OBJECTIVE
+C GRADIENT OF LINEAR OBJECTIVE
C ------------------------------------------------------------------
IF (NFDG.EQ.2) JGOTO=1
- IF (NFDG.EQ.2) RETURN
+ IF (NFDG.EQ.2) RETURN
10 CONTINUE
- JGOTO=0
- IF (NFDG.EQ.2.AND.NCON.EQ.0) RETURN
- IF (NCON.EQ.0) GO TO 40
+ JGOTO=0
+ IF (NFDG.EQ.2.AND.NCON.EQ.0) RETURN
+ IF (NCON.EQ.0) GO TO 40
C ------------------------------------------------------------------
C * * * DETERMINE WHICH CONSTRAINTS ARE ACTIVE OR VIOLATED * * *
C ------------------------------------------------------------------
DO 20 I=1,NCON
IF (G(I).LT.CT) GO TO 20
- IF (ISC(I).GT.0.AND.G(I).LT.CTL) GO TO 20
- NAC=NAC+1
- IF (NAC.GE.N3) RETURN
- IC(NAC)=I
+ IF (ISC(I).GT.0.AND.G(I).LT.CTL) GO TO 20
+ NAC=NAC+1
+ IF (NAC.GE.N3) RETURN
+ IC(NAC)=I
20 CONTINUE
IF (NFDG.EQ.2.AND.NAC.EQ.0) RETURN
IF ((LINOBJ.GT.0.AND.ITER.GT.1).AND.NAC.EQ.0) RETURN
@@ -42,54 +42,54 @@ SUBROUTINE CNMN01 (JGOTO,X,DF,G,ISC,IC,A,G1,VLB,VUB,SCAL,C,NCAL,DX
DO 30 I=1,NCON
30 G1(I)=G(I)
40 CONTINUE
- JGOTO=0
+ JGOTO=0
IF (NAC.EQ.0.AND.NFDG.EQ.2) RETURN
C ------------------------------------------------------------------
C CALCULATE GRADIENTS
C ------------------------------------------------------------------
- INFOG=1
+ INFOG=1
INFO=1
FI=OBJ
- III=0
-50 III=III+1
- XI=X(III)
+ III=0
+50 III=III+1
+ XI=X(III)
DX=FDCH*XI
DX=ABS(DX)
- FDCH1=FDCHM
- IF (NSCAL.NE.0) FDCH1=FDCHM/SCAL(III)
- IF (DX.LT.FDCH1) DX=FDCH1
+ FDCH1=FDCHM
+ IF (NSCAL.NE.0) FDCH1=FDCHM/SCAL(III)
+ IF (DX.LT.FDCH1) DX=FDCH1
X1=XI+DX
IF (NSIDE.EQ.0) GO TO 60
IF (X1.GT.VUB(III)) DX=-DX
-60 DX1=1./DX
+60 DX1=1./DX
X(III)=XI+DX
- NCAL(1)=NCAL(1)+1
+ NCAL(1)=NCAL(1)+1
C ------------------------------------------------------------------
-C FUNCTION EVALUATION
+C FUNCTION EVALUATION
C ------------------------------------------------------------------
- JGOTO=2
+ JGOTO=2
RETURN
70 CONTINUE
- X(III)=XI
- IF (NFDG.EQ.0) DF(III)=DX1*(OBJ-FI)
+ X(III)=XI
+ IF (NFDG.EQ.0) DF(III)=DX1*(OBJ-FI)
IF (NAC.EQ.0) GO TO 90
C ------------------------------------------------------------------
-C DETERMINE GRADIENT COMPONENTS OF ACTIVE CONSTRAINTS
+C DETERMINE GRADIENT COMPONENTS OF ACTIVE CONSTRAINTS
C ------------------------------------------------------------------
- DO 80 J=1,NAC
+ DO 80 J=1,NAC
I1=IC(J)
-80 A(III,J)=DX1*(G(I1)-G1(I1))
+80 A(III,J)=DX1*(G(I1)-G1(I1))
90 CONTINUE
IF (III.LT.NDV) GO TO 50
- INFOG=0
+ INFOG=0
INFO=INF
- JGOTO=0
+ JGOTO=0
OBJ=FI
- IF (NCON.EQ.0) RETURN
+ IF (NCON.EQ.0) RETURN
C ------------------------------------------------------------------
C STORE CURRENT CONSTRAINT VALUES BACK IN G-VECTOR
C ------------------------------------------------------------------
- DO 100 I=1,NCON
+ DO 100 I=1,NCON
100 G(I)=G1(I)
RETURN
- END
\ No newline at end of file
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn02.f b/pyoptsparse/pyCONMIN/source/cnmn02.f
index 8dd1fab4..5d4b108d 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn02.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn02.f
@@ -2,61 +2,61 @@ SUBROUTINE CNMN02 (NCALC,SLOPE,DFTDF1,DF,S,N1)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX
1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT
- 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
- DIMENSION DF(N1), S(N1)
+ 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
+ DIMENSION DF(N1), S(N1)
C ROUTINE TO DETERMINE CONJUGATE DIRECTION VECTOR OR DIRECTION
C OF STEEPEST DESCENT FOR UNCONSTRAINED FUNCTION MINIMIZATION.
C BY G. N. VANDERPLAATS APRIL, 1972.
C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
C NCALC = CALCULATION CONTROL.
C NCALC = 0, S = STEEPEST DESCENT.
-C NCALC = 1, S = CONJUGATE DIRECTION.
+C NCALC = 1, S = CONJUGATE DIRECTION.
C CONJUGATE DIRECTION IS FOUND BY FLETCHER-REEVES ALGORITHM.
C ------------------------------------------------------------------
-C CALCULATE NORM OF GRADIENT VECTOR
+C CALCULATE NORM OF GRADIENT VECTOR
C ------------------------------------------------------------------
DFTDF=0.
- DO 10 I=1,NDV
- DFI=DF(I)
-10 DFTDF=DFTDF+DFI*DFI
+ DO 10 I=1,NDV
+ DFI=DF(I)
+10 DFTDF=DFTDF+DFI*DFI
C ------------------------------------------------------------------
C ********** FIND DIRECTION S **********
C ------------------------------------------------------------------
IF (NCALC.NE.1) GO TO 30
- IF (DFTDF1.LT.1.0E-20) GO TO 30
+ IF (DFTDF1.LT.1.0E-20) GO TO 30
C ------------------------------------------------------------------
C FIND FLETCHER-REEVES CONJUGATE DIRECTION
C ------------------------------------------------------------------
- BETA=DFTDF/DFTDF1
+ BETA=DFTDF/DFTDF1
SLOPE=0.
- DO 20 I=1,NDV
- DFI=DF(I)
+ DO 20 I=1,NDV
+ DFI=DF(I)
SI=BETA*S(I)-DFI
SLOPE=SLOPE+SI*DFI
-20 S(I)=SI
+20 S(I)=SI
GO TO 50
30 CONTINUE
- NCALC=0
+ NCALC=0
C ------------------------------------------------------------------
C CALCULATE DIRECTION OF STEEPEST DESCENT
C ------------------------------------------------------------------
- DO 40 I=1,NDV
-40 S(I)=-DF(I)
+ DO 40 I=1,NDV
+40 S(I)=-DF(I)
SLOPE=-DFTDF
50 CONTINUE
C ------------------------------------------------------------------
C NORMALIZE S TO MAX ABS VALUE OF UNITY
C ------------------------------------------------------------------
- S1=0.
- DO 60 I=1,NDV
+ S1=0.
+ DO 60 I=1,NDV
S2=ABS(S(I))
- IF (S2.GT.S1) S1=S2
+ IF (S2.GT.S1) S1=S2
60 CONTINUE
- IF (S1.LT.1.0E-20) S1=1.0E-20
+ IF (S1.LT.1.0E-20) S1=1.0E-20
S1=1./S1
- DFTDF1=DFTDF*S1
- DO 70 I=1,NDV
+ DFTDF1=DFTDF*S1
+ DO 70 I=1,NDV
70 S(I)=S1*S(I)
SLOPE=S1*SLOPE
RETURN
- END
\ No newline at end of file
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn03.f b/pyoptsparse/pyCONMIN/source/cnmn03.f
index 9693a586..e79003d3 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn03.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn03.f
@@ -3,86 +3,86 @@ SUBROUTINE CNMN03 (X,S,SLOPE,ALP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,APP,N
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX
1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT
- 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
+ 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
COMMON /OUTPUT/ IOUT
- DIMENSION X(N1), S(N1), NCAL(2)
+ DIMENSION X(N1), S(N1), NCAL(2)
C ROUTINE TO SOLVE ONE-DIMENSIONAL SEARCH IN UNCONSTRAINED
-C MINIMIZATION USING 2-POINT QUADRATIC INTERPOLATION, 3-POINT
+C MINIMIZATION USING 2-POINT QUADRATIC INTERPOLATION, 3-POINT
C CUBIC INTERPOLATION AND 4-POINT CUBIC INTERPOLATION.
C BY G. N. VANDERPLAATS APRIL, 1972.
-C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
+C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
C ALP = PROPOSED MOVE PARAMETER.
C SLOPE = INITIAL FUNCTION SLOPE = S-TRANSPOSE TIMES DF.
-C SLOPE MUST BE NEGATIVE.
-C OBJ = INITIAL FUNCTION VALUE.
+C SLOPE MUST BE NEGATIVE.
+C OBJ = INITIAL FUNCTION VALUE.
ZRO=0.
IF (JGOTO.EQ.0) GO TO 10
- GO TO (50,80,110,140,180,220,270),JGOTO
+ GO TO (50,80,110,140,180,220,270),JGOTO
C ------------------------------------------------------------------
C INITIAL INFORMATION (ALPHA=0)
C ------------------------------------------------------------------
-10 IF (SLOPE.LT.0.) GO TO 20
+10 IF (SLOPE.LT.0.) GO TO 20
ALP=0.
RETURN
20 CONTINUE
IF (IPRINT.GT.4) WRITE (IOUT,360)
- FFF=OBJ
+ FFF=OBJ
AP1=0.
- A1=0.
+ A1=0.
F1=OBJ
A2=ALP
- A3=0.
- F3=0.
- AP=A2
- KOUNT=0
+ A3=0.
+ F3=0.
+ AP=A2
+ KOUNT=0
C ------------------------------------------------------------------
-C MOVE A DISTANCE AP*S AND UPDATE FUNCTION VALUE
+C MOVE A DISTANCE AP*S AND UPDATE FUNCTION VALUE
C ------------------------------------------------------------------
30 CONTINUE
- KOUNT=KOUNT+1
- DO 40 I=1,NDV
-40 X(I)=X(I)+AP*S(I)
- IF (IPRINT.GT.4) WRITE (IOUT,370) AP
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=1
+ KOUNT=KOUNT+1
+ DO 40 I=1,NDV
+40 X(I)=X(I)+AP*S(I)
+ IF (IPRINT.GT.4) WRITE (IOUT,370) AP
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=1
RETURN
50 CONTINUE
F2=OBJ
- IF (IPRINT.GT.4) WRITE (IOUT,390) F2
- IF (F2.LT.F1) GO TO 120
+ IF (IPRINT.GT.4) WRITE (IOUT,390) F2
+ IF (F2.LT.F1) GO TO 120
C ------------------------------------------------------------------
C CHECK FOR ILL-CONDITIONING
C ------------------------------------------------------------------
IF (KOUNT.GT.5) GO TO 60
- FF=2.*ABS(F1)
+ FF=2.*ABS(F1)
IF (F2.LT.FF) GO TO 90
- FF=5.*ABS(F1)
+ FF=5.*ABS(F1)
IF (F2.LT.FF) GO TO 60
A2=.5*A2
AP=-A2
ALP=A2
GO TO 30
-60 F3=F2
- A3=A2
+60 F3=F2
+ A3=A2
A2=.5*A2
C ------------------------------------------------------------------
-C UPDATE DESIGN VECTOR AND FUNCTION VALUE
+C UPDATE DESIGN VECTOR AND FUNCTION VALUE
C ------------------------------------------------------------------
- AP=A2-ALP
+ AP=A2-ALP
ALP=A2
- DO 70 I=1,NDV
-70 X(I)=X(I)+AP*S(I)
- IF (IPRINT.GT.4) WRITE (IOUT,370) A2
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=2
+ DO 70 I=1,NDV
+70 X(I)=X(I)+AP*S(I)
+ IF (IPRINT.GT.4) WRITE (IOUT,370) A2
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=2
RETURN
80 CONTINUE
F2=OBJ
- IF (IPRINT.GT.4) WRITE (IOUT,390) F2
-C PROCEED TO CUBIC INTERPOLATION.
- GO TO 160
+ IF (IPRINT.GT.4) WRITE (IOUT,390) F2
+C PROCEED TO CUBIC INTERPOLATION.
+ GO TO 160
90 CONTINUE
C ------------------------------------------------------------------
C ********** 2-POINT QUADRATIC INTERPOLATION **********
@@ -91,44 +91,44 @@ SUBROUTINE CNMN03 (X,S,SLOPE,ALP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,APP,N
II=1
CALL CNMN04 (II,APP,ZRO,A1,F1,SLOPE,A2,F2,ZRO,ZRO,ZRO,ZRO)
IF (APP.LT.ZRO.OR.APP.GT.A2) GO TO 120
- F3=F2
- A3=A2
+ F3=F2
+ A3=A2
A2=APP
JJ=0
C ------------------------------------------------------------------
C UPDATE DESIGN VECTOR AND FUNCTION VALUE
C ------------------------------------------------------------------
- AP=A2-ALP
+ AP=A2-ALP
ALP=A2
DO 100 I=1,NDV
-100 X(I)=X(I)+AP*S(I)
- IF (IPRINT.GT.4) WRITE (IOUT,370) A2
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=3
+100 X(I)=X(I)+AP*S(I)
+ IF (IPRINT.GT.4) WRITE (IOUT,370) A2
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=3
RETURN
110 CONTINUE
F2=OBJ
- IF (IPRINT.GT.4) WRITE (IOUT,390) F2
- GO TO 150
+ IF (IPRINT.GT.4) WRITE (IOUT,390) F2
+ GO TO 150
120 A3=2.*A2
C ------------------------------------------------------------------
C UPDATE DESIGN VECTOR AND FUNCTION VALUE
C ------------------------------------------------------------------
- AP=A3-ALP
+ AP=A3-ALP
ALP=A3
DO 130 I=1,NDV
-130 X(I)=X(I)+AP*S(I)
- IF (IPRINT.GT.4) WRITE (IOUT,370) A3
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=4
+130 X(I)=X(I)+AP*S(I)
+ IF (IPRINT.GT.4) WRITE (IOUT,370) A3
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=4
RETURN
140 CONTINUE
F3=OBJ
- IF (IPRINT.GT.4) WRITE (IOUT,390) F3
+ IF (IPRINT.GT.4) WRITE (IOUT,390) F3
150 CONTINUE
- IF (F3.LT.F2) GO TO 190
+ IF (F3.LT.F2) GO TO 190
160 CONTINUE
C ------------------------------------------------------------------
C ********** 3-POINT CUBIC INTERPOLATION **********
@@ -139,39 +139,39 @@ SUBROUTINE CNMN03 (X,S,SLOPE,ALP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,APP,N
C ------------------------------------------------------------------
C UPDATE DESIGN VECTOR AND FUNCTION VALUE.
C ------------------------------------------------------------------
- AP1=APP
+ AP1=APP
AP=APP-ALP
- ALP=APP
+ ALP=APP
DO 170 I=1,NDV
-170 X(I)=X(I)+AP*S(I)
+170 X(I)=X(I)+AP*S(I)
IF (IPRINT.GT.4) WRITE (IOUT,370) ALP
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=5
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=5
RETURN
180 CONTINUE
IF (IPRINT.GT.4) WRITE (IOUT,390) OBJ
C ------------------------------------------------------------------
-C CHECK CONVERGENCE
+C CHECK CONVERGENCE
C ------------------------------------------------------------------
AA=1.-APP/A2
- AB2=ABS(F2)
+ AB2=ABS(F2)
AB3=ABS(OBJ)
AB=AB2
- IF (AB3.GT.AB) AB=AB3
- IF (AB.LT.1.0E-15) AB=1.0E-15
- AB=(AB2-AB3)/AB
- IF (ABS(AB).LT.1.0E-15.AND.ABS(AA).LT..001) GO TO 330
- A4=A3
- F4=F3
+ IF (AB3.GT.AB) AB=AB3
+ IF (AB.LT.1.0E-15) AB=1.0E-15
+ AB=(AB2-AB3)/AB
+ IF (ABS(AB).LT.1.0E-15.AND.ABS(AA).LT..001) GO TO 330
+ A4=A3
+ F4=F3
A3=APP
F3=OBJ
- IF (A3.GT.A2) GO TO 230
- A3=A2
- F3=F2
+ IF (A3.GT.A2) GO TO 230
+ A3=A2
+ F3=F2
A2=APP
F2=OBJ
- GO TO 230
+ GO TO 230
190 CONTINUE
C ------------------------------------------------------------------
C ********** 4-POINT CUBIC INTERPOLATION **********
@@ -179,97 +179,97 @@ SUBROUTINE CNMN03 (X,S,SLOPE,ALP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,APP,N
200 CONTINUE
A4=2.*A3
C UPDATE DESIGN VECTOR AND FUNCTION VALUE.
- AP=A4-ALP
+ AP=A4-ALP
ALP=A4
DO 210 I=1,NDV
-210 X(I)=X(I)+AP*S(I)
+210 X(I)=X(I)+AP*S(I)
IF (IPRINT.GT.4) WRITE (IOUT,370) ALP
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=6
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=6
RETURN
220 CONTINUE
F4=OBJ
- IF (IPRINT.GT.4) WRITE (IOUT,390) F4
- IF (F4.GT.F3) GO TO 230
- A1=A2
- F1=F2
- A2=A3
- F2=F3
- A3=A4
- F3=F4
- GO TO 200
+ IF (IPRINT.GT.4) WRITE (IOUT,390) F4
+ IF (F4.GT.F3) GO TO 230
+ A1=A2
+ F1=F2
+ A2=A3
+ F2=F3
+ A3=A4
+ F3=F4
+ GO TO 200
230 CONTINUE
II=4
- CALL CNMN04 (II,APP,A1,A1,F1,SLOPE,A2,F2,A3,F3,A4,F4)
+ CALL CNMN04 (II,APP,A1,A1,F1,SLOPE,A2,F2,A3,F3,A4,F4)
IF (APP.GT.A1) GO TO 250
- AP=A1-ALP
+ AP=A1-ALP
ALP=A1
OBJ=F1
DO 240 I=1,NDV
-240 X(I)=X(I)+AP*S(I)
- GO TO 280
+240 X(I)=X(I)+AP*S(I)
+ GO TO 280
250 CONTINUE
C ------------------------------------------------------------------
-C UPDATE DESIGN VECTOR AND FUNCTION VALUE
+C UPDATE DESIGN VECTOR AND FUNCTION VALUE
C ------------------------------------------------------------------
AP=APP-ALP
- ALP=APP
+ ALP=APP
DO 260 I=1,NDV
-260 X(I)=X(I)+AP*S(I)
+260 X(I)=X(I)+AP*S(I)
IF (IPRINT.GT.4) WRITE (IOUT,370) ALP
- IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
- NCAL(1)=NCAL(1)+1
- JGOTO=7
+ IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV)
+ NCAL(1)=NCAL(1)+1
+ JGOTO=7
RETURN
270 CONTINUE
IF (IPRINT.GT.4) WRITE (IOUT,390) OBJ
280 CONTINUE
C ------------------------------------------------------------------
-C CHECK FOR ILL-CONDITIONING
+C CHECK FOR ILL-CONDITIONING
C ------------------------------------------------------------------
- IF (OBJ.GT.F2.OR.OBJ.GT.F3) GO TO 290
+ IF (OBJ.GT.F2.OR.OBJ.GT.F3) GO TO 290
IF (OBJ.LE.F1) GO TO 330
- AP=A1-ALP
+ AP=A1-ALP
ALP=A1
OBJ=F1
- GO TO 310
+ GO TO 310
290 CONTINUE
- IF (F2.LT.F3) GO TO 300
+ IF (F2.LT.F3) GO TO 300
OBJ=F3
- AP=A3-ALP
+ AP=A3-ALP
ALP=A3
- GO TO 310
+ GO TO 310
300 OBJ=F2
- AP=A2-ALP
+ AP=A2-ALP
ALP=A2
310 CONTINUE
C ------------------------------------------------------------------
C UPDATE DESIGN VECTOR
C ------------------------------------------------------------------
DO 320 I=1,NDV
-320 X(I)=X(I)+AP*S(I)
+320 X(I)=X(I)+AP*S(I)
330 CONTINUE
C ------------------------------------------------------------------
-C CHECK FOR MULTIPLE MINIMA
+C CHECK FOR MULTIPLE MINIMA
C ------------------------------------------------------------------
- IF (OBJ.LE.FFF) GO TO 350
+ IF (OBJ.LE.FFF) GO TO 350
C INITIAL FUNCTION IS MINIMUM.
DO 340 I=1,NDV
340 X(I)=X(I)-ALP*S(I)
ALP=0.
- OBJ=FFF
+ OBJ=FFF
350 CONTINUE
- JGOTO=0
+ JGOTO=0
RETURN
C ------------------------------------------------------------------
-C FORMATS
+C FORMATS
C ------------------------------------------------------------------
-C
-C
+C
+C
360 FORMAT (/////5X,60H* * * UNCONSTRAINED ONE-DIMENSIONAL SEARCH INFO
1RMATION * * *)
370 FORMAT (/5X,7HALPHA =,E14.5/5X,8HX-VECTOR)
380 FORMAT (5X,6E13.5)
390 FORMAT (/5X,5HOBJ =,E14.5)
- END
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn04.f b/pyoptsparse/pyCONMIN/source/cnmn04.f
index 2635d11e..3b856696 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn04.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn04.f
@@ -1,121 +1,121 @@
SUBROUTINE CNMN04 (II,XBAR,EPS,X1,Y1,SLOPE,X2,Y2,X3,Y3,X4,Y4)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
C ROUTINE TO FIND FIRST XBAR.GE.EPS CORRESPONDING TO A MINIMUM
-C OF A ONE-DIMENSIONAL REAL FUNCTION BY POLYNOMIEL INTERPOLATION.
-C BY G. N. VANDERPLAATS APRIL, 1972.
-C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
-C
-C II = CALCULATION CONTROL.
+C OF A ONE-DIMENSIONAL REAL FUNCTION BY POLYNOMIEL INTERPOLATION.
+C BY G. N. VANDERPLAATS APRIL, 1972.
+C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
+C
+C II = CALCULATION CONTROL.
C 1: 2-POINT QUADRATIC INTERPOLATION, GIVEN X1, Y1, SLOPE,
-C X2 AND Y2.
-C 2: 3-POINT QUADRATIC INTERPOLATION, GIVEN X1, Y1, X2, Y2,
-C X3 AND Y3.
+C X2 AND Y2.
+C 2: 3-POINT QUADRATIC INTERPOLATION, GIVEN X1, Y1, X2, Y2,
+C X3 AND Y3.
C 3: 3-POINT CUBIC INTERPOLATION, GIVEN X1, Y1, SLOPE, X2, Y2,
-C X3 AND Y3.
-C 4: 4-POINT CUBIC INTERPOLATION, GIVEN X1, Y1, X2, Y2, X3,
-C Y3, X4 AND Y4.
+C X3 AND Y3.
+C 4: 4-POINT CUBIC INTERPOLATION, GIVEN X1, Y1, X2, Y2, X3,
+C Y3, X4 AND Y4.
C EPS MAY BE NEGATIVE.
-C IF REQUIRED MINIMUM ON Y DOES NOT EXITS, OR THE FUNCTION IS
+C IF REQUIRED MINIMUM ON Y DOES NOT EXITS, OR THE FUNCTION IS
C ILL-CONDITIONED, XBAR = EPS-1.0 WILL BE RETURNED AS AN ERROR
C INDICATOR.
C IF DESIRED INTERPOLATION IS ILL-CONDITIONED, A LOWER ORDER
-C INTERPOLATION, CONSISTANT WITH INPUT DATA, WILL BE ATTEMPTED,
-C AND II WILL BE CHANGED ACCORDINGLY.
+C INTERPOLATION, CONSISTANT WITH INPUT DATA, WILL BE ATTEMPTED,
+C AND II WILL BE CHANGED ACCORDINGLY.
XBAR1=EPS-1.
XBAR=XBAR1
- X21=X2-X1
- IF (ABS(X21).LT.1.0E-20) RETURN
- NSLOP=MOD(II,2)
+ X21=X2-X1
+ IF (ABS(X21).LT.1.0E-20) RETURN
+ NSLOP=MOD(II,2)
GO TO (10,20,40,50),II
10 CONTINUE
C ------------------------------------------------------------------
-C II=1: 2-POINT QUADRATIC INTERPOLATION
+C II=1: 2-POINT QUADRATIC INTERPOLATION
C ------------------------------------------------------------------
II=1
DX=X1-X2
IF (ABS(DX).LT.1.0E-20) RETURN
AA=(SLOPE+(Y2-Y1)/DX)/DX
- IF (AA.LT.1.0E-20) RETURN
- BB=SLOPE-2.*AA*X1
+ IF (AA.LT.1.0E-20) RETURN
+ BB=SLOPE-2.*AA*X1
XBAR=-.5*BB/AA
- IF (XBAR.LT.EPS) XBAR=XBAR1
+ IF (XBAR.LT.EPS) XBAR=XBAR1
RETURN
20 CONTINUE
C ------------------------------------------------------------------
-C II=2: 3-POINT QUADRATIC INTERPOLATION
+C II=2: 3-POINT QUADRATIC INTERPOLATION
C ------------------------------------------------------------------
II=2
- X21=X2-X1
- X31=X3-X1
- X32=X3-X2
+ X21=X2-X1
+ X31=X3-X1
+ X32=X3-X2
QQ=X21*X31*X32
IF (ABS(QQ).LT.1.0E-20) RETURN
AA=(Y1*X32-Y2*X31+Y3*X21)/QQ
- IF (AA.LT.1.0E-20) GO TO 30
- BB=(Y2-Y1)/X21-AA*(X1+X2)
+ IF (AA.LT.1.0E-20) GO TO 30
+ BB=(Y2-Y1)/X21-AA*(X1+X2)
XBAR=-.5*BB/AA
- IF (XBAR.LT.EPS) XBAR=XBAR1
+ IF (XBAR.LT.EPS) XBAR=XBAR1
RETURN
30 CONTINUE
IF (NSLOP.EQ.0) RETURN
GO TO 10
40 CONTINUE
C ------------------------------------------------------------------
-C II=3: 3-POINT CUBIC INTERPOLATION
+C II=3: 3-POINT CUBIC INTERPOLATION
C ------------------------------------------------------------------
II=3
- X21=X2-X1
- X31=X3-X1
- X32=X3-X2
+ X21=X2-X1
+ X31=X3-X1
+ X32=X3-X2
QQ=X21*X31*X32
IF (ABS(QQ).LT.1.0E-20) RETURN
- X11=X1*X1
+ X11=X1*X1
DNOM=X2*X2*X31-X11*X32-X3*X3*X21
IF (ABS(DNOM).LT.1.0E-20) GO TO 20
- AA=((X31*X31*(Y2-Y1)-X21*X21*(Y3-Y1))/(X31*X21)-SLOPE*X32)/DNOM
+ AA=((X31*X31*(Y2-Y1)-X21*X21*(Y3-Y1))/(X31*X21)-SLOPE*X32)/DNOM
IF (ABS(AA).LT.1.0E-20) GO TO 20
BB=((Y2-Y1)/X21-SLOPE-AA*(X2*X2+X1*X2-2.*X11))/X21
- CC=SLOPE-3.*AA*X11-2.*BB*X1
+ CC=SLOPE-3.*AA*X11-2.*BB*X1
BAC=BB*BB-3.*AA*CC
- IF (BAC.LT.0.) GO TO 20
- BAC=SQRT(BAC)
- XBAR=(BAC-BB)/(3.*AA)
- IF (XBAR.LT.EPS) XBAR=EPS
+ IF (BAC.LT.0.) GO TO 20
+ BAC=SQRT(BAC)
+ XBAR=(BAC-BB)/(3.*AA)
+ IF (XBAR.LT.EPS) XBAR=EPS
RETURN
50 CONTINUE
C ------------------------------------------------------------------
C II=4: 4-POINT CUBIC INTERPOLATION
C ------------------------------------------------------------------
- X21=X2-X1
- X31=X3-X1
- X41=X4-X1
- X32=X3-X2
- X42=X4-X2
- X11=X1*X1
- X22=X2*X2
- X33=X3*X3
- X44=X4*X4
- X111=X1*X11
- X222=X2*X22
+ X21=X2-X1
+ X31=X3-X1
+ X41=X4-X1
+ X32=X3-X2
+ X42=X4-X2
+ X11=X1*X1
+ X22=X2*X2
+ X33=X3*X3
+ X44=X4*X4
+ X111=X1*X11
+ X222=X2*X22
Q2=X31*X21*X32
IF (ABS(Q2).LT.1.0E-30) RETURN
- Q1=X111*X32-X222*X31+X3*X33*X21
- Q4=X111*X42-X222*X41+X4*X44*X21
+ Q1=X111*X32-X222*X31+X3*X33*X21
+ Q4=X111*X42-X222*X41+X4*X44*X21
Q5=X41*X21*X42
DNOM=Q2*Q4-Q1*Q5
IF (ABS(DNOM).LT.1.0E-30) GO TO 60
- Q3=Y3*X21-Y2*X31+Y1*X32
- Q6=Y4*X21-Y2*X41+Y1*X42
- AA=(Q2*Q6-Q3*Q5)/DNOM
+ Q3=Y3*X21-Y2*X31+Y1*X32
+ Q6=Y4*X21-Y2*X41+Y1*X42
+ AA=(Q2*Q6-Q3*Q5)/DNOM
BB=(Q3-Q1*AA)/Q2
CC=(Y2-Y1-AA*(X222-X111))/X21-BB*(X1+X2)
BAC=BB*BB-3.*AA*CC
- IF (ABS(AA).LT.1.0E-20.OR.BAC.LT.0.) GO TO 60
- BAC=SQRT(BAC)
- XBAR=(BAC-BB)/(3.*AA)
- IF (XBAR.LT.EPS) XBAR=XBAR1
+ IF (ABS(AA).LT.1.0E-20.OR.BAC.LT.0.) GO TO 60
+ BAC=SQRT(BAC)
+ XBAR=(BAC-BB)/(3.*AA)
+ IF (XBAR.LT.EPS) XBAR=XBAR1
RETURN
60 CONTINUE
IF (NSLOP.EQ.1) GO TO 40
GO TO 20
- END
\ No newline at end of file
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn05.f b/pyoptsparse/pyCONMIN/source/cnmn05.f
index 6889d5e6..00c83653 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn05.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn05.f
@@ -3,15 +3,15 @@ SUBROUTINE CNMN05 (G,DF,A,S,B,C,SLOPE,PHI,ISC,IC,MS1,NVC,N1,N2,N3,
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX
1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT
- 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
+ 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
COMMON /OUTPUT/ IOUT
- DIMENSION DF(N1), G(N2), ISC(N2), IC(N3), A(N1,N3), S(N1), C(N4),
- 1MS1(N5), B(N3,N3)
+ DIMENSION DF(N1), G(N2), ISC(N2), IC(N3), A(N1,N3), S(N1), C(N4),
+ 1MS1(N5), B(N3,N3)
C ROUTINE TO SOLVE DIRECTION FINDING PROBLEM IN MODIFIED METHOD OF
C FEASIBLE DIRECTIONS.
-C BY G. N. VANDERPLAATS MAY, 1972.
+C BY G. N. VANDERPLAATS MAY, 1972.
C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
-C NORM OF S VECTOR USED HERE IS S-TRANSPOSE TIMES S.LE.1.
+C NORM OF S VECTOR USED HERE IS S-TRANSPOSE TIMES S.LE.1.
C IF NVC = 0 FIND DIRECTION BY ZOUTENDIJK'S METHOD. OTHERWISE
C FIND MODIFIED DIRECTION.
C ------------------------------------------------------------------
@@ -20,195 +20,195 @@ SUBROUTINE CNMN05 (G,DF,A,S,B,C,SLOPE,PHI,ISC,IC,MS1,NVC,N1,N2,N3,
NDV1=NDV+1
NDV2=NDV+2
NAC1=NAC+1
- NVC=0
+ NVC=0
THMAX=0.
- CTA=ABS(CT)
+ CTA=ABS(CT)
CT1=1./CTA
- CTAM=ABS(CTMIN)
+ CTAM=ABS(CTMIN)
CTB=ABS(CTL)
CT2=1./CTB
CTBM=ABS(CTLMIN)
- A1=1.
- DO 40 I=1,NAC
-C CALCULATE THETA
- NCI=IC(I)
- NCJ=1
- IF (NCI.LE.NCON) NCJ=ISC(NCI)
- C1=G(NCI)
- CTD=CT1
+ A1=1.
+ DO 40 I=1,NAC
+C CALCULATE THETA
+ NCI=IC(I)
+ NCJ=1
+ IF (NCI.LE.NCON) NCJ=ISC(NCI)
+ C1=G(NCI)
+ CTD=CT1
CTC=CTAM
IF (NCJ.LE.0) GO TO 10
CTC=CTBM
- CTD=CT2
+ CTD=CT2
10 IF (C1.GT.CTC) NVC=NVC+1
THT=0.
GG=1.+CTD*C1
IF (NCJ.EQ.0.OR.C1.GT.CTC) THT=THETA*GG*GG
- IF (THT.GT.50.) THT=50.
- IF (THT.GT.THMAX) THMAX=THT
- A(NDV1,I)=THT
+ IF (THT.GT.50.) THT=50.
+ IF (THT.GT.THMAX) THMAX=THT
+ A(NDV1,I)=THT
C ------------------------------------------------------------------
-C NORMALIZE GRADIENTS OF CONSTRAINTS
+C NORMALIZE GRADIENTS OF CONSTRAINTS
C ------------------------------------------------------------------
A(NDV2,I)=1.
- IF (NCI.GT.NCON) GO TO 40
- A1=0.
- DO 20 J=1,NDV
- A1=A1+A(J,I)**2
+ IF (NCI.GT.NCON) GO TO 40
+ A1=0.
+ DO 20 J=1,NDV
+ A1=A1+A(J,I)**2
20 CONTINUE
- IF (A1.LT.1.0E-20) A1=1.0E-20
- A1=SQRT(A1)
+ IF (A1.LT.1.0E-20) A1=1.0E-20
+ A1=SQRT(A1)
A(NDV2,I)=A1
A1=1./A1
- DO 30 J=1,NDV
+ DO 30 J=1,NDV
30 A(J,I)=A1*A(J,I)
40 CONTINUE
C ------------------------------------------------------------------
-C CHECK FOR ZERO GRADIENT. PROGRAM CHANGE-FEB, 1981, GV.
+C CHECK FOR ZERO GRADIENT. PROGRAM CHANGE-FEB, 1981, GV.
C ------------------------------------------------------------------
- I=0
-41 I=I+1
+ I=0
+41 I=I+1
42 CONTINUE
IF(A(NDV2,I).GT.1.0E-6) GO TO 45
-C ZERO GRADIENT IS FOUND. WRITE ERROR MESSAGE.
+C ZERO GRADIENT IS FOUND. WRITE ERROR MESSAGE.
IF(IPRINT.GE.2) WRITE(IOUT,43)IC(I)
43 FORMAT(5X,13H** CONSTRAINT,I5,18H HAS ZERO GRADIENT/
*5X,23HDELETED FROM ACTIVE SET)
C REDUCE NAC BY ONE.
- NAC=NAC-1
+ NAC=NAC-1
C SHIFT COLUMNS OF A AND ROWS OF IC IF I.LE.NAC.
- IF(I.GT.NAC) GO TO 46
+ IF(I.GT.NAC) GO TO 46
C SHIFT.
- DO 44 J=I,NAC
+ DO 44 J=I,NAC
J1=J+1
IC(J)=IC(J1)
DO 44 K=1,NDV2
44 A(K,J)=A(K,J1)
- IF(I.LE.NAC) GO TO 42
+ IF(I.LE.NAC) GO TO 42
45 CONTINUE
- IF(I.LT.NAC) GO TO 41
+ IF(I.LT.NAC) GO TO 41
46 CONTINUE
- IF(NAC.LE.0) RETURN
+ IF(NAC.LE.0) RETURN
NAC1=NAC+1
C DETERMINE IF CONSTRAINTS ARE VIOLATED.
- NVC=0
- DO 47 I=1,NAC
- NCI=IC(I)
- NCJ=1
+ NVC=0
+ DO 47 I=1,NAC
+ NCI=IC(I)
+ NCJ=1
IF(NCI.LE.NCON) NCJ=ISC(NCI)
CTC=CTAM
- IF(NCJ.GT.0) CTC=CTBM
- IF(G(NCI).GT.CTC) NVC=NVC+1
+ IF(NCJ.GT.0) CTC=CTBM
+ IF(G(NCI).GT.CTC) NVC=NVC+1
47 CONTINUE
C ------------------------------------------------------------------
-C NORMALIZE GRADIENT OF OBJECTIVE FUNCTION AND STORE IN NAC+1
-C COLUMN OF A
+C NORMALIZE GRADIENT OF OBJECTIVE FUNCTION AND STORE IN NAC+1
+C COLUMN OF A
C ------------------------------------------------------------------
- A1=0.
- DO 50 I=1,NDV
+ A1=0.
+ DO 50 I=1,NDV
A1=A1+DF(I)**2
50 CONTINUE
- IF (A1.LT.1.0E-20) A1=1.0E-20
- A1=SQRT(A1)
+ IF (A1.LT.1.0E-20) A1=1.0E-20
+ A1=SQRT(A1)
A1=1./A1
- DO 60 I=1,NDV
+ DO 60 I=1,NDV
60 A(I,NAC1)=A1*DF(I)
-C BUILD C VECTOR.
+C BUILD C VECTOR.
IF (NVC.GT.0) GO TO 80
C ------------------------------------------------------------------
C BUILD C FOR CLASSICAL METHOD
C ------------------------------------------------------------------
NDB=NAC1
A(NDV1,NDB)=1.
- DO 70 I=1,NDB
-70 C(I)=-A(NDV1,I)
- GO TO 110
+ DO 70 I=1,NDB
+70 C(I)=-A(NDV1,I)
+ GO TO 110
80 CONTINUE
C ------------------------------------------------------------------
-C BUILD C FOR MODIFIED METHOD
+C BUILD C FOR MODIFIED METHOD
C ------------------------------------------------------------------
- NDB=NAC
- A(NDV1,NAC1)=-PHI
+ NDB=NAC
+ A(NDV1,NAC1)=-PHI
C ------------------------------------------------------------------
C SCALE THETA'S SO THAT MAXIMUM THETA IS UNITY
C ------------------------------------------------------------------
IF (THMAX.GT.0.00001) THMAX=1./THMAX
- DO 90 I=1,NDB
- A(NDV1,I)=A(NDV1,I)*THMAX
+ DO 90 I=1,NDB
+ A(NDV1,I)=A(NDV1,I)*THMAX
90 CONTINUE
DO 100 I=1,NDB
- C(I)=0.
- DO 100 J=1,NDV1
+ C(I)=0.
+ DO 100 J=1,NDV1
100 C(I)=C(I)+A(J,I)*A(J,NAC1)
110 CONTINUE
C ------------------------------------------------------------------
-C BUILD B MATRIX
+C BUILD B MATRIX
C ------------------------------------------------------------------
DO 120 I=1,NDB
DO 120 J=1,NDB
- B(I,J)=0.
- DO 120 K=1,NDV1
-120 B(I,J)=B(I,J)-A(K,I)*A(K,J)
+ B(I,J)=0.
+ DO 120 K=1,NDV1
+120 B(I,J)=B(I,J)-A(K,I)*A(K,J)
C ------------------------------------------------------------------
C SOLVE SPECIAL L. P. PROBLEM
C ------------------------------------------------------------------
CALL CNMN08 (NDB,NER,C,MS1,B,N3,N4,N5)
- IF (IPRINT.GT.1.AND.NER.GT.0) WRITE (IOUT,180)
+ IF (IPRINT.GT.1.AND.NER.GT.0) WRITE (IOUT,180)
C CALCULATE RESULTING DIRECTION VECTOR, S.
SLOPE=0.
C ------------------------------------------------------------------
C USABLE-FEASIBLE DIRECTION
C ------------------------------------------------------------------
DO 140 I=1,NDV
- S1=0.
- IF (NVC.GT.0) S1=-A(I,NAC1)
+ S1=0.
+ IF (NVC.GT.0) S1=-A(I,NAC1)
DO 130 J=1,NDB
-130 S1=S1-A(I,J)*C(J)
+130 S1=S1-A(I,J)*C(J)
SLOPE=SLOPE+S1*DF(I)
-140 S(I)=S1
+140 S(I)=S1
S(NDV1)=1.
- IF (NVC.GT.0) S(NDV1)=-A(NDV1,NAC1)
+ IF (NVC.GT.0) S(NDV1)=-A(NDV1,NAC1)
DO 150 J=1,NDB
150 S(NDV1)=S(NDV1)-A(NDV1,J)*C(J)
C ------------------------------------------------------------------
-C CHECK TO INSURE THE S-VECTOR IS FEASIBLE.
+C CHECK TO INSURE THE S-VECTOR IS FEASIBLE.
C PROGRAM MOD-FEB, 1981, GV.
C ------------------------------------------------------------------
DO 174 J=1,NAC
-C S DOT DEL(G).
- SG=0.
+C S DOT DEL(G).
+ SG=0.
DO 172 I=1,NDV
-172 SG=SG+S(I)*A(I,J)
+172 SG=SG+S(I)*A(I,J)
C IF(SG.GT.0.) GO TO 176
-C
-C THIS CHANGE MADE ON 4/8/81 FOR G. VANDERPLAATS
-C
- IF(SG.GT.1.0E-04) GO TO 176
+C
+C THIS CHANGE MADE ON 4/8/81 FOR G. VANDERPLAATS
+C
+ IF(SG.GT.1.0E-04) GO TO 176
C FEASIBLE FOR THIS CONSTRAINT. CONTINUE.
174 CONTINUE
- GO TO 179
+ GO TO 179
176 CONTINUE
-C S-VECTOR IS NOT FEASIBLE DUE TO SOME NUMERICAL PROBLEM.
+C S-VECTOR IS NOT FEASIBLE DUE TO SOME NUMERICAL PROBLEM.
IF(IPRINT.GE.2) WRITE(IOUT,178)
-178 FORMAT(5X,38H** CALCULATED S-VECTOR IS NOT FEASIBLE/5X,
+178 FORMAT(5X,38H** CALCULATED S-VECTOR IS NOT FEASIBLE/5X,
* 19HBETA IS SET TO ZERO)
S(NDV1)=0.
- NVC=0
+ NVC=0
RETURN
179 CONTINUE
C ------------------------------------------------------------------
C NORMALIZE S TO MAX ABS OF UNITY
C ------------------------------------------------------------------
- S1=0.
+ S1=0.
DO 160 I=1,NDV
A1=ABS(S(I))
- IF (A1.GT.S1) S1=A1
+ IF (A1.GT.S1) S1=A1
160 CONTINUE
-C IF (S1.LT.1.0E-10) RETURN
-C
+C IF (S1.LT.1.0E-10) RETURN
+C
C E-10 CHANGED TO E-04 ON 1/12/81
-C
- IF (S1.LT.1.0E-04) RETURN
+C
+ IF (S1.LT.1.0E-04) RETURN
S1=1./S1
DO 170 I=1,NDV
170 S(I)=S1*S(I)
@@ -216,10 +216,10 @@ SUBROUTINE CNMN05 (G,DF,A,S,B,C,SLOPE,PHI,ISC,IC,MS1,NVC,N1,N2,N3,
S(NDV1)=S1*S(NDV1)
RETURN
C ------------------------------------------------------------------
-C FORMATS
+C FORMATS
C ------------------------------------------------------------------
-C
-C
+C
+C
180 FORMAT (//5X,46H* * DIRECTION FINDING PROCESS DID NOT CONVERGE/5X,
- 129H* * S-VECTOR MAY NOT BE VALID)
- END
+ 129H* * S-VECTOR MAY NOT BE VALID)
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn06.f b/pyoptsparse/pyCONMIN/source/cnmn06.f
index 82dd7d0d..aa7215dc 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn06.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn06.f
@@ -5,42 +5,42 @@ SUBROUTINE CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX
1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT
- 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
+ 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT
COMMON /OUTPUT/ IOUT
DIMENSION X(N1), VLB(N1), VUB(N1), G(N2), SCAL(N1), DF(N1), S(N1),
- 1 G1(N2), G2(N2), ISC(N2), NCAL(2)
-C ROUTINE TO SOLVE ONE-DIMENSIONAL SEARCH PROBLEM FOR CONSTRAINED
+ 1 G1(N2), G2(N2), ISC(N2), NCAL(2)
+C ROUTINE TO SOLVE ONE-DIMENSIONAL SEARCH PROBLEM FOR CONSTRAINED
C FUNCTION MINIMIZATION.
-C BY G. N. VANDERPLAATS AUG., 1974.
+C BY G. N. VANDERPLAATS AUG., 1974.
C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
-C OBJ = INITIAL AND FINAL FUNCTION VALUE.
-C ALP = MOVE PARAMETER.
+C OBJ = INITIAL AND FINAL FUNCTION VALUE.
+C ALP = MOVE PARAMETER.
C SLOPE = INITIAL SLOPE.
-C
-C ALPSID = MOVE TO SIDE CONSTRAINT.
-C ALPFES = MOVE TO FEASIBLE REGION.
+C
+C ALPSID = MOVE TO SIDE CONSTRAINT.
+C ALPFES = MOVE TO FEASIBLE REGION.
C ALPNC = MOVE TO NEW NON-LINEAR CONSTRAINT.
C ALPLN = MOVE TO LINEAR CONSTRAINT.
-C ALPCA = MOVE TO RE-ENCOUNTER CURRENTLY ACTIVE CONSTRAINT.
-C ALPMIN = MOVE TO MINIMIZE FUNCTION.
+C ALPCA = MOVE TO RE-ENCOUNTER CURRENTLY ACTIVE CONSTRAINT.
+C ALPMIN = MOVE TO MINIMIZE FUNCTION.
C ALPTOT = TOTAL MOVE PARAMETER.
ZRO=0.
IF (JGOTO.EQ.0) GO TO 10
- GO TO (140,310,520),JGOTO
+ GO TO (140,310,520),JGOTO
10 IF (IPRINT.GE.5) WRITE (IOUT,730)
ALPSAV=ALP
ICOUNT=0
- ALPTOT=0.
-C TOLERANCES.
- CTAM=ABS(CTMIN)
+ ALPTOT=0.
+C TOLERANCES.
+ CTAM=ABS(CTMIN)
CTBM=ABS(CTLMIN)
C PROPOSED MOVE.
20 CONTINUE
C ------------------------------------------------------------------
-C ***** BEGIN SEARCH OR IMPOSE SIDE CONSTRAINT MODIFICATION *****
+C ***** BEGIN SEARCH OR IMPOSE SIDE CONSTRAINT MODIFICATION *****
C ------------------------------------------------------------------
- A2=ALPSAV
- ICOUNT=ICOUNT+1
+ A2=ALPSAV
+ ICOUNT=ICOUNT+1
ALPSID=1.0E+20
C INITIAL ALPHA AND OBJ.
ALP=0.
@@ -51,95 +51,95 @@ SUBROUTINE CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP
C FIND MOVE TO SIDE CONSTRAINT AND INSURE AGAINST VIOLATION OF
C SIDE CONSTRAINTS
C ------------------------------------------------------------------
- DO 60 I=1,NDV
- SI=S(I)
+ DO 60 I=1,NDV
+ SI=S(I)
IF (ABS(SI).GT.1.0E-20) GO TO 30
C ITH COMPONENT OF S IS SMALL. SET TO ZERO.
- S(I)=0.
+ S(I)=0.
SLOPE=SLOPE-SI*DF(I)
GO TO 60
30 CONTINUE
- XI=X(I)
+ XI=X(I)
SI=1./SI
IF (SI.GT.0.) GO TO 40
C LOWER BOUND.
XI2=VLB(I)
XI1=ABS(XI2)
- IF (XI1.LT.1.) XI1=1.
-C CONSTRAINT VALUE.
- GI=(XI2-XI)/XI1
- IF (GI.GT.-1.0E-6) GO TO 50
-C PROPOSED MOVE TO LOWER BOUND.
+ IF (XI1.LT.1.) XI1=1.
+C CONSTRAINT VALUE.
+ GI=(XI2-XI)/XI1
+ IF (GI.GT.-1.0E-6) GO TO 50
+C PROPOSED MOVE TO LOWER BOUND.
ALPA=(XI2-XI)*SI
- IF (ALPA.LT.ALPSID) ALPSID=ALPA
+ IF (ALPA.LT.ALPSID) ALPSID=ALPA
GO TO 60
40 CONTINUE
C UPPER BOUND.
XI2=VUB(I)
XI1=ABS(XI2)
- IF (XI1.LT.1.) XI1=1.
-C CONSTRAINT VALUE.
- GI=(XI-XI2)/XI1
- IF (GI.GT.-1.0E-6) GO TO 50
-C PROPOSED MOVE TO UPPER BOUND.
+ IF (XI1.LT.1.) XI1=1.
+C CONSTRAINT VALUE.
+ GI=(XI-XI2)/XI1
+ IF (GI.GT.-1.0E-6) GO TO 50
+C PROPOSED MOVE TO UPPER BOUND.
ALPA=(XI2-XI)*SI
- IF (ALPA.LT.ALPSID) ALPSID=ALPA
+ IF (ALPA.LT.ALPSID) ALPSID=ALPA
GO TO 60
50 CONTINUE
-C MOVE WILL VIOLATE SIDE CONSTRAINT. SET S(I)=0.
+C MOVE WILL VIOLATE SIDE CONSTRAINT. SET S(I)=0.
SLOPE=SLOPE-S(I)*DF(I)
- S(I)=0.
- KSID=KSID+1
+ S(I)=0.
+ KSID=KSID+1
60 CONTINUE
-C ALPSID IS UPPER BOUND ON ALPHA.
- IF (A2.GT.ALPSID) A2=ALPSID
+C ALPSID IS UPPER BOUND ON ALPHA.
+ IF (A2.GT.ALPSID) A2=ALPSID
70 CONTINUE
C ------------------------------------------------------------------
C CHECK ILL-CONDITIONING
C ------------------------------------------------------------------
IF (KSID.EQ.NDV.OR.ICOUNT.GT.10) GO TO 710
- IF (NVC.EQ.0.AND.SLOPE.GT.0.) GO TO 710
+ IF (NVC.EQ.0.AND.SLOPE.GT.0.) GO TO 710
ALPFES=-1.
ALPMIN=-1.
ALPLN=1.1*ALPSID
ALPNC=ALPSID
ALPCA=ALPSID
- IF (NCON.EQ.0) GO TO 90
+ IF (NCON.EQ.0) GO TO 90
C STORE CONSTRAINT VALUES IN G1.
DO 80 I=1,NCON
G1(I)=G(I)
80 CONTINUE
90 CONTINUE
C ------------------------------------------------------------------
-C MOVE A DISTANCE A2*S
+C MOVE A DISTANCE A2*S
C ------------------------------------------------------------------
ALPTOT=ALPTOT+A2
DO 100 I=1,NDV
- X(I)=X(I)+A2*S(I)
+ X(I)=X(I)+A2*S(I)
100 CONTINUE
IF (IPRINT.LT.5) GO TO 130
WRITE (IOUT,740) A2
- IF (NSCAL.EQ.0) GO TO 120
+ IF (NSCAL.EQ.0) GO TO 120
DO 110 I=1,NDV
-110 G(I)=SCAL(I)*X(I)
+110 G(I)=SCAL(I)*X(I)
WRITE (IOUT,750) (G(I),I=1,NDV)
- GO TO 130
+ GO TO 130
120 WRITE (IOUT,750) (X(I),I=1,NDV)
C ------------------------------------------------------------------
-C UPDATE FUNCTION AND CONSTRAINT VALUES
+C UPDATE FUNCTION AND CONSTRAINT VALUES
C ------------------------------------------------------------------
-130 NCAL(1)=NCAL(1)+1
- JGOTO=1
+130 NCAL(1)=NCAL(1)+1
+ JGOTO=1
RETURN
140 CONTINUE
F2=OBJ
- IF (IPRINT.GE.5) WRITE (IOUT,760) F2
- IF (IPRINT.LT.5.OR.NCON.EQ.0) GO TO 150
- WRITE (IOUT,770)
- WRITE (IOUT,750) (G(I),I=1,NCON)
+ IF (IPRINT.GE.5) WRITE (IOUT,760) F2
+ IF (IPRINT.LT.5.OR.NCON.EQ.0) GO TO 150
+ WRITE (IOUT,770)
+ WRITE (IOUT,750) (G(I),I=1,NCON)
150 CONTINUE
C ------------------------------------------------------------------
-C IDENTIFY ACCAPTABILITY OF DESIGNS F1 AND F2
+C IDENTIFY ACCAPTABILITY OF DESIGNS F1 AND F2
C ------------------------------------------------------------------
C IGOOD = 0 IS ACCAPTABLE.
C CV = MAXIMUM CONSTRAINT VIOLATION.
@@ -149,40 +149,40 @@ SUBROUTINE CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP
CV2=0.
NVC1=0
IF (NCON.EQ.0) GO TO 170
- DO 160 I=1,NCON
- CC=CTAM
+ DO 160 I=1,NCON
+ CC=CTAM
IF (ISC(I).GT.0) CC=CTBM
- C1=G1(I)-CC
+ C1=G1(I)-CC
C2=G(I)-CC
- IF (C2.GT.0.) NVC1=NVC1+1
- IF (C1.GT.CV1) CV1=C1
- IF (C2.GT.CV2) CV2=C2
+ IF (C2.GT.0.) NVC1=NVC1+1
+ IF (C1.GT.CV1) CV1=C1
+ IF (C2.GT.CV2) CV2=C2
160 CONTINUE
- IF (CV1.GT.0.) IGOOD1=1
- IF (CV2.GT.0.) IGOOD2=1
+ IF (CV1.GT.0.) IGOOD1=1
+ IF (CV2.GT.0.) IGOOD2=1
170 CONTINUE
ALP=A2
OBJ=F2
C ------------------------------------------------------------------
-C IF F2 VIOLATES FEWER CONSTRAINTS THAN F1 BUT STILL HAS CONSTRAINT
-C VIOLATIONS RETURN
+C IF F2 VIOLATES FEWER CONSTRAINTS THAN F1 BUT STILL HAS CONSTRAINT
+C VIOLATIONS RETURN
C ------------------------------------------------------------------
IF (NVC1.LT.NVC.AND.NVC1.GT.0) GO TO 710
C ------------------------------------------------------------------
C IDENTIFY BEST OF DESIGNS F1 ANF F2
C ------------------------------------------------------------------
C IBEST CORRESPONDS TO MINIMUM VALUE DESIGN.
-C IF CONSTRAINTS ARE VIOLATED, IBEST CORRESPONDS TO MINIMUM
-C CONSTRAINT VIOLATION.
+C IF CONSTRAINTS ARE VIOLATED, IBEST CORRESPONDS TO MINIMUM
+C CONSTRAINT VIOLATION.
IF (IGOOD1.EQ.0.AND.IGOOD2.EQ.0) GO TO 180
C VIOLATED CONSTRAINTS. PICK MINIMUM VIOLATION.
- IBEST=1
- IF (CV1.GE.CV2) IBEST=2
- GO TO 190
+ IBEST=1
+ IF (CV1.GE.CV2) IBEST=2
+ GO TO 190
180 CONTINUE
-C NO CONSTRAINT VIOLATION. PICK MINIMUM F.
- IBEST=1
- IF (F2.LE.F1) IBEST=2
+C NO CONSTRAINT VIOLATION. PICK MINIMUM F.
+ IBEST=1
+ IF (F2.LE.F1) IBEST=2
190 CONTINUE
II=1
C ------------------------------------------------------------------
@@ -198,146 +198,146 @@ SUBROUTINE CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP
C ------------------------------------------------------------------
C ***** 2 - POINT INTERPOLATION *****
C ------------------------------------------------------------------
- III=0
-200 III=III+1
+ III=0
+200 III=III+1
C1=G1(III)
- C2=G(III)
+ C2=G(III)
IF (ISC(III).EQ.0) GO TO 210
C ------------------------------------------------------------------
C LINEAR CONSTRAINT
C ------------------------------------------------------------------
IF (C1.GE.1.0E-5.AND.C1.LE.CTBM) GO TO 220
- CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A2,C2,ZRO,ZRO)
+ CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A2,C2,ZRO,ZRO)
IF (ALP.LE.0.) GO TO 220
IF (C1.GT.CTBM.AND.ALP.GT.ALPFES) ALPFES=ALP
- IF (C1.LT.CTL.AND.ALP.LT.ALPLN) ALPLN=ALP
- GO TO 220
+ IF (C1.LT.CTL.AND.ALP.LT.ALPLN) ALPLN=ALP
+ GO TO 220
210 CONTINUE
C ------------------------------------------------------------------
-C NON-LINEAR CONSTRAINT
+C NON-LINEAR CONSTRAINT
C ------------------------------------------------------------------
IF (C1.GE.1.0E-5.AND.C1.LE.CTAM) GO TO 220
- CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A2,C2,ZRO,ZRO)
+ CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A2,C2,ZRO,ZRO)
IF (ALP.LE.0.) GO TO 220
IF (C1.GT.CTAM.AND.ALP.GT.ALPFES) ALPFES=ALP
IF (C1.LT.CT.AND.ALP.LT.ALPNC) ALPNC=ALP
220 CONTINUE
IF (III.LT.NCON) GO TO 200
230 CONTINUE
- IF (LINOBJ.GT.0.OR.SLOPE.GE.0.) GO TO 240
-C CALCULATE ALPHA TO MINIMIZE FUNCTION.
+ IF (LINOBJ.GT.0.OR.SLOPE.GE.0.) GO TO 240
+C CALCULATE ALPHA TO MINIMIZE FUNCTION.
CALL CNMN04 (II,ALPMIN,ZRO,ZRO,F1,SLOPE,A2,F2,ZRO,ZRO,ZRO,ZRO)
240 CONTINUE
C ------------------------------------------------------------------
-C PROPOSED MOVE
+C PROPOSED MOVE
C ------------------------------------------------------------------
-C MOVE AT LEAST FAR ENOUGH TO OVERCOME CONSTRAINT VIOLATIONS.
- A3=ALPFES
+C MOVE AT LEAST FAR ENOUGH TO OVERCOME CONSTRAINT VIOLATIONS.
+ A3=ALPFES
C MOVE TO MINIMIZE FUNCTION.
- IF (ALPMIN.GT.A3) A3=ALPMIN
+ IF (ALPMIN.GT.A3) A3=ALPMIN
C IF A3.LE.0, SET A3 = ALPSID.
- IF (A3.LE.0.) A3=ALPSID
-C LIMIT MOVE TO NEW CONSTRAINT ENCOUNTER.
- IF (A3.GT.ALPNC) A3=ALPNC
- IF (A3.GT.ALPLN) A3=ALPLN
-C MAKE A3 NON-ZERO.
- IF (A3.LE.1.0E-20) A3=1.0E-20
-C IF A3=A2=ALPSID AND F2 IS BEST, GO INVOKE SIDE CONSTRAINT
-C MODIFICATION.
- ALPB=1.-A2/A3
- ALPA=1.-ALPSID/A3
- JBEST=0
+ IF (A3.LE.0.) A3=ALPSID
+C LIMIT MOVE TO NEW CONSTRAINT ENCOUNTER.
+ IF (A3.GT.ALPNC) A3=ALPNC
+ IF (A3.GT.ALPLN) A3=ALPLN
+C MAKE A3 NON-ZERO.
+ IF (A3.LE.1.0E-20) A3=1.0E-20
+C IF A3=A2=ALPSID AND F2 IS BEST, GO INVOKE SIDE CONSTRAINT
+C MODIFICATION.
+ ALPB=1.-A2/A3
+ ALPA=1.-ALPSID/A3
+ JBEST=0
IF (ABS(ALPB).LT.1.0E-10.AND.ABS(ALPA).LT.1.0E-10) JBEST=1
- IF (JBEST.EQ.1.AND.IBEST.EQ.2) GO TO 20
+ IF (JBEST.EQ.1.AND.IBEST.EQ.2) GO TO 20
C SIDE CONSTRAINT CHECK NOT SATISFIED.
IF (NCON.EQ.0) GO TO 260
C STORE CONSTRAINT VALUES IN G2.
- DO 250 I=1,NCON
+ DO 250 I=1,NCON
G2(I)=G(I)
250 CONTINUE
260 CONTINUE
-C IF A3=A2, SET A3=.9*A2.
+C IF A3=A2, SET A3=.9*A2.
IF (ABS(ALPB).LT.1.0E-10) A3=.9*A2
-C MOVE AT LEAST .01*A2.
- IF (A3.LT.(.01*A2)) A3=.01*A2
+C MOVE AT LEAST .01*A2.
+ IF (A3.LT.(.01*A2)) A3=.01*A2
C LIMIT MOVE TO 5.*A2.
- IF (A3.GT.(5.*A2)) A3=5.*A2
-C LIMIT MOVE TO ALPSID.
- IF (A3.GT.ALPSID) A3=ALPSID
-C MOVE A DISTANCE A3*S.
- ALP=A3-A2
- ALPTOT=ALPTOT+ALP
+ IF (A3.GT.(5.*A2)) A3=5.*A2
+C LIMIT MOVE TO ALPSID.
+ IF (A3.GT.ALPSID) A3=ALPSID
+C MOVE A DISTANCE A3*S.
+ ALP=A3-A2
+ ALPTOT=ALPTOT+ALP
DO 270 I=1,NDV
X(I)=X(I)+ALP*S(I)
270 CONTINUE
IF (IPRINT.LT.5) GO TO 300
- WRITE (IOUT,780)
+ WRITE (IOUT,780)
WRITE (IOUT,740) A3
- IF (NSCAL.EQ.0) GO TO 290
+ IF (NSCAL.EQ.0) GO TO 290
DO 280 I=1,NDV
-280 G(I)=SCAL(I)*X(I)
+280 G(I)=SCAL(I)*X(I)
WRITE (IOUT,750) (G(I),I=1,NDV)
- GO TO 300
+ GO TO 300
290 WRITE (IOUT,750) (X(I),I=1,NDV)
300 CONTINUE
C ------------------------------------------------------------------
C UPDATE FUNCTION AND CONSTRAINT VALUES
C ------------------------------------------------------------------
- NCAL(1)=NCAL(1)+1
- JGOTO=2
+ NCAL(1)=NCAL(1)+1
+ JGOTO=2
RETURN
310 CONTINUE
F3=OBJ
- IF (IPRINT.GE.5) WRITE (IOUT,760) F3
- IF (IPRINT.LT.5.OR.NCON.EQ.0) GO TO 320
- WRITE (IOUT,770)
- WRITE (IOUT,750) (G(I),I=1,NCON)
+ IF (IPRINT.GE.5) WRITE (IOUT,760) F3
+ IF (IPRINT.LT.5.OR.NCON.EQ.0) GO TO 320
+ WRITE (IOUT,770)
+ WRITE (IOUT,750) (G(I),I=1,NCON)
320 CONTINUE
C ------------------------------------------------------------------
-C CALCULATE MAXIMUM CONSTRAINT VIOLATION AND PICK BEST DESIGN
+C CALCULATE MAXIMUM CONSTRAINT VIOLATION AND PICK BEST DESIGN
C ------------------------------------------------------------------
CV3=0.
IGOOD3=0
NVC1=0
IF (NCON.EQ.0) GO TO 340
- DO 330 I=1,NCON
- CC=CTAM
+ DO 330 I=1,NCON
+ CC=CTAM
IF (ISC(I).GT.0) CC=CTBM
C1=G(I)-CC
- IF (C1.GT.CV3) CV3=C1
- IF (C1.GT.0.) NVC1=NVC1+1
+ IF (C1.GT.CV3) CV3=C1
+ IF (C1.GT.0.) NVC1=NVC1+1
330 CONTINUE
- IF (CV3.GT.0.) IGOOD3=1
+ IF (CV3.GT.0.) IGOOD3=1
340 CONTINUE
C DETERMINE BEST DESIGN.
- IF (IBEST.EQ.2) GO TO 360
-C CHOOSE BETWEEN F1 AND F3.
+ IF (IBEST.EQ.2) GO TO 360
+C CHOOSE BETWEEN F1 AND F3.
IF (IGOOD1.EQ.0.AND.IGOOD3.EQ.0) GO TO 350
- IF (CV1.GE.CV3) IBEST=3
- GO TO 380
-350 IF (F3.LE.F1) IBEST=3
- GO TO 380
+ IF (CV1.GE.CV3) IBEST=3
+ GO TO 380
+350 IF (F3.LE.F1) IBEST=3
+ GO TO 380
360 CONTINUE
-C CHOOSE BETWEEN F2 AND F3.
+C CHOOSE BETWEEN F2 AND F3.
IF (IGOOD2.EQ.0.AND.IGOOD3.EQ.0) GO TO 370
- IF (CV2.GE.CV3) IBEST=3
- GO TO 380
-370 IF (F3.LE.F2) IBEST=3
+ IF (CV2.GE.CV3) IBEST=3
+ GO TO 380
+370 IF (F3.LE.F2) IBEST=3
380 CONTINUE
ALP=A3
OBJ=F3
C IF F3 VIOLATES FEWER CONSTRAINTS THAN F1 RETURN.
IF (NVC1.LT.NVC) GO TO 710
C IF OBJECTIVE AND ALL CONSTRAINTS ARE LINEAR, RETURN.
- IF (LINOBJ.NE.0.AND.NLNC.EQ.NCON) GO TO 710
+ IF (LINOBJ.NE.0.AND.NLNC.EQ.NCON) GO TO 710
C IF A3 = ALPLN AND F3 IS BOTH GOOD AND BEST RETURN.
ALPB=1.-ALPLN/A3
IF ((ABS(ALPB).LT.1.0E-20.AND.IBEST.EQ.3).AND.(IGOOD3.EQ.0)) GO TO
1 710
C IF A3 = ALPSID AND F3 IS BEST, GO INVOKE SIDE CONSTRAINT
-C MODIFICATION.
- ALPA=1.-ALPSID/A3
- IF (ABS(ALPA).LT.1.0E-20.AND.IBEST.EQ.3) GO TO 20
+C MODIFICATION.
+ ALPA=1.-ALPSID/A3
+ IF (ABS(ALPA).LT.1.0E-20.AND.IBEST.EQ.3) GO TO 20
C ------------------------------------------------------------------
C ********** 3 - POINT INTERPOLATION *********
C ------------------------------------------------------------------
@@ -346,7 +346,7 @@ SUBROUTINE CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP
ALPFES=-1.
ALPMIN=-1.
C ------------------------------------------------------------------
-C IF A3 IS GREATER THAN A2 AND CV3 IS GREATER THAN CV2, SET
+C IF A3 IS GREATER THAN A2 AND CV3 IS GREATER THAN CV2, SET
C MOVE LIMITS TO A3. PROGRAM MOD-FEB, 1981, GV.
C ------------------------------------------------------------------
IF(A3.LE.A2.OR.CV3.LE.CV2) GO TO 285
@@ -355,199 +355,199 @@ SUBROUTINE CNMN06 (X,VLB,VUB,G,SCAL,DF,S,G1,G2,CTAM,CTBM,SLOPE,ALP
ALPCA=A3
285 CONTINUE
IF (NCON.EQ.0) GO TO 440
- III=0
-390 III=III+1
+ III=0
+390 III=III+1
C1=G1(III)
C2=G2(III)
- C3=G(III)
+ C3=G(III)
IF (ISC(III).EQ.0) GO TO 400
C ------------------------------------------------------------------
C LINEAR CONSTRAINT. FIND ALPFES ONLY. ALPLN SAME AS BEFORE.
C ------------------------------------------------------------------
- IF (C1.LE.CTBM) GO TO 430
+ IF (C1.LE.CTBM) GO TO 430
II=1
- CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A3,C3,ZRO,ZRO)
- IF (ALP.GT.ALPFES) ALPFES=ALP
- GO TO 430
+ CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A3,C3,ZRO,ZRO)
+ IF (ALP.GT.ALPFES) ALPFES=ALP
+ GO TO 430
400 CONTINUE
C ------------------------------------------------------------------
-C NON-LINEAR CONSTRAINT
+C NON-LINEAR CONSTRAINT
C ------------------------------------------------------------------
II=2
- CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A2,C2,A3,C3)
- IF (ALP.LE.ZRO) GO TO 430
+ CALL CNMN07 (II,ALP,ZRO,ZRO,C1,A2,C2,A3,C3)
+ IF (ALP.LE.ZRO) GO TO 430
IF (C1.GE.CT.AND.C1.LE.0.) GO TO 410
- IF (C1.GT.CTAM.OR.C1.LT.0.) GO TO 420
-C ALP IS MINIMUM MOVE. UPDATE FOR NEXT CONSTRAINT ENCOUNTER.
+ IF (C1.GT.CTAM.OR.C1.LT.0.) GO TO 420
+C ALP IS MINIMUM MOVE. UPDATE FOR NEXT CONSTRAINT ENCOUNTER.
410 ALPA=ALP
CALL CNMN07 (II,ALP,ALPA,ZRO,C1,A2,C2,A3,C3)
- IF (ALP.LT.ALPCA.AND.ALP.GE.ALPA) ALPCA=ALP
- GO TO 430
+ IF (ALP.LT.ALPCA.AND.ALP.GE.ALPA) ALPCA=ALP
+ GO TO 430
420 CONTINUE
IF (ALP.GT.ALPFES.AND.C1.GT.CTAM) ALPFES=ALP
IF (ALP.LT.ALPNC.AND.C1.LT.0.) ALPNC=ALP
430 CONTINUE
IF (III.LT.NCON) GO TO 390
440 CONTINUE
- IF (LINOBJ.GT.0.OR.SLOPE.GT.0.) GO TO 450
+ IF (LINOBJ.GT.0.OR.SLOPE.GT.0.) GO TO 450
C ------------------------------------------------------------------
-C CALCULATE ALPHA TO MINIMIZE FUNCTION
+C CALCULATE ALPHA TO MINIMIZE FUNCTION
C ------------------------------------------------------------------
II=3
- IF (A2.GT.A3.AND.(IGOOD2.EQ.0.AND.IBEST.EQ.2)) II=2
+ IF (A2.GT.A3.AND.(IGOOD2.EQ.0.AND.IBEST.EQ.2)) II=2
CALL CNMN04 (II,ALPMIN,ZRO,ZRO,F1,SLOPE,A2,F2,A3,F3,ZRO,ZRO)
450 CONTINUE
C ------------------------------------------------------------------
-C PROPOSED MOVE
+C PROPOSED MOVE
C ------------------------------------------------------------------
-C MOVE AT LEAST ENOUGH TO OVERCOME CONSTRAINT VIOLATIONS.
- A4=ALPFES
+C MOVE AT LEAST ENOUGH TO OVERCOME CONSTRAINT VIOLATIONS.
+ A4=ALPFES
C MOVE TO MINIMIZE FUNCTION.
- IF (ALPMIN.GT.A4) A4=ALPMIN
+ IF (ALPMIN.GT.A4) A4=ALPMIN
C IF A4.LE.0, SET A4 = ALPSID.
- IF (A4.LE.0.) A4=ALPSID
-C LIMIT MOVE TO NEW CONSTRAINT ENCOUNTER.
- IF (A4.GT.ALPLN) A4=ALPLN
- IF (A4.GT.ALPNC) A4=ALPNC
-C LIMIT MOVE TO RE-ENCOUNTER CURRENTLY ACTIVE CONSTRAINT.
- IF (A4.GT.ALPCA) A4=ALPCA
+ IF (A4.LE.0.) A4=ALPSID
+C LIMIT MOVE TO NEW CONSTRAINT ENCOUNTER.
+ IF (A4.GT.ALPLN) A4=ALPLN
+ IF (A4.GT.ALPNC) A4=ALPNC
+C LIMIT MOVE TO RE-ENCOUNTER CURRENTLY ACTIVE CONSTRAINT.
+ IF (A4.GT.ALPCA) A4=ALPCA
C LIMIT A4 TO 5.*A3.
- IF (A4.GT.(5.*A3)) A4=5.*A3
+ IF (A4.GT.(5.*A3)) A4=5.*A3
C UPDATE DESIGN.
IF (IBEST.NE.3.OR.NCON.EQ.0) GO TO 470
-C STORE CONSTRAINT VALUES IN G2. F3 IS BEST. F2 IS NOT.
- DO 460 I=1,NCON
+C STORE CONSTRAINT VALUES IN G2. F3 IS BEST. F2 IS NOT.
+ DO 460 I=1,NCON
G2(I)=G(I)
460 CONTINUE
470 CONTINUE
-C IF A4=A3 AND IGOOD1=0 AND IGOOD3=1, SET A4=.9*A3.
- ALP=A4-A3
+C IF A4=A3 AND IGOOD1=0 AND IGOOD3=1, SET A4=.9*A3.
+ ALP=A4-A3
IF ((IGOOD1.EQ.0.AND.IGOOD3.EQ.1).AND.ABS(ALP).LT.1.0E-20) A4=.9*A
- 13
+ 13
C ------------------------------------------------------------------
C MOVE A DISTANCE A4*S
C ------------------------------------------------------------------
- ALP=A4-A3
- ALPTOT=ALPTOT+ALP
+ ALP=A4-A3
+ ALPTOT=ALPTOT+ALP
DO 480 I=1,NDV
X(I)=X(I)+ALP*S(I)
480 CONTINUE
IF (IPRINT.LT.5) GO TO 510
- WRITE (IOUT,720)
+ WRITE (IOUT,720)
WRITE (IOUT,740) A4
- IF (NSCAL.EQ.0) GO TO 500
+ IF (NSCAL.EQ.0) GO TO 500
DO 490 I=1,NDV
-490 G(I)=SCAL(I)*X(I)
+490 G(I)=SCAL(I)*X(I)
WRITE (IOUT,750) (G(I),I=1,NDV)
- GO TO 510
+ GO TO 510
500 WRITE (IOUT,750) (X(I),I=1,NDV)
510 CONTINUE
C ------------------------------------------------------------------
C UPDATE FUNCTION AND CONSTRAINT VALUES
C ------------------------------------------------------------------
- NCAL(1)=NCAL(1)+1
- JGOTO=3
+ NCAL(1)=NCAL(1)+1
+ JGOTO=3
RETURN
520 CONTINUE
F4=OBJ
- IF (IPRINT.GE.5) WRITE (IOUT,760) F4
- IF (IPRINT.LT.5.OR.NCON.EQ.0) GO TO 530
- WRITE (IOUT,770)
- WRITE (IOUT,750) (G(I),I=1,NCON)
+ IF (IPRINT.GE.5) WRITE (IOUT,760) F4
+ IF (IPRINT.LT.5.OR.NCON.EQ.0) GO TO 530
+ WRITE (IOUT,770)
+ WRITE (IOUT,750) (G(I),I=1,NCON)
530 CONTINUE
C DETERMINE ACCAPTABILITY OF F4.
IGOOD4=0
CV4=0.
IF (NCON.EQ.0) GO TO 550
- DO 540 I=1,NCON
- CC=CTAM
+ DO 540 I=1,NCON
+ CC=CTAM
IF (ISC(I).GT.0) CC=CTBM
C1=G(I)-CC
- IF (C1.GT.CV4) CV4=C1
+ IF (C1.GT.CV4) CV4=C1
540 CONTINUE
- IF (CV4.GT.0.) IGOOD4=1
+ IF (CV4.GT.0.) IGOOD4=1
550 CONTINUE
ALP=A4
OBJ=F4
C ------------------------------------------------------------------
-C DETERMINE BEST DESIGN
+C DETERMINE BEST DESIGN
C ------------------------------------------------------------------
- GO TO (560,610,660),IBEST
+ GO TO (560,610,660),IBEST
560 CONTINUE
-C CHOOSE BETWEEN F1 AND F4.
+C CHOOSE BETWEEN F1 AND F4.
IF (IGOOD1.EQ.0.AND.IGOOD4.EQ.0) GO TO 570
- IF (CV1.GT.CV4) GO TO 710
- GO TO 580
+ IF (CV1.GT.CV4) GO TO 710
+ GO TO 580
570 CONTINUE
- IF (F4.LE.F1) GO TO 710
+ IF (F4.LE.F1) GO TO 710
580 CONTINUE
-C F1 IS BEST.
+C F1 IS BEST.
ALPTOT=ALPTOT-A4
OBJ=F1
DO 590 I=1,NDV
- X(I)=X(I)-A4*S(I)
+ X(I)=X(I)-A4*S(I)
590 CONTINUE
IF (NCON.EQ.0) GO TO 710
- DO 600 I=1,NCON
+ DO 600 I=1,NCON
G(I)=G1(I)
600 CONTINUE
- GO TO 710
+ GO TO 710
610 CONTINUE
-C CHOOSE BETWEEN F2 AND F4.
+C CHOOSE BETWEEN F2 AND F4.
IF (IGOOD2.EQ.0.AND.IGOOD4.EQ.0) GO TO 620
- IF (CV2.GT.CV4) GO TO 710
- GO TO 630
+ IF (CV2.GT.CV4) GO TO 710
+ GO TO 630
620 CONTINUE
- IF (F4.LE.F2) GO TO 710
+ IF (F4.LE.F2) GO TO 710
630 CONTINUE
-C F2 IS BEST.
+C F2 IS BEST.
OBJ=F2
A2=A4-A2
ALPTOT=ALPTOT-A2
DO 640 I=1,NDV
- X(I)=X(I)-A2*S(I)
+ X(I)=X(I)-A2*S(I)
640 CONTINUE
IF (NCON.EQ.0) GO TO 710
- DO 650 I=1,NCON
+ DO 650 I=1,NCON
G(I)=G2(I)
650 CONTINUE
- GO TO 710
+ GO TO 710
660 CONTINUE
-C CHOOSE BETWEEN F3 AND F4.
+C CHOOSE BETWEEN F3 AND F4.
IF (IGOOD3.EQ.0.AND.IGOOD4.EQ.0) GO TO 670
- IF (CV3.GT.CV4) GO TO 710
- GO TO 680
+ IF (CV3.GT.CV4) GO TO 710
+ GO TO 680
670 CONTINUE
- IF (F4.LE.F3) GO TO 710
+ IF (F4.LE.F3) GO TO 710
680 CONTINUE
-C F3 IS BEST.
+C F3 IS BEST.
OBJ=F3
A3=A4-A3
ALPTOT=ALPTOT-A3
DO 690 I=1,NDV
- X(I)=X(I)-A3*S(I)
+ X(I)=X(I)-A3*S(I)
690 CONTINUE
IF (NCON.EQ.0) GO TO 710
- DO 700 I=1,NCON
+ DO 700 I=1,NCON
G(I)=G2(I)
700 CONTINUE
710 CONTINUE
ALP=ALPTOT
IF (IPRINT.GE.5) WRITE (IOUT,790)
- JGOTO=0
+ JGOTO=0
RETURN
C ------------------------------------------------------------------
C FORMATS
C ------------------------------------------------------------------
-C
-C
-720 FORMAT (/5X,25HTHREE-POINT INTERPOLATION)
+C
+C
+720 FORMAT (/5X,25HTHREE-POINT INTERPOLATION)
730 FORMAT (/////58H* * * CONSTRAINED ONE-DIMENSIONAL SEARCH INFORMATI
- 1ON * * *)
-740 FORMAT (//5X,15HPROPOSED DESIGN/5X,7HALPHA =,E12.5/5X,8HX-VECTOR)
+ 1ON * * *)
+740 FORMAT (//5X,15HPROPOSED DESIGN/5X,7HALPHA =,E12.5/5X,8HX-VECTOR)
750 FORMAT (1X,8E12.4)
760 FORMAT (/5X,5HOBJ =,E13.5)
-770 FORMAT (/5X,17HCONSTRAINT VALUES)
-780 FORMAT (/5X,23HTWO-POINT INTERPOLATION)
-790 FORMAT (/5X,35H* * * END OF ONE-DIMENSIONAL SEARCH)
- END
+770 FORMAT (/5X,17HCONSTRAINT VALUES)
+780 FORMAT (/5X,23HTWO-POINT INTERPOLATION)
+790 FORMAT (/5X,35H* * * END OF ONE-DIMENSIONAL SEARCH)
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn07.f b/pyoptsparse/pyCONMIN/source/cnmn07.f
index 65fdace0..546a3ad8 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn07.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn07.f
@@ -2,66 +2,66 @@ SUBROUTINE CNMN07 (II,XBAR,EPS,X1,Y1,X2,Y2,X3,Y3)
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
C ROUTINE TO FIND FIRST XBAR.GE.EPS CORRESPONDING TO A REAL ZERO
C OF A ONE-DIMENSIONAL FUNCTION BY POLYNOMIEL INTERPOLATION.
-C BY G. N. VANDERPLAATS APRIL, 1972.
-C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
-C II = CALCULATION CONTROL.
-C 1: 2-POINT LINEAR INTERPOLATION, GIVEN X1, Y1, X2 AND Y2.
-C 2: 3-POINT QUADRATIC INTERPOLATION, GIVEN X1, Y1, X2, Y2,
-C X3 AND Y3.
+C BY G. N. VANDERPLAATS APRIL, 1972.
+C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
+C II = CALCULATION CONTROL.
+C 1: 2-POINT LINEAR INTERPOLATION, GIVEN X1, Y1, X2 AND Y2.
+C 2: 3-POINT QUADRATIC INTERPOLATION, GIVEN X1, Y1, X2, Y2,
+C X3 AND Y3.
C EPS MAY BE NEGATIVE.
C IF REQUIRED ZERO ON Y DOES NOT EXITS, OR THE FUNCTION IS
C ILL-CONDITIONED, XBAR = EPS-1.0 WILL BE RETURNED AS AN ERROR
C INDICATOR.
C IF DESIRED INTERPOLATION IS ILL-CONDITIONED, A LOWER ORDER
C INTERPOLATION, CONSISTANT WITH INPUT DATA, WILL BE ATTEMPTED AND
-C II WILL BE CHANGED ACCORDINGLY.
+C II WILL BE CHANGED ACCORDINGLY.
XBAR1=EPS-1.
XBAR=XBAR1
JJ=0
- X21=X2-X1
- IF (ABS(X21).LT.1.0E-20) RETURN
- IF (II.EQ.2) GO TO 30
-C
+ X21=X2-X1
+ IF (ABS(X21).LT.1.0E-20) RETURN
+ IF (II.EQ.2) GO TO 30
+C
10 CONTINUE
C ------------------------------------------------------------------
-C II=1: 2-POINT LINEAR INTERPOLATION
+C II=1: 2-POINT LINEAR INTERPOLATION
C ------------------------------------------------------------------
II=1
YY=Y1*Y2
- IF (JJ.EQ.0.OR.YY.LT.0.) GO TO 20
+ IF (JJ.EQ.0.OR.YY.LT.0.) GO TO 20
C INTERPOLATE BETWEEN X2 AND X3.
DY=Y3-Y2
IF (ABS(DY).LT.1.0E-20) GO TO 20
- XBAR=X2+Y2*(X2-X3)/DY
- IF (XBAR.LT.EPS) XBAR=XBAR1
+ XBAR=X2+Y2*(X2-X3)/DY
+ IF (XBAR.LT.EPS) XBAR=XBAR1
RETURN
20 DY=Y2-Y1
C INTERPOLATE BETWEEN X1 AND X2.
IF (ABS(DY).LT.1.0E-20) RETURN
- XBAR=X1+Y1*(X1-X2)/DY
- IF (XBAR.LT.EPS) XBAR=XBAR1
+ XBAR=X1+Y1*(X1-X2)/DY
+ IF (XBAR.LT.EPS) XBAR=XBAR1
RETURN
30 CONTINUE
C ------------------------------------------------------------------
-C II=2: 3-POINT QUADRATIC INTERPOLATION
+C II=2: 3-POINT QUADRATIC INTERPOLATION
C ------------------------------------------------------------------
JJ=1
- X31=X3-X1
- X32=X3-X2
+ X31=X3-X1
+ X32=X3-X2
QQ=X21*X31*X32
IF (ABS(QQ).LT.1.0E-20) RETURN
AA=(Y1*X32-Y2*X31+Y3*X21)/QQ
IF (ABS(AA).LT.1.0E-20) GO TO 10
- BB=(Y2-Y1)/X21-AA*(X1+X2)
- CC=Y1-X1*(AA*X1+BB)
+ BB=(Y2-Y1)/X21-AA*(X1+X2)
+ CC=Y1-X1*(AA*X1+BB)
BAC=BB*BB-4.*AA*CC
- IF (BAC.LT.0.) GO TO 10
- BAC=SQRT(BAC)
+ IF (BAC.LT.0.) GO TO 10
+ BAC=SQRT(BAC)
AA=.5/AA
XBAR=AA*(BAC-BB)
XB2=-AA*(BAC+BB)
- IF (XBAR.LT.EPS) XBAR=XB2
+ IF (XBAR.LT.EPS) XBAR=XB2
IF (XB2.LT.XBAR.AND.XB2.GT.EPS) XBAR=XB2
- IF (XBAR.LT.EPS) XBAR=XBAR1
+ IF (XBAR.LT.EPS) XBAR=XBAR1
RETURN
- END
\ No newline at end of file
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn08.f b/pyoptsparse/pyCONMIN/source/cnmn08.f
index cf4be6c1..925ec09b 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn08.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn08.f
@@ -4,109 +4,109 @@ SUBROUTINE CNMN08 (NDB,NER,C,MS1,B,N3,N4,N5)
C ROUTINE TO SOLVE SPECIAL LINEAR PROBLEM FOR IMPOSING S-TRANSPOSE
C TIMES S.LE.1 BOUNDS IN THE MODIFIED METHOD OF FEASIBLE DIRECTIONS.
C BY G. N. VANDERPLAATS APRIL, 1972.
-C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
+C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF.
C REF. 'STRUCTURAL OPTIMIZATION BY METHODS OF FEASIBLE DIRECTIONS',
-C G. N. VANDERPLAATS AND F. MOSES, JOURNAL OF COMPUTERS
+C G. N. VANDERPLAATS AND F. MOSES, JOURNAL OF COMPUTERS
C AND STRUCTURES, VOL 3, PP 739-755, 1973.
C FORM OF L. P. IS BX=C WHERE 1ST NDB COMPONENTS OF X CONTAIN VECTOR
C U AND LAST NDB COMPONENTS CONTAIN VECTOR V. CONSTRAINTS ARE
C U.GE.0, V.GE.0, AND U-TRANSPOSE TIMES V = 0.
-C NER = ERROR FLAG. IF NER.NE.0 ON RETURN, PROCESS HAS NOT
+C NER = ERROR FLAG. IF NER.NE.0 ON RETURN, PROCESS HAS NOT
C CONVERGED IN 5*NDB ITERATIONS.
-C VECTOR MS1 IDENTIFIES THE SET OF BASIC VARIABLES.
+C VECTOR MS1 IDENTIFIES THE SET OF BASIC VARIABLES.
C ------------------------------------------------------------------
C CHOOSE INITIAL BASIC VARIABLES AS V, AND INITIALIZE VECTOR MS1
C ------------------------------------------------------------------
- NER=1
+ NER=1
M2=2*NDB
-C CALCULATE CBMIN AND EPS AND INITIALIZE MS1.
+C CALCULATE CBMIN AND EPS AND INITIALIZE MS1.
EPS=-1.0E+10
CBMIN=0.
- DO 10 I=1,NDB
- BI=B(I,I)
+ DO 10 I=1,NDB
+ BI=B(I,I)
CBMAX=0.
IF (BI.LT.-1.0E-6) CBMAX=C(I)/BI
- IF (BI.GT.EPS) EPS=BI
- IF (CBMAX.GT.CBMIN) CBMIN=CBMAX
+ IF (BI.GT.EPS) EPS=BI
+ IF (CBMAX.GT.CBMIN) CBMIN=CBMAX
10 MS1(I)=0
- EPS=.0001*EPS
-C IF (EPS.LT.-1.0E-10) EPS=-1.0E-10
-C
+ EPS=.0001*EPS
+C IF (EPS.LT.-1.0E-10) EPS=-1.0E-10
+C
C E-10 CHANGED TO E-03 ON 1/12/81
-C
- IF (EPS.LT.-1.0E-03) EPS=-1.0E-03
- IF (EPS.GT.-.0001) EPS=-.0001
+C
+ IF (EPS.LT.-1.0E-03) EPS=-1.0E-03
+ IF (EPS.GT.-.0001) EPS=-.0001
CBMIN=CBMIN*1.0E-6
-C IF (CBMIN.LT.1.0E-10) CBMIN=1.0E-10
-C
+C IF (CBMIN.LT.1.0E-10) CBMIN=1.0E-10
+C
C E-10 CHANGED TO E-05 ON 1/12/81
-C
- IF (CBMIN.LT.1.0E-05) CBMIN=1.0E-05
- ITER1=0
+C
+ IF (CBMIN.LT.1.0E-05) CBMIN=1.0E-05
+ ITER1=0
NMAX=5*NDB
C ------------------------------------------------------------------
C ********** BEGIN NEW ITERATION **********
C ------------------------------------------------------------------
-20 ITER1=ITER1+1
- IF (ITER1.GT.NMAX) RETURN
+20 ITER1=ITER1+1
+ IF (ITER1.GT.NMAX) RETURN
C FIND MAX. C(I)/B(I,I) FOR I=1,NDB.
CBMAX=.9*CBMIN
ICHK=0
- DO 30 I=1,NDB
- C1=C(I)
- BI=B(I,I)
-C IF (BI.GT.EPS.OR.C1.GT.0.) GO TO 30
- IF (BI.GT.EPS.OR.C1.GT.-1.0E-05) GO TO 30
-C
+ DO 30 I=1,NDB
+ C1=C(I)
+ BI=B(I,I)
+C IF (BI.GT.EPS.OR.C1.GT.0.) GO TO 30
+ IF (BI.GT.EPS.OR.C1.GT.-1.0E-05) GO TO 30
+C
C 0. CHANGED TO -1.0E-05 ON 1/12/81
-C
+C
CB=C1/BI
- IF (CB.LE.CBMAX) GO TO 30
+ IF (CB.LE.CBMAX) GO TO 30
ICHK=I
CBMAX=CB
30 CONTINUE
IF (CBMAX.LT.CBMIN) GO TO 70
- IF (ICHK.EQ.0) GO TO 70
+ IF (ICHK.EQ.0) GO TO 70
C UPDATE VECTOR MS1.
- JJ=ICHK
- IF (MS1(JJ).EQ.0) JJ=ICHK+NDB
- KK=JJ+NDB
- IF (KK.GT.M2) KK=JJ-NDB
+ JJ=ICHK
+ IF (MS1(JJ).EQ.0) JJ=ICHK+NDB
+ KK=JJ+NDB
+ IF (KK.GT.M2) KK=JJ-NDB
MS1(KK)=ICHK
- MS1(JJ)=0
+ MS1(JJ)=0
C ------------------------------------------------------------------
-C PIVOT OF B(ICHK,ICHK)
+C PIVOT OF B(ICHK,ICHK)
C ------------------------------------------------------------------
BB=1./B(ICHK,ICHK)
- DO 40 J=1,NDB
+ DO 40 J=1,NDB
40 B(ICHK,J)=BB*B(ICHK,J)
- C(ICHK)=CBMAX
- B(ICHK,ICHK)=BB
+ C(ICHK)=CBMAX
+ B(ICHK,ICHK)=BB
C ELIMINATE COEFICIENTS ON VARIABLE ENTERING BASIS AND STORE
-C COEFICIENTS ON VARIABLE LEAVING BASIS IN THEIR PLACE.
- DO 60 I=1,NDB
- IF (I.EQ.ICHK) GO TO 60
- BB1=B(I,ICHK)
+C COEFICIENTS ON VARIABLE LEAVING BASIS IN THEIR PLACE.
+ DO 60 I=1,NDB
+ IF (I.EQ.ICHK) GO TO 60
+ BB1=B(I,ICHK)
B(I,ICHK)=0.
- DO 50 J=1,NDB
-50 B(I,J)=B(I,J)-BB1*B(ICHK,J)
- C(I)=C(I)-BB1*CBMAX
+ DO 50 J=1,NDB
+50 B(I,J)=B(I,J)-BB1*B(ICHK,J)
+ C(I)=C(I)-BB1*CBMAX
60 CONTINUE
GO TO 20
70 CONTINUE
- NER=0
+ NER=0
C ------------------------------------------------------------------
-C STORE ONLY COMPONENTS OF U-VECTOR IN 'C'. USE B(I,1) FOR
-C TEMPORARY STORAGE
+C STORE ONLY COMPONENTS OF U-VECTOR IN 'C'. USE B(I,1) FOR
+C TEMPORARY STORAGE
C ------------------------------------------------------------------
- DO 80 I=1,NDB
- B(I,1)=C(I)
+ DO 80 I=1,NDB
+ B(I,1)=C(I)
80 CONTINUE
- DO 90 I=1,NDB
- C(I)=0.
+ DO 90 I=1,NDB
+ C(I)=0.
J=MS1(I)
- IF (J.GT.0) C(I)=B(J,1)
- IF (C(I).LT.0.) C(I)=0.
+ IF (J.GT.0) C(I)=B(J,1)
+ IF (C(I).LT.0.) C(I)=0.
90 CONTINUE
RETURN
- END
\ No newline at end of file
+ END
diff --git a/pyoptsparse/pyCONMIN/source/cnmn09.f b/pyoptsparse/pyCONMIN/source/cnmn09.f
index 6e3b5e6b..11ba4bec 100644
--- a/pyoptsparse/pyCONMIN/source/cnmn09.f
+++ b/pyoptsparse/pyCONMIN/source/cnmn09.f
@@ -1,39 +1,39 @@
SUBROUTINE CNMN09(CNMNFUN,CNMNGRD,X,G,IC,DF,A,
. N1,N2,N3,N4,N5)
-
+
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
-
+
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,
. CTMIN,CTL,CTLMIN,ALPHAX,ABOBJ1,THETA,OBJ,
. NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,
. ITMAX,ITRM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER
-
+
COMMON /VARABLE/ AOBJ
COMMON /FEVALS/ NFUN,NGRD
-
+
DIMENSION X(N1),G(N2),IC(N2),DF(N1),A(N1,N2)
-
+
EXTERNAL CNMNFUN,CNMNGRD
C
C
IF(INFO.GE.2) GO TO 10
-C
+C
C OBJECTIVE FUNCTION & CONSTRAINTS
-C
+C
CALL CNMNFUN(N1,N2,X,AOBJ,G)
NFUN=NFUN+1
GO TO 20
-
+
10 CONTINUE
C
C
C GRADIENT INFORMATION
-C
+C
CALL CNMNGRD(N1,N2,X,AOBJ,G,CT,DF,A,IC,NAC)
NGRD=NGRD+1
20 CONTINUE
-
+
RETURN
- END
+ END
diff --git a/pyoptsparse/pyCONMIN/source/conmin.f b/pyoptsparse/pyCONMIN/source/conmin.f
index 36d84034..3691ff0a 100644
--- a/pyoptsparse/pyCONMIN/source/conmin.f
+++ b/pyoptsparse/pyCONMIN/source/conmin.f
@@ -1,34 +1,34 @@
SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
1 N1,N2,N3,N4,N5,IPRINT_,IOUT_,IFILE,ITMAX_,DELFUN_,
2 DABFUN_,ITRM_,NFEASCT_,NFDG_,NFUN_,NGRD_,CNMNFUN,CNMNGRD)
-
+
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
-
+
EXTERNAL CNMNFUN,CNMNGRD
-
+
CHARACTER*(*) IFILE
-
+
DIMENSION X_(NDV_),VLB_(NDV_),VUB_(NDV_),G_(NCON_)
-
+
DIMENSION X(N1),VLB(N1),VUB(N1),SCAL(N1),S(N1),DF(N1)
DIMENSION G(N2),G1(N2),G2(N2),ISC(N2)
DIMENSION IC(N3),B(N3,N3)
DIMENSION C(N4)
DIMENSION MS1(N5)
DIMENSION A(N1,N3)
-
+
COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,
- . ALPHAX,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,
- . NFDG,NSCAL,LINOBJ,ITMAX,ITRM,ICNDIR,IGOTO,NAC,
+ . ALPHAX,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,
+ . NFDG,NSCAL,LINOBJ,ITMAX,ITRM,ICNDIR,IGOTO,NAC,
. INFO,INFOG,ITER,NFEASCT
-
+
COMMON /VARABLE/ AOBJ
COMMON /OUTPUT/ IOUT
COMMON /FEVALS/ NFUN,NGRD
-C
-C INITIALIZE
-C
- INFOG=0
+C
+C INITIALIZE
+C
+ INFOG=0
INFO=0
NDV=NDV_
NCON=NCON_
@@ -39,7 +39,7 @@ SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
5 CONTINUE
IPRINT=IPRINT_
ITMAX=ITMAX_
- DO 6 J=1,NCON
+ DO 6 J=1,NCON
ISC(J)=0
6 CONTINUE
NFDG=NFDG_
@@ -48,25 +48,25 @@ SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
NSCAL=0
NFEASCT=NFEASCT_
FDCH=0.0
- FDCHM=0.0
+ FDCHM=0.0
CT=0.0
CTMIN=0.0
- CTL=0.0
+ CTL=0.0
CTLMIN=0.0
- THETA=0.0
- PHI=0.0
+ THETA=0.0
+ PHI=0.0
DELFUN=DELFUN_
DABFUN=DABFUN_
LINOBJ=0.0
ITRM=ITRM_
ALPHAX=0.0
ABOBJ1=0.0
-C
+C
NFUN=0
NGRD=0
-C
+C
C OPEN WRITE FILE
-C
+C
IOUT=IOUT_
IF (IPRINT.EQ.0) GO TO 10
OPEN(UNIT=IOUT,FILE=IFILE(1:LEN_TRIM(IFILE)),
@@ -74,27 +74,27 @@ SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
10 CONTINUE
C
C MAXIMUM NUMBER OF ITERATIONS
-C
+C
NLIM=ITMAX*(NDV+5)
-C
+C
C NON-ITERATIVE PART OF ANALYSIS
-C
- IGOTO = 0
-C
+C
+ IGOTO = 0
+C
C ITERATIVE PART OF ANALYSIS
-C
+C
DO 20 I = 1,NLIM
C
- LOOPCNT=I
-C
+ LOOPCNT=I
+C
C CALL THE OPTIMIZATION ROUTINE CONMIN
-C
+C
CALL CNMN00(X,VLB,VUB,G,SCAL,DF,A,S,G1,G2,B,
. C,ISC,IC,MS1,N1,N2,N3,N4,N5)
C
C CHECK TERMINATION CRITERIA
C
- IF(IGOTO.EQ.0) LOOPCNT=-999
+ IF(IGOTO.EQ.0) LOOPCNT=-999
C
C ANALYSIS MODULE
C
@@ -107,7 +107,7 @@ SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
C
30 CONTINUE
C
-C PRINT FINAL RESULTS
+C PRINT FINAL RESULTS
C
IF (IPRINT.EQ.0) GO TO 32
WRITE(6,1650) NFUN-1
@@ -126,7 +126,7 @@ SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
36 CONTINUE
NFUN_=NFUN-1
NGRD_=NGRD
-
+
RETURN
C ------------------------------------------------------------------
@@ -134,5 +134,5 @@ SUBROUTINE CONMIN(NDV_,NCON_,X_,VLB_,VUB_,OBJ_,G_,
C ------------------------------------------------------------------
1650 FORMAT(//8X,'NUMBER OF FUNC-CALLS: NFUN =',I5)
1750 FORMAT(8X,'NUMBER OF GRAD-CALLS: NGRD =',I5)
-
+
END
diff --git a/pyoptsparse/pyCONMIN/source/f2py/README b/pyoptsparse/pyCONMIN/source/f2py/README
index 54e48d04..94c094bd 100644
--- a/pyoptsparse/pyCONMIN/source/f2py/README
+++ b/pyoptsparse/pyCONMIN/source/f2py/README
@@ -1,2 +1,2 @@
-This directory contains the f2py signature file.
+This directory contains the f2py signature file.
Do not edit these file unless you really know what you are doing.
diff --git a/pyoptsparse/pyCONMIN/source/f2py/conmin.pyf b/pyoptsparse/pyCONMIN/source/f2py/conmin.pyf
index e6a4488b..0204e0a8 100644
--- a/pyoptsparse/pyCONMIN/source/f2py/conmin.pyf
+++ b/pyoptsparse/pyCONMIN/source/f2py/conmin.pyf
@@ -1,8 +1,8 @@
! -*- f90 -*-
! Note: the context of this file is case sensitive.
-python module conmin__user__routines
- interface conmin_user_interface
+python module conmin__user__routines
+ interface conmin_user_interface
subroutine cnmnfun(n1,n2,x,aobj,g)
integer intent(in) :: n1
integer intent(in) :: n2
@@ -24,7 +24,7 @@ python module conmin__user__routines
end subroutine cnmngrd
end interface conmin_user_interface
end python module conmin__user__routines
-python module conmin ! in
+python module conmin ! in
interface ! in :conmin
subroutine conmin(ndv_,ncon_,x_,vlb_,vub_,obj_,g_,n1,n2,n3,n4,n5,iprint_,iout_,ifile,itmax_,delfun_,dabfun_,itrm_,nfeasct_,nfdg_,nfun_,ngrd_,cnmnfun,cnmngrd) ! in :conmin:source/conmin.f
use conmin__user__routines
@@ -99,5 +99,5 @@ python module conmin ! in
subroutine closeunit(unitnum) ! in :conmin:source/closeunit.f
integer intent(in) :: unitnum
end subroutine closeunit
- end interface
+ end interface
end python module conmin
diff --git a/pyoptsparse/pyCONMIN/source/openunit.f b/pyoptsparse/pyCONMIN/source/openunit.f
index ebd1cd38..851ad60b 100644
--- a/pyoptsparse/pyCONMIN/source/openunit.f
+++ b/pyoptsparse/pyCONMIN/source/openunit.f
@@ -20,9 +20,9 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
C Helper routine to flush buffers to files
subroutine pyflush(unitnum)
-
+
integer unitnum
-
+
call flush(unitnum)
return
diff --git a/pyoptsparse/pyIPOPT/pyIPOPT.py b/pyoptsparse/pyIPOPT/pyIPOPT.py
index 1ef57239..85f91662 100644
--- a/pyoptsparse/pyIPOPT/pyIPOPT.py
+++ b/pyoptsparse/pyIPOPT/pyIPOPT.py
@@ -294,7 +294,7 @@ def intermediate(_, *args, **kwargs):
def _set_ipopt_options(self, nlp):
"""
- set all of the the options in self.options in the ipopt instance nlp
+ Set all of the the options in self.options in the ipopt instance nlp
"""
# Set Options from the local options dictionary
# ---------------------------------------------
diff --git a/pyoptsparse/pyNLPQLP/LICENSE b/pyoptsparse/pyNLPQLP/LICENSE
index f206107f..3f4faea5 100644
--- a/pyoptsparse/pyNLPQLP/LICENSE
+++ b/pyoptsparse/pyNLPQLP/LICENSE
@@ -2,6 +2,6 @@ NLPQL - Non-Linear Programming by Quadratic Lagrangian
Copyright (c) 1991, Klaus Schittkowski (Klaus.Schittkowski@uni-bayreuth.de)
Patch for pyOpt - 2010, Ruben E. Perez (Ruben.Perez@rmc.ca)
-NLPQL is a licensed software, to obtain the program sources and
-for term and conditions of use please refer to the specific
+NLPQL is a licensed software, to obtain the program sources and
+for term and conditions of use please refer to the specific
commercial or academic agreement made with Professor Schittkowski.
diff --git a/pyoptsparse/pyNLPQLP/source/README b/pyoptsparse/pyNLPQLP/source/README
index 07cac09f..452f7fc8 100644
--- a/pyoptsparse/pyNLPQLP/source/README
+++ b/pyoptsparse/pyNLPQLP/source/README
@@ -1,3 +1,3 @@
This directory contains the Fortran 77 source for NLPQLP. To use, copy
the NLPQLP.FOR and QL.FOR source code here and rename the files to
-NLPQLP.F and QL.F and pyOptSparse will take care of compiling it.
\ No newline at end of file
+NLPQLP.F and QL.F and pyOptSparse will take care of compiling it.
diff --git a/pyoptsparse/pyNLPQLP/source/f2py/nlpqlp.pyf b/pyoptsparse/pyNLPQLP/source/f2py/nlpqlp.pyf
index f056a014..51938c40 100644
--- a/pyoptsparse/pyNLPQLP/source/f2py/nlpqlp.pyf
+++ b/pyoptsparse/pyNLPQLP/source/f2py/nlpqlp.pyf
@@ -31,7 +31,7 @@ python module nlpqlp__user__routines
end subroutine nlgrad
end interface nlpqlp_user_interface
end python module nlpqlp__user__routiness
-python module nlpqlp ! in
+python module nlpqlp ! in
interface ! in :nlpqlp
subroutine wrapper(np, m, me, mmax, n, nmax, mnn2, x, f, g, df, dg, u, xl, xu, &
c, d, acc, accqp, stpmin, maxfun, maxit, maxnm, rho, mode, iprint, iout, &
diff --git a/pyoptsparse/pyNLPQLP/source/wrapper.F90 b/pyoptsparse/pyNLPQLP/source/wrapper.F90
index 53ce2119..5ad17c3c 100644
--- a/pyoptsparse/pyNLPQLP/source/wrapper.F90
+++ b/pyoptsparse/pyNLPQLP/source/wrapper.F90
@@ -33,12 +33,12 @@ subroutine wrapper(np, m, me, mmax, n, nmax, mnn2, x, f, g, df, dg, u, xl, xu, &
external ql
! The structure of this routine is based on NLP_DEMOA.f90. It really
- ! pains me to use goto statements, but they kind of make sense here.
+ ! pains me to use goto statements, but they kind of make sense here.
ifail = 0
- lwa = 23*N+4*M+3*MMAX+NP*(N+M+1)+150 + 3*NMAX*NMAX/2+10*NMAX+MMAX+M+1
+ lwa = 23*N+4*M+3*MMAX+NP*(N+M+1)+150 + 3*NMAX*NMAX/2+10*NMAX+MMAX+M+1
lkwa = n + 30
- lactiv = 2*m + 10
+ lactiv = 2*m + 10
! Allocate some workspace
allocate (wa(lwa), kwa(lkwa), active(lactiv))
@@ -51,29 +51,29 @@ subroutine wrapper(np, m, me, mmax, n, nmax, mnn2, x, f, g, df, dg, u, xl, xu, &
call nlfunc(m, me, mmax, n, f, g, x, active, fail)
call flush(iout)
- if (fail) then
+ if (fail) then
! NLPQLP says to set ifail to -10 and it will back-off on the
! step and try again
ifail = -10
print *, "+===========================================+"
- print *, "| Failed user supplied function in NLPQLP |"
+ print *, "| Failed user supplied function in NLPQLP |"
print *, "+===========================================+"
end if
! Now go back to NLPQLP IF this ISN'T the first pass when ifail == 0
if (ifail == -1 .or. ifail == -10) goto 4
-
+
! ------------ Call the user supplied gradient ----------------
2 continue
call nlgrad(m, me, mmax, n, f, g, df, dg, x, active, wa)
call flush(iout)
! Now go back to NLPQLP
if (ifail == -2) goto 4
-
+
! --------------------------------------------------------------
4 continue
- ! The actual NLPQLP run command.
+ ! The actual NLPQLP run command.
call nlpqlp (np, m, me, mmax, n, nmax, mnn2, x, f, g, &
df, dg, u, xl, xu, c, d, acc, accqp, stpmin, maxfun, maxit, &
maxnm, rho, iprint, mode, iout, ifail, wa, lwa, kwa, lkwa, &
diff --git a/pyoptsparse/pyNSGA2/LICENSE b/pyoptsparse/pyNSGA2/LICENSE
index c006b447..a1a9dacc 100644
--- a/pyoptsparse/pyNSGA2/LICENSE
+++ b/pyoptsparse/pyNSGA2/LICENSE
@@ -5,11 +5,11 @@ Modified for pyOpt - 2008, Ruben E. Perez (Ruben.Perez@rmc.ca)
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-copies of the Software, and to permit persons to whom the Software
+without limitation the rights to use, copy, modify, merge, publish,
+copies of the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following conditions:
-Distribution, sublicense, and/or sell of this code for any commercial
+Distribution, sublicense, and/or sell of this code for any commercial
purpose is permissible ONLY BY DIRECT ARRANGEMENT WITH THE COPYRIGHT OWNER.
The above copyright notice and this permission notice shall be included
diff --git a/pyoptsparse/pyNSGA2/source/README b/pyoptsparse/pyNSGA2/source/README
index f28d26bc..713a524a 100644
--- a/pyoptsparse/pyNSGA2/source/README
+++ b/pyoptsparse/pyNSGA2/source/README
@@ -1,4 +1,4 @@
-This directory contains the C source for
-NSGA2, the main routine of the original
-program has been modified to enable Python
+This directory contains the C source for
+NSGA2, the main routine of the original
+program has been modified to enable Python
interfacing by Dr. Ruben E. Perez.
diff --git a/pyoptsparse/pyNSGA2/source/nsga2.c b/pyoptsparse/pyNSGA2/source/nsga2.c
index cf886e6a..9711cba5 100644
--- a/pyoptsparse/pyNSGA2/source/nsga2.c
+++ b/pyoptsparse/pyNSGA2/source/nsga2.c
@@ -1,19 +1,19 @@
/* -------------------------------------------------------------------------------
*
* NSGA-II (Non-dominated Sorting Genetic Algorithm - II)
- *
+ *
* current version only works with continous design variables treated as reals
- * no provisions for binary specification or integer/discrete variable handling
- *
+ * no provisions for binary specification or integer/discrete variable handling
+ *
* nvar - number of variables
* ncon - number of constraints
* nobj - number of objectives
- * f -
- * x -
- * g -
- * nfeval -
- * xl -
- * xu -
+ * f -
+ * x -
+ * g -
+ * nfeval -
+ * xl -
+ * xu -
* popsize - population size (a multiple of 4)
* ngen - number of generations
* pcross_real - probability of crossover of real variable (0.6-1.0)
@@ -26,76 +26,76 @@
*
*
* Output files
- *
+ *
* - initial_pop.out: contains initial population data
* - final_pop.out: contains final population data
* - all_pop.out: containts generation population data
* - best_pop.out: contains best solutions
* - params.out: contains input parameters information
* - .out: contains runtime information
- *
- * ----------------------------------------------------------------------------
- *
+ *
+ * ----------------------------------------------------------------------------
+ *
* References:
* -----------
- *
- * - Deb K., Agrawal S., Pratap A., and Meyarivan T., A Fast and Elitist
- * multi-objective Genetic Algorithm: NSGA-II, IEEE Transactions on
+ *
+ * - Deb K., Agrawal S., Pratap A., and Meyarivan T., A Fast and Elitist
+ * multi-objective Genetic Algorithm: NSGA-II, IEEE Transactions on
* Evolutionary Computation (IEEE-TEC), 2002, Vol. 6, No. 2, pp 182-197
- *
- * ----------------------------------------------------------------------------
- *
+ *
+ * ----------------------------------------------------------------------------
+ *
* Usage:
* ------
- *
- *
- * ----------------------------------------------------------------------------
- *
+ *
+ *
+ * ----------------------------------------------------------------------------
+ *
* Copyrights:
* -----------
- *
+ *
* - Original NSGA-II implementation: (C) Dr. Kalyanmoy Deb 2005
- * - Randon Number Generator: (C) Dr. David E. Goldberg 1986
- *
- * ----------------------------------------------------------------------------*/
+ * - Randon Number Generator: (C) Dr. David E. Goldberg 1986
+ *
+ * ----------------------------------------------------------------------------*/
/* -------------------------------------------------------------------------------
- * includefiles
+ * includefiles
* ---------------------------------------------------------------------------- */
# include "nsga2.h"
/* -------------------------------------------------------------------------------
- * NSGA2
+ * NSGA2
* ---------------------------------------------------------------------------- */
int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
- int nfeval, double xl[], double xu[], int popsize, int ngen,
- double pcross_real, double pmut_real, double eta_c, double eta_m,
+ int nfeval, double xl[], double xu[], int popsize, int ngen,
+ double pcross_real, double pmut_real, double eta_c, double eta_m,
double pcross_bin, double pmut_bin, int printout, double seed, int xinit)
{
/* declaration of local variables and structures */
int i, j;
- int nreal, nbin, *nbits, bitlength;
+ int nreal, nbin, *nbits, bitlength;
double *min_realvar, *max_realvar;
double *min_binvar, *max_binvar;
int *nbinmut, *nrealmut, *nbincross, *nrealcross;
-
+
Global global;
-
+
population *parent_pop;
population *child_pop;
population *mixed_pop;
-
+
// "random" numbers seed
- if (seed==0)
- {
+ if (seed==0)
+ {
// use of clock to generate "random" seed
time_t seconds;
seconds=time(NULL);
seed=seconds;
}
-
+
// Files
FILE *fpt1;
FILE *fpt2;
@@ -124,14 +124,14 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fprintf(fpt5,"# This file contains information about inputs as read by the program\n");
fprintf(fpt6,"# This file contains runtime information\n");
}
-
+
// Input Handling
nreal = nvar; // number of real variables
nbin = 0; // number of binary variables
-
+
min_realvar = (double *)malloc(nreal*sizeof(double));
max_realvar = (double *)malloc(nreal*sizeof(double));
-
+
j = 0;
for (i=0; i= 1)
{
@@ -190,7 +190,7 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fprintf(fpt5,"\n Probability of mutation of binary variable = %e",pmut_bin);
}
fprintf(fpt5,"\n Seed for random number generator = %e",seed);
-
+
fprintf(fpt1,"# of objectives = %d, # of constraints = %d, # of real_var = %d, # of bits of bin_var = %d, constr_violation, rank, crowding_distance\n",nobj,ncon,nreal,bitlength);
fprintf(fpt2,"# of objectives = %d, # of constraints = %d, # of real_var = %d, # of bits of bin_var = %d, constr_violation, rank, crowding_distance\n",nobj,ncon,nreal,bitlength);
fprintf(fpt3,"# of objectives = %d, # of constraints = %d, # of real_var = %d, # of bits of bin_var = %d, constr_violation, rank, crowding_distance\n",nobj,ncon,nreal,bitlength);
@@ -199,8 +199,8 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fprintf(fpt4,"# of objectives = %d, # of constraints = %d, # of real_var = %d, # of bits of bin_var = %d, constr_violation, rank, crowding_distance\n",nobj,ncon,nreal,bitlength);
}
}
-
- //
+
+ //
global.nreal = nreal;
global.nbin = nbin;
global.nobj = nobj;
@@ -218,8 +218,8 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
global.max_realvar = max_realvar;
global.min_binvar = min_binvar;
global.max_binvar = max_binvar;
- global.bitlength = bitlength;
-
+ global.bitlength = bitlength;
+
//
nbinmut = 0;
nrealmut = 0;
@@ -233,8 +233,8 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
allocate_memory_pop (mixed_pop, 2*popsize, global);
randomize();
initialize_pop (parent_pop, global);
-
- //
+
+ //
if (xinit!=0)
{
i=0;
@@ -243,7 +243,7 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
parent_pop->ind[i].xreal[j] = x[j];
}
}
-
+
// First Generation
if (printout >= 1)
{
@@ -260,9 +260,9 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fprintf(fpt4,"# gen = 1\n");
report_pop(parent_pop,fpt4, global);
}
-
+
fprintf(fpt6,"\n gen = 1");
-
+
fflush(fpt1);
fflush(fpt2);
fflush(fpt3);
@@ -274,7 +274,7 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fflush(fpt6);
}
fflush(stdout);
-
+
// Iterate Generations
for (i=2; i<=ngen; i++)
{
@@ -284,7 +284,7 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
evaluate_pop(child_pop, global);
merge (parent_pop, child_pop, mixed_pop, global);
fill_nondominated_sort (mixed_pop, parent_pop, global);
-
+
/* Comment following three lines if information for all
generations is not desired, it will speed up the execution */
if (printout >= 1)
@@ -299,14 +299,14 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fflush(fpt6);
}
}
-
+
// Output
if (printout >= 1)
{
fprintf(fpt6,"\n Generations finished");
report_pop(parent_pop,fpt2, global);
report_feasible(parent_pop,fpt3, global);
-
+
if (nreal!=0)
{
fprintf(fpt5,"\n Number of crossover of real variable = %i",nrealcross);
@@ -335,10 +335,10 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
fclose(fpt4);
}
fclose(fpt5);
-
+
}
-
- //
+
+ //
for (i=0; iind[i].constr_violation == 0.0 && parent_pop->ind[i].rank==1)
@@ -364,8 +364,8 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
break;
}
}
-
- //
+
+ //
if (nreal!=0)
{
free (min_realvar);
@@ -383,14 +383,14 @@ int nsga2(int nvar, int ncon, int nobj, double f[], double x[], double g[],
free (parent_pop);
free (child_pop);
free (mixed_pop);
-
- //
+
+ //
if (printout >= 1)
{
fprintf(fpt6,"\n Routine successfully exited \n");
fflush(fpt6);
fclose(fpt6);
}
-
+
return (0);
}
diff --git a/pyoptsparse/pyNSGA2/source/nsga2.h b/pyoptsparse/pyNSGA2/source/nsga2.h
index 051382fa..3e641237 100644
--- a/pyoptsparse/pyNSGA2/source/nsga2.h
+++ b/pyoptsparse/pyNSGA2/source/nsga2.h
@@ -1,8 +1,8 @@
/* -------------------------------------------------------------------------------
*
* Header File for nsga2.c
- *
- * ---------------------------------------------------------------------------- */
+ *
+ * ---------------------------------------------------------------------------- */
# ifndef _GLOBAL_H_
# define _GLOBAL_H_
@@ -75,7 +75,7 @@ typedef struct
double *max_realvar;
double *min_binvar;
double *max_binvar;
- int bitlength;
+ int bitlength;
}
Global;
diff --git a/pyoptsparse/pyNSGA2/source/swig/README b/pyoptsparse/pyNSGA2/source/swig/README
index 21e9839d..c617fd69 100644
--- a/pyoptsparse/pyNSGA2/source/swig/README
+++ b/pyoptsparse/pyNSGA2/source/swig/README
@@ -1,2 +1,2 @@
-This directory contains the swig signature file.
+This directory contains the swig signature file.
Do not edit these file unless you really know what you are doing.
diff --git a/pyoptsparse/pyNSGA2/source/swig/nsga2.i b/pyoptsparse/pyNSGA2/source/swig/nsga2.i
index e4bf0a6f..c30f1e7b 100644
--- a/pyoptsparse/pyNSGA2/source/swig/nsga2.i
+++ b/pyoptsparse/pyNSGA2/source/swig/nsga2.i
@@ -44,7 +44,7 @@ void set_pyfunc(PyObject *pyfunc);
static PyObject *py_fobjcon = NULL;
/* Initialize Python callback function pointer */
-void set_pyfunc(PyObject *pyfunc)
+void set_pyfunc(PyObject *pyfunc)
{
Py_XDECREF(py_fobjcon);
Py_XINCREF(pyfunc);
@@ -55,40 +55,40 @@ void set_pyfunc(PyObject *pyfunc)
/* C <-> Python callback */
void nsga2func (int nreal, int nbin, int nobj, int ncon, double *xreal, double *xbin, int **gene, double *obj, double *constr)
{
-
+
int i, j, k;
double getval;
PyObject *arglist, *result, *xx, *ff, *gg;
-
+
arglist = PyTuple_New(6);
-
+
PyTuple_SetItem(arglist,0,PyLong_FromLong(nreal));
-
+
PyTuple_SetItem(arglist,1,PyLong_FromLong(nobj));
-
+
PyTuple_SetItem(arglist,2,PyLong_FromLong(ncon));
-
+
xx = PyList_New(nreal);
for (i=0;i Tuple[ndarray, ndarray, bool]:
- """internal method to call function and extract obj, con"""
+ """Internal method to call function and extract obj, con"""
xCall = self.optProb.processXtoDict(x)
# Call objective
diff --git a/pyoptsparse/pyOpt_history.py b/pyoptsparse/pyOpt_history.py
index b90d1080..8ae163c5 100644
--- a/pyoptsparse/pyOpt_history.py
+++ b/pyoptsparse/pyOpt_history.py
@@ -539,7 +539,7 @@ def getValues(self, names=None, callCounters=None, major=True, scale=False, stac
--------
First we can request DV history over all major iterations:
- >>> hist.getValues(names='xvars', major=True)
+ >>> hist.getValues(names="xvars", major=True)
{'xvars': array([[-2.00000000e+00, 1.00000000e+00],
[-1.00000000e+00, 9.00000000e-01],
[-5.00305827e-17, 4.21052632e-01],
@@ -551,7 +551,7 @@ def getValues(self, names=None, callCounters=None, major=True, scale=False, stac
Next we can look at DV and optimality for the first and last iteration only:
- >>> hist.getValues(names=['xvars','optimality'],callCounters=[0,'last'])
+ >>> hist.getValues(names=["xvars", "optimality"], callCounters=[0, "last"])
{'optimality': array([1.27895528, 0. ]),
'xvars': array([[-2. , 1. ],
[ 0.5, 2. ]])}
diff --git a/pyoptsparse/pyOpt_optimization.py b/pyoptsparse/pyOpt_optimization.py
index f9d83dbc..64fa6143 100644
--- a/pyoptsparse/pyOpt_optimization.py
+++ b/pyoptsparse/pyOpt_optimization.py
@@ -211,9 +211,9 @@ def addVarGroup(
Examples
--------
>>> # Add a single design variable 'alpha'
- >>> optProb.addVar('alpha', varType='c', value=2.0, lower=0.0, upper=10.0, scale=0.1)
+ >>> optProb.addVar("alpha", varType="c", value=2.0, lower=0.0, upper=10.0, scale=0.1)
>>> # Add 10 unscaled variables of 0.5 between 0 and 1 with name 'y'
- >>> optProb.addVarGroup('y', varType='c', value=0.5, lower=0.0, upper=1.0, scale=1.0)
+ >>> optProb.addVarGroup("y", varType="c", value=0.5, lower=0.0, upper=1.0, scale=1.0)
Notes
-----
diff --git a/pyoptsparse/pyOpt_optimizer.py b/pyoptsparse/pyOpt_optimizer.py
index 0bb22015..202d44b5 100644
--- a/pyoptsparse/pyOpt_optimizer.py
+++ b/pyoptsparse/pyOpt_optimizer.py
@@ -639,7 +639,8 @@ def _masterFunc2(self, x, evaluate, writeHist=True):
def _internalEval(self, x):
"""
Special internal evaluation for optimizers that have a
- separate callback for each constraint"""
+ separate callback for each constraint
+ """
fobj, fcon, gobj, gcon, fail = self._masterFunc(x, ["fobj", "fcon", "gobj", "gcon"])
@@ -694,7 +695,8 @@ def _convertJacobian(self, gcon_csr_in):
def _waitLoop(self):
"""Non-root processors go into this waiting loop while the
- root proc does all the work in the optimization algorithm"""
+ root proc does all the work in the optimization algorithm
+ """
mode = None
info = None
diff --git a/pyoptsparse/pyOpt_utils.py b/pyoptsparse/pyOpt_utils.py
index e3572a03..ed1f8bc8 100644
--- a/pyoptsparse/pyOpt_utils.py
+++ b/pyoptsparse/pyOpt_utils.py
@@ -4,9 +4,9 @@
a constant sparsity structure as required by the optimizers.
We use a very simple dictionary format to represent the three most common forms of sparse matrices::
- mat = {'coo':[row, col, data], 'shape':[nrow, ncols]} # A coo matrix
- mat = {'csr':[rowp, colind, data], 'shape':[nrow, ncols]} # A csr matrix
- mat = {'csc':[colp, rowind, data], 'shape':[nrow, ncols]} # A csc matrix
+ mat = {"coo": [row, col, data], "shape": [nrow, ncols]} # A coo matrix
+ mat = {"csr": [rowp, colind, data], "shape": [nrow, ncols]} # A csr matrix
+ mat = {"csc": [colp, rowind, data], "shape": [nrow, ncols]} # A csc matrix
"""
# Standard Python modules
diff --git a/pyoptsparse/pyPSQP/LICENSE b/pyoptsparse/pyPSQP/LICENSE
index 1a0e242b..31cb21e5 100644
--- a/pyoptsparse/pyPSQP/LICENSE
+++ b/pyoptsparse/pyPSQP/LICENSE
@@ -3,8 +3,8 @@ Copyright (c) 2007, Ladislav Luksan (luksan@uivt.cas.cz)
Modified for pyOpt - 2010, Ruben E. Perez (Ruben.Perez@rmc.ca)
This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as
-published by the Free Software Foundation, either version 3 of
+it under the terms of the GNU Lesser General Public License as
+published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
@@ -12,8 +12,8 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
-You should have received a copy of the GNU Lesser General
-Public License along with this program. If not, see
+You should have received a copy of the GNU Lesser General
+Public License along with this program. If not, see
.
----------------------------------------------------------------------
diff --git a/pyoptsparse/pyPSQP/source/README b/pyoptsparse/pyPSQP/source/README
index cb8e09e6..7a82c1f5 100644
--- a/pyoptsparse/pyPSQP/source/README
+++ b/pyoptsparse/pyPSQP/source/README
@@ -1,4 +1,4 @@
This directory contains the Fortran 77 source for
-PSQP, plus a pyOpt interfacing file called psqpw.f,
+PSQP, plus a pyOpt interfacing file called psqpw.f,
and two helper files called openunit.f and
closeunit.f to manipulate Fortran units from Python.
diff --git a/pyoptsparse/pyPSQP/source/f2py/README b/pyoptsparse/pyPSQP/source/f2py/README
index 54e48d04..94c094bd 100644
--- a/pyoptsparse/pyPSQP/source/f2py/README
+++ b/pyoptsparse/pyPSQP/source/f2py/README
@@ -1,2 +1,2 @@
-This directory contains the f2py signature file.
+This directory contains the f2py signature file.
Do not edit these file unless you really know what you are doing.
diff --git a/pyoptsparse/pyPSQP/source/f2py/psqp.pyf b/pyoptsparse/pyPSQP/source/f2py/psqp.pyf
index b1ab0b54..51da4b1e 100644
--- a/pyoptsparse/pyPSQP/source/f2py/psqp.pyf
+++ b/pyoptsparse/pyPSQP/source/f2py/psqp.pyf
@@ -35,7 +35,7 @@ python module psqp__user__routines
end subroutine dcon
end interface psqp_user_interface
end python module psqp__user__routines
-python module psqp ! in
+python module psqp ! in
interface ! in :psqp
subroutine psqp_wrap(nf,nc,x,ix,xl,xu,cf,ic,cl,cu,mit,mfv,met,mec,xmax,tolx,tolc,tolg,rpf,f,gmax,cmax,iprnt,iout,ifile,iterm) ! in :psqp:source/psqp_wrap.f
use psqp__user__routines
diff --git a/pyoptsparse/pyPSQP/source/openunit.f b/pyoptsparse/pyPSQP/source/openunit.f
index e67f8966..b0d9c138 100644
--- a/pyoptsparse/pyPSQP/source/openunit.f
+++ b/pyoptsparse/pyPSQP/source/openunit.f
@@ -11,7 +11,7 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
Cf2py intent(in) fileaction
integer ierror
Cf2py intent(out) ierror
-
+
open(unit=unitnum,file=filename,status=filestatus,
> access=fileaction,iostat=ierror)
@@ -20,9 +20,9 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
C Helper routine to flush buffers to files
subroutine pyflush(unitnum)
-
+
integer unitnum
-
+
call flush(unitnum)
return
diff --git a/pyoptsparse/pyPSQP/source/psqp_wrap.f90 b/pyoptsparse/pyPSQP/source/psqp_wrap.f90
index b42eb456..a4b4deb3 100644
--- a/pyoptsparse/pyPSQP/source/psqp_wrap.f90
+++ b/pyoptsparse/pyPSQP/source/psqp_wrap.f90
@@ -89,7 +89,7 @@
! FUNCTION, X(NF) IS A VECTOR OF VARIABLES AND GC(NF) IS THE
! GRADIENT OF THE CONSTRAINT FUNCTION.
!
-SUBROUTINE PSQP_WRAP(NF,NC,X,IX,XL,XU,CF,IC,CL,CU, &
+SUBROUTINE PSQP_WRAP(NF,NC,X,IX,XL,XU,CF,IC,CL,CU, &
MIT,MFV,MET,MEC,XMAX,TOLX,TOLC,TOLG,RPF, &
F,GMAX,CMAX,IPRNT,IOUT,IFILE,ITERM)
!
@@ -127,13 +127,13 @@ SUBROUTINE PSQP_WRAP(NF,NC,X,IX,XL,XU,CF,IC,CL,CU, &
LIA = 1
!
! OPEN WRITE FILE
- !
+ !
IF (IPRNT.NE.0) THEN
OPEN(UNIT=IOUT,FILE=IFILE,STATUS='UNKNOWN')
END IF
- !
+ !
! CALL PSQP
- !
+ !
NB = 1
CALL PSQP(NF,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,RA,RA(LCFO),RA(LCFD),&
RA(LGC),IA,RA(LCR),RA(LCZ),RA(LCP),RA(LGF),RA(LG),&
diff --git a/pyoptsparse/pyParOpt/meson.build b/pyoptsparse/pyParOpt/meson.build
index 0bc4f8e6..4500d203 100644
--- a/pyoptsparse/pyParOpt/meson.build
+++ b/pyoptsparse/pyParOpt/meson.build
@@ -7,4 +7,4 @@ py3_target.install_sources(
python_sources,
pure: true,
subdir: 'pyoptsparse/pyParOpt'
-)
\ No newline at end of file
+)
diff --git a/pyoptsparse/pySLSQP/source/README b/pyoptsparse/pySLSQP/source/README
index 9b85b0b9..0a749cfa 100644
--- a/pyoptsparse/pySLSQP/source/README
+++ b/pyoptsparse/pySLSQP/source/README
@@ -1,3 +1,3 @@
-This directory contains the Fortran 77 source for
+This directory contains the Fortran 77 source for
SLSQP, plus two helper files called openunit.f and
closeunit.f to manipulate Fortran units from Python.
diff --git a/pyoptsparse/pySLSQP/source/daxpy.f b/pyoptsparse/pySLSQP/source/daxpy.f
index e21693c0..96875010 100644
--- a/pyoptsparse/pySLSQP/source/daxpy.f
+++ b/pyoptsparse/pySLSQP/source/daxpy.f
@@ -44,4 +44,3 @@ SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
50 CONTINUE
RETURN
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/dcopy.f b/pyoptsparse/pySLSQP/source/dcopy.f
index b9aa02b6..71b7b13b 100644
--- a/pyoptsparse/pySLSQP/source/dcopy.f
+++ b/pyoptsparse/pySLSQP/source/dcopy.f
@@ -251,4 +251,3 @@ DOUBLE PRECISION FUNCTION DNRM2 ( N, DX, INCX)
300 CONTINUE
RETURN
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/drot.f b/pyoptsparse/pySLSQP/source/drot.f
index 77df1e46..a2285f4f 100644
--- a/pyoptsparse/pySLSQP/source/drot.f
+++ b/pyoptsparse/pySLSQP/source/drot.f
@@ -34,4 +34,3 @@ SUBROUTINE DROT (N,DX,INCX,DY,INCY,C,S)
30 CONTINUE
RETURN
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/drotg.f b/pyoptsparse/pySLSQP/source/drotg.f
index 30fa7c1b..4b80a37e 100644
--- a/pyoptsparse/pySLSQP/source/drotg.f
+++ b/pyoptsparse/pySLSQP/source/drotg.f
@@ -25,4 +25,3 @@ SUBROUTINE DROTG(DA,DB,C,S)
DB = Z
RETURN
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/dscal.f b/pyoptsparse/pySLSQP/source/dscal.f
index 2e7811cf..777fd7ed 100644
--- a/pyoptsparse/pySLSQP/source/dscal.f
+++ b/pyoptsparse/pySLSQP/source/dscal.f
@@ -38,4 +38,3 @@ SUBROUTINE DSCAL(N,DA,DX,INCX)
50 CONTINUE
RETURN
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/f2py/README b/pyoptsparse/pySLSQP/source/f2py/README
index 54e48d04..94c094bd 100644
--- a/pyoptsparse/pySLSQP/source/f2py/README
+++ b/pyoptsparse/pySLSQP/source/f2py/README
@@ -1,2 +1,2 @@
-This directory contains the f2py signature file.
+This directory contains the f2py signature file.
Do not edit these file unless you really know what you are doing.
diff --git a/pyoptsparse/pySLSQP/source/f2py/slsqp.pyf b/pyoptsparse/pySLSQP/source/f2py/slsqp.pyf
index 14edad20..4fe3fa96 100644
--- a/pyoptsparse/pySLSQP/source/f2py/slsqp.pyf
+++ b/pyoptsparse/pySLSQP/source/f2py/slsqp.pyf
@@ -1,8 +1,8 @@
! -*- f90 -*-
! Note: the context of this file is case sensitive.
-python module slsqp__user__routines
- interface slsqp_user_interface
+python module slsqp__user__routines
+ interface slsqp_user_interface
subroutine slfunc(m,meq,la,n,f,c,x)
integer intent(in) :: m
integer intent(in) :: meq
@@ -25,7 +25,7 @@ python module slsqp__user__routines
end subroutine slgrad
end interface slsqp_user_interface
end python module slsqp__user__routines
-python module slsqp ! in
+python module slsqp ! in
interface ! in :slsqp
subroutine slsqp(m,meq,la,n,x,xl,xu,f,c,g,a,acc,iter,iprint,iout,ifile,mode,w,l_w,jw,l_jw,nfunc,ngrad,slfunc,slgrad) ! in :slsqp:source/slsqp.f
use slsqp__user__routines
@@ -68,5 +68,5 @@ python module slsqp ! in
subroutine closeunit(unitnum) ! in :slsqp:source/closeunit.f
integer intent(in) :: unitnum
end subroutine closeunit
- end interface
+ end interface
end python module slsqp
diff --git a/pyoptsparse/pySLSQP/source/h12.f b/pyoptsparse/pySLSQP/source/h12.f
index 7ed74def..91c4b024 100644
--- a/pyoptsparse/pySLSQP/source/h12.f
+++ b/pyoptsparse/pySLSQP/source/h12.f
@@ -78,4 +78,3 @@ SUBROUTINE H12 (MODE,LPIVOT,L1,M,U,IUE,UP,C,ICE,ICV,NCV)
60 I4=I4+ICE
70 CONTINUE
80 END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/hfti.f b/pyoptsparse/pySLSQP/source/hfti.f
index b677c620..08f9257b 100644
--- a/pyoptsparse/pySLSQP/source/hfti.f
+++ b/pyoptsparse/pySLSQP/source/hfti.f
@@ -125,4 +125,3 @@ SUBROUTINE HFTI(A,MDA,M,N,B,MDB,NB,TAU,KRANK,RNORM,H,G,IP)
250 CONTINUE
270 KRANK=K
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/ldl.f b/pyoptsparse/pySLSQP/source/ldl.f
index 5ad16dff..f5806dac 100644
--- a/pyoptsparse/pySLSQP/source/ldl.f
+++ b/pyoptsparse/pySLSQP/source/ldl.f
@@ -250,4 +250,3 @@ DOUBLE PRECISION FUNCTION LINMIN (MODE, AX, BX, F, TOL)
C END OF LINMIN
END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/ldp.f b/pyoptsparse/pySLSQP/source/ldp.f
index c1b9a836..c8004235 100644
--- a/pyoptsparse/pySLSQP/source/ldp.f
+++ b/pyoptsparse/pySLSQP/source/ldp.f
@@ -95,4 +95,3 @@ SUBROUTINE LDP(G,MG,M,N,H,X,XNORM,W,INDEX,MODE)
C END OF SUBROUTINE LDP
50 END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/lsei.f b/pyoptsparse/pySLSQP/source/lsei.f
index 1b1788ee..0ff92503 100644
--- a/pyoptsparse/pySLSQP/source/lsei.f
+++ b/pyoptsparse/pySLSQP/source/lsei.f
@@ -129,4 +129,3 @@ SUBROUTINE LSEI(C,D,E,F,G,H,LC,MC,LE,ME,LG,MG,N,X,XNRM,W,JW,MODE)
C END OF SUBROUTINE LSEI
75 END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/lsi.f b/pyoptsparse/pySLSQP/source/lsi.f
index f668f568..87803bb5 100644
--- a/pyoptsparse/pySLSQP/source/lsi.f
+++ b/pyoptsparse/pySLSQP/source/lsi.f
@@ -75,4 +75,3 @@ SUBROUTINE LSI(E,F,G,H,LE,ME,LG,MG,N,X,XNORM,W,JW,MODE)
C END OF SUBROUTINE LSI
50 END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/lsq.f b/pyoptsparse/pySLSQP/source/lsq.f
index 0ac509c2..21390bcf 100644
--- a/pyoptsparse/pySLSQP/source/lsq.f
+++ b/pyoptsparse/pySLSQP/source/lsq.f
@@ -193,4 +193,4 @@ subroutine bound(n, x, xl, xu)
x(i) = xu(i)
end if
end do
- end subroutine bound
\ No newline at end of file
+ end subroutine bound
diff --git a/pyoptsparse/pySLSQP/source/nnls.f b/pyoptsparse/pySLSQP/source/nnls.f
index 3b9aed2a..a38c70c6 100644
--- a/pyoptsparse/pySLSQP/source/nnls.f
+++ b/pyoptsparse/pySLSQP/source/nnls.f
@@ -192,4 +192,3 @@ SUBROUTINE NNLS (A, MDA, M, N, B, X, RNORM, W, Z, INDEX, MODE)
C END OF SUBROUTINE NNLS
290 END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySLSQP/source/openunit.f b/pyoptsparse/pySLSQP/source/openunit.f
index e67f8966..b0d9c138 100644
--- a/pyoptsparse/pySLSQP/source/openunit.f
+++ b/pyoptsparse/pySLSQP/source/openunit.f
@@ -11,7 +11,7 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
Cf2py intent(in) fileaction
integer ierror
Cf2py intent(out) ierror
-
+
open(unit=unitnum,file=filename,status=filestatus,
> access=fileaction,iostat=ierror)
@@ -20,9 +20,9 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
C Helper routine to flush buffers to files
subroutine pyflush(unitnum)
-
+
integer unitnum
-
+
call flush(unitnum)
return
diff --git a/pyoptsparse/pySLSQP/source/slsqp.f b/pyoptsparse/pySLSQP/source/slsqp.f
index ba4c4b72..d4d6885f 100644
--- a/pyoptsparse/pySLSQP/source/slsqp.f
+++ b/pyoptsparse/pySLSQP/source/slsqp.f
@@ -319,4 +319,3 @@ SUBROUTINE SLSQP (M,MEQ,LA,N,X,XL,XU,F,C,G,A,ACC,ITER,
1460 FORMAT(8X,30HNUMBER OF GRAD-CALLS: NGRAD =,I4)
C
END
-
diff --git a/pyoptsparse/pySLSQP/source/slsqpb.f b/pyoptsparse/pySLSQP/source/slsqpb.f
index 70c7e736..3736c564 100644
--- a/pyoptsparse/pySLSQP/source/slsqpb.f
+++ b/pyoptsparse/pySLSQP/source/slsqpb.f
@@ -1,7 +1,7 @@
SUBROUTINE SLSQPB (M, MEQ, LA, N, X, XL, XU, F, C, G, A, ACC,
* ITER, MODE, R, L, X0, MU, S, U, V, W, IW,
* ALPHA, F0, GS, H1, H2, H3, H4, T, T0, TOL,
- * IEXACT, INCONS, IRESET, ITERMX, LINE, N1,
+ * IEXACT, INCONS, IRESET, ITERMX, LINE, N1,
* N2, N3)
C NONLINEAR PROGRAMMING BY SOLVING SEQUENTIALLY QUADRATIC PROGRAMS
@@ -289,4 +289,3 @@ SUBROUTINE SLSQPB (M, MEQ, LA, N, X, XL, XU, F, C, G, A, ACC,
C END OF SLSQPB
330 END
-
\ No newline at end of file
diff --git a/pyoptsparse/pySNOPT/LICENSE b/pyoptsparse/pySNOPT/LICENSE
index ec47e53c..fceea9bc 100644
--- a/pyoptsparse/pySNOPT/LICENSE
+++ b/pyoptsparse/pySNOPT/LICENSE
@@ -3,6 +3,6 @@ Copyright (c) 2008, Philip Gill (pgill@ucsd.edu),
Walter Murray (walter@leland.stanford.edu),
and Michael Saunders (saunders@stanford.edu)
-SNOPT is a licensed software, to obtain the program sources and for
-term and conditions of use please refer to the specific commercial
+SNOPT is a licensed software, to obtain the program sources and for
+term and conditions of use please refer to the specific commercial
or academic agreement with Stanford Business Software Inc.
diff --git a/pyoptsparse/pySNOPT/meson.build b/pyoptsparse/pySNOPT/meson.build
index 24a97ef7..61edfdb0 100644
--- a/pyoptsparse/pySNOPT/meson.build
+++ b/pyoptsparse/pySNOPT/meson.build
@@ -40,4 +40,4 @@ endif
# python_sources,
# pure: false,
# subdir: 'pyoptsparse/pySNOPT'
-#)
\ No newline at end of file
+#)
diff --git a/pyoptsparse/pySNOPT/source/f2py/README b/pyoptsparse/pySNOPT/source/f2py/README
index 54e48d04..94c094bd 100644
--- a/pyoptsparse/pySNOPT/source/f2py/README
+++ b/pyoptsparse/pySNOPT/source/f2py/README
@@ -1,2 +1,2 @@
-This directory contains the f2py signature file.
+This directory contains the f2py signature file.
Do not edit these file unless you really know what you are doing.
diff --git a/pyoptsparse/pySNOPT/source/f2py/snopt.pyf b/pyoptsparse/pySNOPT/source/f2py/snopt.pyf
index 467b1503..c4b95a18 100644
--- a/pyoptsparse/pySNOPT/source/f2py/snopt.pyf
+++ b/pyoptsparse/pySNOPT/source/f2py/snopt.pyf
@@ -221,7 +221,7 @@ python module snoptc__user__routines
end subroutine sqlog
end interface snoptc_user_interface
end python module snoptc__user__routines
-python module snopt ! in
+python module snopt ! in
interface ! in :snopt
subroutine openunit(unitnum,filename,filestatus,fileaction,ierror) ! in :snopt:openunit.f
integer intent(in) :: unitnum
@@ -266,7 +266,7 @@ python module snopt ! in
integer :: negcon
integer :: nncon
integer :: nnjac
- integer :: nnobj
+ integer :: nnobj
integer intent(out) :: mincw
integer intent(out) :: miniw
integer intent(out) :: minrw
@@ -328,7 +328,7 @@ python module snopt ! in
end subroutine sngetc
subroutine sngeti(buffer,ivalue,inform,cw,lencw,iw,leniw,rw,lenrw) ! in :snopt:sn02lib.f
character*(*) :: buffer
- integer intent(out) :: ivalue
+ integer intent(out) :: ivalue
integer :: inform
character*8 intent(in,out), dimension(lencw) :: cw
integer optional,check(len(cw)==lencw),depend(cw) :: lencw=len(cw)
@@ -357,7 +357,7 @@ python module snopt ! in
integer optional,check(len(pi)>=m),depend(pi) :: m=len(pi)
integer optional,check((len(locj)-1)>=n),depend(locj) :: n=(len(locj)-1)
integer optional,check(len(jcol)>=ne),depend(jcol) :: ne=len(jcol)
- integer :: nncon
+ integer :: nncon
integer :: nnobj
integer :: nnjac
integer :: iobj
@@ -374,7 +374,7 @@ python module snopt ! in
integer intent(inout), dimension(n+m),depend(m,n) :: hs
double precision intent(inout), dimension(n+m),depend(m,n) :: x
double precision intent(inout), dimension(m) :: pi
- double precision intent(inout), dimension(n+m),depend(m,n) :: rc
+ double precision intent(inout), dimension(n+m),depend(m,n) :: rc
integer intent(inout) :: inform
integer intent(inout) :: mincw
integer intent(inout) :: miniw
@@ -569,7 +569,7 @@ python module snopt ! in
integer dimension(leniw) :: iw
integer, optional,check(len(iw)>=leniw),depend(iw) :: leniw=len(iw)
end subroutine sqlog
- end interface
+ end interface
end python module snopt
! This file was auto-generated with f2py (version:2.37.233-1545).
diff --git a/pyoptsparse/pySNOPT/source/openunit.f b/pyoptsparse/pySNOPT/source/openunit.f
index e67f8966..b0d9c138 100644
--- a/pyoptsparse/pySNOPT/source/openunit.f
+++ b/pyoptsparse/pySNOPT/source/openunit.f
@@ -11,7 +11,7 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
Cf2py intent(in) fileaction
integer ierror
Cf2py intent(out) ierror
-
+
open(unit=unitnum,file=filename,status=filestatus,
> access=fileaction,iostat=ierror)
@@ -20,9 +20,9 @@ subroutine openunit(unitnum,filename,filestatus,fileaction,ierror)
C Helper routine to flush buffers to files
subroutine pyflush(unitnum)
-
+
integer unitnum
-
+
call flush(unitnum)
return
diff --git a/pyoptsparse/testing/pyOpt_testing.py b/pyoptsparse/testing/pyOpt_testing.py
index 53aa55f9..4f7c1ff6 100644
--- a/pyoptsparse/testing/pyOpt_testing.py
+++ b/pyoptsparse/testing/pyOpt_testing.py
@@ -245,7 +245,7 @@ def optimize(self, sens=None, setDV=None, optOptions=None, storeHistory=False, h
if self.optName in DEFAULT_OPTIMIZERS:
raise e
else:
- raise unittest.SkipTest(f"Optimizer not available: {self.optName}")
+ raise unittest.SkipTest(f"Optimizer not available: {self.optName}") from e
if isinstance(setDV, str):
self.optProb.setDVsFromHistory(setDV)
diff --git a/ruff.toml b/ruff.toml
new file mode 100644
index 00000000..73e9c25c
--- /dev/null
+++ b/ruff.toml
@@ -0,0 +1,8 @@
+extend = "~/.config/ruff/ruff.toml"
+extend-exclude =[
+ # OptView and related files need to be fixed eventually
+ "pyoptsparse/postprocessing/OptView.py",
+ "pyoptsparse/postprocessing/OptView_baseclass.py",
+ "pyoptsparse/postprocessing/OptView_dash.py",
+ "pyoptsparse/postprocessing/view_saved_figure.py",
+]
diff --git a/tests/test_hs015.py b/tests/test_hs015.py
index 7f312a77..84c98d82 100644
--- a/tests/test_hs015.py
+++ b/tests/test_hs015.py
@@ -175,7 +175,7 @@ def test_snopt_hotstart(self):
@staticmethod
def my_snstop(iterDict):
- """manually terminate SNOPT after 1 major iteration"""
+ """Manually terminate SNOPT after 1 major iteration"""
if iterDict["nMajor"] == 1:
return 1
return 0
diff --git a/tests/test_optProb.py b/tests/test_optProb.py
index 1e0d401c..119fa580 100644
--- a/tests/test_optProb.py
+++ b/tests/test_optProb.py
@@ -203,7 +203,7 @@ def map_check_value(self, key, val):
}
def processValue(key, val, output):
- """helper function since some functions have optional arguments that are needed"""
+ """Helper function since some functions have optional arguments that are needed"""
if key == "Con":
return process_funcs[key][output](val, scaled=False, natural=True)
elif key == "Obj":
diff --git a/tests/test_snopt_bugfix.py b/tests/test_snopt_bugfix.py
index 12ffe28a..552de219 100644
--- a/tests/test_snopt_bugfix.py
+++ b/tests/test_snopt_bugfix.py
@@ -74,8 +74,8 @@ def test_opt(self):
# Optimizer
try:
opt = SNOPT(options=optOptions)
- except ImportError:
- raise unittest.SkipTest("Optimizer not available: SNOPT")
+ except ImportError as e:
+ raise unittest.SkipTest("Optimizer not available: SNOPT") from e
sol = opt(optProb, sens=sens)
@@ -105,8 +105,8 @@ def test_opt_bug1(self):
# Optimizer
try:
opt = SNOPT(options=optOptions)
- except ImportError:
- raise unittest.SkipTest("Optimizer not available: SNOPT")
+ except ImportError as e:
+ raise unittest.SkipTest("Optimizer not available: SNOPT") from e
opt(optProb, sens=sens)
@@ -146,8 +146,8 @@ def test_opt_bug_print_2con(self):
# Optimizer
try:
opt = SNOPT(options=optOptions)
- except ImportError:
- raise unittest.SkipTest("Optimizer not available: SNOPT")
+ except ImportError as e:
+ raise unittest.SkipTest("Optimizer not available: SNOPT") from e
sol = opt(optProb, sens=sens)
diff --git a/tests/test_user_termination.py b/tests/test_user_termination.py
index b1fcde3a..f7b3b9ae 100644
--- a/tests/test_user_termination.py
+++ b/tests/test_user_termination.py
@@ -5,6 +5,7 @@
The proper response of the pyIPOPT and pySNOPT optimizers are tested.
"""
+
# Standard Python modules
import unittest
@@ -102,8 +103,8 @@ def test_obj(self, optName):
try:
opt = OPT(optName, options=optOptions)
- except ImportError:
- raise unittest.SkipTest(f"Optimizer not available: {optName}")
+ except ImportError as e:
+ raise unittest.SkipTest(f"Optimizer not available: {optName}") from e
sol = opt(optProb, sens=termcomp.sens)
@@ -123,8 +124,8 @@ def test_sens(self, optName):
try:
opt = OPT(optName, options=optOptions)
- except ImportError:
- raise unittest.SkipTest(f"Optimizer not available: {optName}")
+ except ImportError as e:
+ raise unittest.SkipTest(f"Optimizer not available: {optName}") from e
sol = opt(optProb, sens=termcomp.sens)