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 if (index(controlcard,"CLASSIFY").gt.0) indpdb=1
72 call reada(controlcard,"DELTA",delta,1.0d-2)
73 call readi(controlcard,"EINICHECK",einicheck,2)
74 call reada(controlcard,"DELTRMS",deltrms,5.0d-2)
75 call reada(controlcard,"DELTRGY",deltrgy,5.0d-2)
76 call readi(controlcard,"RESCALE",rescale_mode,1)
77 check_conf=index(controlcard,"NO_CHECK_CONF").eq.0
78 call reada(controlcard,'DISTCHAINMAX',distchainmax,50.0d0)
79 call reada(controlcard,'BOXX',boxxsize,100.0d0)
80 call reada(controlcard,'BOXY',boxysize,100.0d0)
81 call reada(controlcard,'BOXZ',boxzsize,100.0d0)
82 c Cutoff range for interactions
83 call reada(controlcard,"R_CUT",r_cut,15.0d0)
84 call reada(controlcard,"LAMBDA",rlamb,0.3d0)
85 call reada(controlcard,"LIPTHICK",lipthick,0.0d0)
86 call reada(controlcard,"LIPAQBUF",lipbufthick,0.0d0)
87 if (lipthick.gt.0.0d0) then
88 bordliptop=(boxzsize+lipthick)/2.0
89 bordlipbot=bordliptop-lipthick
91 if ((bordliptop.gt.boxzsize).or.(bordlipbot.lt.0.0))
92 & write(iout,*) "WARNING WRONG SIZE OF LIPIDIC PHASE"
93 buflipbot=bordlipbot+lipbufthick
94 bufliptop=bordliptop-lipbufthick
95 if ((lipbufthick*2.0d0).gt.lipthick)
96 &write(iout,*) "WARNING WRONG SIZE OF LIP AQ BUF"
98 write(iout,*) "bordliptop=",bordliptop
99 write(iout,*) "bordlipbot=",bordlipbot
100 write(iout,*) "bufliptop=",bufliptop
101 write(iout,*) "buflipbot=",buflipbot
102 call readi(controlcard,'SYM',symetr,1)
103 write (iout,*) "DISTCHAINMAX",distchainmax
104 write (iout,*) "delta",delta
105 write (iout,*) "einicheck",einicheck
106 write (iout,*) "rescale_mode",rescale_mode
108 bxfile=index(controlcard,"BXFILE").gt.0
109 cxfile=index(controlcard,"CXFILE").gt.0
110 if (nslice .eq. 1 .and. .not.bxfile .and. .not.cxfile)
112 histfile=index(controlcard,"HISTFILE").gt.0
113 histout=index(controlcard,"HISTOUT").gt.0
114 entfile=index(controlcard,"ENTFILE").gt.0
115 zscfile=index(controlcard,"ZSCFILE").gt.0
116 with_dihed_constr = index(controlcard,"WITH_DIHED_CONSTR").gt.0
117 write (iout,*) "with_dihed_constr ",with_dihed_constr
118 with_theta_constr = index(controlcard,"WITH_THETA_CONSTR").gt.0
119 write (iout,*) "with_theta_constr ",with_theta_constr
120 call readi(controlcard,'CONSTR_DIST',constr_dist,0)
121 write (iout,*) "with_dihed_constr ",with_dihed_constr,
122 & " CONSTR_DIST",constr_dist
123 call readi(controlcard,'CONSTR_HOMOL',constr_homology,0)
124 write (iout,*) "with_homology_constr ",with_dihed_constr,
125 & " CONSTR_HOMOLOGY",constr_homology
126 refstr = index(controlcard,'REFSTR').gt.0
127 pdbref = index(controlcard,'PDBREF').gt.0
128 dyn_ss=(index(controlcard,'DYN_SS').gt.0)
129 call readi(controlcard,'NSAXS',nsaxs,0)
130 call readi(controlcard,'SAXS_MODE',saxs_mode,0)
131 call reada(controlcard,'SCAL_RAD',scal_rad,1.0d0)
132 write (iout,*) "Number of SAXS restraints",NSAXS," SAXS_MODE",
133 & SAXS_MODE," SCAL_RAD",scal_rad
134 C /06/28/2013 Adasko: dyn_ss is keyword allowing to break and create bond
135 C disulfide bond. Note that in conterary to dynamics this in
136 C CONTROLCARD. The bond are read in molread_zs.F
140 c------------------------------------------------------------------------------
141 subroutine read_efree(*)
143 C Read molecular data
147 include 'DIMENSIONS.ZSCOPT'
148 include 'DIMENSIONS.COMPAR'
149 include 'DIMENSIONS.FREE'
150 include 'COMMON.IOUNITS'
151 include 'COMMON.TIME1'
152 include 'COMMON.SBRIDGE'
153 include 'COMMON.CONTROL'
154 include 'COMMON.CHAIN'
155 include 'COMMON.HEADER'
157 include 'COMMON.FREE'
158 character*320 controlcard,ucase
159 integer iparm,ib,i,j,npars
171 call card_concat(controlcard,.true.)
172 call readi(controlcard,'NT',nT_h(iparm),1)
173 write (iout,*) "iparm",iparm," nt",nT_h(iparm)
175 if (nT_h(iparm).gt.MaxT_h) then
176 write (iout,*) "Error: parameter out of range: NT",nT_h(iparm),
180 replica(iparm)=index(controlcard,"REPLICA").gt.0
181 umbrella(iparm)=index(controlcard,"UMBRELLA").gt.0
182 read_iset(iparm)=index(controlcard,"READ_ISET").gt.0
183 write (iout,*) "nQ",nQ," nT",nT_h(iparm)," replica ",
184 & replica(iparm)," umbrella ",umbrella(iparm),
185 & " read_iset",read_iset(iparm)
188 call card_concat(controlcard,.true.)
189 call readi(controlcard,'NR',nR(ib,iparm),1)
190 if (umbrella(iparm)) then
193 nRR(ib,iparm)=nR(ib,iparm)
195 if (nR(ib,iparm).gt.MaxR) then
196 write (iout,*) "Error: parameter out of range: NR",
200 call reada(controlcard,'TEMP',beta_h(ib,iparm),298.0d0)
201 beta_h(ib,iparm)=1.0d0/(beta_h(ib,iparm)*1.987D-3)
202 call multreada(controlcard,'FI',f(1,ib,iparm),nR(ib,iparm),
205 call card_concat(controlcard,.true.)
206 call multreada(controlcard,'KH',KH(1,i,ib,iparm),nQ,
208 call multreada(controlcard,'Q0',Q0(1,i,ib,iparm),nQ,
213 write (iout,*) "ib",ib," beta_h",
214 & 1.0d0/(0.001987*beta_h(ib,iparm))
215 write (iout,*) "nR",nR(ib,iparm)
216 write (iout,*) "fi",(f(i,ib,iparm),i=1,nR(ib,iparm))
218 write (iout,*) "i",i," Kh",(Kh(j,i,ib,iparm),j=1,nQ),
219 & "q0",(q0(j,i,ib,iparm),j=1,nQ)
224 write (iout,*) "HOMOL_NSET",homol_nset
232 nR(ib,iparm)=nR(ib,1)
233 if (umbrella(iparm)) then
236 nRR(ib,iparm)=nR(ib,1)
238 beta_h(ib,iparm)=beta_h(ib,1)
240 f(i,ib,iparm)=f(i,ib,1)
242 KH(j,i,ib,iparm)=KH(j,i,ib,1)
243 Q0(j,i,ib,iparm)=Q0(j,i,ib,1)
246 replica(iparm)=replica(1)
247 umbrella(iparm)=umbrella(1)
248 read_iset(iparm)=read_iset(1)
256 c-----------------------------------------------------------------------------
257 subroutine read_protein_data(*)
260 include "DIMENSIONS.ZSCOPT"
261 include "DIMENSIONS.FREE"
264 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
267 include "COMMON.CHAIN"
268 include "COMMON.IOUNITS"
269 include "COMMON.PROT"
270 include "COMMON.PROTFILES"
271 include "COMMON.NAMES"
272 include "COMMON.FREE"
273 include "COMMON.OBCINKA"
275 character*16000 controlcard
276 integer i,ii,ib,iR,iparm,ilen,iroof,nthr,npars
286 C Read names of files with conformation data.
287 if (replica(iparm)) then
293 do ii=1,nRR(ib,iparm)
294 write (iout,*) "Parameter set",iparm," temperature",ib,
297 call card_concat(controlcard,.true.)
298 write (iout,*) controlcard(:ilen(controlcard))
299 call readi(controlcard,"NFILE_BIN",nfile_bin(ii,ib,iparm),0)
300 call readi(controlcard,"NFILE_ASC",nfile_asc(ii,ib,iparm),0)
301 call readi(controlcard,"NFILE_CX",nfile_cx(ii,ib,iparm),0)
302 call readi(controlcard,"REC_START",rec_start(ii,ib,iparm),1)
303 call readi(controlcard,"REC_END",rec_end(ii,ib,iparm),
304 & maxstr*isampl(iparm)+rec_start(ii,ib,iparm)-1)
305 call reada(controlcard,"TIME_START",
306 & time_start_collect(ii,ib,iparm),0.0d0)
307 call reada(controlcard,"TIME_END",time_end_collect(ii,ib,iparm),
309 write (iout,*) "rec_start",rec_start(ii,ib,iparm),
310 & " rec_end",rec_end(ii,ib,iparm)
311 write (iout,*) "time_start",time_start_collect(ii,ib,iparm),
312 & " time_end",time_end_collect(ii,ib,iparm)
314 if (replica(iparm)) then
315 call readi(controlcard,"TOTRAJ",totraj(ii,iparm),1)
316 write (iout,*) "Number of trajectories",totraj(ii,iparm)
319 if (nfile_bin(ii,ib,iparm).lt.2
320 & .and. nfile_asc(ii,ib,iparm).eq.0
321 & .and. nfile_cx(ii,ib,iparm).eq.0) then
322 write (iout,*) "Error - no action specified!"
325 if (nfile_bin(ii,ib,iparm).gt.0) then
326 call card_concat(controlcard,.false.)
327 call split_string(controlcard,protfiles(1,1,ii,ib,iparm),
328 & maxfile_prot,nfile_bin(ii,ib,iparm))
330 write(iout,*)"nfile_bin",nfile_bin(ii,ib,iparm)
331 write(iout,*) (protfiles(i,1,ii,ib,iparm),
332 & i=1,nfile_bin(ii,ib,iparm))
335 if (nfile_asc(ii,ib,iparm).gt.0) then
336 call card_concat(controlcard,.false.)
337 call split_string(controlcard,protfiles(1,2,ii,ib,iparm),
338 & maxfile_prot,nfile_asc(ii,ib,iparm))
340 write(iout,*) "nfile_asc(ii,ib,iparm)",nfile_asc(ii,ib,iparm)
341 write(iout,*) (protfiles(i,2,ii,ib,iparm),
342 & i=1,nfile_asc(ii,ib,iparm))
344 else if (nfile_cx(ii,ib,iparm).gt.0) then
345 call card_concat(controlcard,.false.)
346 call split_string(controlcard,protfiles(1,2,ii,ib,iparm),
347 & maxfile_prot,nfile_cx(ii,ib,iparm))
349 write(iout,*) "nfile_cx(ii,ib,iparm)",nfile_cx(ii,ib,iparm)
350 write(iout,*) (protfiles(i,2,ii,ib,iparm),
351 & i=1,nfile_cx(ii,ib,iparm))
362 c-------------------------------------------------------------------------------
363 subroutine opentmp(islice,iunit,bprotfile_temp)
366 include "DIMENSIONS.ZSCOPT"
367 include "DIMENSIONS.FREE"
370 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
373 include "COMMON.IOUNITS"
374 include "COMMON.PROTFILES"
375 include "COMMON.PROT"
376 include "COMMON.FREE"
377 character*64 bprotfile_temp
378 character*3 liczba,liczba2
385 write (liczba1,'(bz,i2.2)') islice
386 write (liczba,'(bz,i3.3)') me
388 c write (iout,*) "separate_parset ",separate_parset,
390 if (separate_parset) then
391 write (liczba2,'(bz,i3.3)') myparm
392 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
393 & prefix(:ilen(prefix))//liczba//"_"//liczba2//".xbin.tmp"//liczba1
394 open (iunit,file=bprotfile_temp,status="unknown",
395 & form="unformatted",access="direct",recl=lenrec)
397 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
398 & prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
399 open (iunit,file=bprotfile_temp,status="unknown",
400 & form="unformatted",access="direct",recl=lenrec)
403 bprotfile_temp = scratchdir(:ilen(scratchdir))//
404 & "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
405 open (iunit,file=bprotfile_temp,status="unknown",
406 & form="unformatted",access="direct",recl=lenrec)
408 c write (iout,*) "OpenTmp iunit",iunit," bprotfile_temp",
413 c-------------------------------------------------------------------------------
414 subroutine read_database(*)
417 include "DIMENSIONS.ZSCOPT"
418 include "DIMENSIONS.FREE"
421 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
424 include "COMMON.CHAIN"
425 include "COMMON.IOUNITS"
426 include "COMMON.PROTFILES"
427 include "COMMON.NAMES"
430 include "COMMON.ENEPS"
431 include "COMMON.PROT"
432 include "COMMON.INTERACT"
433 include "COMMON.FREE"
434 include "COMMON.SBRIDGE"
435 include "COMMON.OBCINKA"
436 real*4 csingle(3,maxres2)
437 character*64 nazwa,bprotfile_temp
440 integer i,j,ii,jj(maxslice),k,kk(maxslice),l,
441 & ll(maxslice),mm(maxslice),if
442 integer nrec,nlines,iscor,iunit,islice
443 double precision energ
446 double precision rmsdev,energia(0:max_ene),efree,eini,temp
447 double precision prop(maxQ)
448 integer ntot_all(maxslice,0:maxprocs-1), maxslice_buff
449 integer iparm,ib,iib,ir,nprop,nthr,npars
450 double precision etot,time
454 lenrec1=12*(nres+nct-nnt+1)+4*(2*nss+2)+24
455 lenrec2=12*(nres+nct-nnt+1)+4*(2*nss+2)+24+8*nQ
457 write (iout,*) "lenrec",lenrec," lenrec1",lenrec1,
467 write (iout,*) "nparmset",nparmset
475 if (replica(iparm)) then
482 do iR=1,nRR(ib,iparm)
484 write (iout,*) "iparm",iparm," ib",ib," iR",iR," nQ",nQ
490 IF (NFILE_BIN(iR,ib,iparm).GT.0) THEN
491 c Read conformations from binary DA files (one per batch) and write them to
492 c a binary DA scratchfile.
493 write (liczba,'(bz,i3.3)') me
494 do if=1,nfile_bin(iR,ib,iparm)
495 nazwa=protfiles(if,1,iR,ib,iparm)
496 & (:ilen(protfiles(if,1,iR,ib,iparm)))//".bx"
497 open (ientin,file=nazwa,status="old",form="unformatted",
498 & access="direct",recl=lenrec2,err=1111)
501 call opentmp(islice,ientout,bprotfile_temp)
502 call bxread(nazwa,ii,jj(islice),kk(islice),ll(islice),
503 & mm(islice),iR,ib,iparm)
510 IF (NFILE_ASC(iR,ib,iparm).GT.0) THEN
511 c Read conformations from multiple ASCII int files and write them to a binary
513 do if=1,nfile_asc(iR,ib,iparm)
514 nazwa=protfiles(if,2,iR,ib,iparm)
515 & (:ilen(protfiles(if,2,iR,ib,iparm)))//".x"
516 open(unit=ientin,file=nazwa,status='old',err=1111)
517 write(iout,*) "reading ",nazwa(:ilen(nazwa))
519 call xread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm)
522 IF (NFILE_CX(iR,ib,iparm).gt.0) THEN
523 c Read conformations from cx files and write them to a binary
525 do if=1,nfile_cx(iR,ib,iparm)
526 nazwa=protfiles(if,2,iR,ib,iparm)
527 & (:ilen(protfiles(if,2,iR,ib,iparm)))//".cx"
528 write(iout,*) "reading ",nazwa(:ilen(nazwa))
530 print *,"Calling cxread"
531 call cxread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm,
534 write (iout,*) "exit cxread"
540 stot(islice)=stot(islice)+jj(islice)
545 write (iout,*) "IPARM",iparm
548 if (nslice.eq.1) then
550 write (liczba,'(bz,i3.3)') me
551 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
552 & prefix(:ilen(prefix))//liczba//".xbin.tmp"
554 bprotfile_temp = scratchdir(:ilen(scratchdir))//
555 & "/"//prefix(:ilen(prefix))//".xbin.tmp"
557 write(iout,*) mm(1)," conformations read",ll(1),
558 & " conformations written to ",
559 & bprotfile_temp(:ilen(bprotfile_temp))
562 write (liczba1,'(bz,i2.2)') islice
564 write (liczba,'(bz,i3.3)') me
565 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
566 & prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
568 bprotfile_temp = scratchdir(:ilen(scratchdir))//
569 & "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
571 write(iout,*) mm(islice)," conformations read",ll(islice),
572 & " conformations written to ",
573 & bprotfile_temp(:ilen(bprotfile_temp))
578 c Check if everyone has the same number of conformations
580 c call MPI_ALLgather(MPI_IN_PLACE,stot(1),MPI_DATATYPE_NULL,
581 c & ntot_all(1,0),maxslice,MPI_INTEGER,MPI_Comm_World,IERROR)
583 maxslice_buff=maxslice
585 call MPI_Allgather(stot(1),maxslice_buff,MPI_INTEGER,
586 & ntot_all(1,0),maxslice,MPI_INTEGER,MPI_Comm_World,IERROR)
591 if (stot(islice).ne.ntot_all(islice,i)) then
592 write (iout,*) "Number of conformations at processor",i,
593 & " differs from that at processor",me,
594 & stot(islice),ntot_all(islice,i)," slice",islice
602 write (iout,*) "Numbers of conformations read by processors"
605 write (iout,'(8i10)') i,(ntot_all(islice,i),islice=1,nslice)
607 write (iout,*) "Calculation terminated."
612 ntot(islice)=stot(islice)
616 1111 write(iout,*) "Error opening coordinate file ",nazwa(:ilen(nazwa))
620 c------------------------------------------------------------------------------
621 subroutine card_concat(card,to_upper)
623 include 'DIMENSIONS.ZSCOPT'
624 include "COMMON.IOUNITS"
626 character*80 karta,ucase
630 read (inp,'(a)') karta
631 if (to_upper) karta=ucase(karta)
633 do while (karta(80:80).eq.'&')
634 card=card(:ilen(card)+1)//karta(:79)
635 read (inp,'(a)') karta
636 if (to_upper) karta=ucase(karta)
638 card=card(:ilen(card)+1)//karta
641 c------------------------------------------------------------------------------
642 subroutine readi(rekord,lancuch,wartosc,default)
644 character*(*) rekord,lancuch
645 integer wartosc,default
648 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
653 iread=iread+ilen(lancuch)+1
654 read (rekord(iread:),*) wartosc
657 c----------------------------------------------------------------------------
658 subroutine reada(rekord,lancuch,wartosc,default)
660 character*(*) rekord,lancuch
662 double precision wartosc,default
665 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
670 iread=iread+ilen(lancuch)+1
671 read (rekord(iread:),*) wartosc
674 c----------------------------------------------------------------------------
675 subroutine multreadi(rekord,lancuch,tablica,dim,default)
678 integer tablica(dim),default
679 character*(*) rekord,lancuch
686 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
687 if (iread.eq.0) return
688 iread=iread+ilen(lancuch)+1
689 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
692 c----------------------------------------------------------------------------
693 subroutine multreada(rekord,lancuch,tablica,dim,default)
696 double precision tablica(dim),default
697 character*(*) rekord,lancuch
704 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
705 if (iread.eq.0) return
706 iread=iread+ilen(lancuch)+1
707 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
710 c----------------------------------------------------------------------------
711 subroutine reads(rekord,lancuch,wartosc,default)
713 character*(*) rekord,lancuch,wartosc,default
715 integer ilen,lenlan,lenrec,iread,ireade
721 iread=index(rekord,lancuch(:lenlan)//"=")
722 c print *,"rekord",rekord," lancuch",lancuch
723 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
729 c print *,"iread",iread
730 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
731 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
733 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
735 c print *,"iread",iread
736 if (iread.gt.lenrec) then
741 c print *,"ireade",ireade
742 do while (ireade.lt.lenrec .and.
743 & .not.iblnk(rekord(ireade:ireade)))
746 wartosc=rekord(iread:ireade)
749 c----------------------------------------------------------------------------
750 subroutine multreads(rekord,lancuch,tablica,dim,default)
753 character*(*) rekord,lancuch,tablica(dim),default
755 integer ilen,lenlan,lenrec,iread,ireade
764 iread=index(rekord,lancuch(:lenlan)//"=")
765 c print *,"rekord",rekord," lancuch",lancuch
766 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
767 if (iread.eq.0) return
770 c print *,"iread",iread
771 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
772 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
774 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
776 c print *,"iread",iread
777 if (iread.gt.lenrec) return
779 c print *,"ireade",ireade
780 do while (ireade.lt.lenrec .and.
781 & .not.iblnk(rekord(ireade:ireade)))
784 tablica(i)=rekord(iread:ireade)
788 c----------------------------------------------------------------------------
789 subroutine split_string(rekord,tablica,dim,nsub)
791 integer dim,nsub,i,ii,ll,kk
792 character*(*) tablica(dim)
803 C Find the start of term name
805 do while (ii.le.ll .and. rekord(ii:ii).eq." ")
808 C Parse the name into TABLICA(i) until blank found
809 do while (ii.le.ll .and. rekord(ii:ii).ne." ")
811 tablica(i)(kk:kk)=rekord(ii:ii)
814 if (kk.gt.0) nsub=nsub+1
819 c--------------------------------------------------------------------------------
820 integer function iroof(n,m)
822 if (ii*m .lt. n) ii=ii+1