1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
integer function GANDRV(hmodul,nentry,hentry,ientry,jentry,kentry)
!
!-----------------------------------------------------------------------
!
!Purpose:
! standard utility operator driver for Ganlib.
!
!Copyright:
! Copyright (C) 2002 Ecole Polytechnique de Montreal
! This library is free software; you can redistribute it and/or
! modify it under the terms of the GNU Lesser General Public
! License as published by the Free Software Foundation; either
! version 2.1 of the License, or (at your option) any later version
!
!Author(s): A. Hebert
!
!Parameters: input/output
! hmodul name of the operator.
! nentry number of LCM objects or files used by the operator.
! hentry name of each LCM object or file.
! ientry type of each LCM object or file:
! =1 LCM memory object; =2 XSM file; =3 sequential binary file;
! =4 sequential ascii file; =6 for HDF5 file.
! jentry access of each LCM object or file:
! =0 the LCM object or file is created;
! =1 the LCM object or file is open for modifications;
! =2 the LCM object or file is open in read-only mode.
! kentry LCM object address or file unit number.
!
!Parameters: output
! kdrstd completion flag (=0: operator hmodul exists; =1: does not exists).
!
!-----------------------------------------------------------------------
!
use, intrinsic :: iso_c_binding
!----
! subroutine arguments
!----
integer nentry
character hmodul*(*),hentry(nentry)*12
integer ientry(nentry),jentry(nentry)
type(c_ptr) kentry(nentry)
!
real tbeg,tend
double precision dmemb,dmemd
!
GANDRV=0
call KDRCPU(tbeg)
call KDRMEM(dmemb)
if(hmodul == 'EQU:' )then
! standard equality module.
call DRVEQU(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'GREP:') then
! standard grep module.
call DRVGRP(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'UTL:') then
! standard LCM/XSM utility module.
call DRVUTL(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'ADD:') then
! standard addition module.
call DRVADD(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'MPX:') then
! standard multiplication module.
call DRVMPX(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'STAT:') then
! standard compare module.
call DRVSTA(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'BACKUP:') then
! standard backup module.
call DRVBAC(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'RECOVER:') then
! standard recovery module.
call DRVREC(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'FIND0:') then
! standard module to find zero of a continuous function.
call DRV000(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'MSTR:') then
! manage user-defined structures.
call MSTR(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'MODUL1:') then
! user-defined module.
call DRVMO1(nentry,hentry,ientry,jentry,kentry)
else if(hmodul == 'ABORT:') then
! requested abort.
call XABORT('GANDRV: requested abort.')
#if defined(MPI)
elseif(hmodul == 'DRVMPI:') then
! initialize MPI.
call DRVMPI(nentry,hentry,ientry,jentry,kentry)
elseif(hmodul == 'SNDMPI:') then
! export LCM or XSM using mpi.
call SNDMPI(nentry,hentry,ientry,jentry,kentry)
#endif /* defined(MPI) */
#if defined(HDF5_LIB)
elseif(hmodul == 'HUTL:') then
! HDF5 utility module.
call DRVUH5(nentry,hentry,ientry,jentry,kentry)
#endif /* defined(HDF5_LIB) */
else
GANDRV=1
endif
call KDRCPU(tend)
call KDRMEM(dmemd)
write(6,5000) hmodul,(tend-tbeg),real(dmemd-dmemb)
return
!
5000 format('-->>module ',a12,': time spent=',f13.3,' memory usage=',1p,e10.3)
end function GANDRV
|