329 int isimp, jsimp, iatom, jatom, atomID, simpID;
336 int *qParent, nqParent;
337 int **sqmNew, *nsqmNew;
338 int *affAtoms, nAffAtoms;
339 int *dnqsm, *nqsmNew, **qsmNew;
341 VASSERT(thee != VNULL);
346 isimp = thee->
nsimp + num - 1;
349 if (isimp > thee->
msimp) {
351 thee->
nsqm = (
int*)Vmem_realloc(thee->
vmem, thee->
msimp,
sizeof(
int),
352 (
void **)&(thee->
nsqm), isimp);
353 VASSERT(thee->
nsqm != VNULL);
354 thee->
sqm = (
int**)Vmem_realloc(thee->
vmem, thee->
msimp,
sizeof(
int *),
355 (
void **)&(thee->
sqm), isimp);
356 VASSERT(thee->
sqm != VNULL);
361 for (isimp = thee->
nsimp; isimp<thee->
nsimp+num-1 ; isimp++) {
362 thee->
nsqm[isimp] = 0;
369 isimp = SS_id(simps[0]);
370 if (thee->
nsqm[isimp] == 0) {
371 for (isimp=1; isimp<num; isimp++) {
372 thee->
nsqm[SS_id(simps[isimp])] = 0;
379 isimp = SS_id(simps[0]);
380 nqParent = thee->
nsqm[isimp];
381 qParent = thee->
sqm[isimp];
383 sqmNew = (
int**)Vmem_malloc(thee->
vmem, num,
sizeof(
int *));
384 VASSERT(sqmNew != VNULL);
385 nsqmNew = (
int*)Vmem_malloc(thee->
vmem, num,
sizeof(
int));
386 VASSERT(nsqmNew != VNULL);
387 for (isimp=0; isimp<num; isimp++) nsqmNew[isimp] = 0;
391 for (iatom=0; iatom<nqParent; iatom++) {
393 atomID = qParent[iatom];
400 for (isimp=0; isimp<num; isimp++) {
401 simplex = simps[isimp];
402 if (Gem_pointInSimplex(thee->
gm, simplex, position)) {
413 for (isimp=0; isimp<num; isimp++) iatom += nsqmNew[isimp];
414 if (iatom < nqParent) {
415 Vnm_print(2,
"Vcsm_update: Lost %d (of %d) atoms!\n",
416 nqParent - iatom, nqParent);
421 for (isimp=0; isimp<num; isimp++) {
422 if (nsqmNew[isimp] > 0) {
423 sqmNew[isimp] = (
int*)Vmem_malloc(thee->
vmem, nsqmNew[isimp],
425 VASSERT(sqmNew[isimp] != VNULL);
430 for (isimp=0; isimp<num; isimp++) {
433 simplex = simps[isimp];
436 for (iatom=0; iatom<nqParent; iatom++) {
438 atomID = qParent[iatom];
441 if (Gem_pointInSimplex(thee->
gm, simplex, position)) {
442 sqmNew[isimp][jsimp] = atomID;
451 affAtoms = thee->
sqm[SS_id(simps[0])];
452 nAffAtoms = thee->
nsqm[SS_id(simps[0])];
458 dnqsm = (
int*)Vmem_malloc(thee->
vmem, nAffAtoms,
sizeof(
int));
459 VASSERT(dnqsm != VNULL);
460 nqsmNew = (
int*)Vmem_malloc(thee->
vmem, nAffAtoms,
sizeof(
int));
461 VASSERT(nqsmNew != VNULL);
462 qsmNew = (
int**)Vmem_malloc(thee->
vmem, nAffAtoms,
sizeof(
int*));
463 VASSERT(qsmNew != VNULL);
464 for (iatom=0; iatom<nAffAtoms; iatom++) {
466 atomID = affAtoms[iatom];
467 for (isimp=0; isimp<num; isimp++) {
468 for (jatom=0; jatom<nsqmNew[isimp]; jatom++) {
469 if (sqmNew[isimp][jatom] == atomID) dnqsm[iatom]++;
472 VASSERT(dnqsm[iatom] > -1);
475 for (iatom=0;iatom<nAffAtoms; iatom++) {
476 atomID = affAtoms[iatom];
477 qsmNew[iatom] = (
int*)Vmem_malloc(thee->
vmem,
478 (dnqsm[iatom] + thee->
nqsm[atomID]),
481 VASSERT(qsmNew[iatom] != VNULL);
485 for (isimp=0; isimp<num; isimp++) {
486 simpID = SS_id(simps[isimp]);
487 for (iatom=0; iatom<nsqmNew[isimp]; iatom++) {
488 atomID = sqmNew[isimp][iatom];
489 for (jatom=0; jatom<nAffAtoms; jatom++) {
490 if (atomID == affAtoms[jatom])
break;
492 if (jatom < nAffAtoms) {
493 qsmNew[jatom][nqsmNew[jatom]] = simpID;
499 for (iatom=0; iatom<nAffAtoms; iatom++) {
500 atomID = affAtoms[iatom];
501 for (isimp=0; isimp<thee->
nqsm[atomID]; isimp++) {
502 for (jsimp=0; jsimp<num; jsimp++) {
503 simpID = SS_id(simps[jsimp]);
504 if (thee->
qsm[atomID][isimp] == simpID)
break;
507 qsmNew[iatom][nqsmNew[iatom]] = thee->
qsm[atomID][isimp];
515 for (iatom=0; iatom<nAffAtoms; iatom++) {
516 atomID = affAtoms[iatom];
517 Vmem_free(thee->
vmem, thee->
nqsm[atomID],
sizeof(
int),
518 (
void **)&(thee->
qsm[atomID]));
519 thee->
qsm[atomID] = qsmNew[iatom];
520 thee->
nqsm[atomID] = nqsmNew[iatom];
522 for (isimp=0; isimp<num; isimp++) {
523 simpID = SS_id(simps[isimp]);
524 if (thee->
nsqm[simpID] > 0) Vmem_free(thee->
vmem, thee->
nsqm[simpID],
525 sizeof(
int), (
void **)&(thee->
sqm[simpID]));
526 thee->
sqm[simpID] = sqmNew[isimp];
527 thee->
nsqm[simpID] = nsqmNew[isimp];
530 Vmem_free(thee->
vmem, num,
sizeof(
int *), (
void **)&sqmNew);
531 Vmem_free(thee->
vmem, num,
sizeof(
int), (
void **)&nsqmNew);
532 Vmem_free(thee->
vmem, nAffAtoms,
sizeof(
int *), (
void **)&qsmNew);
533 Vmem_free(thee->
vmem, nAffAtoms,
sizeof(
int), (
void **)&nqsmNew);
534 Vmem_free(thee->
vmem, nAffAtoms,
sizeof(
int), (
void **)&dnqsm);