| 219 |
|
} |
| 220 |
|
|
| 221 |
|
void DumpReader::readFrame(int whichFrame) { |
| 222 |
+ |
int storageLayout = info_->getSnapshotManager()->getStorageLayout(); |
| 223 |
+ |
|
| 224 |
+ |
if (storageLayout & DataStorage::dslPosition) { |
| 225 |
+ |
needPos_ = true; |
| 226 |
+ |
} else { |
| 227 |
+ |
needPos_ = false; |
| 228 |
+ |
} |
| 229 |
+ |
|
| 230 |
+ |
if (storageLayout & DataStorage::dslVelocity) { |
| 231 |
+ |
needVel_ = true; |
| 232 |
+ |
} else { |
| 233 |
+ |
needVel_ = false; |
| 234 |
+ |
} |
| 235 |
+ |
|
| 236 |
+ |
if (storageLayout & DataStorage::dslAmat || storageLayout & DataStorage::dslElectroFrame) { |
| 237 |
+ |
needQuaternion_ = true; |
| 238 |
+ |
} else { |
| 239 |
+ |
needQuaternion_ = false; |
| 240 |
+ |
} |
| 241 |
+ |
|
| 242 |
+ |
if (storageLayout & DataStorage::dslAngularMomentum) { |
| 243 |
+ |
needAngMom_ = true; |
| 244 |
+ |
} else { |
| 245 |
+ |
needAngMom_ = false; |
| 246 |
+ |
} |
| 247 |
+ |
|
| 248 |
|
readSet(whichFrame); |
| 249 |
|
} |
| 250 |
|
|
| 511 |
|
|
| 512 |
|
if (nTokens < 14) { |
| 513 |
|
sprintf(painCave.errMsg, |
| 514 |
< |
"DumpReader Error: Not enough Tokens.\n"); |
| 514 |
> |
"DumpReader Error: Not enough Tokens.\n%s\n", line); |
| 515 |
|
painCave.isFatal = 1; |
| 516 |
|
simError(); |
| 517 |
|
} |
| 530 |
|
pos[0] = tokenizer.nextTokenAsDouble(); |
| 531 |
|
pos[1] = tokenizer.nextTokenAsDouble(); |
| 532 |
|
pos[2] = tokenizer.nextTokenAsDouble(); |
| 533 |
< |
integrableObject->setPos(pos); |
| 533 |
> |
if (needPos_) { |
| 534 |
> |
integrableObject->setPos(pos); |
| 535 |
> |
} |
| 536 |
|
|
| 537 |
|
vel[0] = tokenizer.nextTokenAsDouble(); |
| 538 |
|
vel[1] = tokenizer.nextTokenAsDouble(); |
| 539 |
|
vel[2] = tokenizer.nextTokenAsDouble(); |
| 540 |
< |
integrableObject->setVel(vel); |
| 541 |
< |
|
| 540 |
> |
if (needVel_) { |
| 541 |
> |
integrableObject->setVel(vel); |
| 542 |
> |
} |
| 543 |
> |
|
| 544 |
|
if (integrableObject->isDirectional()) { |
| 545 |
|
|
| 546 |
|
q[0] = tokenizer.nextTokenAsDouble(); |
| 559 |
|
} |
| 560 |
|
|
| 561 |
|
q.normalize(); |
| 562 |
< |
|
| 563 |
< |
integrableObject->setQ(q); |
| 564 |
< |
|
| 562 |
> |
if (needQuaternion_) { |
| 563 |
> |
integrableObject->setQ(q); |
| 564 |
> |
} |
| 565 |
> |
|
| 566 |
|
ji[0] = tokenizer.nextTokenAsDouble(); |
| 567 |
|
ji[1] = tokenizer.nextTokenAsDouble(); |
| 568 |
|
ji[2] = tokenizer.nextTokenAsDouble(); |
| 569 |
< |
integrableObject->setJ(ji); |
| 569 |
> |
if (needAngMom_) { |
| 570 |
> |
integrableObject->setJ(ji); |
| 571 |
> |
} |
| 572 |
|
} |
| 573 |
|
|
| 574 |
|
} |
| 610 |
|
hmat(2, 2) = tokenizer.nextTokenAsDouble(); |
| 611 |
|
s->setHmat(hmat); |
| 612 |
|
|
| 613 |
< |
//read chi and integrablOfChidt, they should apprear in pair |
| 613 |
> |
//read chi and integralOfChidt, they should apprear in pair |
| 614 |
|
if (tokenizer.countTokens() >= 2) { |
| 615 |
|
chi = tokenizer.nextTokenAsDouble(); |
| 616 |
|
integralOfChiDt = tokenizer.nextTokenAsDouble(); |