286
287
288
289
290
291
292 CHARACTER*1 TYPE
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314 LOGICAL LSAME
316
317
318 include 'mpif.h'
319
320
321 COMMON /btmpi/ btcomm, ierr
322 INTEGER BTCOMM, IERR
323
324
325 INTEGER LENGTH
326 LOGICAL INIT
327 DATA init /.false./
328
329
330
331
332
333
334 IF (.NOT.init) THEN
335 CALL mpi_initialized(init, ierr)
336 IF (.NOT.init) CALL mpi_init(ierr)
337 IF (ierr.NE.0)
CALL btmpierr(
"mpi_init", ierr)
338 init = .true.
339 END IF
340
341 IF(
lsame(
TYPE,
'I') ) THEN
342 CALL mpi_type_size( mpi_integer, length, ierr )
343 IF (ierr.NE.0)
CALL btmpierr(
"MPI_TYPE_SIZE", ierr)
344 ELSE IF(
lsame(
TYPE,
'S') ) THEN
345 CALL mpi_type_size( mpi_real, length, ierr )
346 IF (ierr.NE.0)
CALL btmpierr(
"MPI_TYPE_SIZE", ierr)
347 ELSE IF(
lsame(
TYPE,
'D') ) THEN
348 CALL mpi_type_size( mpi_double_precision, length, ierr )
349 IF (ierr.NE.0)
CALL btmpierr(
"MPI_TYPE_SIZE", ierr)
350 ELSE IF(
lsame(
TYPE,
'C') ) THEN
351 CALL mpi_type_size( mpi_complex, length, ierr )
352 IF (ierr.NE.0)
CALL btmpierr(
"MPI_TYPE_SIZE", ierr)
353 ELSE IF(
lsame(
TYPE,
'Z') ) THEN
354 CALL mpi_type_size( mpi_double_complex, length, ierr )
355 IF (ierr.NE.0)
CALL btmpierr(
"MPI_TYPE_SIZE", ierr)
356 END IF
358
359 RETURN
subroutine btmpierr(rout, ierr0)
integer function ibtsizeof(type)