KTH framework for Nek5000 toolboxes; testing version  0.0.1
pstat2D_IO.f
Go to the documentation of this file.
1 
6 !=======================================================================
10  subroutine pstat2d_mfi_crd2d(fidl)
11  implicit none
12 
13  include 'SIZE'
14  include 'INPUT'
15  include 'RESTART'
16  include 'PARALLEL'
17  include 'PSTAT2D'
18 
19  ! global data structures
20  integer mid,mp,nekcomm,nekgroup,nekreal
21  common /nekmpi/ mid,mp,nekcomm,nekgroup,nekreal
22 
23  ! argument list
24  integer fidl
25 
26  ! local variables
27  integer il, jl, kl ! loop index
28  integer istepr ! timestep in restart file
29  integer ierr ! error mark
30  character*3 prefix ! file prefix
31  character*132 fname ! file name
32  character*132 bname ! base name
33  character*6 str ! file number
34  character*4 sdummy
35  character*132 hdr ! header
36 
37  real*4 test_pattern ! byte key
38  integer*8 offs0, offs ! offset
39 
40  real*4 rbuff(4*lelt) ! buffer for element centres read
41 
42  ! functions
43  logical if_byte_swap_test
44  integer igl_running_sum
45 
46 !#define DEBUG
47 #ifdef DEBUG
48  character*3 str1, str2
49  integer iunit
50  ! call number
51  integer icalld
52  save icalld
53  data icalld /0/
54 #endif
55 !-----------------------------------------------------------------------
56  ! no regular mesh; important for file name generation
57  ifreguo = .false.
58 
59  call io_init
60 
61  ierr=0
62  ! open files on i/o nodes
63  prefix='c2D'
64  ! get base name (SESSION)
65  bname = trim(adjustl(session))
66  call io_mfo_fname(fname,bname,prefix,ierr)
67 
68  write(str,'(i5.5)') fidl
69  fname = 'DATA/'//trim(fname)//trim(str)
70 
71  fid0 = 0
72  call addfid(fname,fid0)
73  ! add ending character; required by C
74  fname = trim(fname)//char(0)
75 
76  ! open file and read header on master node
77  if (nid.eq.pid00) then
78  call byte_open(fname,ierr)
79  ! read header
80  if (ierr.eq.0) then
81  call blank (hdr,iheadersize)
82  call byte_read (hdr,iheadersize/4,ierr)
83  endif
84  if (ierr.eq.0) then
85  call byte_read (test_pattern,1,ierr)
86  if_byte_sw = if_byte_swap_test(test_pattern,ierr) ! determine endianess
87  endif
88  ! close the file
89  if (ierr.eq.0) call byte_close(ierr)
90  endif
91  call mntr_check_abort(pstat_id,ierr,
92  $ 'Error reading header file in pstat_mfi_crd2D.')
93 
94  ! broadcast data
95  call bcast(hdr,iheadersize)
96  call bcast(if_byte_sw,lsize)
97 
98  ! extract data from header
99  read(hdr,*) sdummy,wdsizr,nelr,nelgr,timer,istepr,
100  $ ifiler,nfiler
101 
102  ! check element number
103  if (nelgr.gt.(mp*lelt)) call mntr_abort(pstat_id,
104  $ 'Insufficient array sizes in pstat_mfi_crd2D.')
105 
106  ! initialise I/O data
107  ! I support mpi IO only
108  if (nfiler.ne.1) call mntr_abort(pstat_id,
109  $ 'Only MPI I/O supported in pstat_mfi_crd2D.')
110 
111  ifmpiio = .true.
112 
113  pid0r = nid
114  pid1r = nid
115  offs0 = iheadersize + 4
116  nfiler = np
117 
118  ! number of elements to read
119  nelr = nelgr/np
120  do il = 0,mod(nelgr,np)-1
121  if(il.eq.nid) nelr = nelr + 1
122  enddo
123  nelbr = igl_running_sum(nelr) - nelr
124 
125  call byte_open_mpi(fname,ifh_mbyte,.true.,ierr)
126 
127  call mntr_check_abort(pstat_id,ierr,
128  $ 'Error parrallel opening file in pstat_mfi_crd2D.')
129 
130  ! read global element number
131  offs = offs0 + nelbr*isize
132  call byte_set_view(offs,ifh_mbyte)
133  call byte_read_mpi(er,nelr,-1,ifh_mbyte,ierr)
134  call mntr_check_abort(pstat_id,ierr,
135  $ 'Error reading glnel in pstat_mfi_crd2D.')
136  if(if_byte_sw) call byte_reverse(er,nelr,ierr)
137  do il=1,nelr
138  pstat_gnel(il) = er(il)
139  enddo
140 
141  ! read global element level
142  offs = offs0 + (nelgr+nelbr)*isize
143  call byte_set_view(offs,ifh_mbyte)
144  call byte_read_mpi(er,nelr,-1,ifh_mbyte,ierr)
145  call mntr_check_abort(pstat_id,ierr,
146  $ 'Error reading level in pstat_mfi_crd2D.')
147  if(if_byte_sw) call byte_reverse(er,nelr,ierr)
148  do il=1,nelr
149  pstat_lev(il) = er(il)
150  enddo
151 
152  ! read global element centres
153  offs = offs0 + 2*nelgr*isize+ nelbr*2*wdsizr
154  kl = 2*nelr*wdsizr/4
155  call byte_set_view(offs,ifh_mbyte)
156  call byte_read_mpi(rbuff,kl,-1,ifh_mbyte,ierr)
157  call mntr_check_abort(pstat_id,ierr,
158  $ 'Error reading element centres in pstat_mfi_crd2D.')
159  if(if_byte_sw) call byte_reverse(rbuff,kl,ierr)
160  if (wdsizr.eq.4) then ! COPY
161  call copy4r(pstat_cnt,rbuff,2*nelr)
162  else
163  call copy (pstat_cnt,rbuff,2*nelr)
164  endif
165 
166  call byte_close_mpi(ifh_mbyte,ierr)
167  call mntr_check_abort(pstat_id,ierr,
168  $ 'Error parrallel closing file in pstat_mfi_crd2D.')
169 
170  ! save local and global element count
171  pstat_nelg = nelgr
172  pstat_nel = nelr
173 
174 #ifdef DEBUG
175  ! for testing
176  ! to output refinement
177  icalld = icalld+1
178  call io_file_freeid(iunit, ierr)
179  write(str1,'(i3.3)') nid
180  write(str2,'(i3.3)') icalld
181  open(unit=iunit,file='CRDmsh.txt'//str1//'i'//str2)
182 
183  write(iunit,*) nelgr, nelr
184  do il=1,nelr
185  write(iunit,*) il,pstat_gnel(il),pstat_lev(il),
186  $ (pstat_cnt(jl,il),jl=1,2)
187  enddo
188 
189  close(iunit)
190 #endif
191 #undef DEBUG
192 
193  return
194  end subroutine
195 !=======================================================================
199  implicit none
200 
201  include 'SIZE'
202  include 'INPUT'
203  include 'RESTART'
204  include 'PARALLEL'
205  include 'FRAMELP'
206  include 'PSTAT2D'
207 
208  ! global data structures
209  integer mid,mp,nekcomm,nekgroup,nekreal
210  common /nekmpi/ mid,mp,nekcomm,nekgroup,nekreal
211 
212  ! local variables
213  integer il, jl ! loop index
214  integer ierr ! error flag
215  integer ldiml ! dimesion of interpolation file
216  integer nptsr ! number of points in the file
217  integer npass ! number of messages to send
218  real rtmp_pts(ldim,lhis)
219  real*4 rbuffl(2*ldim*lhis)
220  real rtmp1, rtmp2
221  character*132 fname ! file name
222  integer hdrl
223  parameter(hdrl=32)
224  character*32 hdr ! file header
225  character*4 dummy
226  real*4 bytetest
227 
228  ! functions
229  logical if_byte_swap_test
230 
231 !#define DEBUG
232 #ifdef DEBUG
233  character*3 str1, str2
234  integer iunit
235  ! call number
236  integer icalld
237  save icalld
238  data icalld /0/
239 #endif
240 !-----------------------------------------------------------------------
241  ! master opens files and gets point number
242  ierr = 0
243  if (nid.eq.pid00) then
244  !open the file
245  fname='DATA/int_pos'
246  call byte_open(fname,ierr)
247 
248  ! read header
249  call blank (hdr,hdrl)
250  call byte_read (hdr,hdrl/4,ierr)
251  if (ierr.ne.0) goto 101
252 
253  ! big/little endian test
254  call byte_read (bytetest,1,ierr)
255  if(ierr.ne.0) goto 101
256  if_byte_sw = if_byte_swap_test(bytetest,ierr)
257  if(ierr.ne.0) goto 101
258 
259  ! extract header information
260  read(hdr,*,iostat=ierr) dummy, wdsizr, ldiml, nptsr
261  endif
262 
263  101 continue
264 
265  call mntr_check_abort(pstat_id,ierr,
266  $ 'pstat_mfi_interp: Error opening point files')
267 
268  ! broadcast header data
269  call bcast(wdsizr,isize)
270  call bcast(ldiml,isize)
271  call bcast(nptsr,isize)
272  call bcast(if_byte_sw,lsize)
273 
274  ! check dimension consistency
275  if (ldim.ne.ldiml) call mntr_check_abort(pstat_id,
276  $ 'pstat_mfi_interp: Inconsisten dimension.')
277 
278  ! calculate point distribution; I assume it is post-processing
279  ! done on small number of cores, so I assume nptsr >> mp
280  pstat_nptot = nptsr
281  pstat_npt = nptsr/mp
282  if (pstat_npt.gt.0) then
283  pstat_npt1 = mod(pstat_nptot,mp)
284  else
285  pstat_npt1 = pstat_nptot
286  endif
287  if (nid.lt.pstat_npt1) pstat_npt = pstat_npt +1
288 
289  ! stamp logs
290  call mntr_logi(pstat_id,lp_prd,
291  $ 'Interpolation point number :', pstat_nptot)
292 
293  ierr = 0
294  if (pstat_npt.gt.lhis) ierr = 1
295  call mntr_check_abort(pstat_id,ierr,
296  $ 'pstat_mfi_interp: lhis too small')
297 
298  ! read and redistribute points
299  ! this part is not optimised, but it is post-processing
300  ! done locally, so I don't care
301  if (nid.eq.pid00) then
302  if (pstat_nptot.gt.0) then
303  ! read points for the master rank
304  ldiml = ldim*pstat_npt*wdsizr/4
305  call byte_read (rbuffl,ldiml,ierr)
306 
307  ! get byte shift
308  if (if_byte_sw) then
309  if(wdsizr.eq.8) then
310  call byte_reverse8(rbuffl,ldiml,ierr)
311  else
312  call byte_reverse(rbuffl,ldiml,ierr)
313  endif
314  endif
315 
316  ! copy data
317  ldiml = ldim*pstat_npt
318  if (wdsizr.eq.4) then
319  call copy4r(pstat_int_pts,rbuffl,ldiml)
320  else
321  call copy(pstat_int_pts,rbuffl,ldiml)
322  endif
323 
324  ! redistribute rest of points
325  npass = min(mp,pstat_nptot)
326  do il = 1,npass-1
327  nptsr = pstat_npt
328  if (pstat_npt1.gt.0.and.il.ge.pstat_npt1) then
329  nptsr = pstat_npt -1
330  endif
331  ! read points for the slave rank
332  ldiml = ldim*nptsr*wdsizr/4
333  call byte_read (rbuffl,ldiml,ierr)
334 
335  ! get byte shift
336  if (if_byte_sw) then
337  if(wdsizr.eq.8) then
338  call byte_reverse8(rbuffl,ldiml,ierr)
339  else
340  call byte_reverse(rbuffl,ldiml,ierr)
341  endif
342  endif
343 
344  ! copy data
345  ldiml = ldim*nptsr
346  if (wdsizr.eq.4) then
347  call copy4r(rtmp_pts,rbuffl,ldiml)
348  else
349  call copy(rtmp_pts,rbuffl,ldiml)
350  endif
351 
352  ! send data
353  ldiml = ldiml*wdsizr
354  call csend(il,rtmp_pts,ldiml,il,jl)
355  enddo
356  endif
357  else
358  if (pstat_npt.gt.0) then
359  call crecv2(nid,pstat_int_pts,ldim*pstat_npt*wdsize,0)
360  endif
361  endif
362 
363  ! master closes files
364  if (nid.eq.pid00) then
365  call byte_close(ierr)
366  endif
367 
368 #ifdef DEBUG
369  ! for testing
370  ! to output refinement
371  icalld = icalld+1
372  call io_file_freeid(iunit, ierr)
373  write(str1,'(i3.3)') nid
374  write(str2,'(i3.3)') icalld
375  open(unit=iunit,file='INTpos.txt'//str1//'i'//str2)
376 
377  write(iunit,*) pstat_nptot, pstat_npt
378  do il=1, pstat_npt
379  write(iunit,*) il, (pstat_int_pts(jl,il),jl=1,ldim)
380  enddo
381 
382  close(iunit)
383 #endif
384 #undef DEBUG
385 
386  return
387  end subroutine
388 !=======================================================================
392  implicit none
393 
394  include 'SIZE'
395  include 'INPUT'
396  include 'RESTART'
397  include 'PARALLEL'
398  include 'GEOM'
399  include 'PSTAT2D'
400 
401  ! global data structures
402  integer mid,mp,nekcomm,nekgroup,nekreal
403  common /nekmpi/ mid,mp,nekcomm,nekgroup,nekreal
404 
405  ! local variables
406  integer il, jl, kl ! loop index
407  integer ierr ! error flag
408  character*132 fname ! file name
409  character*500 head ! file header
410  character*500 ftm ! header format
411  real*4 test
412  parameter(test=6.54321)
413 
414  integer npass ! number of messages to send for single field
415  integer npts ! number of points for transfer
416  integer itmp ! temporary variables
417  real rtmpv(lhis*ldim), rtmpv1(lhis*ldim), rtmp
418  real*4 rtmpv2(2*lhis*ldim)
419  equivalence(rtmpv1,rtmpv2)
420 
421  real lx,ly,lz ! box dimensions
422  integer nlx,nly,nlz ! for tensor product meshes
423  integer iavfr
424 
425  integer wdsl, isl ! double and integer sizes
426 
427  ! functions
428  real glmin, glmax
429 !-----------------------------------------------------------------------
430  ! double and integer sizes
431  wdsl = wdsize/4
432  isl = isize/4
433 
434  ! gether information for file header
435  il = lx1*ly1*lz1*nelt
436  lx = glmax(xm1,il) - glmin(xm1,il)
437  ly = glmax(ym1,il) - glmin(ym1,il)
438  if (if3d) then
439  lz = glmax(zm1,il) - glmin(zm1,il)
440  else
441  lz = 0.0 ! this should be changed
442  endif
443  ! for tensor product meshes; element count
444  nlx = pstat_nelg
445  nly = 1
446  nlz = 1
447  ! frequency of averaging in steps
448  iavfr = pstat_nstep
449  ! stat averagign time
450  rtmp = pstat_etime-pstat_stime
451  ! this is far from optimal, but for post-processing I do not care
452  ! master opens files and writes header
453  ierr = 0
454  if (nid.eq.pid00) then
455  !open the file
456  fname='int_fld'
457  call byte_open(fname,ierr)
458 
459  if (ierr.ne.0) goto 20
460 
461  ! write file's header
462  ftm="('#iv1',1x,i1,1x,"//
463  $ "1p,'(Re =',e17.9,') (Lx, Ly, Lz =',3e17.9,"//
464  $ "') (nelx, nely, nelz =',3i9,') (Polynomial order =',3i9,"//
465  $ "') (Nstat =',i9,') (Nderiv =',i9,') (start time =',e17.9,"//
466  $ "') (end time =',e17.9,') (effective average time =',e17.9,"//
467  $ "') (time step =',e17.9,') (nrec =',i9"//
468  $ "') (time interval =',e17.9,') (npoints =',i9,')')"
469  write(head,ftm) wdsize,
470  $ 1.0/param(2),lx,ly,lz,nlx,nly,nlz,lx1,ly1,lz1,
471  $ pstat_svar,pstat_dvar,pstat_stime,pstat_etime,rtmp/iavfr,
472  $ rtmp/pstat_istepr,pstat_istepr/iavfr,rtmp,pstat_nptot
473  call byte_write(head,115,ierr)
474 
475  ! write big/little endian test
476  call byte_write(test,1,ierr)
477 
478  if (ierr.ne.0) goto 20
479 
480  ! write parameter set with all the digits
481  call byte_write(1.0/param(2),wdsl,ierr)
482  call byte_write(lx,wdsl,ierr)
483  call byte_write(ly,wdsl,ierr)
484  call byte_write(lz,wdsl,ierr)
485  call byte_write(nlx,isl,ierr)
486  call byte_write(nly,isl,ierr)
487  call byte_write(nlz,isl,ierr)
488  call byte_write(lx1,isl,ierr)
489  call byte_write(ly1,isl,ierr)
490  call byte_write(lz1,isl,ierr)
491  call byte_write(pstat_svar,isl,ierr)
492  call byte_write(pstat_dvar,isl,ierr)
493  call byte_write(pstat_stime,wdsl,ierr)
494  call byte_write(pstat_etime,wdsl,ierr)
495  call byte_write(rtmp/iavfr,wdsl,ierr)
496  call byte_write(rtmp/pstat_istepr,wdsl,ierr)
497  call byte_write(pstat_istepr/iavfr,isl,ierr)
498  call byte_write(rtmp,wdsl,ierr)
499  call byte_write(pstat_nptot,isl,ierr)
500  endif
501 
502  20 continue
503  call mntr_check_abort(pstat_id,ierr,
504  $ 'Error opening interpolation file in pstat_mfo_interp.')
505 
506  ! write down point coordinates
507  if (nid.eq.0) then
508  ! first master writes its own data
509  if (wdsl.eq.2) then
510  call copy(rtmpv1,pstat_int_pts,pstat_npt*ldim)
511  call byte_write(rtmpv2,pstat_npt*ldim*wdsl,ierr)
512  else
513  call copyx4(rtmpv2,pstat_int_pts,pstat_npt*ldim)
514  call byte_write(rtmpv2,pstat_npt*ldim,ierr)
515  endif
516 
517  ! geather data from slaves
518  npass = min(mp,pstat_nptot)
519  do jl = 1,npass-1
520  npts = pstat_npt
521  if (pstat_npt1.gt.0.and.jl.ge.pstat_npt1) then
522  npts = pstat_npt -1
523  endif
524  call csend(jl,itmp,isize,jl,kl) ! hand shaiking
525  call crecv2(jl,rtmpv,npts*ldim*wdsize,jl)
526 
527  ! write data
528  if (wdsl.eq.2) then
529  call copy(rtmpv1,rtmpv,npts*ldim)
530  call byte_write(rtmpv2,npts*ldim*wdsl,ierr)
531  else
532  call copyx4(rtmpv2,rtmpv,npts*ldim)
533  call byte_write(rtmpv2,npts*ldim,ierr)
534  endif
535  enddo
536  else
537  ! slaves send their data
538  if (pstat_npt.gt.0) then
539  call crecv2(nid,itmp,isize,0) ! hand shaiking
540  call csend(nid,pstat_int_pts,pstat_npt*ldim*wdsize,0,itmp)
541  endif
542  endif
543 
544  ! geather the data and write it down to the file
545  ! averaged fields
546  do il = 1,pstat_svar
547  if (nid.eq.0) then
548  ! first master writes its own data
549  if (wdsl.eq.2) then
550  call copy(rtmpv1,pstat_int_avg(1,il),pstat_npt)
551  call byte_write(rtmpv2,pstat_npt*wdsl,ierr)
552  else
553  call copyx4(rtmpv2,pstat_int_avg(1,il),pstat_npt)
554  call byte_write(rtmpv2,pstat_npt,ierr)
555  endif
556 
557  ! geather data from slaves
558  npass = min(mp,pstat_nptot)
559  do jl = 1,npass-1
560  npts = pstat_npt
561  if (pstat_npt1.gt.0.and.jl.ge.pstat_npt1) then
562  npts = pstat_npt -1
563  endif
564  call csend(jl,itmp,isize,jl,kl) ! hand shaiking
565  call crecv2(jl,rtmpv,npts*wdsize,jl)
566 
567  ! write data
568  if (wdsl.eq.2) then
569  call copy(rtmpv1,rtmpv,npts)
570  call byte_write(rtmpv2,npts*wdsl,ierr)
571  else
572  call copyx4(rtmpv2,rtmpv,npts)
573  call byte_write(rtmpv2,npts,ierr)
574  endif
575  enddo
576  else
577  ! slaves send their data
578  if (pstat_npt.gt.0) then
579  call crecv2(nid,itmp,isize,0) ! hand shaiking
580  call csend(nid,pstat_int_avg(1,il),pstat_npt*wdsize,0,
581  $ itmp)
582  endif
583  endif
584  enddo
585 
586  call mntr_check_abort(pstat_id,ierr,
587  $ 'Error writing interpolated stat. file in pstat_mfo_interp.')
588 
589  ! fields derivatives
590  do il = 1,pstat_dvar
591  if (nid.eq.0) then
592  ! first master writes its own data
593  if (wdsl.eq.2) then
594  call copy(rtmpv1,pstat_int_der(1,il),pstat_npt)
595  call byte_write(rtmpv2,pstat_npt*wdsl,ierr)
596  else
597  call copyx4(rtmpv2,pstat_int_der(1,il),pstat_npt)
598  call byte_write(rtmpv2,pstat_npt,ierr)
599  endif
600 
601  ! geather data from slaves
602  npass = min(mp,pstat_nptot)
603  do jl = 1,npass-1
604  npts = pstat_npt
605  if (pstat_npt1.gt.0.and.jl.ge.pstat_npt1) then
606  npts = pstat_npt -1
607  endif
608  call csend(jl,itmp,isize,jl,kl) ! hand shaiking
609  call crecv2(jl,rtmpv,npts*wdsize,jl)
610 
611  ! write data
612  if (wdsl.eq.2) then
613  call copy(rtmpv1,rtmpv,npts)
614  call byte_write(rtmpv2,npts*wdsl,ierr)
615  else
616  call copyx4(rtmpv2,rtmpv,npts)
617  call byte_write(rtmpv2,npts,ierr)
618  endif
619  enddo
620  else
621  ! slaves send their data
622  if (pstat_npt.gt.0) then
623  call crecv2(nid,itmp,isize,0) ! hand shaiking
624  call csend(nid,pstat_int_der(1,il),pstat_npt*wdsize,0,
625  $ itmp)
626  endif
627  endif
628  enddo
629 
630  call mntr_check_abort(pstat_id,ierr,
631  $ 'Error writing interpolated deriv. file in pstat_mfo_interp.')
632 
633  ! master closes the file
634  if (nid.eq.pid00) then
635  call byte_close(ierr)
636  endif
637 
638  call mntr_check_abort(pstat_id,ierr,
639  $ 'Error closing interpolation file in pstat_mfo_interp.')
640 
641 
642  return
643  end subroutine
644 !=======================================================================
#define byte_reverse8
Definition: byte.c:34
#define byte_open
Definition: byte.c:35
#define byte_reverse
Definition: byte.c:33
#define byte_write
Definition: byte.c:39
#define byte_close
Definition: byte.c:36
#define byte_read
Definition: byte.c:38
subroutine byte_open_mpi(fnamei, mpi_fh, ifro, ierr)
Definition: byte_mpi.f:13
subroutine byte_read_mpi(buf, icount, iorank, mpi_fh, ierr)
Definition: byte_mpi.f:48
subroutine byte_close_mpi(mpi_fh, ierr)
Definition: byte_mpi.f:84
subroutine byte_set_view(ioff_in, mpi_fh)
Definition: byte_mpi.f:97
subroutine crecv2(mtype, buf, lenm, jnid)
Definition: comm_mpi.f:333
subroutine csend(mtype, buf, len, jnid, jpid)
Definition: comm_mpi.f:303
subroutine bcast(buf, len)
Definition: comm_mpi.f:431
subroutine io_file_freeid(iunit, ierr)
Get free file unit number and store max unit value.
Definition: io_tools.f:47
subroutine io_mfo_fname(fname, bname, prefix, ierr)
Generate file name according to nek rulles without opening the file.
Definition: io_tools.f:109
subroutine mntr_logi(mid, priority, logs, ivar)
Write log message adding single integer.
Definition: mntrlog.f:709
subroutine mntr_abort(mid, logs)
Abort simulation.
Definition: mntrlog.f:837
subroutine mntr_check_abort(mid, ierr, logs)
Abort simulation.
Definition: mntrlog.f:856
subroutine pstat2d_mfi_crd2d(fidl)
Read nonconforming data from the file.
Definition: pstat2D_IO.f:11
subroutine pstat2d_mfo_interp
Geather data and write it down.
Definition: pstat2D_IO.f:392
subroutine pstat2d_mfi_interp
Read interpolation points position and redistribute them.
Definition: pstat2D_IO.f:199
subroutine addfid(fname, fid)
Definition: ic.f:2512
subroutine copy(a, b, n)
Definition: math.f:260
subroutine blank(A, N)
Definition: math.f:19
subroutine copy4r(a, b, n)
Definition: prepost.f:568
subroutine copyx4(a, b, n)
Definition: prepost.f:560
subroutine io_init
Definition: prepost.f:1024