Changeset 424 for branches


Ignore:
Timestamp:
Mar 19, 2013 1:24:25 PM (6 years ago)
Author:
kulshres
Message:

update with 'mpi' branch from 'gitclone'

Signed-off-by: Kshitij Kulshreshtha <kshitij@…>

Location:
branches/MPI
Files:
26 added
60 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/MPI/ADOL-C/Makefile.in

    r377 r424  
    5656DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5757ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    58 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     58am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     59        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    5960am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6061        $(ACLOCAL_M4)
     
    173174MANIFEST_TOOL = @MANIFEST_TOOL@
    174175MKDIR_P = @MKDIR_P@
     176MPICC = @MPICC@
     177MPICXX = @MPICXX@
     178MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     179MPILIBS = @MPILIBS@
    175180NM = @NM@
    176181NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/doc/adolc-manual.tex

    r406 r424  
    22%
    33% Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz,
    4 %               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel
     4%               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
     5%               Benjamin Letschert
    56%
    67% This file is part of ADOL-C. This software is provided as open source.
     
    40864087%
    40874088%
     4089\section{Parallel ADOL-C by using MPI}
     4090\label{parallel}
     4091%
     4092\subsection{Installation of ADOL-C by using MPI}
     4093\label{InstPar}
     4094%
     4095Before configuring ADOL-C one has to make sure that at least one MPI version is installed. The configuration searches for MPI headers and libraries in the standard directories. If MPI is installed local or the headers and libraries could not be found in the standard directories, the options \verb?--with-mpi-includedir=PATH? and \verb?--with-mpi-libdir=PATH? should be used. At the end of the configuration it is stated whether parallel computation can be used or not.
     4096\begin{center}
     4097   \begin{tabular}{l l}
     4098      \verb=Configuration:= & \ \\
     4099      \verb=  ....=  & \ \\
     4100      \verb=  Source code location:= & \verb=/PATH-TO-ADOL-C/adol-c=\\
     4101      \verb=  Install path:= & \verb=$HOME/adolc_base=\\
     4102      \verb=  ....=  & \ \\
     4103      \verb=  Build sparse drivers:= & \verb= yes=\\
     4104      \verb=  Build with ColPack:= & \verb= yes=\\
     4105      {\bf \verb=  Build with MPI:= }& {\bf\verb= yes= }\\
     4106      \verb=  ....=
     4107   \end{tabular}
     4108\end{center}
     4109%
     4110\subsection{Header files and definitions}
     4111\label{HeadDefPar}
     4112%
     4113For the parallel computation one has to define which version of MPI is installed. If MPI is located by configuration, the output shows where to find the MPI headers.
     4114\begin{center}
     4115By configuring ADOL-C you will see which version is found.\\
     4116   \begin{tabular}{l l}
     4117Example: & $\vdots$\\
     4118 & \verb=checking mpi/mpi.h usability... yes=\\
     4119 & \verb=checking mpi/mpi.h presence... yes=\\
     4120 & \verb=checking for mpi/mpi.h... yes=\\
     4121 & \verb=checking for MPI_Init in -lmpich... yes=\\
     4122 & $\vdots$
     4123   \end{tabular}
     4124\end{center}
     4125In this case the MPI header file is found at \verb=mpi/mpi.h=, so that \verb=HAVE_MPI_MPI_H 1= has to be included. The other option is \verb=mpi.h=, so \verb=#define HAVE_MPI_H 1=.\\
     4126If a local installation of MPI is used, the path to the header file \verb=mpi.h= must be  given. In this case use \verb=#define HAVE_MPI_H 1=. The header file \verb=<adolc/adolc_mpi.h>= is needed for parallel computing as well as \verb=<adolc/sparsedrivers_mpi.h>= to use Colpack.
     4127
     4128\subsubsection{Compiling and Linking}
     4129Only \verb=C++= programs may use the ADOL-C MPI interface, therefore programs in \verb=C= must be compiled with the \verb=C++= compiler. For compiling and linking the \verb=ladolc_mpi= library is required. A possible Makefile could be the following one
     4130\begin{center}
     4131\begin{verbatim}
     4132  # MPI C++ Compiler
     4133  CXX = mpicxx
     4134
     4135  # flags for compiling
     4136  CFLAGS = -g -O0
     4137
     4138  # Paths and libraries for ADOL-C with MPI - example
     4139  ADPATH = $(HOME)/adolc_base/include
     4140  ADLIBDIR = $(HOME)/adolc_base/lib
     4141  ADCFLAGS = -I$(ADPATH)
     4142  ADLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -ladolc_mpi
     4143
     4144  all: example
     4145  example: example.o
     4146           $(CXX) $(CFLAGS) $(ADCFLAGS) -o example example.o -lm $(ADLIBS)
     4147  example.o: example.cpp
     4148           $(CXX) $(CFLAGS) $(ADCFLAGS) -c -o example.o example.cpp
     4149
     4150  clean:
     4151           rm -f *.o example
     4152\end{verbatim}
     4153\end{center}
     4154%
     4155\subsection{MPI communicator in ADOL-C}
     4156\label{CommPar}
     4157%
     4158Communicator objects connect groups of processes in the MPI session. Each communicator gives each contained process an independent identifier (id) and arranges its contained processes in an ordered topology.\\
     4159The header file \verb=<adolc/adolc_mpi.h>= assumes, that the main/root process has id 0. All other processes have an id $> 0$. The main process must declare the independent and dependent variables.
     4160%
     4161\subsubsection{Initialisation calls}
     4162\label{InitCallsPar}
     4163\begin{itemize}
     4164\item \verb=int ADOLC_MPI_Init(= // Parameter is given from \verb=main(argc,argv)= program\\
     4165\begin{tabular}{l l}
     4166\ \ & \verb=int* argc,=\\
     4167 & \verb=char*** argv)=
     4168\end{tabular}\\
     4169This function initialises the use of MPI and has to be called before any other \verb=ADOLC_MPI= function.
     4170\item \verb=int ADOLC_MPI_Comm_size(=\\
     4171\begin{tabular}{l l l}
     4172\ \ & \verb=ADOLC_MPI_Comm comm,= & communicator of process group\\
     4173 & \verb=int* size)= & pointer to count of processes
     4174\end{tabular}\\
     4175 The used number of processes is returned by the parameter \verb=size=. This function should be called directly after the initialisation.
     4176\item \verb=int ADOLC_MPI_Comm_rank(=\\
     4177\begin{tabular}{l l l}
     4178\ \ & \verb=ADOLC_MPI_Comm comm,= & communicator of process group\\
     4179 & \verb=int* id)= & pointer to the identity number of process
     4180\end{tabular}\\
     4181 This function returns the rank or id of the process, which has called this function. This function should be also called directly  after the initialisation.
     4182\item \verb=int ADOLC_MPI_Get_processor_name(=\\
     4183\begin{tabular}{l l l}
     4184\ \ & \verb=char* name,= & pointer to process' name\\
     4185 & \verb=int* id)= & pointer to identity of process
     4186\end{tabular}\\
     4187The name of the process with identity \verb=id= is saved temporary in \verb=name=.
     4188\item \verb=int ADOLC_MPI_Barrier(=\\
     4189\begin{tabular}{l l l}
     4190\ \ & \verb=ADOLC_MPI_Comm comm)= & communicator of process group\\
     4191\end{tabular}\\
     4192This functions synchronises all processes.
     4193\item \verb=int ADOLC_MPI_Finalize()=\\
     4194At the end of the \verb=main= program this function has to be called for the finalisation of all processes.
     4195\item \verb=int trace_on(=\\
     4196\begin{tabular}{l l l}
     4197\ \ & \verb=int id,= & identity of process\\
     4198 & \verb=int size,= & count of processes \\
     4199 & \verb=short tag)= & tag of tape
     4200\end{tabular}\\
     4201 This is the parallel version of \verb=trace_on(short tag)=. The function needs two more parameters in order to generate a tape for each process of the process group.
     4202\item \verb=void tape_doc(=\\
     4203\begin{tabular}{l l l}
     4204\ \ & \verb=int id,= & identity of process\\
     4205 & \verb=int size,= & count of processes \\
     4206 & \verb=short tag,= & tag of tape \\
     4207 & \verb=int depen,= & count of dependend variables \\
     4208 & \verb=int indep,= & count of independent variables\\
     4209 & \verb=double* argument,= & pointer of buffer of the arguments\\
     4210 & \verb=double* result)= & pointer of the buffer of results
     4211\end{tabular}\\
     4212 This is the parallel version of \verb=tape_doc=. The function needs two more parameters in order to transform the tapes into  \LaTeX source documents.
     4213\end{itemize}
     4214%
     4215\subsubsection{Communication calls}
     4216\label{CommParCalls}
     4217The most basic type of communication takes place between two processes: a sending process transmits information  to a receiving process. In MPI, this information is packed into messages with the describing parameters \verb=buf=, \verb=count=, and \verb=datatype=. For each sending operation there must be a matching receive operation.\\
     4218Since in parallel applications, the execution order of operations is not always deterministic, MPI provides \verb=tag= parameters - only where the value of \verb=tag= for the send and the receive operation is identical, then these operations fit together.
     4219\begin{itemize}
     4220\item \verb=int ADOLC_MPI_Send(=\\
     4221\begin{tabular}{l l l}
     4222\ \ & \verb=adouble *buf,=& // pointer to sending buffer\\
     4223& \verb=int count,= & // number of elements to send\\
     4224& \verb=ADOLC_MPI_Datatype datatype,= & // datatype of the elements of sending buffer\\
     4225& \verb=int dest,= & // id of the destination process\\
     4226& \verb=int tag,= &  // mark of the information\\
     4227& \verb=ADOLC_MPI_Comm comm)=  & // communicator of the process group
     4228\end{tabular} \\
     4229This call is the standard point-to-point function to send \verb=adoubles= from one process to another. Each sending call needs an receiving call by the other process.\\
     4230\item \verb=int ADOLC_MPI_Recv(=\\
     4231\begin{tabular}{l l l}
     4232\ \ & \verb=adouble *buf,=& // pointer to receiving buffer\\
     4233& \verb=int count,= & // number of elements to receive\\
     4234& \verb=ADOLC_MPI_Datatype datatype,= & // datatype of the elements of sending buffer\\
     4235& \verb=int source,= & // id of the sending process\\
     4236& \verb=int tag,= &  // mark of the information\\
     4237& \verb=ADOLC_MPI_Comm comm)=  & // communicator of the process group
     4238\end{tabular} \\
     4239This is the standard point-to-point function to receive \verb=adoubles= from another process. It is the opposite of the sending call.\\
     4240\item \verb=int ADOLC_MPI_Bcast(=\\
     4241\begin{tabular}{l l l}
     4242\ \ & \verb=adouble *buf,=& // pointer to sending/receiving buffer\\
     4243& \verb=int count,= & // number of elements of buffer\\
     4244& \verb=ADOLC_MPI_Datatype datatype,= & // datatype of the elements of sending buffer\\
     4245& \verb=int root,= & // id of the process who have to send\\
     4246& \verb=ADOLC_MPI_Comm comm)=  & // communicator of the process group
     4247\end{tabular} \\
     4248 This function takes data from one node and sends it to all processes in the process group.
     4249\item \verb=int ADOLC_MPI_Reduce(=\\
     4250\begin{tabular}{l l l}
     4251\ \ & \verb=adouble *sendbuf,=& // pointer to sending buffer\\
     4252& \verb=adouble *rec_buf,=& // pointer to receiving buffer\\
     4253& \verb=int count,= & // number of elements of buffer\\
     4254& \verb=ADOLC_MPI_Datatype datatype,= & // datatype of the elements of both buffers\\
     4255& \verb=ADOLC_MPI_Op op,= & // operation for all received data (buffers)\\
     4256& \verb=int root,= & // id of the process who have to receive\\
     4257& \verb=ADOLC_MPI_Comm comm)=  & // communicator of the process group
     4258\end{tabular} \\
     4259 The function takes data from all processes in a group, performs an operation \verb=op= (such as summing), and stores the results on one node. Reduce is often useful at the beginning or end of a large distributed calculation, where each processor operates on a part of the data and then combines it into a result.
     4260\end{itemize}
     4261%
     4262%
     4263\subsection{Drivers and Interfaces}
     4264\label{DrAndIntPar}
     4265\subsubsection{Basic Drivers for parallel computing}
     4266\label{BasicDrPar}
     4267%
     4268After the tape is generated the appropriate ADOL-C drivers can be called. The only thing to do is to fit in the process' id and the count of all processes of the process group as first and second parameters. The same holds for the parallel version for the sparse drivers, if \verb=ColPack= is used.\\
     4269Examples with \verb=m= for the number of dependent and \verb=n= for the number of independent variables:
     4270\begin{itemize}
     4271\item \verb=int function( int id, int size,= // new parameters \\
     4272      \verb=              short tag,int m,int n,double* argument ,double* result)=
     4273\item \verb=int gradient( int id, int size,=\\
     4274      \verb=              short tag ,int n, const double* x,double* result)=
     4275\item \verb=int vec_jac(  int id, int size,=\\
     4276      \verb=              short tag, int m, int n, int repeat, double *argument,=\\
     4277      \verb=              double *lagrange, double *row)=
     4278\item \verb=int hess_mat( int id,int size,=\\
     4279      \verb=              short tag, int n, int q, double *argument,=\\
     4280      \verb=              double **tangent, double **result)=
     4281\item \verb=int hessian(  int id, int size,=\\
     4282      \verb=              short tag ,int n, double* argument, double** hess)=
     4283\item \verb=int jacobian( int id, int size,=\\
     4284      \verb=              short tag, int m, int n, const double* argument,=\\
     4285      \verb=              double** jacobian)=
     4286\item \verb=int jac_pat(  int id, int size,=\\
     4287      \verb=              short tag, int depen, int indep, const double *basepoint,=\\
     4288      \verb=              unsigned int **crs, int *options)=
     4289\item \verb=int sparse_jac( int id, int size,=\\
     4290      \verb=              short tag, int depen, int indep, int repeat,=\\
     4291      \verb=              const double *basepoint, int *nnz, unsigned int **rind,=\\
     4292      \verb=              unsigned int **cind, double **values,int *options )=
     4293\item \verb=int sparse_hess( int id, int size,=\\
     4294      \verb=              short tag, int indep, int repeat, const double *basepoint,=\\
     4295      \verb=              int *nnz, unsigned int **rind, unsigned int **cind,=\\
     4296      \verb=              double **values, int *options)=
     4297\end{itemize}
     4298%
     4299%
     4300\subsubsection{Basic Interfaces for parallel computing}
     4301\label{BasicIntPar}
     4302Also all interface functions can be called by adding \verb=id= and \verb=size= to the committed parameters. For example
     4303\begin{itemize}
     4304\item \verb=int zos_forward( int id, int size,=\\
     4305      \verb=              short tag, int m, int n, int keep,=\\
     4306      \verb=              const double *basepoints, double *valuepoints)=
     4307\item \verb=int fos_forward( int id, int size,=\\
     4308      \verb=              short tag, int m, int n, int keep,=\\
     4309      \verb=              const double *basepoints, double *argument=\\
     4310      \verb=              double *valuepoints, double *taylors)=
     4311\item \verb=int hos_reverse( int id, int size,=\\
     4312      \verb=              short tag, int m, int n, int degre,=\\
     4313      \verb=              double *lagrange, double **results)=
     4314\item \verb=int int_forward_tight( int id, int size,=\\
     4315      \verb=              short tag, int m, int n, int p,=\\
     4316      \verb=              const double *basepoints,=\\
     4317      \verb=              unsigned long int **arguments, double *valuepoints,=\\
     4318      \verb=              unsigned long int **taylors)=
     4319\item \verb=int nonl_ind_forward_tight( int id, int size,=\\
     4320      \verb=              short tag, int m, int n, double *basepoints,=\\
     4321      \verb=              unsigned int **crs )=
     4322\item \verb=int indopro_forward_safe( int id, int size,=\\
     4323      \verb=              short tag, int m, int n, double *basepoints,=\\
     4324      \verb=              unsigned int **crs )=
     4325\end{itemize}
     4326%
     4327
    40884328\section{Example Codes}
    40894329\label{example}
     
    44514691%\vspace*{-4mm}
    44524692%
     4693\subsection{Parallel Speelpenning example codes}
     4694\label{SpeelPar}
     4695%
     4696Two methods are shown in this example for parallel computing by using different MPI functions to spread the variables and their computing. The first example with \verb=tag1= evaluates the jacobian of the functions
     4697\[
     4698y \; = \; f(x)\; =\; \left( \sum\limits_{i=0}^{n-1} x_i^2 \ , \  \sum\limits_{i=0}^{n-1} \cos(x_i)+\exp(x_i) \ , \   \sum\limits_{i=0}^{n-1} x_i \right)^T \ :
     4699\]
     4700%
     4701\begin{verbatim}
     4702#define HAVE_MPI_MPI_H 1           // using parallel mode
     4703#include <adolc/adouble.h>         // use of active doubles
     4704#include <adolc/adouble_mpi.h>     // use of parallel MPI functions
     4705#include <adolc/interfaces_mpi.h>  // use of parallel driver functions
     4706#include <adolc/drivers/drivers.h>
     4707#include <adolc/adalloc.h>
     4708#include <math.h>
     4709#include <cstdlib>
     4710#include <cstdio>
     4711
     4712#define tag1 0  // first tag for computing jacobian
     4713#define tag2 1  // second tag for gradient and hessian
     4714
     4715#define CMMCTR ADOLC_MPI_COMM_WORLD  // shortcut
     4716
     4717using namespace std;
     4718
     4719int main(int* argc,char** argv) {
     4720    int n, m = 3, i, j, id, size;
     4721    int root = 0;                      // root process has id 0
     4722    int tape_stats[STAT_SIZE];
     4723
     4724    ADOLC_MPI_Init(argc,&argv);        // initialisation
     4725    ADOLC_MPI_Comm_size(CMMCTR,&size); // get count of processes
     4726    ADOLC_MPI_Comm_rank(CMMCTR,&id);   // get id of process
     4727
     4728    if(id == root){
     4729       cout <<"PARALLEL SPEELPENNINGS PRODUCT\n\n"
     4730            <<"number of independent variables = ?\n";
     4731       cin >> n;
     4732    }
     4733
     4734    MPI_Bcast(&n,1, ADOLC_MPI_INT, root, CMMCTR);
     4735    // every process knows the count of independent variables
     4736
     4737    int n_dist = (int) n/size;
     4738    double x[n];
     4739    for(i=0;i<n;i++)
     4740        x[i] =  log(2.0 +i);   // some initialization
     4741
     4742    adouble *xad;
     4743
     4744/*************************************************************/
     4745/********** function evaluation for first example ************/
     4746/*************************************************************/
     4747    double *c = new double[m];
     4748
     4749    xad = new adouble[n];                 // allocation of
     4750    adouble *cad = new adouble[m];        // needed arrays
     4751    for( i = 0; i < m; i++)
     4752       cad_[i]=0.0;
     4753
     4754    trace_on( id, size, tag1);
     4755    if( id == root ){
     4756           for (i=0;i<n;i++)
     4757                  xad[i] <<= x[i];
     4758          // setting independent variables
     4759          }
     4760
     4761    ADOLC_MPI_Bcast(xad, n, MPI_ADOUBLE, root, CMMCTR);
     4762
     4763    for(i = myid*n_dist; i < (myid+1)*n_dist; i++){
     4764       cad[0] += xad[i]*xad[i];
     4765       cad[1] += cos(xad[i]) + exp(xad[i]);
     4766       cad[2] += xad[i];
     4767    }  // some evaluations
     4768
     4769    ADOLC_MPI_Barrier( CMMCTR );   // optional
     4770
     4771    ADOLC_MPI_Reduce( cad, cad,m, MPI_ADOUBLE, ADOLC_MPI_SUM, root, CMMCTR);
     4772
     4773    if ( id == root ) {
     4774       for(i = 0; i < m; i++ )
     4775          cad[i] >>= c[i];
     4776    }
     4777    trace_off();
     4778    delete[] xad;
     4779    delete[] cad;
     4780
     4781    if ( id == root ){
     4782        printf("\n c = [ %2.4lf %2.4lf %2.4lf]\n", c[0], c[1], c[2]);
     4783    }
     4784
     4785    tape_doc( id, size, tag1, m, n, x, c);
     4786
     4787    double **jac = NULL;
     4788    if ( id == root )
     4789       jac = myalloc2(m,n);
     4790
     4791    jacobian( id, size, tag1, m, n, x, jac);
     4792    if ( id == root )
     4793       printmat("Jacobian ",m,n,jac);
     4794
     4795     double **x_pp = NULL;
     4796     if ( id == root )
     4797        x_pp = myallocI2(n);
     4798
     4799    fov_forward( id, size, tag1, m, n, n, x, x_pp, c, jac);
     4800    if ( id == root ){
     4801       printmat("jac output",m, n, jac);
     4802       myfree2(jac);
     4803       myfreeI2(n,x_pp);
     4804    }
     4805\end{verbatim}
     4806%
     4807The second example with \verb=tag2= evaluates the gradient and hessian of the function
     4808\[
     4809y \; = \; f(x)\; =\; \prod_{i=0}^{n-1} x_i .
     4810\]
     4811%
     4812\begin{verbatim}
     4813/*************************************************************/
     4814/********* function evaluation for second example ************/
     4815/*************************************************************/
     4816
     4817    xad = new adouble[n];
     4818    adouble* xad_tmp = new adouble[n_dist];
     4819    adouble res_ad, res_ad_tmp;
     4820    double res;
     4821
     4822    trace_on( id, size, tag2);
     4823    if ( id == root ){
     4824       for (i = 0; i < n; i++)
     4825           xad[i] <<= x[i];
     4826    }
     4827    res_ad_tmp = 1.0;
     4828
     4829    ADOLC_MPI_Scatter( xad, n_dist, xad_tmp, n_dist,
     4830                       MPI_ADOUBLE, root, CMMCTR    );
     4831
     4832    for(i = 0; i < n_dist; i++)
     4833       res_ad_tmp *= xad_tmp[i]; // some evaluation
     4834
     4835    ADOLC_MPI_Barrier( CMMCTR );  // optional
     4836
     4837    ADOLC_MPI_Reduce( &res_ad_tmp, &res_ad, 1, MPI_ADOUBLE,
     4838                      ADOLC_MPI_PROD, root, CMMCTR         );
     4839
     4840    if ( id == root )
     4841          res_ad >>= res;
     4842
     4843    trace_off();
     4844    delete[] xad;
     4845    delete[] xad_tmp;
     4846
     4847    if ( id == root )
     4848       printf("\n result = %2.4lf \n", res);
     4849
     4850    tape_doc( id, size, tag2, 1, n, x, &res);
     4851
     4852    double *grad = NULL;
     4853    if ( id == root ){
     4854       grad = myalloc1(n);
     4855       x_pp = myalloc2(n,n);
     4856    }
     4857
     4858    gradient( id, size, tag2, n, x, grad);
     4859    if (id == root ){  // output of  computed gradient
     4860       printf("gradient\n");
     4861       for(i=0; i<n ; i++)
     4862          printf("\t%2.4lf\n", grad[i]);
     4863       printf("\n");
     4864       myfree1(grad);
     4865    }
     4866
     4867    hessian(myid,procsize,tag2,n,x,x_pp);
     4868    if ( id == root ){ // output of  computed hessian
     4869       printmat("Hessian", n, n, x_pp);
     4870       myfree2(x_pp);
     4871    }
     4872
     4873    delete[] x;
     4874    delete[] c;
     4875    ADOLC_MPI_Finalize();
     4876    return 0;
     4877}
     4878\end{verbatim}
     4879%
    44534880\section*{Acknowledgements}
    44544881%
  • branches/MPI/ADOL-C/doc/version.tex

    r402 r424  
    11\newcommand{\packagename}{adolc}
    2 \newcommand{\packageversion}{2.4.0-trunk}
     2\newcommand{\packageversion}{2.4.0-trunk-mpi}
    33\newcommand{\packagetar}{\packagename-\packageversion}
  • branches/MPI/ADOL-C/examples/Makefile.in

    r377 r424  
    6161        $(top_srcdir)/autoconf/depcomp
    6262ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    63 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     63am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     64        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6465am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6566        $(ACLOCAL_M4)
     
    234235MANIFEST_TOOL = @MANIFEST_TOOL@
    235236MKDIR_P = @MKDIR_P@
     237MPICC = @MPICC@
     238MPICXX = @MPICXX@
     239MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     240MPILIBS = @MPILIBS@
    236241NM = @NM@
    237242NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/Makefile

    r423 r424  
    11# Makefile.in generated by automake 1.12.1 from Makefile.am.
    2 # @configure_input@
     2# ADOL-C/examples/additional_examples/Makefile.  Generated from Makefile.in by configure.
    33
    44# Copyright (C) 1994-2012 Free Software Foundation, Inc.
     
    1313# PARTICULAR PURPOSE.
    1414
    15 @SET_MAKE@
     15
    1616
    1717##############################################################################
    1818##############################################################################
    19 VPATH = @srcdir@
     19
    2020am__make_dryrun = \
    2121  { \
     
    3535    test $$am__dry = yes; \
    3636  }
    37 pkgdatadir = $(datadir)/@PACKAGE@
    38 pkgincludedir = $(includedir)/@PACKAGE@
    39 pkglibdir = $(libdir)/@PACKAGE@
    40 pkglibexecdir = $(libexecdir)/@PACKAGE@
     37pkgdatadir = $(datadir)/adolc
     38pkgincludedir = $(includedir)/adolc
     39pkglibdir = $(libdir)/adolc
     40pkglibexecdir = $(libexecdir)/adolc
    4141am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
    4242install_sh_DATA = $(install_sh) -c -m 644
     
    5151PRE_UNINSTALL = :
    5252POST_UNINSTALL = :
    53 build_triplet = @build@
    54 host_triplet = @host@
     53build_triplet = x86_64-suse-linux-gnu
     54host_triplet = x86_64-suse-linux-gnu
    5555subdir = ADOL-C/examples/additional_examples
    5656DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5757ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    58 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     58am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     59        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    5960am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6061        $(ACLOCAL_M4)
     
    6364CONFIG_CLEAN_FILES =
    6465CONFIG_CLEAN_VPATH_FILES =
    65 AM_V_GEN = $(am__v_GEN_@AM_V@)
    66 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
     66AM_V_GEN = $(am__v_GEN_$(V))
     67am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
    6768am__v_GEN_0 = @echo "  GEN     " $@;
    68 AM_V_at = $(am__v_at_@AM_V@)
    69 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
     69AM_V_at = $(am__v_at_$(V))
     70am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
    7071am__v_at_0 = @
    7172SOURCES =
     
    119120  done; \
    120121  reldir="$$dir2"
    121 ACLOCAL = @ACLOCAL@
    122 ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@
    123 ADOLC_SUBVERSION = @ADOLC_SUBVERSION@
    124 ADOLC_VERSION = @ADOLC_VERSION@
    125 ADVBRANCH_FALSE = @ADVBRANCH_FALSE@
    126 ADVBRANCH_TRUE = @ADVBRANCH_TRUE@
    127 AMTAR = @AMTAR@
    128 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
    129 AR = @AR@
    130 AS = @AS@
    131 ATRIG_ERF_FALSE = @ATRIG_ERF_FALSE@
    132 ATRIG_ERF_TRUE = @ATRIG_ERF_TRUE@
    133 AUTOCONF = @AUTOCONF@
    134 AUTOHEADER = @AUTOHEADER@
    135 AUTOMAKE = @AUTOMAKE@
    136 AWK = @AWK@
    137 CC = @CC@
    138 CCDEPMODE = @CCDEPMODE@
    139 CFLAGS = @CFLAGS@
    140 COLPACK_CFLAGS = @COLPACK_CFLAGS@
    141 COLPACK_LIBS = @COLPACK_LIBS@
    142 CPP = @CPP@
    143 CPPFLAGS = @CPPFLAGS@
    144 CXX = @CXX@
    145 CXXCPP = @CXXCPP@
    146 CXXDEPMODE = @CXXDEPMODE@
    147 CXXFLAGS = @CXXFLAGS@
    148 CYGPATH_W = @CYGPATH_W@
    149 DEFS = @DEFS@
    150 DEPDIR = @DEPDIR@
    151 DLLTOOL = @DLLTOOL@
    152 DSYMUTIL = @DSYMUTIL@
    153 DUMPBIN = @DUMPBIN@
    154 ECHO_C = @ECHO_C@
    155 ECHO_N = @ECHO_N@
    156 ECHO_T = @ECHO_T@
    157 EGREP = @EGREP@
    158 EXEEXT = @EXEEXT@
    159 FGREP = @FGREP@
    160 GREP = @GREP@
    161 INSTALL = @INSTALL@
    162 INSTALL_DATA = @INSTALL_DATA@
    163 INSTALL_PROGRAM = @INSTALL_PROGRAM@
    164 INSTALL_SCRIPT = @INSTALL_SCRIPT@
    165 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
    166 LD = @LD@
    167 LDFLAGS = @LDFLAGS@
    168 LIBOBJS = @LIBOBJS@
    169 LIBS = @LIBS@
    170 LIBTOOL = @LIBTOOL@
    171 LIPO = @LIPO@
    172 LN_S = @LN_S@
    173 LTLIBOBJS = @LTLIBOBJS@
    174 MAKEINFO = @MAKEINFO@
    175 MANIFEST_TOOL = @MANIFEST_TOOL@
    176 MKDIR_P = @MKDIR_P@
    177 NM = @NM@
    178 NMEDIT = @NMEDIT@
    179 OBJDUMP = @OBJDUMP@
    180 OBJEXT = @OBJEXT@
    181 OTOOL = @OTOOL@
    182 OTOOL64 = @OTOOL64@
    183 PACKAGE = @PACKAGE@
    184 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
    185 PACKAGE_NAME = @PACKAGE_NAME@
    186 PACKAGE_STRING = @PACKAGE_STRING@
    187 PACKAGE_TARNAME = @PACKAGE_TARNAME@
    188 PACKAGE_URL = @PACKAGE_URL@
    189 PACKAGE_VERSION = @PACKAGE_VERSION@
    190 PATH_SEPARATOR = @PATH_SEPARATOR@
    191 RANLIB = @RANLIB@
    192 REAL_TYPE = @REAL_TYPE@
    193 SED = @SED@
    194 SET_MAKE = @SET_MAKE@
    195 SHELL = @SHELL@
    196 STRIP = @STRIP@
    197 UINT_TYPE = @UINT_TYPE@
    198 VERSION = @VERSION@
    199 _lib = @_lib@
    200 abs_builddir = @abs_builddir@
    201 abs_srcdir = @abs_srcdir@
    202 abs_top_builddir = @abs_top_builddir@
    203 abs_top_srcdir = @abs_top_srcdir@
    204 ac_adolc_cflags = @ac_adolc_cflags@
    205 ac_adolc_cxxflags = @ac_adolc_cxxflags@
    206 ac_aux_dir = @ac_aux_dir@
    207 ac_ct_AR = @ac_ct_AR@
    208 ac_ct_CC = @ac_ct_CC@
    209 ac_ct_CXX = @ac_ct_CXX@
    210 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
    211 am__include = @am__include@
    212 am__leading_dot = @am__leading_dot@
    213 am__quote = @am__quote@
    214 am__tar = @am__tar@
    215 am__untar = @am__untar@
    216 bindir = @bindir@
    217 build = @build@
    218 build_alias = @build_alias@
    219 build_cpu = @build_cpu@
    220 build_os = @build_os@
    221 build_vendor = @build_vendor@
    222 builddir = @builddir@
    223 datadir = @datadir@
    224 datarootdir = @datarootdir@
    225 docdir = @docdir@
    226 dvidir = @dvidir@
    227 exec_prefix = @exec_prefix@
    228 host = @host@
    229 host_alias = @host_alias@
    230 host_cpu = @host_cpu@
    231 host_os = @host_os@
    232 host_vendor = @host_vendor@
    233 htmldir = @htmldir@
    234 includedir = @includedir@
    235 infodir = @infodir@
    236 install_sh = @install_sh@
    237 libdir = @libdir@
    238 libexecdir = @libexecdir@
    239 localedir = @localedir@
    240 localstatedir = @localstatedir@
    241 mandir = @mandir@
    242 mkdir_p = @mkdir_p@
    243 oldincludedir = @oldincludedir@
    244 pdfdir = @pdfdir@
    245 prefix = @prefix@
    246 program_transform_name = @program_transform_name@
    247 psdir = @psdir@
    248 sbindir = @sbindir@
    249 sharedstatedir = @sharedstatedir@
    250 srcdir = @srcdir@
    251 sysconfdir = @sysconfdir@
    252 target_alias = @target_alias@
    253 top_build_prefix = @top_build_prefix@
    254 top_builddir = @top_builddir@
    255 top_srcdir = @top_srcdir@
     122ACLOCAL = ${SHELL} /home/kulshres/optsoft/tmp/adolc_repo/autoconf/missing --run aclocal-1.12
     123ADOLC_PATCHLEVEL = 0
     124ADOLC_SUBVERSION = 4
     125ADOLC_VERSION = 2
     126ADVBRANCH_FALSE =
     127ADVBRANCH_TRUE = //
     128AMTAR = $${TAR-tar}
     129AM_DEFAULT_VERBOSITY = 0
     130AR = ar
     131AS = as
     132ATRIG_ERF_FALSE =
     133ATRIG_ERF_TRUE = //
     134AUTOCONF = ${SHELL} /home/kulshres/optsoft/tmp/adolc_repo/autoconf/missing --run autoconf
     135AUTOHEADER = ${SHELL} /home/kulshres/optsoft/tmp/adolc_repo/autoconf/missing --run autoheader
     136AUTOMAKE = ${SHELL} /home/kulshres/optsoft/tmp/adolc_repo/autoconf/missing --run automake-1.12
     137AWK = gawk
     138CC = gcc
     139CCDEPMODE = depmode=gcc3
     140CFLAGS = -O3 -g -march=core2 -mtune=core2 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -ffast-math -mfpmath=sse  -mieee-fp
     141COLPACK_CFLAGS =
     142COLPACK_LIBS =
     143CPP = gcc -E
     144CPPFLAGS =
     145CXX = g++
     146CXXCPP = g++ -E
     147CXXDEPMODE = depmode=gcc3
     148CXXFLAGS = -O3 -g -march=core2 -mtune=core2 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -ffast-math -mfpmath=sse  -mieee-fp
     149CYGPATH_W = echo
     150DEFS = -DHAVE_CONFIG_H
     151DEPDIR = .deps
     152DLLTOOL = dlltool
     153DSYMUTIL =
     154DUMPBIN =
     155ECHO_C =
     156ECHO_N = -n
     157ECHO_T =
     158EGREP = /usr/bin/grep -E
     159EXEEXT =
     160FGREP = /usr/bin/grep -F
     161GREP = /usr/bin/grep
     162INSTALL = /usr/bin/install -c
     163INSTALL_DATA = ${INSTALL} -m 644
     164INSTALL_PROGRAM = ${INSTALL}
     165INSTALL_SCRIPT = ${INSTALL}
     166INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
     167LD = /usr/x86_64-suse-linux/bin/ld -m elf_x86_64
     168LDFLAGS =
     169LIBOBJS =
     170LIBS = -lm
     171LIBTOOL = $(SHELL) $(top_builddir)/libtool
     172LIPO =
     173LN_S = ln -s
     174LTLIBOBJS =
     175MAKEINFO = ${SHELL} /home/kulshres/optsoft/tmp/adolc_repo/autoconf/missing --run makeinfo
     176MANIFEST_TOOL = :
     177MKDIR_P = /usr/bin/mkdir -p
     178MPICC =
     179MPICXX =
     180MPICXXEXTRALDFLAGS =
     181MPILIBS =
     182NM = /usr/bin/nm -B
     183NMEDIT =
     184OBJDUMP = objdump
     185OBJEXT = o
     186OTOOL =
     187OTOOL64 =
     188PACKAGE = adolc
     189PACKAGE_BUGREPORT = adol-c@list.coin-or.org
     190PACKAGE_NAME = adolc
     191PACKAGE_STRING = adolc 2.4.0-trunk-mpi
     192PACKAGE_TARNAME = adolc
     193PACKAGE_URL =
     194PACKAGE_VERSION = 2.4.0-trunk-mpi
     195PATH_SEPARATOR = :
     196RANLIB = ranlib
     197REAL_TYPE = double
     198SED = /usr/bin/sed
     199SET_MAKE =
     200SHELL = /bin/sh
     201STRIP = strip
     202UINT_TYPE = uint32_t
     203VERSION = 2.4.0-trunk-mpi
     204_lib = lib64
     205abs_builddir = /home/kulshres/optsoft/tmp/adolc_repo/ADOL-C/examples/additional_examples
     206abs_srcdir = /home/kulshres/optsoft/tmp/adolc_repo/ADOL-C/examples/additional_examples
     207abs_top_builddir = /home/kulshres/optsoft/tmp/adolc_repo
     208abs_top_srcdir = /home/kulshres/optsoft/tmp/adolc_repo
     209ac_adolc_cflags = -O3 -g -march=core2 -mtune=core2 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -ffast-math -mfpmath=sse  -mieee-fp
     210ac_adolc_cxxflags = -O3 -g -march=core2 -mtune=core2 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -ffast-math -mfpmath=sse  -mieee-fp
     211ac_aux_dir = autoconf
     212ac_ct_AR = ar
     213ac_ct_CC = gcc
     214ac_ct_CXX = g++
     215ac_ct_DUMPBIN =
     216am__include = include
     217am__leading_dot = .
     218am__quote =
     219am__tar = $${TAR-tar} chof - "$$tardir"
     220am__untar = $${TAR-tar} xf -
     221bindir = ${exec_prefix}/bin
     222build = x86_64-suse-linux-gnu
     223build_alias =
     224build_cpu = x86_64
     225build_os = linux-gnu
     226build_vendor = suse
     227builddir = .
     228datadir = ${datarootdir}
     229datarootdir = ${prefix}/share
     230docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
     231dvidir = ${docdir}
     232exec_prefix = ${prefix}
     233host = x86_64-suse-linux-gnu
     234host_alias =
     235host_cpu = x86_64
     236host_os = linux-gnu
     237host_vendor = suse
     238htmldir = ${docdir}
     239includedir = ${prefix}/include
     240infodir = ${datarootdir}/info
     241install_sh = ${SHELL} /home/kulshres/optsoft/tmp/adolc_repo/autoconf/install-sh
     242libdir = ${exec_prefix}/${_lib}
     243libexecdir = ${exec_prefix}/lib
     244localedir = ${datarootdir}/locale
     245localstatedir = ${prefix}/var
     246mandir = ${datarootdir}/man
     247mkdir_p = /usr/bin/mkdir -p
     248oldincludedir = /usr/include
     249pdfdir = ${docdir}
     250prefix = /home/kulshres/adolc_base
     251program_transform_name = s,x,x,
     252psdir = ${docdir}
     253sbindir = ${exec_prefix}/sbin
     254sharedstatedir = ${prefix}/com
     255srcdir = .
     256sysconfdir = ${prefix}/etc
     257target_alias =
     258top_build_prefix = ../../../
     259top_builddir = ../../..
     260top_srcdir = ../../..
    256261MAINTAINERCLEANFILES = Makefile.in *~
    257 @ADDEXA_TRUE@SUBDIRS = clock hessmat lufact ode sparse tapesave timing \
    258 @ADDEXA_TRUE@                       detexam helm lighthouse scal speelpenning taylor pow \
    259 @ADDEXA_TRUE@                       checkpointing ext_diff_func fixpoint_exam openmp_exam \
    260 @ADDEXA_TRUE@                       cuda
    261 
    262 @PAREXA_TRUE@SUBDIRS = clock hessmat lufact ode sparse tapesave timing \
    263 @PAREXA_TRUE@                       detexam helm lighthouse scal speelpenning taylor pow \
    264 @PAREXA_TRUE@                       checkpointing ext_diff_func fixpoint_exam openmp_exam \
    265 @PAREXA_TRUE@                       cuda
     262#SUBDIRS = clock hessmat lufact ode sparse tapesave timing \
     263#                       detexam helm lighthouse scal speelpenning taylor pow \
     264#                       checkpointing ext_diff_func fixpoint_exam openmp_exam \
     265#                       cuda
     266
     267#SUBDIRS = clock hessmat lufact ode sparse tapesave timing \
     268#                       detexam helm lighthouse scal speelpenning taylor pow \
     269#                       checkpointing ext_diff_func fixpoint_exam openmp_exam \
     270#                       cuda
    266271
    267272all: all-recursive
  • branches/MPI/ADOL-C/examples/additional_examples/Makefile.in

    r407 r424  
    5656DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5757ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    58 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     58am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     59        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    5960am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6061        $(ACLOCAL_M4)
     
    175176MANIFEST_TOOL = @MANIFEST_TOOL@
    176177MKDIR_P = @MKDIR_P@
     178MPICC = @MPICC@
     179MPICXX = @MPICXX@
     180MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     181MPILIBS = @MPILIBS@
    177182NM = @NM@
    178183NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/checkpointing/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/clock/Makefile.in

    r377 r424  
    5656DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5757ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    58 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     58am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     59        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    5960am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6061        $(ACLOCAL_M4)
     
    133134MANIFEST_TOOL = @MANIFEST_TOOL@
    134135MKDIR_P = @MKDIR_P@
     136MPICC = @MPICC@
     137MPICXX = @MPICXX@
     138MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     139MPILIBS = @MPILIBS@
    135140NM = @NM@
    136141NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/cuda/Makefile.in

    r407 r424  
    5656DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5757ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    58 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     58am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     59        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    5960am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6061        $(ACLOCAL_M4)
     
    133134MANIFEST_TOOL = @MANIFEST_TOOL@
    134135MKDIR_P = @MKDIR_P@
     136MPICC = @MPICC@
     137MPICXX = @MPICXX@
     138MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     139MPILIBS = @MPILIBS@
    135140NM = @NM@
    136141NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/detexam/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    170171MANIFEST_TOOL = @MANIFEST_TOOL@
    171172MKDIR_P = @MKDIR_P@
     173MPICC = @MPICC@
     174MPICXX = @MPICXX@
     175MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     176MPILIBS = @MPILIBS@
    172177NM = @NM@
    173178NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/ext_diff_func/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/fixpoint_exam/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/helm/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    170171MANIFEST_TOOL = @MANIFEST_TOOL@
    171172MKDIR_P = @MKDIR_P@
     173MPICC = @MPICC@
     174MPICXX = @MPICXX@
     175MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     176MPILIBS = @MPILIBS@
    172177NM = @NM@
    173178NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/hessmat/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/lighthouse/Makefile.in

    r377 r424  
    6060        $(top_srcdir)/autoconf/depcomp
    6161ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    62 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     62am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     63        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6364am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6465        $(ACLOCAL_M4)
     
    181182MANIFEST_TOOL = @MANIFEST_TOOL@
    182183MKDIR_P = @MKDIR_P@
     184MPICC = @MPICC@
     185MPICXX = @MPICXX@
     186MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     187MPILIBS = @MPILIBS@
    183188NM = @NM@
    184189NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/lufact/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    170171MANIFEST_TOOL = @MANIFEST_TOOL@
    171172MKDIR_P = @MKDIR_P@
     173MPICC = @MPICC@
     174MPICXX = @MPICXX@
     175MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     176MPILIBS = @MPILIBS@
    172177NM = @NM@
    173178NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/ode/Makefile.in

    r377 r424  
    6060        $(top_srcdir)/autoconf/depcomp
    6161ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    62 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     62am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     63        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6364am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6465        $(ACLOCAL_M4)
     
    178179MANIFEST_TOOL = @MANIFEST_TOOL@
    179180MKDIR_P = @MKDIR_P@
     181MPICC = @MPICC@
     182MPICXX = @MPICXX@
     183MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     184MPILIBS = @MPILIBS@
    180185NM = @NM@
    181186NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/openmp_exam/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    170171MANIFEST_TOOL = @MANIFEST_TOOL@
    171172MKDIR_P = @MKDIR_P@
     173MPICC = @MPICC@
     174MPICXX = @MPICXX@
     175MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     176MPILIBS = @MPILIBS@
    172177NM = @NM@
    173178NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/pow/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/scal/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/sparse/Makefile.in

    r377 r424  
    6161        $(top_srcdir)/autoconf/depcomp
    6262ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    63 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     63am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     64        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6465am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6566        $(ACLOCAL_M4)
     
    184185MANIFEST_TOOL = @MANIFEST_TOOL@
    185186MKDIR_P = @MKDIR_P@
     187MPICC = @MPICC@
     188MPICXX = @MPICXX@
     189MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     190MPILIBS = @MPILIBS@
    186191NM = @NM@
    187192NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/speelpenning/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/tapesave/Makefile.in

    r377 r424  
    5959        $(top_srcdir)/autoconf/depcomp
    6060ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6263am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6364        $(ACLOCAL_M4)
     
    170171MANIFEST_TOOL = @MANIFEST_TOOL@
    171172MKDIR_P = @MKDIR_P@
     173MPICC = @MPICC@
     174MPICXX = @MPICXX@
     175MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     176MPILIBS = @MPILIBS@
    172177NM = @NM@
    173178NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/taylor/Makefile.in

    r377 r424  
    6161        $(top_srcdir)/autoconf/depcomp
    6262ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    63 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     63am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     64        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6465am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6566        $(ACLOCAL_M4)
     
    186187MANIFEST_TOOL = @MANIFEST_TOOL@
    187188MKDIR_P = @MKDIR_P@
     189MPICC = @MPICC@
     190MPICXX = @MPICXX@
     191MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     192MPILIBS = @MPILIBS@
    188193NM = @NM@
    189194NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/examples/additional_examples/timing/Makefile.in

    r377 r424  
    6666        $(top_srcdir)/autoconf/depcomp
    6767ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    68 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     68am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     69        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6970am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    7071        $(ACLOCAL_M4)
     
    256257MANIFEST_TOOL = @MANIFEST_TOOL@
    257258MKDIR_P = @MKDIR_P@
     259MPICC = @MPICC@
     260MPICXX = @MPICXX@
     261MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     262MPILIBS = @MPILIBS@
    258263NM = @NM@
    259264NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/include/Makefile.in

    r377 r424  
    5656DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5757ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    58 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     58am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     59        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    5960am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6061        $(ACLOCAL_M4)
     
    173174MANIFEST_TOOL = @MANIFEST_TOOL@
    174175MKDIR_P = @MKDIR_P@
     176MPICC = @MPICC@
     177MPICXX = @MPICXX@
     178MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     179MPILIBS = @MPILIBS@
    175180NM = @NM@
    176181NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/include/adolc/Makefile.am

    r408 r424  
    1818                       revolve.h advector.h adolc_settings.h \
    1919                       adoublecuda.h
     20if HAVE_MPI
     21pkginclude_HEADERS += adolc_mpi.h interfaces_mpi.h
     22endif
    2023
    2124SUBDIRS = drivers tapedoc
  • branches/MPI/ADOL-C/include/adolc/Makefile.in

    r407 r424  
    5454build_triplet = @build@
    5555host_triplet = @host@
    56 @SPARSE_TRUE@am__append_1 = sparse
     56@HAVE_MPI_TRUE@am__append_1 = adolc_mpi.h interfaces_mpi.h
     57@SPARSE_TRUE@am__append_2 = sparse
    5758subdir = ADOL-C/include/adolc
    58 DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \
     59DIST_COMMON = $(am__pkginclude_HEADERS_DIST) $(srcdir)/Makefile.am \
    5960        $(srcdir)/Makefile.in $(srcdir)/adolc_settings.h.in
    6061ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     62am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     63        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6264am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6365        $(ACLOCAL_M4)
     
    8688    *) (install-info --version) >/dev/null 2>&1;; \
    8789  esac
     90am__pkginclude_HEADERS_DIST = adolc.h adalloc.h adouble.h adutils.h \
     91        adutilsc.h common.h convolut.h dvlparms.h fortutils.h \
     92        interfaces.h taping.h usrparms.h externfcts.h checkpointing.h \
     93        fixpoint.h adolc_sparse.h adolc_openmp.h revolve.h advector.h \
     94        adolc_settings.h adoublecuda.h adolc_mpi.h interfaces_mpi.h
    8895am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
    8996am__vpath_adj = case $$p in \
     
    205212MANIFEST_TOOL = @MANIFEST_TOOL@
    206213MKDIR_P = @MKDIR_P@
     214MPICC = @MPICC@
     215MPICXX = @MPICXX@
     216MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     217MPILIBS = @MPILIBS@
    207218NM = @NM@
    208219NMEDIT = @NMEDIT@
     
    285296top_srcdir = @top_srcdir@
    286297pkginclude_HEADERS = adolc.h adalloc.h adouble.h adutils.h adutilsc.h \
    287                        common.h convolut.h dvlparms.h fortutils.h\
    288                        interfaces.h taping.h usrparms.h \
    289                        externfcts.h checkpointing.h fixpoint.h\
    290                        adolc_sparse.h adolc_openmp.h \
    291                        revolve.h advector.h adolc_settings.h \
    292                        adoublecuda.h
    293 
    294 SUBDIRS = drivers tapedoc $(am__append_1)
     298        common.h convolut.h dvlparms.h fortutils.h interfaces.h \
     299        taping.h usrparms.h externfcts.h checkpointing.h fixpoint.h \
     300        adolc_sparse.h adolc_openmp.h revolve.h advector.h \
     301        adolc_settings.h adoublecuda.h $(am__append_1)
     302SUBDIRS = drivers tapedoc $(am__append_2)
    295303EXTRA_DIST = adolc_settings.h.in
    296304all: all-recursive
  • branches/MPI/ADOL-C/include/adolc/adouble.h

    r378 r424  
    1111 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
    1212               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
    13                Kshitij Kulshreshtha
     13               Kshitij Kulshreshtha, Benjamin Letschert
    1414 
    1515 This file is part of ADOL-C. This software is provided as open source.
     
    2121#if !defined(ADOLC_ADOUBLE_H)
    2222#define ADOLC_ADOUBLE_H 1
     23
     24#include <adolc/common.h>
     25#if defined(HAVE_MPI)
     26#if defined(ADOLC_ADOLC_MPI_H) || defined(ADOLC_TAPELESS)
     27#include <mpi.h>
     28
     29#define ADOLC_MPI_Datatype MPI_Datatype
     30#define MPI_ADOUBLE MPI_DOUBLE
     31#define ADOLC_MPI_COMM_WORLD MPI_COMM_WORLD
     32#define ADOLC_MPI_Comm MPI_Comm
     33
     34BEGIN_C_DECLS
     35
     36typedef enum ADOLC_MPI_Op_t {
     37    ADOLC_MPI_MAX=100,
     38    ADOLC_MPI_MIN,
     39    ADOLC_MPI_SUM,
     40    ADOLC_MPI_PROD,
     41    ADOLC_MPI_LAND,
     42    ADOLC_MPI_BAND,
     43    ADOLC_MPI_LOR,
     44    ADOLC_MPI_BOR,
     45    ADOLC_MPI_LXOR,
     46    ADOLC_MPI_BXOR,
     47    ADOLC_MPI_MINLOC,
     48    ADOLC_MPI_MAXLOC
     49} ADOLC_MPI_Op;
     50
     51#if 0
     52// I am quite sure we don't ever need to call this -KK
     53static MPI_Op adolc_to_mpi_op(ADOLC_MPI_Op op) {
     54    switch (op) {
     55     case ADOLC_MPI_MAX: return MPI_MAX;
     56     case ADOLC_MPI_MIN: return MPI_MIN;
     57     case ADOLC_MPI_SUM: return MPI_SUM;
     58     case ADOLC_MPI_PROD: return MPI_PROD;
     59     case ADOLC_MPI_LAND: return MPI_LAND;
     60     case ADOLC_MPI_BAND: return MPI_BAND;
     61     case ADOLC_MPI_LOR: return MPI_LOR;
     62     case ADOLC_MPI_BOR: return MPI_BOR;
     63     case ADOLC_MPI_LXOR: return MPI_LXOR;
     64     case ADOLC_MPI_BXOR: return MPI_BXOR;
     65     case ADOLC_MPI_MINLOC: return MPI_MINLOC;
     66     case ADOLC_MPI_MAXLOC: return MPI_MAXLOC;
     67    }
     68}
     69#endif
     70
     71END_C_DECLS
     72
     73#endif
     74#endif
    2375
    2476/****************************************************************************/
     
    3688using std::istream;
    3789
    38 #include <adolc/common.h>
    3990
    4091/* NOTICE: There are automatic includes at the end of this file! */
     
    491542
    492543#include <limits>
     544#if defined(HAVE_MPI)
     545#include <mpi.h>
     546#endif
    493547
    494548namespace adtl {
     
    14951549    return in;
    14961550}
    1497 }
     1551
     1552#if defined( HAVE_MPI )
     1553
     1554#if defined(NUMBER_DIRECTIONS)
     1555int MPI_ND = ADOLC_numDir+1;
     1556#else
     1557int MPI_ND =2;
     1558#endif
     1559
     1560int ADOLC_MPI_Init( int* a,
     1561                    char*** b
     1562){
     1563    return MPI_Init(a,b);
     1564}
     1565int ADOLC_MPI_Comm_size( ADOLC_MPI_Comm comm,
     1566                         int* size
     1567){
     1568    return MPI_Comm_size(comm,size);
     1569}
     1570int ADOLC_MPI_Comm_rank( ADOLC_MPI_Comm comm,
     1571                         int* rank
     1572){
     1573    return MPI_Comm_rank(comm, rank);
     1574}
     1575
     1576int ADOLC_MPI_Get_processor_name( char* a,
     1577                                  int* b
     1578){
     1579    return MPI_Get_processor_name(a,b);
     1580}
     1581
     1582int ADOLC_MPI_Barrier( ADOLC_MPI_Comm comm ){
     1583    return MPI_Barrier(comm);
     1584}
     1585
     1586int ADOLC_MPI_Finalize( ){
     1587    return MPI_Finalize();
     1588}
     1589
     1590int ADOLC_MPI_Send( adouble *buf,
     1591                    int count,
     1592                    ADOLC_MPI_Datatype datatype,
     1593                    int dest,
     1594                    int tag,
     1595                    ADOLC_MPI_Comm comm
     1596){
     1597    int l,i,j,h = count*MPI_ND;
     1598    int ierr =0;
     1599    double *trade = (double*) malloc(h*sizeof(double));
     1600
     1601//     trade = malloc(h);
     1602    for (i=0; i< count;i++ ){
     1603        trade[i*MPI_ND] = buf[i].getValue();
     1604#if defined (NUMBER_DIRECTIONS )
     1605        FOR_I_EQ_0_LT_NUMDIR
     1606          trade[i*MPI_ND+_i+1] = buf[i].getADValue(_i) ;
     1607#else
     1608        trade[i*MPI_ND +1] = buf[i].getADValue();
     1609#endif
     1610    }
     1611    ierr = MPI_Send(trade, h, datatype, dest, tag, comm);
     1612    free(trade);
     1613    return ierr;
     1614}
     1615
     1616int ADOLC_MPI_Recv(adouble *buf,
     1617                   int count,
     1618                   ADOLC_MPI_Datatype datatype,
     1619                   int source, int tag,
     1620                   ADOLC_MPI_Comm comm
     1621) {
     1622    int j, i, h = count*MPI_ND;
     1623    double *trade = (double*) malloc(h*sizeof(double));
     1624    int ierr =0;
     1625
     1626    MPI_Status status;
     1627    ierr = MPI_Recv(trade,h, datatype, source, tag, comm, &status);
     1628    if (buf==NULL)
     1629       buf = new adouble[count];
     1630    for (i=0; i< count;i++){
     1631        buf[i].setValue(trade[i*MPI_ND]);
     1632#if defined (NUMBER_DIRECTIONS )
     1633        FOR_I_EQ_0_LT_NUMDIR
     1634           buf[i].setADValue(_i,trade[i*MPI_ND +1 + _i]);
     1635#else
     1636       buf[i].setADValue(trade[i*MPI_ND +1]);
     1637#endif
     1638      }
     1639    free(trade);
     1640    return ierr;
     1641}
     1642int ADOLC_MPI_Bcast( adouble *buf,
     1643                     int count,
     1644                     ADOLC_MPI_Datatype datatype,
     1645                     int root,
     1646                     ADOLC_MPI_Comm comm )
     1647{
     1648    int i,id, ierr=0;
     1649    int h = count * MPI_ND;
     1650    double *trade = (double*) malloc(h*sizeof(double));
     1651    MPI_Comm_rank(MPI_COMM_WORLD, &id);
     1652
     1653    if ( id == root)
     1654       for(i= 0; i < count; i++){
     1655          trade[i*MPI_ND] = buf[i].getValue();
     1656#if defined (NUMBER_DIRECTIONS )
     1657          FOR_I_EQ_0_LT_NUMDIR
     1658                 trade[i*MPI_ND+_i+1] = buf[i].getADValue(_i) ;
     1659#else
     1660          trade[i*MPI_ND +1] = buf[i].getADValue();
     1661#endif
     1662       }
     1663    ierr = MPI_Bcast(trade,count,datatype,root, comm);
     1664
     1665    if ( id != root){
     1666       if (buf==NULL)
     1667          buf = new adouble[count];
     1668       for(i=0; i< count;i++)
     1669          buf[i].setValue(trade[i*MPI_ND]);
     1670#if defined (NUMBER_DIRECTIONS )
     1671          FOR_I_EQ_0_LT_NUMDIR
     1672          buf[i].setADValue(_i,trade[i*MPI_ND + _i+1]);
     1673#else
     1674          buf[i].setADValue(trade[i*MPI_ND +1]);
     1675#endif
     1676    }
     1677
     1678    free(trade);
     1679    return ierr;
     1680}
     1681
     1682int ADOLC_MPI_Gather(
     1683    adouble *sendbuf, adouble *recvbuf, int count, ADOLC_MPI_Datatype type, int root, ADOLC_MPI_Comm comm)
     1684{
     1685        int h_s = count*MPI_ND;
     1686        int h_r =h_s;
     1687     int i,id,size, ierr=0;
     1688     double *trade_s = (double*) malloc(h_s*sizeof(double)), *trade_r = NULL;
     1689
     1690
     1691    MPI_Comm_rank(MPI_COMM_WORLD, &id);
     1692    MPI_Comm_size(MPI_COMM_WORLD, &size);
     1693
     1694    if (id == root){
     1695           h_r *= size;
     1696           trade_r = (double*) malloc(h_r*sizeof(double));
     1697        }
     1698
     1699    for(i= 0; i < count; i++) {
     1700       trade_s[i*MPI_ND] = sendbuf[i].getValue();
     1701#if defined (NUMBER_DIRECTIONS )
     1702          FOR_I_EQ_0_LT_NUMDIR
     1703                 trade_s[i*MPI_ND+_i+1] = sendbuf[i].getADValue(_i) ;
     1704#else
     1705          trade_s[i*MPI_ND +1] = sendbuf[i].getADValue();
     1706#endif
     1707    }
     1708
     1709    ierr = MPI_Gather(trade_s,count,type,trade_r,count,type, root, comm);
     1710
     1711    if ( id == root){
     1712       if( recvbuf == NULL)
     1713           recvbuf = new adouble[count*size];
     1714       for(i=0; i< count*size;i++){
     1715          recvbuf[i].setValue(trade_r[i*MPI_ND]);
     1716#if defined (NUMBER_DIRECTIONS )
     1717          FOR_I_EQ_0_LT_NUMDIR
     1718          recvbuf[i].setADValue(_i,trade_r[i*MPI_ND + _i+1]);
     1719#else
     1720          recvbuf[i].setADValue(trade_r[i*MPI_ND +1]);
     1721#endif
     1722          }
     1723    }
     1724    free(trade_s);
     1725    if (id == root)
     1726           free(trade_r);
     1727    return ierr;
     1728}
     1729
     1730
     1731int ADOLC_MPI_Reduce(
     1732    adouble *send_buf, adouble *rec_buf, int count, ADOLC_MPI_Datatype type,
     1733    ADOLC_MPI_Op op, int root, ADOLC_MPI_Comm comm)
     1734{
     1735    int i,j,id,size, ierr=0;
     1736    adouble tmp, *tmp_adoubles = NULL;
     1737    ierr = ADOLC_MPI_Gather(send_buf,tmp_adoubles,count,type,root,comm);
     1738
     1739    MPI_Comm_rank(MPI_COMM_WORLD, &id);
     1740    MPI_Comm_size(MPI_COMM_WORLD, &size);
     1741
     1742    if ( id == root){
     1743       if( rec_buf == NULL)
     1744           rec_buf = new adtl::adouble[count];
     1745       switch (op) {
     1746               case ADOLC_MPI_MAX: for(i=0; i < count; i++ ) {
     1747                                       tmp = tmp_adoubles[i];
     1748                                       for(j=1; j< size ; j++)
     1749                                          if ( tmp <= tmp_adoubles[j*count+i] )
     1750                                             tmp = tmp_adoubles[j*count+i];
     1751                                       rec_buf[i] = tmp;
     1752                                   }
     1753                                   break;
     1754               case ADOLC_MPI_MIN: for(i=0; i < count; i++ ) {
     1755                                      tmp = tmp_adoubles[i];
     1756                                      for(j=1; j< size ; j++)
     1757                                         if ( tmp >= tmp_adoubles[j*count+i] )
     1758                                            tmp = tmp_adoubles[j*count+i];
     1759                                      rec_buf[i] = tmp;
     1760                                   }
     1761                                   break;
     1762               case ADOLC_MPI_SUM: for(i=0; i < count; i++ ) {
     1763                                      tmp =0.;
     1764                                      for(j=0; j< size ; j++)
     1765                                         tmp += tmp_adoubles[j*count+i];
     1766                                       rec_buf[i] = tmp;
     1767                                   }
     1768                                   break;
     1769               case ADOLC_MPI_PROD:for(i=0; i < count; i++ ) {
     1770                                      tmp = 1.;
     1771                                      for(j=0; j< size ; j++)
     1772                                         tmp *= tmp_adoubles[j*count+i];
     1773                                      rec_buf[i] = tmp;
     1774                                    }
     1775                                    break;
     1776               default:             printf("Operation %d not yet implemented!\n",op);
     1777                                    break;
     1778       }
     1779       delete[] tmp_adoubles;
     1780    }
     1781
     1782    return ierr;
     1783}
     1784
     1785int ADOLC_MPI_Scatter(
     1786    adouble *sendbuf, int sendcount, adouble *recvbuf,
     1787    int recvcount, ADOLC_MPI_Datatype type, int root, ADOLC_MPI_Comm comm)
     1788{
     1789    int i,id,size, ierr=0;
     1790    MPI_Comm_rank(MPI_COMM_WORLD, &id);
     1791    MPI_Comm_size(MPI_COMM_WORLD, &size);
     1792    int h_s = sendcount*MPI_ND*size;
     1793    int h_r = recvcount*MPI_ND;
     1794    double *trade_r = (double*) malloc(h_r*sizeof(double)), *trade_s=NULL;
     1795
     1796    if (id == root)
     1797        trade_s = (double*) malloc( h_s*sizeof(double));
     1798
     1799    if ( id == root){
     1800       for(i= 0; i < sendcount*size; i++)
     1801          trade_s[i*MPI_ND] = sendbuf[i].getValue();
     1802#if defined (NUMBER_DIRECTIONS )
     1803          FOR_I_EQ_0_LT_NUMDIR
     1804                 trade_s[i*MPI_ND+_i+1] = sendbuf[i].getADValue(_i) ;
     1805#else
     1806          trade_s[i*MPI_ND +1] = sendbuf[i].getADValue();
     1807#endif
     1808    }
     1809
     1810    ierr = MPI_Scatter(trade_s,sendcount,type,trade_r,recvcount,type, root, comm);
     1811
     1812    if( recvbuf == NULL)
     1813       recvbuf = new adouble[recvcount];
     1814    for(i=0; i< recvcount;i++){
     1815         recvbuf[i].setValue(trade_r[i*MPI_ND]);
     1816#if defined (NUMBER_DIRECTIONS )
     1817          FOR_I_EQ_0_LT_NUMDIR
     1818          recvbuf[i].setADValue(_i,trade_r[i*MPI_ND + _i+1]);
     1819#else
     1820          recvbuf[i].setADValue(trade_r[i*MPI_ND +1]);
     1821#endif
     1822         }
     1823    free(trade_r);
     1824    if (id == root)
     1825      free(trade_s);
     1826    return ierr;
     1827}
     1828
     1829int ADOLC_MPI_Allgather(
     1830    adouble *sendbuf, int sendcount,ADOLC_MPI_Datatype stype, adouble *recvbuf, int recvcount, ADOLC_MPI_Datatype rtype, ADOLC_MPI_Comm comm)
     1831{
     1832     int h_s = sendcount*MPI_ND;
     1833     int h_r = recvcount*MPI_ND;
     1834     int i,id,size, ierr=0;
     1835     MPI_Comm_rank(MPI_COMM_WORLD, &id);
     1836     MPI_Comm_size(MPI_COMM_WORLD, &size);
     1837
     1838     double *trade_s = (double*) malloc(h_s*sizeof(double));
     1839     double *trade_r = (double*) malloc(h_r*sizeof(double)*size);
     1840
     1841    for(i= 0; i < sendcount; i++) {
     1842       trade_s[i*MPI_ND] = sendbuf[i].getValue();
     1843#if defined (NUMBER_DIRECTIONS )
     1844          FOR_I_EQ_0_LT_NUMDIR
     1845              trade_s[i*MPI_ND+_i+1] = sendbuf[i].getADValue(_i) ;
     1846#else
     1847          trade_s[i*MPI_ND +1] = sendbuf[i].getADValue();
     1848#endif
     1849    }
     1850
     1851    ierr = MPI_Allgather(trade_s,h_s,stype, trade_r, h_r, rtype, comm);
     1852
     1853    if( recvbuf == NULL)
     1854        recvbuf = new adouble[recvcount*size];
     1855    for(i=0; i< recvcount*size;i++){
     1856        recvbuf[i].setValue(trade_r[i*MPI_ND]);
     1857#if defined (NUMBER_DIRECTIONS )
     1858        FOR_I_EQ_0_LT_NUMDIR
     1859           recvbuf[i].setADValue(_i,trade_r[i*MPI_ND + _i+1]);
     1860#else
     1861        recvbuf[i].setADValue(trade_r[i*MPI_ND +1]);
     1862#endif
     1863    }
     1864    free(trade_s);
     1865    free(trade_r);
     1866    return ierr;
     1867}
     1868
     1869int ADOLC_MPI_Allreduce(
     1870    adouble *send_buf, adouble *rec_buf, int count, ADOLC_MPI_Datatype type,
     1871    ADOLC_MPI_Op op, ADOLC_MPI_Comm comm)
     1872{
     1873    int i,j,id,size, ierr=0;
     1874     MPI_Comm_size(MPI_COMM_WORLD, &size);
     1875    adouble tmp, *tmp_adoubles = new adouble[count*size];
     1876    ierr = ADOLC_MPI_Allgather(send_buf,count,type,tmp_adoubles,count,type,comm);
     1877
     1878    if( rec_buf == NULL)
     1879       rec_buf = new adouble[count];
     1880    switch (op) {
     1881               case ADOLC_MPI_MAX: for(i=0; i < count; i++ ) {
     1882                                       tmp = tmp_adoubles[i];
     1883                                       for(j=1; j< size ; j++)
     1884                                          if ( tmp <= tmp_adoubles[j*count+i] )
     1885                                             tmp = tmp_adoubles[j*count+i];
     1886                                       rec_buf[i] = tmp;
     1887                                   }
     1888                                   break;
     1889               case ADOLC_MPI_MIN: for(i=0; i < count; i++ ) {
     1890                                      tmp = tmp_adoubles[i];
     1891                                      for(j=1; j< size ; j++)
     1892                                         if ( tmp >= tmp_adoubles[j*count+i] )
     1893                                            tmp = tmp_adoubles[j*count+i];
     1894                                      rec_buf[i] = tmp;
     1895                                   }
     1896                                   break;
     1897               case ADOLC_MPI_SUM: for(i=0; i < count; i++ ) {
     1898                                      cout << "i="<<i<<"   count="<< count << endl;
     1899                                      tmp =0.;
     1900                                      for(j=0; j< size ; j++){
     1901                                         cout <<"j="<<j<<" :   "<< tmp_adoubles[j*count+i] << endl;
     1902                                         tmp += tmp_adoubles[j*count+i];
     1903                                         }
     1904                                       rec_buf[i] = tmp;
     1905                                   }
     1906                                   break;
     1907               case ADOLC_MPI_PROD:for(i=0; i < count; i++ ) {
     1908                                      tmp = 1.;
     1909                                      for(j=0; j< size ; j++)
     1910                                         tmp *= tmp_adoubles[j*count+i];
     1911                                      rec_buf[i] = tmp;
     1912                                    }
     1913                                    break;
     1914               default:             printf("Operation %d not yet implemented!\n",op);
     1915                                    break;
     1916    }
     1917    delete[] tmp_adoubles;
     1918    return ierr;
     1919}
     1920
     1921#endif // END MPI
     1922} // END NAMESPACE adtl
    14981923
    14991924/****************************************************************************/
  • branches/MPI/ADOL-C/include/adolc/common.h

    r392 r424  
    8080#endif /* ADOLC_INTERNAL */
    8181
     82#ifndef HAVE_MPI
     83#   if defined(HAVE_MPI_H) || defined(HAVE_MPI_MPI_H)
     84#      define HAVE_MPI 1
     85#   endif
     86#endif
    8287/*--------------------------------------------------------------------------*/
    8388/* developer and user parameters */
  • branches/MPI/ADOL-C/include/adolc/drivers/Makefile.in

    r377 r424  
    5858        $(srcdir)/Makefile.in
    5959ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    60 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     60am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     61        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6162am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6263        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/include/adolc/sparse/Makefile.am

    r354 r424  
    1414
    1515libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h
     16
     17if HAVE_MPI
     18libsparseinclude_HEADERS += sparsedrivers_mpi.h
     19endif
  • branches/MPI/ADOL-C/include/adolc/sparse/Makefile.in

    r377 r424  
    5454build_triplet = @build@
    5555host_triplet = @host@
     56@HAVE_MPI_TRUE@am__append_1 = sparsedrivers_mpi.h
    5657subdir = ADOL-C/include/adolc/sparse
    57 DIST_COMMON = $(libsparseinclude_HEADERS) $(srcdir)/Makefile.am \
    58         $(srcdir)/Makefile.in
     58DIST_COMMON = $(am__libsparseinclude_HEADERS_DIST) \
     59        $(srcdir)/Makefile.am $(srcdir)/Makefile.in
    5960ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    60 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     61am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     62        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6163am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6264        $(ACLOCAL_M4)
     
    7880    *) (install-info --version) >/dev/null 2>&1;; \
    7981  esac
     82am__libsparseinclude_HEADERS_DIST = sparsedrivers.h sparse_fo_rev.h \
     83        sparsedrivers_mpi.h
    8084am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
    8185am__vpath_adj = case $$p in \
     
    166170MANIFEST_TOOL = @MANIFEST_TOOL@
    167171MKDIR_P = @MKDIR_P@
     172MPICC = @MPICC@
     173MPICXX = @MPICXX@
     174MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     175MPILIBS = @MPILIBS@
    168176NM = @NM@
    169177NMEDIT = @NMEDIT@
     
    246254top_srcdir = @top_srcdir@
    247255libsparseincludedir = $(pkgincludedir)/sparse
    248 libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h
     256libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h \
     257        $(am__append_1)
    249258all: all-am
    250259
  • branches/MPI/ADOL-C/include/adolc/sparse/sparsedrivers.h

    r354 r424  
    44 Revision: $Id$
    55 Contents: This file containts some "Easy To Use" interfaces of sparse package.
    6  
    7  Copyright (c) Andrea Walther
     6
     7 Copyright (c) Andrea Walther, Benjamin Letschert
    88
    99 This file is part of ADOL-C. This software is provided as open source.
     
    1616
    1717#include <adolc/common.h>
    18 
    19 
    20 
    2118BEGIN_C_DECLS
    22 
    23 
    24 
    2519/****************************************************************************/
    2620
     
    9286
    9387/* Max. number of unsigned ints to store the seed / jacobian matrix strips.
    94    Reduce this value to x if your system happens to run out of memory. 
     88   Reduce this value to x if your system happens to run out of memory.
    9589   x < 10 makes no sense. x = 50 or 100 is better
    96    x stays for ( x * sizeof(unsigned long int) * 8 ) 
     90   x stays for ( x * sizeof(unsigned long int) * 8 )
    9791   (block) variables at once                                            */
    9892
  • branches/MPI/ADOL-C/include/adolc/tapedoc/Makefile.in

    r377 r424  
    5858        $(srcdir)/Makefile.in
    5959ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    60 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     60am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     61        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6162am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6263        $(ACLOCAL_M4)
     
    166167MANIFEST_TOOL = @MANIFEST_TOOL@
    167168MKDIR_P = @MKDIR_P@
     169MPICC = @MPICC@
     170MPICXX = @MPICXX@
     171MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     172MPILIBS = @MPILIBS@
    168173NM = @NM@
    169174NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/src/Makefile.am

    r410 r424  
    33## Revision: $Id$
    44##
    5 ## Copyright (C) Andrea Walther, Andreas Kowarz
     5## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha
    66##
    77## This file is part of ADOL-C. This software is provided as open source.
     
    6868
    6969libadolc_la_LIBADD   = drivers/libdrivers.la tapedoc/libtapedoc.la
    70 
    7170endif
    7271
     72if HAVE_MPI
     73include $(top_srcdir)/autoconf/rules_mpi.in
     74
     75lib_LTLIBRARIES += libadolc_mpi.la
     76libadolc_mpi_la_SOURCES =  adolc_mpi.cpp interfaces_mpi.cpp \
     77                           zos_forward_mpi.c fos_forward_mpi.c fov_forward_mpi.c \
     78                           hos_forward_mpi.c hov_forward_mpi.c \
     79                           fos_reverse_mpi.c fov_reverse_mpi.c \
     80                           hos_reverse_mpi.c hov_reverse_mpi.c \
     81                           int_forward_s_mpi.c int_forward_t_mpi.c \
     82                           indopro_forward_s_mpi.c indopro_forward_t_mpi.c \
     83                           nonl_ind_forward_s_mpi.c nonl_ind_forward_t_mpi.c \
     84                           int_reverse_s_mpi.c int_reverse_t_mpi.c
     85
     86libadolc_mpi_la_LIBADD = libadolc.la
     87if SPARSE
     88libadolc_mpi_la_LIBADD += sparse/libsparse_mpi.la
     89endif
     90libadolc_mpi_la_LDFLAGS = ${MPICXXEXTRALDFLAGS}
     91endif
  • branches/MPI/ADOL-C/src/Makefile.in

    r411 r424  
    5555host_triplet = @host@
    5656@SPARSE_TRUE@am__append_1 = @COLPACK_LIBS@
     57DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
     58        $(srcdir)/config.h.in $(top_srcdir)/autoconf/depcomp \
     59        $(top_srcdir)/autoconf/rules_mpi.in
     60@HAVE_MPI_TRUE@am__append_2 = libadolc_mpi.la
     61@HAVE_MPI_TRUE@@SPARSE_TRUE@am__append_3 = sparse/libsparse_mpi.la
    5762subdir = ADOL-C/src
    58 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
    59         $(srcdir)/config.h.in $(top_srcdir)/autoconf/depcomp
    6063ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    61 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     64am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     65        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6266am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6367        $(ACLOCAL_M4)
     
    141145        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
    142146        $(CXXFLAGS) $(libadolc_la_LDFLAGS) $(LDFLAGS) -o $@
     147@HAVE_MPI_TRUE@libadolc_mpi_la_DEPENDENCIES = libadolc.la \
     148@HAVE_MPI_TRUE@ $(am__append_3)
     149am__libadolc_mpi_la_SOURCES_DIST = adolc_mpi.cpp interfaces_mpi.cpp \
     150        zos_forward_mpi.c fos_forward_mpi.c fov_forward_mpi.c \
     151        hos_forward_mpi.c hov_forward_mpi.c fos_reverse_mpi.c \
     152        fov_reverse_mpi.c hos_reverse_mpi.c hov_reverse_mpi.c \
     153        int_forward_s_mpi.c int_forward_t_mpi.c \
     154        indopro_forward_s_mpi.c indopro_forward_t_mpi.c \
     155        nonl_ind_forward_s_mpi.c nonl_ind_forward_t_mpi.c \
     156        int_reverse_s_mpi.c int_reverse_t_mpi.c
     157@HAVE_MPI_TRUE@am_libadolc_mpi_la_OBJECTS = adolc_mpi.lo \
     158@HAVE_MPI_TRUE@ interfaces_mpi.lo zos_forward_mpi.lo \
     159@HAVE_MPI_TRUE@ fos_forward_mpi.lo fov_forward_mpi.lo \
     160@HAVE_MPI_TRUE@ hos_forward_mpi.lo hov_forward_mpi.lo \
     161@HAVE_MPI_TRUE@ fos_reverse_mpi.lo fov_reverse_mpi.lo \
     162@HAVE_MPI_TRUE@ hos_reverse_mpi.lo hov_reverse_mpi.lo \
     163@HAVE_MPI_TRUE@ int_forward_s_mpi.lo int_forward_t_mpi.lo \
     164@HAVE_MPI_TRUE@ indopro_forward_s_mpi.lo \
     165@HAVE_MPI_TRUE@ indopro_forward_t_mpi.lo \
     166@HAVE_MPI_TRUE@ nonl_ind_forward_s_mpi.lo \
     167@HAVE_MPI_TRUE@ nonl_ind_forward_t_mpi.lo int_reverse_s_mpi.lo \
     168@HAVE_MPI_TRUE@ int_reverse_t_mpi.lo
     169libadolc_mpi_la_OBJECTS = $(am_libadolc_mpi_la_OBJECTS)
     170libadolc_mpi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
     171        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
     172        $(AM_CXXFLAGS) $(CXXFLAGS) $(libadolc_mpi_la_LDFLAGS) \
     173        $(LDFLAGS) -o $@
     174@HAVE_MPI_TRUE@am_libadolc_mpi_la_rpath = -rpath $(libdir)
    143175DEFAULT_INCLUDES = -I.@am__isrc@
    144176depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp
     
    183215am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    184216am__v_GEN_0 = @echo "  GEN     " $@;
    185 SOURCES = $(libadolc_la_SOURCES)
    186 DIST_SOURCES = $(am__libadolc_la_SOURCES_DIST)
     217SOURCES = $(libadolc_la_SOURCES) $(libadolc_mpi_la_SOURCES)
     218DIST_SOURCES = $(am__libadolc_la_SOURCES_DIST) \
     219        $(am__libadolc_mpi_la_SOURCES_DIST)
    187220RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
    188221        html-recursive info-recursive install-data-recursive \
     
    287320MANIFEST_TOOL = @MANIFEST_TOOL@
    288321MKDIR_P = @MKDIR_P@
     322MPICC = @MPICC@
     323MPICXX = @MPICXX@
     324MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     325MPILIBS = @MPILIBS@
    289326NM = @NM@
    290327NMEDIT = @NMEDIT@
     
    376413                       externfcts_p.h checkpointing_p.h buffer_temp.h
    377414
    378 lib_LTLIBRARIES = libadolc.la
     415lib_LTLIBRARIES = libadolc.la $(am__append_2)
    379416libadolc_la_LDFLAGS = -version-info 2:1:1 -no-undefined \
    380417        $(am__append_1)
     
    412449@SPARSE_TRUE@                       tapedoc/libtapedoc.la
    413450
     451@HAVE_MPI_TRUE@AM_V_MPICC = $(am__v_MPICC_$(V))
     452@HAVE_MPI_TRUE@am__v_MPICC_ = $(am__v_MPICC_$(AM_DEFAULT_VERBOSITY))
     453@HAVE_MPI_TRUE@am__v_MPICC_0 = @echo "  MPICC " $@;
     454@HAVE_MPI_TRUE@AM_V_MPICXX = $(am__v_MPICXX_$(V))
     455@HAVE_MPI_TRUE@am__v_MPICXX_ = $(am__v_MPICXX_$(AM_DEFAULT_VERBOSITY))
     456@HAVE_MPI_TRUE@am__v_MPICXX_0 = @echo "  MPICXX" $@;
     457@HAVE_MPI_TRUE@MPICOMPILE = $(MPICC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
     458@HAVE_MPI_TRUE@        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
     459
     460@HAVE_MPI_TRUE@MPICXXLD = $(MPICXX)
     461@HAVE_MPI_TRUE@MPICXXCOMPILE = $(MPICXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
     462@HAVE_MPI_TRUE@        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
     463
     464@HAVE_MPI_TRUE@LTMPICOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(MPICOMPILE)
     465@HAVE_MPI_TRUE@LTMPICXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(MPICXXCOMPILE)
     466@HAVE_MPI_TRUE@SUFFIXES = _mpi.cpp _mpi.c _mpi.o _mpi.lo _mpi.obj
     467@HAVE_MPI_TRUE@libadolc_mpi_la_SOURCES = adolc_mpi.cpp interfaces_mpi.cpp \
     468@HAVE_MPI_TRUE@                           zos_forward_mpi.c fos_forward_mpi.c fov_forward_mpi.c \
     469@HAVE_MPI_TRUE@                           hos_forward_mpi.c hov_forward_mpi.c \
     470@HAVE_MPI_TRUE@                           fos_reverse_mpi.c fov_reverse_mpi.c \
     471@HAVE_MPI_TRUE@                           hos_reverse_mpi.c hov_reverse_mpi.c \
     472@HAVE_MPI_TRUE@                           int_forward_s_mpi.c int_forward_t_mpi.c \
     473@HAVE_MPI_TRUE@                           indopro_forward_s_mpi.c indopro_forward_t_mpi.c \
     474@HAVE_MPI_TRUE@                           nonl_ind_forward_s_mpi.c nonl_ind_forward_t_mpi.c \
     475@HAVE_MPI_TRUE@                           int_reverse_s_mpi.c int_reverse_t_mpi.c
     476
     477@HAVE_MPI_TRUE@libadolc_mpi_la_LIBADD = libadolc.la $(am__append_3)
     478@HAVE_MPI_TRUE@libadolc_mpi_la_LDFLAGS = ${MPICXXEXTRALDFLAGS}
    414479all: config.h
    415480        $(MAKE) $(AM_MAKEFLAGS) all-recursive
    416481
    417482.SUFFIXES:
    418 .SUFFIXES: .c .cpp .lo .o .obj
    419 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(am__configure_deps)
     483.SUFFIXES: _mpi.cpp _mpi.c _mpi.o _mpi.lo _mpi.obj .c .cpp .lo .o .obj
     484$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/autoconf/rules_mpi.in $(am__configure_deps)
    420485        @for dep in $?; do \
    421486          case '$(am__configure_deps)' in \
     
    438503            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
    439504        esac;
     505$(top_srcdir)/autoconf/rules_mpi.in:
    440506
    441507$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
     
    498564libadolc.la: $(libadolc_la_OBJECTS) $(libadolc_la_DEPENDENCIES) $(EXTRA_libadolc_la_DEPENDENCIES)
    499565        $(AM_V_CXXLD)$(libadolc_la_LINK) -rpath $(libdir) $(libadolc_la_OBJECTS) $(libadolc_la_LIBADD) $(LIBS)
     566libadolc_mpi.la: $(libadolc_mpi_la_OBJECTS) $(libadolc_mpi_la_DEPENDENCIES) $(EXTRA_libadolc_mpi_la_DEPENDENCIES)
     567        $(AM_V_CXXLD)$(libadolc_mpi_la_LINK) $(am_libadolc_mpi_la_rpath) $(libadolc_mpi_la_OBJECTS) $(libadolc_mpi_la_LIBADD) $(LIBS)
    500568
    501569mostlyclean-compile:
     
    506574
    507575@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adalloc.Plo@am__quote@
     576@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adolc_mpi.Plo@am__quote@
    508577@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adouble.Plo@am__quote@
    509578@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/advector.Plo@am__quote@
     
    515584@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/forward_partx.Plo@am__quote@
    516585@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_forward.Plo@am__quote@
     586@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_forward_mpi.Plo@am__quote@
    517587@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_reverse.Plo@am__quote@
     588@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_reverse_mpi.Plo@am__quote@
    518589@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_forward.Plo@am__quote@
     590@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_forward_mpi.Plo@am__quote@
    519591@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_offset_forward.Plo@am__quote@
    520592@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_reverse.Plo@am__quote@
     593@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_reverse_mpi.Plo@am__quote@
    521594@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_forward.Plo@am__quote@
     595@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_forward_mpi.Plo@am__quote@
    522596@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_ov_reverse.Plo@am__quote@
    523597@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_reverse.Plo@am__quote@
     598@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_reverse_mpi.Plo@am__quote@
    524599@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_forward.Plo@am__quote@
     600@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_forward_mpi.Plo@am__quote@
    525601@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_reverse.Plo@am__quote@
     602@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_reverse_mpi.Plo@am__quote@
    526603@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_wk_forward.Plo@am__quote@
    527604@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_s.Plo@am__quote@
     605@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_s_mpi.Plo@am__quote@
    528606@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_t.Plo@am__quote@
     607@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_t_mpi.Plo@am__quote@
    529608@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_s.Plo@am__quote@
     609@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_s_mpi.Plo@am__quote@
    530610@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_t.Plo@am__quote@
     611@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_t_mpi.Plo@am__quote@
    531612@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_s.Plo@am__quote@
     613@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_s_mpi.Plo@am__quote@
    532614@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_t.Plo@am__quote@
     615@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_t_mpi.Plo@am__quote@
    533616@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces.Plo@am__quote@
     617@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces_mpi.Plo@am__quote@
    534618@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfacesf.Plo@am__quote@
    535619@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@
    536620@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_s.Plo@am__quote@
     621@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_s_mpi.Plo@am__quote@
    537622@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_t.Plo@am__quote@
     623@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_t_mpi.Plo@am__quote@
    538624@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_old_forward_s.Plo@am__quote@
    539625@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_old_forward_t.Plo@am__quote@
     
    542628@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taping.Plo@am__quote@
    543629@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zos_forward.Plo@am__quote@
     630@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zos_forward_mpi.Plo@am__quote@
    544631
    545632.c.o:
     
    9311018
    9321019
     1020@HAVE_MPI_TRUE@_mpi.c_mpi.o:
     1021@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_MPICC)$(MPICOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     1022@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     1023@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(AM_V_MPICC) @AM_BACKSLASH@
     1024@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     1025@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1026@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(MPICOMPILE) -c -o $@ $<
     1027
     1028@HAVE_MPI_TRUE@_mpi.c_mpi.lo:
     1029@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_MPICC)$(LTMPICOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     1030@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Plo
     1031@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(AM_V_MPICC) @AM_BACKSLASH@
     1032@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
     1033@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1034@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(LTMPICOMPILE) -c -o $@ $<
     1035
     1036@HAVE_MPI_TRUE@_mpi.c_mpi.obj:
     1037@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_MPICC)$(MPICOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
     1038@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     1039@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(AM_V_MPICC) @AM_BACKSLASH@
     1040@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     1041@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1042@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(MPICOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     1043
     1044@HAVE_MPI_TRUE@_mpi.cpp_mpi.o:
     1045@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_MPICXX)$(MPICXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     1046@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     1047@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(AM_V_MPICXX) @AM_BACKSLASH@
     1048@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     1049@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1050@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(MPICXXCOMPILE) -c -o $@ $<
     1051
     1052@HAVE_MPI_TRUE@_mpi.cpp_mpi.lo:
     1053@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_MPICXX)$(LTMPICXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     1054@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Plo
     1055@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(AM_V_MPICXX) @AM_BACKSLASH@
     1056@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
     1057@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1058@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(LTMPICXXCOMPILE) -c -o $@ $<
     1059
     1060@HAVE_MPI_TRUE@_mpi.cpp_mpi.obj:
     1061@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_MPICXX)$(MPICXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
     1062@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     1063@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(AM_V_MPICXX) @AM_BACKSLASH@
     1064@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     1065@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     1066@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(MPICXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     1067
    9331068# Tell versions [3.59,3.63) of GNU make to not export all variables.
    9341069# Otherwise a system limit (for SysV at least) may be exceeded.
  • branches/MPI/ADOL-C/src/config.h.in

    r411 r424  
    5252/* Define to 1 if you have the <memory.h> header file. */
    5353#undef HAVE_MEMORY_H
     54
     55/* Define 1 if mpi is available */
     56#undef HAVE_MPI
    5457
    5558/* Define to 1 if you have the `pow' function. */
  • branches/MPI/ADOL-C/src/drivers/Makefile.in

    r377 r424  
    5858        $(top_srcdir)/autoconf/depcomp
    5959ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    60 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     60am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     61        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6162am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6263        $(ACLOCAL_M4)
     
    165166MANIFEST_TOOL = @MANIFEST_TOOL@
    166167MKDIR_P = @MKDIR_P@
     168MPICC = @MPICC@
     169MPICXX = @MPICXX@
     170MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     171MPILIBS = @MPILIBS@
    167172NM = @NM@
    168173NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/src/fo_rev.c

    r376 r424  
    1818 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
    1919               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
    20                Kshitij Kulshreshtha
    21 
     20               Kshitij Kulshreshtha, Benjamin Letschert
     21 
    2222 This file is part of ADOL-C. This software is provided as open source.
    2323 Any use, reproduction, or distribution of the software constitutes
     
    6464/*--------------------------------------------------------------------------*/
    6565#ifdef _FOS_
     66#if defined(_MPI_)
     67#define GENERATED_FILENAME "fos_reverse_mpi"
     68#else
    6669#define GENERATED_FILENAME "fos_reverse"
     70#endif
    6771
    6872#define RESULTS(l,indexi)  results[indexi]
     
    7175/*--------------------------------------------------------------------------*/
    7276#elif _FOV_
     77#if defined(_MPI_)
     78#define GENERATED_FILENAME "fov_reverse_mpi"
     79#else
    7380#define GENERATED_FILENAME "fov_reverse"
     81#endif
    7482
    7583#define _ADOLC_VECTOR_
     
    8189#if defined(_INT_REV_)
    8290#if defined(_TIGHT_)
     91#if defined(_MPI_)
     92#define GENERATED_FILENAME "int_reverse_t_mpi"
     93#else
    8394#define GENERATED_FILENAME "int_reverse_t"
    8495#endif
     96#endif
    8597#if defined(_NTIGHT_)
     98#if defined(_MPI_)
     99#define GENERATED_FILENAME "int_reverse_s_mpi"
     100#else
    86101#define GENERATED_FILENAME "int_reverse_s"
     102#endif
    87103#endif
    88104#define RESULTS(l,indexi)  results[l][indexi]
     
    192208#include "oplate.h"
    193209#include "taping_p.h"
     210
     211#include <math.h>
     212
     213#if defined(_MPI_)
     214#include <adolc/adolc_mpi.h>
     215#endif
     216
    194217#include <adolc/externfcts.h>
    195218#include "externfcts_p.h"
    196 
    197 #include <math.h>
    198219
    199220BEGIN_C_DECLS
     
    206227/* First-Order Scalar Reverse Pass.                                         */
    207228/****************************************************************************/
    208 int fos_reverse(short   tnum,       /* tape id */
     229#if defined(_MPI_)
     230int fos_reverse_mpi( int mpi_id, int mpi_size,
     231#else
     232int fos_reverse(
     233#endif
     234                short   tnum,       /* tape id */
    209235                int     depen,      /* consistency chk on # of deps */
    210236                int     indep,      /* consistency chk on # of indeps */
     
    217243/* First-Order Vector Reverse Pass.                                         */
    218244/****************************************************************************/
    219 
    220 int fov_reverse(short   tnum,        /* tape id */
     245#if defined(_MPI_)
     246int fov_reverse_mpi( int mpi_id, int mpi_size,
     247#else
     248int fov_reverse(
     249#endif
     250                short   tnum,        /* tape id */
    221251                int     depen,       /* consistency chk on # of deps */
    222252                int     indep,       /* consistency chk on # of indeps */
     
    231261/* First Order Vector version of the reverse mode for bit patterns, tight   */
    232262/****************************************************************************/
     263#if defined(_MPI_)
     264int int_reverse_tight_mpi( int mpi_id, int mpi_size,
     265#else
    233266int int_reverse_tight(
     267#endif
    234268        short             tnum,  /* tape id                               */
    235269        int               depen, /* consistency chk on # of deps          */
     
    244278/* First Order Vector version of the reverse mode, bit pattern, safe        */
    245279/****************************************************************************/
     280#if defined(_MPI_)
     281int int_reverse_safe_mpi( int mpi_id, int mpi_size,
     282#else
    246283int int_reverse_safe(
     284#endif
    247285        short             tnum,  /* tape id                               */
    248286        int               depen, /* consistency chk on # of deps          */
     
    266304    locint arg1 = 0;
    267305    locint arg2 = 0;
     306
     307#if defined(_MPI_)
     308     short this_tnum = mpi_size*tnum + mpi_id;
     309#endif
     310
    268311
    269312#if !defined (_NTIGHT_)
     
    356399    /*                                                           DEBUG MESSAGES */
    357400    fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n",
    358             GENERATED_FILENAME, tnum, indep, depen);
     401            GENERATED_FILENAME,
     402#if defined(_MPI_)
     403this_tnum,
     404#else
     405 tnum,
     406#endif
     407           indep, depen);
    359408#ifdef _ADOLC_VECTOR_
    360409    fprintf(DIAG_OUT,"                    p: %d\n\n",nrows);
     
    363412#endif
    364413
     414#if defined(_MPI_)
     415        MPI_Status status_MPI;
     416        int mpi_i,mpi_ii, myid, root, count, count2;
     417     locint *loc_recv, *loc_send;
     418     double *trade, *rec_buf;
     419     unsigned long int *trade_ulong, *rec_ulong;
     420     int target, tag;
     421#endif
     422
    365423    /****************************************************************************/
    366424    /*                                                                    INITs */
     
    370428
    371429    /* Initialize the Reverse Sweep */
     430#ifdef _MPI_
     431    init_rev_sweep(this_tnum);
     432#else
    372433    init_rev_sweep(tnum);
     434#endif
    373435
    374436    failAdditionalInfo3 = depen;
     
    454516#if !defined(_NTIGHT_)
    455517    ADOLC_CURRENT_TAPE_INFOS.rp_T = rp_T;
    456 
     518#if defined(_MPI_)
     519    taylor_back(this_tnum, &numdep, &numind, &taycheck);
     520#else
    457521    taylor_back(tnum, &numdep, &numind, &taycheck);
     522#endif
    458523
    459524    if (taycheck < 0) {
     
    918983
    919984                FOR_0_LE_l_LT_p
    920                 { 
     985                {
    921986#if defined(_INT_REV_)
    922987                  AARG2_INC |= ARES;
     
    22382303#endif /* !_INT_REV_ */
    22392304                /*--------------------------------------------------------------------------*/
     2305#if defined(_MPI_)
     2306            case send_data:     // MPI-Send-Befehl
     2307                tag = get_locint_r(); // tag
     2308                target = get_locint_r(); // source
     2309                count = get_locint_r(); // count
     2310                loc_recv = (locint*) malloc(count*sizeof(locint));
     2311                for(mpi_i=0;mpi_i<count;mpi_i++)
     2312                     loc_recv[count -1-mpi_i] = get_locint_r();
     2313                count2 = get_locint_r();
     2314
     2315#if defined(_INT_REV_)
     2316#if defined(_TIGHT_)
     2317                trade = myalloc1(count*(p+1));
     2318                MPI_Recv( trade , count*(p+1), MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     2319                mpi_ii=0;
     2320                for(mpi_i=0; mpi_i<count; mpi_i++){
     2321                   rp_T[loc_recv[mpi_i]] = trade[mpi_ii];
     2322                   mpi_ii++;
     2323                   for(l=0; l<p;l++,mpi_ii++)
     2324                      upp_A[loc_recv[mpi_i]][l] += (unsigned long int) trade[mpi_ii];
     2325                }
     2326                free(trade);
     2327#else
     2328                trade_ulong = (unsigned long int*) malloc(count*p*sizeof(unsigned long int));
     2329                MPI_Recv( trade_ulong , count*p, MPI_UNSIGNED_LONG , target, tag , MPI_COMM_WORLD, &status_MPI);
     2330                mpi_ii=0;
     2331                for(mpi_i=0; mpi_i<count; mpi_i++){
     2332                   for(l=0; l<p;l++,mpi_ii++)
     2333                      upp_A[loc_recv[mpi_i]][l] += trade[mpi_ii];
     2334                }
     2335                free(trade_ulong);
     2336#endif
     2337#endif
     2338#if defined(_FOS_)
     2339                trade = myalloc1(count*2);
     2340                MPI_Recv( trade , count*2, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     2341
     2342                for (mpi_i=0; mpi_i < count; mpi_i++) {
     2343                    rp_T[loc_recv[mpi_i]] = trade[2*mpi_i ];
     2344                    rp_A[loc_recv[mpi_i]]+= trade[2*mpi_i+1];
     2345                }
     2346                free(trade);
     2347#endif
     2348#if defined(_FOV_)
     2349                trade = myalloc1(count*(p+1));
     2350                MPI_Recv( trade ,(p+1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     2351
     2352                mpi_ii = 0;
     2353                for( mpi_i=0; mpi_i < count ; mpi_i++ ){
     2354                   rp_T[loc_recv[mpi_i]] = trade[mpi_ii];
     2355                   mpi_ii++;
     2356                   for(l=0;l<p;l++,mpi_ii++)
     2357                        rpp_A[loc_recv[mpi_i]][l] += trade[mpi_ii];
     2358                }
     2359                free(trade);
     2360#endif
     2361                free(loc_recv);
     2362                   break;
     2363                /*--------------------------------------------------------------------------*/
     2364            case receive_data:     // MPI-Send
     2365                tag = get_locint_r(); // tag
     2366                target = get_locint_r(); // dest
     2367                count = get_locint_r(); // count
     2368                loc_recv = (locint*) malloc(count*sizeof(locint));
     2369                for(mpi_i=0;mpi_i<count;mpi_i++)
     2370                    loc_recv[count -1-mpi_i] = get_locint_r();
     2371                count2 = get_locint_r(); // count
     2372
     2373#if defined(_INT_REV_)
     2374#if defined(_TIGHT_)
     2375                trade = myalloc1(count*(p+1));
     2376                mpi_ii=0;
     2377                for(mpi_i=0; mpi_i<count; mpi_i++){
     2378                   trade[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2379                   mpi_ii++;
     2380                   for(l=0; l<p;l++,mpi_ii++)
     2381                      trade[mpi_ii] = (double) upp_A[loc_recv[mpi_i]][l];
     2382                   for(l=0; l<p;l++)
     2383                      upp_A[loc_recv[mpi_i]][l] = 0;
     2384                }
     2385                for(mpi_i=0; mpi_i<count; mpi_i++)
     2386                   ADOLC_GET_TAYLOR(loc_recv[count -1-mpi_i])
     2387                MPI_Send(trade,(p+1)*count,MPI_DOUBLE,target,tag,MPI_COMM_WORLD);
     2388                free(trade);
     2389#else
     2390                trade_ulong = (unsigned long int*) malloc(count*p*sizeof(unsigned long int));
     2391                mpi_ii=0;
     2392                for(mpi_i=0; mpi_i<count; mpi_i++){
     2393                   for(l=0; l<p;l++,mpi_ii++){
     2394                      trade_ulong[mpi_ii] =  upp_A[loc_recv[mpi_i]][l];
     2395                      upp_A[loc_recv[mpi_i]][l] = 0;
     2396                   }
     2397                }
     2398                MPI_Send(trade_ulong,p*count,MPI_UNSIGNED_LONG,target,tag,MPI_COMM_WORLD);
     2399                free(trade_ulong);
     2400#endif
     2401#endif
     2402#if defined(_FOS_)
     2403                trade = myalloc1(count*2);
     2404                for(mpi_i=0; mpi_i<count; mpi_i++){
     2405                   trade[2*mpi_i] = rp_T[loc_recv[mpi_i]];
     2406                   trade[2*mpi_i+1] = rp_A[loc_recv[mpi_i]];
     2407                   rp_A[loc_recv[mpi_i]] = 0.;
     2408                }
     2409                for(mpi_i=0; mpi_i<count; mpi_i++)
     2410                   ADOLC_GET_TAYLOR(loc_recv[count-1-mpi_i]);
     2411                MPI_Send(trade,2*count,MPI_DOUBLE,target,tag,MPI_COMM_WORLD);
     2412                free(trade);
     2413#endif
     2414#if defined(_FOV_)
     2415                trade = myalloc1(count*(p+1));
     2416                mpi_ii=0;
     2417                for(mpi_i=0; mpi_i<count; mpi_i++){
     2418                   trade[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2419                   mpi_ii++;
     2420                   for(l=0; l<p;l++,mpi_ii++){
     2421                      trade[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2422                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2423                   }
     2424                 }
     2425                 for(mpi_i=0; mpi_i<count;mpi_i++)
     2426                   ADOLC_GET_TAYLOR(loc_recv[count-1-mpi_i]);
     2427                MPI_Send(trade,(p+1)*count,MPI_DOUBLE,target,tag,MPI_COMM_WORLD);
     2428                free(trade);
     2429#endif
     2430                free(loc_recv);
     2431                break;
     2432                /*--------------------------------------------------------------------------*/
     2433            case barrier_op:
     2434                MPI_Barrier(MPI_COMM_WORLD);
     2435                break;
     2436                /*--------------------------------------------------------------------------*/
     2437            case broadcast:
     2438                myid = get_locint_r(); // process id
     2439                root = get_locint_r(); // root
     2440                count = get_locint_r(); // count
     2441                loc_recv = (locint*) malloc(count*sizeof(locint));
     2442                for(mpi_i=0;mpi_i<count;mpi_i++)
     2443                   loc_recv[count -1-mpi_i] = get_locint_r(); // Recv Buffer
     2444                count2 = get_locint_r(); // count
     2445                count2 *= mpi_size;
     2446
     2447#if defined(_INT_REV_)
     2448#if defined(_TIGHT_)
     2449                trade = myalloc1(count*(p+1));
     2450                rec_buf = NULL;
     2451                if (myid == root)
     2452                   rec_buf = myalloc1(count2*(p+1));
     2453
     2454                mpi_ii=0;
     2455                for(mpi_i=0; mpi_i < count; mpi_i++) {
     2456                   trade[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2457                   mpi_ii++;
     2458                   for(l=0; l<p;l++,mpi_ii++){
     2459                       trade[mpi_ii] = (double) upp_A[loc_recv[mpi_i]][l];
     2460                      upp_A[loc_recv[mpi_i]][l] = 0;
     2461                   }
     2462                }
     2463                for(mpi_i=0; mpi_i < count; mpi_i++)
     2464                   ADOLC_GET_TAYLOR(loc_recv[count-1-mpi_i])
     2465                MPI_Gather( trade, count*(p+1), MPI_DOUBLE, rec_buf ,count*(p+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     2466                free(trade);
     2467                if (myid == root){
     2468                   mpi_ii=0;
     2469                   for(arg=0; arg< mpi_size; arg++)
     2470                      for (mpi_i=0; mpi_i < count; mpi_i++) {
     2471                       rp_T[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     2472                       mpi_ii++;
     2473                       for(l=0; l<p;l++,mpi_ii++)
     2474                          upp_A[loc_recv[mpi_i]][l] += (unsigned long int) trade[mpi_ii];
     2475                   }
     2476                   free(rec_buf);
     2477                }
     2478#else
     2479                trade_ulong = (unsigned long int*) malloc(count*p*sizeof(unsigned long int));
     2480                if (myid == root)
     2481                   rec_ulong = (unsigned long int*) malloc(count2*p*sizeof(unsigned long int));
     2482                else
     2483                   rec_ulong = NULL;
     2484                mpi_ii=0;
     2485                for(mpi_i=0; mpi_i < count; mpi_i++) {
     2486                   for(l=0;l<p;l++,mpi_ii++){
     2487                       trade_ulong[mpi_ii] = upp_A[loc_recv[mpi_i]][l];
     2488                       upp_A[loc_recv[mpi_i]][l]=0;
     2489                    }
     2490                }
     2491                MPI_Reduce( trade_ulong , rec_ulong ,p*count, MPI_DOUBLE , MPI_SUM , root, MPI_COMM_WORLD);
     2492                if (myid == root){
     2493                   mpi_ii=0;
     2494                   for(mpi_i=0; mpi_i < count; mpi_i++) {
     2495                      for(l=0;l<p;l++,mpi_ii++)
     2496                         upp_A[loc_recv[mpi_i]][l] += rec_ulong[mpi_ii];
     2497                   }
     2498                   free(rec_ulong);
     2499                }
     2500                free(trade_ulong);
     2501#endif
     2502#endif
     2503#if defined(_FOS_)
     2504                trade = myalloc1(count*2);
     2505                if (myid == root)
     2506                   rec_buf = myalloc1(count2*2);
     2507                else
     2508                   rec_buf = NULL;
     2509                for (mpi_i=0; mpi_i < count; mpi_i++) {
     2510                    trade[2*mpi_i] = rp_T[loc_recv[mpi_i]];
     2511                    trade[2*mpi_i+1] = rp_A[loc_recv[mpi_i]];
     2512                    rp_A[loc_recv[mpi_i]]=0.;
     2513                }
     2514                for (mpi_i=0; mpi_i < count; mpi_i++)
     2515                    ADOLC_GET_TAYLOR(loc_recv[count-1-mpi_i])
     2516                MPI_Gather( trade, count*2, MPI_DOUBLE, rec_buf ,count*2, MPI_DOUBLE, root, MPI_COMM_WORLD);
     2517                free(trade);
     2518                if (myid == root){
     2519                   mpi_ii=0;
     2520                   for(arg=0; arg< mpi_size; arg++)
     2521                      for(mpi_i=0; mpi_i < count; mpi_i++) {
     2522                         rp_T[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     2523                         rp_A[loc_recv[mpi_i]]+= rec_buf[mpi_ii+1];
     2524                         mpi_ii +=2;
     2525                      }
     2526                   free(rec_buf);
     2527                }
     2528#endif
     2529#if defined(_FOV_)
     2530                trade = myalloc1(count*(p+1));
     2531                if (myid == root)
     2532                   rec_buf = myalloc1(count2*(p+1));
     2533                else
     2534                   rec_buf = NULL;
     2535                mpi_ii=0;
     2536                for (mpi_i=0; mpi_i < count; mpi_i++) {
     2537                    trade[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2538                    mpi_ii++;
     2539                    for(l=0;l<p;l++,mpi_ii++){
     2540                       trade[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2541                       rpp_A[loc_recv[mpi_i]][l]=0.;
     2542                    }
     2543                }
     2544                for (mpi_i=0; mpi_i < count; mpi_i++)
     2545                   ADOLC_GET_TAYLOR(loc_recv[count-1-mpi_i])
     2546                MPI_Gather( trade, count*(p+1), MPI_DOUBLE, rec_buf ,count*(p+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     2547                free(trade);
     2548                if (myid == root){
     2549                   mpi_ii=0;
     2550                   for(arg=0; arg< mpi_size; arg++)
     2551                      for(mpi_i=0; mpi_i < count; mpi_i++) {
     2552                         rp_T[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     2553                         mpi_ii++;
     2554                         for(l=0;l<p;l++,mpi_ii++)
     2555                            rpp_A[loc_recv[mpi_i]][l] +=rec_buf[mpi_ii];
     2556                      }
     2557                   free(rec_buf);
     2558                }
     2559#endif
     2560                free(loc_recv);
     2561                break;
     2562            case gather:
     2563                myid = get_locint_r(); // process id
     2564                root = get_locint_r(); // root
     2565                count2 = get_locint_r(); // count*process_count
     2566                if (root == myid){
     2567                   loc_recv = (locint*) malloc (count2*sizeof(locint));
     2568                   for(mpi_i=0; mpi_i < count2; mpi_i++)
     2569                      loc_recv[count2- mpi_i -1 ] = get_locint_r();
     2570                }
     2571                arg = get_locint_r(); // count*process_count
     2572                arg = get_locint_r(); // process id
     2573                arg = get_locint_r(); // root
     2574                count = get_locint_r(); // count
     2575                loc_send = (locint*) calloc(count,sizeof(locint));
     2576                for(mpi_i=0;mpi_i<count;mpi_i++)
     2577                   loc_send[count-1-mpi_i] = get_locint_r(); // Receive Buffer
     2578                arg = get_locint_r(); // count
     2579
     2580#if defined(_INT_REV_)
     2581#if defined(_TIGHT_)
     2582               trade = myalloc1(count*(p+1));
     2583               rec_buf = NULL;
     2584               if (myid == root){
     2585                  rec_buf = myalloc1(count2*(p+1));
     2586                  mpi_ii=0;
     2587                  for(mpi_i=0; mpi_i < count2; mpi_i++) {
     2588                     rec_buf[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2589                     mpi_ii++;
     2590                     for(l=0;l<p;l++,mpi_ii++){
     2591                        rec_buf[mpi_ii] = (double) upp_A[loc_recv[mpi_i]][l];
     2592                        upp_A[loc_recv[mpi_i]][l]=0;
     2593                     }
     2594                  }
     2595                  for(mpi_i=0;mpi_i<count2;mpi_i++)
     2596                     ADOLC_GET_TAYLOR(loc_recv[count2-1-mpi_i]);
     2597               }
     2598               MPI_Scatter(rec_buf,count*(p+1),MPI_DOUBLE,trade,count*(p+1),MPI_DOUBLE, root,MPI_COMM_WORLD);
     2599               if (myid == root)
     2600                  free(rec_buf);
     2601               mpi_ii=0;
     2602               for(mpi_i=0; mpi_i < count; mpi_i++) {
     2603                  rp_T[loc_send[mpi_i]] = trade[mpi_ii];
     2604                  mpi_ii++;
     2605                  for(l=0;l<p;l++,mpi_ii++)
     2606                     upp_A[loc_send[mpi_i]][l] += (unsigned long int) trade[mpi_ii];
     2607                }
     2608                free(trade);
     2609#else /* NTIGHT */
     2610               trade_ulong = (unsigned long int*) malloc(count*p*sizeof(unsigned long int));
     2611               rec_ulong = NULL;
     2612               if(myid == root){
     2613                  rec_ulong = (unsigned long int*) malloc(count2*p*sizeof(unsigned long int));
     2614                  mpi_ii=0;
     2615                  for (mpi_i=0; mpi_i < count2; mpi_i++){
     2616                     for(l=0;l<p;l++,mpi_ii++){
     2617                       rec_ulong[mpi_ii] = upp_A[loc_recv[mpi_i]][l];
     2618                       upp_A[loc_recv[mpi_i]][l]=0;
     2619                     }
     2620                  }
     2621               }
     2622               MPI_Scatter(rec_ulong,count*p,MPI_UNSIGNED_LONG,trade_ulong,count*p,MPI_UNSIGNED_LONG, root,MPI_COMM_WORLD);
     2623               if (myid == root)
     2624                  free(rec_ulong);
     2625               mpi_ii=0;
     2626               for(mpi_i=0; mpi_i < count; mpi_i++){
     2627                  for(l=0;l<p;l++,mpi_ii++)
     2628                     upp_A[loc_send[mpi_i]][l] += trade_ulong[mpi_ii];
     2629                }
     2630                free(trade_ulong);
     2631#endif
     2632#endif
     2633#if defined(_FOS_)
     2634                trade = myalloc1(count*2);
     2635                rec_buf = NULL;
     2636                if(myid == root){
     2637                    rec_buf = myalloc1(count2*2);
     2638                    for (mpi_i=0; mpi_i < count2; mpi_i++) {
     2639                       rec_buf[2*mpi_i] = rp_T[loc_recv[mpi_i]];
     2640                       rec_buf[2*mpi_i+1] = rp_A[loc_recv[mpi_i]];
     2641                       rp_A[loc_recv[mpi_i]]=0.;
     2642                    }
     2643                    for(mpi_i=0;mpi_i<count2;mpi_i++)
     2644                       ADOLC_GET_TAYLOR(loc_recv[count2-1-mpi_i])
     2645                }
     2646                MPI_Scatter(rec_buf,count*2,MPI_DOUBLE,trade,count*2,MPI_DOUBLE, root,MPI_COMM_WORLD);
     2647                if (myid == root)
     2648                   free(rec_buf);
     2649                for (mpi_i=0; mpi_i < count; mpi_i++) {
     2650                    rp_T[loc_send[mpi_i]] = trade[2*mpi_i];
     2651                    rp_A[loc_send[mpi_i]] += trade[2*mpi_i+1];
     2652                }
     2653                free(trade);
     2654#endif
     2655#if defined(_FOV_)
     2656                trade = myalloc1(count*(p+1));
     2657                rec_buf = NULL;
     2658                if(myid == root){
     2659                    rec_buf = myalloc1(count2*(p+1));
     2660                    mpi_ii=0;
     2661                    for(mpi_i=0; mpi_i < count2; mpi_i++){
     2662                       rec_buf[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2663                       mpi_ii++;
     2664                       for(l=0;l<p;l++,mpi_ii++){
     2665                         rec_buf[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2666                         rpp_A[loc_recv[mpi_i]][l]=0.;
     2667                       }
     2668                    }
     2669                    for(mpi_i=0;mpi_i<count2;mpi_i++)
     2670                       ADOLC_GET_TAYLOR(loc_recv[count2-1-mpi_i])
     2671                }
     2672                MPI_Scatter(rec_buf,count*(p+1),MPI_DOUBLE,trade,count*(p+1),MPI_DOUBLE, root,MPI_COMM_WORLD);
     2673                if (myid == root)
     2674                   free(rec_buf);
     2675                mpi_ii=0;
     2676                for (mpi_i=0; mpi_i < count; mpi_i++){
     2677                       rp_T[loc_send[mpi_i]] = trade[mpi_ii];
     2678                       mpi_ii++;
     2679                       for(l=0;l<p;l++,mpi_ii++)
     2680                          rpp_A[loc_send[mpi_i]][l] += trade[mpi_ii];
     2681                }
     2682                free(trade);
     2683#endif
     2684                if (myid == root )
     2685                   free(loc_recv);
     2686                free(loc_send);
     2687                break;
     2688                /*--------------------------------------------------------------------------*/
     2689            case scatter:
     2690               count2 = get_locint_r(); // recvcount (count)
     2691               loc_recv = (locint*) malloc(count2*sizeof(locint));
     2692               for(mpi_i=0;mpi_i<count2;mpi_i++)
     2693                 loc_recv[count2-1-mpi_i] = get_locint_r(); // recv Buffer
     2694               arg = get_locint_r(); // recvcount (count)
     2695               myid = get_locint_r(); // process id
     2696               root = get_locint_r(); // root
     2697               count = get_locint_r(); // sendcount (count*process_count)
     2698               if(myid==root){
     2699                  loc_send = (locint*) malloc(count*sizeof(locint));
     2700                  for(mpi_i=0;mpi_i<count;mpi_i++)
     2701                     loc_send[count-1-mpi_i]= get_locint_r();
     2702               }
     2703               res = get_locint_r(); // id
     2704               res = get_locint_r(); // root
     2705               res = get_locint_r(); // sendcount (count*process_count)
     2706
     2707#if defined(_INT_REV_)
     2708#if defined(_TIGHT_)
     2709                rec_buf = myalloc1(count2*(p+1));
     2710                trade = NULL;
     2711                if (myid == root)
     2712                   trade = myalloc1(count*(p+1));
     2713                mpi_ii=0;
     2714                for(mpi_i=0; mpi_i< count2; mpi_i++){
     2715                   rec_buf[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2716                   mpi_ii++;
     2717                   for(l=0;l<p;l++,mpi_ii++){
     2718                      rec_buf[mpi_ii] = (double) upp_A[loc_recv[mpi_i]][l];
     2719                      upp_A[loc_recv[mpi_i]][l] = 0;
     2720                   }
     2721                }
     2722                for(mpi_i=0;mpi_i<count2;mpi_i++)
     2723                   ADOLC_GET_TAYLOR(loc_recv[count2-1-mpi_i])
     2724                MPI_Gather(rec_buf , count2*(p+1), MPI_DOUBLE,trade,count2*(p+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     2725                free(rec_buf);
     2726                if (myid == root){
     2727                   mpi_ii=0;
     2728                   for( mpi_i=0; mpi_i< count; mpi_i++){
     2729                      rp_T[loc_send[mpi_i]] = trade[mpi_ii];
     2730                      mpi_ii++;
     2731                      for(l=0;l<p;l++,mpi_ii++)
     2732                         upp_A[loc_send[mpi_i]][l] += (unsigned long int) trade[mpi_ii];
     2733                   }
     2734                   free(trade);
     2735                }
     2736#else
     2737                rec_ulong = (unsigned long int*) malloc(count2*p*sizeof(unsigned long int));
     2738                trade_ulong = NULL;
     2739                if(myid == root)
     2740                   trade_ulong = (unsigned long int*) malloc(count*p*sizeof(unsigned long int));
     2741                mpi_ii=0;
     2742                for(mpi_i=0; mpi_i < count2; mpi_i++){
     2743                   for(l=0;l<p;l++,mpi_ii++){
     2744                      rec_ulong[mpi_ii] = upp_A[loc_recv[mpi_i]][l];
     2745                      upp_A[loc_recv[mpi_i]][l]=0;
     2746                   }
     2747                }
     2748                MPI_Gather(rec_ulong , count2*p, MPI_DOUBLE,trade_ulong,count2*p, MPI_DOUBLE, root, MPI_COMM_WORLD);
     2749                free(rec_ulong);
     2750                mpi_ii=0;
     2751                if (myid == root ){
     2752                   for(mpi_i=0; mpi_i < count; mpi_i++){
     2753                     for(l=0;l<p;l++,mpi_ii++)
     2754                        upp_A[loc_send[mpi_i]][l] += trade_ulong[mpi_ii];
     2755                  }
     2756                  free(trade_ulong);
     2757                }
     2758#endif
     2759#endif
     2760#if defined(_FOS_)
     2761                rec_buf = myalloc1(count2*2);
     2762                trade = NULL;
     2763                if (myid == root)
     2764                   trade = myalloc1(count*2);
     2765
     2766                for (mpi_i=0; mpi_i < count2; mpi_i++) {
     2767                   rec_buf[2*mpi_i] = rp_T[loc_recv[mpi_i]];
     2768                   rec_buf[2*mpi_i+1] = rp_A[loc_recv[mpi_i]];
     2769                   rp_A[loc_recv[mpi_i]]=0;
     2770                }
     2771                for (mpi_i=0; mpi_i < count2; mpi_i++)
     2772                   ADOLC_GET_TAYLOR(loc_recv[count2-1-mpi_i])
     2773                MPI_Gather( rec_buf ,count2*2, MPI_DOUBLE,trade,count2*2,MPI_DOUBLE, root, MPI_COMM_WORLD);
     2774                free(rec_buf);
     2775                if(myid == root){
     2776                   for(mpi_i=0; mpi_i < count; mpi_i++) {
     2777                      rp_T[loc_send[mpi_i]] = trade[2*mpi_i];
     2778                      rp_A[loc_send[mpi_i]] += trade[2*mpi_i+1];
     2779                   }
     2780                   free(trade);
     2781                }
     2782#endif
     2783#if defined(_FOV_)
     2784                rec_buf = myalloc1(count2*(p+1));
     2785                trade = NULL;
     2786                if(myid == root)
     2787                   trade = myalloc1(count*(p+1));
     2788
     2789                mpi_ii=0;
     2790                for(mpi_i=0; mpi_i< count2; mpi_i++){
     2791                   rec_buf[mpi_ii] = rp_T[loc_recv[mpi_i]];
     2792                   mpi_ii++;
     2793                   for(l=0;l<p;l++,mpi_ii++){
     2794                      rec_buf[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2795                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2796                   }
     2797                }
     2798                for(mpi_i=0; mpi_i< count2; mpi_i++)
     2799                   ADOLC_GET_TAYLOR(loc_recv[count2-1-mpi_i])
     2800                MPI_Gather(rec_buf , count2*(p+1), MPI_DOUBLE,trade,count2*(p+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     2801                free(rec_buf);
     2802                if (myid == root){
     2803                   mpi_ii=0;
     2804                   for( mpi_i=0; mpi_i< count; mpi_i++){
     2805                      rp_T[loc_send[mpi_i]] = trade[mpi_ii];
     2806                      mpi_ii++;
     2807                      for(l=0;l<p;l++,mpi_ii++)
     2808                         rpp_A[loc_send[mpi_i]][l] += trade[mpi_ii];
     2809                   }
     2810                   free(trade);
     2811                }
     2812#endif
     2813                if (myid == root)
     2814                   free(loc_send);
     2815                free(loc_recv);
     2816                break;
     2817#endif
     2818                /*--------------------------------------------------------------------------*/
    22402819            default:                                                   /* default */
    22412820                /*             Die here, we screwed up     */
     
    22532832
    22542833    /* clean up */
    2255 #if !defined(_INT_REV_)
     2834#if !defined(_NTIGHT_)
    22562835    free(rp_T);
    22572836#endif
  • branches/MPI/ADOL-C/src/ho_rev.c

    r376 r424  
    1313 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
    1414               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
    15                Kshitij Kulshreshtha
    16 
     15               Kshitij Kulshreshtha, Benjamin Letschert
     16 
    1717 This file is part of ADOL-C. This software is provided as open source.
    1818 Any use, reproduction, or distribution of the software constitutes
     
    6060/*--------------------------------------------------------------------------*/
    6161#ifdef _HOS_
     62#if defined(_MPI_)
     63#define GENERATED_FILENAME "hos_reverse_mpi"
     64#else
    6265#define GENERATED_FILENAME "hos_reverse"
    63 
     66#endif
    6467#define _HIGHER_ORDER_
    6568
     
    9699/*--------------------------------------------------------------------------*/
    97100#elif _HOV_
     101#if defined(_MPI_)
     102#define GENERATED_FILENAME "hov_reverse_mpi"
     103#else
    98104#define GENERATED_FILENAME "hov_reverse"
     105#endif
    99106
    100107#define _ADOLC_VECTOR_
     
    274281#include <math.h>
    275282
     283#if defined(_MPI_)
     284#include <adolc/adolc_mpi.h>
     285#endif /* ADOLC_Parallel */
     286
    276287#if defined(ADOLC_DEBUG)
    277288#include <string.h>
     
    287298/* Higher Order Scalar Reverse Pass.                                       */
    288299/***************************************************************************/
    289 int hos_reverse(short   tnum,        /* tape id */
     300#if defined(_MPI_)
     301int hos_reverse_mpi( int mpi_id, int mpi_size,
     302#else
     303int hos_reverse(
     304#endif
     305                short   tnum,        /* tape id */
    290306                int     depen,       /* consistency chk on # of deps */
    291307                int     indep,       /* consistency chk on # of indeps */
     
    294310                double  **results)   /* matrix of coefficient vectors */
    295311{ int i, j, rc;
     312#if defined(_MPI_)
     313        double** L = NULL;
     314        /* if depen==indep==0 then tnum is not main process */
     315        if((depen!=0) && (indep != 0)) L = myalloc2(depen,degre+1);
     316    for ( i = 0; i < depen; ++i ) {
     317        L[i][0] = lagrange[i];
     318        for ( j = 1; j <= degre; ++j )
     319            L[i][j] = 0.0;
     320    }
     321    rc = hos_ti_reverse_mpi(mpi_id,mpi_size,tnum,depen,indep,degre,L,results);
     322    if((depen!=0) && (indep != 0)) myfree2(L);
     323#else
    296324    double** L = myalloc2(depen,degre+1);
    297325    for ( i = 0; i < depen; ++i ) {
     
    302330    rc = hos_ti_reverse(tnum,depen,indep,degre,L,results);
    303331    myfree2(L);
     332#endif
    304333    return rc;
    305334}
    306 
     335#if defined(_MPI_)
     336int hos_ti_reverse_mpi( int mpi_id, int mpi_size,
     337#else
    307338int hos_ti_reverse(
     339#endif
    308340    short   tnum,        /* tape id */
    309341    int     depen,       /* consistency chk on # of deps */
     
    330362/* Higher Order Vector Reverse Pass.                                       */
    331363/***************************************************************************/
    332 int hov_reverse(short   tnum,        /* tape id */
     364#if defined(_MPI_)
     365int hov_reverse_mpi( int mpi_id, int mpi_size,
     366#else
     367int hov_reverse(
     368#endif
     369                short   tnum,        /* tape id */
    333370                int     depen,       /* consistency chk on # of deps */
    334371                int     indep,       /* consistency chk on # of indeps */
     
    339376                short   **nonzero )  /* structural sparsity  pattern  */
    340377{ int i, j, k, rc;
     378#if defined(_MPI_)
     379    double*** L = NULL;
     380    if(depen>0 && indep>0 ){
     381      L = myalloc3(nrows,depen,degre+1);
     382      for ( k = 0; k < nrows; ++k )
     383        for ( i = 0; i < depen; ++i ) {
     384          L[k][i][0] = lagrange[k][i];
     385            for ( j = 1; j <= degre; ++j )
     386              L[k][i][j] = 0.0;
     387        }
     388    }
     389    rc = hov_ti_reverse_mpi(mpi_id,mpi_size,tnum ,depen,indep,degre,nrows,L,results,nonzero);
     390    if(depen>0 && indep>0 ) myfree3(L);
     391#else
    341392    double*** L = myalloc3(nrows,depen,degre+1);
    342     for ( k = 0; k < nrows; ++k )
     393      for ( k = 0; k < nrows; ++k )
    343394        for ( i = 0; i < depen; ++i ) {
    344             L[k][i][0] = lagrange[k][i];
     395          L[k][i][0] = lagrange[k][i];
    345396            for ( j = 1; j <= degre; ++j )
    346                 L[k][i][j] = 0.0;
     397              L[k][i][j] = 0.0;
    347398        }
    348399    rc = hov_ti_reverse(tnum,depen,indep,degre,nrows,L,results,nonzero);
    349400    myfree3(L);
     401#endif
    350402    return rc;
    351403}
    352404
     405#if defined(_MPI_)
     406int hov_ti_reverse_mpi( int mpi_id, int mpi_size,
     407#else
    353408int hov_ti_reverse(
     409#endif
    354410    short   tnum,        /* tape id */
    355411    int     depen,       /* consistency chk on # of deps */
     
    369425    int dc, ret_c=3;
    370426
     427#if defined(_MPI_)
     428     tnum = mpi_id + mpi_size*tnum;
     429#endif
    371430    locint size = 0;
    372431    locint res  = 0;
     
    586645#endif /* ADOLC_DEBUG */
    587646
    588     while (operation != start_of_tape) {
     647#if defined(_MPI_)
     648        MPI_Status status_MPI;
     649        double *trade, *rec_buf;
     650        int mpi_i,mpi_ii, myid, root, count,count2;
     651     locint *loc_recv, *loc_send;
     652     int target, tag;
     653#endif /* is used by Parallelisation */
     654
     655    while (operation != start_of_tape) {
    589656        /* Switch statement to execute the operations in Reverse */
    590657        switch (operation) {
     
    25392606                        AARG1_INC = 0.0;
    25402607                }
    2541                
     2608
    25422609                for (j=arg1;j<=arg2;j++)
    25432610                    GET_TAYL(j,k,p)
     
    25452612                break;
    25462613
     2614                /*--------------------------------------------------------------------------*/
     2615
     2616#if defined(_MPI_)
     2617            case send_data:   // MPI-Send-Befehl
     2618                tag = get_locint_r(); // tag
     2619                target = get_locint_r(); // source
     2620                count = get_locint_r(); // count
     2621                loc_recv = (locint*) malloc(count*sizeof(locint));
     2622                for(mpi_i=0;mpi_i<count;mpi_i++)
     2623                     loc_recv[count-1-mpi_i] = get_locint_r();
     2624                count2 = get_locint_r();
     2625#if defined(_HOS_)
     2626                trade = myalloc1((k+k1)*count);
     2627                MPI_Recv( trade , (k+k1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     2628                mpi_ii=0;
     2629                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2630                   for(l=0;l<k;l++,mpi_ii++)
     2631                      rpp_T[loc_recv[mpi_i]][l] = trade[mpi_ii];
     2632                   for(l=0;l<k1;l++,mpi_ii++)
     2633                      rpp_A[loc_recv[mpi_i]][l] += trade[mpi_ii];
     2634                }
     2635                myfree1(trade);
     2636#endif
     2637#if defined(_HOV_)
     2638                trade = myalloc1((k+pk1)*count);
     2639                MPI_Recv( trade , (k+pk1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     2640                mpi_ii=0;
     2641                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2642                   for(l=0;l<k;l++,mpi_ii++)
     2643                      rpp_T[loc_recv[mpi_i]][l] = trade[mpi_ii];
     2644                   for(l=0;l<pk1;l++,mpi_ii++)
     2645                      rpp_A[loc_recv[mpi_i]][l] += trade[mpi_ii];
     2646                }
     2647                myfree1(trade);
     2648#endif
     2649                free(loc_recv);
     2650                break;
     2651           case receive_data:     // MPI-Send
     2652                   tag  = get_locint_r(); // tag
     2653                   target = get_locint_r(); // dest
     2654                count = get_locint_r(); // count
     2655                loc_recv = (locint*) malloc(count*sizeof(locint));
     2656                for(mpi_i=0;mpi_i<count;mpi_i++)
     2657                 loc_recv[count-1-mpi_i]  = get_locint_r(); // first Buffer
     2658                count2 = get_locint_r(); // count
     2659
     2660#if defined(_HOS_)
     2661                trade = myalloc1((k+k1)*count);
     2662                mpi_ii=0;
     2663                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2664                   for(l=0;l<k;l++,mpi_ii++)
     2665                      trade[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2666                   for(l=0;l<k1;l++,mpi_ii++){
     2667                      trade[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2668                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2669                   }
     2670                }
     2671                for(mpi_i=0; mpi_i< count ;mpi_i++)
     2672                   GET_TAYL(loc_recv[count-1-mpi_i],k,p);
     2673               MPI_Send( trade , (k+k1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     2674               myfree1(trade);
     2675#endif
     2676#if defined(_HOV_)
     2677                trade = myalloc1((k+pk1)*count);
     2678                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2679                   for(l=0;l<k;l++,mpi_ii++)
     2680                      trade[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2681                   for(l=0;l<pk1;l++,mpi_ii++){
     2682                      trade[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2683                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2684                   }
     2685                }
     2686                for(mpi_i=0; mpi_i< count ;mpi_i++)
     2687                   GET_TAYL(loc_recv[count-1-mpi_i],k,p);
     2688               MPI_Send( trade , (k+pk1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     2689               myfree1(trade);
     2690#endif
     2691               free(loc_recv);
     2692                break;
     2693                /*--------------------------------------------------------------------------*/
     2694            case barrier_op:
     2695                MPI_Barrier(MPI_COMM_WORLD);
     2696                break;
     2697            case broadcast:
     2698                myid = get_locint_r(); // process id
     2699                root = get_locint_r(); // root
     2700                count = get_locint_r(); // count
     2701                loc_recv = (locint*) malloc(count*sizeof(locint));
     2702                for(mpi_i=0;mpi_i<count;mpi_i++)
     2703                   loc_recv[count-1-mpi_i] = get_locint_r();
     2704                count2 = get_locint_r();
     2705#if defined(_HOS_)
     2706                trade = myalloc1((k+k1)*count);
     2707                rec_buf = NULL;
     2708                mpi_ii=0;
     2709                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2710                   for(l=0;l<k;l++,mpi_ii++)
     2711                      trade[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2712                   for(l=0;l<k1;l++,mpi_ii++){
     2713                      trade[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2714                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2715                   }
     2716                }
     2717                for(mpi_i=0; mpi_i< count ;mpi_i++)
     2718                     GET_TAYL(loc_recv[count-1-mpi_i],k,p);
     2719                if (myid == root)
     2720                   rec_buf = myalloc1(count*mpi_size*(k+k1));
     2721                MPI_Gather( trade , (k+k1)*count, MPI_DOUBLE, rec_buf,(k+k1)*count, MPI_DOUBLE, root, MPI_COMM_WORLD);
     2722                free(trade);
     2723                if(myid == root){
     2724                   mpi_ii=0;
     2725                   for(arg=0; arg< mpi_size ;arg++){
     2726                      for(mpi_i=0; mpi_i< count; mpi_i++){
     2727                         for(l=0;l<k;l++,mpi_ii++)
     2728                            rpp_T[loc_recv[mpi_i]][l] = rec_buf[mpi_ii];
     2729                         for(l=0;l<k1;l++,mpi_ii++)
     2730                            rpp_A[loc_recv[mpi_i]][l] += rec_buf[mpi_ii];
     2731                      }
     2732                   }
     2733                   free(rec_buf);
     2734                }
     2735#endif
     2736#if defined(_HOV_)
     2737                trade = myalloc1((k+pk1)*count);
     2738                rec_buf = NULL;
     2739                mpi_ii=0;
     2740                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2741                   for(l=0;l<k;l++,mpi_ii++)
     2742                      trade[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2743                   for(l=0;l<pk1;l++,mpi_ii++){
     2744                      trade[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2745                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2746                   }
     2747                }
     2748                for(mpi_i=0; mpi_i< count ;mpi_i++)
     2749                     GET_TAYL(loc_recv[count-1-mpi_i],k,p);
     2750                if (myid == root)
     2751                   rec_buf = myalloc1(count*mpi_size*(k+pk1));
     2752                MPI_Gather( trade , (k+pk1)*count, MPI_DOUBLE, rec_buf,(k+pk1)*count, MPI_DOUBLE, root, MPI_COMM_WORLD);
     2753                free(trade);
     2754                if(myid == root){
     2755                   mpi_ii=0;
     2756                   for(arg=0; arg< mpi_size ;arg++){
     2757                      for(mpi_i=0; mpi_i< count; mpi_i++){
     2758                         for(l=0;l<k;l++,mpi_ii++)
     2759                            rpp_T[loc_recv[mpi_i]][l] = trade[mpi_ii];
     2760                         for(l=0;l<pk1;l++,mpi_ii++)
     2761                            rpp_A[loc_recv[mpi_i]][l] += trade[mpi_ii];
     2762                      }
     2763                   }
     2764                   free(rec_buf);
     2765                }
     2766#endif
     2767                free(loc_recv);
     2768                break;
     2769                /*--------------------------------------------------------------------------*/
     2770
     2771            case gather:
     2772                myid = get_locint_r(); // process id
     2773                root = get_locint_r(); // root
     2774                count2 = get_locint_r(); // count*process_count
     2775                if (root == myid){
     2776                   loc_recv = (locint*) malloc (count2*sizeof(locint));
     2777                   for(mpi_i=0;mpi_i<count2;mpi_i++)
     2778                      loc_recv[count2-1-mpi_i] = get_locint_r(); // Receive Buffer
     2779                }
     2780                arg = get_locint_r(); // count*process_count
     2781                arg = get_locint_r(); // process id
     2782                arg = get_locint_r(); // root
     2783                count = get_locint_r(); // count
     2784                loc_send = (locint*) calloc(count,sizeof(locint));
     2785                for(mpi_i=0;mpi_i<count;mpi_i++)
     2786                   loc_send[count-1-mpi_i] = get_locint_r(); // Send Buffer
     2787                arg = get_locint_r(); // count
     2788#if defined(_HOS_)
     2789                rec_buf = NULL;
     2790                if(myid == root ){
     2791                   rec_buf = myalloc1(count2*(k+k1));
     2792                   mpi_ii=0;
     2793                   for (mpi_i=0 ; mpi_i< count2 ;mpi_i++ ){
     2794                      for( l=0; l < k ; l++,mpi_ii++)
     2795                         rec_buf[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2796                      for( l=0; l < k1 ; l++,mpi_ii++){
     2797                         rec_buf[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2798                         rpp_A[loc_recv[mpi_i]][l] = 0.;
     2799                      }
     2800                   }
     2801                   for (mpi_i=0 ; mpi_i< count2 ;mpi_i++ )
     2802                      GET_TAYL(loc_recv[count2-1-mpi_i],k,p);
     2803                }
     2804                trade = myalloc1((k+k1)*count);
     2805                MPI_Scatter(rec_buf,(k+k1)*count, MPI_DOUBLE , trade, count*(k+k1),MPI_DOUBLE, root, MPI_COMM_WORLD);
     2806                mpi_ii=0;
     2807                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2808                   for(l=0;l<k;l++,mpi_ii++)
     2809                      rpp_T[loc_send[mpi_i]][l] = trade[mpi_ii];
     2810                   for(l=0;l<k1;l++,mpi_ii++)
     2811                      rpp_A[loc_send[mpi_i]][l] += trade[mpi_ii];
     2812                }
     2813#endif
     2814#if defined(_HOV_)
     2815                rec_buf = NULL;
     2816                if(myid == root ){
     2817                   rec_buf = myalloc1(count2*(k+pk1));
     2818                   mpi_ii=0;
     2819                   for (mpi_i=0 ; mpi_i< count2 ;mpi_i++ ){
     2820                      for( l=0; l < k ; l++,mpi_ii++)
     2821                         rec_buf[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2822                      for( l=0; l < pk1 ; l++,mpi_ii++){
     2823                         rec_buf[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2824                         rpp_A[loc_recv[mpi_i]][l] = 0.;
     2825                      }
     2826                   }
     2827                   for (mpi_i=0 ; mpi_i< count2 ;mpi_i++ )
     2828                      GET_TAYL(loc_recv[count2-1-mpi_i],k,p);
     2829                }
     2830                trade = myalloc1((k+pk1)*count);
     2831                MPI_Scatter(rec_buf,(k+pk1)*count, MPI_DOUBLE , trade, count*(k+pk1),MPI_DOUBLE, root, MPI_COMM_WORLD);
     2832                mpi_ii=0;
     2833                for(mpi_i=0; mpi_i< count ;mpi_i++){
     2834                   for(l=0;l<k;l++,mpi_ii++)
     2835                      rpp_T[loc_send[mpi_i]][l] = trade[mpi_ii];
     2836                   for(l=0;l<pk1;l++,mpi_ii++)
     2837                      rpp_A[loc_send[mpi_i]][l] += trade[mpi_ii];
     2838                }
     2839#endif
     2840                if(myid==root) free(loc_recv);
     2841                free(loc_send);
     2842                break;
     2843           /*--------------------------------------------------------------------------*/
     2844           case scatter:
     2845               count2 = get_locint_r(); // recvcount (count)
     2846               loc_recv = (locint*) malloc(count2*sizeof(locint));
     2847               for(mpi_i=0;mpi_i<count2;mpi_i++)
     2848                 loc_recv[count2-1-mpi_i] = get_locint_r(); // recv Buffer
     2849               arg = get_locint_r(); // recvcount (count)
     2850               myid = get_locint_r(); // process id
     2851               root = get_locint_r(); // root
     2852               count = get_locint_r(); // sendcount (count*process_count)
     2853               if(myid==root){
     2854                  loc_send = (locint*) malloc(count*sizeof(locint));
     2855                  for(mpi_i=0;mpi_i<count;mpi_i++)
     2856                     loc_send[count-1-mpi_i]= get_locint_r();
     2857               }
     2858               res = get_locint_r(); // id
     2859               res = get_locint_r(); // root
     2860               res = get_locint_r(); // sendcount (count*process_count)
     2861#if defined(_HOS_)
     2862                trade = NULL;
     2863                rec_buf = myalloc1(count2*(k+k1));
     2864                mpi_ii=0;
     2865                for(mpi_i=0 ; mpi_i< count2 ;mpi_i++ ){
     2866                   for( l=0; l < k ; l++,mpi_ii++)
     2867                      rec_buf[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2868                   for( l=0; l < k1 ; l++,mpi_ii++){
     2869                      rec_buf[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2870                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2871                   }
     2872                }
     2873                for(mpi_i=0 ; mpi_i< count2 ;mpi_i++ )
     2874                   GET_TAYL(loc_recv[count2-1-mpi_i],k,p);
     2875                if (myid == root)
     2876                   trade = myalloc1(count*(k+k1));
     2877                MPI_Gather(rec_buf,count2*(k+k1), MPI_DOUBLE, trade,count2*(k+k1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     2878                free(rec_buf);
     2879                if (myid == root ){
     2880                   mpi_ii=0;
     2881                   for( mpi_i=0; mpi_i< count ;mpi_i++){
     2882                      for( l=0;l < k ; l++,mpi_ii++)
     2883                          rpp_T[loc_send[mpi_i]][l] = trade[mpi_ii];
     2884                      for( l=0;l < k1; l++,mpi_ii++)
     2885                          rpp_A[loc_send[mpi_i]][l] += trade[mpi_ii];
     2886                   }
     2887                   myfree1(trade);
     2888                }
     2889#endif
     2890#if defined(_HOV_)
     2891                trade = NULL;
     2892                rec_buf = myalloc1(count2*(k+pk1));
     2893                mpi_ii=0;
     2894                for(mpi_i=0 ; mpi_i< count2 ;mpi_i++ ){
     2895                   for( l=0; l < k ; l++,mpi_ii++)
     2896                      rec_buf[mpi_ii] = rpp_T[loc_recv[mpi_i]][l];
     2897                   for( l=0; l < pk1 ; l++,mpi_ii++){
     2898                      rec_buf[mpi_ii] = rpp_A[loc_recv[mpi_i]][l];
     2899                      rpp_A[loc_recv[mpi_i]][l] = 0.;
     2900                   }
     2901                }
     2902                for(mpi_i=0 ; mpi_i< count2 ;mpi_i++ )
     2903                   GET_TAYL(loc_recv[count2-1-mpi_i],k,p);
     2904                if (myid == root)
     2905                   trade = myalloc1(count*(k+pk1));
     2906                MPI_Gather(rec_buf,count2*(k+pk1), MPI_DOUBLE, trade,count2*(k+pk1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     2907                free(rec_buf);
     2908                if (myid == root ){
     2909                   mpi_ii=0;
     2910                   for( mpi_i=0; mpi_i< count ;mpi_i++){
     2911                      for( l=0;l < k ; l++,mpi_ii++)
     2912                          rpp_T[loc_send[mpi_i]][l] = trade[mpi_ii];
     2913                      for( l=0;l < pk1; l++,mpi_ii++)
     2914                          rpp_A[loc_send[mpi_i]][l] += trade[mpi_ii];
     2915                   }
     2916                   free(trade);
     2917                }
     2918#endif
     2919                if( myid == root) free(loc_send);
     2920                free(loc_recv);
     2921                break;
     2922#endif
    25472923                /*--------------------------------------------------------------------------*/
    25482924            default:                                                   /* default */
     
    25562932        } /* endswitch */
    25572933
    2558         /* Get the next operation */   
     2934        /* Get the next operation */
    25592935        operation=get_op_r();
    25602936#if defined(ADOLC_DEBUG)
  • branches/MPI/ADOL-C/src/oplate.h

    r360 r424  
    77 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
    88               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
    9                Kshitij Kulshreshtha
     9               Kshitij Kulshreshtha, Benjamin Letschert
    1010 
    1111 This file is part of ADOL-C. This software is provided as open source.
     
    8383  ext_diff,
    8484  ignore_me,
     85  send_data=61,
     86  receive_data,
     87  barrier_op,
     88  broadcast,
     89  gather,
     90  scatter,
    8591  subscript = 80,
    8692  subscript_ref,
  • branches/MPI/ADOL-C/src/sparse/Makefile.am

    r354 r424  
    33## Revision: $Id$
    44##
    5 ## Copyright (C)  Andrea Walther, Andreas Kowarz
     5## Copyright (C)  Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha
    66##
    77## This file is part of ADOL-C. This software is provided as open source.
     
    2020
    2121libsparse_la_SOURCES     = sparse_fo_rev.cpp sparsedrivers.cpp
     22if HAVE_MPI
     23include $(top_srcdir)/autoconf/rules_mpi.in
     24
     25noinst_LTLIBRARIES              += libsparse_mpi.la
     26libsparse_mpi_la_SOURCES = sparsedrivers_mpi.cpp
     27endif
  • branches/MPI/ADOL-C/src/sparse/Makefile.in

    r377 r424  
    5454build_triplet = @build@
    5555host_triplet = @host@
     56DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
     57        $(top_srcdir)/autoconf/depcomp \
     58        $(top_srcdir)/autoconf/rules_mpi.in
     59@HAVE_MPI_TRUE@am__append_1 = libsparse_mpi.la
    5660subdir = ADOL-C/src/sparse
    57 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
    58         $(top_srcdir)/autoconf/depcomp
    5961ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    60 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     62am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     63        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6164am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6265        $(ACLOCAL_M4)
     
    7275am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
    7376am__v_lt_0 = --silent
     77libsparse_mpi_la_LIBADD =
     78am__libsparse_mpi_la_SOURCES_DIST = sparsedrivers_mpi.cpp
     79@HAVE_MPI_TRUE@am_libsparse_mpi_la_OBJECTS = sparsedrivers_mpi.lo
     80libsparse_mpi_la_OBJECTS = $(am_libsparse_mpi_la_OBJECTS)
     81@HAVE_MPI_TRUE@am_libsparse_mpi_la_rpath =
    7482DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src
    7583depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp
     
    98106am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
    99107am__v_GEN_0 = @echo "  GEN     " $@;
    100 SOURCES = $(libsparse_la_SOURCES)
    101 DIST_SOURCES = $(libsparse_la_SOURCES)
     108SOURCES = $(libsparse_la_SOURCES) $(libsparse_mpi_la_SOURCES)
     109DIST_SOURCES = $(libsparse_la_SOURCES) \
     110        $(am__libsparse_mpi_la_SOURCES_DIST)
    102111am__can_run_installinfo = \
    103112  case $$AM_UPDATE_INFO_DIR in \
     
    164173MANIFEST_TOOL = @MANIFEST_TOOL@
    165174MKDIR_P = @MKDIR_P@
     175MPICC = @MPICC@
     176MPICXX = @MPICXX@
     177MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     178MPILIBS = @MPILIBS@
    166179NM = @NM@
    167180NMEDIT = @NMEDIT@
     
    247260AM_CPPFLAGS = -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src  @COLPACK_CFLAGS@
    248261MAINTAINERCLEANFILES = Makefile.in *~ *.orig
    249 noinst_LTLIBRARIES = libsparse.la
     262noinst_LTLIBRARIES = libsparse.la $(am__append_1)
    250263libsparse_la_SOURCES = sparse_fo_rev.cpp sparsedrivers.cpp
     264@HAVE_MPI_TRUE@AM_V_MPICC = $(am__v_MPICC_$(V))
     265@HAVE_MPI_TRUE@am__v_MPICC_ = $(am__v_MPICC_$(AM_DEFAULT_VERBOSITY))
     266@HAVE_MPI_TRUE@am__v_MPICC_0 = @echo "  MPICC " $@;
     267@HAVE_MPI_TRUE@AM_V_MPICXX = $(am__v_MPICXX_$(V))
     268@HAVE_MPI_TRUE@am__v_MPICXX_ = $(am__v_MPICXX_$(AM_DEFAULT_VERBOSITY))
     269@HAVE_MPI_TRUE@am__v_MPICXX_0 = @echo "  MPICXX" $@;
     270@HAVE_MPI_TRUE@MPICOMPILE = $(MPICC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
     271@HAVE_MPI_TRUE@        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
     272
     273@HAVE_MPI_TRUE@MPICXXLD = $(MPICXX)
     274@HAVE_MPI_TRUE@MPICXXCOMPILE = $(MPICXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
     275@HAVE_MPI_TRUE@        $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
     276
     277@HAVE_MPI_TRUE@LTMPICOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(MPICOMPILE)
     278@HAVE_MPI_TRUE@LTMPICXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(MPICXXCOMPILE)
     279@HAVE_MPI_TRUE@SUFFIXES = _mpi.cpp _mpi.c _mpi.o _mpi.lo _mpi.obj
     280@HAVE_MPI_TRUE@libsparse_mpi_la_SOURCES = sparsedrivers_mpi.cpp
    251281all: all-am
    252282
    253283.SUFFIXES:
    254 .SUFFIXES: .cpp .lo .o .obj
    255 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(am__configure_deps)
     284.SUFFIXES: _mpi.cpp _mpi.c _mpi.o _mpi.lo _mpi.obj .cpp .lo .o .obj
     285$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/autoconf/rules_mpi.in $(am__configure_deps)
    256286        @for dep in $?; do \
    257287          case '$(am__configure_deps)' in \
     
    274304            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
    275305        esac;
     306$(top_srcdir)/autoconf/rules_mpi.in:
    276307
    277308$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
     
    296327libsparse.la: $(libsparse_la_OBJECTS) $(libsparse_la_DEPENDENCIES) $(EXTRA_libsparse_la_DEPENDENCIES)
    297328        $(AM_V_CXXLD)$(CXXLINK)  $(libsparse_la_OBJECTS) $(libsparse_la_LIBADD) $(LIBS)
     329libsparse_mpi.la: $(libsparse_mpi_la_OBJECTS) $(libsparse_mpi_la_DEPENDENCIES) $(EXTRA_libsparse_mpi_la_DEPENDENCIES)
     330        $(AM_V_CXXLD)$(CXXLINK) $(am_libsparse_mpi_la_rpath) $(libsparse_mpi_la_OBJECTS) $(libsparse_mpi_la_LIBADD) $(LIBS)
    298331
    299332mostlyclean-compile:
     
    305338@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_fo_rev.Plo@am__quote@
    306339@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparsedrivers.Plo@am__quote@
     340@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparsedrivers_mpi.Plo@am__quote@
    307341
    308342.cpp.o:
     
    552586
    553587
     588@HAVE_MPI_TRUE@_mpi.c_mpi.o:
     589@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_MPICC)$(MPICOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     590@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     591@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(AM_V_MPICC) @AM_BACKSLASH@
     592@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     593@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     594@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(MPICOMPILE) -c -o $@ $<
     595
     596@HAVE_MPI_TRUE@_mpi.c_mpi.lo:
     597@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_MPICC)$(LTMPICOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     598@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Plo
     599@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(AM_V_MPICC) @AM_BACKSLASH@
     600@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
     601@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     602@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(LTMPICOMPILE) -c -o $@ $<
     603
     604@HAVE_MPI_TRUE@_mpi.c_mpi.obj:
     605@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_MPICC)$(MPICOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
     606@HAVE_MPI_TRUE@@am__fastdepCC_TRUE@     $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     607@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(AM_V_MPICC) @AM_BACKSLASH@
     608@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     609@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCC_FALSE@        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     610@HAVE_MPI_TRUE@@am__fastdepCC_FALSE@    $(MPICOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     611
     612@HAVE_MPI_TRUE@_mpi.cpp_mpi.o:
     613@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_MPICXX)$(MPICXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     614@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     615@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(AM_V_MPICXX) @AM_BACKSLASH@
     616@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     617@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     618@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(MPICXXCOMPILE) -c -o $@ $<
     619
     620@HAVE_MPI_TRUE@_mpi.cpp_mpi.lo:
     621@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_MPICXX)$(LTMPICXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ $<
     622@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Plo
     623@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(AM_V_MPICXX) @AM_BACKSLASH@
     624@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
     625@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     626@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(LTMPICXXCOMPILE) -c -o $@ $<
     627
     628@HAVE_MPI_TRUE@_mpi.cpp_mpi.obj:
     629@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_MPICXX)$(MPICXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*_mpi.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
     630@HAVE_MPI_TRUE@@am__fastdepCXX_TRUE@    $(AM_V_at)$(am__mv) $(DEPDIR)/$*_mpi.Tpo $(DEPDIR)/$*_mpi.Po
     631@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(AM_V_MPICXX) @AM_BACKSLASH@
     632@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
     633@HAVE_MPI_TRUE@@AMDEP_TRUE@@am__fastdepCXX_FALSE@       DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
     634@HAVE_MPI_TRUE@@am__fastdepCXX_FALSE@   $(MPICXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
     635
    554636# Tell versions [3.59,3.63) of GNU make to not export all variables.
    555637# Otherwise a system limit (for SysV at least) may be exceeded.
  • branches/MPI/ADOL-C/src/sparse/sparsedrivers.cpp

    r373 r424  
    44 Revision: $Id$
    55 Contents: "Easy To Use" C++ interfaces of SPARSE package
    6  
    7  Copyright (c) Andrea Walther
    8  
     6
     7 Copyright (c) Andrea Walther, Benjamin Letschert
     8
    99 This file is part of ADOL-C. This software is provided as open source.
    1010 Any use, reproduction, or distribution of the software constitutes
     
    11201120/****************************************************************************/
    11211121/*                                                               THAT'S ALL */
    1122 
  • branches/MPI/ADOL-C/src/tapedoc/Makefile.in

    r377 r424  
    5858        $(top_srcdir)/autoconf/depcomp
    5959ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
    60 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
     60am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
     61        $(top_srcdir)/autoconf/ax_mpi.m4 $(top_srcdir)/configure.ac
    6162am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
    6263        $(ACLOCAL_M4)
     
    164165MANIFEST_TOOL = @MANIFEST_TOOL@
    165166MKDIR_P = @MKDIR_P@
     167MPICC = @MPICC@
     168MPICXX = @MPICXX@
     169MPICXXEXTRALDFLAGS = @MPICXXEXTRALDFLAGS@
     170MPILIBS = @MPILIBS@
    166171NM = @NM@
    167172NMEDIT = @NMEDIT@
  • branches/MPI/ADOL-C/src/tapedoc/tapedoc.c

    r337 r424  
    77 
    88 Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz,
    9                Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel
     9               Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel,
     10               Benjamin Letschert
    1011
    1112 This file is part of ADOL-C. This software is provided as open source.
     
    105106                       "ceil op",
    106107                       "floor op",
    107                        "extern fctn"
    108                        "ignore_me"
     108                       "extern fctn",
     109                       "ignore_me",
     110                       "send data",
     111                       "receive data",
     112                             "barrier Op",
     113                       "broadcast Op",
     114                       "gather Op",
     115                       "scatter Op"
    109116                    };
    110117
     
    309316    dp_T0 = myalloc1(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]);
    310317
     318#if defined(HAVE_MPI)
     319    int mpi_i,mpi_ii,count,count2,dest,tag,buf;
     320#endif
    311321    operation=get_op_f();
    312322    while (operation !=end_of_tape) {
     
    11831193                filewrite(operation, 3, loc_a, val_a, 0, cst_d);
    11841194                break;
    1185 
    1186                 /*--------------------------------------------------------------------------*/
    1187             default:                                                   /* default */
     1195                /*--------------------------------------------------------------------------*/
     1196#if defined(HAVE_MPI)       
     1197        case send_data:
     1198                count  = get_locint_f(); // count
     1199             buf    = get_locint_f(); // first buffer
     1200             for(mpi_i=1; mpi_i<count;mpi_i++)
     1201                mpi_ii = get_locint_f(); // rest buffer
     1202                count2 = get_locint_f();
     1203                dest   = get_locint_f();
     1204             tag    = get_locint_f();
     1205                loc_a[0] = buf;
     1206                loc_a[1] = count;
     1207                loc_a[2] = dest;
     1208#ifdef computenumbers
     1209              val_a[0] = dp_T0[buf];
     1210              val_a[1] = dp_T0[buf];
     1211#endif
     1212                filewrite(operation,3,loc_a,val_a,1,cst_d);
     1213                break;
     1214        case receive_data:
     1215             count  = get_locint_f(); // count
     1216             buf    = get_locint_f(); // first buffer
     1217             for(mpi_i=1; mpi_i<count;mpi_i++)
     1218                mpi_ii = get_locint_f(); // rest buffer
     1219             count2 = get_locint_f();
     1220             dest   = get_locint_f();
     1221             tag    = get_locint_f();
     1222             loc_a[0] = buf;
     1223             loc_a[1] = count;
     1224             loc_a[2] = dest;
     1225             filewrite(operation, 3, loc_a, val_a, 0, cst_d);
     1226                break;
     1227        case barrier_op:
     1228                ++op_cnt;
     1229                --rev_op_cnt;
     1230                fprintf(fp,"%i & %i & %i & ",op_cnt, rev_op_cnt, barrier_op);
     1231
     1232    /* write opcode name if available */
     1233                res=0;
     1234                while (a[barrier_op][res]) {
     1235                        fprintf(fp,"%c",a[barrier_op][res]);
     1236                        res++;
     1237                }
     1238
     1239    /* write locations (max 4) right-justified */
     1240                fprintf(fp," & & & & & ");
     1241
     1242#ifdef computenumbers
     1243                fprintf(fp," & & & & & \\\\ \\hline \n");
     1244#else
     1245                fprintf(fp," &  \\\\ \\hline \n");
     1246#endif
     1247                break;
     1248        case broadcast:
     1249             count  = get_locint_f(); // count
     1250             buf    = get_locint_f(); // first buffer
     1251             for(mpi_i=1; mpi_i<count;mpi_i++)
     1252                mpi_ii = get_locint_f(); // rest buffer
     1253             count2 = get_locint_f();
     1254             dest   = get_locint_f(); // root
     1255             tag    = get_locint_f(); // id
     1256             loc_a[0] = buf;
     1257             loc_a[1] = count;
     1258             loc_a[2] = dest;
     1259             filewrite(operation, 3, loc_a, val_a, 0, cst_d);
     1260             break;
     1261       case gather:
     1262             count  = get_locint_f(); // count
     1263             buf    = get_locint_f(); // first buffer
     1264             for(mpi_i=1; mpi_i<count;mpi_i++)
     1265                mpi_ii = get_locint_f(); // rest buffer
     1266             count2 = get_locint_f();
     1267             dest   = get_locint_f(); // root
     1268             tag    = get_locint_f(); // id
     1269             count2 = get_locint_f(); // 2nd count
     1270             if(dest == tag){
     1271               for(mpi_i=0; mpi_i<count2;mpi_i++)
     1272                  mpi_ii = get_locint_f(); // rest buffer
     1273             }
     1274             mpi_ii = get_locint_f(); // count2
     1275             mpi_ii = get_locint_f(); // root
     1276             mpi_ii = get_locint_f(); // id
     1277
     1278
     1279             loc_a[0] = buf;
     1280             loc_a[1] = count;
     1281             loc_a[2] = dest;
     1282             filewrite(operation, 3, loc_a, val_a, 0, cst_d);
     1283             break;
     1284       case scatter:
     1285             count  = get_locint_f(); // sendcount*process_count
     1286             dest   = get_locint_f(); // root
     1287             tag    = get_locint_f(); // id
     1288             if(dest == tag){
     1289               for(mpi_i=0; mpi_i<count;mpi_i++)
     1290                 mpi_ii = get_locint_f(); // rest buffer
     1291             }
     1292             count  = get_locint_f();
     1293             dest   = get_locint_f(); // root
     1294             tag    = get_locint_f(); // id
     1295             count2 = get_locint_f(); // recvcount
     1296             buf    = get_locint_f(); // first buffer
     1297             for(mpi_i=1; mpi_i<count2;mpi_i++)
     1298                mpi_ii = get_locint_f(); // rest buffer
     1299             mpi_ii = get_locint_f();
     1300
     1301             loc_a[0] = buf;
     1302             loc_a[1] = count2;
     1303             loc_a[2] = dest;
     1304             filewrite(operation, 3, loc_a, val_a, 0, cst_d);
     1305             break;
     1306#endif // end of HAVE_MPI
     1307                /*--------------------------------------------------------------------------*/
     1308        default:                                                   /* default */
    11881309                /* Die here, we screwed up */
    11891310                fprintf(DIAG_OUT,"ADOL-C error: Fatal error in tape_doc for op %d\n",
  • branches/MPI/ADOL-C/src/uni5_for.c

    r376 r424  
    4444#endif /* ADOLC_DEBUG */
    4545
     46#if defined(_MPI_)
     47#include <mpi.h>
     48#include <adolc/interfaces_mpi.h>
     49#endif
     50
     51#include <adolc/externfcts.h>
     52#include "externfcts_p.h"
    4653
    4754/****************************************************************************/
     
    5461/*--------------------------------------------------------------------------*/
    5562#if defined(_ZOS_)
     63#if defined(_MPI_)
     64#  define GENERATED_FILENAME "zos_forward_mpi"
     65#else
    5666#  define GENERATED_FILENAME "zos_forward"
    57 
     67#endif
    5868/*--------------------------------------------------------------------------*/
    5969#else
    6070#if defined(_FOS_)
     71#if defined(_MPI_)
     72#define GENERATED_FILENAME "fos_forward_mpi"
     73#else
    6174#define GENERATED_FILENAME "fos_forward"
     75#endif
    6276
    6377#define ARGUMENT(indexi,l,i) argument[indexi]
     
    6781#else
    6882#if defined(_FOV_)
     83#if defined(_MPI_)
     84#define GENERATED_FILENAME "fov_forward_mpi"
     85#else
    6986#define GENERATED_FILENAME "fov_forward"
     87#endif
    7088
    7189#define _ADOLC_VECTOR_
     
    82100#else
    83101#if defined(_HOS_)
     102#if defined(_MPI_)
     103#define GENERATED_FILENAME "hos_forward_mpi"
     104#else
    84105#define GENERATED_FILENAME "hos_forward"
     106#endif
    85107
    86108#define _HIGHER_ORDER_
     
    92114#else
    93115#if defined(_HOV_)
     116#if defined(_MPI_)
     117#define GENERATED_FILENAME "hov_forward_mpi"
     118#else
    94119#define GENERATED_FILENAME "hov_forward"
     120#endif
    95121
    96122#define _ADOLC_VECTOR_
     
    115141#if defined(_INT_FOR_)
    116142#if defined(_TIGHT_)
     143#if defined(_MPI_)
     144#define GENERATED_FILENAME "int_forward_t_mpi"
     145#else
    117146#define GENERATED_FILENAME "int_forward_t"
    118147#endif
     148#endif
     149
    119150#if defined(_NTIGHT_)
     151#if defined(_MPI_)
     152#define GENERATED_FILENAME "int_forward_s_mpi"
     153#else
    120154#define GENERATED_FILENAME "int_forward_s"
     155#endif
    121156#endif
    122157#define ARGUMENT(indexi,l,i) argument[indexi][l]
     
    129164void combine_2_index_domains(int res, int arg1, int arg2, locint **ind_dom);
    130165void merge_3_index_domains(int res, int arg1, int arg2, locint **ind_dom);
     166#if defined(_MPI_)
     167void combine_index_domain_received_data(int res, int count, locint **ind_dom, locint *trade);
     168#endif
    131169
    132170#define NUMNNZ 20
     
    135173#if defined(_INDOPRO_) && !defined(_NONLIND_OLD_)
    136174#if defined(_TIGHT_)
     175#if defined(_MPI_)
     176#define GENERATED_FILENAME "indopro_forward_t_mpi"
     177#else
    137178#define GENERATED_FILENAME "indopro_forward_t"
    138179#endif
     180#endif
     181
    139182#if defined(_NTIGHT_)
     183#if defined(_MPI_)
     184#define GENERATED_FILENAME "indopro_forward_s_mpi"
     185#else
    140186#define GENERATED_FILENAME "indopro_forward_s"
     187#endif
    141188#endif
    142189#endif
     
    180227(int arg1, int arg2, locint **ind_dom, locint **nonl_dom);
    181228
     229#if defined(_MPI_)
     230void extend_nonlinearity_domain_combine_received_trade
     231(int arg1, int counts, locint **nonl_dom, locint *trade);
     232#endif
     233
    182234
    183235#if defined(_TIGHT_)
     236#if defined(_MPI_)
     237#define GENERATED_FILENAME "nonl_ind_forward_t_mpi"
     238#else
    184239#define GENERATED_FILENAME "nonl_ind_old_forward_t"
    185240#endif
     241#endif
     242
    186243#if defined(_NTIGHT_)
     244#if defined(_MPI_)
     245#define GENERATED_FILENAME "nonl_ind_forward_s_mpi"
     246#else
    187247#define GENERATED_FILENAME "nonl_ind_old_forward_s"
     248#endif
    188249#endif
    189250#endif
     
    478539/* Zero Order Scalar version of the forward mode.                           */
    479540/****************************************************************************/
     541#if defined(_MPI_)
     542int zos_forward_mpi(
     543    int mpi_id, int mpi_size,
     544#else
    480545#if defined(_KEEP_)
    481546int  zos_forward(
    482547#else
    483548int  zos_forward_nk(
     549#endif
    484550#endif
    485551    short  tnum,              /* tape id */
     
    497563/* First Order Scalar version of the forward mode.                          */
    498564/****************************************************************************/
     565#if defined(_MPI_)
     566int  fos_forward_mpi(
     567    int mpi_id, int mpi_size,
     568#else
    499569#if defined(_KEEP_)
    500570int  fos_forward(
    501571#else
    502572int  fos_forward_nk(
     573#endif
    503574#endif
    504575    short  tnum,        /* tape id */
     
    520591/* First Order Vector version of the forward mode for bit patterns, tight   */
    521592/****************************************************************************/
     593#if defined(_MPI_)
     594int int_forward_tight_mpi(
     595    int mpi_id, int mpi_size,
     596#else
    522597int int_forward_tight(
     598#endif
    523599    short               tnum,     /* tape id                              */
    524600    int                 depcheck, /* consistency chk on # of dependents   */
     
    549625/* First Order Vector version of the forward mode, bit pattern, safe        */
    550626/****************************************************************************/
     627#if defined(_MPI_)
     628int int_forward_safe_mpi(
     629    int mpi_id, int mpi_size,
     630#else
    551631int int_forward_safe(
     632#endif
    552633    short             tnum,     /* tape id                              */
    553634    int               depcheck, /* consistency chk on # of dependents   */
     
    576657/* First Order Vector version of the forward mode for bit patterns, tight   */
    577658/****************************************************************************/
     659#if defined(_MPI_)
     660int indopro_forward_tight_mpi(
     661    int mpi_id, int mpi_size,
     662#else
    578663int indopro_forward_tight(
     664#endif
    579665    short             tnum,        /* tape id                              */
    580666    int               depcheck,    /* consistency chk on # of dependents   */
     
    593679/* First Order Vector version of the forward mode, bit pattern, safe        */
    594680/****************************************************************************/
     681#if defined(_MPI_)
     682int indopro_forward_safe_mpi(
     683    int mpi_id, int mpi_size,
     684#else
    595685int indopro_forward_safe(
     686#endif
    596687    short             tnum,        /* tape id                              */
    597688    int               depcheck,    /* consistency chk on # of dependents   */
     
    639730/* First Order Vector version of the forward mode for bit patterns, tight   */
    640731/****************************************************************************/
     732#if defined(_MPI_)
     733int nonl_ind_forward_tight_mpi(
     734    int mpi_id, int mpi_size,
     735#else
    641736int nonl_ind_old_forward_tight(
     737#endif
    642738    short             tnum,        /* tape id                              */
    643739    int               depcheck,    /* consistency chk on # of dependents   */
     
    651747/* First Order Vector version of the forward mode, bit pattern, safe        */
    652748/****************************************************************************/
     749#if defined(_MPI_)
     750int nonl_ind_forward_safe_mpi(
     751    int mpi_id, int mpi_size,
     752#else
    653753int nonl_ind_old_forward_safe(
     754#endif
    654755    short             tnum,        /* tape id                              */
    655756    int               depcheck,    /* consistency chk on # of dependents   */
     
    684785/* First Order Vector version of the forward mode.                          */
    685786/****************************************************************************/
     787#if defined(_MPI_)
     788int  fov_forward_mpi(
     789    int mpi_id, int mpi_size,
     790#else
    686791int  fov_forward(
     792#endif
    687793    short         tnum,        /* tape id */
    688794    int           depcheck,    /* consistency chk on # of deps */
     
    701807/* Higher Order Scalar version of the forward mode.                         */
    702808/****************************************************************************/
     809#if defined(_MPI_)
     810int  hos_forward_mpi(
     811    int mpi_id, int mpi_size,
     812#else
    703813#if defined(_KEEP_)
    704814int  hos_forward(
    705815#else
    706816int  hos_forward_nk(
     817#endif
    707818#endif
    708819    short  tnum,        /* tape id */
     
    723834/* Higher Order Vector version of the forward mode.                         */
    724835/****************************************************************************/
     836#if defined(_MPI_)
     837int hov_forward_mpi(int mpi_id, int mpi_size,
     838#else
    725839#if defined(_KEEP_)
    726840int  hov_wk_forward(
    727841#else
    728842int  hov_forward(
     843#endif
    729844#endif
    730845    short  tnum,        /* tape id */
     
    766881
    767882    int indexi = 0,  indexd = 0;
     883#if defined(_MPI_)
     884    short this_tnum = mpi_size*tnum + mpi_id;
     885#endif
    768886
    769887    /* loop indices */
     
    9421060    /*                                                           DEBUG MESSAGES */
    9431061    fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n",
    944             GENERATED_FILENAME, tnum, indcheck, depcheck);
     1062            GENERATED_FILENAME,
     1063#if defined(_MPI_)
     1064            this_tnum,
     1065#else
     1066            tnum,
     1067#endif
     1068            indcheck, depcheck);
    9451069#if defined(_KEEP_)
    9461070    fprintf(DIAG_OUT,"                    keep: %d\n", keep);
     
    9621086
    9631087    /* Initialize the Forward Sweep */
    964 
     1088#if defined(_MPI_)
     1089    init_for_sweep(this_tnum);
     1090#else
    9651091    init_for_sweep(tnum);
    966 
     1092#endif
    9671093      if ( (depcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) ||
    9681094            (indcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) {
     
    9701096                "Number of dependent(%u) and/or independent(%u) variables passed"
    9711097                " to forward is\ninconsistent with number "
    972                 "recorded on tape (%d, %d) \n", tnum,
     1098                "recorded on tape (%d, %d) \n",
     1099# if defined(_MPI_)
     1100this_tnum,
     1101#else
     1102tnum,
     1103#endif
    9731104                depcheck, indcheck,
    9741105                ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS],
     
    9761107        exit (-1);
    9771108    }
     1109#if defined(_MPI_)
     1110     double *trade, *rec_buf, *mpi_tmp;
     1111     MPI_Status status_MPI;
     1112     int mpi_i,mpi_ii, s_r_c=1;
     1113     locint *loc_send, *loc_recv;
     1114     int myid,root, count, count2, target,tag;
     1115#if defined(_NONLIND_OLD_)
     1116     locint *tmp_element;
     1117#endif
     1118#if defined(_INDO_)
     1119     int *trade_loc, *rec_buf_loc;
     1120     int *counts, *tmp_counts;
     1121     int anz;
     1122#endif
     1123#if  defined(_INT_FOR_)
     1124     locint *trade_loc, *rec_buf_loc;
     1125#endif
     1126#endif
    9781127
    9791128    /****************************************************************************/
     
    10381187    for(i=0;i<max_ind_dom;i++)
    10391188    {
    1040         ind_dom[i] = (locint *)  malloc(sizeof(locint) * (NUMNNZ+2));
     1189        ind_dom[i] = (locint*)  malloc(sizeof(locint)*(NUMNNZ+2));
    10411190        ind_dom[i][0] = 0;
    10421191        ind_dom[i][1] = NUMNNZ;
     
    10611210#endif
    10621211#if defined(_NONLIND_OLD_)
    1063 
     1212#if defined(_MPI_)
     1213    int s_r_indep =indcheck;
     1214    if (mpi_initialized) {
     1215       MPI_Comm_rank(MPI_COMM_WORLD, &myid);
     1216       MPI_Bcast(&s_r_indep,1,MPI_INT,0,MPI_COMM_WORLD);
     1217
     1218       nonl_dom = (locint**) malloc(sizeof(locint*) * s_r_indep);
     1219       for(i=0;i<s_r_indep;i++){
     1220           nonl_dom[i] = (locint*) malloc(sizeof(locint)*(NUMNNZ+2));
     1221           nonl_dom[i][0] = 0;
     1222           nonl_dom[i][1] = NUMNNZ;
     1223       }
     1224    }
     1225    else {
     1226       nonl_dom = (locint**) malloc(sizeof(locint*) * s_r_indep);
     1227       for(i=0;i<indcheck;i++){
     1228          nonl_dom[i] = (locint*) malloc(sizeof(locint)*(NUMNNZ+2));
     1229          nonl_dom[i][0]=0;
     1230          nonl_dom[i][1]=NUMNNZ;
     1231       }
     1232    }
     1233#else
    10641234    nonl_dom = (locint**) malloc(sizeof(locint*) * indcheck);
    10651235    for(i=0;i<indcheck;i++){
     
    10681238          nonl_dom[i][1]=NUMNNZ;
    10691239       }
     1240#endif
    10701241#endif
    10711242
     
    48164987
    48174988                /*--------------------------------------------------------------------------*/
     4989#if defined(_MPI_)
     4990      case send_data:   // MPI-Send-Befehl
     4991              count = get_locint_f(); // first Buffer
     4992           loc_send = (locint*) malloc(count*sizeof(locint));
     4993           for(mpi_i=0; mpi_i < count; mpi_i++)
     4994               loc_send[mpi_i] = get_locint_f();
     4995           res = get_locint_f();
     4996              target = get_locint_f(); // dest
     4997              tag = get_locint_f(); // tag
     4998
     4999#if defined(_ZOS_)
     5000          trade = myalloc1( count );
     5001          for (mpi_i=0; mpi_i< count; mpi_i++)
     5002                    trade[mpi_i] = dp_T0[ loc_send[mpi_i]];
     5003          MPI_Send( trade , count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5004          free(trade);
     5005#endif /* _ZOS_ */
     5006#if defined(_FOS_)
     5007           trade = myalloc1(count*2);
     5008           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5009                trade[2*mpi_i ]= dp_T0[loc_send[mpi_i]];
     5010                trade[2*mpi_i+1]= dp_T[loc_send[mpi_i]];
     5011           }
     5012           MPI_Send( trade , count*2, MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5013           free(trade);
     5014#endif /* END FOS */
     5015#if defined(_FOV_)
     5016           trade = myalloc1((p+1)*count);
     5017           mpi_ii=0;
     5018           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5019                trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5020                mpi_ii++;
     5021                for(i=0;i<p;i++,mpi_ii++)
     5022                     trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5023           }
     5024           MPI_Send( trade , count*(p+1), MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5025           free(trade);
     5026#endif /* END FOV */
     5027#if defined(_HOS_)
     5028           trade = myalloc1(count*(k+1));
     5029           mpi_ii=0;
     5030           for (mpi_i=0; mpi_i< count; mpi_i++){
     5031               trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5032               mpi_ii++;
     5033               for (i=0; i<k; i++,mpi_ii++)
     5034                   trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5035           }
     5036           MPI_Send( trade , count*(k+1), MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5037           free(trade);
     5038#endif /* END HOS */
     5039#if defined(_HOV_)
     5040           trade = myalloc1(count*(p*k+1));
     5041           mpi_ii=0;
     5042           for (mpi_i=0; mpi_i< count; mpi_i++){
     5043               trade[mpi_ii] = dp_T0[loc_send[mpi_ii]];
     5044               mpi_ii++;
     5045               for (i=0; i<p*k; i++,mpi_ii)
     5046                   trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5047           }
     5048           MPI_Send( trade , count*(p*k+1), MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5049           free(trade);
     5050#endif /* END HOV */
     5051
     5052#if defined(_TIGHT_) /* with dp_T0 */
     5053#if defined(_INT_FOR_)
     5054           trade = myalloc1(count*(p+1));
     5055           mpi_ii=0;
     5056           for(mpi_i=0; mpi_i< count; mpi_i++) {
     5057              trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5058              mpi_ii++;
     5059              for(l=0;l<p;l++,mpi_ii++)
     5060                 trade[mpi_ii]= (double) up_T[loc_send[mpi_i]][l];
     5061           }
     5062           MPI_Send( trade_loc , count*(p+1), MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5063           free(trade_loc);
     5064#endif /* END INT_FOR */
     5065#if defined(_INDO_)
     5066#if defined(_INDOPRO_)
     5067           trade = myalloc1(count*2);
     5068           anz=0;
     5069           for (mpi_i=0; mpi_i< count; mpi_i++){
     5070               trade[2*mpi_i ] = dp_T0[loc_send[mpi_i]];
     5071               trade[2*mpi_i+1]= (double) ind_dom[loc_send[mpi_i]][0];
     5072               anz += ind_dom[loc_send[mpi_i]][0];
     5073           }
     5074           MPI_Send( trade , count*2 , MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5075
     5076           // sending index domains
     5077           if (anz > 0 ){
     5078              trade_loc = (int*) malloc( anz*sizeof(int) );
     5079              l =0;
     5080              for (mpi_i=0; mpi_i< count; mpi_i++){
     5081                  for(i=2;i < ind_dom[loc_send[mpi_i]][0]+2 ;i++ ){
     5082                       trade_loc[l] = (int) ind_dom[loc_send[mpi_i]][i];
     5083                       l++;
     5084                  }
     5085              }
     5086              MPI_Send( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD);
     5087              free(trade_loc);
     5088           }
     5089           free(trade);
     5090#endif
     5091#if defined(_NONLIND_OLD_)
     5092           trade = myalloc1(count + s_r_indep);
     5093           anz=0;
     5094           for (mpi_i=0; mpi_i< count; mpi_i++)
     5095               trade[mpi_i ] = dp_T0[loc_send[mpi_i]];
     5096
     5097           for (mpi_i=0; mpi_i< s_r_indep; mpi_i++){
     5098               trade[mpi_i+count]= (double) nonl_dom[mpi_i][0];
     5099               anz += nonl_dom[mpi_i][0];
     5100           }
     5101           MPI_Send( trade , count+ s_r_indep , MPI_DOUBLE , target, tag , MPI_COMM_WORLD);
     5102           // sending index domains
     5103           if (anz >0 ){
     5104              trade_loc = (int*) malloc(anz*sizeof(int));
     5105              l =0;
     5106              for (mpi_i=0; mpi_i < s_r_indep ; mpi_i++ )
     5107                  for (i=2; i < nonl_dom[mpi_i][0]+2 ; i++ ){
     5108                      trade_loc[l] = nonl_dom[mpi_i][i];
     5109                      l++;
     5110                  }
     5111              MPI_Send( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD);
     5112              free( trade_loc);
     5113           }
     5114           free( trade);
     5115#endif    // end _NONLIND_
     5116#endif    // end _INDO_
     5117#endif /* END OF TIGHT */
     5118#if defined(_NTIGHT_) /* without dp_T0 */
     5119#if defined(_INT_FOR_)
     5120           trade_loc = (locint*) malloc(count*p*sizeof(locint));
     5121           mpi_ii=0;
     5122           for(mpi_i=0; mpi_i< count; mpi_i++) {
     5123              for(l=0;l<p;l++,mpi_ii++)
     5124                 trade[mpi_ii]= up_T[loc_send[mpi_i]][l];
     5125           }
     5126           MPI_Send( trade_loc , count*p, MPI_UNSIGNED_LONG , target, tag , MPI_COMM_WORLD);
     5127           free(trade_loc);
     5128#endif /* END INT_FOR */
     5129#if defined(_INDO_)
     5130#if defined(_INDOPRO_)
     5131           counts = (int*) malloc(count*sizeof(int));
     5132           anz=0;
     5133           for (mpi_i=0; mpi_i< count; mpi_i++){
     5134               counts[mpi_i]= ind_dom[loc_send[mpi_i]][0];
     5135               anz += ind_dom[loc_send[mpi_i]][0];
     5136           }
     5137           MPI_Send( counts , count , MPI_INT , target, tag , MPI_COMM_WORLD);
     5138
     5139           // sending index domains
     5140           if (anz > 0 ){
     5141              trade_loc = (int*) malloc( anz*sizeof(int) );
     5142              l =0;
     5143              for (mpi_i=0; mpi_i< count; mpi_i++){
     5144                  for(i=2;i < ind_dom[loc_send[mpi_i]][0]+2 ;i++ ){
     5145                       trade_loc[l] = ind_dom[loc_send[mpi_i]][i];
     5146                       l++;
     5147                  }
     5148              }
     5149              MPI_Send( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD);
     5150              free(trade_loc);
     5151           }
     5152           free(trade);
     5153#endif
     5154#if defined(_NONLIND_OLD_)
     5155           counts = (int*) malloc(s_r_indep*sizeof(int));
     5156           anz=0;
     5157           for (mpi_i=0; mpi_i< s_r_indep; mpi_i++){
     5158               counts[mpi_i]= nonl_dom[mpi_i][0];
     5159               anz += nonl_dom[mpi_i][0];
     5160           }
     5161           MPI_Send( counts , s_r_indep , MPI_INT , target, tag , MPI_COMM_WORLD);
     5162           // sending index domains
     5163           if (anz >0 ){
     5164              trade_loc = (int*) malloc(anz*sizeof(int));
     5165              l =0;
     5166              for (mpi_i=0; mpi_i < s_r_indep ; mpi_i++ )
     5167                  for (i=2; i < counts[mpi_i]+2 ; i++ ){
     5168                      trade_loc[l] = nonl_dom[mpi_i][i];
     5169                      l++;
     5170                  }
     5171              MPI_Send( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD);
     5172              free( trade_loc);
     5173           }
     5174           free(counts);
     5175#endif    // end _NONLIND_
     5176#endif    // end _INDO_
     5177#endif /* END OF TIGHT */
     5178           free(loc_send);
     5179              break;
     5180                /*--------------------------------------------------------------------------*/
     5181      case receive_data: // MPI-Receive
     5182           count =get_locint_f(); // count
     5183           loc_recv = (locint*) malloc(count*sizeof(locint));
     5184           for(mpi_i=0; mpi_i<count;mpi_i++)
     5185               loc_recv[mpi_i] = get_locint_f();
     5186           res =get_locint_f(); // count
     5187           target = get_locint_f(); // source
     5188           tag = get_locint_f(); // tag
     5189#if defined(_ZOS_)
     5190           // receiving values for dp_T0
     5191           trade = myalloc1( count );
     5192           MPI_Recv( trade , count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5193           for(mpi_i =0; mpi_i < count; mpi_i++){
     5194              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5195              dp_T0[loc_recv[mpi_i]] = trade[mpi_i];
     5196           }
     5197           free(trade);
     5198#endif /* END _ZOS_ */
     5199#if defined(_FOS_)
     5200           trade = myalloc1(count*2);
     5201           MPI_Recv( trade , count*2, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5202           /*  Receiving double Values by MPI and try to save Taylorbuffer before overwriting */
     5203           for(mpi_i=0; mpi_i< count; mpi_i++){
     5204              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5205              dp_T0[loc_recv[mpi_i]] = trade[2*mpi_i];
     5206              dp_T[loc_recv[mpi_i]] = trade[2*mpi_i+1];
     5207              }
     5208           free(trade);
     5209#endif
     5210#if defined(_FOV_)
     5211           trade = myalloc1(count*(p+1));
     5212           MPI_Recv( trade , (p+1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5213           /*  Receiving double Values by MPI and try to save Taylorbuffer before overwriting */
     5214           mpi_ii=0;
     5215           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5216              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5217              dp_T0[loc_recv[mpi_i]] = trade[mpi_ii];
     5218              mpi_ii++;
     5219              for(i=0;i<p;i++,mpi_ii++)
     5220                 dpp_T[loc_recv[mpi_i]][i] = trade[mpi_ii];
     5221           }
     5222           free(trade);
     5223#endif
     5224#if defined(_HOS_)
     5225           trade =myalloc1(count*(k+1));
     5226           MPI_Recv( trade , (k+1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5227           /*  Receiving double Values by MPI and try to save Taylorbuffer before overwriting */
     5228           mpi_ii=0;
     5229           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5230              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5231              dp_T0[loc_recv[mpi_i]] = trade[mpi_i];
     5232               for(i=0; i < k ; i++ )
     5233                dpp_T[loc_recv[mpi_i]][i] = trade[k*mpi_i+i];
     5234           }
     5235           myfree1(trade);
     5236#endif
     5237#if defined(_HOV_)
     5238           trade =myalloc1(count*(p*k+1));
     5239           MPI_Recv( trade , (p*k+1)*count, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5240           /*  Receiving double Values by MPI and try to save Taylorbuffer before overwriting */
     5241           mpi_ii=0;
     5242           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5243              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5244              dp_T0[loc_recv[mpi_i]] = trade[mpi_ii];
     5245              mpi_ii++;
     5246              for(i=0; i < p*k ; i++,mpi_ii++)
     5247                 dpp_T[loc_recv[mpi_i]][i] = trade[mpi_ii];
     5248           }
     5249           free(trade);
     5250#endif
     5251#if defined(_TIGHT_)
     5252#if defined(_INT_FOR_)
     5253           trade = myalloc1(count*(p+1));
     5254           MPI_Recv( trade , count*(p+1), MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5255           mpi_ii=0;
     5256           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5257              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5258              dp_T0[loc_recv[mpi_i]] = trade[mpi_ii];
     5259              mpi_ii++;
     5260              for(l=0; l < p;l++,mpi_ii++)
     5261                up_T[loc_recv[mpi_i]][l]= (unsigned long int) trade[mpi_ii];
     5262           }
     5263           free(trade_loc);
     5264#endif /* END INT_FOR */
     5265#if defined(_INDO_)
     5266#if defined(_INDOPRO_)
     5267           // getting information about count of entries
     5268           counts = ( int*) malloc( count*sizeof(int) );
     5269           trade = myalloc1(count*2);
     5270           MPI_Recv( trade , count*2, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5271
     5272           anz =0;
     5273           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5274              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5275              dp_T0[loc_recv[mpi_i]] = trade[2*mpi_i];
     5276              counts[mpi_i] = (int) trade[2*mpi_i+1];
     5277              anz += counts[mpi_i];
     5278           }
     5279           free(trade);
     5280           if ( anz > 0){
     5281              trade_loc = (int*) malloc( anz*sizeof(int) );
     5282              MPI_Recv( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5283
     5284              // combine each index domain ...
     5285              l = 0;
     5286              for(mpi_i=0; mpi_i < count; mpi_i++){
     5287                   combine_index_domain_received_data(loc_recv[mpi_i], counts[mpi_i], ind_dom, &trade_loc[l] );
     5288                   l += counts[mpi_i];
     5289              }
     5290              free(trade_loc);
     5291           }
     5292           free( counts);
     5293#endif
     5294#if defined(_NONLIND_OLD_)
     5295           counts = ( int*) malloc( s_r_indep*sizeof(int) );
     5296           trade = myalloc1(count+s_r_indep);
     5297           MPI_Recv( trade , count+s_r_indep, MPI_DOUBLE , target, tag , MPI_COMM_WORLD, &status_MPI);
     5298
     5299           anz =0;
     5300           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5301              IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5302              dp_T0[loc_recv[mpi_i]] = trade[mpi_i];
     5303           }
     5304           for(mpi_i=0; mpi_i < s_r_indep; mpi_i++){
     5305              counts[mpi_i] = (int) trade[mpi_i+count];
     5306              anz += counts[mpi_i];
     5307           }
     5308           free(trade);
     5309           if (anz > 0) {
     5310              trade_loc = (int*) calloc( anz,sizeof(int) );
     5311              MPI_Recv( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5312
     5313              // combine each index domain ...
     5314              l = 0;
     5315              for (mpi_i=0; mpi_i < s_r_indep; mpi_i++){
     5316                  // nonl_dom settings
     5317                  extend_nonlinearity_domain_combine_received_trade(mpi_i, counts[mpi_i], nonl_dom, &trade_loc[l] );
     5318                  l += counts[mpi_i];
     5319              }
     5320
     5321              free( trade_loc);
     5322           }
     5323           free( counts);
     5324#endif    // end _NONLIND_
     5325#endif    // end _INDO_
     5326#endif /* END TIGHT */
     5327#if defined(_NTIGHT_)
     5328#if defined(_INT_FOR_)
     5329           trade_loc = (locint*) malloc(count*p*sizeof(locint));
     5330           MPI_Recv( trade_loc , count*p, MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5331           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5332               FOR_0_LE_l_LT_pk
     5333                up_T[loc_recv[mpi_i]][l]=trade_loc[mpi_i*p+l];
     5334           }
     5335           free(trade_loc);
     5336#endif /* END INT_FOR */
     5337#if defined(_INDO_)
     5338#if defined(_INDOPRO_)
     5339           // getting information about count of entries
     5340           counts = ( int*) malloc( count*sizeof(int) );
     5341           MPI_Recv( counts , count, MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5342
     5343           anz =0;
     5344           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5345               anz += counts[mpi_i];
     5346           }
     5347           if ( anz > 0){
     5348              trade_loc = (int*) malloc( anz*sizeof(int) );
     5349              MPI_Recv( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5350
     5351              // combine each index domain ...
     5352              l = 0;
     5353              for(mpi_i=0; mpi_i < count; mpi_i++){
     5354                   combine_index_domain_received_data(loc_recv[mpi_i], counts[mpi_i], ind_dom, &trade_loc[l] );
     5355                   l += counts[mpi_i];
     5356              }
     5357              free(trade_loc);
     5358           }
     5359           free( counts);
     5360#endif
     5361#if defined(_NONLIND_OLD_)
     5362           counts = ( int*) malloc( s_r_indep*sizeof(int) );
     5363           MPI_Recv( counts , s_r_indep, MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5364           anz =0;
     5365           for (mpi_i=0; mpi_i< s_r_indep; mpi_i++){
     5366               anz +=  counts[mpi_i];
     5367           }
     5368           if (anz > 0) {
     5369              trade_loc = (int*) calloc( anz,sizeof(int) );
     5370              MPI_Recv( trade_loc , anz , MPI_INT , target, tag , MPI_COMM_WORLD, &status_MPI);
     5371
     5372              // combine each index domain ...
     5373              l = 0;
     5374              for (mpi_i=0; mpi_i < s_r_indep; mpi_i++){
     5375                  // nonl_dom settings
     5376                  extend_nonlinearity_domain_combine_received_trade(mpi_i, counts[mpi_i], nonl_dom, &trade_loc[l] );
     5377                  l += counts[mpi_i];
     5378              }
     5379
     5380              free( trade_loc);
     5381           }
     5382           free( counts);
     5383#endif    // end _NONLIND_
     5384#endif    // end _INDO_
     5385#endif /* END OF NTIGHT */
     5386           free(loc_recv);
     5387              break;
     5388      case barrier_op:
     5389              MPI_Barrier(MPI_COMM_WORLD);
     5390              break;
     5391      case broadcast:
     5392           count = get_locint_f(); // count
     5393           loc_send = (locint*) malloc(count*sizeof(locint));
     5394           for(mpi_i=0;mpi_i<count;mpi_i++)
     5395              loc_send[mpi_i] = get_locint_f(); // Send Location
     5396           count2 = get_locint_f(); // count
     5397           root = get_locint_f(); // root
     5398           myid = get_locint_f(); // process id
     5399
     5400#if defined(_ZOS_)
     5401           // receiving values for dp_T0
     5402           trade = myalloc1( count );
     5403           if (myid == root){
     5404              for(mpi_i =0; mpi_i < count ; mpi_i++)
     5405                 trade[mpi_i] = dp_T0[loc_send[mpi_i]];
     5406            }
     5407           MPI_Bcast(trade,count, MPI_DOUBLE, root, MPI_COMM_WORLD);
     5408           for( mpi_i =0; mpi_i < count; mpi_i++){
     5409               IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5410               dp_T0[loc_send[mpi_i]] = trade[mpi_i];
     5411           }
     5412           free(trade);
     5413#endif /* END ZOS  */
     5414#if defined(_FOS_)
     5415           trade = myalloc1( count*2 );
     5416           if (myid ==root){
     5417               for(mpi_i =0; mpi_i < count; mpi_i++){
     5418                 trade[2*mpi_i] = dp_T0[loc_send[mpi_i]];
     5419                 trade[2*mpi_i+1] = dp_T[loc_send[mpi_i]];
     5420              }
     5421           }
     5422           MPI_Bcast(trade,count*2, MPI_DOUBLE, root, MPI_COMM_WORLD);
     5423
     5424           for( mpi_i =0; mpi_i < count; mpi_i++){
     5425               IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5426               dp_T0[loc_send[mpi_i]] = trade[2*mpi_i];
     5427               dp_T[loc_send[mpi_i]] = trade[2*mpi_i+1];
     5428           }
     5429           free(trade);
     5430#endif
     5431#if defined(_FOV_)
     5432           trade = myalloc1( count*(p+1));
     5433           if (myid ==root){
     5434              mpi_ii=0;
     5435              for(mpi_i =0; mpi_i < count; mpi_i++){
     5436                 trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5437                 mpi_ii++;
     5438                 for(i=0; i<p; i++,mpi_ii++)
     5439                    trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5440              }
     5441           }
     5442           MPI_Bcast(trade,count*(p+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     5443           mpi_ii=0;
     5444           for(mpi_i =0; mpi_i < count; mpi_i++){
     5445              IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5446              dp_T0[loc_send[mpi_i]] = trade[ mpi_ii];
     5447              mpi_ii++;
     5448              for(i=0; i<p; i++,mpi_ii++)
     5449                 dpp_T[loc_send[mpi_i]][i] = trade[mpi_ii];
     5450           }
     5451           free(trade);
     5452#endif
     5453#if defined(_HOS_)
     5454           trade = myalloc1(count * (k+1));
     5455           if (myid ==root){
     5456              mpi_ii=0;
     5457              for(mpi_i =0; mpi_i < count; mpi_i++){
     5458                 trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5459                 mpi_ii++;
     5460                 for(i=0; i<k; i++,mpi_ii++)
     5461                    trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5462              }
     5463           }
     5464           MPI_Bcast(trade,count*(k+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     5465           mpi_ii=0;
     5466           for(mpi_i =0; mpi_i < count; mpi_i++){
     5467              IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5468              dp_T0[loc_send[mpi_i]] = trade[ mpi_ii];
     5469              mpi_ii++;
     5470              for(i=0; i<k; i++,mpi_ii++)
     5471                 dpp_T[loc_send[mpi_i]][i] = trade[mpi_ii];
     5472           }
     5473           free(trade);
     5474#endif
     5475#if defined(_HOV_)
     5476           trade = myalloc1(count * (p*k+1));
     5477           if (myid ==root){
     5478              mpi_ii=0;
     5479              for(mpi_i =0; mpi_i < count; mpi_i++){
     5480                 trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5481                 mpi_ii++;
     5482                 for(i=0; i<p*k; i++,mpi_ii++)
     5483                    trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5484              }
     5485           }
     5486           MPI_Bcast(trade,count*(p*k+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     5487           mpi_ii=0;
     5488           for(mpi_i =0; mpi_i < count; mpi_i++){
     5489              IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5490              dp_T0[loc_send[mpi_i]] = trade[ mpi_ii];
     5491              mpi_ii++;
     5492              for(i=0; i<p*k; i++,mpi_ii++)
     5493                 dpp_T[loc_send[mpi_i]][i] = trade[mpi_ii];
     5494           }
     5495           free(trade);
     5496#endif
     5497#if defined(_TIGHT_)
     5498#if defined(_INT_FOR_)
     5499           trade = myalloc1(count*(p+1));
     5500           if (myid == root){
     5501              mpi_ii=0;
     5502              for(mpi_i=0; mpi_i< count; mpi_i++) {
     5503                 trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5504                 mpi_ii++;
     5505                 for(l=0; l< p; l++,mpi_ii++)
     5506                    trade[mpi_ii]= (double) up_T[loc_send[mpi_i]][l];
     5507              }
     5508           }
     5509           MPI_Bcast(trade,count*(p+1), MPI_DOUBLE, root, MPI_COMM_WORLD);
     5510           mpi_ii=0;
     5511           for( mpi_i =0; mpi_i < count; mpi_i++){
     5512              IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5513              dp_T0[loc_send[mpi_i]] = trade[mpi_ii];
     5514              mpi_ii++;
     5515              for(l=0; l<p; l++,mpi_ii++)
     5516                 up_T[loc_send[mpi_i]][l] = (unsigned long int) trade[mpi_ii];
     5517           }
     5518           free(trade);
     5519#endif /* END INT_FOR */
     5520#if defined(_INDO_)
     5521#if defined(_INDOPRO_)
     5522           trade = myalloc1( count*2);
     5523           if (myid ==root){
     5524              for(mpi_i =0; mpi_i < count; mpi_i++){
     5525                 trade[2*mpi_i] = dp_T0[loc_send[mpi_i]];
     5526                 trade[2*mpi_i+1] = (double) ind_dom[loc_send[mpi_i]][0];
     5527              }
     5528           }
     5529           MPI_Bcast(trade,count*2, MPI_DOUBLE, root, MPI_COMM_WORLD);
     5530
     5531           counts = (int*) malloc(count*sizeof(int));
     5532           anz =0;
     5533           for(mpi_i=0; mpi_i< count; mpi_i++) {
     5534              IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5535              dp_T0[loc_send[mpi_i]] = trade[2*mpi_i];
     5536              counts[mpi_i] = (int) trade[2*mpi_i+1];
     5537              anz += counts[mpi_i];
     5538           }
     5539           free(trade);
     5540           if ( anz > 0){
     5541              trade_loc = (int*) malloc( anz*sizeof(int) );
     5542              if (myid ==root ){
     5543                 l=0;
     5544                 for(mpi_i =0; mpi_i < anz; mpi_i++)
     5545                    for(i=2; i < ind_dom[loc_send[mpi_i]][0]+2; i++){
     5546                       trade_loc[l] = ind_dom[loc_send[mpi_i]][i];
     5547                       l++;
     5548                    }
     5549              }
     5550              MPI_Bcast(trade_loc,anz, MPI_INT, root, MPI_COMM_WORLD);
     5551              if (myid != root){
     5552                 l = 0;
     5553                 for(mpi_i=0; mpi_i < count; mpi_i++){
     5554                    combine_index_domain_received_data(loc_send[mpi_i], counts[mpi_i], ind_dom, &trade_loc[l] );
     5555                    l += counts[mpi_i];
     5556                 }
     5557              }
     5558              free(trade_loc);
     5559           }
     5560           free(counts);
     5561#endif
     5562#if defined(_NONLIND_OLD_)
     5563           trade = myalloc1( count+s_r_indep);
     5564           if (myid ==root){
     5565              for(mpi_i =0; mpi_i < count; mpi_i++)
     5566                 trade[mpi_i] = dp_T0[loc_send[mpi_i]];
     5567              for(mpi_i =0; mpi_i < s_r_indep; mpi_i++ )
     5568                 trade[mpi_i+count] = (double) nonl_dom[mpi_i][0];
     5569           }
     5570           MPI_Bcast(trade,count+s_r_indep, MPI_DOUBLE, root, MPI_COMM_WORLD);
     5571
     5572           counts = (int*) malloc(count*sizeof(int));
     5573           anz =0;
     5574           for(mpi_i=0; mpi_i< count; mpi_i++) {
     5575              IF_KEEP_WRITE_TAYLOR(loc_send[mpi_i],keep,k,p)
     5576              dp_T0[loc_send[mpi_i]] = trade[mpi_i];
     5577           }
     5578           for(mpi_i=0; mpi_i< s_r_indep; mpi_i++) {
     5579              counts[mpi_i] = (int) trade[mpi_i+count];
     5580              anz += counts[mpi_i];
     5581           }
     5582           free(trade);
     5583           if (anz > 0) {
     5584              trade_loc = (int*) calloc( anz,sizeof(int) );
     5585              if (myid == root){
     5586                 l=0;
     5587                 for(mpi_i=0; mpi_i < s_r_indep ; mpi_i++)
     5588                    for(i=2; i < nonl_dom[mpi_i][0]+2 ; i++){
     5589                        trade_loc[l] = nonl_dom[mpi_i][i];
     5590                        l++;
     5591                    }
     5592              }
     5593              MPI_Bcast(trade_loc,anz, MPI_INT, root, MPI_COMM_WORLD);
     5594              if( myid != root){
     5595                 // combine each index domain ...
     5596                 l = 0;
     5597                 for (mpi_i=0; mpi_i < s_r_indep; mpi_i++){
     5598                     // nonl_dom settings
     5599                     extend_nonlinearity_domain_combine_received_trade(mpi_i, counts[mpi_i], nonl_dom, &trade_loc[l]);
     5600                     l += counts[mpi_i];
     5601                 }
     5602              }
     5603              free(trade_loc);
     5604           }
     5605           free(counts);
     5606#endif    // end _NONLIND_
     5607#endif    // end _INDO_
     5608#endif /* TIGHT */
     5609#if defined(_NTIGHT_)
     5610#if defined(_INT_FOR_)
     5611           trade_loc = (locint*) malloc(count*p*sizeof(locint));
     5612           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5613               FOR_0_LE_l_LT_pk
     5614                trade_loc[mpi_i*p+l]=up_T[loc_send[mpi_i]][l];
     5615           }
     5616           MPI_Bcast(trade_loc,count*p, MPI_INT, root, MPI_COMM_WORLD);
     5617           for( mpi_i =0; mpi_i < count; mpi_i++){
     5618              FOR_0_LE_l_LT_pk
     5619               up_T[loc_send[mpi_i]][l] = trade_loc[mpi_i*p+l];
     5620           }
     5621           free(trade_loc);
     5622#endif /* END INT_FOR */
     5623#if defined(_INDO_)
     5624#if defined(_INDOPRO_)
     5625           // getting information about count of entries
     5626           counts = ( int*) malloc( count*sizeof(int) );
     5627           if (myid ==root){
     5628              for(mpi_i =0; mpi_i < count; mpi_i++)
     5629                 counts[mpi_i] = ind_dom[loc_send[mpi_i]][0];
     5630           }
     5631           MPI_Bcast(counts,count, MPI_INT, root, MPI_COMM_WORLD);
     5632
     5633           anz =0;
     5634           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5635               anz += counts[mpi_i];
     5636           }
     5637           if ( anz > 0){
     5638              trade_loc = (int*) malloc( anz*sizeof(int) );
     5639              if (myid ==root ){
     5640                 l=0;
     5641                 for(mpi_i =0; mpi_i < anz; mpi_i++)
     5642                    for(i=2; i < ind_dom[loc_send[mpi_i]][0]+2; i++){
     5643                       trade_loc[l] = ind_dom[loc_send[mpi_i]][i];
     5644                       l++;
     5645                    }
     5646              }
     5647              MPI_Bcast(trade_loc,anz, MPI_INT, root, MPI_COMM_WORLD);
     5648              if(myid != root){
     5649                 // combine each index domain ...
     5650                 l = 0;
     5651                 for(mpi_i=0; mpi_i < count; mpi_i++){
     5652                    combine_index_domain_received_data(loc_send[mpi_i], counts[mpi_i], ind_dom, &trade_loc[l] );
     5653                    l += counts[mpi_i];
     5654                 }
     5655              }
     5656              free(trade_loc);
     5657           }
     5658           free(counts);
     5659#endif
     5660#if defined(_NONLIND_OLD_)
     5661           counts = ( int*) malloc( s_r_indep*sizeof(int) );
     5662           if (myid ==root){
     5663              for(mpi_i =0; mpi_i < s_r_indep; mpi_i++)
     5664                 counts[mpi_i] = nonl_dom[mpi_i][0];
     5665           }
     5666           MPI_Bcast(counts,s_r_indep, MPI_INT, root, MPI_COMM_WORLD);
     5667
     5668           anz =0;
     5669           for (mpi_i=0; mpi_i< s_r_indep; mpi_i++){
     5670               anz +=  (int) counts[mpi_i];
     5671           }
     5672           if (anz > 0) {
     5673              trade_loc = (int*) calloc( anz,sizeof(int) );
     5674              if (myid == root){
     5675                 l=0;
     5676                 for(mpi_i=0; mpi_i < s_r_indep ; mpi_i++)
     5677                    for(i=2; i < nonl_dom[mpi_i][0]+2 ; i++){
     5678                        trade_loc[l] = nonl_dom[mpi_i][i];
     5679                        l++;
     5680                    }
     5681              }
     5682              MPI_Bcast(trade_loc,anz, MPI_INT, root, MPI_COMM_WORLD);
     5683              if( myid != root){
     5684                 // combine each index domain ...
     5685                 l = 0;
     5686                 for (mpi_i=0; mpi_i < s_r_indep; mpi_i++){
     5687                     // nonl_dom settings
     5688                     extend_nonlinearity_domain_combine_received_trade(mpi_i, counts[mpi_i], nonl_dom, &trade_loc[l]);
     5689                     l += counts[mpi_i];
     5690                 }
     5691              }
     5692              free(trade_loc);
     5693           }
     5694           free(counts);
     5695#endif    // end _NONLIND_
     5696#endif    // end _INDO_
     5697#endif
     5698           free(loc_send);
     5699           break;
     5700      case gather:
     5701           count = get_locint_f(); // count
     5702           loc_send = (locint*) malloc(count*sizeof(locint));
     5703           for(mpi_i=0; mpi_i < count ; mpi_i++)
     5704               loc_send[mpi_i] = get_locint_f(); // Send Location
     5705           count = get_locint_f(); // count
     5706           root = get_locint_f(); // root
     5707           myid = get_locint_f(); // process id
     5708           count2 = get_locint_f(); // count*process_count
     5709           if(myid==root){
     5710             loc_recv = (locint*) malloc(count2*sizeof(locint));
     5711             for(mpi_i=0; mpi_i < count2 ; mpi_i++)
     5712                loc_recv[mpi_i] = get_locint_f(); // Receive Location
     5713           }
     5714           arg = get_locint_f(); // count*process_count
     5715           arg = get_locint_f(); // root
     5716           arg = get_locint_f(); // myid
     5717
     5718#if defined(_ZOS_)
     5719           // receiving values for dp_T0
     5720           trade =  myalloc1( count );
     5721           if (myid == root)
     5722              rec_buf = myalloc1(count2);
     5723           else
     5724              rec_buf =NULL;
     5725           for(mpi_i =0; mpi_i < count; mpi_i++)
     5726              trade[mpi_i] = dp_T0[loc_send[mpi_i]];
     5727
     5728           MPI_Gather(trade,count, MPI_DOUBLE,rec_buf, count,MPI_DOUBLE, root, MPI_COMM_WORLD);
     5729           if (myid == root){
     5730              for( mpi_i =0; mpi_i < count2; mpi_i++){
     5731                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5732                 dp_T0[loc_recv[mpi_i]] = rec_buf[mpi_i];
     5733              }
     5734              free(rec_buf);
     5735           }
     5736           free(trade);
     5737#endif /* END ZOS */
     5738#if defined(_FOS_)
     5739           trade = myalloc1( count*2 );
     5740           if (myid ==root)
     5741               rec_buf = myalloc1(count2*2);
     5742           else
     5743               rec_buf = NULL;
     5744           for(mpi_i =0; mpi_i < count; mpi_i++) {
     5745              trade[2*mpi_i] = dp_T0[loc_send[mpi_i]];
     5746              trade[2*mpi_i+1] = dp_T[loc_send[mpi_i]];
     5747           }
     5748           MPI_Gather(trade,count*2, MPI_DOUBLE,rec_buf, count*2 ,MPI_DOUBLE, root, MPI_COMM_WORLD);
     5749           if ( myid == root){
     5750              for( mpi_i =0; mpi_i < count2; mpi_i++){
     5751                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5752                 dp_T0[loc_recv[mpi_i]] = rec_buf[2*mpi_i];
     5753                 dp_T[loc_recv[mpi_i]] = rec_buf[2*mpi_i+1];
     5754               }
     5755               free(rec_buf);
     5756           }
     5757           free(trade);
     5758#endif
     5759#if defined(_FOV_)
     5760           trade = myalloc1( count*(p+1));
     5761           if (myid == root)
     5762              rec_buf = myalloc1(count2*(p+1));
     5763           else
     5764              rec_buf=NULL;
     5765           mpi_ii=0;
     5766           for(mpi_i =0; mpi_i < count; mpi_i++){
     5767              trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5768              mpi_ii++;
     5769              for(i=0; i<p; i++,mpi_ii++)
     5770                 trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5771           }
     5772           MPI_Gather(trade,count*(p+1), MPI_DOUBLE,rec_buf, count*(p+1),MPI_DOUBLE, root, MPI_COMM_WORLD);
     5773           if ( myid == root){
     5774              mpi_ii=0;
     5775              for(mpi_i =0; mpi_i < count2; mpi_i++){
     5776                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5777                 dp_T0[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     5778                 mpi_ii++;
     5779                 for(i=0; i<p; i++,mpi_ii++)
     5780                    dpp_T[loc_recv[mpi_i]][i] = rec_buf[mpi_ii];
     5781              }
     5782              free(rec_buf);
     5783           }
     5784           free(trade);
     5785#endif
     5786#if defined(_HOS_)
     5787           trade = myalloc1( count*(k+1));
     5788           if (myid == root)
     5789              rec_buf = myalloc1(count2*(k+1));
     5790           else
     5791              rec_buf=NULL;
     5792           mpi_ii=0;
     5793           for(mpi_i =0; mpi_i < count; mpi_i++){
     5794              trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5795              mpi_ii++;
     5796              for(i=0; i<k; i++,mpi_ii++)
     5797                 trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5798           }
     5799           MPI_Gather(trade,count*(k+1), MPI_DOUBLE,rec_buf, count*(k+1),MPI_DOUBLE, root, MPI_COMM_WORLD);
     5800           if ( myid == root){
     5801              mpi_ii=0;
     5802              for(mpi_i =0; mpi_i < count2; mpi_i++){
     5803                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5804                 dp_T0[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     5805                 mpi_ii++;
     5806                 for(i=0; i<k; i++,mpi_ii++)
     5807                    dpp_T[loc_recv[mpi_i]][i] = rec_buf[mpi_ii];
     5808              }
     5809              free(rec_buf);
     5810           }
     5811           free(trade);
     5812#endif
     5813#if defined(_HOV_)
     5814           trade = myalloc1( count*(p*k+1));
     5815           if (myid == root)
     5816              rec_buf = myalloc1(count2*(p*k+1));
     5817           else
     5818              rec_buf=NULL;
     5819           mpi_ii=0;
     5820           for(mpi_i =0; mpi_i < count; mpi_i++){
     5821              trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5822              mpi_ii++;
     5823              for(i=0; i<p*k; i++,mpi_ii++)
     5824                 trade[mpi_ii] = dpp_T[loc_send[mpi_i]][i];
     5825           }
     5826           MPI_Gather(trade,count*(p*k+1), MPI_DOUBLE,rec_buf, count*(p*k+1),MPI_DOUBLE, root, MPI_COMM_WORLD);
     5827           if ( myid == root){
     5828              mpi_ii=0;
     5829              for(mpi_i =0; mpi_i < count2; mpi_i++){
     5830                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5831                 dp_T0[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     5832                 mpi_ii++;
     5833                 for(i=0; i<p*k; i++,mpi_ii++)
     5834                    dpp_T[loc_recv[mpi_i]][i] = rec_buf[mpi_ii];
     5835              }
     5836              free(rec_buf);
     5837           }
     5838           free(trade);
     5839#endif
     5840#if defined(_TIGHT_)
     5841#if defined(_INT_FOR_)
     5842           trade = myalloc1(count*(p+1));
     5843           if (myid == root)
     5844             rec_buf = myalloc1(count2*(p+1));
     5845           else
     5846              rec_buf =NULL;
     5847           mpi_ii=0;
     5848           for (mpi_i=0; mpi_i< count; mpi_i++) {
     5849               trade[mpi_ii] = dp_T0[loc_send[mpi_i]];
     5850               mpi_ii++;
     5851               for(l=0;l<p;l++,mpi_ii++)
     5852                   trade[mpi_ii]= (double) up_T[loc_send[mpi_i]][l];
     5853           }
     5854           MPI_Gather(trade,count*(p+1), MPI_DOUBLE,rec_buf, count*(p+1),MPI_DOUBLE, root, MPI_COMM_WORLD);
     5855           if (myid == root){
     5856              mpi_ii=0;
     5857              for( mpi_i =0; mpi_i < count; mpi_i++){
     5858                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5859                 dp_T0[loc_recv[mpi_i]] = rec_buf[mpi_ii];
     5860                 mpi_ii++;
     5861                 for(l=0;l<p;l++,mpi_ii++)
     5862                  up_T[loc_recv[mpi_i]][l] = (unsigned long int) rec_buf[mpi_ii];
     5863              }
     5864              free(rec_buf_loc);
     5865           }
     5866           free(trade_loc);
     5867#endif /* END INT_FOR */
     5868#if defined(_INDO_)
     5869#if defined(_INDOPRO_)
     5870           counts = ( int*) malloc( count*sizeof(int) );
     5871           trade = myalloc1(count*2);
     5872           if( myid == root){
     5873              tmp_counts = ( int*) malloc( count2*sizeof(int) );
     5874              rec_buf = myalloc1(count2*2);
     5875              }
     5876           else {
     5877              tmp_counts = NULL;
     5878              rec_buf = NULL;
     5879           }
     5880
     5881           for(mpi_i =0; mpi_i < count; mpi_i++){
     5882                trade[2*mpi_i] = dp_T0[loc_send[mpi_i]];
     5883                counts[mpi_i] = ind_dom[loc_send[mpi_i]][0];
     5884                trade[2*mpi_i+1] = (double) counts[mpi_i];
     5885                }
     5886
     5887           MPI_Gather(trade,count*2, MPI_DOUBLE, rec_buf, count*2, MPI_DOUBLE, root, MPI_COMM_WORLD);
     5888           if (myid == root){
     5889              for(mpi_i =0; mpi_i < count2; mpi_i++ ){
     5890                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5891                 dp_T0[loc_recv[mpi_i]] = rec_buf[2*mpi_i];
     5892                 tmp_counts[mpi_i]  = (int) rec_buf[2*mpi_i+1];
     5893              }
     5894              for(mpi_i =0; mpi_i < count; mpi_i++ ){
     5895                 for(i=1; i < mpi_size; i++ )
     5896                   if( counts[mpi_i] < tmp_counts[count*i + mpi_i])
     5897                         counts[mpi_i] = tmp_counts[count*i + mpi_i];
     5898              }
     5899              free(rec_buf);
     5900           }
     5901           free(trade);
     5902           MPI_Bcast(counts,count,MPI_INT, root, MPI_COMM_WORLD);
     5903           anz=0;
     5904           for(mpi_i =0; mpi_i < count; mpi_i++ )
     5905                anz += counts[mpi_i];
     5906
     5907           // every process has same counts
     5908           if ( anz > 0){
     5909              trade_loc = (int*) malloc( anz*sizeof(int) );
     5910              l=0;
     5911              for(mpi_i =0; mpi_i < count; mpi_i++){
     5912                 for (i=2; i < ind_dom[loc_send[mpi_i]][0]+2; i++){
     5913                    trade_loc[l] = ind_dom[loc_send[mpi_i]][i];
     5914                    l++;
     5915                 }
     5916                 for(i=ind_dom[loc_send[mpi_i]][0]; i < counts[mpi_i] ; i++  ){
     5917                    trade_loc[l] = -10;
     5918                    l++;
     5919                 }
     5920              }
     5921              if (myid == root)
     5922                 rec_buf_loc = (int*) malloc(mpi_size * anz * sizeof(int) );
     5923              else
     5924                 rec_buf_loc = NULL ;
     5925
     5926              MPI_Gather(trade_loc, anz, MPI_INT, rec_buf_loc, anz, MPI_INT, root, MPI_COMM_WORLD);
     5927              free( trade_loc );
     5928
     5929              if(myid == root){
     5930                l = 0;
     5931                for(i=0;i<mpi_size; i++) {
     5932                   for(mpi_i=0; mpi_i < count; mpi_i++){
     5933                      combine_index_domain_received_data(loc_recv[mpi_i], tmp_counts[i*count+mpi_i], ind_dom, &rec_buf_loc[l] );
     5934                      l += counts[mpi_i];
     5935                   }
     5936                }
     5937              free(rec_buf_loc);
     5938              free(tmp_counts);
     5939              }
     5940           }
     5941           free(counts);
     5942#endif
     5943#if defined(_NONLIND_OLD_)
     5944           counts = ( int*) malloc( sizeof(int) );
     5945           trade = myalloc1(count+s_r_indep);
     5946           if( myid == root){
     5947              tmp_counts = ( int*) malloc( s_r_indep*mpi_size*sizeof(int) );
     5948              rec_buf = myalloc1(mpi_size*(count+s_r_indep));
     5949              }
     5950           else {
     5951              tmp_counts = NULL;
     5952              rec_buf = NULL;
     5953           }
     5954
     5955           for(mpi_i =0; mpi_i < count; mpi_i++)
     5956                trade[mpi_i] = dp_T0[loc_send[mpi_i]];
     5957           for(mpi_i =0; mpi_i < s_r_indep ; mpi_i++){
     5958                counts[mpi_i] = nonl_dom[mpi_i][0];
     5959                trade[mpi_i+count] = (double) counts[mpi_i];
     5960                }
     5961
     5962           MPI_Gather(trade,count+s_r_indep, MPI_DOUBLE, rec_buf, count+s_r_indep, MPI_DOUBLE, root, MPI_COMM_WORLD);
     5963           if (myid == root){
     5964            l =0;
     5965            for(mpi_ii=0; mpi_ii < mpi_size; mpi_ii++ ){
     5966              for(mpi_i =0; mpi_i < count; mpi_i++,l++){
     5967                 IF_KEEP_WRITE_TAYLOR(loc_recv[mpi_i],keep,k,p)
     5968                 dp_T0[loc_recv[mpi_i]] = trade[l];
     5969              }
     5970              for(mpi_i =0; mpi_i < s_r_indep; mpi_i++,l++){
     5971                 tmp_counts[s_r_indep*mpi_ii+mpi_i]  = (int) trade[l];
     5972              }
     5973            }
     5974            for(mpi_i =0; mpi_i < s_r_indep; mpi_i++ ){
     5975               for(i=1; i < mpi_size; i++ )
     5976                   if( counts[mpi_i] < tmp_counts[count*i + mpi_i])
     5977                         counts[mpi_i] = tmp_counts[count*i + mpi_i];
     5978              }
     5979              free(rec_buf);
     5980           }
     5981           free(trade);
     5982           MPI_Bcast(counts,s_r_indep,MPI_INT, root, MPI_COMM_WORLD);
     5983
     5984           anz=0;
     5985           for(mpi_i =0; mpi_i < s_r_indep; mpi_i++ )
     5986                anz += counts[mpi_i];
     5987
     5988           // every process has same counts
     5989           if ( anz > 0){
     5990              trade_loc = (int*) malloc( anz*sizeof(int) );
     5991              if (myid == root){
     5992                 rec_buf_loc = (int*) malloc(mpi_size * anz * sizeof(int));
     5993              } else { rec_buf_loc =NULL; }
     5994
     5995              l=0;
     5996              for(mpi_i =0; mpi_i < s_r_indep; mpi_i++){
     5997                 for (i=2; i < nonl_dom[mpi_i][0]+2; i++){
     5998                    trade_loc[l] = nonl_dom[mpi_i][i];
     5999                    l++;
     6000                 }
     6001                 for(i=nonl_dom[mpi_i][0]; i < counts[0] ; i++  ){
     6002                    trade_loc[l] = -10;
     6003                    l++;
     6004                 }
     6005              }
     6006              MPI_Gather(trade_loc,anz, MPI_INT, rec_buf_loc, anz, MPI_INT, root, MPI_COMM_WORLD);
     6007              free( trade_loc );
     6008              if(myid == root){
     6009                 // rewrite each index domain  rec_buf_loc[pc*process_count*anz + count]
     6010                 l = 0;
     6011                 for(mpi_ii=0; mpi_ii< mpi_size ; mpi_ii++ )
     6012                 for(mpi_i=0; mpi_i < s_r_indep; mpi_i++,l++){
     6013                     // nonl_dom settings
     6014                     extend_nonlinearity_domain_combine_received_trade(mpi_i, tmp_counts[mpi_ii*s_r_indep+mpi_i], nonl_dom, &rec_buf_loc[l]);
     6015                     l += counts[mpi_i];
     6016                 }
     6017              free(rec_buf_loc);
     6018              }
     6019           }
     6020           if( myid == root) free(tmp_counts);
     6021           free(counts);
     6022#endif    // end _NONLIND_
     6023#endif    // end _INDO_
     6024#endif
     6025#if defined(_NTIGHT_)
     6026#if defined(_INT_FOR_)
     6027           trade_loc = (locint*) malloc(count*p*sizeof(locint));
     6028           if (myid == root)
     6029             rec_buf_loc = (locint*) malloc(count2*p*sizeof(locint));
     6030           else
     6031              rec_buf =NULL;
     6032           mpi_ii=0;
     6033           for(mpi_i=0; mpi_i< count; mpi_i++) {
     6034              for(l=0;l<p;l++,mpi_ii++)
     6035                 trade[mpi_ii]=up_T[loc_send[mpi_i]][l];
     6036           }
     6037           MPI_Gather(trade,count*p, MPI_UNSIGNED_LONG,rec_buf, count*p,MPI_UNSIGNED_LONG, root, MPI_COMM_WORLD);
     6038           if (myid == root){
     6039              for( mpi_i =0; mpi_i < count; mpi_i++){
     6040                 FOR_0_LE_l_LT_pk
     6041                  up_T[loc_recv[mpi_i]][l] = rec_buf_loc[mpi_i*p+l];
     6042              }
     6043              free(rec_buf_loc);
     6044           }
     6045           free(trade_loc);
     6046#endif /* END INT_FOR */
     6047#if defined(_INDO_)
     6048#if defined(_INDOPRO_)
     6049           // getting information about count of entries
     6050           counts = ( int*) malloc( count*sizeof(int) );
     6051           if( myid == root)
     6052              tmp_counts = ( int*) malloc( count2*sizeof(int) );
     6053           else
     6054              tmp_counts = NULL;
     6055
     6056           for(mpi_i =0; mpi_i < count; mpi_i++)
     6057                counts[mpi_i] = ind_dom[loc_send[mpi_i]][0];
     6058
     6059           MPI_Gather(counts,count, MPI_INT, tmp_counts, count, MPI_INT, root, MPI_COMM_WORLD);
     6060           if (myid == root){
     6061              for(mpi_i =0; mpi_i < count; mpi_i++ ){
     6062                 for(i=1; i < mpi_size; i++ )
     6063                   if( counts[mpi_i] < tmp_counts[count*i + mpi_i])
     6064                         counts[mpi_i] = tmp_counts[count*i + mpi_i];
     6065              }
     6066           }
     6067           MPI_Bcast(counts,count,MPI_INT, root, MPI_COMM_WORLD);
     6068           anz=0;
     6069           for(mpi_i =0; mpi_i < count; mpi_i++ )
     6070                anz += counts[mpi_i];
     6071
     6072           // every process has same counts
     6073           if ( anz > 0){
     6074              trade_loc = (int*) malloc( anz*sizeof(int) );
     6075              l=0;
     6076              for(mpi_i =0; mpi_i < count; mpi_i++){
     6077                 for (i=2; i < ind_dom[loc_send[mpi_i]][0]+2; i++){
     6078                    trade_loc[l] = ind_dom[loc_send[mpi_i]][i];
     6079                    l++;
     6080                 }
     6081                 for(i=ind_dom[loc_send[mpi_i]][0]; i < counts[mpi_i] ; i++  ){
     6082                    trade_loc[l] = -10;
     6083                    l++;
     6084                 }
     6085              }
     6086              if (myid == root) rec_buf_loc = (int*) malloc(mpi_size * anz * sizeof(int) );
     6087              else  rec_buf_loc = NULL ;
     6088
     6089              MPI_Gather(trade_loc, anz, MPI_INT, rec_buf_loc, anz, MPI_INT, root, MPI_COMM_WORLD);
     6090              free( trade_loc );
     6091
     6092              if(myid == root){
     6093                l = 0;
     6094                for(i=0;i<mpi_size; i++) {
     6095                   for(mpi_i=0; mpi_i < count; mpi_i++){
     6096                      combine_index_domain_received_data(loc_recv[mpi_i], tmp_counts[i*count+mpi_i], ind_dom, &rec_buf_loc[l] );
     6097                      l += counts[mpi_i];
     6098                   }
     6099                }
     6100              free(rec_buf_loc);
     6101              free(tmp_counts);
     6102              }
     6103           }
     6104           free(counts);
     6105#endif
     6106#if defined(_NONLIND_OLD_)
     6107           counts = ( int*) malloc(s_r_indep* sizeof(int) );
     6108           if( myid == root)
     6109              tmp_counts = ( int*) malloc( s_r_indep*mpi_size*sizeof(int) );
     6110           else
     6111              tmp_counts = NULL;
     6112
     6113           for(mpi_i =0; mpi_i < s_r_indep ; mpi_i++)
     6114                counts[mpi_i] = nonl_dom[mpi_i][0];
     6115
     6116           MPI_Gather(counts,s_r_indep, MPI_INT, tmp_counts, s_r_indep, MPI_INT, root, MPI_COMM_WORLD);
     6117           if (myid == root){
     6118            for(mpi_i =0; mpi_i < s_r_indep; mpi_i++ ){
     6119               for(i=1; i < mpi_size; i++ )
     6120                   if( counts[mpi_i] < tmp_counts[count*i + mpi_i])
     6121                         counts[mpi_i] = tmp_counts[count*i + mpi_i];
     6122              }
     6123           }
     6124           MPI_Bcast(counts,s_r_indep,MPI_INT, root, MPI_COMM_WORLD);
     6125
     6126           anz=0;
     6127           for(mpi_i =0; mpi_i < s_r_indep; mpi_i++ )
     6128                anz += counts[mpi_i];
     6129
     6130           // every process has same counts
     6131           if ( anz > 0){
     6132              trade_loc = (int*) malloc( anz*sizeof(int) );
     6133              if (myid == root){
     6134                 rec_buf_loc = (int*) malloc(mpi_size * anz * sizeof(int));
     6135              } else { rec_buf_loc =NULL; }
     6136
     6137              l=0;
     6138              for(mpi_i =0; mpi_i < s_r_indep; mpi_i++){
     6139                 for (i=2; i < nonl_dom[mpi_i][0]+2; i++){
     6140                    trade_loc[l] = nonl_dom[mpi_i][i];
     6141                    l++;
     6142                 }
     6143                 for(i=nonl_dom[mpi_i][0]; i < counts[0] ; i++  ){
     6144                    trade_loc[l] = -10;
     6145                    l++;
     6146                 }
     6147              }
     6148              MPI_Gather(trade_loc,anz, MPI_INT, rec_buf_loc, anz, MPI_INT, root, MPI_COMM_WORLD);
     6149              free( trade_loc );
     6150              if(myid == root){
     6151                 // rewrite each index domain
     6152                 l = 0;
     6153                 for(mpi_ii=0; mpi_ii< mpi_size ; mpi_ii++ )
     6154