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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
*DECK KDRDRV
INTEGER FUNCTION KDRDRV(HMODUL,NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Code dependent operator driver for DRAGON.
*
*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
* KDRDRV completion flag (=0: operator HMODUL exists; =1: does not
* exists).
*
*-----------------------------------------------------------------------
*
USE GANLIB
*----
* SUBROUTINE ARGUMENTS
*----
CHARACTER HMODUL*(*),HENTRY(NENTRY)*12
INTEGER IENTRY(NENTRY),JENTRY(NENTRY)
TYPE(C_PTR) KENTRY(NENTRY)
*----
* LOCAL VARIABLES
*----
REAL TBEG,TEND
DOUBLE PRECISION DMEMB,DMEMD
LOGICAL :: DRAMOD
*
KDRDRV=0
DRAMOD=.TRUE.
CALL KDRCPU(TBEG)
CALL KDRMEM(DMEMB)
CALL XDRCRE(HMODUL,1)
IF(HMODUL.EQ.'GEO:') THEN
CALL GEO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SYBILT:') THEN
CALL SYBILT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'EXCELT:') THEN
CALL EXCELT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'NXT:') THEN
CALL NXT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'PSP:') THEN
CALL PSP(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'TLM:') THEN
CALL TLM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'MCCGT:') THEN
CALL MCCGT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'LIB:') THEN
CALL LIB(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SHI:') THEN
CALL SHI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'MAC:') THEN
CALL MAC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'ASM:') THEN
CALL ASM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'FLU:') THEN
CALL FLU(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'EVO:') THEN
CALL EVO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'EDI:') THEN
CALL EDI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'INFO:') THEN
CALL INF(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'USS:') THEN
CALL USS(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'TONE:') THEN
CALL TONE(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'AUTO:') THEN
CALL AUTO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'VDG:') THEN
CALL VDG(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'COMPO:') THEN
CALL COMPO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SNT:') THEN
CALL SNT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'M2T:') THEN
CALL M2T(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'FMAC:') THEN
CALL FMAC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'PSOUR:') THEN
CALL PSOUR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'HEAT:') THEN
CALL HEAT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'CHAB:') THEN
CALL CHAB(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'CPO:') THEN
CALL CPO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SAP:') THEN
CALL SAP(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
#if defined(HDF5_LIB)
ELSE IF(HMODUL.EQ.'APX:') THEN
CALL APX(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'MPO:') THEN
CALL MPO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
#endif /* defined(HDF5_LIB) */
ELSE IF(HMODUL.EQ.'MC:') THEN
CALL MCT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'T:') THEN
CALL TRA(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'DMAC:') THEN
CALL DMA(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'EPC:') THEN
CALL EPC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'FMT:') THEN
CALL FMT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SPH:') THEN
CALL SPH(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'FPSPH:') THEN
CALL FPSPH(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'CFC:') THEN
CALL CFC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SENS:') THEN
CALL SEN(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'DUO:') THEN
CALL DUO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'BREF:') THEN
CALL BREF(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'S2M:') THEN
CALL S2M(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'G2S:') THEN
CALL G2S(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'G2MC:') THEN
CALL G2MC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'SALT:') THEN
CALL SALT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'MRG: ') THEN
CALL MRG(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE IF(HMODUL.EQ.'CLM: ') THEN
CALL CLM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ELSE
DRAMOD=.FALSE.
KDRDRV=KTRDRV(HMODUL,NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
ENDIF
IF(KDRDRV.EQ.0) CALL XDRCRE(HMODUL,-1)
IF(DRAMOD)THEN
CALL KDRCPU(TEND)
CALL KDRMEM(DMEMD)
WRITE(6,5000) HMODUL,(TEND-TBEG),REAL(DMEMD-DMEMB)
ENDIF
RETURN
*
5000 FORMAT('-->>MODULE ',A12,': TIME SPENT=',F13.3,' MEMORY USAGE=',
1 1P,E10.3)
END
|