puts "========="
puts "OCC24639"
puts "========="
puts ""
###########################################################
# Parallelization FillDS part of BO
###########################################################

set N 5
set dC 1.
set aC [expr $N + $dC]

#------------------------------------------
# z
vertex v1 0 0 0 
vertex v2 0 0 $aC 
edge ez v1 v2

set qz {}
for {set i 0} {$i < $N} {incr i} {
 for {set j 0} {$j < $N} {incr j} {
  tcopy ez ez_${i}_{$j}
  ttranslate ez_${i}_{$j} [expr $i + ${dC}] [expr $j + $dC] 0.
  lappend qz ez_${i}_{$j}
 }
}
eval compound $qz bz

#------------------------------------------
# x
vertex v1 0. 0. 0. 
vertex v2 $aC  0. 0. 
edge ex v1 v2

set qx {}
for {set i 0} {$i < $N} {incr i} {
 for {set j 0} {$j < $N} {incr j} {
  tcopy ex ex_${i}_{$j}
  ttranslate ex_${i}_{$j} 0. [expr $i + $dC] [expr $j + $dC]
  lappend qx ex_${i}_{$j}
 }
}
eval compound $qx bx

#------------------------------------------
# y
vertex v1 0. 0. 0. 
vertex v2 0. $aC 0.  
edge ey v1 v2

set qy {}
for {set i 0} {$i < $N} {incr i} {
 for {set j 0} {$j < $N} {incr j} {
  tcopy ey ey_${i}_{$j}
  ttranslate ey_${i}_{$j} [expr $i + $dC] 0. [expr $j + $dC]
  lappend qy ey_${i}_{$j}
 }
}
eval compound $qy by

nurbsconvert bx bx
nurbsconvert by by
nurbsconvert bz bz

# add the arguments
bclearobjects
bcleartools
baddcompound bx
baddcompound by
baddcompound bz

# intersection step in serial mode
brunparallel 0
regexp {Tps: +([-0-9.+eE]+)} [bfillds -t] full Tps1

# intersection step in parallel mode
brunparallel 1
regexp {Tps: +([-0-9.+eE]+)} [bfillds -t] full Tps2

# parallel execution is expected to be at least 20% faster than serial execution
if {${Tps2} > [dval 0.8*${Tps1}]} {
  puts "Error: Parallel execution does not give expected performance speed up"
}
