2004-10-23 23:08:26 +04:00
|
|
|
/*
|
2005-11-05 22:57:48 +03:00
|
|
|
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
|
|
* University Research and Technology
|
|
|
|
* Corporation. All rights reserved.
|
2009-02-04 18:41:55 +03:00
|
|
|
* Copyright (c) 2004-2009 The University of Tennessee and The University
|
2005-11-05 22:57:48 +03:00
|
|
|
* of Tennessee Research Foundation. All rights
|
|
|
|
* reserved.
|
2004-11-28 23:09:25 +03:00
|
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
|
|
* University of Stuttgart. All rights reserved.
|
2005-03-24 15:43:37 +03:00
|
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
|
|
* All rights reserved.
|
2004-11-22 04:38:40 +03:00
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
2004-10-23 23:08:26 +04:00
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef OMPI_FINT_2_INT_H
|
|
|
|
#define OMPI_FINT_2_INT_H
|
|
|
|
|
|
|
|
#include "ompi_config.h"
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Define MACROS to take account of different size of MPI_Fint from int
|
|
|
|
*/
|
|
|
|
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
#if OMPI_SIZEOF_FORTRAN_INTEGER == SIZEOF_INT
|
2004-10-23 23:08:26 +04:00
|
|
|
#define OMPI_ARRAY_NAME_DECL(a)
|
|
|
|
#define OMPI_2_DIM_ARRAY_NAME_DECL(a, dim2)
|
|
|
|
#define OMPI_SINGLE_NAME_DECL(a)
|
|
|
|
#define OMPI_ARRAY_NAME_CONVERT(a) a
|
|
|
|
#define OMPI_SINGLE_NAME_CONVERT(a) a
|
|
|
|
#define OMPI_INT_2_FINT(a) a
|
|
|
|
#define OMPI_FINT_2_INT(a) a
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT_ALLOC(in, n)
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT(in, n)
|
|
|
|
#define OMPI_2_DIM_ARRAY_FINT_2_INT(in, n, dim2)
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT_CLEANUP(in)
|
|
|
|
#define OMPI_SINGLE_FINT_2_INT(in)
|
|
|
|
#define OMPI_SINGLE_INT_2_FINT(in)
|
|
|
|
#define OMPI_ARRAY_INT_2_FINT(in, n)
|
|
|
|
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
#elif OMPI_SIZEOF_FORTRAN_INTEGER > SIZEOF_INT
|
2004-10-23 23:08:26 +04:00
|
|
|
#define OMPI_ARRAY_NAME_DECL(a) int *c_##a
|
|
|
|
#define OMPI_2_DIM_ARRAY_NAME_DECL(a, dim2) int (*c_##a)[dim2], dim2_index
|
|
|
|
#define OMPI_SINGLE_NAME_DECL(a) int c_##a
|
|
|
|
#define OMPI_ARRAY_NAME_CONVERT(a) c_##a
|
|
|
|
#define OMPI_SINGLE_NAME_CONVERT(a) &c_##a
|
|
|
|
#define OMPI_INT_2_FINT(a) a
|
|
|
|
#define OMPI_FINT_2_INT(a) (int) (a)
|
|
|
|
|
|
|
|
/* This is for OUT parameters. Does only alloc */
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT_ALLOC(in, n) \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = malloc(n * sizeof(int))
|
|
|
|
|
|
|
|
/* This is for IN/IN-OUT parameters. Does alloc and assignment */
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT(in, n) \
|
2009-02-04 18:41:55 +03:00
|
|
|
do { \
|
|
|
|
int __n = (int)(n); \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = malloc(__n * sizeof(int)); \
|
2009-02-05 19:44:43 +03:00
|
|
|
while(--__n >= 0) { \
|
2009-02-04 18:41:55 +03:00
|
|
|
OMPI_ARRAY_NAME_CONVERT(in)[__n] = (int) in[__n]; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2004-10-23 23:08:26 +04:00
|
|
|
|
|
|
|
/* This is for 2-dim arrays */
|
|
|
|
#define OMPI_2_DIM_ARRAY_FINT_2_INT(in, n, dim2) \
|
2009-02-04 18:41:55 +03:00
|
|
|
do { \
|
|
|
|
int __n = (int)(n); \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = (int (*)[dim2]) malloc(__n * sizeof(*OMPI_ARRAY_NAME_CONVERT(in))); \
|
|
|
|
while(--__n >= 0) { \
|
|
|
|
for(dim2_index = 0; dim2_index < dim2; ++dim2_index) { \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in)[__n][dim2_index] = (int)in[__n][dim2_index]; \
|
|
|
|
} \
|
2004-10-23 23:08:26 +04:00
|
|
|
} \
|
2009-02-04 18:41:55 +03:00
|
|
|
} while (0)
|
2004-10-23 23:08:26 +04:00
|
|
|
|
|
|
|
/* This is for IN parameters. Does only free */
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT_CLEANUP(in) \
|
|
|
|
free(OMPI_ARRAY_NAME_CONVERT(in))
|
|
|
|
|
|
|
|
/* This is for single IN parameter */
|
|
|
|
#define OMPI_SINGLE_FINT_2_INT(in) \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = (int) *(in)
|
|
|
|
|
|
|
|
/* This is for single OUT parameter */
|
|
|
|
#define OMPI_SINGLE_INT_2_FINT(in) \
|
|
|
|
*(in) = OMPI_ARRAY_NAME_CONVERT(in)
|
|
|
|
|
|
|
|
/* This is for OUT/IN-OUT parametes. Does back assignment and free */
|
|
|
|
#define OMPI_ARRAY_INT_2_FINT(in, n) \
|
2009-02-04 18:41:55 +03:00
|
|
|
do { \
|
2009-02-05 19:18:39 +03:00
|
|
|
int __n = (int)(n); \
|
2009-02-05 19:44:43 +03:00
|
|
|
while(--__n >= 0) { \
|
2009-02-04 18:41:55 +03:00
|
|
|
in[__n] = OMPI_ARRAY_NAME_CONVERT(in)[__n]; \
|
|
|
|
} \
|
|
|
|
free(OMPI_ARRAY_NAME_CONVERT(in)); \
|
|
|
|
} while (0)
|
2004-10-23 23:08:26 +04:00
|
|
|
#else /* int > MPI_Fint */
|
|
|
|
#define OMPI_ARRAY_NAME_DECL(a) int *c_##a
|
|
|
|
#define OMPI_2_DIM_ARRAY_NAME_DECL(a, dim2) int (*c_##a)[dim2], dim2_index
|
|
|
|
#define OMPI_SINGLE_NAME_DECL(a) int c_##a
|
|
|
|
#define OMPI_ARRAY_NAME_CONVERT(a) c_##a
|
|
|
|
#define OMPI_SINGLE_NAME_CONVERT(a) &c_##a
|
|
|
|
#define OMPI_INT_2_FINT(a) (MPI_Fint)(a)
|
|
|
|
#define OMPI_FINT_2_INT(a) (a)
|
|
|
|
|
|
|
|
/* This is for OUT parameters. Does only alloc */
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT_ALLOC(in, n) \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = malloc(n * sizeof(int))
|
|
|
|
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT(in, n) \
|
2009-02-04 18:41:55 +03:00
|
|
|
do { \
|
|
|
|
int __n = (int)(n); \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = malloc(__n * sizeof(int)); \
|
|
|
|
while(--__n >= 0) { \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in)[__n] = in[__n]; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
2004-10-23 23:08:26 +04:00
|
|
|
|
|
|
|
#define OMPI_2_DIM_ARRAY_FINT_2_INT(in, n, dim2) \
|
2009-02-04 18:41:55 +03:00
|
|
|
do { \
|
|
|
|
int __n = (int)(n); \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = (int (*)[dim2]) malloc(__n * sizeof(*OMPI_ARRAY_NAME_CONVERT(in))); \
|
|
|
|
while(--__n >= 0) { \
|
|
|
|
for(dim2_index = 0; dim2_index < dim2; ++dim2_index) { \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in)[__n][dim2_index] = in[__n][dim2_index]; \
|
|
|
|
} \
|
2004-10-23 23:08:26 +04:00
|
|
|
} \
|
2009-02-04 18:41:55 +03:00
|
|
|
} while (0)
|
2004-10-23 23:08:26 +04:00
|
|
|
|
|
|
|
#define OMPI_ARRAY_FINT_2_INT_CLEANUP(in) \
|
|
|
|
free(OMPI_ARRAY_NAME_CONVERT(in))
|
|
|
|
|
|
|
|
#define OMPI_SINGLE_FINT_2_INT(in) \
|
|
|
|
OMPI_ARRAY_NAME_CONVERT(in) = *(in)
|
|
|
|
|
|
|
|
#define OMPI_SINGLE_INT_2_FINT(in) \
|
|
|
|
*in = (MPI_Fint) OMPI_ARRAY_NAME_CONVERT(in)
|
|
|
|
|
|
|
|
#define OMPI_ARRAY_INT_2_FINT(in, n) \
|
2009-02-04 18:41:55 +03:00
|
|
|
do { \
|
|
|
|
int __n = (int)(n); \
|
|
|
|
while(--__n >= 0) { \
|
|
|
|
in[__n] = OMPI_ARRAY_NAME_CONVERT(in)[__n]; \
|
|
|
|
} \
|
|
|
|
free(OMPI_ARRAY_NAME_CONVERT(in)); \
|
|
|
|
} while (0)
|
2004-10-23 23:08:26 +04:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|
- Implement correct Fortran Logical-handling in f77/f90 interface in
case of:
sizeof(MPI_Flogical) != sizeof (int)
and
Fortran value of .TRUE. != 1
as is often the case.
- Check in configure the value of .TRUE., the C-type coresponding to
logical and check, that fortran compiler does not do something strange
with arrays of logicals
- Convert all occurrences of logicals in the fortran wrappers, only
in case it is needed.
*Please note* Implementation of MPI_Cart_sub needed special treatment.
- Output these value in ompi_info -a
- Clean up the prototypes_mpi.h to just have a single definition and
thereby deleting the necessity for prototypes_pmpi.h
- configured, compiled and tested with F90-program, which uses
MPI_Cart_create and MPI_Cart_get:
linux ia32, gcc (no testing, as no f90)
linux ia32, gcc --disable-mpi-f77 --disable-mpi-f90 (had a bug there)
linux ia32, icc-8.1
linux opteron, gcc-3.3.5, pgcc, pathccx/pathf90 (tested just
pgi-compiler)
linux em64t, gcc, icc-8.1 (tested just icc)
This commit was SVN r8254.
2005-11-24 19:52:35 +03:00
|
|
|
/*
|
|
|
|
* Define MACROS to take account of different size of logical from int
|
|
|
|
*/
|
|
|
|
|
|
|
|
#if OMPI_SIZEOF_FORTRAN_LOGICAL == SIZEOF_INT
|
|
|
|
# define OMPI_LOGICAL_NAME_DECL(in) /* Not needed for int==logical */
|
|
|
|
# define OMPI_LOGICAL_NAME_CONVERT(in) in /* Not needed for int==logical */
|
|
|
|
# define OMPI_LOGICAL_SINGLE_NAME_CONVERT(in) in /* Not needed for int==logical */
|
|
|
|
# define OMPI_LOGICAL_ARRAY_NAME_DECL(in) /* Not needed for int==logical */
|
|
|
|
# define OMPI_LOGICAL_ARRAY_NAME_CONVERT(in) in /* Not needed for int==logical */
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT_ALLOC(in,n) /* Not needed for int==logical */
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT_CLEANUP(in) /* Not needed for int==logical */
|
|
|
|
|
|
|
|
# if OMPI_FORTRAN_VALUE_TRUE == 1
|
|
|
|
# define OMPI_FORTRAN_MUST_CONVERT_LOGICAL_2_INT 0
|
|
|
|
# define OMPI_LOGICAL_2_INT(a) a
|
|
|
|
# define OMPI_INT_2_LOGICAL(a) a
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT(in, n)
|
|
|
|
# define OMPI_ARRAY_INT_2_LOGICAL(in, n)
|
|
|
|
# define OMPI_SINGLE_INT_2_LOGICAL(a) /* Single-OUT variable -- Not needed for int==logical, true=1 */
|
|
|
|
# else
|
|
|
|
# define OMPI_FORTRAN_MUST_CONVERT_LOGICAL_2_INT 1
|
|
|
|
# define OMPI_LOGICAL_2_INT(a) ((a)==0? 0 : 1)
|
|
|
|
# define OMPI_INT_2_LOGICAL(a) ((a)==0? 0 : OMPI_FORTRAN_VALUE_TRUE)
|
|
|
|
# define OMPI_SINGLE_INT_2_LOGICAL(a) *a=OMPI_INT_2_LOGICAL(OMPI_LOGICAL_NAME_CONVERT(*a))
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT(in, n) do { \
|
2009-02-04 18:41:55 +03:00
|
|
|
int __n = (int)(n); \
|
2007-01-02 19:16:29 +03:00
|
|
|
OMPI_ARRAY_LOGICAL_2_INT_ALLOC(in, __n + 1); \
|
2009-02-04 18:41:55 +03:00
|
|
|
while (--__n >= 0) { \
|
- Implement correct Fortran Logical-handling in f77/f90 interface in
case of:
sizeof(MPI_Flogical) != sizeof (int)
and
Fortran value of .TRUE. != 1
as is often the case.
- Check in configure the value of .TRUE., the C-type coresponding to
logical and check, that fortran compiler does not do something strange
with arrays of logicals
- Convert all occurrences of logicals in the fortran wrappers, only
in case it is needed.
*Please note* Implementation of MPI_Cart_sub needed special treatment.
- Output these value in ompi_info -a
- Clean up the prototypes_mpi.h to just have a single definition and
thereby deleting the necessity for prototypes_pmpi.h
- configured, compiled and tested with F90-program, which uses
MPI_Cart_create and MPI_Cart_get:
linux ia32, gcc (no testing, as no f90)
linux ia32, gcc --disable-mpi-f77 --disable-mpi-f90 (had a bug there)
linux ia32, icc-8.1
linux opteron, gcc-3.3.5, pgcc, pathccx/pathf90 (tested just
pgi-compiler)
linux em64t, gcc, icc-8.1 (tested just icc)
This commit was SVN r8254.
2005-11-24 19:52:35 +03:00
|
|
|
OMPI_LOGICAL_ARRAY_NAME_CONVERT(in)[__n]=OMPI_LOGICAL_2_INT(in[__n]); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
# define OMPI_ARRAY_INT_2_LOGICAL(in, n) do { \
|
2009-02-04 18:41:55 +03:00
|
|
|
int __n = (int)(n); \
|
2009-02-05 16:55:26 +03:00
|
|
|
while (__n >= 0) { \
|
- Implement correct Fortran Logical-handling in f77/f90 interface in
case of:
sizeof(MPI_Flogical) != sizeof (int)
and
Fortran value of .TRUE. != 1
as is often the case.
- Check in configure the value of .TRUE., the C-type coresponding to
logical and check, that fortran compiler does not do something strange
with arrays of logicals
- Convert all occurrences of logicals in the fortran wrappers, only
in case it is needed.
*Please note* Implementation of MPI_Cart_sub needed special treatment.
- Output these value in ompi_info -a
- Clean up the prototypes_mpi.h to just have a single definition and
thereby deleting the necessity for prototypes_pmpi.h
- configured, compiled and tested with F90-program, which uses
MPI_Cart_create and MPI_Cart_get:
linux ia32, gcc (no testing, as no f90)
linux ia32, gcc --disable-mpi-f77 --disable-mpi-f90 (had a bug there)
linux ia32, icc-8.1
linux opteron, gcc-3.3.5, pgcc, pathccx/pathf90 (tested just
pgi-compiler)
linux em64t, gcc, icc-8.1 (tested just icc)
This commit was SVN r8254.
2005-11-24 19:52:35 +03:00
|
|
|
in[__n]=OMPI_INT_2_LOGICAL(OMPI_LOGICAL_ARRAY_NAME_CONVERT(in)[__n]); \
|
|
|
|
} \
|
|
|
|
} while (0) \
|
|
|
|
/* free(OMPI_LOGICAL_ARRAY_NAME_CONVERT(in)) * No Need to free, here */
|
|
|
|
|
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
/*
|
|
|
|
* For anything other than Fortran-logical == C-int, we have to convert
|
|
|
|
*/
|
|
|
|
# define OMPI_FORTRAN_MUST_CONVERT_LOGICAL_2_INT 1
|
|
|
|
# define OMPI_LOGICAL_NAME_DECL(in) int c_##in
|
|
|
|
# define OMPI_LOGICAL_NAME_CONVERT(in) c_##in
|
|
|
|
# define OMPI_LOGICAL_SINGLE_NAME_CONVERT(in) &c_##in
|
|
|
|
# define OMPI_LOGICAL_ARRAY_NAME_DECL(in) int * c_##in
|
|
|
|
# define OMPI_LOGICAL_ARRAY_NAME_CONVERT(in) c_##in
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT_ALLOC(in,n) \
|
|
|
|
OMPI_LOGICAL_ARRAY_NAME_CONVERT(in) = malloc(n * sizeof(int))
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT_CLEANUP(in) \
|
|
|
|
free(OMPI_LOGICAL_ARRAY_NAME_CONVERT(in))
|
|
|
|
|
|
|
|
# if OMPI_FORTRAN_VALUE_TRUE == 1
|
|
|
|
# define OMPI_LOGICAL_2_INT(a) (int)a
|
|
|
|
# define OMPI_INT_2_LOGICAL(a) (MPI_Flogical)a
|
|
|
|
# define OMPI_SINGLE_INT_2_LOGICAL(a) *a=(OMPI_INT_2_LOGICAL(OMPI_LOGICAL_NAME_CONVERT(a)))
|
|
|
|
# else
|
|
|
|
# define OMPI_LOGICAL_2_INT(a) ((a)==0? 0 : 1)
|
|
|
|
# define OMPI_INT_2_LOGICAL(a) ((a)==0? 0 : OMPI_FORTRAN_VALUE_TRUE)
|
|
|
|
# define OMPI_SINGLE_INT_2_LOGICAL(a) *a=(OMPI_INT_2_LOGICAL(OMPI_LOGICAL_NAME_CONVERT(a)))
|
|
|
|
# endif
|
|
|
|
# define OMPI_ARRAY_LOGICAL_2_INT(in, n) do { \
|
2009-02-04 18:41:55 +03:00
|
|
|
int __n = (int)(n); \
|
2007-01-02 19:16:29 +03:00
|
|
|
OMPI_ARRAY_LOGICAL_2_INT_ALLOC(in, __n + 1); \
|
2009-02-04 18:41:55 +03:00
|
|
|
while (--__n >= 0) { \
|
- Implement correct Fortran Logical-handling in f77/f90 interface in
case of:
sizeof(MPI_Flogical) != sizeof (int)
and
Fortran value of .TRUE. != 1
as is often the case.
- Check in configure the value of .TRUE., the C-type coresponding to
logical and check, that fortran compiler does not do something strange
with arrays of logicals
- Convert all occurrences of logicals in the fortran wrappers, only
in case it is needed.
*Please note* Implementation of MPI_Cart_sub needed special treatment.
- Output these value in ompi_info -a
- Clean up the prototypes_mpi.h to just have a single definition and
thereby deleting the necessity for prototypes_pmpi.h
- configured, compiled and tested with F90-program, which uses
MPI_Cart_create and MPI_Cart_get:
linux ia32, gcc (no testing, as no f90)
linux ia32, gcc --disable-mpi-f77 --disable-mpi-f90 (had a bug there)
linux ia32, icc-8.1
linux opteron, gcc-3.3.5, pgcc, pathccx/pathf90 (tested just
pgi-compiler)
linux em64t, gcc, icc-8.1 (tested just icc)
This commit was SVN r8254.
2005-11-24 19:52:35 +03:00
|
|
|
OMPI_LOGICAL_ARRAY_NAME_CONVERT(in)[__n]=OMPI_LOGICAL_2_INT(in[__n]); \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
# define OMPI_ARRAY_INT_2_LOGICAL(in, n) do { \
|
2009-02-04 18:41:55 +03:00
|
|
|
int __n = (int)(n); \
|
|
|
|
while (--__n >= 0) { \
|
- Implement correct Fortran Logical-handling in f77/f90 interface in
case of:
sizeof(MPI_Flogical) != sizeof (int)
and
Fortran value of .TRUE. != 1
as is often the case.
- Check in configure the value of .TRUE., the C-type coresponding to
logical and check, that fortran compiler does not do something strange
with arrays of logicals
- Convert all occurrences of logicals in the fortran wrappers, only
in case it is needed.
*Please note* Implementation of MPI_Cart_sub needed special treatment.
- Output these value in ompi_info -a
- Clean up the prototypes_mpi.h to just have a single definition and
thereby deleting the necessity for prototypes_pmpi.h
- configured, compiled and tested with F90-program, which uses
MPI_Cart_create and MPI_Cart_get:
linux ia32, gcc (no testing, as no f90)
linux ia32, gcc --disable-mpi-f77 --disable-mpi-f90 (had a bug there)
linux ia32, icc-8.1
linux opteron, gcc-3.3.5, pgcc, pathccx/pathf90 (tested just
pgi-compiler)
linux em64t, gcc, icc-8.1 (tested just icc)
This commit was SVN r8254.
2005-11-24 19:52:35 +03:00
|
|
|
in[__n]=OMPI_INT_2_LOGICAL(OMPI_LOGICAL_ARRAY_NAME_CONVERT(in)[__n]); \
|
|
|
|
} \
|
|
|
|
} while (0) \
|
|
|
|
/* free(OMPI_LOGICAL_ARRAY_NAME_CONVERT(in)) * No Need to free, here */
|
|
|
|
#endif /* OMPI_SIZEOF_FORTRAN_LOGICAL */
|
|
|
|
|
|
|
|
|
2004-10-23 23:08:26 +04:00
|
|
|
#endif /* OMPI_FINT_2_INT_H */
|