47
48
49
50 USE timer_mod
52 USE intbufdef_mod
53 use check_sorting_criteria_mod , only : check_sorting_criteria
54
55
56
57#include "implicit_f.inc"
58#include "comlock.inc"
59
60
61
62#include "com04_c.inc"
63#include "com08_c.inc"
64#include "param_c.inc"
65#include "task_c.inc"
66#include "timeri_c.inc"
67 COMMON /i21mainc/result21,i_memg
68 INTEGER RESULT21,I_MEMG
69
70
71
72 TYPE(TIMER_) :: TIMERS
73 integer, intent(in) :: nspmd
74 INTEGER NIN ,ITASK, RETRI, NUM_IMP ,IND_IMP(*),
75 . IPARI(NPARI,NINTER),
76 . WEIGHT(*), MWAG(*)
77 TYPE(INTSTAMP_DATA) INTSTAMP
78
80 . x(*)
81
82 TYPE(INTBUF_STRUCT_) INTBUF_TAB
83
84
85
86 INTEGER J17_T,
87 . I, IP0, IP1, IP2, IP21, K11_T, I_SK_OLD,
88 . ADD1, NB_N_B, INIT, NOINT, , MULTIMP, IGAP, I_STOK,
89 . INTTH , ADXLOC
90 INTEGER
91 . NRTM_T,ESHIFT,ILD, NCONTACT, NRTM_L,
92 . I_MEM,CAND_N_OLD, IROT
93
95 . gap,maxbox,minbox,tzinf,
96 . xmax,
ymax, zmax, xmin, ymin, zmin, gapmin, gapmax,
97 . dd(3)
98 INTEGER :: NRTM,NSN,NTY,NMN
99 logical :: need_computation
100
101
102
103 call check_sorting_criteria( need_computation,nin,npari,nspmd,
104 . itask,ipari(1,nin),tt,intbuf_tab )
105 if( .not.need_computation ) return
106
107 i_mem = 0
108 i_memg = 0
109
110 nrtm =ipari(4,nin)
111 nsn =ipari(5,nin)
112 nty =ipari(7,nin)
113 noint =ipari(15,nin)
114 nmn =ipari(8,nin)
115 intth = ipari(47,nin)
116
117 inacti =ipari(22,nin)
118 multimp=ipari(23,nin)
119
120 ncontact=multimp*nsn
121
122 gap =intbuf_tab%VARIABLES(2)
123 gapmin=intbuf_tab%VARIABLES(13)
124 gapmax=intbuf_tab%VARIABLES(16)
125
126 IF(nsn > 0) THEN
127 adxloc = 1+3*(nsn+2)
128 ELSE
129 adxloc = 1
130 ENDIF
131
132
133
134 retri=1
135
136 dd(1)=intstamp%D(1)
137 dd(2)=intstamp%D(2)
138 dd(3)=intstamp%D(3)
139
140 irot=intstamp%IROT
142 1 x ,intbuf_tab%NSV,nsn ,itask ,intbuf_tab%XSAV,
143 2 dd ,irot ,intstamp%ROT,intstamp%BRACKET)
144
145
146 maxbox = intbuf_tab%VARIABLES(9)
147 minbox = intbuf_tab%VARIABLES(12)
148 tzinf = intbuf_tab%VARIABLES(8)
149
150
151 i_sk_old=0
152 intbuf_tab%I_STOK(1)=zero
153
154 result21 = 0
155
156 cand_n_old = intbuf_tab%I_STOK(1)
157 40 CONTINUE
159
160 inacti = ipari(22,nin)
161
162 nrtm_t=nrtm/nthread
163
164 eshift = itask*nrtm_t
165
166
167 k11_t = 1+4*itask*nrtm_t
168
169 j17_t = 1+itask*nrtm_t
170 IF(itask==nthread-1)nrtm_t=nrtm-(nthread-1)*(nrtm/nthread)
171 init = 1
172 ild = 0
173 50 CONTINUE
174
175 IF (imonm > 0)
CALL startime(timers,30)
176 IF(nrtm_t/=0) THEN
178 1 x ,intbuf_tab%IRECTM(k11_t),intbuf_tab%NSV ,ipari(22,nin),
179 2 nrtm_t ,nsn ,intbuf_tab%CAND_E ,intbuf_tab%CAND_N ,gap,
180 3 noint ,intbuf_tab%I_STOK(1) ,tzinf ,maxbox ,minbox ,
181 4 ncontact ,xmin ,xmax ,ymin ,
182 5
ymax ,zmin ,zmax ,nb_n_b ,eshift ,
183 6 ild ,init ,weight ,intbuf_tab%STFNS ,nin ,
184 7 intbuf_tab%STF(j17_t) ,ipari(21,nin),intbuf_tab%GAP_S,gapmin,gapmax ,
185 8 ipari(39,nin),num_imp ,intbuf_tab%XM0 ,intbuf_tab%NOD_NORMAL ,
186 9 intbuf_tab%VARIABLES(23) ,intbuf_tab%VARIABLES(22) ,intbuf_tab%VARIABLES(27) ,
187 . intbuf_tab%VARIABLES(28) ,intbuf_tab%VARIABLES(29) ,
188 a nrtm_l ,intbuf_tab%XSAV(adxloc),i_mem,intbuf_tab%VARIABLES(32) ,
189 . nmn ,
190 b intth ,intbuf_tab%MNDD ,intbuf_tab%MSR_L ,itask,intbuf_tab%IRECTM,
191 c ipari(48,nin) ,intbuf_tab%VARIABLES(46))
192
193 ENDIF
194
195
196 IF (i_mem == 2)THEN
197#include "lockon.inc"
198 i_memg = i_mem
199#include "lockoff.inc"
200 ENDIF
201
203
204 IF(i_memg /=0)THEN
205
206 multimp = ipari(23,nin) + 4
208
209 i_memg = 0
210 i_mem = 0
211 intbuf_tab%I_STOK(1) =cand_n_old
212 multimp=ipari(23,nin)
213 ncontact=multimp*nsn
214 GOTO 40
215 ENDIF
216
218 1 intbuf_tab%CAND_E, intbuf_tab%I_STOK(1), ipari(48,nin) , nin , nmn,
219 2 intth, intbuf_tab%MNDD, intbuf_tab%MSR_L , intbuf_tab%IRECTM )
220
221 IF (imonm > 0)
CALL stoptime(timers,30)
222
223#include "lockon.inc"
224 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
225 intbuf_tab%VARIABLES(12) =
min(minbox,intbuf_tab%VARIABLES(12))
226 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
227
228 intbuf_tab%VARIABLES(5) = ep30
229 result21 = result21 + ild
230#include "lockoff.inc"
231
232
234 IF (result21/=0) THEN
236 IF (itask==0) THEN
237 intbuf_tab%I_STOK(1) = i_sk_old
238 result21 = 0
239 ENDIF
241 ild = 0
242 init = 0
243 maxbox = intbuf_tab%VARIABLES(9)
244 minbox = intbuf_tab%VARIABLES(12)
245 tzinf = intbuf_tab%VARIABLES(8)
246
248 GOTO 50
249 ENDIF
250
251
252
253 IF(itask==0)THEN
254 ip0 = 1
255 ip1 = ip0 + nsn
256
257 i_stok = intbuf_tab%I_STOK(1)
259 1 nsn ,i_stok ,intbuf_tab%CAND_N,intbuf_tab%CAND_E,
260 . intbuf_tab%PENIS,
261 2 intbuf_tab%FTSAVX,intbuf_tab%FTSAVY,intbuf_tab%FTSAVZ,mwag(ip0) ,
262 . intbuf_tab%IFPEN,
263 3 inacti)
264 ENDIF
265
266
267
268 RETURN
subroutine i21buce(x, irect, nsv, inacti, nrtm, nsn, cand_e, cand_n, gap, noint, ii_stok, tzinf, maxbox, minbox, ncontact, xmin, xmax, ymin, ymax, zmin, zmax, nb_n_b, eshift, ild, init, weight, stfn, nin, stf, igap, gap_s, gapmin, gapmax, icurv, num_imp, xm0, nod_normal, depth, margeref, lxm, lym, lzm, nrtm_l, xloc, i_mem, drad, nmn, intth, mndd, msr_l, itask, irectt, iform, dgapload)
subroutine i21fpen(nsn, i_stok, cand_n, cand_e, peni, ftxsav, ftysav, ftzsav, cand_tag, ifpen, inacti)
subroutine i21xsave(x, nsv, nsn, itask, xsav, dd, irot, rot, bracket)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
subroutine startime(event, itask)
subroutine stoptime(event, itask)
subroutine update_struct_int21(cand_e, ii_stok, iform, nin, nmn, intth, mndd, msr_l, irectt)
subroutine upgrade_multimp(ni, multimp_parameter, intbuf_tab)