Fortran SFF API to data I/O streams in C++

◆ sff_wtracefi__()

int sff_wtracefi__ ( integer lu,
char *  wid2line,
integer nsamp,
real fdata,
integer idata,
logical last,
integer nline,
char *  lines,
char *  cs,
real c1,
real c2,
real c3,
integer nstack,
integer ierr,
ftnlen  wid2line_len,
ftnlen  lines_len,
ftnlen  cs_len 
)

Write one trace of data with FREE block and INFO line.

Description from stuff.f:

c----------------------------------------------------------------------
subroutine sff_WTraceFI(lu,
& wid2line, nsamp, fdata, idata, last,
& nline, lines,
& cs, c1, c2, c3, nstack, ierr)
c
c Write one data block starting with DAST line.
c Write also FREE block and INFO line.
c The File will be closed after writing the last trace.
c
c input
c lu logical file unit
c wid2line valid WID2 line
c nsamp number of samples
c fdata data array
c last must be true is the trace to be written is the
c last one in this file
c nline number of FREE block lines
c lines FREE block lines
c cs coordinate system
c c1, c2, c3 receiver coordinates
c nstack number of stacks
c
c ouput:
c ierr error status (ok: ierr=0)
c
c workspace:
c idata fdata will be converted to idata using sff_f2i
c (both array may be in same memory space - see
c comments on sff_f2i)
c
integer lu, nsamp, idata(nsamp), nline, nstack
real fdata(nsamp), c1, c2, c3
logical last
character wid2line*132, lines(nline)*80, cs*1
c----------------------------------------------------------------------

Definition at line 90 of file fapid_sff_wtracefi.cc.

References fapidxx::OFileUnits::close(), fapidxx::freeblock(), fapidxx::ostreammanager, and fapidxx::WID2container::wid2.

95 {
96  int retval=0;
97  *ierr=0;
98  try {
99  datrw::oanystream &os=ostreammanager(static_cast<int>(*lu));
100  WID2container wid2c(wid2line, wid2line_len);
101  unsigned int nsamples=static_cast<unsigned int>(*nsamp);
102  os << wid2c.wid2;
103  if (os.handlesinfo())
104  {
105  sff::INFO info;
106  info.cs=sff::coosysID(*cs);
107  info.cx=static_cast<double>(*c1);
108  info.cy=static_cast<double>(*c2);
109  info.cz=static_cast<double>(*c3);
110  info.nstacks=static_cast<int>(*nstack);
111  os << info;
112  }
113  if (os.handlestracefree())
114  {
115  sff::FREE tracefree=freeblock(nline, lines, lines_len);
116  os << tracefree;
117  }
118  aff::LinearShape shape(0, nsamples-1, 0);
119  datrw::Tfseries series(shape, aff::SharedHeap<real>(fdata, *nsamp));
120  os << series;
121  if (*last) ostreammanager.close(static_cast<int>(*lu));
122  }
123  catch (...) {
124  *ierr=1;
125  }
126  return(retval);
127 } // int sff_wtracefi__
sff::FREE freeblock(integer *nline, char *lines, ftnlen lines_len)
create C++ FREE block from Fortran FREE lines
Definition: helper.cc:150
This struct is used to pass WID2 line data within libfapidxx.
Definition: wid2container.h:62
::fapidxx::OFileUnits ostreammanager
the global ostream manager
Definition: fileunit.cc:51
void close(const int &unit)
close the file associated with this file unit
Definition: fileunit.cc:162
Here is the call graph for this function: