forked from ESMCI/cime
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
moving fortran ncint functions to their own mod file
- Loading branch information
1 parent
b35c6bb
commit 1683f0d
Showing
1 changed file
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
#include "config.h" | ||
!> | ||
!! @file | ||
!! Initialization Routines for PIO. | ||
!! | ||
!< | ||
|
||
!> | ||
!! @defgroup PIO_ncint NetCDF Integration | ||
!! Integrate netCDF and PIO code. | ||
!! | ||
module ncint_mod | ||
use iso_c_binding | ||
!-------------- | ||
use pio_kinds | ||
!-------------- | ||
use pio_types, only : file_desc_t, iosystem_desc_t, var_desc_t, io_desc_t, & | ||
pio_iotype_netcdf, pio_iotype_pnetcdf, pio_iotype_netcdf4p, pio_iotype_netcdf4c, & | ||
pio_noerr, pio_rearr_subset, pio_rearr_opt_t | ||
!-------------- | ||
use pio_support, only : piodie, debug, debugio, debugasync, checkmpireturn | ||
use pio_nf, only : pio_set_log_level | ||
use piolib_mod, only : pio_init | ||
! | ||
|
||
#ifdef TIMING | ||
use perf_mod, only : t_startf, t_stopf ! _EXTERNAL | ||
#endif | ||
#ifndef NO_MPIMOD | ||
use mpi ! _EXTERNAL | ||
#endif | ||
implicit none | ||
private | ||
#ifdef NO_MPIMOD | ||
include 'mpif.h' ! _EXTERNAL | ||
#endif | ||
! !public member functions: | ||
|
||
public :: nf_init_intracom | ||
|
||
interface nf_init_intracom | ||
module procedure nf_init_intracom | ||
end interface nf_init_intracom | ||
|
||
contains | ||
|
||
!> | ||
!! @public | ||
!! @ingroup PIO_init | ||
!! Initialize the pio subsystem. This is a collective call. Input | ||
!! parameters are read on comp_rank=0 values on other tasks are | ||
!! ignored. This variation of PIO_init locates the IO tasks on a | ||
!! subset of the compute tasks. | ||
!! | ||
!! @param comp_rank mpi rank of each participating task, | ||
!! @param comp_comm the mpi communicator which defines the | ||
!! collective. | ||
!! @param num_iotasks the number of iotasks to define. | ||
!! @param num_aggregator the mpi aggregator count | ||
!! @param stride the stride in the mpi rank between io tasks. | ||
!! @param rearr @copydoc PIO_rearr_method | ||
!! @param iosystem a derived type which can be used in subsequent | ||
!! pio operations (defined in PIO_types). | ||
!! @param base @em optional argument can be used to offset the first | ||
!! io task - default base is task 1. | ||
!! @param rearr_opts the rearranger options. | ||
!! @author Ed Hartnett | ||
!< | ||
subroutine nf_init_intracom(comp_rank, comp_comm, num_iotasks, num_aggregator, stride, rearr, iosystem,base, rearr_opts) | ||
use pio_types, only : pio_internal_error, pio_rearr_opt_t | ||
use iso_c_binding | ||
|
||
integer(i4), intent(in) :: comp_rank | ||
integer(i4), intent(in) :: comp_comm | ||
integer(i4), intent(in) :: num_iotasks | ||
integer(i4), intent(in) :: num_aggregator | ||
integer(i4), intent(in) :: stride | ||
integer(i4), intent(in) :: rearr | ||
type (iosystem_desc_t), intent(out) :: iosystem ! io descriptor to initalize | ||
integer(i4), intent(in),optional :: base | ||
type (pio_rearr_opt_t), intent(in), optional :: rearr_opts | ||
integer :: ierr | ||
|
||
interface | ||
integer(C_INT) function nc_set_iosystem(iosystemid) & | ||
bind(C,name="nc_set_iosystem") | ||
use iso_c_binding | ||
integer(C_INT), intent(in), value :: iosystemid | ||
end function nc_set_iosystem | ||
end interface | ||
|
||
call PIO_init(comp_rank, comp_comm, num_iotasks, num_aggregator, stride, rearr, iosystem,base, rearr_opts) | ||
|
||
ierr = nc_set_iosystem(iosystem%iosysid) | ||
|
||
end subroutine nf_init_intracom | ||
|
||
end module ncint_mod |