1 subroutine read_general_data(*)
4 include "DIMENSIONS.ZSCOPT"
5 include "DIMENSIONS.FREE"
6 include "COMMON.TORSION"
7 include "COMMON.INTERACT"
8 include "COMMON.IOUNITS"
11 include "COMMON.PROTFILES"
12 include "COMMON.CHAIN"
13 include "COMMON.NAMES"
14 include "COMMON.FFIELD"
15 include "COMMON.ENEPS"
16 include "COMMON.WEIGHTS"
18 include "COMMON.CONTROL"
19 include "COMMON.ENERGIES"
20 include "COMMON.SPLITELE"
21 include "COMMON.SBRIDGE"
22 character*800 controlcard
23 integer i,j,k,ii,n_ene_found
24 integer ind,itype1,itype2,itypf,itypsc,itypp
31 call card_concat(controlcard,.true.)
32 call readi(controlcard,"N_ENE",n_ene,max_ene)
33 if (n_ene.gt.max_ene) then
34 write (iout,*) "Error: parameter out of range: N_ENE",n_ene,
38 call readi(controlcard,"NPARMSET",nparmset,1)
39 separate_parset = index(controlcard,"SEPARATE_PARSET").gt.0
40 call readi(controlcard,"IPARMPRINT",iparmprint,1)
41 write (iout,*) "PARMPRINT",iparmprint
42 if (nparmset.gt.max_parm) then
43 write (iout,*) "Error: parameter out of range: NPARMSET",
47 call readi(controlcard,"MAXIT",maxit,5000)
48 call reada(controlcard,"FIMIN",fimin,1.0d-3)
49 call readi(controlcard,"ENSEMBLES",ensembles,0)
50 hamil_rep=index(controlcard,"HAMIL_REP").gt.0
51 write (iout,*) "Number of energy parameter sets",nparmset
52 call multreadi(controlcard,"ISAMPL",isampl,nparmset,1)
53 write (iout,*) "MaxSlice",MaxSlice
54 call readi(controlcard,"NSLICE",nslice,1)
56 if (nslice.gt.MaxSlice) then
57 write (iout,*) "Error: parameter out of range: NSLICE",nslice,
61 write (iout,*) "Frequency of storing conformations",
62 & (isampl(i),i=1,nparmset)
63 write (iout,*) "Maxit",maxit," Fimin",fimin
64 call readi(controlcard,"NQ",nQ,1)
66 write (iout,*) "Error: parameter out of range: NQ",nq,
71 energy_dec=(index(controlcard,'ENERGY_DEC').gt.0)
72 if (index(controlcard,"CLASSIFY").gt.0) indpdb=1
73 call reada(controlcard,"DELTA",delta,1.0d-2)
74 call readi(controlcard,"EINICHECK",einicheck,2)
75 call reada(controlcard,"DELTRMS",deltrms,5.0d-2)
76 call reada(controlcard,"DELTRGY",deltrgy,5.0d-2)
77 call readi(controlcard,"RESCALE",rescale_mode,1)
78 check_conf=index(controlcard,"NO_CHECK_CONF").eq.0
79 call reada(controlcard,'DISTCHAINMAX',distchainmax,50.0d0)
80 call reada(controlcard,'BOXX',boxxsize,100.0d0)
81 call reada(controlcard,'BOXY',boxysize,100.0d0)
82 call reada(controlcard,'BOXZ',boxzsize,100.0d0)
83 c Cutoff range for interactions
84 call reada(controlcard,"R_CUT",r_cut,15.0d0)
85 call reada(controlcard,"LAMBDA",rlamb,0.3d0)
86 call reada(controlcard,"LIPTHICK",lipthick,0.0d0)
87 call reada(controlcard,"LIPAQBUF",lipbufthick,0.0d0)
88 if (lipthick.gt.0.0d0) then
89 bordliptop=(boxzsize+lipthick)/2.0
90 bordlipbot=bordliptop-lipthick
92 if ((bordliptop.gt.boxzsize).or.(bordlipbot.lt.0.0))
93 & write(iout,*) "WARNING WRONG SIZE OF LIPIDIC PHASE"
94 buflipbot=bordlipbot+lipbufthick
95 bufliptop=bordliptop-lipbufthick
96 if ((lipbufthick*2.0d0).gt.lipthick)
97 &write(iout,*) "WARNING WRONG SIZE OF LIP AQ BUF"
99 write(iout,*) "bordliptop=",bordliptop
100 write(iout,*) "bordlipbot=",bordlipbot
101 write(iout,*) "bufliptop=",bufliptop
102 write(iout,*) "buflipbot=",buflipbot
103 call readi(controlcard,'SYM',symetr,1)
104 write (iout,*) "DISTCHAINMAX",distchainmax
105 write (iout,*) "delta",delta
106 write (iout,*) "einicheck",einicheck
107 write (iout,*) "rescale_mode",rescale_mode
109 bxfile=index(controlcard,"BXFILE").gt.0
110 cxfile=index(controlcard,"CXFILE").gt.0
111 if (nslice .eq. 1 .and. .not.bxfile .and. .not.cxfile)
113 histfile=index(controlcard,"HISTFILE").gt.0
114 histout=index(controlcard,"HISTOUT").gt.0
115 entfile=index(controlcard,"ENTFILE").gt.0
116 zscfile=index(controlcard,"ZSCFILE").gt.0
117 with_dihed_constr = index(controlcard,"WITH_DIHED_CONSTR").gt.0
118 write (iout,*) "with_dihed_constr ",with_dihed_constr
119 with_theta_constr = index(controlcard,"WITH_THETA_CONSTR").gt.0
120 write (iout,*) "with_theta_constr ",with_theta_constr
121 call readi(controlcard,'CONSTR_DIST',constr_dist,0)
122 write (iout,*) "with_dihed_constr ",with_dihed_constr,
123 & " CONSTR_DIST",constr_dist
124 call readi(controlcard,'CONSTR_HOMOL',constr_homology,0)
125 write (iout,*) "with_homology_constr ",with_dihed_constr,
126 & " CONSTR_HOMOLOGY",constr_homology
127 read_homol_frag = index(controlcard,"READ_HOMOL_FRAG").gt.0
128 refstr = index(controlcard,'REFSTR').gt.0
129 pdbref = index(controlcard,'PDBREF').gt.0
130 dyn_ss=(index(controlcard,'DYN_SS').gt.0)
131 call readi(controlcard,'NSAXS',nsaxs,0)
132 call readi(controlcard,'SAXS_MODE',saxs_mode,0)
133 call reada(controlcard,'SCAL_RAD',scal_rad,1.0d0)
134 call reada(controlcard,'SAXS_CUTOFF',saxs_cutoff,1.0d0)
135 write (iout,*) "Number of SAXS restraints",NSAXS," SAXS_MODE",
136 & SAXS_MODE," SCAL_RAD",scal_rad,"SAXS_CUTOFF",saxs_cutoff
137 C /06/28/2013 Adasko: dyn_ss is keyword allowing to break and create bond
138 C disulfide bond. Note that in conterary to dynamics this in
139 C CONTROLCARD. The bond are read in molread_zs.F
143 c------------------------------------------------------------------------------
144 subroutine read_efree(*)
146 C Read molecular data
150 include 'DIMENSIONS.ZSCOPT'
151 include 'DIMENSIONS.COMPAR'
152 include 'DIMENSIONS.FREE'
153 include 'COMMON.IOUNITS'
154 include 'COMMON.TIME1'
155 include 'COMMON.SBRIDGE'
156 include 'COMMON.CONTROL'
157 include 'COMMON.CHAIN'
158 include 'COMMON.HEADER'
160 include 'COMMON.FREE'
161 character*320 controlcard,ucase
162 integer iparm,ib,i,j,npars
174 call card_concat(controlcard,.true.)
175 call readi(controlcard,'NT',nT_h(iparm),1)
176 write (iout,*) "iparm",iparm," nt",nT_h(iparm)
178 if (nT_h(iparm).gt.MaxT_h) then
179 write (iout,*) "Error: parameter out of range: NT",nT_h(iparm),
183 replica(iparm)=index(controlcard,"REPLICA").gt.0
184 umbrella(iparm)=index(controlcard,"UMBRELLA").gt.0
185 read_iset(iparm)=index(controlcard,"READ_ISET").gt.0
186 write (iout,*) "nQ",nQ," nT",nT_h(iparm)," replica ",
187 & replica(iparm)," umbrella ",umbrella(iparm),
188 & " read_iset",read_iset(iparm)
191 call card_concat(controlcard,.true.)
192 call readi(controlcard,'NR',nR(ib,iparm),1)
193 if (umbrella(iparm)) then
196 nRR(ib,iparm)=nR(ib,iparm)
198 if (nR(ib,iparm).gt.MaxR) then
199 write (iout,*) "Error: parameter out of range: NR",
203 call reada(controlcard,'TEMP',beta_h(ib,iparm),298.0d0)
204 beta_h(ib,iparm)=1.0d0/(beta_h(ib,iparm)*1.987D-3)
205 call multreada(controlcard,'FI',f(1,ib,iparm),nR(ib,iparm),
208 call card_concat(controlcard,.true.)
209 call multreada(controlcard,'KH',KH(1,i,ib,iparm),nQ,
211 call multreada(controlcard,'Q0',Q0(1,i,ib,iparm),nQ,
216 write (iout,*) "ib",ib," beta_h",
217 & 1.0d0/(0.001987*beta_h(ib,iparm))
218 write (iout,*) "nR",nR(ib,iparm)
219 write (iout,*) "fi",(f(i,ib,iparm),i=1,nR(ib,iparm))
221 write (iout,*) "i",i," Kh",(Kh(j,i,ib,iparm),j=1,nQ),
222 & "q0",(q0(j,i,ib,iparm),j=1,nQ)
227 write (iout,*) "HOMOL_NSET",homol_nset
235 nR(ib,iparm)=nR(ib,1)
236 if (umbrella(iparm)) then
239 nRR(ib,iparm)=nR(ib,1)
241 beta_h(ib,iparm)=beta_h(ib,1)
243 f(i,ib,iparm)=f(i,ib,1)
245 KH(j,i,ib,iparm)=KH(j,i,ib,1)
246 Q0(j,i,ib,iparm)=Q0(j,i,ib,1)
249 replica(iparm)=replica(1)
250 umbrella(iparm)=umbrella(1)
251 read_iset(iparm)=read_iset(1)
259 c-----------------------------------------------------------------------------
260 subroutine read_protein_data(*)
263 include "DIMENSIONS.ZSCOPT"
264 include "DIMENSIONS.FREE"
267 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
270 include "COMMON.CHAIN"
271 include "COMMON.IOUNITS"
272 include "COMMON.PROT"
273 include "COMMON.PROTFILES"
274 include "COMMON.NAMES"
275 include "COMMON.FREE"
276 include "COMMON.OBCINKA"
278 character*16000 controlcard
279 integer i,ii,ib,iR,iparm,ilen,iroof,nthr,npars
289 C Read names of files with conformation data.
290 if (replica(iparm)) then
296 do ii=1,nRR(ib,iparm)
297 write (iout,*) "Parameter set",iparm," temperature",ib,
300 call card_concat(controlcard,.true.)
301 write (iout,*) controlcard(:ilen(controlcard))
302 call readi(controlcard,"NFILE_BIN",nfile_bin(ii,ib,iparm),0)
303 call readi(controlcard,"NFILE_ASC",nfile_asc(ii,ib,iparm),0)
304 call readi(controlcard,"NFILE_CX",nfile_cx(ii,ib,iparm),0)
305 call readi(controlcard,"REC_START",rec_start(ii,ib,iparm),1)
306 call readi(controlcard,"REC_END",rec_end(ii,ib,iparm),
307 & maxstr*isampl(iparm)+rec_start(ii,ib,iparm)-1)
308 call reada(controlcard,"TIME_START",
309 & time_start_collect(ii,ib,iparm),0.0d0)
310 call reada(controlcard,"TIME_END",time_end_collect(ii,ib,iparm),
312 write (iout,*) "rec_start",rec_start(ii,ib,iparm),
313 & " rec_end",rec_end(ii,ib,iparm)
314 write (iout,*) "time_start",time_start_collect(ii,ib,iparm),
315 & " time_end",time_end_collect(ii,ib,iparm)
317 if (replica(iparm)) then
318 call readi(controlcard,"TOTRAJ",totraj(ii,iparm),1)
319 write (iout,*) "Number of trajectories",totraj(ii,iparm)
322 if (nfile_bin(ii,ib,iparm).lt.2
323 & .and. nfile_asc(ii,ib,iparm).eq.0
324 & .and. nfile_cx(ii,ib,iparm).eq.0) then
325 write (iout,*) "Error - no action specified!"
328 if (nfile_bin(ii,ib,iparm).gt.0) then
329 call card_concat(controlcard,.false.)
330 call split_string(controlcard,protfiles(1,1,ii,ib,iparm),
331 & maxfile_prot,nfile_bin(ii,ib,iparm))
333 write(iout,*)"nfile_bin",nfile_bin(ii,ib,iparm)
334 write(iout,*) (protfiles(i,1,ii,ib,iparm),
335 & i=1,nfile_bin(ii,ib,iparm))
338 if (nfile_asc(ii,ib,iparm).gt.0) then
339 call card_concat(controlcard,.false.)
340 call split_string(controlcard,protfiles(1,2,ii,ib,iparm),
341 & maxfile_prot,nfile_asc(ii,ib,iparm))
343 write(iout,*) "nfile_asc(ii,ib,iparm)",nfile_asc(ii,ib,iparm)
344 write(iout,*) (protfiles(i,2,ii,ib,iparm),
345 & i=1,nfile_asc(ii,ib,iparm))
347 else if (nfile_cx(ii,ib,iparm).gt.0) then
348 call card_concat(controlcard,.false.)
349 call split_string(controlcard,protfiles(1,2,ii,ib,iparm),
350 & maxfile_prot,nfile_cx(ii,ib,iparm))
352 write(iout,*) "nfile_cx(ii,ib,iparm)",nfile_cx(ii,ib,iparm)
353 write(iout,*) (protfiles(i,2,ii,ib,iparm),
354 & i=1,nfile_cx(ii,ib,iparm))
365 c-------------------------------------------------------------------------------
366 subroutine opentmp(islice,iunit,bprotfile_temp)
369 include "DIMENSIONS.ZSCOPT"
370 include "DIMENSIONS.FREE"
373 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
376 include "COMMON.IOUNITS"
377 include "COMMON.PROTFILES"
378 include "COMMON.PROT"
379 include "COMMON.FREE"
380 character*64 bprotfile_temp
381 character*3 liczba,liczba2
388 write (liczba1,'(bz,i2.2)') islice
389 write (liczba,'(bz,i3.3)') me
391 c write (iout,*) "separate_parset ",separate_parset,
393 if (separate_parset) then
394 write (liczba2,'(bz,i3.3)') myparm
395 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
396 & prefix(:ilen(prefix))//liczba//"_"//liczba2//".xbin.tmp"//liczba1
397 open (iunit,file=bprotfile_temp,status="unknown",
398 & form="unformatted",access="direct",recl=lenrec)
400 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
401 & prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
402 open (iunit,file=bprotfile_temp,status="unknown",
403 & form="unformatted",access="direct",recl=lenrec)
406 bprotfile_temp = scratchdir(:ilen(scratchdir))//
407 & "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
408 open (iunit,file=bprotfile_temp,status="unknown",
409 & form="unformatted",access="direct",recl=lenrec)
411 c write (iout,*) "OpenTmp iunit",iunit," bprotfile_temp",
416 c-------------------------------------------------------------------------------
417 subroutine read_database(*)
420 include "DIMENSIONS.ZSCOPT"
421 include "DIMENSIONS.FREE"
424 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
427 include "COMMON.CHAIN"
428 include "COMMON.IOUNITS"
429 include "COMMON.PROTFILES"
430 include "COMMON.NAMES"
433 include "COMMON.ENEPS"
434 include "COMMON.PROT"
435 include "COMMON.INTERACT"
436 include "COMMON.FREE"
437 include "COMMON.SBRIDGE"
438 include "COMMON.OBCINKA"
439 real*4 csingle(3,maxres2)
440 character*64 nazwa,bprotfile_temp
443 integer i,j,ii,jj(maxslice),k,kk(maxslice),l,
444 & ll(maxslice),mm(maxslice),if
445 integer nrec,nlines,iscor,iunit,islice
446 double precision energ
449 double precision rmsdev,energia(0:max_ene),efree,eini,temp
450 double precision prop(maxQ)
451 integer ntot_all(maxslice,0:maxprocs-1), maxslice_buff
452 integer iparm,ib,iib,ir,nprop,nthr,npars
453 double precision etot,time
457 lenrec1=12*(nres+nct-nnt+1)+4*(2*nss+2)+24
458 lenrec2=12*(nres+nct-nnt+1)+4*(2*nss+2)+24+8*nQ
460 write (iout,*) "lenrec",lenrec," lenrec1",lenrec1,
470 write (iout,*) "nparmset",nparmset
478 if (replica(iparm)) then
485 do iR=1,nRR(ib,iparm)
487 write (iout,*) "iparm",iparm," ib",ib," iR",iR," nQ",nQ
493 IF (NFILE_BIN(iR,ib,iparm).GT.0) THEN
494 c Read conformations from binary DA files (one per batch) and write them to
495 c a binary DA scratchfile.
496 write (liczba,'(bz,i3.3)') me
497 do if=1,nfile_bin(iR,ib,iparm)
498 nazwa=protfiles(if,1,iR,ib,iparm)
499 & (:ilen(protfiles(if,1,iR,ib,iparm)))//".bx"
500 open (ientin,file=nazwa,status="old",form="unformatted",
501 & access="direct",recl=lenrec2,err=1111)
504 call opentmp(islice,ientout,bprotfile_temp)
505 call bxread(nazwa,ii,jj(islice),kk(islice),ll(islice),
506 & mm(islice),iR,ib,iparm)
513 IF (NFILE_ASC(iR,ib,iparm).GT.0) THEN
514 c Read conformations from multiple ASCII int files and write them to a binary
516 do if=1,nfile_asc(iR,ib,iparm)
517 nazwa=protfiles(if,2,iR,ib,iparm)
518 & (:ilen(protfiles(if,2,iR,ib,iparm)))//".x"
519 open(unit=ientin,file=nazwa,status='old',err=1111)
520 write(iout,*) "reading ",nazwa(:ilen(nazwa))
522 call xread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm)
525 IF (NFILE_CX(iR,ib,iparm).gt.0) THEN
526 c Read conformations from cx files and write them to a binary
528 do if=1,nfile_cx(iR,ib,iparm)
529 nazwa=protfiles(if,2,iR,ib,iparm)
530 & (:ilen(protfiles(if,2,iR,ib,iparm)))//".cx"
531 write(iout,*) "reading ",nazwa(:ilen(nazwa))
533 print *,"Calling cxread"
534 call cxread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm,
537 write (iout,*) "exit cxread"
543 stot(islice)=stot(islice)+jj(islice)
548 write (iout,*) "IPARM",iparm
551 if (nslice.eq.1) then
553 write (liczba,'(bz,i3.3)') me
554 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
555 & prefix(:ilen(prefix))//liczba//".xbin.tmp"
557 bprotfile_temp = scratchdir(:ilen(scratchdir))//
558 & "/"//prefix(:ilen(prefix))//".xbin.tmp"
560 write(iout,*) mm(1)," conformations read",ll(1),
561 & " conformations written to ",
562 & bprotfile_temp(:ilen(bprotfile_temp))
565 write (liczba1,'(bz,i2.2)') islice
567 write (liczba,'(bz,i3.3)') me
568 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
569 & prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
571 bprotfile_temp = scratchdir(:ilen(scratchdir))//
572 & "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
574 write(iout,*) mm(islice)," conformations read",ll(islice),
575 & " conformations written to ",
576 & bprotfile_temp(:ilen(bprotfile_temp))
581 c Check if everyone has the same number of conformations
583 c call MPI_ALLgather(MPI_IN_PLACE,stot(1),MPI_DATATYPE_NULL,
584 c & ntot_all(1,0),maxslice,MPI_INTEGER,MPI_Comm_World,IERROR)
586 maxslice_buff=maxslice
588 call MPI_Allgather(stot(1),maxslice_buff,MPI_INTEGER,
589 & ntot_all(1,0),maxslice,MPI_INTEGER,MPI_Comm_World,IERROR)
594 if (stot(islice).ne.ntot_all(islice,i)) then
595 write (iout,*) "Number of conformations at processor",i,
596 & " differs from that at processor",me,
597 & stot(islice),ntot_all(islice,i)," slice",islice
605 write (iout,*) "Numbers of conformations read by processors"
608 write (iout,'(8i10)') i,(ntot_all(islice,i),islice=1,nslice)
610 write (iout,*) "Calculation terminated."
615 ntot(islice)=stot(islice)
619 1111 write(iout,*) "Error opening coordinate file ",nazwa(:ilen(nazwa))
623 c------------------------------------------------------------------------------
624 subroutine card_concat(card,to_upper)
626 include 'DIMENSIONS.ZSCOPT'
627 include "COMMON.IOUNITS"
629 character*80 karta,ucase
633 read (inp,'(a)') karta
634 if (to_upper) karta=ucase(karta)
636 do while (karta(80:80).eq.'&')
637 card=card(:ilen(card)+1)//karta(:79)
638 read (inp,'(a)') karta
639 if (to_upper) karta=ucase(karta)
641 card=card(:ilen(card)+1)//karta
644 c------------------------------------------------------------------------------
645 subroutine readi(rekord,lancuch,wartosc,default)
647 character*(*) rekord,lancuch
648 integer wartosc,default
651 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
656 iread=iread+ilen(lancuch)+1
657 read (rekord(iread:),*) wartosc
660 c----------------------------------------------------------------------------
661 subroutine reada(rekord,lancuch,wartosc,default)
663 character*(*) rekord,lancuch
665 double precision wartosc,default
668 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
673 iread=iread+ilen(lancuch)+1
674 read (rekord(iread:),*) wartosc
677 c----------------------------------------------------------------------------
678 subroutine multreadi(rekord,lancuch,tablica,dim,default)
681 integer tablica(dim),default
682 character*(*) rekord,lancuch
689 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
690 if (iread.eq.0) return
691 iread=iread+ilen(lancuch)+1
692 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
695 c----------------------------------------------------------------------------
696 subroutine multreada(rekord,lancuch,tablica,dim,default)
699 double precision tablica(dim),default
700 character*(*) rekord,lancuch
707 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
708 if (iread.eq.0) return
709 iread=iread+ilen(lancuch)+1
710 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
713 c----------------------------------------------------------------------------
714 subroutine reads(rekord,lancuch,wartosc,default)
716 character*(*) rekord,lancuch,wartosc,default
718 integer ilen,lenlan,lenrec,iread,ireade
724 iread=index(rekord,lancuch(:lenlan)//"=")
725 c print *,"rekord",rekord," lancuch",lancuch
726 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
732 c print *,"iread",iread
733 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
734 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
736 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
738 c print *,"iread",iread
739 if (iread.gt.lenrec) then
744 c print *,"ireade",ireade
745 do while (ireade.lt.lenrec .and.
746 & .not.iblnk(rekord(ireade:ireade)))
749 wartosc=rekord(iread:ireade)
752 c----------------------------------------------------------------------------
753 subroutine multreads(rekord,lancuch,tablica,dim,default)
756 character*(*) rekord,lancuch,tablica(dim),default
758 integer ilen,lenlan,lenrec,iread,ireade
767 iread=index(rekord,lancuch(:lenlan)//"=")
768 c print *,"rekord",rekord," lancuch",lancuch
769 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
770 if (iread.eq.0) return
773 c print *,"iread",iread
774 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
775 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
777 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
779 c print *,"iread",iread
780 if (iread.gt.lenrec) return
782 c print *,"ireade",ireade
783 do while (ireade.lt.lenrec .and.
784 & .not.iblnk(rekord(ireade:ireade)))
787 tablica(i)=rekord(iread:ireade)
791 c----------------------------------------------------------------------------
792 subroutine split_string(rekord,tablica,dim,nsub)
794 integer dim,nsub,i,ii,ll,kk
795 character*(*) tablica(dim)
806 C Find the start of term name
808 do while (ii.le.ll .and. rekord(ii:ii).eq." ")
811 C Parse the name into TABLICA(i) until blank found
812 do while (ii.le.ll .and. rekord(ii:ii).ne." ")
814 tablica(i)(kk:kk)=rekord(ii:ii)
817 if (kk.gt.0) nsub=nsub+1
822 c--------------------------------------------------------------------------------
823 integer function iroof(n,m)
825 if (ii*m .lt. n) ii=ii+1