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 C /06/28/2013 Adasko: dyn_ss is keyword allowing to break and create bond
130 C disulfide bond. Note that in conterary to dynamics this in
131 C CONTROLCARD. The bond are read in molread_zs.F
135 c------------------------------------------------------------------------------
136 subroutine read_efree(*)
138 C Read molecular data
142 include 'DIMENSIONS.ZSCOPT'
143 include 'DIMENSIONS.COMPAR'
144 include 'DIMENSIONS.FREE'
145 include 'COMMON.IOUNITS'
146 include 'COMMON.TIME1'
147 include 'COMMON.SBRIDGE'
148 include 'COMMON.CONTROL'
149 include 'COMMON.CHAIN'
150 include 'COMMON.HEADER'
152 include 'COMMON.FREE'
153 character*320 controlcard,ucase
154 integer iparm,ib,i,j,npars
166 call card_concat(controlcard,.true.)
167 call readi(controlcard,'NT',nT_h(iparm),1)
168 write (iout,*) "iparm",iparm," nt",nT_h(iparm)
170 if (nT_h(iparm).gt.MaxT_h) then
171 write (iout,*) "Error: parameter out of range: NT",nT_h(iparm),
175 replica(iparm)=index(controlcard,"REPLICA").gt.0
176 umbrella(iparm)=index(controlcard,"UMBRELLA").gt.0
177 read_iset(iparm)=index(controlcard,"READ_ISET").gt.0
178 write (iout,*) "nQ",nQ," nT",nT_h(iparm)," replica ",
179 & replica(iparm)," umbrella ",umbrella(iparm),
180 & " read_iset",read_iset(iparm)
183 call card_concat(controlcard,.true.)
184 call readi(controlcard,'NR',nR(ib,iparm),1)
185 if (umbrella(iparm)) then
188 nRR(ib,iparm)=nR(ib,iparm)
190 if (nR(ib,iparm).gt.MaxR) then
191 write (iout,*) "Error: parameter out of range: NR",
195 call reada(controlcard,'TEMP',beta_h(ib,iparm),298.0d0)
196 beta_h(ib,iparm)=1.0d0/(beta_h(ib,iparm)*1.987D-3)
197 call multreada(controlcard,'FI',f(1,ib,iparm),nR(ib,iparm),
200 call card_concat(controlcard,.true.)
201 call multreada(controlcard,'KH',KH(1,i,ib,iparm),nQ,
203 call multreada(controlcard,'Q0',Q0(1,i,ib,iparm),nQ,
208 write (iout,*) "ib",ib," beta_h",
209 & 1.0d0/(0.001987*beta_h(ib,iparm))
210 write (iout,*) "nR",nR(ib,iparm)
211 write (iout,*) "fi",(f(i,ib,iparm),i=1,nR(ib,iparm))
213 write (iout,*) "i",i," Kh",(Kh(j,i,ib,iparm),j=1,nQ),
214 & "q0",(q0(j,i,ib,iparm),j=1,nQ)
219 write (iout,*) "HOMOL_NSET",homol_nset
227 nR(ib,iparm)=nR(ib,1)
228 if (umbrella(iparm)) then
231 nRR(ib,iparm)=nR(ib,1)
233 beta_h(ib,iparm)=beta_h(ib,1)
235 f(i,ib,iparm)=f(i,ib,1)
237 KH(j,i,ib,iparm)=KH(j,i,ib,1)
238 Q0(j,i,ib,iparm)=Q0(j,i,ib,1)
241 replica(iparm)=replica(1)
242 umbrella(iparm)=umbrella(1)
243 read_iset(iparm)=read_iset(1)
251 c-----------------------------------------------------------------------------
252 subroutine read_protein_data(*)
255 include "DIMENSIONS.ZSCOPT"
256 include "DIMENSIONS.FREE"
259 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
262 include "COMMON.CHAIN"
263 include "COMMON.IOUNITS"
264 include "COMMON.PROT"
265 include "COMMON.PROTFILES"
266 include "COMMON.NAMES"
267 include "COMMON.FREE"
268 include "COMMON.OBCINKA"
270 character*16000 controlcard
271 integer i,ii,ib,iR,iparm,ilen,iroof,nthr,npars
281 C Read names of files with conformation data.
282 if (replica(iparm)) then
288 do ii=1,nRR(ib,iparm)
289 write (iout,*) "Parameter set",iparm," temperature",ib,
292 call card_concat(controlcard,.true.)
293 write (iout,*) controlcard(:ilen(controlcard))
294 call readi(controlcard,"NFILE_BIN",nfile_bin(ii,ib,iparm),0)
295 call readi(controlcard,"NFILE_ASC",nfile_asc(ii,ib,iparm),0)
296 call readi(controlcard,"NFILE_CX",nfile_cx(ii,ib,iparm),0)
297 call readi(controlcard,"REC_START",rec_start(ii,ib,iparm),1)
298 call readi(controlcard,"REC_END",rec_end(ii,ib,iparm),
299 & maxstr*isampl(iparm)+rec_start(ii,ib,iparm)-1)
300 call reada(controlcard,"TIME_START",
301 & time_start_collect(ii,ib,iparm),0.0d0)
302 call reada(controlcard,"TIME_END",time_end_collect(ii,ib,iparm),
304 write (iout,*) "rec_start",rec_start(ii,ib,iparm),
305 & " rec_end",rec_end(ii,ib,iparm)
306 write (iout,*) "time_start",time_start_collect(ii,ib,iparm),
307 & " time_end",time_end_collect(ii,ib,iparm)
309 if (replica(iparm)) then
310 call readi(controlcard,"TOTRAJ",totraj(ii,iparm),1)
311 write (iout,*) "Number of trajectories",totraj(ii,iparm)
314 if (nfile_bin(ii,ib,iparm).lt.2
315 & .and. nfile_asc(ii,ib,iparm).eq.0
316 & .and. nfile_cx(ii,ib,iparm).eq.0) then
317 write (iout,*) "Error - no action specified!"
320 if (nfile_bin(ii,ib,iparm).gt.0) then
321 call card_concat(controlcard,.false.)
322 call split_string(controlcard,protfiles(1,1,ii,ib,iparm),
323 & maxfile_prot,nfile_bin(ii,ib,iparm))
325 write(iout,*)"nfile_bin",nfile_bin(ii,ib,iparm)
326 write(iout,*) (protfiles(i,1,ii,ib,iparm),
327 & i=1,nfile_bin(ii,ib,iparm))
330 if (nfile_asc(ii,ib,iparm).gt.0) then
331 call card_concat(controlcard,.false.)
332 call split_string(controlcard,protfiles(1,2,ii,ib,iparm),
333 & maxfile_prot,nfile_asc(ii,ib,iparm))
335 write(iout,*) "nfile_asc(ii,ib,iparm)",nfile_asc(ii,ib,iparm)
336 write(iout,*) (protfiles(i,2,ii,ib,iparm),
337 & i=1,nfile_asc(ii,ib,iparm))
339 else if (nfile_cx(ii,ib,iparm).gt.0) then
340 call card_concat(controlcard,.false.)
341 call split_string(controlcard,protfiles(1,2,ii,ib,iparm),
342 & maxfile_prot,nfile_cx(ii,ib,iparm))
344 write(iout,*) "nfile_cx(ii,ib,iparm)",nfile_cx(ii,ib,iparm)
345 write(iout,*) (protfiles(i,2,ii,ib,iparm),
346 & i=1,nfile_cx(ii,ib,iparm))
357 c-------------------------------------------------------------------------------
358 subroutine opentmp(islice,iunit,bprotfile_temp)
361 include "DIMENSIONS.ZSCOPT"
362 include "DIMENSIONS.FREE"
365 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
368 include "COMMON.IOUNITS"
369 include "COMMON.PROTFILES"
370 include "COMMON.PROT"
371 include "COMMON.FREE"
372 character*64 bprotfile_temp
373 character*3 liczba,liczba2
380 write (liczba1,'(bz,i2.2)') islice
381 write (liczba,'(bz,i3.3)') me
383 c write (iout,*) "separate_parset ",separate_parset,
385 if (separate_parset) then
386 write (liczba2,'(bz,i3.3)') myparm
387 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
388 & prefix(:ilen(prefix))//liczba//"_"//liczba2//".xbin.tmp"//liczba1
389 open (iunit,file=bprotfile_temp,status="unknown",
390 & form="unformatted",access="direct",recl=lenrec)
392 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
393 & prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
394 open (iunit,file=bprotfile_temp,status="unknown",
395 & form="unformatted",access="direct",recl=lenrec)
398 bprotfile_temp = scratchdir(:ilen(scratchdir))//
399 & "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
400 open (iunit,file=bprotfile_temp,status="unknown",
401 & form="unformatted",access="direct",recl=lenrec)
403 c write (iout,*) "OpenTmp iunit",iunit," bprotfile_temp",
408 c-------------------------------------------------------------------------------
409 subroutine read_database(*)
412 include "DIMENSIONS.ZSCOPT"
413 include "DIMENSIONS.FREE"
416 integer IERROR,ERRCODE,STATUS(MPI_STATUS_SIZE)
419 include "COMMON.CHAIN"
420 include "COMMON.IOUNITS"
421 include "COMMON.PROTFILES"
422 include "COMMON.NAMES"
425 include "COMMON.ENEPS"
426 include "COMMON.PROT"
427 include "COMMON.INTERACT"
428 include "COMMON.FREE"
429 include "COMMON.SBRIDGE"
430 include "COMMON.OBCINKA"
431 real*4 csingle(3,maxres2)
432 character*64 nazwa,bprotfile_temp
435 integer i,j,ii,jj(maxslice),k,kk(maxslice),l,
436 & ll(maxslice),mm(maxslice),if
437 integer nrec,nlines,iscor,iunit,islice
438 double precision energ
441 double precision rmsdev,energia(0:max_ene),efree,eini,temp
442 double precision prop(maxQ)
443 integer ntot_all(maxslice,0:maxprocs-1), maxslice_buff
444 integer iparm,ib,iib,ir,nprop,nthr,npars
445 double precision etot,time
449 lenrec1=12*(nres+nct-nnt+1)+4*(2*nss+2)+24
450 lenrec2=12*(nres+nct-nnt+1)+4*(2*nss+2)+24+8*nQ
452 write (iout,*) "lenrec",lenrec," lenrec1",lenrec1,
462 write (iout,*) "nparmset",nparmset
470 if (replica(iparm)) then
477 do iR=1,nRR(ib,iparm)
479 write (iout,*) "iparm",iparm," ib",ib," iR",iR," nQ",nQ
485 IF (NFILE_BIN(iR,ib,iparm).GT.0) THEN
486 c Read conformations from binary DA files (one per batch) and write them to
487 c a binary DA scratchfile.
488 write (liczba,'(bz,i3.3)') me
489 do if=1,nfile_bin(iR,ib,iparm)
490 nazwa=protfiles(if,1,iR,ib,iparm)
491 & (:ilen(protfiles(if,1,iR,ib,iparm)))//".bx"
492 open (ientin,file=nazwa,status="old",form="unformatted",
493 & access="direct",recl=lenrec2,err=1111)
496 call opentmp(islice,ientout,bprotfile_temp)
497 call bxread(nazwa,ii,jj(islice),kk(islice),ll(islice),
498 & mm(islice),iR,ib,iparm)
505 IF (NFILE_ASC(iR,ib,iparm).GT.0) THEN
506 c Read conformations from multiple ASCII int files and write them to a binary
508 do if=1,nfile_asc(iR,ib,iparm)
509 nazwa=protfiles(if,2,iR,ib,iparm)
510 & (:ilen(protfiles(if,2,iR,ib,iparm)))//".x"
511 open(unit=ientin,file=nazwa,status='old',err=1111)
512 write(iout,*) "reading ",nazwa(:ilen(nazwa))
514 call xread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm)
517 IF (NFILE_CX(iR,ib,iparm).gt.0) THEN
518 c Read conformations from cx files and write them to a binary
520 do if=1,nfile_cx(iR,ib,iparm)
521 nazwa=protfiles(if,2,iR,ib,iparm)
522 & (:ilen(protfiles(if,2,iR,ib,iparm)))//".cx"
523 write(iout,*) "reading ",nazwa(:ilen(nazwa))
525 print *,"Calling cxread"
526 call cxread(nazwa,ii,jj,kk,ll,mm,iR,ib,iparm,
529 write (iout,*) "exit cxread"
535 stot(islice)=stot(islice)+jj(islice)
540 write (iout,*) "IPARM",iparm
543 if (nslice.eq.1) then
545 write (liczba,'(bz,i3.3)') me
546 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
547 & prefix(:ilen(prefix))//liczba//".xbin.tmp"
549 bprotfile_temp = scratchdir(:ilen(scratchdir))//
550 & "/"//prefix(:ilen(prefix))//".xbin.tmp"
552 write(iout,*) mm(1)," conformations read",ll(1),
553 & " conformations written to ",
554 & bprotfile_temp(:ilen(bprotfile_temp))
557 write (liczba1,'(bz,i2.2)') islice
559 write (liczba,'(bz,i3.3)') me
560 bprotfile_temp = scratchdir(:ilen(scratchdir))//"/"//
561 & prefix(:ilen(prefix))//liczba//".xbin.tmp"//liczba1
563 bprotfile_temp = scratchdir(:ilen(scratchdir))//
564 & "/"//prefix(:ilen(prefix))//".xbin.tmp"//liczba1
566 write(iout,*) mm(islice)," conformations read",ll(islice),
567 & " conformations written to ",
568 & bprotfile_temp(:ilen(bprotfile_temp))
573 c Check if everyone has the same number of conformations
575 c call MPI_ALLgather(MPI_IN_PLACE,stot(1),MPI_DATATYPE_NULL,
576 c & ntot_all(1,0),maxslice,MPI_INTEGER,MPI_Comm_World,IERROR)
578 maxslice_buff=maxslice
580 call MPI_Allgather(stot(1),maxslice_buff,MPI_INTEGER,
581 & ntot_all(1,0),maxslice,MPI_INTEGER,MPI_Comm_World,IERROR)
586 if (stot(islice).ne.ntot_all(islice,i)) then
587 write (iout,*) "Number of conformations at processor",i,
588 & " differs from that at processor",me,
589 & stot(islice),ntot_all(islice,i)," slice",islice
597 write (iout,*) "Numbers of conformations read by processors"
600 write (iout,'(8i10)') i,(ntot_all(islice,i),islice=1,nslice)
602 write (iout,*) "Calculation terminated."
607 ntot(islice)=stot(islice)
611 1111 write(iout,*) "Error opening coordinate file ",nazwa(:ilen(nazwa))
615 c------------------------------------------------------------------------------
616 subroutine card_concat(card,to_upper)
618 include 'DIMENSIONS.ZSCOPT'
619 include "COMMON.IOUNITS"
621 character*80 karta,ucase
625 read (inp,'(a)') karta
626 if (to_upper) karta=ucase(karta)
628 do while (karta(80:80).eq.'&')
629 card=card(:ilen(card)+1)//karta(:79)
630 read (inp,'(a)') karta
631 if (to_upper) karta=ucase(karta)
633 card=card(:ilen(card)+1)//karta
636 c------------------------------------------------------------------------------
637 subroutine readi(rekord,lancuch,wartosc,default)
639 character*(*) rekord,lancuch
640 integer wartosc,default
643 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
648 iread=iread+ilen(lancuch)+1
649 read (rekord(iread:),*) wartosc
652 c----------------------------------------------------------------------------
653 subroutine reada(rekord,lancuch,wartosc,default)
655 character*(*) rekord,lancuch
657 double precision wartosc,default
660 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
665 iread=iread+ilen(lancuch)+1
666 read (rekord(iread:),*) wartosc
669 c----------------------------------------------------------------------------
670 subroutine multreadi(rekord,lancuch,tablica,dim,default)
673 integer tablica(dim),default
674 character*(*) rekord,lancuch
681 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
682 if (iread.eq.0) return
683 iread=iread+ilen(lancuch)+1
684 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
687 c----------------------------------------------------------------------------
688 subroutine multreada(rekord,lancuch,tablica,dim,default)
691 double precision tablica(dim),default
692 character*(*) rekord,lancuch
699 iread=index(rekord,lancuch(:ilen(lancuch))//"=")
700 if (iread.eq.0) return
701 iread=iread+ilen(lancuch)+1
702 read (rekord(iread:),*,end=10,err=10) (tablica(i),i=1,dim)
705 c----------------------------------------------------------------------------
706 subroutine reads(rekord,lancuch,wartosc,default)
708 character*(*) rekord,lancuch,wartosc,default
710 integer ilen,lenlan,lenrec,iread,ireade
716 iread=index(rekord,lancuch(:lenlan)//"=")
717 c print *,"rekord",rekord," lancuch",lancuch
718 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
724 c print *,"iread",iread
725 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
726 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
728 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
730 c print *,"iread",iread
731 if (iread.gt.lenrec) then
736 c print *,"ireade",ireade
737 do while (ireade.lt.lenrec .and.
738 & .not.iblnk(rekord(ireade:ireade)))
741 wartosc=rekord(iread:ireade)
744 c----------------------------------------------------------------------------
745 subroutine multreads(rekord,lancuch,tablica,dim,default)
748 character*(*) rekord,lancuch,tablica(dim),default
750 integer ilen,lenlan,lenrec,iread,ireade
759 iread=index(rekord,lancuch(:lenlan)//"=")
760 c print *,"rekord",rekord," lancuch",lancuch
761 c print *,"iread",iread," lenlan",lenlan," lenrec",lenrec
762 if (iread.eq.0) return
765 c print *,"iread",iread
766 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
767 do while (iread.le.lenrec .and. iblnk(rekord(iread:iread)))
769 c print *,"|",rekord(iread:iread),"|",iblnk(rekord(iread:iread))
771 c print *,"iread",iread
772 if (iread.gt.lenrec) return
774 c print *,"ireade",ireade
775 do while (ireade.lt.lenrec .and.
776 & .not.iblnk(rekord(ireade:ireade)))
779 tablica(i)=rekord(iread:ireade)
783 c----------------------------------------------------------------------------
784 subroutine split_string(rekord,tablica,dim,nsub)
786 integer dim,nsub,i,ii,ll,kk
787 character*(*) tablica(dim)
798 C Find the start of term name
800 do while (ii.le.ll .and. rekord(ii:ii).eq." ")
803 C Parse the name into TABLICA(i) until blank found
804 do while (ii.le.ll .and. rekord(ii:ii).ne." ")
806 tablica(i)(kk:kk)=rekord(ii:ii)
809 if (kk.gt.0) nsub=nsub+1
814 c--------------------------------------------------------------------------------
815 integer function iroof(n,m)
817 if (ii*m .lt. n) ii=ii+1