[mpich-commits] [mpich] MPICH primary repository branch, master, updated. v3.2b4-191-gd41477b

Service Account noreply at mpich.org
Sun Aug 23 16:51:34 CDT 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".

The branch, master has been updated
       via  d41477b7ef0e3ad91db952962e1cb68dd276e8ae (commit)
      from  5e111d03852277b3a67607c4df50b0a7df0fc084 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/d41477b7ef0e3ad91db952962e1cb68dd276e8ae

commit d41477b7ef0e3ad91db952962e1cb68dd276e8ae
Author: Halim Amer <aamer at anl.gov>
Date:   Tue Aug 18 15:02:26 2015 -0500

    Deleted some unused code related to Windows
    
    Signed-off-by: Pavan Balaji <balaji at anl.gov>

diff --git a/src/util/Makefile.mk b/src/util/Makefile.mk
index d7537b1..6714fe0 100644
--- a/src/util/Makefile.mk
+++ b/src/util/Makefile.mk
@@ -19,7 +19,3 @@ include $(top_srcdir)/src/util/assert/Makefile.mk
 include $(top_srcdir)/src/util/timers/Makefile.mk
 include $(top_srcdir)/src/util/pointer/Makefile.mk
 
-# "ex" and "multichannel" are Windows-only directories that we do not build with automake
-#include $(top_srcdir)/src/util/ex/Makefile.mk
-#include $(top_srcdir)/src/util/multichannel/Makefile.mk
-
diff --git a/src/util/ex/Makefile.sm b/src/util/ex/Makefile.sm
deleted file mode 100644
index 9c8992d..0000000
--- a/src/util/ex/Makefile.sm
+++ /dev/null
@@ -1,6 +0,0 @@
-INCLUDES = -I../../include -I${master_top_srcdir}/src/include
-lib${MPILIBNAME}_a_SOURCES = ex.c
-ex.o: ex.c
-
-# FIXME: the following file should be included
-# src/include/mpiu_ex.h
diff --git a/src/util/ex/ex.c b/src/util/ex/ex.c
deleted file mode 100644
index 6d78aaf..0000000
--- a/src/util/ex/ex.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*-
- *
- *   Copyright (C) 1997 University of Chicago. 
- *   See COPYRIGHT notice in top-level directory.
- *
- * Portions of this code were written by Microsoft. Those portions are
- * Copyright (c) 2007 Microsoft Corporation. Microsoft grants
- * permission to use, reproduce, prepare derivative works, and to
- * redistribute to others. The code is licensed "as is." The User
- * bears the risk of using it. Microsoft gives no express warranties,
- * guarantees or conditions. To the extent permitted by law, Microsoft
- * excludes the implied warranties of merchantability, fitness for a
- * particular purpose and non-infringement.
- */
-
-#include <mpichconf.h>
-#include <mpiutil.h>
-#include <mpimem.h>
-#include <mpi.h>
-#include <mpiu_ex.h>
-#ifdef USE_DBG_LOGGING
-    #include <mpidbg.h>
-#endif
-#ifdef HAVE_WINNT_H
-#include <winnt.h>
-#endif
-
-static
-int
-ExpKeyZeroCompletionProcessor(
-    DWORD BytesTransfered,
-    PVOID pOverlapped
-    );
-
-static
-int
-ExpKeyOneWin32CompletionProcessor(
-    DWORD BytesTransfered,
-    PVOID pOverlapped
-    );
-
-//
-// The registered processors. This module supports up to 4 processors where
-// processor zero is pre-registered for overlapped operations completion.
-// the completion processor is registered by the completion key.
-//
-static MPIU_ExCompletionProcessor s_processors[] = {
-
-    ExpKeyZeroCompletionProcessor,
-    ExpKeyOneWin32CompletionProcessor,
-    NULL,
-    NULL,
-};
-
-
-static inline BOOL IsValidSet(MPIU_ExSetHandle_t Set)
-{
-    return (Set != NULL && Set != INVALID_HANDLE_VALUE);
-}
-
-
-/* FIXME : Change ExCreateSet() to allow adding the set to a list
- * & allow sending this list to MPIU_ExProcessCompletions()
- * MPIU_ExSetHandle_t MPIU_ExCreateSet(MPIU_ExCreateSetList_t list)
- */
-MPIU_ExSetHandle_t
-MPIU_ExCreateSet(
-    void
-    )
-{
-    MPIU_ExSetHandle_t Set;
-    Set = CreateIoCompletionPort(
-            INVALID_HANDLE_VALUE,   // FileHandle
-            NULL,   // ExistingCompletionPort
-            0,      // CompletionKey
-            0       // NumberOfConcurrentThreads
-            );
-
-    return Set;
-}
-
-
-void
-MPIU_ExCloseSet(
-    MPIU_ExSetHandle_t Set
-    )
-{
-    MPIU_Assert(IsValidSet(Set));
-    CloseHandle(Set);
-}
-
-
-void
-MPIU_ExRegisterCompletionProcessor(
-    ULONG_PTR Key,
-    MPIU_ExCompletionProcessor pfnCompletionProcessor
-    )
-{
-    MPIU_Assert(Key > 0);
-    MPIU_Assert(Key < _countof(s_processors));
-    MPIU_Assert(s_processors[Key] == NULL);
-    s_processors[Key] = pfnCompletionProcessor;
-}
-
-int
-MPIU_ExRegisterNextCompletionProcessor(
-    ULONG_PTR *Key,
-    MPIU_ExCompletionProcessor pfnCompletionProcessor
-    )
-{
-    int i;
-    MPIU_Assert(Key != NULL);
-
-    /* We default to the predefined Key0 completion processor */
-    *Key = 0;
-    for(i=0; i<_countof(s_processors); i++){
-        if(s_processors[i] == NULL){
-            *Key = (ULONG_PTR )i;
-            s_processors[i] = pfnCompletionProcessor;
-            return MPI_SUCCESS;
-        }
-    }
-    return MPI_ERR_INTERN;
-}
-
-void
-MPIU_ExUnregisterCompletionProcessor(
-    ULONG_PTR Key
-    )
-{
-    MPIU_Assert(Key > 0);
-    MPIU_Assert(Key < _countof(s_processors));
-    MPIU_Assert(s_processors[Key] != NULL);
-    s_processors[Key] = NULL;
-}
-
-
-void
-MPIU_ExPostCompletion(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR Key,
-    PVOID pOverlapped,
-    DWORD BytesTransfered
-    )
-{
-    MPIU_Assert(IsValidSet(Set));
-
-    for(;;)
-    {
-        if(PostQueuedCompletionStatus(Set, BytesTransfered, Key, pOverlapped))
-            return;
-
-        MPIU_Assert(GetLastError() == ERROR_NO_SYSTEM_RESOURCES);
-        Sleep(10);
-    }
-}
-
-
-ULONG
-MPIU_ExGetPortValue(
-    MPIU_ExSetHandle_t Set
-    )
-{
-    MPIU_Assert(IsValidSet(Set));
-    return HandleToUlong(Set);
-}
-
-
-int
-MPIU_ExInitialize(
-    void
-    )
-{
-    return MPI_SUCCESS;
-}
-
-
-int
-MPIU_ExFinalize(
-    void
-    )
-{
-    return MPI_SUCCESS;
-}
-
-
-int
-MPIU_ExProcessCompletions(
-    MPIU_ExSetHandle_t Set,
-    BOOL *fWaitForEventAndStatus
-    )
-{
-    DWORD Timeout;
-
-    MPIU_Assert(fWaitForEventAndStatus != NULL);
-    MPIU_Assert(IsValidSet(Set));
-
-    Timeout =  (*fWaitForEventAndStatus) ? INFINITE : 0;
-
-    for (;;)
-    {
-        BOOL fSucc;
-        DWORD BytesTransfered = 0;
-        ULONG_PTR Key;
-        OVERLAPPED* pOverlapped = NULL;
-
-        fSucc = GetQueuedCompletionStatus(
-                    Set,
-                    &BytesTransfered,
-                    &Key,
-                    &pOverlapped,
-                    Timeout
-                    );
-
-        if(!fSucc){
-            /* Could be a timeout or an error */
-            *fWaitForEventAndStatus = FALSE;
-        }
-        else{
-            /* An Event completed */
-            *fWaitForEventAndStatus = TRUE;
-        }
-        if(!fSucc && pOverlapped == NULL)
-        {
-            //
-            // Return success on timeout per caller request. The Executive progress
-            // engine will not wait for the async processing to complete
-            //
-            DWORD gle = GetLastError();
-            if (gle == WAIT_TIMEOUT)
-                return MPI_SUCCESS;
-
-            /* FIXME: Should'nt there be a retry count ? */
-            //
-            // Io Completion port internal error, try again
-            //
-            continue;
-        }
-        
-        MPIU_Assert(Key < _countof(s_processors));
-        MPIU_Assert(s_processors[Key] != NULL);
-
-
-        //
-        // Call the completion processor and return the result.
-        //
-        return s_processors[Key](BytesTransfered, pOverlapped);
-    }
-}
-
-
-//----------------------------------------------------------------------------
-//
-// Preregistered completion processor for Key-Zero
-//
-
-static
-int
-ExpKeyZeroCompletionProcessor(
-    DWORD BytesTransferred,
-    PVOID pOverlapped
-    )
-{
-    MPIU_EXOVERLAPPED* pov = CONTAINING_RECORD(pOverlapped, MPIU_EXOVERLAPPED, ov);
-    return MPIU_ExCompleteOverlapped(pov, BytesTransferred);
-}
-
-//----------------------------------------------------------------------------
-//
-// Preregistered completion processor for Key-One
-// Used for Win32 subsystem
-//
-
-static
-int
-ExpKeyOneWin32CompletionProcessor(
-    DWORD BytesTransferred,
-    PVOID pOverlapped
-    )
-{
-    MPIU_EXOVERLAPPED* pov = CONTAINING_RECORD(pOverlapped, MPIU_EXOVERLAPPED, ov);
-    return MPIU_ExWin32CompleteOverlapped(pov, BytesTransferred);
-}
-
-void
-MPIU_ExPostOverlapped(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR key,
-    MPIU_EXOVERLAPPED* pOverlapped
-    )
-{
-    MPIU_Assert(IsValidSet(Set));
-
-    MPIU_ExPostCompletion(
-        Set,
-        key, // Key,
-        &pOverlapped->ov,
-        0 // BytesTransfered
-        );
-}
-
-
-void
-MPIU_ExAttachHandle(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR key,
-    HANDLE Handle
-    )
-{
-    MPIU_Assert(IsValidSet(Set));
-
-    for(;;)
-    {
-        HANDLE hPort;
-        hPort = CreateIoCompletionPort(
-                    Handle, // FileHandle
-                    Set,    // ExistingCompletionPort
-                    key,      // CompletionKey
-                    0       // NumberOfConcurrentThreads
-                    );
-
-        if(hPort != NULL)
-        {
-            MPIU_Assert(hPort == Set);
-            return;
-        }
-
-        MPIU_Assert(GetLastError() == ERROR_NO_SYSTEM_RESOURCES);
-        Sleep(10);
-    }
-}
-
diff --git a/src/util/ex/mpiu_ex.h b/src/util/ex/mpiu_ex.h
deleted file mode 100644
index eeeba95..0000000
--- a/src/util/ex/mpiu_ex.h
+++ /dev/null
@@ -1,527 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *  (C) 2001 by Argonne National Laboratory.
- *      See COPYRIGHT in top-level directory.
- *
- * Portions of this code were written by Microsoft. Those portions are
- * Copyright (c) 2007 Microsoft Corporation. Microsoft grants
- * permission to use, reproduce, prepare derivative works, and to
- * redistribute to others. The code is licensed "as is." The User
- * bears the risk of using it. Microsoft gives no express warranties,
- * guarantees or conditions. To the extent permitted by law, Microsoft
- * excludes the implied warranties of merchantability, fitness for a
- * particular purpose and non-infringement.
- */
-#ifndef MPIU_EX_H_INCLUDED
-#define MPIU_EX_H_INCLUDED
-
-#define WIN32_LEAN_AND_MEAN
-#ifdef HAVE_WINDOWS_H
-#include <windows.h>
-#endif
-
-/*----------------------------------------------------------------------------
-//
-// The Executive, a generic progress engine
-//
-// Overview:
-// The generic progress engine, the Executive, implements a simple asynchronous
-// processing model. In this model records indicating events get queued up for
-// processing. The Executive invokes the appropriate registered handler for the
-// event to take further action if required. The executive exits when a sequence
-// of events, representing a complete logical function is complete.
-//
-// This model is a producers-consumers model with a single events queue. The
-// events are being processed in the order they have been queued.
-// *** temporary extended to support multiple queues until the clients can ***
-// *** use a single event queue. (e.g., PMI client implementation)         ***
-//
-// The function ExProcessCompletions is the heart of the consumers model. It
-// dequeues the events records and invokes the appropriate completion processor.
-// Multiple threads can call this function for processing. The Executive will
-// run as many concurrent threads as there are processors in the system. When
-// concurrent threads are running, the completion processors should be able to
-// handle the concurrency and out-of-order execution.
-//
-// The Executive pre-registers a completion processor for Key-Zero with a simple
-// handler signature. see description below.
-//
-//----------------------------------------------------------------------------*/
-
-
-/*
-    MPIU_ExSetHandle_t  *** temp extenssion ***
-    Represents the set object
-*/
-typedef HANDLE MPIU_ExSetHandle_t;
-#define MPIU_EX_INVALID_SET NULL
-
-/*
-    MPIU_ExCreateSet  *** temp extenssion ***
-
-    Create the set object.
-    An MPIU_EX_INVALID_SET value is returned for an out of memory condition.
-*/
-MPIU_ExSetHandle_t
-MPIU_ExCreateSet(
-    void
-    );
-
-/*
-    MPIU_ExCloseSet *** temp extenssion ***
-
-    Close the set object. 
-*/
-void
-MPIU_ExCloseSet(
-    MPIU_ExSetHandle_t Set
-    );
-
-/*
-    MPIU_ExCompletionProcessor, function prototype
-
-    The completion processor function is called by ExProcessCompletions function
-    to process a completion event. The completion processor indicates whether the
-    sequence of asynchronous events is complete or whether further processing is
-    required.
-
-    Parameters:
-     BytesTransferred
-        A DWORD value posted to the completion port. Usually the number of bytes
-        transferred in this operation
-
-     pOverlapped
-        A pointer value posted to the completion port. Usually a pointer to the
-        OVERLAPPED structure
-
-    Return Value:
-        MPI error value indicating the result of the "logical" async function.
-        This value is meaningful only when the completion processor returns TRUE.
-*/
-typedef
-int
-(__cdecl * MPIU_ExCompletionProcessor)(
-    DWORD BytesTransferred,
-    PVOID pOverlapped
-    );
-
-
-/*
-    MPIU_ExRegisterCompletionProcessor
-
-    Register a completion processor for a specific Key.
-    N.B. Current implementation supports keys 0 - 3, where key 0/1 is reserved.
-*/
-void
-MPIU_ExRegisterCompletionProcessor(
-    ULONG_PTR Key,
-    MPIU_ExCompletionProcessor pfnCompletionProcessor
-    );
-
-/* Predefined Completion processor keys */
-#define MPIU_EX_GENERIC_COMP_PROC_KEY   0x0
-#define MPIU_EX_WIN32_COMP_PROC_KEY     0x1
-
-/*
-    MPIU_ExRegisterNextCompletionProcessor
-
-    Register the next completion processor and return the Key.
-    Returns an MPI error code on error
-    N.B. Current implementation supports keys 0 - 3, where key 0 is reserved.
-*/
-int
-MPIU_ExRegisterNextCompletionProcessor(
-    ULONG_PTR *Key,
-    MPIU_ExCompletionProcessor pfnCompletionProcessor
-    );
-
-/*
-    MPIU_ExUnregisterCompletionProcessor
-
-    Remove a registered completion processor
-*/
-void
-MPIU_ExUnregisterCompletionProcessor(
-    ULONG_PTR Key
-    );
-
-
-/*
-    MPIU_ExPostCompletion
-
-    Post an event completion to the completion queue. The appropriate
-    completion processor will be invoked by ExProcessCompletions thread
-    with the passed in parameters.
-*/
-void
-MPIU_ExPostCompletion(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR Key,
-    PVOID pOverlapped,
-    DWORD BytesTransferred
-    );
-
-
-/*
-    MPIU_ExGetPortValue
-
-    Returns the value of the completion queue handle
-*/
-ULONG
-MPIU_ExGetPortValue(
-    MPIU_ExSetHandle_t Set
-    );
-
-/*
-    MPIU_ExProcessCompletions
-
-    Process all completion event types by invoking the appropriate completion
-    processor function. This routine continues to process all events until an
-    asynchronous sequence is complete (function with several async stages).
-    If the caller indicated "no blocking" this routine will exit when no more
-    events to process are available, regardles of the completion processor
-    indication to continue.
-
-    Parameters:
-        fWaitForEventAndStatus -
-            If Set to TRUE, Block until an event sequence is complete
-            If Set to FALSE, Does not block for an event seq to complete
-            On return, if set to TRUE, An event seq was completed
-            On return, if set to FALSE, An event seq did not complete
-
-    Return Value:
-        The result of the asynchronous function last to complete.
-        if fWaitForEventAndStatus is FALSE and no more events to process, the value
-        returned is MPI_SUCCESS.
-*/
-int
-MPIU_ExProcessCompletions(
-    MPIU_ExSetHandle_t Set,
-    BOOL *fWaitForEventAndStatus
-    );
-
-/*
-    MPIU_ExInitialize
-
-    Initialize the completion queue. This function can only be called once before
-    before Finialize.
-*/
-int
-MPIU_ExInitialize(
-    void
-    );
-
-
-/*
-    MPIU_ExFinitialize
-
-    Close the completion queue progress engine. This function can only be called
-    once.
-*/
-int
-MPIU_ExFinalize(
-    void
-    );
-
-
-/*----------------------------------------------------------------------------
-//
-// The Executive Key-Zero completion processor
-//
-// Overview:
-// The Key-Zero completion processor enables the users of the Executive to
-// associate a different completion routine with each operation rather than
-// use a single completion processor per handle. The Key-Zero processor works
-// with user supplied OVERLAPPED structure. It cannot work with system generated
-// completion events (e.g., Job Object enets), or other external events.
-//
-// The Key-Zero processor uses the EXOVERLAPPED data structure which embeds the
-// user success and failure completion routines. When the Key-Zero completion
-// processor is invoked it calls the user success or failure routine base on
-// the result of the async operation.
-//
-//----------------------------------------------------------------------------
-
-//
-// MPIU_ExCompletionRoutine function prototype
-//
-// The ExCompletionRoutine callback routine is invoked by the built-in Key-Zero
-// completion processor. The information required for processing the event is
-// packed with the EXOVERLAPED structure and can be accessed with the Ex utility
-// functions. The callback routine returns the logical error value.
-//
-// Parameters:
-//   pOverlapped
-//      A pointer to an EXOVERLAPPED structure associated with the completed
-//      operation. This pointer is used to extract the caller context with the
-//      CONTAINING_RECORD macro.
-//
-// Return Value:
-//      MPI error value indicating the result of the "logical" async function.
-*/
-struct MPIU_EXOVERLAPPED;
-
-typedef
-int
-(* MPIU_ExCompletionRoutine)(
-    struct MPIU_EXOVERLAPPED* pOverlapped
-    );
-
-
-/*
-    struct MPIU_EXOVERLAPPED
-
-    The data structure used for Key-Zero completions processing. The pfnSuccess
-    and pfnFailure are set by the caller before calling an async operation.
-    The pfnSuccess is called if the async operation was successful.
-    The pfnFailure is called if the async operation was unsuccessful.
-*/
-typedef struct MPIU_EXOVERLAPPED {
-
-    OVERLAPPED ov;
-    MPIU_ExCompletionRoutine pfnSuccess;
-    MPIU_ExCompletionRoutine pfnFailure;
-    /*  FIXME: Should we allow a user_ctxt here ?
-        This will allow us to implement finding the record containing executive
-        overlapped structure in systems/compilers that don't implement mechanisms
-        similar to CONTAINING_RECORD.
-     */
-    /* void *user_ctxt; */
-
-} MPIU_EXOVERLAPPED;
-
-/* Get pointer to OS overlapped from EX overlapped pointer*/
-#define MPIU_EX_GET_OVERLAPPED_PTR(ex_ovp) (&((ex_ovp)->ov))
-
-/*
-    MPIU_ExInitOverlapped
-
-    Initialize the success & failure callback function fields
-    Rest the hEvent field of the OVERLAPPED, make it ready for use with the OS
-    overlapped API's.
-*/
-
-static
-inline
-void
-MPIU_ExInitOverlapped(
-    MPIU_EXOVERLAPPED* pOverlapped,
-    MPIU_ExCompletionRoutine pfnSuccess,
-    MPIU_ExCompletionRoutine pfnFailure
-    )
-{
-    pOverlapped->ov.hEvent = NULL;
-    pOverlapped->pfnSuccess = pfnSuccess;
-    pOverlapped->pfnFailure = pfnFailure;
-}
-
-/*
-    MPIU_ExReInitOverlapped ==> ONLY REQD for manual events
-
-    Re-Initialize the success & failure callback function fields
-
-    Re-init the event
-*/
-
-static
-inline
-BOOL
-MPIU_ExReInitOverlapped(
-    MPIU_EXOVERLAPPED* pOverlapped,
-    MPIU_ExCompletionRoutine pfnSuccess,
-    MPIU_ExCompletionRoutine pfnFailure
-    )
-{
-    /* Re-init succ/fail handlers only if they are ~null */
-    if(pfnSuccess){
-        pOverlapped->pfnSuccess = pfnSuccess;
-    }
-    if(pfnFailure){
-        pOverlapped->pfnFailure = pfnFailure;
-    }
-
-    if(pOverlapped->ov.hEvent)
-        return(ResetEvent(pOverlapped->ov.hEvent));
-    else
-        return TRUE;
-}
-
-/*
-    MPIU_ExPostOverlapped
-
-    Post an EXOVERLAPPED completion to the completion queue to be invoked by
-    ExProcessCompletions.
-*/
-void
-MPIU_ExPostOverlapped(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR key,
-    MPIU_EXOVERLAPPED* pOverlapped
-    );
-
-
-/*
-    MPIU_ExPostOverlappedResult
-
-    Post an EXOVERLAPPED completion to the completion queue to be invoked by
-    ExProcessCompletions. Set the status and bytes transferred count.
-*/
-static
-inline
-void
-MPIU_ExPostOverlappedResult(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR key,
-    MPIU_EXOVERLAPPED* pOverlapped,
-    HRESULT Status,
-    DWORD BytesTransferred
-    )
-{
-    pOverlapped->ov.Internal = Status;
-    pOverlapped->ov.InternalHigh = BytesTransferred;
-    MPIU_ExPostOverlapped(Set, key, pOverlapped);
-}
-
-
-/*
-    MPIU_ExAttachHandle
-
-    Associate an OS handle with the Executive completion queue. All asynchronous
-    operations using the attached handle are processed with the Key-Zero
-    completion processor.
-    Use an EXOVERLAPPED data structure when calling an asynchronous operation
-    with that Handle.
-*/
-void
-MPIU_ExAttachHandle(
-    MPIU_ExSetHandle_t Set,
-    ULONG_PTR key,
-    HANDLE Handle
-    );
-
-
-/*
-    MPIU_ExGetBytesTransferred
-
-    Get the number of bytes transferred from the overlapped structure
-*/
-static
-inline
-DWORD
-MPIU_ExGetBytesTransferred(
-    MPIU_EXOVERLAPPED* pOverlapped
-    )
-{
-    return (DWORD)pOverlapped->ov.InternalHigh;
-}
-
-#define MPIU_EX_STATUS_IO_ABORT  (0x80000000 | (FACILITY_WIN32 << 16) | ERROR_OPERATION_ABORTED)
-#define MPIU_EX_STATUS_TO_ERRNO(ex_status) HRESULT_CODE(~0x80000000 & ex_status)
-typedef HRESULT MPIU_Ex_status_t;
-
-/*
-    MPIU_ExGetStatus
-
-    Get the status return value from the overlapped structure
-*/
-static
-inline
-HRESULT
-MPIU_ExGetStatus(
-    MPIU_EXOVERLAPPED* pOverlapped
-    )
-{
-    return (HRESULT)pOverlapped->ov.Internal;
-}
-
-
-/*
-    MPIU_ExCallSuccess
-
-    Set the completion status and bytes transferred and execute the EXOVERLAPPED
-    Success completion routine
-*/
-static
-inline
-int
-MPIU_ExCallSuccess(
-    MPIU_EXOVERLAPPED* pOverlapped,
-    HRESULT Status,
-    DWORD BytesTransferred
-    )
-{
-    pOverlapped->ov.Internal = Status;
-    pOverlapped->ov.InternalHigh = BytesTransferred;
-    return pOverlapped->pfnSuccess(pOverlapped);
-}
-
-
-/*
-    MPIU_ExCallFailure
-
-    Set the completion status and bytes transferred and execute the EXOVERLAPPED
-    Failure completion routine
-*/
-static
-inline
-int
-MPIU_ExCallFailure(
-    MPIU_EXOVERLAPPED* pOverlapped,
-    HRESULT Status,
-    DWORD BytesTransferred
-    )
-{
-    pOverlapped->ov.Internal = Status;
-    pOverlapped->ov.InternalHigh = BytesTransferred;
-    return pOverlapped->pfnFailure(pOverlapped);
-}
-
-/*
-    MPIU_ExCompleteOverlapped
-
-    Execute the EXOVERLAPPED success or failure completion routine based
-    on the overlapped status value.
-*/
-static
-inline
-int
-MPIU_ExCompleteOverlapped(
-    MPIU_EXOVERLAPPED* pOverlapped, int BytesTransferred
-    )
-{
-    pOverlapped->ov.InternalHigh = BytesTransferred;
-
-    if(SUCCEEDED(MPIU_ExGetStatus(pOverlapped))){
-        return pOverlapped->pfnSuccess(pOverlapped);
-    }
-    else{
-        return pOverlapped->pfnFailure(pOverlapped);
-    }
-}
-
-/*
-    MPIU_ExWin32CompleteOverlapped
-
-    Execute the EXOVERLAPPED success or failure completion routine based
-    on the overlapped status value.
-*/
-static
-inline
-int
-MPIU_ExWin32CompleteOverlapped(
-    MPIU_EXOVERLAPPED* pOverlapped, int BytesTransferred
-    )
-{
-    pOverlapped->ov.InternalHigh = BytesTransferred;
-
-    if(SUCCEEDED(MPIU_ExGetStatus(pOverlapped))){
-        pOverlapped->ov.Internal = S_OK;
-        return pOverlapped->pfnSuccess(pOverlapped);
-    }
-    else{
-        pOverlapped->ov.Internal = HRESULT_FROM_WIN32(GetLastError());
-        return pOverlapped->pfnFailure(pOverlapped);
-    }
-}
-
-#endif /* MPIU_EX_H_INCLUDED */
diff --git a/src/util/multichannel/Makefile.sm b/src/util/multichannel/Makefile.sm
deleted file mode 100644
index 6a98844..0000000
--- a/src/util/multichannel/Makefile.sm
+++ /dev/null
@@ -1 +0,0 @@
-win_sources = mpi.c
diff --git a/src/util/multichannel/mpi.c b/src/util/multichannel/mpi.c
deleted file mode 100644
index 2ce9eaf..0000000
--- a/src/util/multichannel/mpi.c
+++ /dev/null
@@ -1,7285 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
-/*
- *
- *  (C) 2001 by Argonne National Laboratory.
- *      See COPYRIGHT in top-level directory.
- *
- * Portions of this code were written by Microsoft. Those portions are
- * Copyright (c) 2007 Microsoft Corporation. Microsoft grants
- * permission to use, reproduce, prepare derivative works, and to
- * redistribute to others. The code is licensed "as is." The User
- * bears the risk of using it. Microsoft gives no express warranties,
- * guarantees or conditions. To the extent permitted by law, Microsoft
- * excludes the implied warranties of merchantability, fitness for a
- * particular purpose and non-infringement.
- */
-
-#include "mpi.h"
-#include "mpi_attr.h"
-#include "mpi_lang.h"
-#include <winsock2.h>
-#include <windows.h>
-#include "mpichconf.h"
-#include "mpiu_timer.h"
-#include "mpimem.h"
-#include <stdio.h>
-#include <stdarg.h>
-#define MPIU_UNREFERENCED_ARG(a) a
-
-/*
- * Windows only mpi binding
- *
- * This file implements an mpi binding that calls another dynamically loaded mpi binding.
- * The environment variables MPI_DLL_NAME and MPICH_CHANNEL control which library should be loaded.
- * The default library is mpich.dll or mpichd.dll.
- * A wrapper dll can also be named to replace only the MPI functions using the MPI_WRAP_DLL_NAME
- * environment variable.
- *
- * The motivation for this binding is to allow compiled mpi applications to be able
- * to use different implementations of mpich at run-time without re-linking the application.
- * This way mpiexec or the user can choose the best channel to use at run-time.
- *
- * For example, mpiexec may choose the shm channel for up to 8 processes on a single node
- * and the sock channel for larger and multi-node jobs.
- * Example 2: A user has an infiniband cluster and wants the ib channel to be the default.
- * So the user sets the mpiexec option to use the ib channel as the default and then all
- * jobs run on the cluster use the ib channel without modification or re-linking.
- *
- * A profiled or logged mpi implementation may be selected at run-time.  If the mpi dll is itself
- * profiled then the dll can be specified just as any other dll would be named.  Or a wrapper
- * dll can be named to work in conjunction with the mpi dll using the MPI_WRAP_DLL_NAME environment
- * variable.  The wrapper dll will implement the MPI interface and the mpi dll will implement the 
- * PMPI interface.
- *
- * The user can run a job and then decide to run the job again and produce a log file.  All that
- * needs to be done is specify the logged version of the mpich channel or a wrapper dll like mpe
- * and a log file will be produced.
- * Examples:
- * mpiexec -n 4 cpi
- * mpiexec -env MPICH_CHANNEL ib -n 4 cpi
- * mpiexec -env MPI_DLL_NAME mpichp.dll -n 4 cpi
- * mpiexec -env MPI_WRAP_DLL_NAME mpichmped.dll -n 4 cpi
- * mpiexec -env MPICH_CHANNEL ib -env MPI_WRAP_DLL_NAME mpichmped.dll -n 4 cpi
- *
- */
-
-#define MPI_ENV_DLL_NAME          "MPI_DLL_NAME"
-#define MPI_ENV_DLL_PATH          "MPI_DLL_PATH"
-#define MPI_ENV_CHANNEL_NAME      "MPICH_CHANNEL"
-#define MPI_ENV_MPIWRAP_DLL_NAME  "MPI_WRAP_DLL_NAME"
-#ifdef _DEBUG
-#define MPI_DEFAULT_DLL_NAME      "mpichnemesisd.dll"
-#define MPI_DEFAULT_WRAP_DLL_NAME "mpichmped.dll"
-#define DLL_FORMAT_STRING         "mpich%sd.dll"
-#else
-#define MPI_DEFAULT_DLL_NAME      "mpichnemesis.dll"
-#define MPI_DEFAULT_WRAP_DLL_NAME "mpichmpe.dll"
-#define DLL_FORMAT_STRING         "mpich%s.dll"
-#endif
-#define MAX_DLL_NAME              100
-
-/* FIXME: Remove dlls without a channel token string */
-#ifdef _DEBUG
-#define MPI_SOCK_CHANNEL_DLL_NAME   "mpichd.dll"
-#else
-#define MPI_SOCK_CHANNEL_DLL_NAME   "mpich.dll"
-#endif
-
-MPIU_DLL_SPEC MPI_Fint *MPI_F_STATUS_IGNORE = 0;
-MPIU_DLL_SPEC MPI_Fint *MPI_F_STATUSES_IGNORE = 0;
-
-static struct fn_table
-{
-    /* MPI */
-    MPI_Comm (*MPI_Comm_f2c)(MPI_Fint);
-    MPI_Datatype (*MPI_Type_f2c)(MPI_Fint);
-    MPI_File (*MPI_File_f2c)(MPI_Fint);
-    MPI_Fint (*MPI_Comm_c2f)(MPI_Comm);
-    MPI_Fint (*MPI_File_c2f)(MPI_File);
-    MPI_Fint (*MPI_Group_c2f)(MPI_Group);
-    MPI_Fint (*MPI_Info_c2f)(MPI_Info);
-    MPI_Fint (*MPI_Op_c2f)(MPI_Op);
-    MPI_Fint (*MPI_Request_c2f)(MPI_Request);
-    MPI_Fint (*MPI_Type_c2f)(MPI_Datatype);
-    MPI_Fint (*MPI_Win_c2f)(MPI_Win);
-    MPI_Group (*MPI_Group_f2c)(MPI_Fint);
-    MPI_Info (*MPI_Info_f2c)(MPI_Fint);
-    MPI_Op (*MPI_Op_f2c)(MPI_Fint);
-    MPI_Request (*MPI_Request_f2c)(MPI_Fint);
-    MPI_Win (*MPI_Win_f2c)(MPI_Fint);
-    int (*MPI_File_open)(MPI_Comm, char *, int, MPI_Info, MPI_File *);
-    int (*MPI_File_close)(MPI_File *);
-    int (*MPI_File_delete)(char *, MPI_Info);
-    int (*MPI_File_set_size)(MPI_File, MPI_Offset);
-    int (*MPI_File_preallocate)(MPI_File, MPI_Offset);
-    int (*MPI_File_get_size)(MPI_File, MPI_Offset *);
-    int (*MPI_File_get_group)(MPI_File, MPI_Group *);
-    int (*MPI_File_get_amode)(MPI_File, int *);
-    int (*MPI_File_set_info)(MPI_File, MPI_Info);
-    int (*MPI_File_get_info)(MPI_File, MPI_Info *);
-    int (*MPI_File_set_view)(MPI_File, MPI_Offset, MPI_Datatype, MPI_Datatype, char *, MPI_Info);
-    int (*MPI_File_get_view)(MPI_File, MPI_Offset *, MPI_Datatype *, MPI_Datatype *, char *);
-    int (*MPI_File_read_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_read_at_all)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_write_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_write_at_all)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_iread_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*MPI_File_iwrite_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*MPI_File_read)(MPI_File, void *, int, MPI_Datatype, MPI_Status *); 
-    int (*MPI_File_read_all)(MPI_File, void *, int, MPI_Datatype, MPI_Status *); 
-    int (*MPI_File_write)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_write_all)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_iread)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *); 
-    int (*MPI_File_iwrite)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*MPI_File_seek)(MPI_File, MPI_Offset, int);
-    int (*MPI_File_get_position)(MPI_File, MPI_Offset *);
-    int (*MPI_File_get_byte_offset)(MPI_File, MPI_Offset, MPI_Offset *);
-    int (*MPI_File_read_shared)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_write_shared)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_iread_shared)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*MPI_File_iwrite_shared)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*MPI_File_read_ordered)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_write_ordered)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*MPI_File_seek_shared)(MPI_File, MPI_Offset, int);
-    int (*MPI_File_get_position_shared)(MPI_File, MPI_Offset *);
-    int (*MPI_File_read_at_all_begin)(MPI_File, MPI_Offset, void *, int, MPI_Datatype);
-    int (*MPI_File_read_at_all_end)(MPI_File, void *, MPI_Status *);
-    int (*MPI_File_write_at_all_begin)(MPI_File, MPI_Offset, void *, int, MPI_Datatype);
-    int (*MPI_File_write_at_all_end)(MPI_File, void *, MPI_Status *);
-    int (*MPI_File_read_all_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*MPI_File_read_all_end)(MPI_File, void *, MPI_Status *);
-    int (*MPI_File_write_all_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*MPI_File_write_all_end)(MPI_File, void *, MPI_Status *);
-    int (*MPI_File_read_ordered_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*MPI_File_read_ordered_end)(MPI_File, void *, MPI_Status *);
-    int (*MPI_File_write_ordered_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*MPI_File_write_ordered_end)(MPI_File, void *, MPI_Status *);
-    int (*MPI_File_get_type_extent)(MPI_File, MPI_Datatype, MPI_Aint *);
-    int (*MPI_Register_datarep)(char *, MPI_Datarep_conversion_function *, MPI_Datarep_conversion_function *, MPI_Datarep_extent_function *, void *);
-    int (*MPI_File_set_atomicity)(MPI_File, int);
-    int (*MPI_File_get_atomicity)(MPI_File, int *);
-    int (*MPI_File_sync)(MPI_File);
-    int (*MPI_Send)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*MPI_Recv)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
-    int (*MPI_Get_count)(MPI_Status *, MPI_Datatype, int *);
-    int (*MPI_Bsend)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*MPI_Ssend)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*MPI_Rsend)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*MPI_Buffer_attach)( void*, int);
-    int (*MPI_Buffer_detach)( void*, int *);
-    int (*MPI_Isend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*MPI_Ibsend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*MPI_Issend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*MPI_Irsend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*MPI_Irecv)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*MPI_Wait)(MPI_Request *, MPI_Status *);
-    int (*MPI_Test)(MPI_Request *, int *, MPI_Status *);
-    int (*MPI_Request_free)(MPI_Request *);
-    int (*MPI_Waitany)(int, MPI_Request *, int *, MPI_Status *);
-    int (*MPI_Testany)(int, MPI_Request *, int *, int *, MPI_Status *);
-    int (*MPI_Waitall)(int, MPI_Request *, MPI_Status *);
-    int (*MPI_Testall)(int, MPI_Request *, int *, MPI_Status *);
-    int (*MPI_Waitsome)(int, MPI_Request *, int *, int *, MPI_Status *);
-    int (*MPI_Testsome)(int, MPI_Request *, int *, int *, MPI_Status *);
-    int (*MPI_Iprobe)(int, int, MPI_Comm, int *, MPI_Status *);
-    int (*MPI_Probe)(int, int, MPI_Comm, MPI_Status *);
-    int (*MPI_Cancel)(MPI_Request *);
-    int (*MPI_Test_cancelled)(MPI_Status *, int *);
-    int (*MPI_Send_init)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*MPI_Bsend_init)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
-    int (*MPI_Ssend_init)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
-    int (*MPI_Rsend_init)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
-    int (*MPI_Recv_init)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *);
-    int (*MPI_Start)(MPI_Request *);
-    int (*MPI_Startall)(int, MPI_Request *);
-    int (*MPI_Sendrecv)(void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
-    int (*MPI_Sendrecv_replace)(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
-    int (*MPI_Type_contiguous)(int, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_vector)(int, int, int, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_hvector)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_indexed)(int, int *, int *, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_hindexed)(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_struct)(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
-    int (*MPI_Address)(void*, MPI_Aint *);
-    int (*MPI_Type_extent)(MPI_Datatype, MPI_Aint *);
-    int (*MPI_Type_size)(MPI_Datatype, int *);
-    int (*MPI_Type_lb)(MPI_Datatype, MPI_Aint *);
-    int (*MPI_Type_ub)(MPI_Datatype, MPI_Aint *);
-    int (*MPI_Type_commit)(MPI_Datatype *);
-    int (*MPI_Type_free)(MPI_Datatype *);
-    int (*MPI_Get_elements)(MPI_Status *, MPI_Datatype, int *);
-    int (*MPI_Pack)(void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm);
-    int (*MPI_Unpack)(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm);
-    int (*MPI_Pack_size)(int, MPI_Datatype, MPI_Comm, int *);
-    int (*MPI_Barrier)(MPI_Comm );
-    int (*MPI_Bcast)(void*, int, MPI_Datatype, int, MPI_Comm );
-    int (*MPI_Gather)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm); 
-    int (*MPI_Gatherv)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, int, MPI_Comm); 
-    int (*MPI_Scatter)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
-    int (*MPI_Scatterv)(void* , int *, int *,  MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
-    int (*MPI_Allgather)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
-    int (*MPI_Allgatherv)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm);
-    int (*MPI_Alltoall)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
-    int (*MPI_Alltoallv)(void* , int *, int *, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm);
-    int (*MPI_Reduce)(void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
-    int (*MPI_Reduce_local) (void *, void *, int, MPI_Datatype, MPI_Op);
-    int (*MPI_Op_create)(MPI_User_function *, int, MPI_Op *);
-    int (*MPI_Op_free)( MPI_Op *);
-    int (*MPI_Op_commutative)(MPI_Op , int *);
-    int (*MPI_Allreduce)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*MPI_Reduce_scatter)(void* , void*, int *, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*MPI_Reduce_scatter_block)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*MPI_Scan)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm );
-    int (*MPI_Group_size)(MPI_Group, int *);
-    int (*MPI_Group_rank)(MPI_Group, int *);
-    int (*MPI_Group_translate_ranks )(MPI_Group, int, int *, MPI_Group, int *);
-    int (*MPI_Group_compare)(MPI_Group, MPI_Group, int *);
-    int (*MPI_Comm_group)(MPI_Comm, MPI_Group *);
-    int (*MPI_Group_union)(MPI_Group, MPI_Group, MPI_Group *);
-    int (*MPI_Group_intersection)(MPI_Group, MPI_Group, MPI_Group *);
-    int (*MPI_Group_difference)(MPI_Group, MPI_Group, MPI_Group *);
-    int (*MPI_Group_incl)(MPI_Group, int, int *, MPI_Group *);
-    int (*MPI_Group_excl)(MPI_Group, int, int *, MPI_Group *);
-    int (*MPI_Group_range_incl)(MPI_Group, int, int [][3], MPI_Group *);
-    int (*MPI_Group_range_excl)(MPI_Group, int, int [][3], MPI_Group *);
-    int (*MPI_Group_free)(MPI_Group *);
-    int (*MPI_Comm_size)(MPI_Comm, int *);
-    int (*MPI_Comm_rank)(MPI_Comm, int *);
-    int (*MPI_Comm_compare)(MPI_Comm, MPI_Comm, int *);
-    int (*MPI_Comm_dup)(MPI_Comm, MPI_Comm *);
-    int (*MPI_Comm_create)(MPI_Comm, MPI_Group, MPI_Comm *);
-    int (*MPI_Comm_split)(MPI_Comm, int, int, MPI_Comm *);
-    int (*MPI_Comm_free)(MPI_Comm *);
-    int (*MPI_Comm_test_inter)(MPI_Comm, int *);
-    int (*MPI_Comm_remote_size)(MPI_Comm, int *);
-    int (*MPI_Comm_remote_group)(MPI_Comm, MPI_Group *);
-    int (*MPI_Intercomm_create)(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm * );
-    int (*MPI_Intercomm_merge)(MPI_Comm, int, MPI_Comm *);
-    int (*MPI_Keyval_create)(MPI_Copy_function *, MPI_Delete_function *, int *, void*);
-    int (*MPI_Keyval_free)(int *);
-    int (*MPI_Attr_put)(MPI_Comm, int, void*);
-    int (*MPI_Attr_get)(MPI_Comm, int, void *, int *);
-    int (*MPI_Attr_delete)(MPI_Comm, int);
-    int (*MPI_Topo_test)(MPI_Comm, int *);
-    int (*MPI_Cart_create)(MPI_Comm, int, int *, int *, int, MPI_Comm *);
-    int (*MPI_Dims_create)(int, int, int *);
-    int (*MPI_Graph_create)(MPI_Comm, int, int *, int *, int, MPI_Comm *);
-    int (*MPI_Dist_graph_create)(MPI_Comm, int, int [], int [], int [], int [],
-                            MPI_Info, int, MPI_Comm *);
-    int (*MPI_Dist_graph_create_adjacent)(MPI_Comm, int, int [], int [], int ,
-                            int [], int [], MPI_Info, int, MPI_Comm *);
-    int (*MPI_Graphdims_get)(MPI_Comm, int *, int *);
-    int (*MPI_Graph_get)(MPI_Comm, int, int, int *, int *);
-    int (*MPI_Cartdim_get)(MPI_Comm, int *);
-    int (*MPI_Cart_get)(MPI_Comm, int, int *, int *, int *);
-    int (*MPI_Cart_rank)(MPI_Comm, int *, int *);
-    int (*MPI_Cart_coords)(MPI_Comm, int, int, int *);
-    int (*MPI_Graph_neighbors_count)(MPI_Comm, int, int *);
-    int (*MPI_Graph_neighbors)(MPI_Comm, int, int, int *);
-    int (*MPI_Dist_graph_neighbors)(MPI_Comm, int, int [], int [],
-                             int, int [], int []);
-    int (*MPI_Dist_graph_neighbors_count)(MPI_Comm, int *, int *, int *);
-    int (*MPI_Cart_shift)(MPI_Comm, int, int, int *, int *);
-    int (*MPI_Cart_sub)(MPI_Comm, int *, MPI_Comm *);
-    int (*MPI_Cart_map)(MPI_Comm, int, int *, int *, int *);
-    int (*MPI_Graph_map)(MPI_Comm, int, int *, int *, int *);
-    int (*MPI_Get_processor_name)(char *, int *);
-    int (*MPI_Get_version)(int *, int *);
-    int (*MPI_Errhandler_create)(MPI_Handler_function *, MPI_Errhandler *);
-    int (*MPI_Errhandler_set)(MPI_Comm, MPI_Errhandler);
-    int (*MPI_Errhandler_get)(MPI_Comm, MPI_Errhandler *);
-    int (*MPI_Errhandler_free)(MPI_Errhandler *);
-    int (*MPI_Error_string)(int, char *, int *);
-    int (*MPI_Error_class)(int, int *);
-    double (*MPI_Wtime)(void);
-    double (*MPI_Wtick)(void);
-    int (*MPI_Init)(int *, char ***);
-    int (*MPI_Finalize)(void);
-    int (*MPI_Initialized)(int *);
-    int (*MPI_Abort)(MPI_Comm, int);
-    int (*MPI_Pcontrol)(const int, ...);
-    int (*MPI_DUP_FN )( MPI_Comm, int, void *, void *, void *, int * );
-    int (*MPI_Close_port)(char *);
-    int (*MPI_Comm_accept)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
-    int (*MPI_Comm_connect)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
-    int (*MPI_Comm_disconnect)(MPI_Comm *);
-    int (*MPI_Comm_get_parent)(MPI_Comm *);
-    int (*MPI_Comm_join)(int, MPI_Comm *);
-    int (*MPI_Comm_spawn)(char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *, int []);
-    int (*MPI_Comm_spawn_multiple)(int, char *[], char **[], int [], MPI_Info [], int, MPI_Comm, MPI_Comm *, int []); 
-    int (*MPI_Lookup_name)(char *, MPI_Info, char *);
-    int (*MPI_Open_port)(MPI_Info, char *);
-    int (*MPI_Publish_name)(char *, MPI_Info, char *);
-    int (*MPI_Unpublish_name)(char *, MPI_Info, char *);
-    int (*MPI_Accumulate)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,  MPI_Op, MPI_Win);
-    int (*MPI_Get)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win);
-    int (*MPI_Put)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win);
-    int (*MPI_Win_complete)(MPI_Win);
-    int (*MPI_Win_create)(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
-    int (*MPI_Win_fence)(int, MPI_Win);
-    int (*MPI_Win_free)(MPI_Win *);
-    int (*MPI_Win_get_group)(MPI_Win, MPI_Group *);
-    int (*MPI_Win_lock)(int, int, int, MPI_Win);
-    int (*MPI_Win_post)(MPI_Group, int, MPI_Win);
-    int (*MPI_Win_start)(MPI_Group, int, MPI_Win);
-    int (*MPI_Win_test)(MPI_Win, int *);
-    int (*MPI_Win_unlock)(int, MPI_Win);
-    int (*MPI_Win_wait)(MPI_Win);
-    int (*MPI_Alltoallw)(void *, int [], int [], MPI_Datatype [], void *, int [], int [], MPI_Datatype [], MPI_Comm);
-    int (*MPI_Exscan)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*MPI_Add_error_class)(int *);
-    int (*MPI_Add_error_code)(int, int *);
-    int (*MPI_Add_error_string)(int, char *);
-    int (*MPI_Comm_call_errhandler)(MPI_Comm, int);
-    int (*MPI_Comm_create_keyval)(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, int *, void *);
-    int (*MPI_Comm_delete_attr)(MPI_Comm, int);
-    int (*MPI_Comm_free_keyval)(int *);
-    int (*MPI_Comm_get_attr)(MPI_Comm, int, void *, int *);
-    int (*MPI_Comm_get_name)(MPI_Comm, char *, int *);
-    int (*MPI_Comm_set_attr)(MPI_Comm, int, void *);
-    int (*MPI_Comm_set_name)(MPI_Comm, char *);
-    int (*MPI_File_call_errhandler)(MPI_File, int);
-    int (*MPI_Grequest_complete)(MPI_Request);
-    int (*MPI_Grequest_start)(MPI_Grequest_query_function *, MPI_Grequest_free_function *, MPI_Grequest_cancel_function *, void *, MPI_Request *);
-    int (*MPI_Init_thread)(int *, char ***, int, int *);
-    int (*MPI_Is_thread_main)(int *);
-    int (*MPI_Query_thread)(int *);
-    int (*MPI_Status_set_cancelled)(MPI_Status *, int);
-    int (*MPI_Status_set_elements)(MPI_Status *, MPI_Datatype, int);
-    int (*MPI_Type_create_keyval)(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *, int *, void *);
-    int (*MPI_Type_delete_attr)(MPI_Datatype, int);
-    int (*MPI_Type_dup)(MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_free_keyval)(int *);
-    int (*MPI_Type_get_attr)(MPI_Datatype, int, void *, int *);
-    int (*MPI_Type_get_contents)(MPI_Datatype, int, int, int, int [], MPI_Aint [], MPI_Datatype []);
-    int (*MPI_Type_get_envelope)(MPI_Datatype, int *, int *, int *, int *);
-    int (*MPI_Type_get_name)(MPI_Datatype, char *, int *);
-    int (*MPI_Type_set_attr)(MPI_Datatype, int, void *);
-    int (*MPI_Type_set_name)(MPI_Datatype, char *);
-    int (*MPI_Type_match_size)( int, int, MPI_Datatype *);
-    int (*MPI_Win_call_errhandler)(MPI_Win, int);
-    int (*MPI_Win_create_keyval)(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *, int *, void *);
-    int (*MPI_Win_delete_attr)(MPI_Win, int);
-    int (*MPI_Win_free_keyval)(int *);
-    int (*MPI_Win_get_attr)(MPI_Win, int, void *, int *);
-    int (*MPI_Win_get_name)(MPI_Win, char *, int *);
-    int (*MPI_Win_set_attr)(MPI_Win, int, void *);
-    int (*MPI_Win_set_name)(MPI_Win, char *);
-    int (*MPI_Alloc_mem)(MPI_Aint, MPI_Info info, void *baseptr);
-    int (*MPI_Comm_create_errhandler)(MPI_Comm_errhandler_function *, MPI_Errhandler *);
-    int (*MPI_Comm_get_errhandler)(MPI_Comm, MPI_Errhandler *);
-    int (*MPI_Comm_set_errhandler)(MPI_Comm, MPI_Errhandler);
-    int (*MPI_File_create_errhandler)(MPI_File_errhandler_function *, MPI_Errhandler *);
-    int (*MPI_File_get_errhandler)(MPI_File, MPI_Errhandler *);
-    int (*MPI_File_set_errhandler)(MPI_File, MPI_Errhandler);
-    int (*MPI_Finalized)(int *);
-    int (*MPI_Free_mem)(void *);
-    int (*MPI_Get_address)(void *, MPI_Aint *);
-    int (*MPI_Info_create)(MPI_Info *);
-    int (*MPI_Info_delete)(MPI_Info, char *);
-    int (*MPI_Info_dup)(MPI_Info, MPI_Info *);
-    int (*MPI_Info_free)(MPI_Info *info);
-    int (*MPI_Info_get)(MPI_Info, char *, int, char *, int *);
-    int (*MPI_Info_get_nkeys)(MPI_Info, int *);
-    int (*MPI_Info_get_nthkey)(MPI_Info, int, char *);
-    int (*MPI_Info_get_valuelen)(MPI_Info, char *, int *, int *);
-    int (*MPI_Info_set)(MPI_Info, char *, char *);
-    int (*MPI_Pack_external)(char *, void *, int, MPI_Datatype, void *, MPI_Aint, MPI_Aint *); 
-    int (*MPI_Pack_external_size)(char *, int, MPI_Datatype, MPI_Aint *); 
-    int (*MPI_Request_get_status)(MPI_Request, int *, MPI_Status *);
-    int (*MPI_Status_c2f)(MPI_Status *, MPI_Fint *);
-    int (*MPI_Status_f2c)(MPI_Fint *, MPI_Status *);
-    int (*MPI_Type_create_darray)(int, int, int, int [], int [], int [], int [], int, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_create_hindexed)(int, int [], MPI_Aint [], MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_create_hvector)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_create_indexed_block)(int, int, int [], MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_create_hindexed_block)(int, int, const int [], MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_create_resized)(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *);
-    int (*MPI_Type_create_struct)(int, int [], MPI_Aint [], MPI_Datatype [], MPI_Datatype *);
-    int (*MPI_Type_create_subarray)(int, int [], int [], int [], int, MPI_Datatype, MPI_Datatype *);
-    int (*MPI_Type_get_extent)(MPI_Datatype, MPI_Aint *, MPI_Aint *);
-    int (*MPI_Type_get_true_extent)(MPI_Datatype, MPI_Aint *, MPI_Aint *);
-    int (*MPI_Unpack_external)(char *, void *, MPI_Aint, MPI_Aint *, void *, int, MPI_Datatype); 
-    int (*MPI_Win_create_errhandler)(MPI_Win_errhandler_function *, MPI_Errhandler *);
-    int (*MPI_Win_get_errhandler)(MPI_Win, MPI_Errhandler *);
-    int (*MPI_Win_set_errhandler)(MPI_Win, MPI_Errhandler);
-    int (*MPI_Type_create_f90_integer)( int, MPI_Datatype * );
-    int (*MPI_Type_create_f90_real)( int, int, MPI_Datatype * );
-    int (*MPI_Type_create_f90_complex)( int, int, MPI_Datatype * );
-    /* PMPI */
-    MPI_Comm (*PMPI_Comm_f2c)(MPI_Fint);
-    MPI_Datatype (*PMPI_Type_f2c)(MPI_Fint);
-    MPI_File (*PMPI_File_f2c)(MPI_Fint);
-    MPI_Fint (*PMPI_Comm_c2f)(MPI_Comm);
-    MPI_Fint (*PMPI_File_c2f)(MPI_File);
-    MPI_Fint (*PMPI_Group_c2f)(MPI_Group);
-    MPI_Fint (*PMPI_Info_c2f)(MPI_Info);
-    MPI_Fint (*PMPI_Op_c2f)(MPI_Op);
-    MPI_Fint (*PMPI_Request_c2f)(MPI_Request);
-    MPI_Fint (*PMPI_Type_c2f)(MPI_Datatype);
-    MPI_Fint (*PMPI_Win_c2f)(MPI_Win);
-    MPI_Group (*PMPI_Group_f2c)(MPI_Fint);
-    MPI_Info (*PMPI_Info_f2c)(MPI_Fint);
-    MPI_Op (*PMPI_Op_f2c)(MPI_Fint);
-    MPI_Request (*PMPI_Request_f2c)(MPI_Fint);
-    MPI_Win (*PMPI_Win_f2c)(MPI_Fint);
-    int (*PMPI_File_open)(MPI_Comm, char *, int, MPI_Info, MPI_File *);
-    int (*PMPI_File_close)(MPI_File *);
-    int (*PMPI_File_delete)(char *, MPI_Info);
-    int (*PMPI_File_set_size)(MPI_File, MPI_Offset);
-    int (*PMPI_File_preallocate)(MPI_File, MPI_Offset);
-    int (*PMPI_File_get_size)(MPI_File, MPI_Offset *);
-    int (*PMPI_File_get_group)(MPI_File, MPI_Group *);
-    int (*PMPI_File_get_amode)(MPI_File, int *);
-    int (*PMPI_File_set_info)(MPI_File, MPI_Info);
-    int (*PMPI_File_get_info)(MPI_File, MPI_Info *);
-    int (*PMPI_File_set_view)(MPI_File, MPI_Offset, MPI_Datatype, MPI_Datatype, char *, MPI_Info);
-    int (*PMPI_File_get_view)(MPI_File, MPI_Offset *, MPI_Datatype *, MPI_Datatype *, char *);
-    int (*PMPI_File_read_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_read_at_all)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_write_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_write_at_all)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_iread_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*PMPI_File_iwrite_at)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*PMPI_File_read)(MPI_File, void *, int, MPI_Datatype, MPI_Status *); 
-    int (*PMPI_File_read_all)(MPI_File, void *, int, MPI_Datatype, MPI_Status *); 
-    int (*PMPI_File_write)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_write_all)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_iread)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *); 
-    int (*PMPI_File_iwrite)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*PMPI_File_seek)(MPI_File, MPI_Offset, int);
-    int (*PMPI_File_get_position)(MPI_File, MPI_Offset *);
-    int (*PMPI_File_get_byte_offset)(MPI_File, MPI_Offset, MPI_Offset *);
-    int (*PMPI_File_read_shared)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_write_shared)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_iread_shared)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*PMPI_File_iwrite_shared)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *);
-    int (*PMPI_File_read_ordered)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_write_ordered)(MPI_File, void *, int, MPI_Datatype, MPI_Status *);
-    int (*PMPI_File_seek_shared)(MPI_File, MPI_Offset, int);
-    int (*PMPI_File_get_position_shared)(MPI_File, MPI_Offset *);
-    int (*PMPI_File_read_at_all_begin)(MPI_File, MPI_Offset, void *, int, MPI_Datatype);
-    int (*PMPI_File_read_at_all_end)(MPI_File, void *, MPI_Status *);
-    int (*PMPI_File_write_at_all_begin)(MPI_File, MPI_Offset, void *, int, MPI_Datatype);
-    int (*PMPI_File_write_at_all_end)(MPI_File, void *, MPI_Status *);
-    int (*PMPI_File_read_all_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*PMPI_File_read_all_end)(MPI_File, void *, MPI_Status *);
-    int (*PMPI_File_write_all_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*PMPI_File_write_all_end)(MPI_File, void *, MPI_Status *);
-    int (*PMPI_File_read_ordered_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*PMPI_File_read_ordered_end)(MPI_File, void *, MPI_Status *);
-    int (*PMPI_File_write_ordered_begin)(MPI_File, void *, int, MPI_Datatype);
-    int (*PMPI_File_write_ordered_end)(MPI_File, void *, MPI_Status *);
-    int (*PMPI_File_get_type_extent)(MPI_File, MPI_Datatype, MPI_Aint *);
-    int (*PMPI_Register_datarep)(char *, MPI_Datarep_conversion_function *, MPI_Datarep_conversion_function *, MPI_Datarep_extent_function *, void *);
-    int (*PMPI_File_set_atomicity)(MPI_File, int);
-    int (*PMPI_File_get_atomicity)(MPI_File, int *);
-    int (*PMPI_File_sync)(MPI_File);
-    int (*PMPI_Send)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*PMPI_Recv)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
-    int (*PMPI_Get_count)(MPI_Status *, MPI_Datatype, int *);
-    int (*PMPI_Bsend)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*PMPI_Ssend)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*PMPI_Rsend)(void*, int, MPI_Datatype, int, int, MPI_Comm);
-    int (*PMPI_Buffer_attach)( void* buffer, int);
-    int (*PMPI_Buffer_detach)( void* buffer, int *);
-    int (*PMPI_Isend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Ibsend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Issend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Irsend)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Irecv)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Wait)(MPI_Request *, MPI_Status *);
-    int (*PMPI_Test)(MPI_Request *, int *, MPI_Status *);
-    int (*PMPI_Request_free)(MPI_Request *);
-    int (*PMPI_Waitany)(int, MPI_Request *, int *, MPI_Status *);
-    int (*PMPI_Testany)(int, MPI_Request *, int *, int *, MPI_Status *);
-    int (*PMPI_Waitall)(int, MPI_Request *, MPI_Status *);
-    int (*PMPI_Testall)(int, MPI_Request *, int *, MPI_Status *);
-    int (*PMPI_Waitsome)(int, MPI_Request *, int *, int *, MPI_Status *);
-    int (*PMPI_Testsome)(int, MPI_Request *, int *, int *, MPI_Status *);
-    int (*PMPI_Iprobe)(int, int, MPI_Comm, int *, MPI_Status *);
-    int (*PMPI_Probe)(int, int, MPI_Comm, MPI_Status *);
-    int (*PMPI_Cancel)(MPI_Request *);
-    int (*PMPI_Test_cancelled)(MPI_Status *, int *);
-    int (*PMPI_Send_init)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Bsend_init)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Ssend_init)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Rsend_init)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Recv_init)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *);
-    int (*PMPI_Start)(MPI_Request *);
-    int (*PMPI_Startall)(int, MPI_Request *);
-    int (*PMPI_Sendrecv)(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *);
-    int (*PMPI_Sendrecv_replace)(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *);
-    int (*PMPI_Type_contiguous)(int, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_vector)(int, int, int, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_hvector)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_indexed)(int, int *, int *, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_hindexed)(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_struct)(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *);
-    int (*PMPI_Address)(void*, MPI_Aint *);
-    int (*PMPI_Type_extent)(MPI_Datatype, MPI_Aint *);
-    int (*PMPI_Type_size)(MPI_Datatype, int *);
-    int (*PMPI_Type_lb)(MPI_Datatype, MPI_Aint *);
-    int (*PMPI_Type_ub)(MPI_Datatype, MPI_Aint *);
-    int (*PMPI_Type_commit)(MPI_Datatype *);
-    int (*PMPI_Type_free)(MPI_Datatype *);
-    int (*PMPI_Get_elements)(MPI_Status *, MPI_Datatype, int *);
-    int (*PMPI_Pack)(void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm);
-    int (*PMPI_Unpack)(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm);
-    int (*PMPI_Pack_size)(int, MPI_Datatype, MPI_Comm, int *);
-    int (*PMPI_Barrier)(MPI_Comm );
-    int (*PMPI_Bcast)(void* buffer, int, MPI_Datatype, int, MPI_Comm );
-    int (*PMPI_Gather)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm); 
-    int (*PMPI_Gatherv)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, int, MPI_Comm); 
-    int (*PMPI_Scatter)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
-    int (*PMPI_Scatterv)(void* , int *, int *displs, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm);
-    int (*PMPI_Allgather)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
-    int (*PMPI_Allgatherv)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm);
-    int (*PMPI_Alltoall)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm);
-    int (*PMPI_Alltoallv)(void* , int *, int *, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm);
-    int (*PMPI_Reduce)(void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm);
-    int (*PMPI_Reduce_local) (void *, void *, int, MPI_Datatype, MPI_Op);
-    int (*PMPI_Op_create)(MPI_User_function *, int, MPI_Op *);
-    int (*PMPI_Op_free)( MPI_Op *);
-    int (*PMPI_Op_commutative)(MPI_Op, int *);
-    int (*PMPI_Allreduce)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*PMPI_Reduce_scatter)(void* , void*, int *, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*PMPI_Reduce_scatter_block)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
-    int (*PMPI_Scan)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm );
-    int (*PMPI_Group_size)(MPI_Group, int *);
-    int (*PMPI_Group_rank)(MPI_Group, int *);
-    int (*PMPI_Group_translate_ranks )(MPI_Group, int, int *, MPI_Group, int *);
-    int (*PMPI_Group_compare)(MPI_Group, MPI_Group, int *);
-    int (*PMPI_Comm_group)(MPI_Comm, MPI_Group *);
-    int (*PMPI_Group_union)(MPI_Group, MPI_Group, MPI_Group *);
-    int (*PMPI_Group_intersection)(MPI_Group, MPI_Group, MPI_Group *);
-    int (*PMPI_Group_difference)(MPI_Group, MPI_Group, MPI_Group *);
-    int (*PMPI_Group_incl)(MPI_Group, int, int *, MPI_Group *);
-    int (*PMPI_Group_excl)(MPI_Group, int, int *, MPI_Group *);
-    int (*PMPI_Group_range_incl)(MPI_Group, int, int [][3], MPI_Group *);
-    int (*PMPI_Group_range_excl)(MPI_Group, int, int [][3], MPI_Group *);
-    int (*PMPI_Group_free)(MPI_Group *);
-    int (*PMPI_Comm_size)(MPI_Comm, int *);
-    int (*PMPI_Comm_rank)(MPI_Comm, int *);
-    int (*PMPI_Comm_compare)(MPI_Comm, MPI_Comm, int *);
-    int (*PMPI_Comm_dup)(MPI_Comm, MPI_Comm *);
-    int (*PMPI_Comm_create)(MPI_Comm, MPI_Group, MPI_Comm *);
-    int (*PMPI_Comm_split)(MPI_Comm, int, int, MPI_Comm *);
-    int (*PMPI_Comm_free)(MPI_Comm *);
-    int (*PMPI_Comm_test_inter)(MPI_Comm, int *);
-    int (*PMPI_Comm_remote_size)(MPI_Comm, int *);
-    int (*PMPI_Comm_remote_group)(MPI_Comm, MPI_Group *);
-    int (*PMPI_Intercomm_create)(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm *);
-    int (*PMPI_Intercomm_merge)(MPI_Comm, int, MPI_Comm *);
-    int (*PMPI_Keyval_create)(MPI_Copy_function *, MPI_Delete_function *, int *, void*);
-    int (*PMPI_Keyval_free)(int *);
-    int (*PMPI_Attr_put)(MPI_Comm, int, void*);
-    int (*PMPI_Attr_get)(MPI_Comm, int, void *, int *);
-    int (*PMPI_Attr_delete)(MPI_Comm, int);
-    int (*PMPI_Topo_test)(MPI_Comm, int *);
-    int (*PMPI_Cart_create)(MPI_Comm, int, int *, int *, int, MPI_Comm *);
-    int (*PMPI_Dims_create)(int, int, int *);
-    int (*PMPI_Graph_create)(MPI_Comm, int, int *, int *, int, MPI_Comm *);
-    int (*PMPI_Dist_graph_create)(MPI_Comm, int, int [], int [], int [], int [],
-                            MPI_Info, int, MPI_Comm *);
-    int (*PMPI_Dist_graph_create_adjacent)(MPI_Comm, int, int [], int [], int ,
-                            int [], int [], MPI_Info, int, MPI_Comm *);
-    int (*PMPI_Graphdims_get)(MPI_Comm, int *, int *);
-    int (*PMPI_Graph_get)(MPI_Comm, int, int, int *, int *);
-    int (*PMPI_Cartdim_get)(MPI_Comm, int *);
-    int (*PMPI_Cart_get)(MPI_Comm, int, int *, int *, int *);
-    int (*PMPI_Cart_rank)(MPI_Comm, int *, int *);
-    int (*PMPI_Cart_coords)(MPI_Comm, int, int, int *);
-    int (*PMPI_Graph_neighbors_count)(MPI_Comm, int, int *);
-    int (*PMPI_Graph_neighbors)(MPI_Comm, int, int, int *);
-    int (*PMPI_Dist_graph_neighbors)(MPI_Comm, int, int [], int [],
-                             int, int [], int []);
-    int (*PMPI_Dist_graph_neighbors_count)(MPI_Comm, int *, int *, int *);
-    int (*PMPI_Cart_shift)(MPI_Comm, int, int, int *, int *);
-    int (*PMPI_Cart_sub)(MPI_Comm, int *, MPI_Comm *);
-    int (*PMPI_Cart_map)(MPI_Comm, int, int *, int *, int *);
-    int (*PMPI_Graph_map)(MPI_Comm, int, int *, int *, int *);
-    int (*PMPI_Get_processor_name)(char *, int *);
-    int (*PMPI_Get_version)(int *, int *);
-    int (*PMPI_Errhandler_create)(MPI_Handler_function *, MPI_Errhandler *);
-    int (*PMPI_Errhandler_set)(MPI_Comm, MPI_Errhandler);
-    int (*PMPI_Errhandler_get)(MPI_Comm, MPI_Errhandler *);
-    int (*PMPI_Errhandler_free)(MPI_Errhandler *);
-    int (*PMPI_Error_string)(int, char *, int *);
-    int (*PMPI_Error_class)(int, int *);
-    int (*PMPI_Init)(int *, char ***);
-    int (*PMPI_Finalize)(void);
-    int (*PMPI_Initialized)(int *);
-    int (*PMPI_Abort)(MPI_Comm, int);
-    int (*PMPI_Pcontrol)(const int, ...);
-    int (*PMPI_Close_port)(char *);
-    int (*PMPI_Comm_accept)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
-    int (*PMPI_Comm_connect)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *);
-    int (*PMPI_Comm_disconnect)(MPI_Comm *);
-    int (*PMPI_Comm_get_parent)(MPI_Comm *);
-    int (*PMPI_Comm_join)(int, MPI_Comm *);
-    int (*PMPI_Comm_spawn)(char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *, int []);
-    int (*PMPI_Comm_spawn_multiple)(int, char *[], char **[], int [], MPI_Info [], int, MPI_Comm, MPI_Comm *, int []); 
-    int (*PMPI_Lookup_name)(char *, MPI_Info, char *);
-    int (*PMPI_Open_port)(MPI_Info, char *);
-    int (*PMPI_Publish_name)(char *, MPI_Info, char *);
-    int (*PMPI_Unpublish_name)(char *, MPI_Info, char *);
-    int (*PMPI_Accumulate)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,  MPI_Op, MPI_Win);
-    int (*PMPI_Get)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win);
-    int (*PMPI_Put)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win);
-    int (*PMPI_Win_complete)(MPI_Win);
-    int (*PMPI_Win_create)(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *);
-    int (*PMPI_Win_fence)(int, MPI_Win);
-    int (*PMPI_Win_free)(MPI_Win *);
-    int (*PMPI_Win_get_group)(MPI_Win, MPI_Group *);
-    int (*PMPI_Win_lock)(int, int, int, MPI_Win);
-    int (*PMPI_Win_post)(MPI_Group, int, MPI_Win);
-    int (*PMPI_Win_start)(MPI_Group, int, MPI_Win);
-    int (*PMPI_Win_test)(MPI_Win, int *);
-    int (*PMPI_Win_unlock)(int, MPI_Win);
-    int (*PMPI_Win_wait)(MPI_Win);
-    int (*PMPI_Alltoallw)(void *, int [], int [], MPI_Datatype [], void *, int [], int [], MPI_Datatype [], MPI_Comm);
-    int (*PMPI_Exscan)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm) ;
-    int (*PMPI_Add_error_class)(int *);
-    int (*PMPI_Add_error_code)(int, int *);
-    int (*PMPI_Add_error_string)(int, char *);
-    int (*PMPI_Comm_call_errhandler)(MPI_Comm, int);
-    int (*PMPI_Comm_create_keyval)(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, int *, void *);
-    int (*PMPI_Comm_delete_attr)(MPI_Comm, int);
-    int (*PMPI_Comm_free_keyval)(int *);
-    int (*PMPI_Comm_get_attr)(MPI_Comm, int, void *, int *);
-    int (*PMPI_Comm_get_name)(MPI_Comm, char *, int *);
-    int (*PMPI_Comm_set_attr)(MPI_Comm, int, void *);
-    int (*PMPI_Comm_set_name)(MPI_Comm, char *);
-    int (*PMPI_File_call_errhandler)(MPI_File, int);
-    int (*PMPI_Grequest_complete)(MPI_Request);
-    int (*PMPI_Grequest_start)(MPI_Grequest_query_function *, MPI_Grequest_free_function *, MPI_Grequest_cancel_function *, void *, MPI_Request *);
-    int (*PMPI_Init_thread)(int *, char ***, int, int *);
-    int (*PMPI_Is_thread_main)(int *);
-    int (*PMPI_Query_thread)(int *);
-    int (*PMPI_Status_set_cancelled)(MPI_Status *, int);
-    int (*PMPI_Status_set_elements)(MPI_Status *, MPI_Datatype, int);
-    int (*PMPI_Type_create_keyval)(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *, int *, void *);
-    int (*PMPI_Type_delete_attr)(MPI_Datatype, int);
-    int (*PMPI_Type_dup)(MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_free_keyval)(int *);
-    int (*PMPI_Type_get_attr)(MPI_Datatype, int, void *, int *);
-    int (*PMPI_Type_get_contents)(MPI_Datatype, int, int, int, int [], MPI_Aint [], MPI_Datatype []);
-    int (*PMPI_Type_get_envelope)(MPI_Datatype, int *, int *, int *, int *);
-    int (*PMPI_Type_get_name)(MPI_Datatype, char *, int *);
-    int (*PMPI_Type_set_attr)(MPI_Datatype, int, void *);
-    int (*PMPI_Type_set_name)(MPI_Datatype, char *);
-    int (*PMPI_Type_match_size)( int, int, MPI_Datatype *);
-    int (*PMPI_Win_call_errhandler)(MPI_Win, int);
-    int (*PMPI_Win_create_keyval)(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *, int *, void *);
-    int (*PMPI_Win_delete_attr)(MPI_Win, int);
-    int (*PMPI_Win_free_keyval)(int *);
-    int (*PMPI_Win_get_attr)(MPI_Win, int, void *, int *);
-    int (*PMPI_Win_get_name)(MPI_Win, char *, int *);
-    int (*PMPI_Win_set_attr)(MPI_Win, int, void *);
-    int (*PMPI_Win_set_name)(MPI_Win, char *);
-    int (*PMPI_Type_create_f90_integer)( int, MPI_Datatype * );
-    int (*PMPI_Type_create_f90_real)( int, int, MPI_Datatype * );
-    int (*PMPI_Type_create_f90_complex)( int, int, MPI_Datatype * );
-    int (*PMPI_Alloc_mem)(MPI_Aint, MPI_Info info, void *baseptr);
-    int (*PMPI_Comm_create_errhandler)(MPI_Comm_errhandler_function *, MPI_Errhandler *);
-    int (*PMPI_Comm_get_errhandler)(MPI_Comm, MPI_Errhandler *);
-    int (*PMPI_Comm_set_errhandler)(MPI_Comm, MPI_Errhandler);
-    int (*PMPI_File_create_errhandler)(MPI_File_errhandler_function *, MPI_Errhandler *);
-    int (*PMPI_File_get_errhandler)(MPI_File, MPI_Errhandler *);
-    int (*PMPI_File_set_errhandler)(MPI_File, MPI_Errhandler);
-    int (*PMPI_Finalized)(int *);
-    int (*PMPI_Free_mem)(void *);
-    int (*PMPI_Get_address)(void *, MPI_Aint *);
-    int (*PMPI_Info_create)(MPI_Info *);
-    int (*PMPI_Info_delete)(MPI_Info, char *);
-    int (*PMPI_Info_dup)(MPI_Info, MPI_Info *);
-    int (*PMPI_Info_free)(MPI_Info *info);
-    int (*PMPI_Info_get)(MPI_Info, char *, int, char *, int *);
-    int (*PMPI_Info_get_nkeys)(MPI_Info, int *);
-    int (*PMPI_Info_get_nthkey)(MPI_Info, int, char *);
-    int (*PMPI_Info_get_valuelen)(MPI_Info, char *, int *, int *);
-    int (*PMPI_Info_set)(MPI_Info, char *, char *);
-    int (*PMPI_Pack_external)(char *, void *, int, MPI_Datatype, void *, MPI_Aint, MPI_Aint *); 
-    int (*PMPI_Pack_external_size)(char *, int, MPI_Datatype, MPI_Aint *); 
-    int (*PMPI_Request_get_status)(MPI_Request, int *, MPI_Status *);
-    int (*PMPI_Status_c2f)(MPI_Status *, MPI_Fint *);
-    int (*PMPI_Status_f2c)(MPI_Fint *, MPI_Status *);
-    int (*PMPI_Type_create_darray)(int, int, int, int [], int [], int [], int [], int, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_create_hindexed)(int, int [], MPI_Aint [], MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_create_hvector)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_create_indexed_block)(int, int, int [], MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_create_hindexed_block)(int, int, const int [], MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_create_resized)(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *);
-    int (*PMPI_Type_create_struct)(int, int [], MPI_Aint [], MPI_Datatype [], MPI_Datatype *);
-    int (*PMPI_Type_create_subarray)(int, int [], int [], int [], int, MPI_Datatype, MPI_Datatype *);
-    int (*PMPI_Type_get_extent)(MPI_Datatype, MPI_Aint *, MPI_Aint *);
-    int (*PMPI_Type_get_true_extent)(MPI_Datatype, MPI_Aint *, MPI_Aint *);
-    int (*PMPI_Unpack_external)(char *, void *, MPI_Aint, MPI_Aint *, void *, int, MPI_Datatype); 
-    int (*PMPI_Win_create_errhandler)(MPI_Win_errhandler_function *, MPI_Errhandler *);
-    int (*PMPI_Win_get_errhandler)(MPI_Win, MPI_Errhandler *);
-    int (*PMPI_Win_set_errhandler)(MPI_Win, MPI_Errhandler);
-    double (*PMPI_Wtime)(void);
-    double (*PMPI_Wtick)(void);
-
-    /* Extra exported internal symbols */
-    void (*MPIR_Keyval_set_proxy)(int ,MPID_Attr_copy_proxy ,MPID_Attr_delete_proxy );
-    void (*MPIR_Keyval_set_fortran)(int);
-    void (*MPIR_Keyval_set_fortran90)(int);
-    void (*MPIR_Grequest_set_lang_f77)(MPI_Request);
-    void (*MPIR_Keyval_set_cxx)(int, void (*)(void), void (*)(void));
-    void (*MPIR_Errhandler_set_cxx)(MPI_Errhandler, void (*)(void));
-    void (*MPIR_Op_set_cxx)(MPI_Op, void (*)(void));
-    double (*MPID_Wtick)(void);
-    void (*MPID_Wtime_todouble)(MPID_Time_t *, double *);
-    /*int (*MPIR_Dup_fn)(MPI_Comm, int, void *, void *, void *, int *);*/
-    int (*MPIR_Err_create_code)(int , int , const char [], int , int , const char [], const char [], ...);
-    int (*MPIR_Err_return_comm)(struct MPID_Comm *, const char [], int);
-    
-    int (*MPIR_CommGetAttr)( MPI_Comm , int , void *, int *, MPIR_AttrType );
-    int (*MPIR_CommGetAttr_fort)( MPI_Comm , int , void *, int *, MPIR_AttrType );
-    int (*MPIR_CommSetAttr)( MPI_Comm , int , void *, MPIR_AttrType );
-    int (*MPIR_TypeGetAttr)( MPI_Datatype , int , void *,int *, MPIR_AttrType );
-    int (*MPIR_TypeSetAttr)(MPI_Datatype , int , void *,MPIR_AttrType );
-    int (*MPIR_WinSetAttr)( MPI_Win , int , void *, MPIR_AttrType );
-    int (*MPIR_WinGetAttr)( MPI_Win , int , void *, int *, MPIR_AttrType );
-
-    /* global variables */
-    MPI_Fint **MPI_F_STATUS_IGNORE;
-    MPI_Fint **MPI_F_STATUSES_IGNORE;
-} fn;
-
-static HMODULE hMPIModule = NULL;
-static HMODULE hPMPIModule = NULL;
-static BOOL LoadFunctions(const char *dll_name, const char *wrapper_dll_name)
-{
-    int error;
-
-    /* Load the PMPI module */
-    hPMPIModule = LoadLibrary(dll_name);
-    if (hPMPIModule == NULL)
-    {
-	error = GetLastError();
-	printf("Unable to load '%s', error %d\n", dll_name, error);fflush(stdout);
-	return FALSE;
-    }
-
-    /* Load the MPI wrapper module or set the MPI module equal to the PMPI module */
-    if (wrapper_dll_name != NULL)
-    {
-	hMPIModule = LoadLibrary(wrapper_dll_name);
-	if (hMPIModule == NULL)
-	{
-	    error = GetLastError();
-	    printf("Unable to load '%s', error %d\n", wrapper_dll_name, error);fflush(stdout);
-	    return FALSE;
-	}
-    }
-    else
-    {
-	hMPIModule = hPMPIModule;
-    }
-    
-    /* MPI */
-    fn.MPI_Comm_f2c = (MPI_Comm (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Comm_f2c");
-    if (fn.MPI_Comm_f2c == NULL) fn.MPI_Comm_f2c = (MPI_Comm (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Comm_f2c");
-    fn.MPI_Type_f2c = (MPI_Datatype (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Type_f2c");
-    if (fn.MPI_Type_f2c == NULL) fn.MPI_Type_f2c = (MPI_Datatype (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Type_f2c");
-    fn.MPI_File_f2c = (MPI_File (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_File_f2c");
-    if (fn.MPI_File_f2c == NULL) fn.MPI_File_f2c = (MPI_File (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_File_f2c");
-    fn.MPI_Comm_c2f = (MPI_Fint (*)(MPI_Comm))GetProcAddress(hMPIModule, "MPI_Comm_c2f");
-    if (fn.MPI_Comm_c2f == NULL) fn.MPI_Comm_c2f = (MPI_Fint (*)(MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Comm_c2f");
-    fn.MPI_File_c2f = (MPI_Fint (*)(MPI_File))GetProcAddress(hMPIModule, "MPI_File_c2f");
-    if (fn.MPI_File_c2f == NULL) fn.MPI_File_c2f = (MPI_Fint (*)(MPI_File))GetProcAddress(hPMPIModule, "MPI_File_c2f");
-    fn.MPI_Group_c2f = (MPI_Fint (*)(MPI_Group))GetProcAddress(hMPIModule, "MPI_Group_c2f");
-    if (fn.MPI_Group_c2f == NULL) fn.MPI_Group_c2f = (MPI_Fint (*)(MPI_Group))GetProcAddress(hPMPIModule, "MPI_Group_c2f");
-    fn.MPI_Info_c2f = (MPI_Fint (*)(MPI_Info))GetProcAddress(hMPIModule, "MPI_Info_c2f");
-    if (fn.MPI_Info_c2f == NULL) fn.MPI_Info_c2f = (MPI_Fint (*)(MPI_Info))GetProcAddress(hPMPIModule, "MPI_Info_c2f");
-    fn.MPI_Op_c2f = (MPI_Fint (*)(MPI_Op))GetProcAddress(hMPIModule, "MPI_Op_c2f");
-    if (fn.MPI_Op_c2f == NULL) fn.MPI_Op_c2f = (MPI_Fint (*)(MPI_Op))GetProcAddress(hPMPIModule, "MPI_Op_c2f");
-    fn.MPI_Request_c2f = (MPI_Fint (*)(MPI_Request))GetProcAddress(hMPIModule, "MPI_Request_c2f");
-    if (fn.MPI_Request_c2f == NULL) fn.MPI_Request_c2f = (MPI_Fint (*)(MPI_Request))GetProcAddress(hPMPIModule, "MPI_Request_c2f");
-    fn.MPI_Type_c2f = (MPI_Fint (*)(MPI_Datatype))GetProcAddress(hMPIModule, "MPI_Type_c2f");
-    if (fn.MPI_Type_c2f == NULL) fn.MPI_Type_c2f = (MPI_Fint (*)(MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_Type_c2f");
-    fn.MPI_Win_c2f = (MPI_Fint (*)(MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_c2f");
-    if (fn.MPI_Win_c2f == NULL) fn.MPI_Win_c2f = (MPI_Fint (*)(MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_c2f");
-    fn.MPI_Group_f2c = (MPI_Group (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Group_f2c");
-    if (fn.MPI_Group_f2c == NULL) fn.MPI_Group_f2c = (MPI_Group (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Group_f2c");
-    fn.MPI_Info_f2c = (MPI_Info (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Info_f2c");
-    if (fn.MPI_Info_f2c == NULL) fn.MPI_Info_f2c = (MPI_Info (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Info_f2c");
-    fn.MPI_Op_f2c = (MPI_Op (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Op_f2c");
-    if (fn.MPI_Op_f2c == NULL) fn.MPI_Op_f2c = (MPI_Op (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Op_f2c");
-    fn.MPI_Request_f2c = (MPI_Request (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Request_f2c");
-    if (fn.MPI_Request_f2c == NULL) fn.MPI_Request_f2c = (MPI_Request (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Request_f2c");
-    fn.MPI_Win_f2c = (MPI_Win (*)(MPI_Fint))GetProcAddress(hMPIModule, "MPI_Win_f2c");
-    if (fn.MPI_Win_f2c == NULL) fn.MPI_Win_f2c = (MPI_Win (*)(MPI_Fint))GetProcAddress(hPMPIModule, "MPI_Win_f2c");
-    fn.MPI_File_open = (int (*)(MPI_Comm, char *, int, MPI_Info, MPI_File *))GetProcAddress(hMPIModule, "MPI_File_open");
-    if (fn.MPI_File_open == NULL) fn.MPI_File_open = (int (*)(MPI_Comm, char *, int, MPI_Info, MPI_File *))GetProcAddress(hPMPIModule, "MPI_File_open");
-    fn.MPI_File_close = (int (*)(MPI_File *))GetProcAddress(hMPIModule, "MPI_File_close");
-    if (fn.MPI_File_close == NULL) fn.MPI_File_close = (int (*)(MPI_File *))GetProcAddress(hPMPIModule, "MPI_File_close");
-    fn.MPI_File_delete = (int (*)(char *, MPI_Info))GetProcAddress(hMPIModule, "MPI_File_delete");
-    if (fn.MPI_File_delete == NULL) fn.MPI_File_delete = (int (*)(char *, MPI_Info))GetProcAddress(hPMPIModule, "MPI_File_delete");
-    fn.MPI_File_set_size = (int (*)(MPI_File, MPI_Offset))GetProcAddress(hMPIModule, "MPI_File_set_size");
-    if (fn.MPI_File_set_size == NULL) fn.MPI_File_set_size = (int (*)(MPI_File, MPI_Offset))GetProcAddress(hPMPIModule, "MPI_File_set_size");
-    fn.MPI_File_preallocate = (int (*)(MPI_File, MPI_Offset))GetProcAddress(hMPIModule, "MPI_File_preallocate");
-    if (fn.MPI_File_preallocate == NULL) fn.MPI_File_preallocate = (int (*)(MPI_File, MPI_Offset))GetProcAddress(hPMPIModule, "MPI_File_preallocate");
-    fn.MPI_File_get_size = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hMPIModule, "MPI_File_get_size");
-    if (fn.MPI_File_get_size == NULL) fn.MPI_File_get_size = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hPMPIModule, "MPI_File_get_size");
-    fn.MPI_File_get_group = (int (*)(MPI_File, MPI_Group *))GetProcAddress(hMPIModule, "MPI_File_get_group");
-    if (fn.MPI_File_get_group == NULL) fn.MPI_File_get_group = (int (*)(MPI_File, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_File_get_group");
-    fn.MPI_File_get_amode = (int (*)(MPI_File, int *))GetProcAddress(hMPIModule, "MPI_File_get_amode");
-    if (fn.MPI_File_get_amode == NULL) fn.MPI_File_get_amode = (int (*)(MPI_File, int *))GetProcAddress(hPMPIModule, "MPI_File_get_amode");
-    fn.MPI_File_set_info = (int (*)(MPI_File, MPI_Info))GetProcAddress(hMPIModule, "MPI_File_set_info");
-    if (fn.MPI_File_set_info == NULL) fn.MPI_File_set_info = (int (*)(MPI_File, MPI_Info))GetProcAddress(hPMPIModule, "MPI_File_set_info");
-    fn.MPI_File_get_info = (int (*)(MPI_File, MPI_Info *))GetProcAddress(hMPIModule, "MPI_File_get_info");
-    if (fn.MPI_File_get_info == NULL) fn.MPI_File_get_info = (int (*)(MPI_File, MPI_Info *))GetProcAddress(hPMPIModule, "MPI_File_get_info");
-    fn.MPI_File_set_view = (int (*)(MPI_File, MPI_Offset, MPI_Datatype, MPI_Datatype, char *, MPI_Info))GetProcAddress(hMPIModule, "MPI_File_set_view");
-    if (fn.MPI_File_set_view == NULL) fn.MPI_File_set_view = (int (*)(MPI_File, MPI_Offset, MPI_Datatype, MPI_Datatype, char *, MPI_Info))GetProcAddress(hPMPIModule, "MPI_File_set_view");
-    fn.MPI_File_get_view = (int (*)(MPI_File, MPI_Offset *, MPI_Datatype *, MPI_Datatype *, char *))GetProcAddress(hMPIModule, "MPI_File_get_view");
-    if (fn.MPI_File_get_view == NULL) fn.MPI_File_get_view = (int (*)(MPI_File, MPI_Offset *, MPI_Datatype *, MPI_Datatype *, char *))GetProcAddress(hPMPIModule, "MPI_File_get_view");
-    fn.MPI_File_read_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_at");
-    if (fn.MPI_File_read_at == NULL) fn.MPI_File_read_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_at");
-    fn.MPI_File_read_at_all = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_at_all");
-    if (fn.MPI_File_read_at_all == NULL) fn.MPI_File_read_at_all = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_at_all");
-    fn.MPI_File_write_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_at");
-    if (fn.MPI_File_write_at == NULL) fn.MPI_File_write_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_at");
-    fn.MPI_File_write_at_all = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_at_all");
-    if (fn.MPI_File_write_at_all == NULL) fn.MPI_File_write_at_all = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_at_all");
-    fn.MPI_File_iread_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hMPIModule, "MPI_File_iread_at");
-    if (fn.MPI_File_iread_at == NULL) fn.MPI_File_iread_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "MPI_File_iread_at");
-    fn.MPI_File_iwrite_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hMPIModule, "MPI_File_iwrite_at");
-    if (fn.MPI_File_iwrite_at == NULL) fn.MPI_File_iwrite_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "MPI_File_iwrite_at");
-    fn.MPI_File_read = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read"); 
-    if (fn.MPI_File_read == NULL) fn.MPI_File_read = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read"); 
-    fn.MPI_File_read_all = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_all"); 
-    if (fn.MPI_File_read_all == NULL) fn.MPI_File_read_all = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_all"); 
-    fn.MPI_File_write = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write");
-    if (fn.MPI_File_write == NULL) fn.MPI_File_write = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write");
-    fn.MPI_File_write_all = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_all");
-    if (fn.MPI_File_write_all == NULL) fn.MPI_File_write_all = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_all");
-    fn.MPI_File_iread = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hMPIModule, "MPI_File_iread"); 
-    if (fn.MPI_File_iread == NULL) fn.MPI_File_iread = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "MPI_File_iread"); 
-    fn.MPI_File_iwrite = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hMPIModule, "MPI_File_iwrite");
-    if (fn.MPI_File_iwrite == NULL) fn.MPI_File_iwrite = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "MPI_File_iwrite");
-    fn.MPI_File_seek = (int (*)(MPI_File, MPI_Offset, int))GetProcAddress(hMPIModule, "MPI_File_seek");
-    if (fn.MPI_File_seek == NULL) fn.MPI_File_seek = (int (*)(MPI_File, MPI_Offset, int))GetProcAddress(hPMPIModule, "MPI_File_seek");
-    fn.MPI_File_get_position = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hMPIModule, "MPI_File_get_position");
-    if (fn.MPI_File_get_position == NULL) fn.MPI_File_get_position = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hPMPIModule, "MPI_File_get_position");
-    fn.MPI_File_get_byte_offset = (int (*)(MPI_File, MPI_Offset, MPI_Offset *))GetProcAddress(hMPIModule, "MPI_File_get_byte_offset");
-    if (fn.MPI_File_get_byte_offset == NULL) fn.MPI_File_get_byte_offset = (int (*)(MPI_File, MPI_Offset, MPI_Offset *))GetProcAddress(hPMPIModule, "MPI_File_get_byte_offset");
-    fn.MPI_File_read_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_shared");
-    if (fn.MPI_File_read_shared == NULL) fn.MPI_File_read_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_shared");
-    fn.MPI_File_write_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_shared");
-    if (fn.MPI_File_write_shared == NULL) fn.MPI_File_write_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_shared");
-    fn.MPI_File_iread_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hMPIModule, "MPI_File_iread_shared");
-    if (fn.MPI_File_iread_shared == NULL) fn.MPI_File_iread_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "MPI_File_iread_shared");
-    fn.MPI_File_iwrite_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hMPIModule, "MPI_File_iwrite_shared");
-    if (fn.MPI_File_iwrite_shared == NULL) fn.MPI_File_iwrite_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "MPI_File_iwrite_shared");
-    fn.MPI_File_read_ordered = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_ordered");
-    if (fn.MPI_File_read_ordered == NULL) fn.MPI_File_read_ordered = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_ordered");
-    fn.MPI_File_write_ordered = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_ordered");
-    if (fn.MPI_File_write_ordered == NULL) fn.MPI_File_write_ordered = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_ordered");
-    fn.MPI_File_seek_shared = (int (*)(MPI_File, MPI_Offset, int))GetProcAddress(hMPIModule, "MPI_File_seek_shared");
-    if (fn.MPI_File_seek_shared == NULL) fn.MPI_File_seek_shared = (int (*)(MPI_File, MPI_Offset, int))GetProcAddress(hPMPIModule, "MPI_File_seek_shared");
-    fn.MPI_File_get_position_shared = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hMPIModule, "MPI_File_get_position_shared");
-    if (fn.MPI_File_get_position_shared == NULL) fn.MPI_File_get_position_shared = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hPMPIModule, "MPI_File_get_position_shared");
-    fn.MPI_File_read_at_all_begin = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_File_read_at_all_begin");
-    if (fn.MPI_File_read_at_all_begin == NULL) fn.MPI_File_read_at_all_begin = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_File_read_at_all_begin");
-    fn.MPI_File_read_at_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_at_all_end");
-    if (fn.MPI_File_read_at_all_end == NULL) fn.MPI_File_read_at_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_at_all_end");
-    fn.MPI_File_write_at_all_begin = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_File_write_at_all_begin");
-    if (fn.MPI_File_write_at_all_begin == NULL) fn.MPI_File_write_at_all_begin = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_File_write_at_all_begin");
-    fn.MPI_File_write_at_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_at_all_end");
-    if (fn.MPI_File_write_at_all_end == NULL) fn.MPI_File_write_at_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_at_all_end");
-    fn.MPI_File_read_all_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_File_read_all_begin");
-    if (fn.MPI_File_read_all_begin == NULL) fn.MPI_File_read_all_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_File_read_all_begin");
-    fn.MPI_File_read_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_all_end");
-    if (fn.MPI_File_read_all_end == NULL) fn.MPI_File_read_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_all_end");
-    fn.MPI_File_write_all_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_File_write_all_begin");
-    if (fn.MPI_File_write_all_begin == NULL) fn.MPI_File_write_all_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_File_write_all_begin");
-    fn.MPI_File_write_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_all_end");
-    if (fn.MPI_File_write_all_end == NULL) fn.MPI_File_write_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_all_end");
-    fn.MPI_File_read_ordered_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_File_read_ordered_begin");
-    if (fn.MPI_File_read_ordered_begin == NULL) fn.MPI_File_read_ordered_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_File_read_ordered_begin");
-    fn.MPI_File_read_ordered_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_read_ordered_end");
-    if (fn.MPI_File_read_ordered_end == NULL) fn.MPI_File_read_ordered_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_read_ordered_end");
-    fn.MPI_File_write_ordered_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_File_write_ordered_begin");
-    if (fn.MPI_File_write_ordered_begin == NULL) fn.MPI_File_write_ordered_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_File_write_ordered_begin");
-    fn.MPI_File_write_ordered_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_File_write_ordered_end");
-    if (fn.MPI_File_write_ordered_end == NULL) fn.MPI_File_write_ordered_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_File_write_ordered_end");
-    fn.MPI_File_get_type_extent = (int (*)(MPI_File, MPI_Datatype, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_File_get_type_extent");
-    if (fn.MPI_File_get_type_extent == NULL) fn.MPI_File_get_type_extent = (int (*)(MPI_File, MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_File_get_type_extent");
-    fn.MPI_Register_datarep = (int (*)(char *, MPI_Datarep_conversion_function *, MPI_Datarep_conversion_function *, MPI_Datarep_extent_function *, void *))GetProcAddress(hMPIModule, "MPI_Register_datarep");
-    if (fn.MPI_Register_datarep == NULL) fn.MPI_Register_datarep = (int (*)(char *, MPI_Datarep_conversion_function *, MPI_Datarep_conversion_function *, MPI_Datarep_extent_function *, void *))GetProcAddress(hPMPIModule, "MPI_Register_datarep");
-    fn.MPI_File_set_atomicity = (int (*)(MPI_File, int))GetProcAddress(hMPIModule, "MPI_File_set_atomicity");
-    if (fn.MPI_File_set_atomicity == NULL) fn.MPI_File_set_atomicity = (int (*)(MPI_File, int))GetProcAddress(hPMPIModule, "MPI_File_set_atomicity");
-    fn.MPI_File_get_atomicity = (int (*)(MPI_File, int *))GetProcAddress(hMPIModule, "MPI_File_get_atomicity");
-    if (fn.MPI_File_get_atomicity == NULL) fn.MPI_File_get_atomicity = (int (*)(MPI_File, int *))GetProcAddress(hPMPIModule, "MPI_File_get_atomicity");
-    fn.MPI_File_sync = (int (*)(MPI_File))GetProcAddress(hMPIModule, "MPI_File_sync");
-    if (fn.MPI_File_sync == NULL) fn.MPI_File_sync = (int (*)(MPI_File))GetProcAddress(hPMPIModule, "MPI_File_sync");
-    fn.MPI_Send = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Send");
-    if (fn.MPI_Send == NULL) fn.MPI_Send = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Send");
-    fn.MPI_Recv = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Recv");
-    if (fn.MPI_Recv == NULL) fn.MPI_Recv = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Recv");
-    fn.MPI_Get_count = (int (*)(MPI_Status *, MPI_Datatype, int *))GetProcAddress(hMPIModule, "MPI_Get_count");
-    if (fn.MPI_Get_count == NULL) fn.MPI_Get_count = (int (*)(MPI_Status *, MPI_Datatype, int *))GetProcAddress(hPMPIModule, "MPI_Get_count");
-    fn.MPI_Bsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Bsend");
-    if (fn.MPI_Bsend == NULL) fn.MPI_Bsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Bsend");
-    fn.MPI_Ssend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Ssend");
-    if (fn.MPI_Ssend == NULL) fn.MPI_Ssend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Ssend");
-    fn.MPI_Rsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Rsend");
-    if (fn.MPI_Rsend == NULL) fn.MPI_Rsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Rsend");
-    fn.MPI_Buffer_attach = (int (*)( void*, int))GetProcAddress(hMPIModule, "MPI_Buffer_attach");
-    if (fn.MPI_Buffer_attach == NULL) fn.MPI_Buffer_attach = (int (*)( void*, int))GetProcAddress(hPMPIModule, "MPI_Buffer_attach");
-    fn.MPI_Buffer_detach = (int (*)( void*, int *))GetProcAddress(hMPIModule, "MPI_Buffer_detach");
-    if (fn.MPI_Buffer_detach == NULL) fn.MPI_Buffer_detach = (int (*)( void*, int *))GetProcAddress(hPMPIModule, "MPI_Buffer_detach");
-    fn.MPI_Isend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Isend");
-    if (fn.MPI_Isend == NULL) fn.MPI_Isend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Isend");
-    fn.MPI_Ibsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Ibsend");
-    if (fn.MPI_Ibsend == NULL) fn.MPI_Ibsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Ibsend");
-    fn.MPI_Issend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Issend");
-    if (fn.MPI_Issend == NULL) fn.MPI_Issend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Issend");
-    fn.MPI_Irsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Irsend");
-    if (fn.MPI_Irsend == NULL) fn.MPI_Irsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Irsend");
-    fn.MPI_Irecv = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Irecv");
-    if (fn.MPI_Irecv == NULL) fn.MPI_Irecv = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Irecv");
-    fn.MPI_Wait = (int (*)(MPI_Request *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Wait");
-    if (fn.MPI_Wait == NULL) fn.MPI_Wait = (int (*)(MPI_Request *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Wait");
-    fn.MPI_Test = (int (*)(MPI_Request *, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Test");
-    if (fn.MPI_Test == NULL) fn.MPI_Test = (int (*)(MPI_Request *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Test");
-    fn.MPI_Request_free = (int (*)(MPI_Request *))GetProcAddress(hMPIModule, "MPI_Request_free");
-    if (fn.MPI_Request_free == NULL) fn.MPI_Request_free = (int (*)(MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Request_free");
-    fn.MPI_Waitany = (int (*)(int, MPI_Request *, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Waitany");
-    if (fn.MPI_Waitany == NULL) fn.MPI_Waitany = (int (*)(int, MPI_Request *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Waitany");
-    fn.MPI_Testany = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Testany");
-    if (fn.MPI_Testany == NULL) fn.MPI_Testany = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Testany");
-    fn.MPI_Waitall = (int (*)(int, MPI_Request *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Waitall");
-    if (fn.MPI_Waitall == NULL) fn.MPI_Waitall = (int (*)(int, MPI_Request *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Waitall");
-    fn.MPI_Testall = (int (*)(int, MPI_Request *, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Testall");
-    if (fn.MPI_Testall == NULL) fn.MPI_Testall = (int (*)(int, MPI_Request *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Testall");
-    fn.MPI_Waitsome = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Waitsome");
-    if (fn.MPI_Waitsome == NULL) fn.MPI_Waitsome = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Waitsome");
-    fn.MPI_Testsome = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Testsome");
-    if (fn.MPI_Testsome == NULL) fn.MPI_Testsome = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Testsome");
-    fn.MPI_Iprobe = (int (*)(int, int, MPI_Comm, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Iprobe");
-    if (fn.MPI_Iprobe == NULL) fn.MPI_Iprobe = (int (*)(int, int, MPI_Comm, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Iprobe");
-    fn.MPI_Probe = (int (*)(int, int, MPI_Comm, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Probe");
-    if (fn.MPI_Probe == NULL) fn.MPI_Probe = (int (*)(int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Probe");
-    fn.MPI_Cancel = (int (*)(MPI_Request *))GetProcAddress(hMPIModule, "MPI_Cancel");
-    if (fn.MPI_Cancel == NULL) fn.MPI_Cancel = (int (*)(MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Cancel");
-    fn.MPI_Test_cancelled = (int (*)(MPI_Status *, int *))GetProcAddress(hMPIModule, "MPI_Test_cancelled");
-    if (fn.MPI_Test_cancelled == NULL) fn.MPI_Test_cancelled = (int (*)(MPI_Status *, int *))GetProcAddress(hPMPIModule, "MPI_Test_cancelled");
-    fn.MPI_Send_init = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Send_init");
-    if (fn.MPI_Send_init == NULL) fn.MPI_Send_init = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Send_init");
-    fn.MPI_Bsend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Bsend_init");
-    if (fn.MPI_Bsend_init == NULL) fn.MPI_Bsend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Bsend_init");
-    fn.MPI_Ssend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Ssend_init");
-    if (fn.MPI_Ssend_init == NULL) fn.MPI_Ssend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Ssend_init");
-    fn.MPI_Rsend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Rsend_init");
-    if (fn.MPI_Rsend_init == NULL) fn.MPI_Rsend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Rsend_init");
-    fn.MPI_Recv_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Recv_init");
-    if (fn.MPI_Recv_init == NULL) fn.MPI_Recv_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Recv_init");
-    fn.MPI_Start = (int (*)(MPI_Request *))GetProcAddress(hMPIModule, "MPI_Start");
-    if (fn.MPI_Start == NULL) fn.MPI_Start = (int (*)(MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Start");
-    fn.MPI_Startall = (int (*)(int, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Startall");
-    if (fn.MPI_Startall == NULL) fn.MPI_Startall = (int (*)(int, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Startall");
-    fn.MPI_Sendrecv = (int (*)(void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Sendrecv");
-    if (fn.MPI_Sendrecv == NULL) fn.MPI_Sendrecv = (int (*)(void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Sendrecv");
-    fn.MPI_Sendrecv_replace = (int (*)(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Sendrecv_replace");
-    if (fn.MPI_Sendrecv_replace == NULL) fn.MPI_Sendrecv_replace = (int (*)(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Sendrecv_replace");
-    fn.MPI_Type_contiguous = (int (*)(int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_contiguous");
-    if (fn.MPI_Type_contiguous == NULL) fn.MPI_Type_contiguous = (int (*)(int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_contiguous");
-    fn.MPI_Type_vector = (int (*)(int, int, int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_vector");
-    if (fn.MPI_Type_vector == NULL) fn.MPI_Type_vector = (int (*)(int, int, int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_vector");
-    fn.MPI_Type_hvector = (int (*)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_hvector");
-    if (fn.MPI_Type_hvector == NULL) fn.MPI_Type_hvector = (int (*)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_hvector");
-    fn.MPI_Type_indexed = (int (*)(int, int *, int *, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_indexed");
-    if (fn.MPI_Type_indexed == NULL) fn.MPI_Type_indexed = (int (*)(int, int *, int *, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_indexed");
-    fn.MPI_Type_hindexed = (int (*)(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_hindexed");
-    if (fn.MPI_Type_hindexed == NULL) fn.MPI_Type_hindexed = (int (*)(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_hindexed");
-    fn.MPI_Type_struct = (int (*)(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_struct");
-    if (fn.MPI_Type_struct == NULL) fn.MPI_Type_struct = (int (*)(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_struct");
-    fn.MPI_Address = (int (*)(void*, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Address");
-    if (fn.MPI_Address == NULL) fn.MPI_Address = (int (*)(void*, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Address");
-    fn.MPI_Type_extent = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Type_extent");
-    if (fn.MPI_Type_extent == NULL) fn.MPI_Type_extent = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Type_extent");
-    fn.MPI_Type_size = (int (*)(MPI_Datatype, int *))GetProcAddress(hMPIModule, "MPI_Type_size");
-    if (fn.MPI_Type_size == NULL) fn.MPI_Type_size = (int (*)(MPI_Datatype, int *))GetProcAddress(hPMPIModule, "MPI_Type_size");
-    fn.MPI_Type_lb = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Type_lb");
-    if (fn.MPI_Type_lb == NULL) fn.MPI_Type_lb = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Type_lb");
-    fn.MPI_Type_ub = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Type_ub");
-    if (fn.MPI_Type_ub == NULL) fn.MPI_Type_ub = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Type_ub");
-    fn.MPI_Type_commit = (int (*)(MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_commit");
-    if (fn.MPI_Type_commit == NULL) fn.MPI_Type_commit = (int (*)(MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_commit");
-    fn.MPI_Type_free = (int (*)(MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_free");
-    if (fn.MPI_Type_free == NULL) fn.MPI_Type_free = (int (*)(MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_free");
-    fn.MPI_Get_elements = (int (*)(MPI_Status *, MPI_Datatype, int *))GetProcAddress(hMPIModule, "MPI_Get_elements");
-    if (fn.MPI_Get_elements == NULL) fn.MPI_Get_elements = (int (*)(MPI_Status *, MPI_Datatype, int *))GetProcAddress(hPMPIModule, "MPI_Get_elements");
-    fn.MPI_Pack = (int (*)(void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm))GetProcAddress(hMPIModule, "MPI_Pack");
-    if (fn.MPI_Pack == NULL) fn.MPI_Pack = (int (*)(void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Pack");
-    fn.MPI_Unpack = (int (*)(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Unpack");
-    if (fn.MPI_Unpack == NULL) fn.MPI_Unpack = (int (*)(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Unpack");
-    fn.MPI_Pack_size = (int (*)(int, MPI_Datatype, MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Pack_size");
-    if (fn.MPI_Pack_size == NULL) fn.MPI_Pack_size = (int (*)(int, MPI_Datatype, MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Pack_size");
-    fn.MPI_Barrier = (int (*)(MPI_Comm ))GetProcAddress(hMPIModule, "MPI_Barrier");
-    if (fn.MPI_Barrier == NULL) fn.MPI_Barrier = (int (*)(MPI_Comm ))GetProcAddress(hPMPIModule, "MPI_Barrier");
-    fn.MPI_Bcast = (int (*)(void*, int, MPI_Datatype, int, MPI_Comm ))GetProcAddress(hMPIModule, "MPI_Bcast");
-    if (fn.MPI_Bcast == NULL) fn.MPI_Bcast = (int (*)(void*, int, MPI_Datatype, int, MPI_Comm ))GetProcAddress(hPMPIModule, "MPI_Bcast");
-    fn.MPI_Gather = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Gather"); 
-    if (fn.MPI_Gather == NULL) fn.MPI_Gather = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Gather"); 
-    fn.MPI_Gatherv = (int (*)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Gatherv"); 
-    if (fn.MPI_Gatherv == NULL) fn.MPI_Gatherv = (int (*)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Gatherv"); 
-    fn.MPI_Scatter = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Scatter");
-    if (fn.MPI_Scatter == NULL) fn.MPI_Scatter = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Scatter");
-    fn.MPI_Scatterv = (int (*)(void* , int *, int *,  MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Scatterv");
-    if (fn.MPI_Scatterv == NULL) fn.MPI_Scatterv = (int (*)(void* , int *, int *,  MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Scatterv");
-    fn.MPI_Allgather = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Allgather");
-    if (fn.MPI_Allgather == NULL) fn.MPI_Allgather = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Allgather");
-    fn.MPI_Allgatherv = (int (*)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Allgatherv");
-    if (fn.MPI_Allgatherv == NULL) fn.MPI_Allgatherv = (int (*)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Allgatherv");
-    fn.MPI_Alltoall = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Alltoall");
-    if (fn.MPI_Alltoall == NULL) fn.MPI_Alltoall = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Alltoall");
-    fn.MPI_Alltoallv = (int (*)(void* , int *, int *, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Alltoallv");
-    if (fn.MPI_Alltoallv == NULL) fn.MPI_Alltoallv = (int (*)(void* , int *, int *, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Alltoallv");
-    fn.MPI_Reduce = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Reduce");
-    if (fn.MPI_Reduce == NULL) fn.MPI_Reduce = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Reduce");
-    fn.MPI_Reduce_local = (int (*)(void *, void *, int , MPI_Datatype , MPI_Op))GetProcAddress(hMPIModule, "MPI_Reduce_local");
-    if (fn.MPI_Reduce_local == NULL) fn.MPI_Reduce_local = (int (*)(void *, void *, int , MPI_Datatype , MPI_Op))GetProcAddress(hPMPIModule, "MPI_Reduce_local");
-    fn.MPI_Op_create = (int (*)(MPI_User_function *, int, MPI_Op *))GetProcAddress(hMPIModule, "MPI_Op_create");
-    if (fn.MPI_Op_create == NULL) fn.MPI_Op_create = (int (*)(MPI_User_function *, int, MPI_Op *))GetProcAddress(hPMPIModule, "MPI_Op_create");
-    fn.MPI_Op_free = (int (*)( MPI_Op *))GetProcAddress(hMPIModule, "MPI_Op_free");
-    if (fn.MPI_Op_free == NULL) fn.MPI_Op_free = (int (*)( MPI_Op *))GetProcAddress(hPMPIModule, "MPI_Op_free");
-    fn.MPI_Op_commutative = (int (*) (MPI_Op , int *))GetProcAddress(hMPIModule, "MPI_Op_commutative");
-    if (fn.MPI_Op_commutative == NULL) (int (*) (MPI_Op , int *))GetProcAddress(hPMPIModule, "MPI_Op_commutative");
-    fn.MPI_Allreduce = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Allreduce");
-    if (fn.MPI_Allreduce == NULL) fn.MPI_Allreduce = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Allreduce");
-    fn.MPI_Reduce_scatter = (int (*)(void* , void*, int *, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Reduce_scatter");
-    if (fn.MPI_Reduce_scatter == NULL) fn.MPI_Reduce_scatter = (int (*)(void* , void*, int *, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Reduce_scatter");
-    fn.MPI_Reduce_scatter_block = (int (*)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm)) GetProcAddress(hMPIModule, "MPI_Reduce_scatter_block");
-    if (fn.MPI_Reduce_scatter_block == NULL) fn.MPI_Reduce_scatter_block = (int (*)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm)) GetProcAddress(hPMPIModule, "MPI_Reduce_scatter_block");
-    fn.MPI_Scan = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm ))GetProcAddress(hMPIModule, "MPI_Scan");
-    if (fn.MPI_Scan == NULL) fn.MPI_Scan = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm ))GetProcAddress(hPMPIModule, "MPI_Scan");
-    fn.MPI_Group_size = (int (*)(MPI_Group, int *))GetProcAddress(hMPIModule, "MPI_Group_size");
-    if (fn.MPI_Group_size == NULL) fn.MPI_Group_size = (int (*)(MPI_Group, int *))GetProcAddress(hPMPIModule, "MPI_Group_size");
-    fn.MPI_Group_rank = (int (*)(MPI_Group, int *))GetProcAddress(hMPIModule, "MPI_Group_rank");
-    if (fn.MPI_Group_rank == NULL) fn.MPI_Group_rank = (int (*)(MPI_Group, int *))GetProcAddress(hPMPIModule, "MPI_Group_rank");
-    fn.MPI_Group_translate_ranks = (int (* )(MPI_Group, int, int *, MPI_Group, int *))GetProcAddress(hMPIModule, "MPI_Group_translate_ranks");
-    if (fn.MPI_Group_translate_ranks == NULL) fn.MPI_Group_translate_ranks = (int (* )(MPI_Group, int, int *, MPI_Group, int *))GetProcAddress(hPMPIModule, "MPI_Group_translate_ranks");
-    fn.MPI_Group_compare = (int (*)(MPI_Group, MPI_Group, int *))GetProcAddress(hMPIModule, "MPI_Group_compare");
-    if (fn.MPI_Group_compare == NULL) fn.MPI_Group_compare = (int (*)(MPI_Group, MPI_Group, int *))GetProcAddress(hPMPIModule, "MPI_Group_compare");
-    fn.MPI_Comm_group = (int (*)(MPI_Comm, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Comm_group");
-    if (fn.MPI_Comm_group == NULL) fn.MPI_Comm_group = (int (*)(MPI_Comm, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Comm_group");
-    fn.MPI_Group_union = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_union");
-    if (fn.MPI_Group_union == NULL) fn.MPI_Group_union = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_union");
-    fn.MPI_Group_intersection = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_intersection");
-    if (fn.MPI_Group_intersection == NULL) fn.MPI_Group_intersection = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_intersection");
-    fn.MPI_Group_difference = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_difference");
-    if (fn.MPI_Group_difference == NULL) fn.MPI_Group_difference = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_difference");
-    fn.MPI_Group_incl = (int (*)(MPI_Group, int, int *, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_incl");
-    if (fn.MPI_Group_incl == NULL) fn.MPI_Group_incl = (int (*)(MPI_Group, int, int *, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_incl");
-    fn.MPI_Group_excl = (int (*)(MPI_Group, int, int *, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_excl");
-    if (fn.MPI_Group_excl == NULL) fn.MPI_Group_excl = (int (*)(MPI_Group, int, int *, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_excl");
-    fn.MPI_Group_range_incl = (int (*)(MPI_Group, int, int [][3], MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_range_incl");
-    if (fn.MPI_Group_range_incl == NULL) fn.MPI_Group_range_incl = (int (*)(MPI_Group, int, int [][3], MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_range_incl");
-    fn.MPI_Group_range_excl = (int (*)(MPI_Group, int, int [][3], MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_range_excl");
-    if (fn.MPI_Group_range_excl == NULL) fn.MPI_Group_range_excl = (int (*)(MPI_Group, int, int [][3], MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_range_excl");
-    fn.MPI_Group_free = (int (*)(MPI_Group *))GetProcAddress(hMPIModule, "MPI_Group_free");
-    if (fn.MPI_Group_free == NULL) fn.MPI_Group_free = (int (*)(MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Group_free");
-    fn.MPI_Comm_size = (int (*)(MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Comm_size");
-    if (fn.MPI_Comm_size == NULL) fn.MPI_Comm_size = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Comm_size");
-    fn.MPI_Comm_rank = (int (*)(MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Comm_rank");
-    if (fn.MPI_Comm_rank == NULL) fn.MPI_Comm_rank = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Comm_rank");
-    fn.MPI_Comm_compare = (int (*)(MPI_Comm, MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Comm_compare");
-    if (fn.MPI_Comm_compare == NULL) fn.MPI_Comm_compare = (int (*)(MPI_Comm, MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Comm_compare");
-    fn.MPI_Comm_dup = (int (*)(MPI_Comm, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_dup");
-    if (fn.MPI_Comm_dup == NULL) fn.MPI_Comm_dup = (int (*)(MPI_Comm, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_dup");
-    fn.MPI_Comm_create = (int (*)(MPI_Comm, MPI_Group, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_create");
-    if (fn.MPI_Comm_create == NULL) fn.MPI_Comm_create = (int (*)(MPI_Comm, MPI_Group, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_create");
-    fn.MPI_Comm_split = (int (*)(MPI_Comm, int, int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_split");
-    if (fn.MPI_Comm_split == NULL) fn.MPI_Comm_split = (int (*)(MPI_Comm, int, int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_split");
-    fn.MPI_Comm_free = (int (*)(MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_free");
-    if (fn.MPI_Comm_free == NULL) fn.MPI_Comm_free = (int (*)(MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_free");
-    fn.MPI_Comm_test_inter = (int (*)(MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Comm_test_inter");
-    if (fn.MPI_Comm_test_inter == NULL) fn.MPI_Comm_test_inter = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Comm_test_inter");
-    fn.MPI_Comm_remote_size = (int (*)(MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Comm_remote_size");
-    if (fn.MPI_Comm_remote_size == NULL) fn.MPI_Comm_remote_size = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Comm_remote_size");
-    fn.MPI_Comm_remote_group = (int (*)(MPI_Comm, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Comm_remote_group");
-    if (fn.MPI_Comm_remote_group == NULL) fn.MPI_Comm_remote_group = (int (*)(MPI_Comm, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Comm_remote_group");
-    fn.MPI_Intercomm_create = (int (*)(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm * ))GetProcAddress(hMPIModule, "MPI_Intercomm_create");
-    if (fn.MPI_Intercomm_create == NULL) fn.MPI_Intercomm_create = (int (*)(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm * ))GetProcAddress(hPMPIModule, "MPI_Intercomm_create");
-    fn.MPI_Intercomm_merge = (int (*)(MPI_Comm, int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Intercomm_merge");
-    if (fn.MPI_Intercomm_merge == NULL) fn.MPI_Intercomm_merge = (int (*)(MPI_Comm, int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Intercomm_merge");
-    fn.MPI_Keyval_create = (int (*)(MPI_Copy_function *, MPI_Delete_function *, int *, void*))GetProcAddress(hMPIModule, "MPI_Keyval_create");
-    if (fn.MPI_Keyval_create == NULL) fn.MPI_Keyval_create = (int (*)(MPI_Copy_function *, MPI_Delete_function *, int *, void*))GetProcAddress(hPMPIModule, "MPI_Keyval_create");
-    fn.MPI_Keyval_free = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Keyval_free");
-    if (fn.MPI_Keyval_free == NULL) fn.MPI_Keyval_free = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Keyval_free");
-    fn.MPI_Attr_put = (int (*)(MPI_Comm, int, void*))GetProcAddress(hMPIModule, "MPI_Attr_put");
-    if (fn.MPI_Attr_put == NULL) fn.MPI_Attr_put = (int (*)(MPI_Comm, int, void*))GetProcAddress(hPMPIModule, "MPI_Attr_put");
-    fn.MPI_Attr_get = (int (*)(MPI_Comm, int, void *, int *))GetProcAddress(hMPIModule, "MPI_Attr_get");
-    if (fn.MPI_Attr_get == NULL) fn.MPI_Attr_get = (int (*)(MPI_Comm, int, void *, int *))GetProcAddress(hPMPIModule, "MPI_Attr_get");
-    fn.MPI_Attr_delete = (int (*)(MPI_Comm, int))GetProcAddress(hMPIModule, "MPI_Attr_delete");
-    if (fn.MPI_Attr_delete == NULL) fn.MPI_Attr_delete = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "MPI_Attr_delete");
-    fn.MPI_Topo_test = (int (*)(MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Topo_test");
-    if (fn.MPI_Topo_test == NULL) fn.MPI_Topo_test = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Topo_test");
-    fn.MPI_Cart_create = (int (*)(MPI_Comm, int, int *, int *, int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Cart_create");
-    if (fn.MPI_Cart_create == NULL) fn.MPI_Cart_create = (int (*)(MPI_Comm, int, int *, int *, int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Cart_create");
-    fn.MPI_Dims_create = (int (*)(int, int, int *))GetProcAddress(hMPIModule, "MPI_Dims_create");
-    if (fn.MPI_Dims_create == NULL) fn.MPI_Dims_create = (int (*)(int, int, int *))GetProcAddress(hPMPIModule, "MPI_Dims_create");
-    fn.MPI_Graph_create = (int (*)(MPI_Comm, int, int *, int *, int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Graph_create");
-    if (fn.MPI_Graph_create == NULL) fn.MPI_Graph_create = (int (*)(MPI_Comm, int, int *, int *, int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Graph_create");
-    fn.MPI_Dist_graph_create = (int (*)(MPI_Comm, int, int [], int [], int [], int [], MPI_Info, int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Dist_graph_create");
-    if(fn.MPI_Dist_graph_create == NULL) fn.MPI_Dist_graph_create = (int (*)(MPI_Comm, int, int [], int [], int [], int [], MPI_Info, int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Dist_graph_create");
-    fn.MPI_Dist_graph_create_adjacent = (int (*)(MPI_Comm, int, int [], int [], int, int [], int [], MPI_Info, int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Dist_graph_create_adjacent");
-    if(fn.MPI_Dist_graph_create_adjacent == NULL) fn.MPI_Dist_graph_create_adjacent = (int (*)(MPI_Comm, int, int [], int [], int, int [], int [], MPI_Info, int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Dist_graph_create_adjacent");
-    fn.MPI_Graphdims_get = (int (*)(MPI_Comm, int *, int *))GetProcAddress(hMPIModule, "MPI_Graphdims_get");
-    if (fn.MPI_Graphdims_get == NULL) fn.MPI_Graphdims_get = (int (*)(MPI_Comm, int *, int *))GetProcAddress(hPMPIModule, "MPI_Graphdims_get");
-    fn.MPI_Graph_get = (int (*)(MPI_Comm, int, int, int *, int *))GetProcAddress(hMPIModule, "MPI_Graph_get");
-    if (fn.MPI_Graph_get == NULL) fn.MPI_Graph_get = (int (*)(MPI_Comm, int, int, int *, int *))GetProcAddress(hPMPIModule, "MPI_Graph_get");
-    fn.MPI_Cartdim_get = (int (*)(MPI_Comm, int *))GetProcAddress(hMPIModule, "MPI_Cartdim_get");
-    if (fn.MPI_Cartdim_get == NULL) fn.MPI_Cartdim_get = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "MPI_Cartdim_get");
-    fn.MPI_Cart_get = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hMPIModule, "MPI_Cart_get");
-    if (fn.MPI_Cart_get == NULL) fn.MPI_Cart_get = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hPMPIModule, "MPI_Cart_get");
-    fn.MPI_Cart_rank = (int (*)(MPI_Comm, int *, int *))GetProcAddress(hMPIModule, "MPI_Cart_rank");
-    if (fn.MPI_Cart_rank == NULL) fn.MPI_Cart_rank = (int (*)(MPI_Comm, int *, int *))GetProcAddress(hPMPIModule, "MPI_Cart_rank");
-    fn.MPI_Cart_coords = (int (*)(MPI_Comm, int, int, int *))GetProcAddress(hMPIModule, "MPI_Cart_coords");
-    if (fn.MPI_Cart_coords == NULL) fn.MPI_Cart_coords = (int (*)(MPI_Comm, int, int, int *))GetProcAddress(hPMPIModule, "MPI_Cart_coords");
-    fn.MPI_Graph_neighbors_count = (int (*)(MPI_Comm, int, int *))GetProcAddress(hMPIModule, "MPI_Graph_neighbors_count");
-    if (fn.MPI_Graph_neighbors_count == NULL) fn.MPI_Graph_neighbors_count = (int (*)(MPI_Comm, int, int *))GetProcAddress(hPMPIModule, "MPI_Graph_neighbors_count");
-    fn.MPI_Graph_neighbors = (int (*)(MPI_Comm, int, int, int *))GetProcAddress(hMPIModule, "MPI_Graph_neighbors");
-    if (fn.MPI_Graph_neighbors == NULL) fn.MPI_Graph_neighbors = (int (*)(MPI_Comm, int, int, int *))GetProcAddress(hPMPIModule, "MPI_Graph_neighbors");
-    fn.MPI_Dist_graph_neighbors = (int (*)(MPI_Comm, int, int [], int [],int, int [], int []))GetProcAddress(hMPIModule, "MPI_Dist_graph_neighbors");
-    if(fn.MPI_Dist_graph_neighbors == NULL) fn.MPI_Dist_graph_neighbors = (int (*)(MPI_Comm, int, int [], int [],int, int [], int []))GetProcAddress(hPMPIModule, "MPI_Dist_graph_neighbors");
-    fn.MPI_Dist_graph_neighbors_count = (int (*)(MPI_Comm, int *, int *, int *))GetProcAddress(hMPIModule, "MPI_Dist_graph_neighbors_count");
-    if(fn.MPI_Dist_graph_neighbors_count == NULL) fn.MPI_Dist_graph_neighbors_count = (int (*)(MPI_Comm, int *, int *, int *))GetProcAddress(hPMPIModule, "MPI_Dist_graph_neighbors_count");
-    fn.MPI_Cart_shift = (int (*)(MPI_Comm, int, int, int *, int *))GetProcAddress(hMPIModule, "MPI_Cart_shift");
-    if (fn.MPI_Cart_shift == NULL) fn.MPI_Cart_shift = (int (*)(MPI_Comm, int, int, int *, int *))GetProcAddress(hPMPIModule, "MPI_Cart_shift");
-    fn.MPI_Cart_sub = (int (*)(MPI_Comm, int *, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Cart_sub");
-    if (fn.MPI_Cart_sub == NULL) fn.MPI_Cart_sub = (int (*)(MPI_Comm, int *, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Cart_sub");
-    fn.MPI_Cart_map = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hMPIModule, "MPI_Cart_map");
-    if (fn.MPI_Cart_map == NULL) fn.MPI_Cart_map = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hPMPIModule, "MPI_Cart_map");
-    fn.MPI_Graph_map = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hMPIModule, "MPI_Graph_map");
-    if (fn.MPI_Graph_map == NULL) fn.MPI_Graph_map = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hPMPIModule, "MPI_Graph_map");
-    fn.MPI_Get_processor_name = (int (*)(char *, int *))GetProcAddress(hMPIModule, "MPI_Get_processor_name");
-    if (fn.MPI_Get_processor_name == NULL) fn.MPI_Get_processor_name = (int (*)(char *, int *))GetProcAddress(hPMPIModule, "MPI_Get_processor_name");
-    fn.MPI_Get_version = (int (*)(int *, int *))GetProcAddress(hMPIModule, "MPI_Get_version");
-    if (fn.MPI_Get_version == NULL) fn.MPI_Get_version = (int (*)(int *, int *))GetProcAddress(hPMPIModule, "MPI_Get_version");
-    fn.MPI_Errhandler_create = (int (*)(MPI_Handler_function *, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Errhandler_create");
-    if (fn.MPI_Errhandler_create == NULL) fn.MPI_Errhandler_create = (int (*)(MPI_Handler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Errhandler_create");
-    fn.MPI_Errhandler_set = (int (*)(MPI_Comm, MPI_Errhandler))GetProcAddress(hMPIModule, "MPI_Errhandler_set");
-    if (fn.MPI_Errhandler_set == NULL) fn.MPI_Errhandler_set = (int (*)(MPI_Comm, MPI_Errhandler))GetProcAddress(hPMPIModule, "MPI_Errhandler_set");
-    fn.MPI_Errhandler_get = (int (*)(MPI_Comm, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Errhandler_get");
-    if (fn.MPI_Errhandler_get == NULL) fn.MPI_Errhandler_get = (int (*)(MPI_Comm, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Errhandler_get");
-    fn.MPI_Errhandler_free = (int (*)(MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Errhandler_free");
-    if (fn.MPI_Errhandler_free == NULL) fn.MPI_Errhandler_free = (int (*)(MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Errhandler_free");
-    fn.MPI_Error_string = (int (*)(int, char *, int *))GetProcAddress(hMPIModule, "MPI_Error_string");
-    if (fn.MPI_Error_string == NULL) fn.MPI_Error_string = (int (*)(int, char *, int *))GetProcAddress(hPMPIModule, "MPI_Error_string");
-    fn.MPI_Error_class = (int (*)(int, int *))GetProcAddress(hMPIModule, "MPI_Error_class");
-    if (fn.MPI_Error_class == NULL) fn.MPI_Error_class = (int (*)(int, int *))GetProcAddress(hPMPIModule, "MPI_Error_class");
-    fn.MPI_Wtime = (double (*)(void))GetProcAddress(hMPIModule, "MPI_Wtime");
-    if (fn.MPI_Wtime == NULL) fn.MPI_Wtime = (double (*)(void))GetProcAddress(hPMPIModule, "MPI_Wtime");
-    if (fn.MPI_Wtime == NULL) fn.MPI_Wtime = (double (*)(void))GetProcAddress(hPMPIModule, "MPI_Wtime");
-    fn.MPI_Wtick = (double (*)(void))GetProcAddress(hMPIModule, "MPI_Wtick");
-    if (fn.MPI_Wtick == NULL) fn.MPI_Wtick = (double (*)(void))GetProcAddress(hPMPIModule, "MPI_Wtick");
-    fn.MPI_Init = (int (*)(int *, char ***))GetProcAddress(hMPIModule, "MPI_Init");
-    if (fn.MPI_Init == NULL) fn.MPI_Init = (int (*)(int *, char ***))GetProcAddress(hPMPIModule, "MPI_Init");
-    fn.MPI_Finalize = (int (*)(void))GetProcAddress(hMPIModule, "MPI_Finalize");
-    if (fn.MPI_Finalize == NULL) fn.MPI_Finalize = (int (*)(void))GetProcAddress(hPMPIModule, "MPI_Finalize");
-    fn.MPI_Initialized = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Initialized");
-    if (fn.MPI_Initialized == NULL) fn.MPI_Initialized = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Initialized");
-    fn.MPI_Abort = (int (*)(MPI_Comm, int))GetProcAddress(hMPIModule, "MPI_Abort");
-    if (fn.MPI_Abort == NULL) fn.MPI_Abort = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "MPI_Abort");
-    fn.MPI_Pcontrol = (int (*)(const int, ...))GetProcAddress(hMPIModule, "MPI_Pcontrol");
-    if (fn.MPI_Pcontrol == NULL) fn.MPI_Pcontrol = (int (*)(const int, ...))GetProcAddress(hPMPIModule, "MPI_Pcontrol");
-    fn.MPI_DUP_FN = (int (* )( MPI_Comm, int, void *, void *, void *, int * ))GetProcAddress(hMPIModule, "MPIR_Dup_fn"/*"MPI_DUP_FN"*/);
-    if (fn.MPI_DUP_FN == NULL) fn.MPI_DUP_FN = (int (* )( MPI_Comm, int, void *, void *, void *, int * ))GetProcAddress(hPMPIModule, "MPIR_Dup_fn"/*"MPI_DUP_FN"*/);
-    fn.MPI_Close_port = (int (*)(char *))GetProcAddress(hMPIModule, "MPI_Close_port");
-    if (fn.MPI_Close_port == NULL) fn.MPI_Close_port = (int (*)(char *))GetProcAddress(hPMPIModule, "MPI_Close_port");
-    fn.MPI_Comm_accept = (int (*)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_accept");
-    if (fn.MPI_Comm_accept == NULL) fn.MPI_Comm_accept = (int (*)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_accept");
-    fn.MPI_Comm_connect = (int (*)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_connect");
-    if (fn.MPI_Comm_connect == NULL) fn.MPI_Comm_connect = (int (*)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_connect");
-    fn.MPI_Comm_disconnect = (int (*)(MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_disconnect");
-    if (fn.MPI_Comm_disconnect == NULL) fn.MPI_Comm_disconnect = (int (*)(MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_disconnect");
-    fn.MPI_Comm_get_parent = (int (*)(MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_get_parent");
-    if (fn.MPI_Comm_get_parent == NULL) fn.MPI_Comm_get_parent = (int (*)(MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_get_parent");
-    fn.MPI_Comm_join = (int (*)(int, MPI_Comm *))GetProcAddress(hMPIModule, "MPI_Comm_join");
-    if (fn.MPI_Comm_join == NULL) fn.MPI_Comm_join = (int (*)(int, MPI_Comm *))GetProcAddress(hPMPIModule, "MPI_Comm_join");
-    fn.MPI_Comm_spawn = (int (*)(char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *, int []))GetProcAddress(hMPIModule, "MPI_Comm_spawn");
-    if (fn.MPI_Comm_spawn == NULL) fn.MPI_Comm_spawn = (int (*)(char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *, int []))GetProcAddress(hPMPIModule, "MPI_Comm_spawn");
-    fn.MPI_Comm_spawn_multiple = (int (*)(int, char *[], char **[], int [], MPI_Info [], int, MPI_Comm, MPI_Comm *, int []))GetProcAddress(hMPIModule, "MPI_Comm_spawn_multiple"); 
-    if (fn.MPI_Comm_spawn_multiple == NULL) fn.MPI_Comm_spawn_multiple = (int (*)(int, char *[], char **[], int [], MPI_Info [], int, MPI_Comm, MPI_Comm *, int []))GetProcAddress(hPMPIModule, "MPI_Comm_spawn_multiple"); 
-    fn.MPI_Lookup_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hMPIModule, "MPI_Lookup_name");
-    if (fn.MPI_Lookup_name == NULL) fn.MPI_Lookup_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hPMPIModule, "MPI_Lookup_name");
-    fn.MPI_Open_port = (int (*)(MPI_Info, char *))GetProcAddress(hMPIModule, "MPI_Open_port");
-    if (fn.MPI_Open_port == NULL) fn.MPI_Open_port = (int (*)(MPI_Info, char *))GetProcAddress(hPMPIModule, "MPI_Open_port");
-    fn.MPI_Publish_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hMPIModule, "MPI_Publish_name");
-    if (fn.MPI_Publish_name == NULL) fn.MPI_Publish_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hPMPIModule, "MPI_Publish_name");
-    fn.MPI_Unpublish_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hMPIModule, "MPI_Unpublish_name");
-    if (fn.MPI_Unpublish_name == NULL) fn.MPI_Unpublish_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hPMPIModule, "MPI_Unpublish_name");
-    fn.MPI_Accumulate = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,  MPI_Op, MPI_Win))GetProcAddress(hMPIModule, "MPI_Accumulate");
-    if (fn.MPI_Accumulate == NULL) fn.MPI_Accumulate = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,  MPI_Op, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Accumulate");
-    fn.MPI_Get = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win))GetProcAddress(hMPIModule, "MPI_Get");
-    if (fn.MPI_Get == NULL) fn.MPI_Get = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Get");
-    fn.MPI_Put = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win))GetProcAddress(hMPIModule, "MPI_Put");
-    if (fn.MPI_Put == NULL) fn.MPI_Put = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Put");
-    fn.MPI_Win_complete = (int (*)(MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_complete");
-    if (fn.MPI_Win_complete == NULL) fn.MPI_Win_complete = (int (*)(MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_complete");
-    fn.MPI_Win_create = (int (*)(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *))GetProcAddress(hMPIModule, "MPI_Win_create");
-    if (fn.MPI_Win_create == NULL) fn.MPI_Win_create = (int (*)(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *))GetProcAddress(hPMPIModule, "MPI_Win_create");
-    fn.MPI_Win_fence = (int (*)(int, MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_fence");
-    if (fn.MPI_Win_fence == NULL) fn.MPI_Win_fence = (int (*)(int, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_fence");
-    fn.MPI_Win_free = (int (*)(MPI_Win *))GetProcAddress(hMPIModule, "MPI_Win_free");
-    if (fn.MPI_Win_free == NULL) fn.MPI_Win_free = (int (*)(MPI_Win *))GetProcAddress(hPMPIModule, "MPI_Win_free");
-    fn.MPI_Win_get_group = (int (*)(MPI_Win, MPI_Group *))GetProcAddress(hMPIModule, "MPI_Win_get_group");
-    if (fn.MPI_Win_get_group == NULL) fn.MPI_Win_get_group = (int (*)(MPI_Win, MPI_Group *))GetProcAddress(hPMPIModule, "MPI_Win_get_group");
-    fn.MPI_Win_lock = (int (*)(int, int, int, MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_lock");
-    if (fn.MPI_Win_lock == NULL) fn.MPI_Win_lock = (int (*)(int, int, int, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_lock");
-    fn.MPI_Win_post = (int (*)(MPI_Group, int, MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_post");
-    if (fn.MPI_Win_post == NULL) fn.MPI_Win_post = (int (*)(MPI_Group, int, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_post");
-    fn.MPI_Win_start = (int (*)(MPI_Group, int, MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_start");
-    if (fn.MPI_Win_start == NULL) fn.MPI_Win_start = (int (*)(MPI_Group, int, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_start");
-    fn.MPI_Win_test = (int (*)(MPI_Win, int *))GetProcAddress(hMPIModule, "MPI_Win_test");
-    if (fn.MPI_Win_test == NULL) fn.MPI_Win_test = (int (*)(MPI_Win, int *))GetProcAddress(hPMPIModule, "MPI_Win_test");
-    fn.MPI_Win_unlock = (int (*)(int, MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_unlock");
-    if (fn.MPI_Win_unlock == NULL) fn.MPI_Win_unlock = (int (*)(int, MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_unlock");
-    fn.MPI_Win_wait = (int (*)(MPI_Win))GetProcAddress(hMPIModule, "MPI_Win_wait");
-    if (fn.MPI_Win_wait == NULL) fn.MPI_Win_wait = (int (*)(MPI_Win))GetProcAddress(hPMPIModule, "MPI_Win_wait");
-    fn.MPI_Alltoallw = (int (*)(void *, int [], int [], MPI_Datatype [], void *, int [], int [], MPI_Datatype [], MPI_Comm))GetProcAddress(hMPIModule, "MPI_Alltoallw");
-    if (fn.MPI_Alltoallw == NULL) fn.MPI_Alltoallw = (int (*)(void *, int [], int [], MPI_Datatype [], void *, int [], int [], MPI_Datatype [], MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Alltoallw");
-    fn.MPI_Exscan = (int (*)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hMPIModule, "MPI_Exscan");
-    if (fn.MPI_Exscan == NULL) fn.MPI_Exscan = (int (*)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hPMPIModule, "MPI_Exscan");
-    fn.MPI_Add_error_class = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Add_error_class");
-    if (fn.MPI_Add_error_class == NULL) fn.MPI_Add_error_class = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Add_error_class");
-    fn.MPI_Add_error_code = (int (*)(int, int *))GetProcAddress(hMPIModule, "MPI_Add_error_code");
-    if (fn.MPI_Add_error_code == NULL) fn.MPI_Add_error_code = (int (*)(int, int *))GetProcAddress(hPMPIModule, "MPI_Add_error_code");
-    fn.MPI_Add_error_string = (int (*)(int, char *))GetProcAddress(hMPIModule, "MPI_Add_error_string");
-    if (fn.MPI_Add_error_string == NULL) fn.MPI_Add_error_string = (int (*)(int, char *))GetProcAddress(hPMPIModule, "MPI_Add_error_string");
-    fn.MPI_Comm_call_errhandler = (int (*)(MPI_Comm, int))GetProcAddress(hMPIModule, "MPI_Comm_call_errhandler");
-    if (fn.MPI_Comm_call_errhandler == NULL) fn.MPI_Comm_call_errhandler = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "MPI_Comm_call_errhandler");
-    fn.MPI_Comm_create_keyval = (int (*)(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, int *, void *))GetProcAddress(hMPIModule, "MPI_Comm_create_keyval");
-    if (fn.MPI_Comm_create_keyval == NULL) fn.MPI_Comm_create_keyval = (int (*)(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, int *, void *))GetProcAddress(hPMPIModule, "MPI_Comm_create_keyval");
-    fn.MPI_Comm_delete_attr = (int (*)(MPI_Comm, int))GetProcAddress(hMPIModule, "MPI_Comm_delete_attr");
-    if (fn.MPI_Comm_delete_attr == NULL) fn.MPI_Comm_delete_attr = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "MPI_Comm_delete_attr");
-    fn.MPI_Comm_free_keyval = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Comm_free_keyval");
-    if (fn.MPI_Comm_free_keyval == NULL) fn.MPI_Comm_free_keyval = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Comm_free_keyval");
-    fn.MPI_Comm_get_attr = (int (*)(MPI_Comm, int, void *, int *))GetProcAddress(hMPIModule, "MPI_Comm_get_attr");
-    if (fn.MPI_Comm_get_attr == NULL) fn.MPI_Comm_get_attr = (int (*)(MPI_Comm, int, void *, int *))GetProcAddress(hPMPIModule, "MPI_Comm_get_attr");
-    fn.MPI_Comm_get_name = (int (*)(MPI_Comm, char *, int *))GetProcAddress(hMPIModule, "MPI_Comm_get_name");
-    if (fn.MPI_Comm_get_name == NULL) fn.MPI_Comm_get_name = (int (*)(MPI_Comm, char *, int *))GetProcAddress(hPMPIModule, "MPI_Comm_get_name");
-    fn.MPI_Comm_set_attr = (int (*)(MPI_Comm, int, void *))GetProcAddress(hMPIModule, "MPI_Comm_set_attr");
-    if (fn.MPI_Comm_set_attr == NULL) fn.MPI_Comm_set_attr = (int (*)(MPI_Comm, int, void *))GetProcAddress(hPMPIModule, "MPI_Comm_set_attr");
-    fn.MPI_Comm_set_name = (int (*)(MPI_Comm, char *))GetProcAddress(hMPIModule, "MPI_Comm_set_name");
-    if (fn.MPI_Comm_set_name == NULL) fn.MPI_Comm_set_name = (int (*)(MPI_Comm, char *))GetProcAddress(hPMPIModule, "MPI_Comm_set_name");
-    fn.MPI_File_call_errhandler = (int (*)(MPI_File, int))GetProcAddress(hMPIModule, "MPI_File_call_errhandler");
-    if (fn.MPI_File_call_errhandler == NULL) fn.MPI_File_call_errhandler = (int (*)(MPI_File, int))GetProcAddress(hPMPIModule, "MPI_File_call_errhandler");
-    fn.MPI_Grequest_complete = (int (*)(MPI_Request))GetProcAddress(hMPIModule, "MPI_Grequest_complete");
-    if (fn.MPI_Grequest_complete == NULL) fn.MPI_Grequest_complete = (int (*)(MPI_Request))GetProcAddress(hPMPIModule, "MPI_Grequest_complete");
-    fn.MPI_Grequest_start = (int (*)(MPI_Grequest_query_function *, MPI_Grequest_free_function *, MPI_Grequest_cancel_function *, void *, MPI_Request *))GetProcAddress(hMPIModule, "MPI_Grequest_start");
-    if (fn.MPI_Grequest_start == NULL) fn.MPI_Grequest_start = (int (*)(MPI_Grequest_query_function *, MPI_Grequest_free_function *, MPI_Grequest_cancel_function *, void *, MPI_Request *))GetProcAddress(hPMPIModule, "MPI_Grequest_start");
-    fn.MPI_Init_thread = (int (*)(int *, char ***, int, int *))GetProcAddress(hMPIModule, "MPI_Init_thread");
-    if (fn.MPI_Init_thread == NULL) fn.MPI_Init_thread = (int (*)(int *, char ***, int, int *))GetProcAddress(hPMPIModule, "MPI_Init_thread");
-    fn.MPI_Is_thread_main = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Is_thread_main");
-    if (fn.MPI_Is_thread_main == NULL) fn.MPI_Is_thread_main = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Is_thread_main");
-    fn.MPI_Query_thread = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Query_thread");
-    if (fn.MPI_Query_thread == NULL) fn.MPI_Query_thread = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Query_thread");
-    fn.MPI_Status_set_cancelled = (int (*)(MPI_Status *, int))GetProcAddress(hMPIModule, "MPI_Status_set_cancelled");
-    if (fn.MPI_Status_set_cancelled == NULL) fn.MPI_Status_set_cancelled = (int (*)(MPI_Status *, int))GetProcAddress(hPMPIModule, "MPI_Status_set_cancelled");
-    fn.MPI_Status_set_elements = (int (*)(MPI_Status *, MPI_Datatype, int))GetProcAddress(hMPIModule, "MPI_Status_set_elements");
-    if (fn.MPI_Status_set_elements == NULL) fn.MPI_Status_set_elements = (int (*)(MPI_Status *, MPI_Datatype, int))GetProcAddress(hPMPIModule, "MPI_Status_set_elements");
-    fn.MPI_Type_create_keyval = (int (*)(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *, int *, void *))GetProcAddress(hMPIModule, "MPI_Type_create_keyval");
-    if (fn.MPI_Type_create_keyval == NULL) fn.MPI_Type_create_keyval = (int (*)(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *, int *, void *))GetProcAddress(hPMPIModule, "MPI_Type_create_keyval");
-    fn.MPI_Type_delete_attr = (int (*)(MPI_Datatype, int))GetProcAddress(hMPIModule, "MPI_Type_delete_attr");
-    if (fn.MPI_Type_delete_attr == NULL) fn.MPI_Type_delete_attr = (int (*)(MPI_Datatype, int))GetProcAddress(hPMPIModule, "MPI_Type_delete_attr");
-    fn.MPI_Type_dup = (int (*)(MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_dup");
-    if (fn.MPI_Type_dup == NULL) fn.MPI_Type_dup = (int (*)(MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_dup");
-    fn.MPI_Type_free_keyval = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Type_free_keyval");
-    if (fn.MPI_Type_free_keyval == NULL) fn.MPI_Type_free_keyval = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Type_free_keyval");
-    fn.MPI_Type_get_attr = (int (*)(MPI_Datatype, int, void *, int *))GetProcAddress(hMPIModule, "MPI_Type_get_attr");
-    if (fn.MPI_Type_get_attr == NULL) fn.MPI_Type_get_attr = (int (*)(MPI_Datatype, int, void *, int *))GetProcAddress(hPMPIModule, "MPI_Type_get_attr");
-    fn.MPI_Type_get_contents = (int (*)(MPI_Datatype, int, int, int, int [], MPI_Aint [], MPI_Datatype []))GetProcAddress(hMPIModule, "MPI_Type_get_contents");
-    if (fn.MPI_Type_get_contents == NULL) fn.MPI_Type_get_contents = (int (*)(MPI_Datatype, int, int, int, int [], MPI_Aint [], MPI_Datatype []))GetProcAddress(hPMPIModule, "MPI_Type_get_contents");
-    fn.MPI_Type_get_envelope = (int (*)(MPI_Datatype, int *, int *, int *, int *))GetProcAddress(hMPIModule, "MPI_Type_get_envelope");
-    if (fn.MPI_Type_get_envelope == NULL) fn.MPI_Type_get_envelope = (int (*)(MPI_Datatype, int *, int *, int *, int *))GetProcAddress(hPMPIModule, "MPI_Type_get_envelope");
-    fn.MPI_Type_get_name = (int (*)(MPI_Datatype, char *, int *))GetProcAddress(hMPIModule, "MPI_Type_get_name");
-    if (fn.MPI_Type_get_name == NULL) fn.MPI_Type_get_name = (int (*)(MPI_Datatype, char *, int *))GetProcAddress(hPMPIModule, "MPI_Type_get_name");
-    fn.MPI_Type_set_attr = (int (*)(MPI_Datatype, int, void *))GetProcAddress(hMPIModule, "MPI_Type_set_attr");
-    if (fn.MPI_Type_set_attr == NULL) fn.MPI_Type_set_attr = (int (*)(MPI_Datatype, int, void *))GetProcAddress(hPMPIModule, "MPI_Type_set_attr");
-    fn.MPI_Type_set_name = (int (*)(MPI_Datatype, char *))GetProcAddress(hMPIModule, "MPI_Type_set_name");
-    if (fn.MPI_Type_set_name == NULL) fn.MPI_Type_set_name = (int (*)(MPI_Datatype, char *))GetProcAddress(hPMPIModule, "MPI_Type_set_name");
-    fn.MPI_Type_match_size = (int (*)( int, int, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_match_size");
-    if (fn.MPI_Type_match_size == NULL) fn.MPI_Type_match_size = (int (*)( int, int, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_match_size");
-    fn.MPI_Win_call_errhandler = (int (*)(MPI_Win, int))GetProcAddress(hMPIModule, "MPI_Win_call_errhandler");
-    if (fn.MPI_Win_call_errhandler == NULL) fn.MPI_Win_call_errhandler = (int (*)(MPI_Win, int))GetProcAddress(hPMPIModule, "MPI_Win_call_errhandler");
-    fn.MPI_Win_create_keyval = (int (*)(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *, int *, void *))GetProcAddress(hMPIModule, "MPI_Win_create_keyval");
-    if (fn.MPI_Win_create_keyval == NULL) fn.MPI_Win_create_keyval = (int (*)(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *, int *, void *))GetProcAddress(hPMPIModule, "MPI_Win_create_keyval");
-    fn.MPI_Win_delete_attr = (int (*)(MPI_Win, int))GetProcAddress(hMPIModule, "MPI_Win_delete_attr");
-    if (fn.MPI_Win_delete_attr == NULL) fn.MPI_Win_delete_attr = (int (*)(MPI_Win, int))GetProcAddress(hPMPIModule, "MPI_Win_delete_attr");
-    fn.MPI_Win_free_keyval = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Win_free_keyval");
-    if (fn.MPI_Win_free_keyval == NULL) fn.MPI_Win_free_keyval = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Win_free_keyval");
-    fn.MPI_Win_get_attr = (int (*)(MPI_Win, int, void *, int *))GetProcAddress(hMPIModule, "MPI_Win_get_attr");
-    if (fn.MPI_Win_get_attr == NULL) fn.MPI_Win_get_attr = (int (*)(MPI_Win, int, void *, int *))GetProcAddress(hPMPIModule, "MPI_Win_get_attr");
-    fn.MPI_Win_get_name = (int (*)(MPI_Win, char *, int *))GetProcAddress(hMPIModule, "MPI_Win_get_name");
-    if (fn.MPI_Win_get_name == NULL) fn.MPI_Win_get_name = (int (*)(MPI_Win, char *, int *))GetProcAddress(hPMPIModule, "MPI_Win_get_name");
-    fn.MPI_Win_set_attr = (int (*)(MPI_Win, int, void *))GetProcAddress(hMPIModule, "MPI_Win_set_attr");
-    if (fn.MPI_Win_set_attr == NULL) fn.MPI_Win_set_attr = (int (*)(MPI_Win, int, void *))GetProcAddress(hPMPIModule, "MPI_Win_set_attr");
-    fn.MPI_Win_set_name = (int (*)(MPI_Win, char *))GetProcAddress(hMPIModule, "MPI_Win_set_name");
-    if (fn.MPI_Win_set_name == NULL) fn.MPI_Win_set_name = (int (*)(MPI_Win, char *))GetProcAddress(hPMPIModule, "MPI_Win_set_name");
-    fn.MPI_Alloc_mem = (int (*)(MPI_Aint, MPI_Info info, void *baseptr))GetProcAddress(hMPIModule, "MPI_Alloc_mem");
-    if (fn.MPI_Alloc_mem == NULL) fn.MPI_Alloc_mem = (int (*)(MPI_Aint, MPI_Info info, void *baseptr))GetProcAddress(hPMPIModule, "MPI_Alloc_mem");
-    fn.MPI_Comm_create_errhandler = (int (*)(MPI_Comm_errhandler_function *, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Comm_create_errhandler");
-    if (fn.MPI_Comm_create_errhandler == NULL) fn.MPI_Comm_create_errhandler = (int (*)(MPI_Comm_errhandler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Comm_create_errhandler");
-    fn.MPI_Comm_get_errhandler = (int (*)(MPI_Comm, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Comm_get_errhandler");
-    if (fn.MPI_Comm_get_errhandler == NULL) fn.MPI_Comm_get_errhandler = (int (*)(MPI_Comm, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Comm_get_errhandler");
-    fn.MPI_Comm_set_errhandler = (int (*)(MPI_Comm, MPI_Errhandler))GetProcAddress(hMPIModule, "MPI_Comm_set_errhandler");
-    if (fn.MPI_Comm_set_errhandler == NULL) fn.MPI_Comm_set_errhandler = (int (*)(MPI_Comm, MPI_Errhandler))GetProcAddress(hPMPIModule, "MPI_Comm_set_errhandler");
-    fn.MPI_File_create_errhandler = (int (*)(MPI_File_errhandler_function *, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_File_create_errhandler");
-    if (fn.MPI_File_create_errhandler == NULL) fn.MPI_File_create_errhandler = (int (*)(MPI_File_errhandler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_File_create_errhandler");
-    fn.MPI_File_get_errhandler = (int (*)(MPI_File, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_File_get_errhandler");
-    if (fn.MPI_File_get_errhandler == NULL) fn.MPI_File_get_errhandler = (int (*)(MPI_File, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_File_get_errhandler");
-    fn.MPI_File_set_errhandler = (int (*)(MPI_File, MPI_Errhandler))GetProcAddress(hMPIModule, "MPI_File_set_errhandler");
-    if (fn.MPI_File_set_errhandler == NULL) fn.MPI_File_set_errhandler = (int (*)(MPI_File, MPI_Errhandler))GetProcAddress(hPMPIModule, "MPI_File_set_errhandler");
-    fn.MPI_Finalized = (int (*)(int *))GetProcAddress(hMPIModule, "MPI_Finalized");
-    if (fn.MPI_Finalized == NULL) fn.MPI_Finalized = (int (*)(int *))GetProcAddress(hPMPIModule, "MPI_Finalized");
-    fn.MPI_Free_mem = (int (*)(void *))GetProcAddress(hMPIModule, "MPI_Free_mem");
-    if (fn.MPI_Free_mem == NULL) fn.MPI_Free_mem = (int (*)(void *))GetProcAddress(hPMPIModule, "MPI_Free_mem");
-    fn.MPI_Get_address = (int (*)(void *, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Get_address");
-    if (fn.MPI_Get_address == NULL) fn.MPI_Get_address = (int (*)(void *, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Get_address");
-    fn.MPI_Info_create = (int (*)(MPI_Info *))GetProcAddress(hMPIModule, "MPI_Info_create");
-    if (fn.MPI_Info_create == NULL) fn.MPI_Info_create = (int (*)(MPI_Info *))GetProcAddress(hPMPIModule, "MPI_Info_create");
-    fn.MPI_Info_delete = (int (*)(MPI_Info, char *))GetProcAddress(hMPIModule, "MPI_Info_delete");
-    if (fn.MPI_Info_delete == NULL) fn.MPI_Info_delete = (int (*)(MPI_Info, char *))GetProcAddress(hPMPIModule, "MPI_Info_delete");
-    fn.MPI_Info_dup = (int (*)(MPI_Info, MPI_Info *))GetProcAddress(hMPIModule, "MPI_Info_dup");
-    if (fn.MPI_Info_dup == NULL) fn.MPI_Info_dup = (int (*)(MPI_Info, MPI_Info *))GetProcAddress(hPMPIModule, "MPI_Info_dup");
-    fn.MPI_Info_free = (int (*)(MPI_Info *info))GetProcAddress(hMPIModule, "MPI_Info_free");
-    if (fn.MPI_Info_free == NULL) fn.MPI_Info_free = (int (*)(MPI_Info *info))GetProcAddress(hPMPIModule, "MPI_Info_free");
-    fn.MPI_Info_get = (int (*)(MPI_Info, char *, int, char *, int *))GetProcAddress(hMPIModule, "MPI_Info_get");
-    if (fn.MPI_Info_get == NULL) fn.MPI_Info_get = (int (*)(MPI_Info, char *, int, char *, int *))GetProcAddress(hPMPIModule, "MPI_Info_get");
-    fn.MPI_Info_get_nkeys = (int (*)(MPI_Info, int *))GetProcAddress(hMPIModule, "MPI_Info_get_nkeys");
-    if (fn.MPI_Info_get_nkeys == NULL) fn.MPI_Info_get_nkeys = (int (*)(MPI_Info, int *))GetProcAddress(hPMPIModule, "MPI_Info_get_nkeys");
-    fn.MPI_Info_get_nthkey = (int (*)(MPI_Info, int, char *))GetProcAddress(hMPIModule, "MPI_Info_get_nthkey");
-    if (fn.MPI_Info_get_nthkey == NULL) fn.MPI_Info_get_nthkey = (int (*)(MPI_Info, int, char *))GetProcAddress(hPMPIModule, "MPI_Info_get_nthkey");
-    fn.MPI_Info_get_valuelen = (int (*)(MPI_Info, char *, int *, int *))GetProcAddress(hMPIModule, "MPI_Info_get_valuelen");
-    if (fn.MPI_Info_get_valuelen == NULL) fn.MPI_Info_get_valuelen = (int (*)(MPI_Info, char *, int *, int *))GetProcAddress(hPMPIModule, "MPI_Info_get_valuelen");
-    fn.MPI_Info_set = (int (*)(MPI_Info, char *, char *))GetProcAddress(hMPIModule, "MPI_Info_set");
-    if (fn.MPI_Info_set == NULL) fn.MPI_Info_set = (int (*)(MPI_Info, char *, char *))GetProcAddress(hPMPIModule, "MPI_Info_set");
-    fn.MPI_Pack_external = (int (*)(char *, void *, int, MPI_Datatype, void *, MPI_Aint, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Pack_external"); 
-    if (fn.MPI_Pack_external == NULL) fn.MPI_Pack_external = (int (*)(char *, void *, int, MPI_Datatype, void *, MPI_Aint, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Pack_external"); 
-    fn.MPI_Pack_external_size = (int (*)(char *, int, MPI_Datatype, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Pack_external_size"); 
-    if (fn.MPI_Pack_external_size == NULL) fn.MPI_Pack_external_size = (int (*)(char *, int, MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Pack_external_size"); 
-    fn.MPI_Request_get_status = (int (*)(MPI_Request, int *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Request_get_status");
-    if (fn.MPI_Request_get_status == NULL) fn.MPI_Request_get_status = (int (*)(MPI_Request, int *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Request_get_status");
-    fn.MPI_Status_c2f = (int (*)(MPI_Status *, MPI_Fint *))GetProcAddress(hMPIModule, "MPI_Status_c2f");
-    if (fn.MPI_Status_c2f == NULL) fn.MPI_Status_c2f = (int (*)(MPI_Status *, MPI_Fint *))GetProcAddress(hPMPIModule, "MPI_Status_c2f");
-    fn.MPI_Status_f2c = (int (*)(MPI_Fint *, MPI_Status *))GetProcAddress(hMPIModule, "MPI_Status_f2c");
-    if (fn.MPI_Status_f2c == NULL) fn.MPI_Status_f2c = (int (*)(MPI_Fint *, MPI_Status *))GetProcAddress(hPMPIModule, "MPI_Status_f2c");
-    fn.MPI_Type_create_darray = (int (*)(int, int, int, int [], int [], int [], int [], int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_darray");
-    if (fn.MPI_Type_create_darray == NULL) fn.MPI_Type_create_darray = (int (*)(int, int, int, int [], int [], int [], int [], int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_darray");
-    fn.MPI_Type_create_hindexed = (int (*)(int, int [], MPI_Aint [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_hindexed");
-    if (fn.MPI_Type_create_hindexed == NULL) fn.MPI_Type_create_hindexed = (int (*)(int, int [], MPI_Aint [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_hindexed");
-    fn.MPI_Type_create_hvector = (int (*)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_hvector");
-    if (fn.MPI_Type_create_hvector == NULL) fn.MPI_Type_create_hvector = (int (*)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_hvector");
-    fn.MPI_Type_create_indexed_block = (int (*)(int, int, int [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_indexed_block");
-    if (fn.MPI_Type_create_indexed_block == NULL) fn.MPI_Type_create_indexed_block = (int (*)(int, int, int [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_indexed_block");
-    fn.MPI_Type_create_hindexed_block = (int (*)(int, int, const int [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_hindexed_block");
-    if (fn.MPI_Type_create_hindexed_block == NULL) fn.MPI_Type_create_hindexed_block = (int (*)(int, int, const int [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_hindexed_block");
-    fn.MPI_Type_create_resized = (int (*)(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_resized");
-    if (fn.MPI_Type_create_resized == NULL) fn.MPI_Type_create_resized = (int (*)(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_resized");
-    fn.MPI_Type_create_struct = (int (*)(int, int [], MPI_Aint [], MPI_Datatype [], MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_struct");
-    if (fn.MPI_Type_create_struct == NULL) fn.MPI_Type_create_struct = (int (*)(int, int [], MPI_Aint [], MPI_Datatype [], MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_struct");
-    fn.MPI_Type_create_subarray = (int (*)(int, int [], int [], int [], int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hMPIModule, "MPI_Type_create_subarray");
-    if (fn.MPI_Type_create_subarray == NULL) fn.MPI_Type_create_subarray = (int (*)(int, int [], int [], int [], int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "MPI_Type_create_subarray");
-    fn.MPI_Type_get_extent = (int (*)(MPI_Datatype, MPI_Aint *, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Type_get_extent");
-    if (fn.MPI_Type_get_extent == NULL) fn.MPI_Type_get_extent = (int (*)(MPI_Datatype, MPI_Aint *, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Type_get_extent");
-    fn.MPI_Type_get_true_extent = (int (*)(MPI_Datatype, MPI_Aint *, MPI_Aint *))GetProcAddress(hMPIModule, "MPI_Type_get_true_extent");
-    if (fn.MPI_Type_get_true_extent == NULL) fn.MPI_Type_get_true_extent = (int (*)(MPI_Datatype, MPI_Aint *, MPI_Aint *))GetProcAddress(hPMPIModule, "MPI_Type_get_true_extent");
-    fn.MPI_Unpack_external = (int (*)(char *, void *, MPI_Aint, MPI_Aint *, void *, int, MPI_Datatype))GetProcAddress(hMPIModule, "MPI_Unpack_external"); 
-    if (fn.MPI_Unpack_external == NULL) fn.MPI_Unpack_external = (int (*)(char *, void *, MPI_Aint, MPI_Aint *, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "MPI_Unpack_external"); 
-    fn.MPI_Win_create_errhandler = (int (*)(MPI_Win_errhandler_function *, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Win_create_errhandler");
-    if (fn.MPI_Win_create_errhandler == NULL) fn.MPI_Win_create_errhandler = (int (*)(MPI_Win_errhandler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Win_create_errhandler");
-    fn.MPI_Win_get_errhandler = (int (*)(MPI_Win, MPI_Errhandler *))GetProcAddress(hMPIModule, "MPI_Win_get_errhandler");
-    if (fn.MPI_Win_get_errhandler == NULL) fn.MPI_Win_get_errhandler = (int (*)(MPI_Win, MPI_Errhandler *))GetProcAddress(hPMPIModule, "MPI_Win_get_errhandler");
-    fn.MPI_Win_set_errhandler = (int (*)(MPI_Win, MPI_Errhandler))GetProcAddress(hMPIModule, "MPI_Win_set_errhandler");
-    if (fn.MPI_Win_set_errhandler == NULL) fn.MPI_Win_set_errhandler = (int (*)(MPI_Win, MPI_Errhandler))GetProcAddress(hPMPIModule, "MPI_Win_set_errhandler");
-    fn.MPI_Type_create_f90_integer = (int (*)( int, MPI_Datatype * ))GetProcAddress(hMPIModule, "MPI_Type_create_f90_integer");
-    if (fn.MPI_Type_create_f90_integer == NULL) fn.MPI_Type_create_f90_integer = (int (*)( int, MPI_Datatype * ))GetProcAddress(hPMPIModule, "MPI_Type_create_f90_integer");
-    fn.MPI_Type_create_f90_real = (int (*)( int, int, MPI_Datatype * ))GetProcAddress(hMPIModule, "MPI_Type_create_f90_real");
-    if (fn.MPI_Type_create_f90_real == NULL) fn.MPI_Type_create_f90_real = (int (*)( int, int, MPI_Datatype * ))GetProcAddress(hPMPIModule, "MPI_Type_create_f90_real");
-    fn.MPI_Type_create_f90_complex = (int (*)( int, int, MPI_Datatype * ))GetProcAddress(hMPIModule, "MPI_Type_create_f90_complex");
-    if (fn.MPI_Type_create_f90_complex == NULL) fn.MPI_Type_create_f90_complex = (int (*)( int, int, MPI_Datatype * ))GetProcAddress(hPMPIModule, "MPI_Type_create_f90_complex");
-    /* PMPI */
-    fn.PMPI_Comm_f2c = (MPI_Comm (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Comm_f2c");
-    fn.PMPI_Type_f2c = (MPI_Datatype (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Type_f2c");
-    fn.PMPI_File_f2c = (MPI_File (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_File_f2c");
-    fn.PMPI_Comm_c2f = (MPI_Fint (*)(MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Comm_c2f");
-    fn.PMPI_File_c2f = (MPI_Fint (*)(MPI_File))GetProcAddress(hPMPIModule, "PMPI_File_c2f");
-    fn.PMPI_Group_c2f = (MPI_Fint (*)(MPI_Group))GetProcAddress(hPMPIModule, "PMPI_Group_c2f");
-    fn.PMPI_Info_c2f = (MPI_Fint (*)(MPI_Info))GetProcAddress(hPMPIModule, "PMPI_Info_c2f");
-    fn.PMPI_Op_c2f = (MPI_Fint (*)(MPI_Op))GetProcAddress(hPMPIModule, "PMPI_Op_c2f");
-    fn.PMPI_Request_c2f = (MPI_Fint (*)(MPI_Request))GetProcAddress(hPMPIModule, "PMPI_Request_c2f");
-    fn.PMPI_Type_c2f = (MPI_Fint (*)(MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_Type_c2f");
-    fn.PMPI_Win_c2f = (MPI_Fint (*)(MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_c2f");
-    fn.PMPI_Group_f2c = (MPI_Group (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Group_f2c");
-    fn.PMPI_Info_f2c = (MPI_Info (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Info_f2c");
-    fn.PMPI_Op_f2c = (MPI_Op (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Op_f2c");
-    fn.PMPI_Request_f2c = (MPI_Request (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Request_f2c");
-    fn.PMPI_Win_f2c = (MPI_Win (*)(MPI_Fint))GetProcAddress(hPMPIModule, "PMPI_Win_f2c");
-    fn.PMPI_File_open = (int (*)(MPI_Comm, char *, int, MPI_Info, MPI_File *))GetProcAddress(hPMPIModule, "PMPI_File_open");
-    fn.PMPI_File_close = (int (*)(MPI_File *))GetProcAddress(hPMPIModule, "PMPI_File_close");
-    fn.PMPI_File_delete = (int (*)(char *, MPI_Info))GetProcAddress(hPMPIModule, "PMPI_File_delete");
-    fn.PMPI_File_set_size = (int (*)(MPI_File, MPI_Offset))GetProcAddress(hPMPIModule, "PMPI_File_set_size");
-    fn.PMPI_File_preallocate = (int (*)(MPI_File, MPI_Offset))GetProcAddress(hPMPIModule, "PMPI_File_preallocate");
-    fn.PMPI_File_get_size = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hPMPIModule, "PMPI_File_get_size");
-    fn.PMPI_File_get_group = (int (*)(MPI_File, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_File_get_group");
-    fn.PMPI_File_get_amode = (int (*)(MPI_File, int *))GetProcAddress(hPMPIModule, "PMPI_File_get_amode");
-    fn.PMPI_File_set_info = (int (*)(MPI_File, MPI_Info))GetProcAddress(hPMPIModule, "PMPI_File_set_info");
-    fn.PMPI_File_get_info = (int (*)(MPI_File, MPI_Info *))GetProcAddress(hPMPIModule, "PMPI_File_get_info");
-    fn.PMPI_File_set_view = (int (*)(MPI_File, MPI_Offset, MPI_Datatype, MPI_Datatype, char *, MPI_Info))GetProcAddress(hPMPIModule, "PMPI_File_set_view");
-    fn.PMPI_File_get_view = (int (*)(MPI_File, MPI_Offset *, MPI_Datatype *, MPI_Datatype *, char *))GetProcAddress(hPMPIModule, "PMPI_File_get_view");
-    fn.PMPI_File_read_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_at");
-    fn.PMPI_File_read_at_all = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_at_all");
-    fn.PMPI_File_write_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_at");
-    fn.PMPI_File_write_at_all = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_at_all");
-    fn.PMPI_File_iread_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "PMPI_File_iread_at");
-    fn.PMPI_File_iwrite_at = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "PMPI_File_iwrite_at");
-    fn.PMPI_File_read = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read"); 
-    fn.PMPI_File_read_all = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_all"); 
-    fn.PMPI_File_write = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write");
-    fn.PMPI_File_write_all = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_all");
-    fn.PMPI_File_iread = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "PMPI_File_iread"); 
-    fn.PMPI_File_iwrite = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "PMPI_File_iwrite");
-    fn.PMPI_File_seek = (int (*)(MPI_File, MPI_Offset, int))GetProcAddress(hPMPIModule, "PMPI_File_seek");
-    fn.PMPI_File_get_position = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hPMPIModule, "PMPI_File_get_position");
-    fn.PMPI_File_get_byte_offset = (int (*)(MPI_File, MPI_Offset, MPI_Offset *))GetProcAddress(hPMPIModule, "PMPI_File_get_byte_offset");
-    fn.PMPI_File_read_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_shared");
-    fn.PMPI_File_write_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_shared");
-    fn.PMPI_File_iread_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "PMPI_File_iread_shared");
-    fn.PMPI_File_iwrite_shared = (int (*)(MPI_File, void *, int, MPI_Datatype, MPIO_Request *))GetProcAddress(hPMPIModule, "PMPI_File_iwrite_shared");
-    fn.PMPI_File_read_ordered = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_ordered");
-    fn.PMPI_File_write_ordered = (int (*)(MPI_File, void *, int, MPI_Datatype, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_ordered");
-    fn.PMPI_File_seek_shared = (int (*)(MPI_File, MPI_Offset, int))GetProcAddress(hPMPIModule, "PMPI_File_seek_shared");
-    fn.PMPI_File_get_position_shared = (int (*)(MPI_File, MPI_Offset *))GetProcAddress(hPMPIModule, "PMPI_File_get_position_shared");
-    fn.PMPI_File_read_at_all_begin = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_File_read_at_all_begin");
-    fn.PMPI_File_read_at_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_at_all_end");
-    fn.PMPI_File_write_at_all_begin = (int (*)(MPI_File, MPI_Offset, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_File_write_at_all_begin");
-    fn.PMPI_File_write_at_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_at_all_end");
-    fn.PMPI_File_read_all_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_File_read_all_begin");
-    fn.PMPI_File_read_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_all_end");
-    fn.PMPI_File_write_all_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_File_write_all_begin");
-    fn.PMPI_File_write_all_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_all_end");
-    fn.PMPI_File_read_ordered_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_File_read_ordered_begin");
-    fn.PMPI_File_read_ordered_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_read_ordered_end");
-    fn.PMPI_File_write_ordered_begin = (int (*)(MPI_File, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_File_write_ordered_begin");
-    fn.PMPI_File_write_ordered_end = (int (*)(MPI_File, void *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_File_write_ordered_end");
-    fn.PMPI_File_get_type_extent = (int (*)(MPI_File, MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_File_get_type_extent");
-    fn.PMPI_Register_datarep = (int (*)(char *, MPI_Datarep_conversion_function *, MPI_Datarep_conversion_function *, MPI_Datarep_extent_function *, void *))GetProcAddress(hPMPIModule, "PMPI_Register_datarep");
-    fn.PMPI_File_set_atomicity = (int (*)(MPI_File, int))GetProcAddress(hPMPIModule, "PMPI_File_set_atomicity");
-    fn.PMPI_File_get_atomicity = (int (*)(MPI_File, int *))GetProcAddress(hPMPIModule, "PMPI_File_get_atomicity");
-    fn.PMPI_File_sync = (int (*)(MPI_File))GetProcAddress(hPMPIModule, "PMPI_File_sync");
-    fn.PMPI_Send = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Send");
-    fn.PMPI_Recv = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Recv");
-    fn.PMPI_Get_count = (int (*)(MPI_Status *, MPI_Datatype, int *))GetProcAddress(hPMPIModule, "PMPI_Get_count");
-    fn.PMPI_Bsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Bsend");
-    fn.PMPI_Ssend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Ssend");
-    fn.PMPI_Rsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Rsend");
-    fn.PMPI_Buffer_attach = (int (*)( void*, int))GetProcAddress(hPMPIModule, "PMPI_Buffer_attach");
-    fn.PMPI_Buffer_detach = (int (*)( void*, int *))GetProcAddress(hPMPIModule, "PMPI_Buffer_detach");
-    fn.PMPI_Isend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Isend");
-    fn.PMPI_Ibsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Ibsend");
-    fn.PMPI_Issend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Issend");
-    fn.PMPI_Irsend = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Irsend");
-    fn.PMPI_Irecv = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Irecv");
-    fn.PMPI_Wait = (int (*)(MPI_Request *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Wait");
-    fn.PMPI_Test = (int (*)(MPI_Request *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Test");
-    fn.PMPI_Request_free = (int (*)(MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Request_free");
-    fn.PMPI_Waitany = (int (*)(int, MPI_Request *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Waitany");
-    fn.PMPI_Testany = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Testany");
-    fn.PMPI_Waitall = (int (*)(int, MPI_Request *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Waitall");
-    fn.PMPI_Testall = (int (*)(int, MPI_Request *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Testall");
-    fn.PMPI_Waitsome = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Waitsome");
-    fn.PMPI_Testsome = (int (*)(int, MPI_Request *, int *, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Testsome");
-    fn.PMPI_Iprobe = (int (*)(int, int, MPI_Comm, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Iprobe");
-    fn.PMPI_Probe = (int (*)(int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Probe");
-    fn.PMPI_Cancel = (int (*)(MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Cancel");
-    fn.PMPI_Test_cancelled = (int (*)(MPI_Status *, int *))GetProcAddress(hPMPIModule, "PMPI_Test_cancelled");
-    fn.PMPI_Send_init = (int (*)(void*, int, MPI_Datatype, int, int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Send_init");
-    fn.PMPI_Bsend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Bsend_init");
-    fn.PMPI_Ssend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Ssend_init");
-    fn.PMPI_Rsend_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Rsend_init");
-    fn.PMPI_Recv_init = (int (*)(void*, int, MPI_Datatype, int,int, MPI_Comm, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Recv_init");
-    fn.PMPI_Start = (int (*)(MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Start");
-    fn.PMPI_Startall = (int (*)(int, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Startall");
-    fn.PMPI_Sendrecv = (int (*)(void *, int, MPI_Datatype,int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Sendrecv");
-    fn.PMPI_Sendrecv_replace = (int (*)(void*, int, MPI_Datatype, int, int, int, int, MPI_Comm, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Sendrecv_replace");
-    fn.PMPI_Type_contiguous = (int (*)(int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_contiguous");
-    fn.PMPI_Type_vector = (int (*)(int, int, int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_vector");
-    fn.PMPI_Type_hvector = (int (*)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_hvector");
-    fn.PMPI_Type_indexed = (int (*)(int, int *, int *, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_indexed");
-    fn.PMPI_Type_hindexed = (int (*)(int, int *, MPI_Aint *, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_hindexed");
-    fn.PMPI_Type_struct = (int (*)(int, int *, MPI_Aint *, MPI_Datatype *, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_struct");
-    fn.PMPI_Address = (int (*)(void*, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Address");
-    fn.PMPI_Type_extent = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Type_extent");
-    fn.PMPI_Type_size = (int (*)(MPI_Datatype, int *))GetProcAddress(hPMPIModule, "PMPI_Type_size");
-    fn.PMPI_Type_lb = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Type_lb");
-    fn.PMPI_Type_ub = (int (*)(MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Type_ub");
-    fn.PMPI_Type_commit = (int (*)(MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_commit");
-    fn.PMPI_Type_free = (int (*)(MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_free");
-    fn.PMPI_Get_elements = (int (*)(MPI_Status *, MPI_Datatype, int *))GetProcAddress(hPMPIModule, "PMPI_Get_elements");
-    fn.PMPI_Pack = (int (*)(void*, int, MPI_Datatype, void *, int, int *,  MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Pack");
-    fn.PMPI_Unpack = (int (*)(void*, int, int *, void *, int, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Unpack");
-    fn.PMPI_Pack_size = (int (*)(int, MPI_Datatype, MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Pack_size");
-    fn.PMPI_Barrier = (int (*)(MPI_Comm ))GetProcAddress(hPMPIModule, "PMPI_Barrier");
-    fn.PMPI_Bcast = (int (*)(void*, int, MPI_Datatype, int, MPI_Comm ))GetProcAddress(hPMPIModule, "PMPI_Bcast");
-    fn.PMPI_Gather = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Gather"); 
-    fn.PMPI_Gatherv = (int (*)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Gatherv"); 
-    fn.PMPI_Scatter = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Scatter");
-    fn.PMPI_Scatterv = (int (*)(void* , int *, int *,  MPI_Datatype, void*, int, MPI_Datatype, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Scatterv");
-    fn.PMPI_Allgather = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Allgather");
-    fn.PMPI_Allgatherv = (int (*)(void* , int, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Allgatherv");
-    fn.PMPI_Alltoall = (int (*)(void* , int, MPI_Datatype, void*, int, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Alltoall");
-    fn.PMPI_Alltoallv = (int (*)(void* , int *, int *, MPI_Datatype, void*, int *, int *, MPI_Datatype, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Alltoallv");
-    fn.PMPI_Reduce = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, int, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Reduce");
-    fn.PMPI_Reduce_local = (int (*)(void *, void *, int , MPI_Datatype , MPI_Op))GetProcAddress(hPMPIModule, "PMPI_Reduce_local");
-    fn.PMPI_Op_create = (int (*)(MPI_User_function *, int, MPI_Op *))GetProcAddress(hPMPIModule, "PMPI_Op_create");
-    fn.PMPI_Op_commutative = (int (*) (MPI_Op , int *))GetProcAddress(hPMPIModule, "PMPI_Op_commutative");
-    fn.PMPI_Op_free = (int (*)( MPI_Op *))GetProcAddress(hPMPIModule, "PMPI_Op_free");
-    fn.PMPI_Allreduce = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Allreduce");
-    fn.PMPI_Reduce_scatter = (int (*)(void* , void*, int *, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Reduce_scatter");
-    fn.PMPI_Reduce_scatter_block = (int (*)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm)) GetProcAddress(hPMPIModule, "PMPI_Reduce_scatter_block");
-    fn.PMPI_Scan = (int (*)(void* , void*, int, MPI_Datatype, MPI_Op, MPI_Comm ))GetProcAddress(hPMPIModule, "PMPI_Scan");
-    fn.PMPI_Group_size = (int (*)(MPI_Group, int *))GetProcAddress(hPMPIModule, "PMPI_Group_size");
-    fn.PMPI_Group_rank = (int (*)(MPI_Group, int *))GetProcAddress(hPMPIModule, "PMPI_Group_rank");
-    fn.PMPI_Group_translate_ranks = (int (* )(MPI_Group, int, int *, MPI_Group, int *))GetProcAddress(hPMPIModule, "PMPI_Group_translate_ranks");
-    fn.PMPI_Group_compare = (int (*)(MPI_Group, MPI_Group, int *))GetProcAddress(hPMPIModule, "PMPI_Group_compare");
-    fn.PMPI_Comm_group = (int (*)(MPI_Comm, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Comm_group");
-    fn.PMPI_Group_union = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_union");
-    fn.PMPI_Group_intersection = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_intersection");
-    fn.PMPI_Group_difference = (int (*)(MPI_Group, MPI_Group, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_difference");
-    fn.PMPI_Group_incl = (int (*)(MPI_Group, int, int *, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_incl");
-    fn.PMPI_Group_excl = (int (*)(MPI_Group, int, int *, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_excl");
-    fn.PMPI_Group_range_incl = (int (*)(MPI_Group, int, int [][3], MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_range_incl");
-    fn.PMPI_Group_range_excl = (int (*)(MPI_Group, int, int [][3], MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_range_excl");
-    fn.PMPI_Group_free = (int (*)(MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Group_free");
-    fn.PMPI_Comm_size = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_size");
-    fn.PMPI_Comm_rank = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_rank");
-    fn.PMPI_Comm_compare = (int (*)(MPI_Comm, MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_compare");
-    fn.PMPI_Comm_dup = (int (*)(MPI_Comm, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_dup");
-    fn.PMPI_Comm_create = (int (*)(MPI_Comm, MPI_Group, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_create");
-    fn.PMPI_Comm_split = (int (*)(MPI_Comm, int, int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_split");
-    fn.PMPI_Comm_free = (int (*)(MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_free");
-    fn.PMPI_Comm_test_inter = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_test_inter");
-    fn.PMPI_Comm_remote_size = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_remote_size");
-    fn.PMPI_Comm_remote_group = (int (*)(MPI_Comm, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Comm_remote_group");
-    fn.PMPI_Intercomm_create = (int (*)(MPI_Comm, int, MPI_Comm, int, int, MPI_Comm * ))GetProcAddress(hPMPIModule, "PMPI_Intercomm_create");
-    fn.PMPI_Intercomm_merge = (int (*)(MPI_Comm, int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Intercomm_merge");
-    fn.PMPI_Keyval_create = (int (*)(MPI_Copy_function *, MPI_Delete_function *, int *, void*))GetProcAddress(hPMPIModule, "PMPI_Keyval_create");
-    fn.PMPI_Keyval_free = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Keyval_free");
-    fn.PMPI_Attr_put = (int (*)(MPI_Comm, int, void*))GetProcAddress(hPMPIModule, "PMPI_Attr_put");
-    fn.PMPI_Attr_get = (int (*)(MPI_Comm, int, void *, int *))GetProcAddress(hPMPIModule, "PMPI_Attr_get");
-    fn.PMPI_Attr_delete = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "PMPI_Attr_delete");
-    fn.PMPI_Topo_test = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Topo_test");
-    fn.PMPI_Cart_create = (int (*)(MPI_Comm, int, int *, int *, int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Cart_create");
-    fn.PMPI_Dims_create = (int (*)(int, int, int *))GetProcAddress(hPMPIModule, "PMPI_Dims_create");
-    fn.PMPI_Graph_create = (int (*)(MPI_Comm, int, int *, int *, int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Graph_create");
-    fn.PMPI_Dist_graph_create = (int (*)(MPI_Comm, int, int [], int [], int [], int [], MPI_Info, int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Dist_graph_create");
-    fn.PMPI_Dist_graph_create_adjacent = (int (*)(MPI_Comm, int, int [], int [], int, int [], int [], MPI_Info, int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Dist_graph_create_adjacent");
-    fn.PMPI_Graphdims_get = (int (*)(MPI_Comm, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Graphdims_get");
-    fn.PMPI_Graph_get = (int (*)(MPI_Comm, int, int, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Graph_get");
-    fn.PMPI_Cartdim_get = (int (*)(MPI_Comm, int *))GetProcAddress(hPMPIModule, "PMPI_Cartdim_get");
-    fn.PMPI_Cart_get = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Cart_get");
-    fn.PMPI_Cart_rank = (int (*)(MPI_Comm, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Cart_rank");
-    fn.PMPI_Cart_coords = (int (*)(MPI_Comm, int, int, int *))GetProcAddress(hPMPIModule, "PMPI_Cart_coords");
-    fn.PMPI_Graph_neighbors_count = (int (*)(MPI_Comm, int, int *))GetProcAddress(hPMPIModule, "PMPI_Graph_neighbors_count");
-    fn.PMPI_Graph_neighbors = (int (*)(MPI_Comm, int, int, int *))GetProcAddress(hPMPIModule, "PMPI_Graph_neighbors");
-    fn.PMPI_Dist_graph_neighbors = (int (*)(MPI_Comm, int, int [], int [],int, int [], int []))GetProcAddress(hPMPIModule, "PMPI_Dist_graph_neighbors");
-    fn.PMPI_Dist_graph_neighbors_count = (int (*)(MPI_Comm, int *, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Dist_graph_neighbors_count");
-    fn.PMPI_Cart_shift = (int (*)(MPI_Comm, int, int, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Cart_shift");
-    fn.PMPI_Cart_sub = (int (*)(MPI_Comm, int *, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Cart_sub");
-    fn.PMPI_Cart_map = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Cart_map");
-    fn.PMPI_Graph_map = (int (*)(MPI_Comm, int, int *, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Graph_map");
-    fn.PMPI_Get_processor_name = (int (*)(char *, int *))GetProcAddress(hPMPIModule, "PMPI_Get_processor_name");
-    fn.PMPI_Get_version = (int (*)(int *, int *))GetProcAddress(hPMPIModule, "PMPI_Get_version");
-    fn.PMPI_Errhandler_create = (int (*)(MPI_Handler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Errhandler_create");
-    fn.PMPI_Errhandler_set = (int (*)(MPI_Comm, MPI_Errhandler))GetProcAddress(hPMPIModule, "PMPI_Errhandler_set");
-    fn.PMPI_Errhandler_get = (int (*)(MPI_Comm, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Errhandler_get");
-    fn.PMPI_Errhandler_free = (int (*)(MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Errhandler_free");
-    fn.PMPI_Error_string = (int (*)(int, char *, int *))GetProcAddress(hPMPIModule, "PMPI_Error_string");
-    fn.PMPI_Error_class = (int (*)(int, int *))GetProcAddress(hPMPIModule, "PMPI_Error_class");
-    fn.PMPI_Wtime = (double (*)(void))GetProcAddress(hPMPIModule, "PMPI_Wtime");
-    fn.PMPI_Wtick = (double (*)(void))GetProcAddress(hPMPIModule, "PMPI_Wtick");
-    fn.PMPI_Init = (int (*)(int *, char ***))GetProcAddress(hPMPIModule, "PMPI_Init");
-    fn.PMPI_Finalize = (int (*)(void))GetProcAddress(hPMPIModule, "PMPI_Finalize");
-    fn.PMPI_Initialized = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Initialized");
-    fn.PMPI_Abort = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "PMPI_Abort");
-    fn.PMPI_Pcontrol = (int (*)(const int, ...))GetProcAddress(hPMPIModule, "PMPI_Pcontrol");
-    fn.PMPI_Close_port = (int (*)(char *))GetProcAddress(hPMPIModule, "PMPI_Close_port");
-    fn.PMPI_Comm_accept = (int (*)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_accept");
-    fn.PMPI_Comm_connect = (int (*)(char *, MPI_Info, int, MPI_Comm, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_connect");
-    fn.PMPI_Comm_disconnect = (int (*)(MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_disconnect");
-    fn.PMPI_Comm_get_parent = (int (*)(MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_get_parent");
-    fn.PMPI_Comm_join = (int (*)(int, MPI_Comm *))GetProcAddress(hPMPIModule, "PMPI_Comm_join");
-    fn.PMPI_Comm_spawn = (int (*)(char *, char *[], int, MPI_Info, int, MPI_Comm, MPI_Comm *, int []))GetProcAddress(hPMPIModule, "PMPI_Comm_spawn");
-    fn.PMPI_Comm_spawn_multiple = (int (*)(int, char *[], char **[], int [], MPI_Info [], int, MPI_Comm, MPI_Comm *, int []))GetProcAddress(hPMPIModule, "PMPI_Comm_spawn_multiple"); 
-    fn.PMPI_Lookup_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hPMPIModule, "PMPI_Lookup_name");
-    fn.PMPI_Open_port = (int (*)(MPI_Info, char *))GetProcAddress(hPMPIModule, "PMPI_Open_port");
-    fn.PMPI_Publish_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hPMPIModule, "PMPI_Publish_name");
-    fn.PMPI_Unpublish_name = (int (*)(char *, MPI_Info, char *))GetProcAddress(hPMPIModule, "PMPI_Unpublish_name");
-    fn.PMPI_Accumulate = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype,  MPI_Op, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Accumulate");
-    fn.PMPI_Get = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Get");
-    fn.PMPI_Put = (int (*)(void *, int, MPI_Datatype, int, MPI_Aint, int, MPI_Datatype, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Put");
-    fn.PMPI_Win_complete = (int (*)(MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_complete");
-    fn.PMPI_Win_create = (int (*)(void *, MPI_Aint, int, MPI_Info, MPI_Comm, MPI_Win *))GetProcAddress(hPMPIModule, "PMPI_Win_create");
-    fn.PMPI_Win_fence = (int (*)(int, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_fence");
-    fn.PMPI_Win_free = (int (*)(MPI_Win *))GetProcAddress(hPMPIModule, "PMPI_Win_free");
-    fn.PMPI_Win_get_group = (int (*)(MPI_Win, MPI_Group *))GetProcAddress(hPMPIModule, "PMPI_Win_get_group");
-    fn.PMPI_Win_lock = (int (*)(int, int, int, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_lock");
-    fn.PMPI_Win_post = (int (*)(MPI_Group, int, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_post");
-    fn.PMPI_Win_start = (int (*)(MPI_Group, int, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_start");
-    fn.PMPI_Win_test = (int (*)(MPI_Win, int *))GetProcAddress(hPMPIModule, "PMPI_Win_test");
-    fn.PMPI_Win_unlock = (int (*)(int, MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_unlock");
-    fn.PMPI_Win_wait = (int (*)(MPI_Win))GetProcAddress(hPMPIModule, "PMPI_Win_wait");
-    fn.PMPI_Alltoallw = (int (*)(void *, int [], int [], MPI_Datatype [], void *, int [], int [], MPI_Datatype [], MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Alltoallw");
-    fn.PMPI_Exscan = (int (*)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm))GetProcAddress(hPMPIModule, "PMPI_Exscan");
-    fn.PMPI_Add_error_class = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Add_error_class");
-    fn.PMPI_Add_error_code = (int (*)(int, int *))GetProcAddress(hPMPIModule, "PMPI_Add_error_code");
-    fn.PMPI_Add_error_string = (int (*)(int, char *))GetProcAddress(hPMPIModule, "PMPI_Add_error_string");
-    fn.PMPI_Comm_call_errhandler = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "PMPI_Comm_call_errhandler");
-    fn.PMPI_Comm_create_keyval = (int (*)(MPI_Comm_copy_attr_function *, MPI_Comm_delete_attr_function *, int *, void *))GetProcAddress(hPMPIModule, "PMPI_Comm_create_keyval");
-    fn.PMPI_Comm_delete_attr = (int (*)(MPI_Comm, int))GetProcAddress(hPMPIModule, "PMPI_Comm_delete_attr");
-    fn.PMPI_Comm_free_keyval = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Comm_free_keyval");
-    fn.PMPI_Comm_get_attr = (int (*)(MPI_Comm, int, void *, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_get_attr");
-    fn.PMPI_Comm_get_name = (int (*)(MPI_Comm, char *, int *))GetProcAddress(hPMPIModule, "PMPI_Comm_get_name");
-    fn.PMPI_Comm_set_attr = (int (*)(MPI_Comm, int, void *))GetProcAddress(hPMPIModule, "PMPI_Comm_set_attr");
-    fn.PMPI_Comm_set_name = (int (*)(MPI_Comm, char *))GetProcAddress(hPMPIModule, "PMPI_Comm_set_name");
-    fn.PMPI_File_call_errhandler = (int (*)(MPI_File, int))GetProcAddress(hPMPIModule, "PMPI_File_call_errhandler");
-    fn.PMPI_Grequest_complete = (int (*)(MPI_Request))GetProcAddress(hPMPIModule, "PMPI_Grequest_complete");
-    fn.PMPI_Grequest_start = (int (*)(MPI_Grequest_query_function *, MPI_Grequest_free_function *, MPI_Grequest_cancel_function *, void *, MPI_Request *))GetProcAddress(hPMPIModule, "PMPI_Grequest_start");
-    fn.PMPI_Init_thread = (int (*)(int *, char ***, int, int *))GetProcAddress(hPMPIModule, "PMPI_Init_thread");
-    fn.PMPI_Is_thread_main = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Is_thread_main");
-    fn.PMPI_Query_thread = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Query_thread");
-    fn.PMPI_Status_set_cancelled = (int (*)(MPI_Status *, int))GetProcAddress(hPMPIModule, "PMPI_Status_set_cancelled");
-    fn.PMPI_Status_set_elements = (int (*)(MPI_Status *, MPI_Datatype, int))GetProcAddress(hPMPIModule, "PMPI_Status_set_elements");
-    fn.PMPI_Type_create_keyval = (int (*)(MPI_Type_copy_attr_function *, MPI_Type_delete_attr_function *, int *, void *))GetProcAddress(hPMPIModule, "PMPI_Type_create_keyval");
-    fn.PMPI_Type_delete_attr = (int (*)(MPI_Datatype, int))GetProcAddress(hPMPIModule, "PMPI_Type_delete_attr");
-    fn.PMPI_Type_dup = (int (*)(MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_dup");
-    fn.PMPI_Type_free_keyval = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Type_free_keyval");
-    fn.PMPI_Type_get_attr = (int (*)(MPI_Datatype, int, void *, int *))GetProcAddress(hPMPIModule, "PMPI_Type_get_attr");
-    fn.PMPI_Type_get_contents = (int (*)(MPI_Datatype, int, int, int, int [], MPI_Aint [], MPI_Datatype []))GetProcAddress(hPMPIModule, "PMPI_Type_get_contents");
-    fn.PMPI_Type_get_envelope = (int (*)(MPI_Datatype, int *, int *, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Type_get_envelope");
-    fn.PMPI_Type_get_name = (int (*)(MPI_Datatype, char *, int *))GetProcAddress(hPMPIModule, "PMPI_Type_get_name");
-    fn.PMPI_Type_set_attr = (int (*)(MPI_Datatype, int, void *))GetProcAddress(hPMPIModule, "PMPI_Type_set_attr");
-    fn.PMPI_Type_set_name = (int (*)(MPI_Datatype, char *))GetProcAddress(hPMPIModule, "PMPI_Type_set_name");
-    fn.PMPI_Type_match_size = (int (*)( int, int, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_match_size");
-    fn.PMPI_Win_call_errhandler = (int (*)(MPI_Win, int))GetProcAddress(hPMPIModule, "PMPI_Win_call_errhandler");
-    fn.PMPI_Win_create_keyval = (int (*)(MPI_Win_copy_attr_function *, MPI_Win_delete_attr_function *, int *, void *))GetProcAddress(hPMPIModule, "PMPI_Win_create_keyval");
-    fn.PMPI_Win_delete_attr = (int (*)(MPI_Win, int))GetProcAddress(hPMPIModule, "PMPI_Win_delete_attr");
-    fn.PMPI_Win_free_keyval = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Win_free_keyval");
-    fn.PMPI_Win_get_attr = (int (*)(MPI_Win, int, void *, int *))GetProcAddress(hPMPIModule, "PMPI_Win_get_attr");
-    fn.PMPI_Win_get_name = (int (*)(MPI_Win, char *, int *))GetProcAddress(hPMPIModule, "PMPI_Win_get_name");
-    fn.PMPI_Win_set_attr = (int (*)(MPI_Win, int, void *))GetProcAddress(hPMPIModule, "PMPI_Win_set_attr");
-    fn.PMPI_Win_set_name = (int (*)(MPI_Win, char *))GetProcAddress(hPMPIModule, "PMPI_Win_set_name");
-    fn.PMPI_Alloc_mem = (int (*)(MPI_Aint, MPI_Info info, void *baseptr))GetProcAddress(hPMPIModule, "PMPI_Alloc_mem");
-    fn.PMPI_Comm_create_errhandler = (int (*)(MPI_Comm_errhandler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Comm_create_errhandler");
-    fn.PMPI_Comm_get_errhandler = (int (*)(MPI_Comm, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Comm_get_errhandler");
-    fn.PMPI_Comm_set_errhandler = (int (*)(MPI_Comm, MPI_Errhandler))GetProcAddress(hPMPIModule, "PMPI_Comm_set_errhandler");
-    fn.PMPI_File_create_errhandler = (int (*)(MPI_File_errhandler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_File_create_errhandler");
-    fn.PMPI_File_get_errhandler = (int (*)(MPI_File, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_File_get_errhandler");
-    fn.PMPI_File_set_errhandler = (int (*)(MPI_File, MPI_Errhandler))GetProcAddress(hPMPIModule, "PMPI_File_set_errhandler");
-    fn.PMPI_Finalized = (int (*)(int *))GetProcAddress(hPMPIModule, "PMPI_Finalized");
-    fn.PMPI_Free_mem = (int (*)(void *))GetProcAddress(hPMPIModule, "PMPI_Free_mem");
-    fn.PMPI_Get_address = (int (*)(void *, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Get_address");
-    fn.PMPI_Info_create = (int (*)(MPI_Info *))GetProcAddress(hPMPIModule, "PMPI_Info_create");
-    fn.PMPI_Info_delete = (int (*)(MPI_Info, char *))GetProcAddress(hPMPIModule, "PMPI_Info_delete");
-    fn.PMPI_Info_dup = (int (*)(MPI_Info, MPI_Info *))GetProcAddress(hPMPIModule, "PMPI_Info_dup");
-    fn.PMPI_Info_free = (int (*)(MPI_Info *info))GetProcAddress(hPMPIModule, "PMPI_Info_free");
-    fn.PMPI_Info_get = (int (*)(MPI_Info, char *, int, char *, int *))GetProcAddress(hPMPIModule, "PMPI_Info_get");
-    fn.PMPI_Info_get_nkeys = (int (*)(MPI_Info, int *))GetProcAddress(hPMPIModule, "PMPI_Info_get_nkeys");
-    fn.PMPI_Info_get_nthkey = (int (*)(MPI_Info, int, char *))GetProcAddress(hPMPIModule, "PMPI_Info_get_nthkey");
-    fn.PMPI_Info_get_valuelen = (int (*)(MPI_Info, char *, int *, int *))GetProcAddress(hPMPIModule, "PMPI_Info_get_valuelen");
-    fn.PMPI_Info_set = (int (*)(MPI_Info, char *, char *))GetProcAddress(hPMPIModule, "PMPI_Info_set");
-    fn.PMPI_Pack_external = (int (*)(char *, void *, int, MPI_Datatype, void *, MPI_Aint, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Pack_external"); 
-    fn.PMPI_Pack_external_size = (int (*)(char *, int, MPI_Datatype, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Pack_external_size"); 
-    fn.PMPI_Request_get_status = (int (*)(MPI_Request, int *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Request_get_status");
-    fn.PMPI_Status_c2f = (int (*)(MPI_Status *, MPI_Fint *))GetProcAddress(hPMPIModule, "PMPI_Status_c2f");
-    fn.PMPI_Status_f2c = (int (*)(MPI_Fint *, MPI_Status *))GetProcAddress(hPMPIModule, "PMPI_Status_f2c");
-    fn.PMPI_Type_create_darray = (int (*)(int, int, int, int [], int [], int [], int [], int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_darray");
-    fn.PMPI_Type_create_hindexed = (int (*)(int, int [], MPI_Aint [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_hindexed");
-    fn.PMPI_Type_create_hvector = (int (*)(int, int, MPI_Aint, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_hvector");
-    fn.PMPI_Type_create_indexed_block = (int (*)(int, int, int [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_indexed_block");
-    fn.PMPI_Type_create_hindexed_block = (int (*)(int, int, const int [], MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_hindexed_block");
-    fn.PMPI_Type_create_resized = (int (*)(MPI_Datatype, MPI_Aint, MPI_Aint, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_resized");
-    fn.PMPI_Type_create_struct = (int (*)(int, int [], MPI_Aint [], MPI_Datatype [], MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_struct");
-    fn.PMPI_Type_create_subarray = (int (*)(int, int [], int [], int [], int, MPI_Datatype, MPI_Datatype *))GetProcAddress(hPMPIModule, "PMPI_Type_create_subarray");
-    fn.PMPI_Type_get_extent = (int (*)(MPI_Datatype, MPI_Aint *, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Type_get_extent");
-    fn.PMPI_Type_get_true_extent = (int (*)(MPI_Datatype, MPI_Aint *, MPI_Aint *))GetProcAddress(hPMPIModule, "PMPI_Type_get_true_extent");
-    fn.PMPI_Unpack_external = (int (*)(char *, void *, MPI_Aint, MPI_Aint *, void *, int, MPI_Datatype))GetProcAddress(hPMPIModule, "PMPI_Unpack_external"); 
-    fn.PMPI_Win_create_errhandler = (int (*)(MPI_Win_errhandler_function *, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Win_create_errhandler");
-    fn.PMPI_Win_get_errhandler = (int (*)(MPI_Win, MPI_Errhandler *))GetProcAddress(hPMPIModule, "PMPI_Win_get_errhandler");
-    fn.PMPI_Win_set_errhandler = (int (*)(MPI_Win, MPI_Errhandler))GetProcAddress(hPMPIModule, "PMPI_Win_set_errhandler");
-    fn.PMPI_Type_create_f90_integer = (int (*)( int, MPI_Datatype * ))GetProcAddress(hPMPIModule, "PMPI_Type_create_f90_integer");
-    fn.PMPI_Type_create_f90_real = (int (*)( int, int, MPI_Datatype * ))GetProcAddress(hPMPIModule, "PMPI_Type_create_f90_real");
-    fn.PMPI_Type_create_f90_complex = (int (*)( int, int, MPI_Datatype * ))GetProcAddress(hPMPIModule, "PMPI_Type_create_f90_complex");
-
-    /* Extra exported internal symbols */
-    fn.MPIR_Keyval_set_proxy = (void (*)(int ,MPID_Attr_copy_proxy ,MPID_Attr_delete_proxy ))GetProcAddress(hPMPIModule, "MPIR_Keyval_set_proxy");
-    fn.MPIR_Keyval_set_fortran = (void (*)(int))GetProcAddress(hPMPIModule, "MPIR_Keyval_set_fortran");
-    fn.MPIR_Keyval_set_fortran90 = (void (*)(int))GetProcAddress(hPMPIModule, "MPIR_Keyval_set_fortran90");
-    fn.MPIR_Grequest_set_lang_f77 = (void (*)(MPI_Request))GetProcAddress(hPMPIModule, "MPIR_Grequest_set_lang_f77");
-    fn.MPIR_Keyval_set_cxx = (void (*)(int, void (*)(void), void (*)(void)))GetProcAddress(hPMPIModule, "MPIR_Keyval_set_cxx");
-    fn.MPIR_Errhandler_set_cxx = (void (*)(MPI_Errhandler, void (*)(void)))GetProcAddress(hPMPIModule, "MPIR_Errhandler_set_cxx");
-    fn.MPIR_Op_set_cxx = (void (*)(MPI_Op, void (*)(void)))GetProcAddress(hPMPIModule, "MPIR_Op_set_cxx");
-    fn.MPID_Wtick = (double (*)(void))GetProcAddress(hPMPIModule, "MPID_Wtick");
-    fn.MPID_Wtime_todouble = (void (*)(MPID_Time_t *, double *))GetProcAddress(hPMPIModule, "MPID_Wtime_todouble");
-    /*fn.MPIR_Dup_fn = (int (*)(MPI_Comm, int, void *, void *, void *, int *))GetProcAddress(hPMPIModule, "MPIR_Dup_fn");*/
-    fn.MPIR_Err_create_code = (int (*)(int , int , const char [], int , int , const char [], const char [], ...))GetProcAddress(hPMPIModule, "MPIR_Err_create_code");
-    fn.MPIR_Err_return_comm = (int (*)(struct MPID_Comm *, const char [], int ))GetProcAddress(hPMPIModule, "MPIR_Err_return_comm");
-
-    fn.MPIR_CommGetAttr = (int (*)( MPI_Comm , int , void *, int *, MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_CommGetAttr");
-    fn.MPIR_CommGetAttr_fort = (int (*)( MPI_Comm , int , void *, int *, MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_CommGetAttr_fort");
-    fn.MPIR_CommSetAttr = (int (*)( MPI_Comm , int , void *, MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_CommSetAttr");
-    fn.MPIR_TypeGetAttr = (int (*)( MPI_Datatype , int , void *,int *, MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_TypeGetAttr");
-    fn.MPIR_TypeSetAttr = (int (*)(MPI_Datatype , int , void *,MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_TypeSetAttr");
-    fn.MPIR_WinSetAttr = (int (*)( MPI_Win , int , void *, MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_WinSetAttr");
-    fn.MPIR_WinGetAttr = (int (*)( MPI_Win , int , void *, int *, MPIR_AttrType ))GetProcAddress(hPMPIModule, "MPIR_WinGetAttr");
-
-    /* global variables */
-    fn.MPI_F_STATUS_IGNORE = (MPI_Fint**)GetProcAddress(hPMPIModule, "MPI_F_STATUS_IGNORE");
-    fn.MPI_F_STATUSES_IGNORE = (MPI_Fint**)GetProcAddress(hPMPIModule, "MPI_F_STATUSES_IGNORE");
-
-    return TRUE;
-}
-
-typedef BOOL (WINAPI *LPFN_SetDllDirectory)(LPCTSTR );
-BOOL LoadMPILibrary()
-{
-    BOOL result = TRUE;
-    char *dll_name, *channel, *dll_path;
-    LPFN_SetDllDirectory lpfn_set_dll_directory = NULL;
-    char *wrapper_dll_name = NULL;
-    char name[MAX_DLL_NAME];
-
-    /* Get the mpi dll name */
-    /* precedence goes to the dll name so check for it first */
-    dll_name = getenv(MPI_ENV_DLL_NAME);
-    if (!dll_name)
-    {
-	/* no dll name specified so check for a channel */
-	channel = getenv(MPI_ENV_CHANNEL_NAME);
-	if (channel != NULL)
-	{
-	    /* ignore the sock channel since it is the default and is not named mpichsock.dll */
-	    if (strncmp(channel, "sock", 5))
-	    {
-		MPL_snprintf(name, MAX_DLL_NAME, DLL_FORMAT_STRING, channel);
-		dll_name = name;
-	    }
-        else
-        {
-            /* FIXME: Get rid of dlls without a channel substring in the name */
-    		MPL_snprintf(name, MAX_DLL_NAME, "%s", MPI_SOCK_CHANNEL_DLL_NAME);
-	    	dll_name = name;
-        }
-	}
-	/* no dll or channel specified so use the default */
-	if (!dll_name)
-	{
-	    dll_name = MPI_DEFAULT_DLL_NAME;
-	}
-    }
-
-    /* Get the mpi wrapper dll name */
-    wrapper_dll_name = getenv(MPI_ENV_MPIWRAP_DLL_NAME);
-    if (wrapper_dll_name)
-    {
-	/* FIXME: Should we allow for short wrapper names like 'mpe'? */
-	if (strncmp(wrapper_dll_name, "mpe", 4) == 0)
-	{
-	    wrapper_dll_name = MPI_DEFAULT_WRAP_DLL_NAME;
-	}
-    }
-
-    /* Check if SetDllDirectory() is available in the system */
-    lpfn_set_dll_directory =
-        (LPFN_SetDllDirectory ) GetProcAddress(GetModuleHandle(TEXT("kernel32")), "SetDllDirectory");
-
-    dll_path = getenv(MPI_ENV_DLL_PATH);
-    if(dll_path){
-        if(!lpfn_set_dll_directory){
-            return FALSE;
-        }
-        if(!lpfn_set_dll_directory(dll_path)){
-            return FALSE;
-        }
-    }
-
-    /* Load the functions */
-    result = LoadFunctions(dll_name, wrapper_dll_name);
-    return result;
-}
-
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
-{
-    BOOL result = TRUE;
-
-    MPIU_UNREFERENCED_ARG(hinstDLL);
-    MPIU_UNREFERENCED_ARG(lpReserved);
-
-    switch (fdwReason)
-    {
-        case DLL_PROCESS_ATTACH:
-            break;
-
-        case DLL_THREAD_ATTACH:
-            break;
-
-        case DLL_THREAD_DETACH:
-            break;
-
-        case DLL_PROCESS_DETACH:
-            break;
-    }
-    return result;
-}
-
-#define MPICH_CHECK_INIT(a) if ((fn. a) == NULL && LoadMPILibrary() == FALSE) return MPI_ERR_INTERN;
-#define MPICH_CHECK_INIT_VOID(a) if ((fn. a) == NULL && LoadMPILibrary() == FALSE) ExitProcess(MPI_ERR_INTERN);
-
-/* Extra exported internal functions to mpich */
-#undef FCNAME
-#define FCNAME MPIR_Err_create_code
-int MPIR_Err_create_code(int lastcode, int fatal, const char fcname[], int line, int error_class, const char generic_msg[], const char specific_msg[], ...)
-{
-    int result;
-    va_list args;
-    MPICH_CHECK_INIT(FCNAME);
-    va_start(args, specific_msg);
-    result = fn.MPIR_Err_create_code(lastcode, fatal, fcname, line, error_class, generic_msg, specific_msg, args);
-    va_end(args);
-    return result;
-}
-
-#undef FCNAME
-#define FCNAME MPIR_CommGetAttr
-int MPIR_CommGetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag, MPIR_AttrType outAttrType )
-{
-    MPICH_CHECK_INIT(MPIR_CommGetAttr);
-    return fn.MPIR_CommGetAttr(comm, comm_keyval, attribute_val, flag, outAttrType);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_CommGetAttr_fort
-int MPIR_CommGetAttr_fort( MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag, MPIR_AttrType outAttrType )
-{
-    MPICH_CHECK_INIT(MPIR_CommGetAttr_fort);
-    return fn.MPIR_CommGetAttr_fort(comm, comm_keyval, attribute_val, flag, outAttrType);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_CommSetAttr
-int MPIR_CommSetAttr( MPI_Comm comm, int comm_keyval, void *attribute_val, MPIR_AttrType attrType )
-{
-    MPICH_CHECK_INIT(MPIR_CommSetAttr);
-    return fn.MPIR_CommSetAttr(comm, comm_keyval, attribute_val, attrType);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_TypeGetAttr
-int MPIR_TypeGetAttr( MPI_Datatype type, int type_keyval, void *attribute_val, int *flag, MPIR_AttrType outAttrType )
-{
-    MPICH_CHECK_INIT(MPIR_TypeGetAttr);
-    return fn.MPIR_TypeGetAttr(type, type_keyval, attribute_val, flag, outAttrType );
-}
-
-#undef FCNAME
-#define FCNAME MPIR_TypeSetAttr
-int MPIR_TypeSetAttr(MPI_Datatype type, int type_keyval, void *attribute_val, MPIR_AttrType attrType )
-{
-    MPICH_CHECK_INIT(MPIR_TypeSetAttr);
-    return fn.MPIR_TypeSetAttr(type, type_keyval, attribute_val, attrType );
-}
-
-#undef FCNAME
-#define FCNAME MPIR_WinSetAttr
-int MPIR_WinSetAttr( MPI_Win win, int win_keyval, void *attribute_val, MPIR_AttrType attrType )
-{
-    MPICH_CHECK_INIT(MPIR_WinSetAttr);
-    return fn.MPIR_WinSetAttr( win, win_keyval, attribute_val, attrType );
-}
-
-#undef FCNAME
-#define FCNAME MPIR_WinGetAttr
-int MPIR_WinGetAttr( MPI_Win win, int win_keyval, void *attribute_val, int *flag, MPIR_AttrType outAttrType )
-{
-    MPICH_CHECK_INIT(MPIR_WinGetAttr);
-    return fn.MPIR_WinGetAttr( win, win_keyval, attribute_val, flag, outAttrType );
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Err_return_comm
-int MPIR_Err_return_comm(struct MPID_Comm *comm_ptr, const char fcname[], int errcode)
-{
-    MPICH_CHECK_INIT(MPIR_Err_return_comm);
-    return fn.MPIR_Err_return_comm(comm_ptr, fcname, errcode);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Dup_fn
-int MPIR_Dup_fn(MPI_Comm comm, int keyval, void *extra_state, void *attr_in, void *attr_out, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPIR_Dup_fn(comm, keyval, extra_state, attr_in, attr_out, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Keyval_set_proxy
-void MPIR_Keyval_set_proxy(int keyval, MPID_Attr_copy_proxy copy_proxy,
-        MPID_Attr_delete_proxy delete_proxy)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Keyval_set_proxy(keyval, copy_proxy, delete_proxy);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Keyval_set_fortran
-void MPIR_Keyval_set_fortran(int keyval)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Keyval_set_fortran(keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Keyval_set_fortran90
-void MPIR_Keyval_set_fortran90(int keyval)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Keyval_set_fortran90(keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Grequest_set_lang_f77
-void MPIR_Grequest_set_lang_f77(MPI_Request greq)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Grequest_set_lang_f77(greq);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Keyval_set_cxx
-void MPIR_Keyval_set_cxx(int keyval, void (*delfn)(void), void (*copyfn)(void))
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Keyval_set_cxx(keyval, delfn, copyfn);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Errhandler_set_cxx
-void MPIR_Errhandler_set_cxx(MPI_Errhandler errhand, void (*errcall)(void))
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Errhandler_set_cxx(errhand, errcall);
-}
-
-#undef FCNAME
-#define FCNAME MPIR_Op_set_cxx
-void MPIR_Op_set_cxx(MPI_Op op, void (*opcall)(void))
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    fn.MPIR_Op_set_cxx(op, opcall);
-}
-
-#undef FCNAME
-#define FCNAME MPID_Wtick
-double MPID_Wtick(void)
-{
-    /*MPICH_CHECK_INIT_VOID(FCNAME);*/ /* No checking for performance */
-    return fn.MPID_Wtick();
-}
-
-#undef FCNAME
-#define FCNAME MPID_Wtime_todouble
-void MPID_Wtime_todouble(MPID_Time_t *t, double *val)
-{
-    /*MPICH_CHECK_INIT_VOID(FCNAME);*/ /* No checking for performance */
-    fn.MPID_Wtime_todouble(t, val);
-}
-
-/* MPI versions */
-#undef FCNAME
-#define FCNAME MPI_Init
-int MPI_Init( int *argc, char ***argv )
-{
-    int result;
-    MPICH_CHECK_INIT(FCNAME);
-    result = fn.MPI_Init(argc, argv);
-    *fn.MPI_F_STATUS_IGNORE = MPI_F_STATUS_IGNORE;
-    *fn.MPI_F_STATUSES_IGNORE = MPI_F_STATUSES_IGNORE;
-    return result;
-}
-
-#undef FCNAME
-#define FCNAME MPI_Init_thread
-int MPI_Init_thread( int *argc, char ***argv, int required, int *provided )
-{
-    int result;
-    MPICH_CHECK_INIT(FCNAME);
-    result = fn.MPI_Init_thread(argc, argv, required, provided);
-    *fn.MPI_F_STATUS_IGNORE = MPI_F_STATUS_IGNORE;
-    *fn.MPI_F_STATUSES_IGNORE = MPI_F_STATUSES_IGNORE;
-    return result;
-}
-
-#undef FCNAME
-#define FCNAME MPI_Status_c2f
-int MPI_Status_c2f( MPI_Status *c_status, MPI_Fint *f_status )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Status_c2f(c_status, f_status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Status_f2c
-int MPI_Status_f2c( MPI_Fint *f_status, MPI_Status *c_status )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Status_f2c(f_status, c_status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Attr_delete
-int MPI_Attr_delete(MPI_Comm comm, int keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Attr_delete(comm, keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Attr_get
-int MPI_Attr_get(MPI_Comm comm, int keyval, void *attr_value, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Attr_get(comm, keyval, attr_value, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Attr_put
-int MPI_Attr_put(MPI_Comm comm, int keyval, void *attr_value)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Attr_put(comm, keyval, attr_value);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_create_keyval
-int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn, 
-			   MPI_Comm_delete_attr_function *comm_delete_attr_fn, 
-			   int *comm_keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_create_keyval(comm_copy_attr_fn, comm_delete_attr_fn, comm_keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_delete_attr
-int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_delete_attr(comm, comm_keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_free_keyval
-int MPI_Comm_free_keyval(int *comm_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_free_keyval(comm_keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_get_attr
-int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_get_attr(comm, comm_keyval, attribute_val, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_set_attr
-int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_set_attr(comm, comm_keyval, attribute_val);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Keyval_create
-int MPI_Keyval_create(MPI_Copy_function *copy_fn, 
-		      MPI_Delete_function *delete_fn, 
-		      int *keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Keyval_create(copy_fn, delete_fn, keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Keyval_free
-int MPI_Keyval_free(int *keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Keyval_free(keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_keyval
-int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn, 
-			   MPI_Type_delete_attr_function *type_delete_attr_fn,
-			   int *type_keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_keyval(type_copy_attr_fn, type_delete_attr_fn, type_keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_delete_attr
-int MPI_Type_delete_attr(MPI_Datatype type, int type_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_delete_attr(type, type_keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_free_keyval
-int MPI_Type_free_keyval(int *type_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_free_keyval(type_keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_get_attr
-int MPI_Type_get_attr(MPI_Datatype type, int type_keyval, void *attribute_val, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_get_attr(type, type_keyval, attribute_val, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_set_attr
-int MPI_Type_set_attr(MPI_Datatype type, int type_keyval, void *attribute_val)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_set_attr(type, type_keyval, attribute_val);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_create_keyval
-int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn, 
-			  MPI_Win_delete_attr_function *win_delete_attr_fn, 
-			  int *win_keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_create_keyval(win_copy_attr_fn, win_delete_attr_fn, win_keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_delete_attr
-int MPI_Win_delete_attr(MPI_Win win, int win_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_delete_attr(win, win_keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_free_keyval
-int MPI_Win_free_keyval(int *win_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_free_keyval(win_keyval);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_get_attr
-int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, 
-		     int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_get_attr(win, win_keyval, attribute_val, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_set_attr
-int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_set_attr(win, win_keyval, attribute_val);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Allgather
-int MPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-                  void *recvbuf, int recvcount, MPI_Datatype recvtype, 
-                  MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Allgatherv
-int MPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-                   void *recvbuf, int *recvcounts, int *displs, 
-                   MPI_Datatype recvtype, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Allreduce 
-int MPI_Allreduce ( void *sendbuf, void *recvbuf, int count, 
-		    MPI_Datatype datatype, MPI_Op op, MPI_Comm comm )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Alltoall
-int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-                 void *recvbuf, int recvcount, MPI_Datatype recvtype, 
-                 MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Alltoallv
-int MPI_Alltoallv(void *sendbuf, int *sendcnts, int *sdispls, 
-                  MPI_Datatype sendtype, void *recvbuf, int *recvcnts, 
-                  int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Alltoallv(sendbuf, sendcnts, sdispls, sendtype, recvbuf, recvcnts, rdispls, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Alltoallw
-int MPI_Alltoallw(void *sendbuf, int *sendcnts, int *sdispls, 
-                  MPI_Datatype *sendtypes, void *recvbuf, int *recvcnts, 
-                  int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Alltoallw(sendbuf, sendcnts, sdispls, sendtypes, recvbuf, recvcnts, rdispls, recvtypes, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Barrier
-int MPI_Barrier( MPI_Comm comm )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Barrier(comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Bcast
-int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root, 
-               MPI_Comm comm )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Bcast(buffer, count, datatype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Exscan
-int MPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
-               MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Exscan(sendbuf, recvbuf, count, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Gather
-int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
-               void *recvbuf, int recvcnt, MPI_Datatype recvtype, 
-               int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Gatherv
-int MPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
-                void *recvbuf, int *recvcnts, int *displs, 
-                MPI_Datatype recvtype, int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Gatherv(sendbuf, sendcnt, sendtype, recvbuf, recvcnts, displs, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Op_create
-int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Op_create(function, commute, op);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Op_free
-int MPI_Op_free(MPI_Op *op)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Op_free(op);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Op_commutative
-int MPI_Op_commutative(MPI_Op op, int *commute)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Op_commutative(op, commute);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Reduce
-int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
-	       MPI_Op op, int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Reduce_local
-int MPI_Reduce_local(void *inbuf, void *inoutbuf, int count,
-                     MPI_Datatype datatype, MPI_Op op)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Reduce_local(inbuf, inoutbuf, count, datatype, op);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Reduce_scatter
-int MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcnts, 
-		       MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Reduce_scatter(sendbuf, recvbuf, recvcnts, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Reduce_scatter_block
-int MPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
-                             MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Reduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Scan
-int MPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
-	     MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Scan(sendbuf, recvbuf, count, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Scatter
-int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
-		void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, 
-		MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Scatter(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Scatterv
-int MPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, 
-		  MPI_Datatype sendtype, void *recvbuf, int recvcnt,
-		  MPI_Datatype recvtype,
-		  int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Scatterv(sendbuf, sendcnts, displs, sendtype, recvbuf, recvcnt, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_compare
-int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_compare(comm1, comm2, result);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_create
-int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_create(comm, group, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_dup
-int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_dup(comm, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_free
-int MPI_Comm_free(MPI_Comm *comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_free(comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_get_name
-int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_get_name(comm, comm_name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_group
-int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_group(comm, group);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_rank
-int MPI_Comm_rank( MPI_Comm comm, int *rank )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_rank(comm, rank);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_remote_group
-int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_remote_group(comm, group);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_remote_size
-int MPI_Comm_remote_size(MPI_Comm comm, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_remote_size(comm, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_set_name
-int MPI_Comm_set_name(MPI_Comm comm, char *comm_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_set_name(comm, comm_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_size
-int MPI_Comm_size( MPI_Comm comm, int *size )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_size(comm, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_split
-int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_split(comm, color, key, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_test_inter
-int MPI_Comm_test_inter(MPI_Comm comm, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_test_inter(comm, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Intercomm_create
-int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, 
-			 MPI_Comm peer_comm, int remote_leader, int tag, 
-			 MPI_Comm *newintercomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Intercomm_create(local_comm, local_leader, peer_comm, remote_leader, tag, newintercomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Intercomm_merge
-int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Intercomm_merge(intercomm, high, newintracomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Address
-int MPI_Address( void *location, MPI_Aint *address )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Address(location, address);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Get_address
-int MPI_Get_address(void *location, MPI_Aint *address)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Get_address(location, address);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Get_count
-int MPI_Get_count( MPI_Status *status, 	MPI_Datatype datatype, int *count )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Get_count(status, datatype, count);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Get_elements
-int MPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *elements)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Get_elements(status, datatype, elements);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Pack
-int MPI_Pack(void *inbuf,
-	     int incount,
-	     MPI_Datatype datatype,
-	     void *outbuf, 
-	     int outcount,
-	     int *position,
-	     MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Pack(inbuf, incount, datatype, outbuf, outcount, position, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Pack_external
-int MPI_Pack_external(char *datarep,
-		      void *inbuf,
-		      int incount,
-		      MPI_Datatype datatype,
-		      void *outbuf,
-		      MPI_Aint outcount,
-		      MPI_Aint *position)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, outcount, position);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Pack_external_size
-int MPI_Pack_external_size(char *datarep,
-			   int incount,
-			   MPI_Datatype datatype,
-			   MPI_Aint *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Pack_external_size(datarep, incount, datatype, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Pack_size
-int MPI_Pack_size(int incount,
-		  MPI_Datatype datatype,
-		  MPI_Comm comm,
-		  int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Pack_size(incount, datatype, comm, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Register_datarep
-int MPI_Register_datarep(char *datarep, 
-			 MPI_Datarep_conversion_function *read_conversion_fn, 
-			 MPI_Datarep_conversion_function *write_conversion_fn, 
-			 MPI_Datarep_extent_function *dtype_file_extent_fn, 
-			 void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Status_set_elements
-int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, 
-			    int count)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Status_set_elements(status, datatype, count);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_commit
-int MPI_Type_commit(MPI_Datatype *datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_commit(datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_contiguous
-int MPI_Type_contiguous(int count,
-			MPI_Datatype old_type,
-			MPI_Datatype *new_type_p)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_contiguous(count, old_type, new_type_p);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_darray
-int MPI_Type_create_darray(int size,
-			   int rank,
-			   int ndims,
-			   int array_of_gsizes[],
-			   int array_of_distribs[],
-			   int array_of_dargs[],
-			   int array_of_psizes[],
-			   int order,
-			   MPI_Datatype oldtype,
-			   MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_darray(size, rank, ndims, array_of_gsizes, array_of_distribs, array_of_dargs, array_of_psizes, order, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_hindexed
-int MPI_Type_create_hindexed(int count,
-			     int blocklengths[],
-			     MPI_Aint displacements[],
-			     MPI_Datatype oldtype,
-			     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_hindexed(count, blocklengths, displacements, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_hvector
-int MPI_Type_create_hvector(int count,
-			    int blocklength,
-			    MPI_Aint stride,
-			    MPI_Datatype oldtype,
-			    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_hvector(count, blocklength, stride, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_indexed_block
-int MPI_Type_create_indexed_block(int count,
-				  int blocklength,
-				  int array_of_displacements[],
-				  MPI_Datatype oldtype,
-				  MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_indexed_block(count, blocklength, array_of_displacements, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_hindexed_block
-int MPI_Type_create_hindexed_block(int count,
-                                    int blocklength,
-                                    const int array_of_displacements[],
-                                    MPI_Datatype oldtype,
-                                    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_hindexed_block(count, blocklength, array_of_displacements, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_resized
-int MPI_Type_create_resized(MPI_Datatype oldtype,
-			    MPI_Aint lb,
-			    MPI_Aint extent,
-			    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_resized(oldtype, lb, extent, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_struct
-int MPI_Type_create_struct(int count,
-			   int array_of_blocklengths[],
-			   MPI_Aint array_of_displacements[],
-			   MPI_Datatype array_of_types[],
-			   MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_struct(count, array_of_blocklengths, array_of_displacements, array_of_types, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_subarray
-int MPI_Type_create_subarray(int ndims,
-			     int array_of_sizes[],
-			     int array_of_subsizes[],
-			     int array_of_starts[],
-			     int order,
-			     MPI_Datatype oldtype,
-			     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_subarray(ndims, array_of_sizes, array_of_subsizes, array_of_starts, order, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_dup
-int MPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_dup(datatype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_extent
-int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_extent(datatype, extent);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_free
-int MPI_Type_free(MPI_Datatype *datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_free(datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_get_contents
-int MPI_Type_get_contents(MPI_Datatype datatype,
-			  int max_integers,
-			  int max_addresses,
-			  int max_datatypes,
-			  int array_of_integers[],
-			  MPI_Aint array_of_addresses[],
-			  MPI_Datatype array_of_datatypes[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_get_contents(datatype, max_integers, max_addresses, max_datatypes, array_of_integers, array_of_addresses, array_of_datatypes);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_get_envelope
-int MPI_Type_get_envelope(MPI_Datatype datatype,
-			  int *num_integers,
-			  int *num_addresses,
-			  int *num_datatypes,
-			  int *combiner)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_get_envelope(datatype, num_integers, num_addresses, num_datatypes, combiner);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_get_extent
-int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_get_extent(datatype, lb, extent);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_get_name
-int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_get_name(datatype, type_name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_get_true_extent
-int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, 
-			     MPI_Aint *true_extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_get_true_extent(datatype, true_lb, true_extent);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_hindexed
-int MPI_Type_hindexed(int count,
-		      int blocklens[],
-		      MPI_Aint indices[],
-		      MPI_Datatype old_type,
-		      MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_hindexed(count, blocklens, indices, old_type, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_hvector
-int MPI_Type_hvector(int count,
-		     int blocklen,
-		     MPI_Aint stride,
-		     MPI_Datatype old_type,
-		     MPI_Datatype *newtype_p)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_hvector(count, blocklen, stride, old_type, newtype_p);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_indexed
-int MPI_Type_indexed(int count,
-		     int blocklens[],
-		     int indices[],
-		     MPI_Datatype old_type,
-		     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_indexed(count, blocklens, indices, old_type, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_lb
-int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_lb(datatype, displacement);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_match_size
-int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_match_size(typeclass, size, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_set_name
-int MPI_Type_set_name(MPI_Datatype type, char *type_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_set_name(type, type_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_size
-int MPI_Type_size(MPI_Datatype datatype, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_size(datatype, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_struct
-int MPI_Type_struct(int count,
-		    int blocklens[],
-		    MPI_Aint indices[],
-		    MPI_Datatype old_types[],
-		    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_struct(count, blocklens, indices, old_types, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_ub
-int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_ub(datatype, displacement);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_vector
-int MPI_Type_vector(int count,
-		    int blocklength,
-		    int stride, 
-		    MPI_Datatype old_type,
-		    MPI_Datatype *newtype_p)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_vector(count, blocklength, stride, old_type, newtype_p);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Unpack
-int MPI_Unpack(void *inbuf,
-	       int insize,
-	       int *position,
-	       void *outbuf,
-	       int outcount,
-	       MPI_Datatype datatype,
-	       MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Unpack(inbuf, insize, position, outbuf, outcount, datatype, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Unpack_external
-int MPI_Unpack_external(char *datarep,
-			void *inbuf,
-			MPI_Aint insize,
-			MPI_Aint *position,
-			void *outbuf,
-			int outcount,
-			MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Unpack_external(datarep, inbuf, insize, position, outbuf, outcount, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Add_error_class
-int MPI_Add_error_class(int *errorclass)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Add_error_class(errorclass);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Add_error_code
-int MPI_Add_error_code(int errorclass, int *errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Add_error_code(errorclass, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Add_error_string
-int MPI_Add_error_string(int errorcode, char *string)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Add_error_string(errorcode, string);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_call_errhandler
-int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_call_errhandler(comm, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_create_errhandler
-int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *function,
-                               MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_create_errhandler(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_get_errhandler
-int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_get_errhandler(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_set_errhandler
-int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_set_errhandler(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Errhandler_create
-int MPI_Errhandler_create(MPI_Handler_function *function, 
-                          MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Errhandler_create(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Errhandler_free
-int MPI_Errhandler_free(MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Errhandler_free(errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Errhandler_get
-int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Errhandler_get(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Errhandler_set
-int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Errhandler_set(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Error_class
-int MPI_Error_class(int errorcode, int *errorclass)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Error_class(errorcode, errorclass);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Error_string
-int MPI_Error_string(int errorcode, char *string, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Error_string(errorcode, string, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_call_errhandler
-int MPI_File_call_errhandler(MPI_File fh, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_call_errhandler(fh, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_create_errhandler
-int MPI_File_create_errhandler(MPI_File_errhandler_function *function,
-                               MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_create_errhandler(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_errhandler
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_errhandler(file, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_set_errhandler
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_set_errhandler(file, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_call_errhandler
-int MPI_Win_call_errhandler(MPI_Win win, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_call_errhandler(win, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_create_errhandler
-int MPI_Win_create_errhandler(MPI_Win_errhandler_function *function,
-			      MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_create_errhandler(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_get_errhandler
-int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_get_errhandler(win, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_set_errhandler
-int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_set_errhandler(win, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_compare
-int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_compare(group1, group2, result);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_difference
-int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_difference(group1, group2, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_excl
-int MPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_excl(group, n, ranks, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_free
-int MPI_Group_free(MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_free(group);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_incl
-int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_incl(group, n, ranks, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_intersection
-int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_intersection(group1, group2, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_range_excl
-int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], 
-                         MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_range_excl(group, n, ranges, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_range_incl
-int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], 
-                         MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_range_incl(group, n, ranges, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_rank
-int MPI_Group_rank(MPI_Group group, int *rank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_rank(group, rank);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_size
-int MPI_Group_size(MPI_Group group, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_size(group, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_translate_ranks
-int MPI_Group_translate_ranks(MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_translate_ranks(group1, n, ranks1, group2, ranks2);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Group_union
-int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Group_union(group1, group2, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Abort
-int MPI_Abort(MPI_Comm comm, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Abort(comm, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Finalize
-int MPI_Finalize( void )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Finalize();
-}
-
-#undef FCNAME
-#define FCNAME MPI_Finalized
-int MPI_Finalized( int *flag )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Finalized(flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Initialized
-int MPI_Initialized( int *flag )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Initialized(flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Is_thread_main
-int MPI_Is_thread_main( int *flag )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Is_thread_main(flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Query_thread
-int MPI_Query_thread( int *provided )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Query_thread(provided);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Get_processor_name
-int MPI_Get_processor_name( char *name, int *resultlen )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Get_processor_name(name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Pcontrol
-int MPI_Pcontrol(const int level, ...)
-{
-    int ret_val;
-    va_list list;
-
-    MPICH_CHECK_INIT(FCNAME);
-
-    va_start(list, level);
-    ret_val = fn.MPI_Pcontrol(level, list);
-    va_end(list);
-    return ret_val;
-}
-
-#undef FCNAME
-#define FCNAME MPI_Get_version
-int MPI_Get_version( int *version, int *subversion )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Get_version(version, subversion);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Bsend
-int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
-	      MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Bsend(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Bsend_init
-int MPI_Bsend_init(void *buf, int count, MPI_Datatype datatype, 
-                   int dest, int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Bsend_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Buffer_attach
-int MPI_Buffer_attach(void *buffer, int size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Buffer_attach(buffer, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Buffer_detach
-int MPI_Buffer_detach(void *buffer, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Buffer_detach(buffer, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cancel
-int MPI_Cancel(MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cancel(request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Grequest_complete
-int MPI_Grequest_complete( MPI_Request request )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Grequest_complete(request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Grequest_start
-int MPI_Grequest_start( MPI_Grequest_query_function *query_fn, 
-			MPI_Grequest_free_function *free_fn, 
-			MPI_Grequest_cancel_function *cancel_fn, 
-			void *extra_state, MPI_Request *request )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Grequest_start(query_fn, free_fn, cancel_fn, extra_state, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Ibsend
-int MPI_Ibsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
-	       MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Ibsend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Iprobe
-int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, 
-	       MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Iprobe(source, tag, comm, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Irecv
-int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
-	      int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Irecv(buf, count, datatype, source, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Irsend
-int MPI_Irsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	       MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Irsend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Isend
-int MPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	      MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Isend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Issend
-int MPI_Issend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	       MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Issend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Probe
-int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Probe(source, tag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Recv
-int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
-	     MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Recv(buf, count, datatype, source, tag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Recv_init
-int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, 
-		  int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Recv_init(buf, count, datatype, source, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Request_free
-int MPI_Request_free(MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Request_free(request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Request_get_status
-int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Request_get_status(request, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Rsend
-int MPI_Rsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	      MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Rsend(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Rsend_init
-int MPI_Rsend_init(void *buf, int count, MPI_Datatype datatype, int dest,
-		   int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Rsend_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Send
-int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	     MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Send(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Sendrecv
-int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-		 int dest, int sendtag,
-		 void *recvbuf, int recvcount, MPI_Datatype recvtype, 
-		 int source, int recvtag,
-		 MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Sendrecv(sendbuf, sendcount, sendtype, dest, sendtag, recvbuf, recvcount, recvtype, source, recvtag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Sendrecv_replace
-int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, 
-			 int dest, int sendtag, int source, int recvtag,
-			 MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Sendrecv_replace(buf, count, datatype, dest, sendtag, source, recvtag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Send_init
-int MPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest,
-		  int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Send_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Ssend
-int MPI_Ssend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	      MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Ssend(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Ssend_init
-int MPI_Ssend_init(void *buf, int count, MPI_Datatype datatype, int dest,
-		   int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Ssend_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Start
-int MPI_Start(MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Start(request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Startall
-int MPI_Startall(int count, MPI_Request array_of_requests[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Startall(count, array_of_requests);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Status_set_cancelled
-int MPI_Status_set_cancelled(MPI_Status *status, int flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Status_set_cancelled(status, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Test
-int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Test(request, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Testall
-int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag, 
-		MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Testall(count, array_of_requests, flag, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Testany
-int MPI_Testany(int count, MPI_Request array_of_requests[], int *index, 
-		int *flag, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Testany(count, array_of_requests, index, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Testsome
-int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount, 
-		 int array_of_indices[], MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Test_cancelled
-int MPI_Test_cancelled(MPI_Status *status, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Test_cancelled(status, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Wait
-int MPI_Wait(MPI_Request *request, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Wait(request, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Waitall
-int MPI_Waitall(int count, MPI_Request array_of_requests[], 
-		MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Waitall(count, array_of_requests, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Waitany
-int MPI_Waitany(int count, MPI_Request array_of_requests[], int *index, 
-		MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Waitany(count, array_of_requests, index, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Waitsome
-int MPI_Waitsome(int incount, MPI_Request array_of_requests[], 
-		 int *outcount, int array_of_indices[],
-		 MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Accumulate
-int MPI_Accumulate(void *origin_addr, int origin_count, MPI_Datatype
-                   origin_datatype, int target_rank, MPI_Aint
-                   target_disp, int target_count, MPI_Datatype
-                   target_datatype, MPI_Op op, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Accumulate(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, op, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Alloc_mem
-int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Alloc_mem(size, info, baseptr);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Free_mem
-int MPI_Free_mem(void *base)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Free_mem(base);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Get
-int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype
-            origin_datatype, int target_rank, MPI_Aint target_disp,
-            int target_count, MPI_Datatype target_datatype, MPI_Win
-            win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Get(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Put
-int MPI_Put(void *origin_addr, int origin_count, MPI_Datatype
-            origin_datatype, int target_rank, MPI_Aint target_disp,
-            int target_count, MPI_Datatype target_datatype, MPI_Win
-            win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Put(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_complete
-int MPI_Win_complete(MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_complete(win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_create
-int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, 
-		   MPI_Comm comm, MPI_Win *win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_create(base, size, disp_unit, info, comm, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_fence
-int MPI_Win_fence(int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_fence(assert, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_free
-int MPI_Win_free(MPI_Win *win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_free(win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_get_group
-int MPI_Win_get_group(MPI_Win win, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_get_group(win, group);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_get_name
-int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_get_name(win, win_name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_lock
-int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_lock(lock_type, rank, assert, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_post
-int MPI_Win_post(MPI_Group group, int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_post(group, assert, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_set_name
-int MPI_Win_set_name(MPI_Win win, char *win_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_set_name(win, win_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_start
-int MPI_Win_start(MPI_Group group, int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_start(group, assert, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_test
-int MPI_Win_test(MPI_Win win, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_test(win, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_unlock
-int MPI_Win_unlock(int rank, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_unlock(rank, win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Win_wait
-int MPI_Win_wait(MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Win_wait(win);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_close
-int MPI_File_close(MPI_File *mpi_fh)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_close(mpi_fh);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_delete
-int MPI_File_delete(char *filename, MPI_Info info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_delete(filename, info);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_c2f
-MPI_Fint MPI_File_c2f(MPI_File mpi_fh)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    return fn.MPI_File_c2f(mpi_fh);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_f2c
-MPI_File MPI_File_f2c(MPI_Fint i)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    return fn.MPI_File_f2c(i);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_sync
-int MPI_File_sync(MPI_File mpi_fh)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_sync(mpi_fh);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_amode
-int MPI_File_get_amode(MPI_File mpi_fh, int *amode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_amode(mpi_fh, amode);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_atomicity
-int MPI_File_get_atomicity(MPI_File mpi_fh, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_atomicity(mpi_fh, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_byte_offset
-int MPI_File_get_byte_offset(MPI_File mpi_fh,
-			     MPI_Offset offset,
-			     MPI_Offset *disp)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_byte_offset(mpi_fh, offset, disp);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_type_extent
-int MPI_File_get_type_extent(MPI_File mpi_fh, MPI_Datatype datatype, 
-                             MPI_Aint *extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_type_extent(mpi_fh, datatype, extent);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_group
-int MPI_File_get_group(MPI_File mpi_fh, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_group(mpi_fh, group);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_info
-int MPI_File_get_info(MPI_File mpi_fh, MPI_Info *info_used)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_info(mpi_fh, info_used);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_position
-int MPI_File_get_position(MPI_File mpi_fh, MPI_Offset *offset)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_position(mpi_fh, offset);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_position_shared
-int MPI_File_get_position_shared(MPI_File mpi_fh, MPI_Offset *offset)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_position_shared(mpi_fh, offset);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_size
-int MPI_File_get_size(MPI_File mpi_fh, MPI_Offset *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_size(mpi_fh, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_get_view
-int MPI_File_get_view(MPI_File mpi_fh,
-		      MPI_Offset *disp,
-		      MPI_Datatype *etype,
-		      MPI_Datatype *filetype,
-		      char *datarep)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_get_view(mpi_fh, disp, etype, filetype, datarep);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_iread
-int MPI_File_iread(MPI_File mpi_fh, void *buf, int count, 
-		   MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_iread(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_iread_at
-int MPI_File_iread_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                      int count, MPI_Datatype datatype, 
-                      MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_iread_at(mpi_fh, offset, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_iread_shared
-int MPI_File_iread_shared(MPI_File mpi_fh, void *buf, int count, 
-			  MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_iread_shared(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_iwrite
-int MPI_File_iwrite(MPI_File mpi_fh, void *buf, int count, 
-		    MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_iwrite(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_iwrite_at
-int MPI_File_iwrite_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                       int count, MPI_Datatype datatype, 
-                       MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_iwrite_at(mpi_fh, offset, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_iwrite_shared
-int MPI_File_iwrite_shared(MPI_File mpi_fh, void *buf, int count, 
-			   MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_iwrite_shared(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_open
-int MPI_File_open(MPI_Comm comm, char *filename, int amode, 
-                  MPI_Info info, MPI_File *fh)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_open(comm, filename, amode, info, fh);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_preallocate
-int MPI_File_preallocate(MPI_File mpi_fh, MPI_Offset size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_preallocate(mpi_fh, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_at_all_begin
-int MPI_File_read_at_all_begin(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-			       int count, MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_at_all_begin(mpi_fh, offset, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_at_all_end
-int MPI_File_read_at_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_at_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read
-int MPI_File_read(MPI_File mpi_fh, void *buf, int count, 
-                  MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_all
-int MPI_File_read_all(MPI_File mpi_fh, void *buf, int count, 
-                      MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_all(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_all_begin
-int MPI_File_read_all_begin(MPI_File mpi_fh, void *buf, int count, 
-                            MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_all_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_all_end
-int MPI_File_read_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_at
-int MPI_File_read_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-		     int count, MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_at(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_at_all
-int MPI_File_read_at_all(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                         int count, MPI_Datatype datatype, 
-                         MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_at_all(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_ordered
-int MPI_File_read_ordered(MPI_File mpi_fh, void *buf, int count, 
-                          MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_ordered(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_ordered_begin
-int MPI_File_read_ordered_begin(MPI_File mpi_fh, void *buf, int count, 
-				MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_ordered_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_ordered_end
-int MPI_File_read_ordered_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_ordered_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_read_shared
-int MPI_File_read_shared(MPI_File mpi_fh, void *buf, int count, 
-			 MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_read_shared(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_seek
-int MPI_File_seek(MPI_File mpi_fh, MPI_Offset offset, int whence)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_seek(mpi_fh, offset, whence);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_seek_shared
-int MPI_File_seek_shared(MPI_File mpi_fh, MPI_Offset offset, int whence)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_seek_shared(mpi_fh, offset, whence);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_set_atomicity
-int MPI_File_set_atomicity(MPI_File mpi_fh, int flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_set_atomicity(mpi_fh, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_set_info
-int MPI_File_set_info(MPI_File mpi_fh, MPI_Info info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_set_info(mpi_fh, info);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_set_size
-int MPI_File_set_size(MPI_File mpi_fh, MPI_Offset size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_set_size(mpi_fh, size);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_set_view
-int MPI_File_set_view(MPI_File mpi_fh, MPI_Offset disp, MPI_Datatype etype,
-		      MPI_Datatype filetype, char *datarep, MPI_Info info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_set_view(mpi_fh, disp, etype, filetype, datarep, info);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write
-int MPI_File_write(MPI_File mpi_fh, void *buf, int count, 
-                   MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_all
-int MPI_File_write_all(MPI_File mpi_fh, void *buf, int count, 
-                       MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_all(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_all_begin
-int MPI_File_write_all_begin(MPI_File mpi_fh, void *buf, int count, 
-			     MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_all_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_all_end
-int MPI_File_write_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_at
-int MPI_File_write_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                      int count, MPI_Datatype datatype, 
-                      MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_at(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_at_all
-int MPI_File_write_at_all(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                          int count, MPI_Datatype datatype, 
-                          MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_at_all(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_ordered
-int MPI_File_write_ordered(MPI_File mpi_fh, void *buf, int count, 
-			   MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_ordered(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_ordered_begin
-int MPI_File_write_ordered_begin(MPI_File mpi_fh, void *buf, int count, 
-				 MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_ordered_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_ordered_end
-int MPI_File_write_ordered_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_ordered_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_shared
-int MPI_File_write_shared(MPI_File mpi_fh, void *buf, int count, 
-                          MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_shared(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_at_all_begin
-int MPI_File_write_at_all_begin(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-				int count, MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_at_all_begin(mpi_fh, offset, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_File_write_at_all_end
-int MPI_File_write_at_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_File_write_at_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_create
-int MPI_Info_create(MPI_Info *info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_create(info);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_delete
-int MPI_Info_delete(MPI_Info info, char *key)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_delete(info, key);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_dup
-int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_dup(info, newinfo);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_free
-int MPI_Info_free(MPI_Info *info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_free(info);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_get
-int MPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_get(info, key, valuelen, value, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_get_nkeys
-int MPI_Info_get_nkeys(MPI_Info info, int *nkeys)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_get_nkeys(info, nkeys);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_get_nthkey
-int MPI_Info_get_nthkey(MPI_Info info, int n, char *key)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_get_nthkey(info, n, key);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_get_valuelen
-int MPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_get_valuelen(info, key, valuelen, flag);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Info_set
-int MPI_Info_set(MPI_Info info, char *key, char *value)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Info_set(info, key, value);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Close_port
-int MPI_Close_port(char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Close_port(port_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_accept
-int MPI_Comm_accept(char *port_name, MPI_Info info, int root, MPI_Comm comm, 
-                    MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_accept(port_name, info, root, comm, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_connect
-int MPI_Comm_connect(char *port_name, MPI_Info info, int root, MPI_Comm comm, 
-                     MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_connect(port_name, info, root, comm, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_disconnect
-int MPI_Comm_disconnect(MPI_Comm * comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_disconnect(comm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_get_parent
-int MPI_Comm_get_parent(MPI_Comm *parent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_get_parent(parent);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_join
-int MPI_Comm_join(int fd, MPI_Comm *intercomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_join(fd, intercomm);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_spawn
-int MPI_Comm_spawn(char *command, char *argv[], int maxprocs, MPI_Info info, 
-		   int root, MPI_Comm comm, MPI_Comm *intercomm,
-		   int array_of_errcodes[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_spawn(command, argv, maxprocs, info, root, comm, intercomm, array_of_errcodes);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Comm_spawn_multiple
-int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char* *array_of_argv[], int array_of_maxprocs[], MPI_Info array_of_info[], int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Lookup_name
-int MPI_Lookup_name(char *service_name, MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Lookup_name(service_name, info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Open_port
-int MPI_Open_port(MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Open_port(info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Publish_name
-int MPI_Publish_name(char *service_name, MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Publish_name(service_name, info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Unpublish_name
-int MPI_Unpublish_name(char *service_name, MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Unpublish_name(service_name, info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cartdim_get
-int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cartdim_get(comm, ndims);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_coords
-int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_coords(comm, rank, maxdims, coords);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_create
-int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, 
-		    int reorder, MPI_Comm *comm_cart)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_create(comm_old, ndims, dims, periods, reorder, comm_cart);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_get
-int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, 
-                 int *coords)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_get(comm, maxdims, dims, periods, coords);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_map
-int MPI_Cart_map(MPI_Comm comm_old, int ndims, int *dims, int *periods, 
-		 int *newrank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_map(comm_old, ndims, dims, periods, newrank);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_rank
-int MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_rank(comm, coords, rank);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_shift
-int MPI_Cart_shift(MPI_Comm comm, int direction, int displ, int *source, 
-		   int *dest)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_shift(comm, direction, displ, source, dest);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Cart_sub
-int MPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *comm_new)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Cart_sub(comm, remain_dims, comm_new);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Dims_create
-int MPI_Dims_create(int nnodes, int ndims, int *dims)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Dims_create(nnodes, ndims, dims);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Graph_create
-int MPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges, 
-		     int reorder, MPI_Comm *comm_graph)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Graph_create(comm_old, nnodes, index, edges, reorder, comm_graph);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Dist_graph_create
-int MPI_Dist_graph_create(MPI_Comm comm_old, int n, int sources[],
-                          int degrees[], int destinations[], int weights[],
-                          MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Dist_graph_create(comm_old, n, sources, degrees, destinations, weights, info, reorder, comm_dist_graph);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Dist_graph_create_adjacent
-int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
-                                   int indegree, int sources[], int sourceweights[],
-                                   int outdegree, int destinations[], int destweights[],
-                                   MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Dist_graph_create_adjacent(comm_old, indegree, sources, sourceweights, outdegree, destinations, destweights, info, reorder, comm_dist_graph);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Graphdims_get
-int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Graphdims_get(comm, nnodes, nedges);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Graph_neighbors_count
-int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Graph_neighbors_count(comm, rank, nneighbors);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Graph_get
-int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, 
-                  int *index, int *edges)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Graph_get(comm, maxindex, maxedges, index, edges);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Graph_map
-int MPI_Graph_map(MPI_Comm comm_old, int nnodes, int *index, int *edges,
-                  int *newrank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Graph_map(comm_old, nnodes, index, edges, newrank);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Graph_neighbors
-int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, 
-			int *neighbors)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Graph_neighbors(comm, rank, maxneighbors, neighbors);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Dist_graph_neighbors
-int MPI_Dist_graph_neighbors(MPI_Comm comm,
-                             int maxindegree, int sources[], int sourceweights[],
-                             int maxoutdegree, int destinations[], int destweights[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Dist_graph_neighbors(comm, maxindegree, sources, sourceweights, maxoutdegree, destinations, destweights);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Dist_graph_neighbors_count
-int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Dist_graph_neighbors_count(comm, indegree, outdegree, weighted);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Topo_test
-int MPI_Topo_test(MPI_Comm comm, int *topo_type)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Topo_test(comm, topo_type);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Wtime
-double MPI_Wtime()
-{
-    /*MPICH_CHECK_INIT_VOID(FCNAME);*/ /* No checking for performance */
-    return fn.MPI_Wtime();
-}
-
-#undef FCNAME
-#define FCNAME MPI_Wtick
-double MPI_Wtick()
-{
-    /*MPICH_CHECK_INIT_VOID(FCNAME);*/ /* No checking for performance */
-    return fn.MPI_Wtick();
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_f90_integer
-int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_f90_integer(range, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_f90_real
-int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_f90_real(precision, range, newtype);
-}
-
-#undef FCNAME
-#define FCNAME MPI_Type_create_f90_complex
-int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.MPI_Type_create_f90_complex(precision, range, newtype);
-}
-
-/* PMPI versions */
-#undef FCNAME
-#define FCNAME PMPI_Init
-int PMPI_Init( int *argc, char ***argv )
-{
-    int result;
-    MPICH_CHECK_INIT(FCNAME);
-    result = fn.PMPI_Init(argc, argv);
-    *fn.MPI_F_STATUS_IGNORE = MPI_F_STATUS_IGNORE;
-    *fn.MPI_F_STATUSES_IGNORE = MPI_F_STATUSES_IGNORE;
-    return result;
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Init_thread
-int PMPI_Init_thread( int *argc, char ***argv, int required, int *provided )
-{
-    int result;
-    MPICH_CHECK_INIT(FCNAME);
-    result = fn.PMPI_Init_thread(argc, argv, required, provided);
-    *fn.MPI_F_STATUS_IGNORE = MPI_F_STATUS_IGNORE;
-    *fn.MPI_F_STATUSES_IGNORE = MPI_F_STATUSES_IGNORE;
-    return result;
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Status_c2f
-int PMPI_Status_c2f( MPI_Status *c_status, MPI_Fint *f_status )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Status_c2f(c_status, f_status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Status_f2c
-int PMPI_Status_f2c( MPI_Fint *f_status, MPI_Status *c_status )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Status_f2c(f_status, c_status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Attr_delete
-int PMPI_Attr_delete(MPI_Comm comm, int keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Attr_delete(comm, keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Attr_get
-int PMPI_Attr_get(MPI_Comm comm, int keyval, void *attr_value, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Attr_get(comm, keyval, attr_value, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Attr_put
-int PMPI_Attr_put(MPI_Comm comm, int keyval, void *attr_value)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Attr_put(comm, keyval, attr_value);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_create_keyval
-int PMPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn, 
-			   MPI_Comm_delete_attr_function *comm_delete_attr_fn, 
-			   int *comm_keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_create_keyval(comm_copy_attr_fn, comm_delete_attr_fn, comm_keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_delete_attr
-int PMPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_delete_attr(comm, comm_keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_free_keyval
-int PMPI_Comm_free_keyval(int *comm_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_free_keyval(comm_keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_get_attr
-int PMPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_get_attr(comm, comm_keyval, attribute_val, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_set_attr
-int PMPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_set_attr(comm, comm_keyval, attribute_val);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Keyval_create
-int PMPI_Keyval_create(MPI_Copy_function *copy_fn, 
-		      MPI_Delete_function *delete_fn, 
-		      int *keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Keyval_create(copy_fn, delete_fn, keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Keyval_free
-int PMPI_Keyval_free(int *keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Keyval_free(keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_keyval
-int PMPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn, 
-			   MPI_Type_delete_attr_function *type_delete_attr_fn,
-			   int *type_keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_keyval(type_copy_attr_fn, type_delete_attr_fn, type_keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_delete_attr
-int PMPI_Type_delete_attr(MPI_Datatype type, int type_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_delete_attr(type, type_keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_free_keyval
-int PMPI_Type_free_keyval(int *type_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_free_keyval(type_keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_get_attr
-int PMPI_Type_get_attr(MPI_Datatype type, int type_keyval, void *attribute_val, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_get_attr(type, type_keyval, attribute_val, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_set_attr
-int PMPI_Type_set_attr(MPI_Datatype type, int type_keyval, void *attribute_val)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_set_attr(type, type_keyval, attribute_val);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_create_keyval
-int PMPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn, 
-			  MPI_Win_delete_attr_function *win_delete_attr_fn, 
-			  int *win_keyval, void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_create_keyval(win_copy_attr_fn, win_delete_attr_fn, win_keyval, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_delete_attr
-int PMPI_Win_delete_attr(MPI_Win win, int win_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_delete_attr(win, win_keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_free_keyval
-int PMPI_Win_free_keyval(int *win_keyval)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_free_keyval(win_keyval);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_get_attr
-int PMPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, 
-		     int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_get_attr(win, win_keyval, attribute_val, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_set_attr
-int PMPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_set_attr(win, win_keyval, attribute_val);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Allgather
-int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-                  void *recvbuf, int recvcount, MPI_Datatype recvtype, 
-                  MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Allgatherv
-int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-                   void *recvbuf, int *recvcounts, int *displs, 
-                   MPI_Datatype recvtype, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Allreduce 
-int PMPI_Allreduce ( void *sendbuf, void *recvbuf, int count, 
-		    MPI_Datatype datatype, MPI_Op op, MPI_Comm comm )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Alltoall
-int PMPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-                 void *recvbuf, int recvcount, MPI_Datatype recvtype, 
-                 MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Alltoallv
-int PMPI_Alltoallv(void *sendbuf, int *sendcnts, int *sdispls, 
-                  MPI_Datatype sendtype, void *recvbuf, int *recvcnts, 
-                  int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Alltoallv(sendbuf, sendcnts, sdispls, sendtype, recvbuf, recvcnts, rdispls, recvtype, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Alltoallw
-int PMPI_Alltoallw(void *sendbuf, int *sendcnts, int *sdispls, 
-                  MPI_Datatype *sendtypes, void *recvbuf, int *recvcnts, 
-                  int *rdispls, MPI_Datatype *recvtypes, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Alltoallw(sendbuf, sendcnts, sdispls, sendtypes, recvbuf, recvcnts, rdispls, recvtypes, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Barrier
-int PMPI_Barrier( MPI_Comm comm )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Barrier(comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Bcast
-int PMPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root, 
-               MPI_Comm comm )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Bcast(buffer, count, datatype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Exscan
-int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
-               MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Exscan(sendbuf, recvbuf, count, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Gather
-int PMPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
-               void *recvbuf, int recvcnt, MPI_Datatype recvtype, 
-               int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Gatherv
-int PMPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
-                void *recvbuf, int *recvcnts, int *displs, 
-                MPI_Datatype recvtype, int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Gatherv(sendbuf, sendcnt, sendtype, recvbuf, recvcnts, displs, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Op_create
-int PMPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Op_create(function, commute, op);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Op_free
-int PMPI_Op_free(MPI_Op *op)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Op_free(op);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Op_commutative
-int PMPI_Op_commutative(MPI_Op op, int *commute)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Op_commutative(op, commute);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Reduce
-int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
-	       MPI_Op op, int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Reduce_local
-int PMPI_Reduce_local(void *inbuf, void *inoutbuf, int count,
-                     MPI_Datatype datatype, MPI_Op op)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Reduce_local(inbuf, inoutbuf, count, datatype, op);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Reduce_scatter
-int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcnts, 
-		       MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Reduce_scatter(sendbuf, recvbuf, recvcnts, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Reduce_scatter_block
-int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
-                             MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Reduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Scan
-int PMPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
-	     MPI_Op op, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Scan(sendbuf, recvbuf, count, datatype, op, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Scatter
-int PMPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, 
-		void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, 
-		MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Scatter(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Scatterv
-int PMPI_Scatterv( void *sendbuf, int *sendcnts, int *displs, 
-		  MPI_Datatype sendtype, void *recvbuf, int recvcnt,
-		  MPI_Datatype recvtype,
-		  int root, MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Scatterv(sendbuf, sendcnts, displs, sendtype, recvbuf, recvcnt, recvtype, root, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_compare
-int PMPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_compare(comm1, comm2, result);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_create
-int PMPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_create(comm, group, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_dup
-int PMPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_dup(comm, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_free
-int PMPI_Comm_free(MPI_Comm *comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_free(comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_get_name
-int PMPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_get_name(comm, comm_name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_group
-int PMPI_Comm_group(MPI_Comm comm, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_group(comm, group);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_rank
-int PMPI_Comm_rank( MPI_Comm comm, int *rank )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_rank(comm, rank);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_remote_group
-int PMPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_remote_group(comm, group);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_remote_size
-int PMPI_Comm_remote_size(MPI_Comm comm, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_remote_size(comm, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_set_name
-int PMPI_Comm_set_name(MPI_Comm comm, char *comm_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_set_name(comm, comm_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_size
-int PMPI_Comm_size( MPI_Comm comm, int *size )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_size(comm, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_split
-int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_split(comm, color, key, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_test_inter
-int PMPI_Comm_test_inter(MPI_Comm comm, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_test_inter(comm, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Intercomm_create
-int PMPI_Intercomm_create(MPI_Comm local_comm, int local_leader, 
-			 MPI_Comm peer_comm, int remote_leader, int tag, 
-			 MPI_Comm *newintercomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Intercomm_create(local_comm, local_leader, peer_comm, remote_leader, tag, newintercomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Intercomm_merge
-int PMPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Intercomm_merge(intercomm, high, newintracomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Address
-int PMPI_Address( void *location, MPI_Aint *address )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Address(location, address);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Get_address
-int PMPI_Get_address(void *location, MPI_Aint *address)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Get_address(location, address);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Get_count
-int PMPI_Get_count( MPI_Status *status, 	MPI_Datatype datatype, int *count )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Get_count(status, datatype, count);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Get_elements
-int PMPI_Get_elements(MPI_Status *status, MPI_Datatype datatype, int *elements)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Get_elements(status, datatype, elements);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Pack
-int PMPI_Pack(void *inbuf,
-	     int incount,
-	     MPI_Datatype datatype,
-	     void *outbuf, 
-	     int outcount,
-	     int *position,
-	     MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Pack(inbuf, incount, datatype, outbuf, outcount, position, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Pack_external
-int PMPI_Pack_external(char *datarep,
-		      void *inbuf,
-		      int incount,
-		      MPI_Datatype datatype,
-		      void *outbuf,
-		      MPI_Aint outcount,
-		      MPI_Aint *position)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, outcount, position);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Pack_external_size
-int PMPI_Pack_external_size(char *datarep,
-			   int incount,
-			   MPI_Datatype datatype,
-			   MPI_Aint *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Pack_external_size(datarep, incount, datatype, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Pack_size
-int PMPI_Pack_size(int incount,
-		  MPI_Datatype datatype,
-		  MPI_Comm comm,
-		  int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Pack_size(incount, datatype, comm, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Register_datarep
-int PMPI_Register_datarep(char *datarep, 
-			 MPI_Datarep_conversion_function *read_conversion_fn, 
-			 MPI_Datarep_conversion_function *write_conversion_fn, 
-			 MPI_Datarep_extent_function *dtype_file_extent_fn, 
-			 void *extra_state)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Status_set_elements
-int PMPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, 
-			    int count)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Status_set_elements(status, datatype, count);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_commit
-int PMPI_Type_commit(MPI_Datatype *datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_commit(datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_contiguous
-int PMPI_Type_contiguous(int count,
-			MPI_Datatype old_type,
-			MPI_Datatype *new_type_p)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_contiguous(count, old_type, new_type_p);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_darray
-int PMPI_Type_create_darray(int size,
-			   int rank,
-			   int ndims,
-			   int array_of_gsizes[],
-			   int array_of_distribs[],
-			   int array_of_dargs[],
-			   int array_of_psizes[],
-			   int order,
-			   MPI_Datatype oldtype,
-			   MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_darray(size, rank, ndims, array_of_gsizes, array_of_distribs, array_of_dargs, array_of_psizes, order, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_hindexed
-int PMPI_Type_create_hindexed(int count,
-			     int blocklengths[],
-			     MPI_Aint displacements[],
-			     MPI_Datatype oldtype,
-			     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_hindexed(count, blocklengths, displacements, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_hvector
-int PMPI_Type_create_hvector(int count,
-			    int blocklength,
-			    MPI_Aint stride,
-			    MPI_Datatype oldtype,
-			    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_hvector(count, blocklength, stride, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_indexed_block
-int PMPI_Type_create_indexed_block(int count,
-				  int blocklength,
-				  int array_of_displacements[],
-				  MPI_Datatype oldtype,
-				  MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_indexed_block(count, blocklength, array_of_displacements, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_hindexed_block
-int PMPI_Type_create_hindexed_block(int count,
-                                     int blocklength,
-                                     const int array_of_displacements[],
-                                     MPI_Datatype oldtype,
-                                     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_hindexed_block(count, blocklength, array_of_displacements, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_resized
-int PMPI_Type_create_resized(MPI_Datatype oldtype,
-			    MPI_Aint lb,
-			    MPI_Aint extent,
-			    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_resized(oldtype, lb, extent, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_struct
-int PMPI_Type_create_struct(int count,
-			   int array_of_blocklengths[],
-			   MPI_Aint array_of_displacements[],
-			   MPI_Datatype array_of_types[],
-			   MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_struct(count, array_of_blocklengths, array_of_displacements, array_of_types, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_subarray
-int PMPI_Type_create_subarray(int ndims,
-			     int array_of_sizes[],
-			     int array_of_subsizes[],
-			     int array_of_starts[],
-			     int order,
-			     MPI_Datatype oldtype,
-			     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_subarray(ndims, array_of_sizes, array_of_subsizes, array_of_starts, order, oldtype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_dup
-int PMPI_Type_dup(MPI_Datatype datatype, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_dup(datatype, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_extent
-int PMPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_extent(datatype, extent);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_free
-int PMPI_Type_free(MPI_Datatype *datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_free(datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_get_contents
-int PMPI_Type_get_contents(MPI_Datatype datatype,
-			  int max_integers,
-			  int max_addresses,
-			  int max_datatypes,
-			  int array_of_integers[],
-			  MPI_Aint array_of_addresses[],
-			  MPI_Datatype array_of_datatypes[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_get_contents(datatype, max_integers, max_addresses, max_datatypes, array_of_integers, array_of_addresses, array_of_datatypes);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_get_envelope
-int PMPI_Type_get_envelope(MPI_Datatype datatype,
-			  int *num_integers,
-			  int *num_addresses,
-			  int *num_datatypes,
-			  int *combiner)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_get_envelope(datatype, num_integers, num_addresses, num_datatypes, combiner);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_get_extent
-int PMPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_get_extent(datatype, lb, extent);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_get_name
-int PMPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_get_name(datatype, type_name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_get_true_extent
-int PMPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, 
-			     MPI_Aint *true_extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_get_true_extent(datatype, true_lb, true_extent);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_hindexed
-int PMPI_Type_hindexed(int count,
-		      int blocklens[],
-		      MPI_Aint indices[],
-		      MPI_Datatype old_type,
-		      MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_hindexed(count, blocklens, indices, old_type, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_hvector
-int PMPI_Type_hvector(int count,
-		     int blocklen,
-		     MPI_Aint stride,
-		     MPI_Datatype old_type,
-		     MPI_Datatype *newtype_p)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_hvector(count, blocklen, stride, old_type, newtype_p);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_indexed
-int PMPI_Type_indexed(int count,
-		     int blocklens[],
-		     int indices[],
-		     MPI_Datatype old_type,
-		     MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_indexed(count, blocklens, indices, old_type, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_lb
-int PMPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_lb(datatype, displacement);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_match_size
-int PMPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_match_size(typeclass, size, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_set_name
-int PMPI_Type_set_name(MPI_Datatype type, char *type_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_set_name(type, type_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_size
-int PMPI_Type_size(MPI_Datatype datatype, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_size(datatype, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_struct
-int PMPI_Type_struct(int count,
-		    int blocklens[],
-		    MPI_Aint indices[],
-		    MPI_Datatype old_types[],
-		    MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_struct(count, blocklens, indices, old_types, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_ub
-int PMPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_ub(datatype, displacement);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_vector
-int PMPI_Type_vector(int count,
-		    int blocklength,
-		    int stride, 
-		    MPI_Datatype old_type,
-		    MPI_Datatype *newtype_p)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_vector(count, blocklength, stride, old_type, newtype_p);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Unpack
-int PMPI_Unpack(void *inbuf,
-	       int insize,
-	       int *position,
-	       void *outbuf,
-	       int outcount,
-	       MPI_Datatype datatype,
-	       MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Unpack(inbuf, insize, position, outbuf, outcount, datatype, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Unpack_external
-int PMPI_Unpack_external(char *datarep,
-			void *inbuf,
-			MPI_Aint insize,
-			MPI_Aint *position,
-			void *outbuf,
-			int outcount,
-			MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Unpack_external(datarep, inbuf, insize, position, outbuf, outcount, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Add_error_class
-int PMPI_Add_error_class(int *errorclass)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Add_error_class(errorclass);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Add_error_code
-int PMPI_Add_error_code(int errorclass, int *errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Add_error_code(errorclass, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Add_error_string
-int PMPI_Add_error_string(int errorcode, char *string)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Add_error_string(errorcode, string);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_call_errhandler
-int PMPI_Comm_call_errhandler(MPI_Comm comm, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_call_errhandler(comm, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_create_errhandler
-int PMPI_Comm_create_errhandler(MPI_Comm_errhandler_function *function,
-                               MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_create_errhandler(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_get_errhandler
-int PMPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_get_errhandler(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_set_errhandler
-int PMPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_set_errhandler(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Errhandler_create
-int PMPI_Errhandler_create(MPI_Handler_function *function, 
-                          MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Errhandler_create(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Errhandler_free
-int PMPI_Errhandler_free(MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Errhandler_free(errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Errhandler_get
-int PMPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Errhandler_get(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Errhandler_set
-int PMPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Errhandler_set(comm, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Error_class
-int PMPI_Error_class(int errorcode, int *errorclass)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Error_class(errorcode, errorclass);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Error_string
-int PMPI_Error_string(int errorcode, char *string, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Error_string(errorcode, string, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_call_errhandler
-int PMPI_File_call_errhandler(MPI_File fh, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_call_errhandler(fh, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_create_errhandler
-int PMPI_File_create_errhandler(MPI_File_errhandler_function *function,
-                               MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_create_errhandler(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_errhandler
-int PMPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_errhandler(file, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_set_errhandler
-int PMPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_set_errhandler(file, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_call_errhandler
-int PMPI_Win_call_errhandler(MPI_Win win, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_call_errhandler(win, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_create_errhandler
-int PMPI_Win_create_errhandler(MPI_Win_errhandler_function *function,
-			      MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_create_errhandler(function, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_get_errhandler
-int PMPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_get_errhandler(win, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_set_errhandler
-int PMPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_set_errhandler(win, errhandler);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_compare
-int PMPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_compare(group1, group2, result);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_difference
-int PMPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_difference(group1, group2, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_excl
-int PMPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_excl(group, n, ranks, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_free
-int PMPI_Group_free(MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_free(group);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_incl
-int PMPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_incl(group, n, ranks, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_intersection
-int PMPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_intersection(group1, group2, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_range_excl
-int PMPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], 
-                         MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_range_excl(group, n, ranges, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_range_incl
-int PMPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], 
-                         MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_range_incl(group, n, ranges, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_rank
-int PMPI_Group_rank(MPI_Group group, int *rank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_rank(group, rank);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_size
-int PMPI_Group_size(MPI_Group group, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_size(group, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_translate_ranks
-int PMPI_Group_translate_ranks(MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_translate_ranks(group1, n, ranks1, group2, ranks2);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Group_union
-int PMPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Group_union(group1, group2, newgroup);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Abort
-int PMPI_Abort(MPI_Comm comm, int errorcode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Abort(comm, errorcode);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Finalize
-int PMPI_Finalize( void )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Finalize();
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Finalized
-int PMPI_Finalized( int *flag )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Finalized(flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Initialized
-int PMPI_Initialized( int *flag )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Initialized(flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Is_thread_main
-int PMPI_Is_thread_main( int *flag )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Is_thread_main(flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Query_thread
-int PMPI_Query_thread( int *provided )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Query_thread(provided);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Get_processor_name
-int PMPI_Get_processor_name( char *name, int *resultlen )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Get_processor_name(name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Pcontrol
-int PMPI_Pcontrol(const int level, ...)
-{
-    int ret_val;
-    va_list list;
-
-    MPICH_CHECK_INIT(FCNAME);
-
-    va_start(list, level);
-    ret_val = fn.PMPI_Pcontrol(level, list);
-    va_end(list);
-    return ret_val;
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Get_version
-int PMPI_Get_version( int *version, int *subversion )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Get_version(version, subversion);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Bsend
-int PMPI_Bsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
-	      MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Bsend(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Bsend_init
-int PMPI_Bsend_init(void *buf, int count, MPI_Datatype datatype, 
-                   int dest, int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Bsend_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Buffer_attach
-int PMPI_Buffer_attach(void *buffer, int size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Buffer_attach(buffer, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Buffer_detach
-int PMPI_Buffer_detach(void *buffer, int *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Buffer_detach(buffer, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cancel
-int PMPI_Cancel(MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cancel(request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Grequest_complete
-int PMPI_Grequest_complete( MPI_Request request )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Grequest_complete(request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Grequest_start
-int PMPI_Grequest_start( MPI_Grequest_query_function *query_fn, 
-			MPI_Grequest_free_function *free_fn, 
-			MPI_Grequest_cancel_function *cancel_fn, 
-			void *extra_state, MPI_Request *request )
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Grequest_start(query_fn, free_fn, cancel_fn, extra_state, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Ibsend
-int PMPI_Ibsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, 
-	       MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Ibsend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Iprobe
-int PMPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, 
-	       MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Iprobe(source, tag, comm, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Irecv
-int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source,
-	      int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Irecv(buf, count, datatype, source, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Irsend
-int PMPI_Irsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	       MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Irsend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Isend
-int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	      MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Isend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Issend
-int PMPI_Issend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	       MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Issend(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Probe
-int PMPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Probe(source, tag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Recv
-int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
-	     MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Recv(buf, count, datatype, source, tag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Recv_init
-int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, 
-		  int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Recv_init(buf, count, datatype, source, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Request_free
-int PMPI_Request_free(MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Request_free(request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Request_get_status
-int PMPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Request_get_status(request, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Rsend
-int PMPI_Rsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	      MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Rsend(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Rsend_init
-int PMPI_Rsend_init(void *buf, int count, MPI_Datatype datatype, int dest,
-		   int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Rsend_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Send
-int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	     MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Send(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Sendrecv
-int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, 
-		 int dest, int sendtag,
-		 void *recvbuf, int recvcount, MPI_Datatype recvtype, 
-		 int source, int recvtag,
-		 MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Sendrecv(sendbuf, sendcount, sendtype, dest, sendtag, recvbuf, recvcount, recvtype, source, recvtag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Sendrecv_replace
-int PMPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, 
-			 int dest, int sendtag, int source, int recvtag,
-			 MPI_Comm comm, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Sendrecv_replace(buf, count, datatype, dest, sendtag, source, recvtag, comm, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Send_init
-int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dest,
-		  int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Send_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Ssend
-int PMPI_Ssend(void *buf, int count, MPI_Datatype datatype, int dest, int tag,
-	      MPI_Comm comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Ssend(buf, count, datatype, dest, tag, comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Ssend_init
-int PMPI_Ssend_init(void *buf, int count, MPI_Datatype datatype, int dest,
-		   int tag, MPI_Comm comm, MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Ssend_init(buf, count, datatype, dest, tag, comm, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Start
-int PMPI_Start(MPI_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Start(request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Startall
-int PMPI_Startall(int count, MPI_Request array_of_requests[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Startall(count, array_of_requests);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Status_set_cancelled
-int PMPI_Status_set_cancelled(MPI_Status *status, int flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Status_set_cancelled(status, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Test
-int PMPI_Test(MPI_Request *request, int *flag, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Test(request, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Testall
-int PMPI_Testall(int count, MPI_Request array_of_requests[], int *flag, 
-		MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Testall(count, array_of_requests, flag, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Testany
-int PMPI_Testany(int count, MPI_Request array_of_requests[], int *index, 
-		int *flag, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Testany(count, array_of_requests, index, flag, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Testsome
-int PMPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount, 
-		 int array_of_indices[], MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Test_cancelled
-int PMPI_Test_cancelled(MPI_Status *status, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Test_cancelled(status, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Wait
-int PMPI_Wait(MPI_Request *request, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Wait(request, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Waitall
-int PMPI_Waitall(int count, MPI_Request array_of_requests[], 
-		MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Waitall(count, array_of_requests, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Waitany
-int PMPI_Waitany(int count, MPI_Request array_of_requests[], int *index, 
-		MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Waitany(count, array_of_requests, index, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Waitsome
-int PMPI_Waitsome(int incount, MPI_Request array_of_requests[], 
-		 int *outcount, int array_of_indices[],
-		 MPI_Status array_of_statuses[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Waitsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Accumulate
-int PMPI_Accumulate(void *origin_addr, int origin_count, MPI_Datatype
-                   origin_datatype, int target_rank, MPI_Aint
-                   target_disp, int target_count, MPI_Datatype
-                   target_datatype, MPI_Op op, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Accumulate(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, op, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Alloc_mem
-int PMPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Alloc_mem(size, info, baseptr);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Free_mem
-int PMPI_Free_mem(void *base)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Free_mem(base);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Get
-int PMPI_Get(void *origin_addr, int origin_count, MPI_Datatype
-            origin_datatype, int target_rank, MPI_Aint target_disp,
-            int target_count, MPI_Datatype target_datatype, MPI_Win
-            win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Get(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Put
-int PMPI_Put(void *origin_addr, int origin_count, MPI_Datatype
-            origin_datatype, int target_rank, MPI_Aint target_disp,
-            int target_count, MPI_Datatype target_datatype, MPI_Win
-            win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Put(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_complete
-int PMPI_Win_complete(MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_complete(win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_create
-int PMPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, 
-		   MPI_Comm comm, MPI_Win *win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_create(base, size, disp_unit, info, comm, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_fence
-int PMPI_Win_fence(int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_fence(assert, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_free
-int PMPI_Win_free(MPI_Win *win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_free(win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_get_group
-int PMPI_Win_get_group(MPI_Win win, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_get_group(win, group);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_get_name
-int PMPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_get_name(win, win_name, resultlen);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_lock
-int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_lock(lock_type, rank, assert, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_post
-int PMPI_Win_post(MPI_Group group, int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_post(group, assert, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_set_name
-int PMPI_Win_set_name(MPI_Win win, char *win_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_set_name(win, win_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_start
-int PMPI_Win_start(MPI_Group group, int assert, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_start(group, assert, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_test
-int PMPI_Win_test(MPI_Win win, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_test(win, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_unlock
-int PMPI_Win_unlock(int rank, MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_unlock(rank, win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Win_wait
-int PMPI_Win_wait(MPI_Win win)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Win_wait(win);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_close
-int PMPI_File_close(MPI_File *mpi_fh)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_close(mpi_fh);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_delete
-int PMPI_File_delete(char *filename, MPI_Info info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_delete(filename, info);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_c2f
-MPI_Fint PMPI_File_c2f(MPI_File mpi_fh)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    return fn.PMPI_File_c2f(mpi_fh);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_f2c
-MPI_File PMPI_File_f2c(MPI_Fint i)
-{
-    MPICH_CHECK_INIT_VOID(FCNAME);
-    return fn.PMPI_File_f2c(i);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_sync
-int PMPI_File_sync(MPI_File mpi_fh)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_sync(mpi_fh);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_amode
-int PMPI_File_get_amode(MPI_File mpi_fh, int *amode)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_amode(mpi_fh, amode);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_atomicity
-int PMPI_File_get_atomicity(MPI_File mpi_fh, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_atomicity(mpi_fh, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_byte_offset
-int PMPI_File_get_byte_offset(MPI_File mpi_fh,
-			     MPI_Offset offset,
-			     MPI_Offset *disp)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_byte_offset(mpi_fh, offset, disp);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_type_extent
-int PMPI_File_get_type_extent(MPI_File mpi_fh, MPI_Datatype datatype, 
-                             MPI_Aint *extent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_type_extent(mpi_fh, datatype, extent);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_group
-int PMPI_File_get_group(MPI_File mpi_fh, MPI_Group *group)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_group(mpi_fh, group);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_info
-int PMPI_File_get_info(MPI_File mpi_fh, MPI_Info *info_used)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_info(mpi_fh, info_used);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_position
-int PMPI_File_get_position(MPI_File mpi_fh, MPI_Offset *offset)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_position(mpi_fh, offset);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_position_shared
-int PMPI_File_get_position_shared(MPI_File mpi_fh, MPI_Offset *offset)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_position_shared(mpi_fh, offset);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_size
-int PMPI_File_get_size(MPI_File mpi_fh, MPI_Offset *size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_size(mpi_fh, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_get_view
-int PMPI_File_get_view(MPI_File mpi_fh,
-		      MPI_Offset *disp,
-		      MPI_Datatype *etype,
-		      MPI_Datatype *filetype,
-		      char *datarep)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_get_view(mpi_fh, disp, etype, filetype, datarep);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_iread
-int PMPI_File_iread(MPI_File mpi_fh, void *buf, int count, 
-		   MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_iread(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_iread_at
-int PMPI_File_iread_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                      int count, MPI_Datatype datatype, 
-                      MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_iread_at(mpi_fh, offset, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_iread_shared
-int PMPI_File_iread_shared(MPI_File mpi_fh, void *buf, int count, 
-			  MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_iread_shared(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_iwrite
-int PMPI_File_iwrite(MPI_File mpi_fh, void *buf, int count, 
-		    MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_iwrite(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_iwrite_at
-int PMPI_File_iwrite_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                       int count, MPI_Datatype datatype, 
-                       MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_iwrite_at(mpi_fh, offset, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_iwrite_shared
-int PMPI_File_iwrite_shared(MPI_File mpi_fh, void *buf, int count, 
-			   MPI_Datatype datatype, MPIO_Request *request)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_iwrite_shared(mpi_fh, buf, count, datatype, request);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_open
-int PMPI_File_open(MPI_Comm comm, char *filename, int amode, 
-                  MPI_Info info, MPI_File *fh)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_open(comm, filename, amode, info, fh);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_preallocate
-int PMPI_File_preallocate(MPI_File mpi_fh, MPI_Offset size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_preallocate(mpi_fh, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_at_all_begin
-int PMPI_File_read_at_all_begin(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-			       int count, MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_at_all_begin(mpi_fh, offset, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_at_all_end
-int PMPI_File_read_at_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_at_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read
-int PMPI_File_read(MPI_File mpi_fh, void *buf, int count, 
-                  MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_all
-int PMPI_File_read_all(MPI_File mpi_fh, void *buf, int count, 
-                      MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_all(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_all_begin
-int PMPI_File_read_all_begin(MPI_File mpi_fh, void *buf, int count, 
-                            MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_all_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_all_end
-int PMPI_File_read_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_at
-int PMPI_File_read_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-		     int count, MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_at(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_at_all
-int PMPI_File_read_at_all(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                         int count, MPI_Datatype datatype, 
-                         MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_at_all(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_ordered
-int PMPI_File_read_ordered(MPI_File mpi_fh, void *buf, int count, 
-                          MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_ordered(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_ordered_begin
-int PMPI_File_read_ordered_begin(MPI_File mpi_fh, void *buf, int count, 
-				MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_ordered_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_ordered_end
-int PMPI_File_read_ordered_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_ordered_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_read_shared
-int PMPI_File_read_shared(MPI_File mpi_fh, void *buf, int count, 
-			 MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_read_shared(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_seek
-int PMPI_File_seek(MPI_File mpi_fh, MPI_Offset offset, int whence)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_seek(mpi_fh, offset, whence);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_seek_shared
-int PMPI_File_seek_shared(MPI_File mpi_fh, MPI_Offset offset, int whence)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_seek_shared(mpi_fh, offset, whence);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_set_atomicity
-int PMPI_File_set_atomicity(MPI_File mpi_fh, int flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_set_atomicity(mpi_fh, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_set_info
-int PMPI_File_set_info(MPI_File mpi_fh, MPI_Info info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_set_info(mpi_fh, info);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_set_size
-int PMPI_File_set_size(MPI_File mpi_fh, MPI_Offset size)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_set_size(mpi_fh, size);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_set_view
-int PMPI_File_set_view(MPI_File mpi_fh, MPI_Offset disp, MPI_Datatype etype,
-		      MPI_Datatype filetype, char *datarep, MPI_Info info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_set_view(mpi_fh, disp, etype, filetype, datarep, info);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write
-int PMPI_File_write(MPI_File mpi_fh, void *buf, int count, 
-                   MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_all
-int PMPI_File_write_all(MPI_File mpi_fh, void *buf, int count, 
-                       MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_all(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_all_begin
-int PMPI_File_write_all_begin(MPI_File mpi_fh, void *buf, int count, 
-			     MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_all_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_all_end
-int PMPI_File_write_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_at
-int PMPI_File_write_at(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                      int count, MPI_Datatype datatype, 
-                      MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_at(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_at_all
-int PMPI_File_write_at_all(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-                          int count, MPI_Datatype datatype, 
-                          MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_at_all(mpi_fh, offset, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_ordered
-int PMPI_File_write_ordered(MPI_File mpi_fh, void *buf, int count, 
-			   MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_ordered(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_ordered_begin
-int PMPI_File_write_ordered_begin(MPI_File mpi_fh, void *buf, int count, 
-				 MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_ordered_begin(mpi_fh, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_ordered_end
-int PMPI_File_write_ordered_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_ordered_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_shared
-int PMPI_File_write_shared(MPI_File mpi_fh, void *buf, int count, 
-                          MPI_Datatype datatype, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_shared(mpi_fh, buf, count, datatype, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_at_all_begin
-int PMPI_File_write_at_all_begin(MPI_File mpi_fh, MPI_Offset offset, void *buf,
-				int count, MPI_Datatype datatype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_at_all_begin(mpi_fh, offset, buf, count, datatype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_File_write_at_all_end
-int PMPI_File_write_at_all_end(MPI_File mpi_fh, void *buf, MPI_Status *status)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_File_write_at_all_end(mpi_fh, buf, status);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_create
-int PMPI_Info_create(MPI_Info *info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_create(info);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_delete
-int PMPI_Info_delete(MPI_Info info, char *key)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_delete(info, key);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_dup
-int PMPI_Info_dup(MPI_Info info, MPI_Info *newinfo)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_dup(info, newinfo);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_free
-int PMPI_Info_free(MPI_Info *info)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_free(info);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_get
-int PMPI_Info_get(MPI_Info info, char *key, int valuelen, char *value, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_get(info, key, valuelen, value, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_get_nkeys
-int PMPI_Info_get_nkeys(MPI_Info info, int *nkeys)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_get_nkeys(info, nkeys);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_get_nthkey
-int PMPI_Info_get_nthkey(MPI_Info info, int n, char *key)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_get_nthkey(info, n, key);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_get_valuelen
-int PMPI_Info_get_valuelen(MPI_Info info, char *key, int *valuelen, int *flag)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_get_valuelen(info, key, valuelen, flag);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Info_set
-int PMPI_Info_set(MPI_Info info, char *key, char *value)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Info_set(info, key, value);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Close_port
-int PMPI_Close_port(char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Close_port(port_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_accept
-int PMPI_Comm_accept(char *port_name, MPI_Info info, int root, MPI_Comm comm, 
-                    MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_accept(port_name, info, root, comm, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_connect
-int PMPI_Comm_connect(char *port_name, MPI_Info info, int root, MPI_Comm comm, 
-                     MPI_Comm *newcomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_connect(port_name, info, root, comm, newcomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_disconnect
-int PMPI_Comm_disconnect(MPI_Comm * comm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_disconnect(comm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_get_parent
-int PMPI_Comm_get_parent(MPI_Comm *parent)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_get_parent(parent);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_join
-int PMPI_Comm_join(int fd, MPI_Comm *intercomm)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_join(fd, intercomm);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_spawn
-int PMPI_Comm_spawn(char *command, char *argv[], int maxprocs, MPI_Info info, 
-		   int root, MPI_Comm comm, MPI_Comm *intercomm,
-		   int array_of_errcodes[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_spawn(command, argv, maxprocs, info, root, comm, intercomm, array_of_errcodes);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Comm_spawn_multiple
-int PMPI_Comm_spawn_multiple(int count, char *array_of_commands[], char* *array_of_argv[], int array_of_maxprocs[], MPI_Info array_of_info[], int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, root, comm, intercomm, array_of_errcodes);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Lookup_name
-int PMPI_Lookup_name(char *service_name, MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Lookup_name(service_name, info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Open_port
-int PMPI_Open_port(MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Open_port(info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Publish_name
-int PMPI_Publish_name(char *service_name, MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Publish_name(service_name, info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Unpublish_name
-int PMPI_Unpublish_name(char *service_name, MPI_Info info, char *port_name)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Unpublish_name(service_name, info, port_name);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cartdim_get
-int PMPI_Cartdim_get(MPI_Comm comm, int *ndims)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cartdim_get(comm, ndims);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_coords
-int PMPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_coords(comm, rank, maxdims, coords);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_create
-int PMPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, 
-		    int reorder, MPI_Comm *comm_cart)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_create(comm_old, ndims, dims, periods, reorder, comm_cart);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_get
-int PMPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, 
-                 int *coords)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_get(comm, maxdims, dims, periods, coords);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_map
-int PMPI_Cart_map(MPI_Comm comm_old, int ndims, int *dims, int *periods, 
-		 int *newrank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_map(comm_old, ndims, dims, periods, newrank);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_rank
-int PMPI_Cart_rank(MPI_Comm comm, int *coords, int *rank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_rank(comm, coords, rank);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_shift
-int PMPI_Cart_shift(MPI_Comm comm, int direction, int displ, int *source, 
-		   int *dest)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_shift(comm, direction, displ, source, dest);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Cart_sub
-int PMPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *comm_new)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Cart_sub(comm, remain_dims, comm_new);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Dims_create
-int PMPI_Dims_create(int nnodes, int ndims, int *dims)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Dims_create(nnodes, ndims, dims);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Graph_create
-int PMPI_Graph_create(MPI_Comm comm_old, int nnodes, int *index, int *edges, 
-		     int reorder, MPI_Comm *comm_graph)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Graph_create(comm_old, nnodes, index, edges, reorder, comm_graph);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Dist_graph_create
-int PMPI_Dist_graph_create(MPI_Comm comm_old, int n, int sources[],
-                          int degrees[], int destinations[], int weights[],
-                          MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Dist_graph_create(comm_old, n, sources, degrees, destinations, weights, info, reorder, comm_dist_graph);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Dist_graph_create_adjacent
-int PMPI_Dist_graph_create_adjacent(MPI_Comm comm_old,
-                                   int indegree, int sources[], int sourceweights[],
-                                   int outdegree, int destinations[], int destweights[],
-                                   MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Dist_graph_create_adjacent(comm_old, indegree, sources, sourceweights, outdegree, destinations, destweights, info, reorder, comm_dist_graph);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Graphdims_get
-int PMPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Graphdims_get(comm, nnodes, nedges);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Graph_neighbors_count
-int PMPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Graph_neighbors_count(comm, rank, nneighbors);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Graph_get
-int PMPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, 
-                  int *index, int *edges)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Graph_get(comm, maxindex, maxedges, index, edges);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Graph_map
-int PMPI_Graph_map(MPI_Comm comm_old, int nnodes, int *index, int *edges,
-                  int *newrank)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Graph_map(comm_old, nnodes, index, edges, newrank);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Graph_neighbors
-int PMPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, 
-			int *neighbors)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Graph_neighbors(comm, rank, maxneighbors, neighbors);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Dist_graph_neighbors
-int PMPI_Dist_graph_neighbors(MPI_Comm comm,
-                             int maxindegree, int sources[], int sourceweights[],
-                             int maxoutdegree, int destinations[], int destweights[])
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Dist_graph_neighbors(comm, maxindegree, sources, sourceweights, maxoutdegree, destinations, destweights);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Dist_graph_neighbors_count
-int PMPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Dist_graph_neighbors_count(comm, indegree, outdegree, weighted);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Topo_test
-int PMPI_Topo_test(MPI_Comm comm, int *topo_type)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Topo_test(comm, topo_type);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Wtime
-double PMPI_Wtime()
-{
-    /*MPICH_CHECK_INIT_VOID(PMPI_Wtime);*/ /* No checking for performance */
-    return fn.PMPI_Wtime();
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Wtick
-double PMPI_Wtick()
-{
-    /*MPICH_CHECK_INIT_VOID(PMPI_Wtick);*/ /* No checking for performance */
-    return fn.PMPI_Wtick();
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_f90_integer
-int PMPI_Type_create_f90_integer(int r, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_f90_integer(r, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_f90_real
-int PMPI_Type_create_f90_real(int p, int r, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_f90_real(p, r, newtype);
-}
-
-#undef FCNAME
-#define FCNAME PMPI_Type_create_f90_complex
-int PMPI_Type_create_f90_complex(int p, int r, MPI_Datatype *newtype)
-{
-    MPICH_CHECK_INIT(FCNAME);
-    return fn.PMPI_Type_create_f90_complex(p, r, newtype);
-}
diff --git a/src/util/wrappers/mpiu_sock_wrappers.h b/src/util/wrappers/mpiu_sock_wrappers.h
index f8ce7fe..ac08af0 100644
--- a/src/util/wrappers/mpiu_sock_wrappers.h
+++ b/src/util/wrappers/mpiu_sock_wrappers.h
@@ -24,14 +24,6 @@
 #include "mpimem.h"
 #include "mpidbg.h"
 #include "mpiutil.h"
-#ifdef HAVE_EXECUTIVE_PE
-    #include "mpiu_ex.h"
-#endif
-#ifdef USE_NT_SOCK
-    #ifdef HAVE_EXECUTIVE_PE
-    #include <mswsock.h>
-    #endif
-#endif
 
 #ifdef USE_NT_SOCK
 
@@ -42,9 +34,6 @@
 
 #   define MPIU_SOCKW_SOCKFD_INVALID    INVALID_SOCKET
 #   define MPIU_SOCKW_EINTR WSAEINTR
-#   ifdef HAVE_EXECUTIVE_PE
-    static const GUID MPIU_SOCKW_GUID_CONNECTEX = WSAID_CONNECTEX;
-#   endif
 
 #   undef FUNCNAME
 #   define FUNCNAME MPIU_SOCKW_Inet_addr
@@ -217,35 +206,6 @@ fn_fail:
         )                                                           \
     )
 
-#ifdef HAVE_EXECUTIVE_PE /* Have Executive Progress engine*/
-#   undef FUNCNAME
-#   define FUNCNAME MPIU_SOCKW_Accept_ex
-#   undef FCNAME
-#   define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SOCKW_Accept_ex(MPIU_SOCKW_Sockfd_t sock,
-    void *addr, int addr_len, MPIU_SOCKW_Sockfd_t *new_sock_ptr,
-    MPIU_EXOVERLAPPED *ov, int *nb_ptr)
-{
-    int mpi_errno = MPI_SUCCESS;
-    int err;
-    /* See MSDN docs regarding size of the buffer to AcceptEx() call */
-    MPIU_Assert(addr_len >= 2 * sizeof(struct sockaddr_in)+ 32);
-
-    /* FIXME: Try receiving data with AcceptEx() call to improve perf */
-    if( !AcceptEx(sock, *new_sock_ptr, addr, 0, addr_len/2, addr_len/2,
-        (LPDWORD )nb_ptr, &(ov->ov)) ){
-        err = MPIU_OSW_Get_errno();
-		MPIR_ERR_CHKANDJUMP2((err != ERROR_IO_PENDING), mpi_errno,
-			MPI_ERR_OTHER, "**sock_accept", "**sock_accept %s %d",
-			MPIU_OSW_Strerror(err), err);
-    }
- fn_exit:
-    return mpi_errno;
- fn_fail:
-    goto fn_exit;
-}            
-#endif
-
 #   undef FUNCNAME
 #   define FUNCNAME MPIU_SOCKW_Connect
 #   undef FCNAME
@@ -273,54 +233,6 @@ fn_fail:
     goto fn_exit;
 }
 
-#ifdef HAVE_EXECUTIVE_PE
-#   undef FUNCNAME
-#   define FUNCNAME MPIU_SOCKW_Connect_ex
-#   undef FCNAME
-#   define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SOCKW_Connect_ex(
-    MPIU_SOCKW_Sockfd_t sockfd, struct sockaddr_in *addr, 
-    int addr_len, MPIU_EXOVERLAPPED *ov)
-{
-    int mpi_errno = MPI_SUCCESS, err;
-    int nb;
-    LPFN_CONNECTEX pfn_ConnectEx;
-
-    /*
-     * Query the entry point every time since different providers
-     * have different entry points
-     */
-    err = WSAIoctl(
-                 sockfd,
-                 SIO_GET_EXTENSION_FUNCTION_POINTER,
-                 (LPVOID)&MPIU_SOCKW_GUID_CONNECTEX,
-                 sizeof(MPIU_SOCKW_GUID_CONNECTEX),
-                 (LPVOID)&pfn_ConnectEx,
-                 sizeof(pfn_ConnectEx),
-                 (LPDWORD )&nb,
-                 NULL,
-                 NULL
-                 );
-
-    if(err == SOCKET_ERROR){
-        err = MPIU_OSW_Get_errno();
-        MPIR_ERR_SETANDJUMP2(mpi_errno, MPI_ERR_OTHER, "**fail",
-            "**fail %s %d", MPIU_OSW_Strerror(err), err);
-    }
-
-    if(!pfn_ConnectEx(sockfd, (struct sockaddr *)addr, addr_len, NULL, 0, (LPDWORD )&nb, &(ov->ov))){
-        err = MPIU_OSW_Get_errno();
-		MPIR_ERR_CHKANDJUMP2((err != ERROR_IO_PENDING), mpi_errno,
-			MPI_ERR_OTHER, "**sock_connect", "**sock_connect %s %d",
-			MPIU_OSW_Strerror(err), err);
-    }
-fn_exit:
-    return mpi_errno;
-fn_fail:
-    goto fn_exit;
-}
-#endif
-
 #   undef FUNCNAME
 #   define FUNCNAME MPIU_SOCKW_Read
 #   undef FCNAME
@@ -370,40 +282,6 @@ fn_fail:
     goto fn_exit;
 }
 
-#ifdef HAVE_EXECUTIVE_PE /* Have Executive Progress engine*/
-#   undef FUNCNAME
-#   define FUNCNAME MPIU_SOCKW_Readv_ex
-#   undef FCNAME
-#   define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SOCKW_Readv_ex(MPIU_SOCKW_Sockfd_t sock,
-    MPL_IOV *iov, int iov_cnt, int *nb_rd_ptr, MPIU_EXOVERLAPPED *ov)
-{
-    DWORD flags = 0;
-    int err;
-    int mpi_errno = MPI_SUCCESS;
-
-    memset(MPIU_EX_GET_OVERLAPPED_PTR(ov), 0x0, sizeof(OVERLAPPED));
-    if(WSARecv(sock, iov, iov_cnt, (LPDWORD )nb_rd_ptr, &flags, MPIU_EX_GET_OVERLAPPED_PTR(ov), NULL)
-        == SOCKET_ERROR){
-        err = MPIU_OSW_Get_errno();
-        MPIR_ERR_CHKANDJUMP2(!( (err == WSAEWOULDBLOCK) ||
-            (err == WSA_IO_PENDING) || (err == WSAEINTR) ), mpi_errno,
-            MPI_ERR_OTHER, "**sock_read", "**sock_read %s %d",
-            MPIU_OSW_Strerror(err), err);
-
-        if(nb_rd_ptr){
-            *nb_rd_ptr = -1;
-        }
-    }
-
-fn_exit:
-    return mpi_errno;
-fn_fail:
-    goto fn_exit;
-}
-#endif /* HAVE_EXECUTIVE_PE */
-
-
 #   undef FUNCNAME
 #   define FUNCNAME MPIU_SOCKW_Write
 #   undef FCNAME
@@ -445,38 +323,6 @@ fn_fail:
         )                                                           \
     )
 
-#ifdef HAVE_EXECUTIVE_PE /* Have Executive Progress engine*/
-#   undef FUNCNAME
-#   define FUNCNAME MPIU_SOCKW_Writev_ex
-#   undef FCNAME
-#   define FCNAME MPL_QUOTE(FUNCNAME)
-static inline int MPIU_SOCKW_Writev_ex(MPIU_SOCKW_Sockfd_t sock,
-    MPL_IOV *iov, int iov_cnt, int *nb_wr_ptr, MPIU_EXOVERLAPPED *ov)
-{
-    int err;
-    int mpi_errno = MPI_SUCCESS;
-
-    memset(MPIU_EX_GET_OVERLAPPED_PTR(ov), 0x0, sizeof(OVERLAPPED));
-    if(WSASend(sock, iov, iov_cnt, (LPDWORD )nb_wr_ptr, 0x0, MPIU_EX_GET_OVERLAPPED_PTR(ov), NULL)
-        == SOCKET_ERROR){
-        err = MPIU_OSW_Get_errno();
-        MPIR_ERR_CHKANDJUMP2(!( (err == WSAEWOULDBLOCK) ||
-            (err == WSA_IO_PENDING) || (err == WSAEINTR) ), mpi_errno,
-            MPI_ERR_OTHER, "**sock_write", "**sock_write %s %d",
-            MPIU_OSW_Strerror(err), err);
-
-        if(nb_wr_ptr){
-            *nb_wr_ptr = -1;
-        }
-    }
-
-fn_exit:
-    return mpi_errno;
-fn_fail:
-    goto fn_exit;
-}
-#endif /* HAVE_EXECUTIVE_PE */
-
 #   undef FUNCNAME
 #   define FUNCNAME MPIU_SOCKW_Sock_cntrl_nb
 #   undef FCNAME

-----------------------------------------------------------------------

Summary of changes:
 src/util/Makefile.mk                   |    4 -
 src/util/ex/Makefile.sm                |    6 -
 src/util/ex/ex.c                       |  332 --
 src/util/ex/mpiu_ex.h                  |  527 ---
 src/util/multichannel/Makefile.sm      |    1 -
 src/util/multichannel/mpi.c            | 7285 --------------------------------
 src/util/wrappers/mpiu_sock_wrappers.h |  154 -
 7 files changed, 0 insertions(+), 8309 deletions(-)
 delete mode 100644 src/util/ex/Makefile.sm
 delete mode 100644 src/util/ex/ex.c
 delete mode 100644 src/util/ex/mpiu_ex.h
 delete mode 100644 src/util/multichannel/Makefile.sm
 delete mode 100644 src/util/multichannel/mpi.c


hooks/post-receive
-- 
MPICH primary repository


More information about the commits mailing list