This function is meant to enable the parallel writing (with multiple threads) of several type 9 segments (discrete states of the positions and velocities, Lagrange interpolation with unequal timesteps) to the SPK file associated to the ephemeris descriptor eph.

It reserves space in the file for target_count segments, each segment associated to a target in the targets array. Each target has its own number of records specified in the record_counts array, and its own segment identifier specified in the segids array. All the targets share the same center, frame, start_..._tdb, end_..._tdb and deg parameters.

The array targets, record_counts and segids must be of size target_count.

The reservation id returned by this function must be used in the function writeph_spk9_par_write() to write in the corresponding reserved space. In addition, the function writeph_spk9_par_write() will require a target_index, which is the index of the target in the targets array used in this function.

A call to writeph_spk9_par_reserve is always performed by a single thread and is followed by several calls to writeph_spk9_par_write() by one or several threads.

The following example creates a new ephemeris file ephemeris.bsp with segment of type 9 for the heliocentric coordinates of Mercury and Venus using OpenMP.

USE, INTRINSIC :: ISO_C_BINDING
use calceph
TYPE(C_PTR) :: weph
REAL(8) :: jd_start, jd_end
INTEGER frame, body, k, ret
REAL(8), dimension(6) :: pos_vel !  size  = 6 components
REAL(8), dimension(1) :: epochs !  size  = 1 date
INTEGER, dimension(2) :: record_counts, targets
INTEGER target_count, reservation
REAL(8), dimension(2) :: len_timespan
CHARACTER(len=40), dimension (2) :: segids
INTEGER interpolation_degree

frame = 1 ! ICRF
target_count = 2
targets(1) = NAIFID_MERCURY
targets(2) = NAIFID_VENUS
record_counts(1) = 10
record_counts(2) = 20
segids(1) = "seg_mercury"//C_NULL_CHAR
segids(2) = "seg_venus"//C_NULL_CHAR
interpolation_degree = 7
jd_start = 2460000
jd_end = jd_start+10

weph = writeph_spk_create("ephemeris.bsp"//C_NULL_CHAR, "planet_2"//C_NULL_CHAR,0)
if (C_ASSOCIATED(weph)) then

     reservation = writeph_spk9_seq_reserve(weph, target_count, targets, NAIFID_SUN,
                            frame, jd_start, 0.0, jd_end, 0.0,
                            len_timespan, record_counts, interpolation_degree, segids)

     !$omp parallel for private(body)
     do body=0, target_count
          !$omp parallel for private(k, pos_vel)
          do k=0, record_counts(body)-1
              ! ... fill the array epochs and pos_vel with the positions and velocities  ...
              ! epochs (0) = ...
              ! pos_vel(...) =...
              ret = writeph_spk9_par_write(weph, reservation, body,  k, 1,  pos_vel, epochs)
          enddo
     enddo
     call writeph_close(weph)
endif