307 {
308 int dbgFn = 0;
309 int fstatus;
310
312
313
316 if (fstatus) {
317 neBEMMessage(
"neBEMReadGeometry - problem reading stored Primitives.\n");
318 return -1;
319 }
321 return 0;
322 }
323
324 printf("geometry inputs ...\n");
326 printf("reading geometry possible only after initialization ...\n");
327 return -1;
328 }
329
333
335 return (-1);
336 }
337
341
342
343
344
345
346
347
348
349
415
416
417 int nvertex, volref1, volref2, volmax = 0;
418#ifdef __cplusplus
422#else
424#endif
425 double xnorm, ynorm, znorm;
427#ifdef __cplusplus
429 zvert.data(), &xnorm, &ynorm, &znorm, &volref1,
430 &volref2);
431#else
433 &xnorm, &ynorm, &znorm, &volref1, &volref2);
434#endif
435 if (fstatus != 0) {
437 return -1;
438 }
439 if (volmax < volref1) {
440 volmax = volref1;
441 }
442 if (volmax < volref2) {
443 volmax = volref2;
444 }
445
447 printf("Number of vertices for primitive %d exceeds %d!\n", prim,
449 printf("Returning to garfield ...\n");
450 return (-1);
451 }
452
455 for (
int vert = 0; vert <
NbVertices[prim]; ++vert) {
456 XVertex[prim][vert] = xvert[vert];
457 YVertex[prim][vert] = yvert[vert];
458 ZVertex[prim][vert] = zvert[vert];
459 }
461
466 }
472 }
475
476
478 printf("neBEM:\tprimitive %d between volumes %d, %d has %d vertices\n",
479 prim, volref1, volref2, nvertex);
480 for (int ivertex = 0; ivertex < nvertex; ivertex++) {
481 printf("\tnode %d (%g,%g,%g)\n", ivertex, xvert[ivertex],
482 yvert[ivertex], zvert[ivertex]);
483 }
484 printf("\tnormal vector: (%g,%g,%g)\n", xnorm, ynorm, znorm);
485 }
486
487
488
489
490
491
492
493
494
495 int shape1, material1, boundarytype1;
496 double epsilon1, potential1, charge1;
497 if (volref1 == -1) {
498
500 return -1;
501 } else {
503 &potential1, &charge1, &boundarytype1);
504 }
506 printf("\tvolref1: %d\n", volref1);
507 printf("\t\tboundarytype1: %d, shape1: %d, material1: %d\n",
508 boundarytype1, shape1, material1);
509 printf("\t\tepsilon1: %lg, potential1: %lg, charge1: %lg\n", epsilon1,
510 potential1, charge1);
511 }
512
513 int shape2, material2, boundarytype2;
514 double epsilon2, potential2, charge2;
515 if (volref2 == -1) {
516 shape2 = 0;
517 material2 = 11;
518 epsilon2 = 1.0;
519 potential2 = 0.0;
520 charge2 = 0.0;
521 boundarytype2 = 0;
522 } else {
524 &potential2, &charge2, &boundarytype2);
525 }
527 printf("\tvolref2: %d\n", volref2);
528 printf("\t\tboundarytype2: %d, shape2: %d, material2: %d\n",
529 boundarytype2, shape2, material2);
530 printf("\t\tepsilon2: %lg, potential2: %lg, charge2: %lg\n", epsilon2,
531 potential2, charge2);
532 }
533
534
535
536
537
538
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571 switch (boundarytype1) {
572 case 1:
573 if (boundarytype2 == 0 || boundarytype2 == 4) {
574
577 } else if (boundarytype2 == 1) {
578
579 if (
fabs(potential1 - potential2)
580 < 1e-6 * (1 +
fabs(potential1) +
fabs(potential2))) {
581 printf("neBEMReadGeometry: identical potentials; skipped.\n");
582 printf("Primitive skipped: #%d\n", prim);
584 } else {
585
586 printf("neBEMReadGeometry: different potentials; rejected.\n");
587 return -1;
588 }
589 } else {
590
591 printf(
592 "neBEMReadGeometry: conductor at given potential; rejected.\n");
593 return -1;
594 }
595 break;
596
597 case 2:
598 if ((boundarytype2 == 0) || (boundarytype2 == 4)) {
599
602 } else {
603 printf("neBEMReadGeometry: charged conductor; rejected.\n");
604 return -1;
605 }
606 break;
607
608 case 3:
609 if ((boundarytype2 == 0) || (boundarytype2 == 4)) {
610
614 } else {
615 printf("neBEMReadGeometry: floating conductor; rejected.\n");
616 return -1;
617 }
618 break;
619
620 case 4:
621 if (boundarytype2 == 0) {
622
623
624
626 Lambda[prim] = (epsilon1 - epsilon2) / (epsilon1 + epsilon2);
627
628 } else if (boundarytype2 == 1) {
629
632 } else if (boundarytype2 == 2) {
633
636 } else if (boundarytype2 == 3) {
637
639 } else if (boundarytype2 == 4) {
640
641 if (
fabs(epsilon1 - epsilon2) <
642 1e-6 * (1 +
fabs(epsilon1) +
fabs(epsilon2))) {
643
644 printf(
645 "neBEMReadGeometry: between identical dielectrica; skipd.\n");
646 printf("Primitive skipped: #%d\n", prim);
648 } else {
649
650
651
653 Lambda[prim] = (epsilon1 - epsilon2) / (epsilon1 + epsilon2);
654
655 }
656 } else if (boundarytype2 == 5) {
657
658 if (
fabs(epsilon1 - epsilon2)
659 < 1e-6 * (1 +
fabs(epsilon1) +
fabs(epsilon2))) {
660 printf(
661 "neBEMReadGeometry: between identical dielectrica; skipped.\n");
662 printf("Primitive skipped: #%d\n", prim);
664 } else {
665
668 Lambda[prim] = (epsilon1 - epsilon2) / (epsilon1 + epsilon2);
669 }
670 }
671 else {
672 printf("neBEMReadGeometry: unknown dielectric; rejected.\n");
673 return -1;
674 }
675 break;
676
677 case 5:
678 if (boundarytype2 == 0) {
681 Lambda[prim] = (epsilon1 - epsilon2) / (epsilon1 + epsilon2);
682
683 } else if (boundarytype2 == 4) {
684 if (
fabs(epsilon1 - epsilon2) <
685 1e-6 * (1 +
fabs(epsilon1) +
fabs(epsilon2))) {
686
687 printf(
688 "neBEMReadGeometry: between identical dielectrica; skipd.\n");
689 printf("Primitive skipped: #%d\n", prim);
691 } else {
692
695 Lambda[prim] = (epsilon1 - epsilon2) / (epsilon1 + epsilon2);
696
697 }
698 }
699 else {
700 printf(
701 "neBEMReadGeometry: charged dielectric adjacent to a conductor; "
702 "rejected.\n");
703 return -1;
704 }
705 break;
706
707 case 6:
708 if (boundarytype2 == 0) {
710 } else {
711 printf("neBEMReadGeometry: E-parallel symmetry; rejected.\n");
712 return -1;
713 }
714 break;
715
716 case 7:
717 if (boundarytype2 == 0) {
719 } else {
720 printf("neBEMReadGeometry: E-perpendicular symmetry; rejected.\n");
721 return -1;
722 }
723 break;
724
725 default:
726 printf("neBEMReadGeometry: Boundary type 1: %d\n", boundarytype1);
727 printf("neBEMReadGeometry: Boundary type 2: %d\n", boundarytype2);
728 printf("neBEMReadGeometry: out of range ... exiting.\n");
729 return -1;
730 }
731
733 printf(
734 "\tType: %d, ApplPot: %lg, Epsilon1: %lg, Epsilon2: %lg, Lambda: "
735 "%lg, ApplCh: %lg\n",
738 }
739
740
741
742
743
744
745
746
747
748 {
749 int ix, iy, iz;
750 int jx, jy, jz;
751 double sx, sy, sz;
753 &jz, &sz);
754 if (fstatus != 0) {
755 neBEMMessage(
"neBEMReadGeometry - neBEMGetPeriodicities");
756 return -1;
757 }
758 if (jx < 0) jx = 0;
759 if (jy < 0) jy = 0;
760 if (jz < 0) jz = 0;
761
765 if (0) {
766 printf("For primitive: %d\n", prim);
767 printf("\tPeriodicTypeX: %d, PeriodicTypeY: %d, PeriodicTypeZ: %d\n",
768 ix, iy, iz);
769 printf("\tPeriodicInX: %d, PeriodicInY: %d, PeriodicInZ: %d\n", jx, jy,
770 jz);
771 printf("\tXPeriod: %lg, YPeriod: %lg, ZPeriod: %lg\n", sx, sy, sz);
772 }
773 if (ix > 0) {
774
775
776
779 } else {
782 }
783 if (iy > 0) {
786 } else {
789 }
790 if (iz > 0) {
793 } else {
796 }
797 }
798
799
800
801
802
803
804 {
805 int ix, iy, iz;
806 int jx, jy, jz;
807 double sx, sy, sz;
808 fstatus =
809 neBEMGetMirror(prim, &ix, &jx, &sx, &iy, &jy, &sy, &iz, &jz, &sz);
810 if (fstatus != 0) {
812 return -1;
813 }
814 if (jx < 0) jx = 0;
815 if (jy < 0) jy = 0;
816 if (jz < 0) jz = 0;
817
821 if (0) {
822 printf("For primitive: %d\n", prim);
823 printf("\tMirrorTypeX: %d, MirrorTypeY: %d, MirrorTypeZ: %d\n", ix, iy,
824 iz);
825 printf("\tNOT USED ==> MirrorInX: %d, MirrorInY: %d, MirrorInZ: %d\n",
826 jx, jy, jz);
827 printf("\tMirrorDistX: %lg, MirrorDistY: %lg, MirrorDistZ: %lg\n", sx,
828 sy, sz);
829 getchar();
830 }
831 if (ix > 0) {
832
834 } else {
836 }
837 if (iy > 0) {
838
840 } else {
842 }
843 if (iz > 0) {
844
846 } else {
848 }
849 }
850
851
852
853
854
855
856
857 int ixmin, ixmax, iymin, iymax, izmin, izmax;
858 double cxmin, cxmax, cymin, cymax, czmin, czmax;
859 double vxmin, vxmax, vymin, vymax, vzmin, vzmax;
861 &ixmin, &cxmin, &vxmin, &ixmax, &cxmax, &vxmax, &iymin, &cymin, &vymin,
862 &iymax, &cymax, &vymax, &izmin, &czmin, &vzmin, &izmax, &czmax, &vzmax);
863 if (fstatus != 0) {
864 neBEMMessage(
"neBEMReadGeometry - neBEMGetBoundingPlanes");
865 return -1;
866 }
873 if (ixmin) {
876 } else {
879 }
880 if (ixmax > 0) {
883 } else {
886 }
887 if (iymin > 0) {
890 } else {
893 }
894 if (iymax > 0) {
897 } else {
900 }
901 if (izmin > 0) {
904 } else {
907 }
908 if (izmax > 0) {
911 } else {
914 }
915 }
916
925 for (
int volref = 0; volref <=
VolMax; ++volref) {
929 if (dbgFn) {
930 printf("volref: %d\n", volref);
931 printf(
"shape: %d, material: %d\n",
volShape[volref],
935 }
936 }
937
938
939
940
941 {
946 }
947
948 {
949
950
951 int NbSkipped = 0, effprim;
952 double DVertex[4], minDVertex = 0.0;
954 effprim = prim - NbSkipped;
955
956
957 for (
int vert = 0; vert <
NbVertices[prim] - 1; ++vert) {
958 DVertex[vert] =
965 if (vert == 0)
966 minDVertex = DVertex[vert];
967 else {
968 if (DVertex[vert] < minDVertex) minDVertex = DVertex[vert];
969 }
970 }
971
977 for (
int vert = 0; vert <
NbVertices[effprim]; ++vert) {
981 }
983 {
984 XNorm[effprim] = 0.0;
985 YNorm[effprim] = 0.0;
986 ZNorm[effprim] = 0.0;
988 }
994 }
997
1037 }
1038 else {
1041 ++NbSkipped;
1043 printf("Skipped primitive %d, InterfaceType: %d, minDVertex: %lg\n",
1045 }
1046 }
1047 }
1049 printf("Number of primitives skipped: %d, Effective NbPrimitives: %d\n",
1051 }
1052
1054 int NbRmPrims;
1055 FILE *rmprimFile = fopen("neBEMInp/neBEMRmPrim.inp", "r");
1056 if (rmprimFile == NULL) {
1057 printf("neBEMRmPrim.inp absent ... assuming defaults ...\n");
1058 NbRmPrims = 0;
1059 } else {
1060 fscanf(rmprimFile, "NbRmPrims: %d\n", &NbRmPrims);
1061 if (NbRmPrims) {
1062 int tint;
1063#ifdef __cplusplus
1064 std::vector<double> rmXNorm(NbRmPrims + 1, 0.);
1065 std::vector<double> rmYNorm(NbRmPrims + 1, 0.);
1066 std::vector<double> rmZNorm(NbRmPrims + 1, 0.);
1067 std::vector<double> rmXVert(NbRmPrims + 1, 0.);
1068 std::vector<double> rmYVert(NbRmPrims + 1, 0.);
1069 std::vector<double> rmZVert(NbRmPrims + 1, 0.);
1070#else
1071 double rmXNorm[NbRmPrims + 1], rmYNorm[NbRmPrims + 1];
1072 double rmZNorm[NbRmPrims + 1];
1073 double rmXVert[NbRmPrims + 1], rmYVert[NbRmPrims + 1];
1074 double rmZVert[NbRmPrims + 1];
1075#endif
1076 for (int rmprim = 1; rmprim <= NbRmPrims; ++rmprim) {
1077 fscanf(rmprimFile, "Prim: %d\n", &tint);
1078 fscanf(rmprimFile, "rmXNorm: %le\n", &rmXNorm[rmprim]);
1079 fscanf(rmprimFile, "rmYNorm: %le\n", &rmYNorm[rmprim]);
1080 fscanf(rmprimFile, "rmZNorm: %le\n", &rmZNorm[rmprim]);
1081 fscanf(rmprimFile, "rmXVert: %le\n", &rmXVert[rmprim]);
1082 fscanf(rmprimFile, "rmYVert: %le\n", &rmYVert[rmprim]);
1083 fscanf(rmprimFile, "rmZVert: %le\n", &rmZVert[rmprim]);
1084 printf(
1085 "rmprim: %d, rmXNorm: %lg, rmYNorm: %lg, rmZNorm: %lg, "
1086 "rmXVert: %lg, rmYVert: %lg, rmZVert: %lg\n",
1087 rmprim, rmXNorm[rmprim], rmYNorm[rmprim], rmZNorm[rmprim],
1088 rmXVert[rmprim], rmYVert[rmprim], rmZVert[rmprim]);
1089 }
1090#ifdef __cplusplus
1092#else
1094#endif
1095
1097 remove[prim] = 0;
1098 if (dbgFn) {
1099 printf("\n\nprim: %d, XVertex: %lg, YVertex: %lg, ZVertex: %lg\n",
1102 printf(
"XNorm: %lg, YNorm: %lg, ZNorm: %lg\n",
XNorm[prim],
1104 }
1105
1106 for (int rmprim = 1; rmprim <= NbRmPrims; ++rmprim) {
1107 if (dbgFn) {
1108 printf(
1109 "rmprim: %d, rmXVertex: %lg, rmYVertex: %lg, rmZVertex: "
1110 "%lg\n",
1111 rmprim, rmXVert[rmprim], rmYVert[rmprim], rmZVert[rmprim]);
1112 printf("rmXNorm: %lg, rmYNorm: %lg, rmZNorm: %lg\n",
1113 rmXNorm[rmprim], rmYNorm[rmprim], rmZNorm[rmprim]);
1114 }
1115
1116
1123
1124
1125
1126
1127
1128
1130
1132 remove[prim] = 1;
1133 }
1134 }
1136
1138 remove[prim] = 1;
1139 }
1140 }
1142
1144 remove[prim] = 1;
1145 }
1146 }
1147 }
1148 if (dbgFn) {
1149 printf("prim: %d, rmprim: %d, remove: %d\n", prim, rmprim,
1150 remove[prim]);
1151 }
1152 if (remove[prim] == 1)
1153 break;
1154 }
1155
1156 }
1157
1158 int NbRemoved = 0;
1159 char RmPrimFile[256];
1161 strcat(RmPrimFile, "/RmPrims.info");
1162 FILE *fprrm = fopen(RmPrimFile, "w");
1163 if (fprrm == NULL) {
1164 printf(
1165 "error opening RmPrims.info file in write mode ... "
1166 "returning\n");
1167
1168 fclose(rmprimFile);
1169 return (-1);
1170 }
1171
1172
1173 int orgnlNb = 0;
1175
1177 ++orgnlprim) {
1179 prim)
1180 {
1181 orgnlNb = orgnlprim;
1182 break;
1183 }
1184 }
1185
1186 if (remove[prim] == 1) {
1187 ++NbRemoved;
1189 fprintf(fprrm, "NbRemoved: %d, Removed primitive: %d\n",
1190 NbRemoved, prim);
1191 fprintf(fprrm,
"PrimType: %d\n",
PrimType[prim]);
1192 fprintf(fprrm,
"NbVertices: %d\n",
NbVertices[prim]);
1193 for (
int vert = 0; vert <
NbVertices[prim]; ++vert) {
1194 fprintf(fprrm, "Vertx %d: %lg, %lg, %lg\n", vert,
1197 }
1198 fprintf(fprrm,
"Normals: %lg, %lg, %lg\n",
XNorm[prim],
1200 continue;
1201 }
1202 else {
1203 int effprim = prim - NbRemoved;
1204
1208 for (
int vert = 0; vert <
NbVertices[effprim]; ++vert) {
1212 }
1214
1215 XNorm[effprim] = 0.0;
1216 YNorm[effprim] = 0.0;
1217 ZNorm[effprim] = 0.0;
1219 }
1225 }
1228
1268 }
1269 }
1270
1271 fclose(fprrm);
1272
1274 printf(
1275 "Number of primitives removed: %d, Effective NbPrimitives: %d\n",
1277 fflush(stdout);
1278 }
1279 fclose(rmprimFile);
1280 }
1281 }
1282
1283
1284 char IgnorePrimFile[256];
1286 strcat(IgnorePrimFile, "/IgnorePrims.info");
1287 FILE *fignore = fopen(IgnorePrimFile, "w");
1288 if (fignore == NULL) {
1289 printf(
1290 "error opening IgnorePrims.info file in write mode ... returning\n");
1291 return (-1);
1292 }
1293
1297 }
1298
1299 fclose(fignore);
1300 }
1301
1302
1303 printf("ROM: switch to primitive representation after %d repetitions.\n",
1305
1306
1307 char NativeInFile[256];
1308
1310 strcat(NativeInFile, "/neBEMNative.inp");
1311 FILE *fNativeInFile = fopen(NativeInFile, "w");
1312 fprintf(fNativeInFile, "#====>Input directory\n");
1314 fprintf(fNativeInFile, "#====>No. of primitives:\n");
1316 fprintf(fNativeInFile, "#====>No. of volumes:\n");
1317 fprintf(fNativeInFile,
"%d\n",
VolMax);
1319 char strPrimNb[11];
1320 snprintf(strPrimNb, 11, "%d", prim);
1321 char NativePrimFile[256];
1322 strcpy(NativePrimFile, "Primitive");
1323 strcat(NativePrimFile, strPrimNb);
1324 strcat(NativePrimFile, ".inp");
1325
1326 fprintf(fNativeInFile, "#Input filename for primitive:\n");
1327 fprintf(fNativeInFile, "%s\n", NativePrimFile);
1328
1330 strcat(NativePrimFile, "/Primitive");
1331 strcat(NativePrimFile, strPrimNb);
1332 strcat(NativePrimFile, ".inp");
1333
1334 FILE *fNativePrim = fopen(NativePrimFile, "w");
1335
1336 fprintf(fNativePrim, "#Number of vertices:\n");
1337 fprintf(fNativePrim,
"%d\n",
NbVertices[prim]);
1338 for (
int vertex = 0; vertex <
NbVertices[prim]; ++vertex) {
1339 fprintf(fNativePrim, "#Vertex %d:\n", vertex);
1340 fprintf(fNativePrim,
"%lg %lg %lg\n",
XVertex[prim][vertex],
1342 }
1343 fprintf(fNativePrim, "#Outward normal:\n");
1344 fprintf(fNativePrim,
"%lg %lg %lg\n",
XNorm[prim],
YNorm[prim],
1346 fprintf(fNativePrim, "#Volume references:\n");
1348 fprintf(fNativePrim, "#Maximum number of segments:\n");
1349 fprintf(fNativePrim, "%d %d\n", 0, 0);
1350 fprintf(fNativePrim, "#Information on X periodicity:\n");
1353 fprintf(fNativePrim, "#Information on Y periodicity:\n");
1356 fprintf(fNativePrim, "#Information on Z periodicity:\n");
1359
1360 fclose(fNativePrim);
1361 }
1362
1363 fprintf(fNativeInFile, "#====>No. of boundary conditions per element:\n");
1364 fprintf(fNativeInFile, "%d\n", 1);
1365 fprintf(fNativeInFile, "#====>Device output directory name:\n");
1366 fprintf(fNativeInFile, "NativeResults\n");
1367 fprintf(fNativeInFile, "#====>Map input file:\n");
1368 fprintf(fNativeInFile, "MapFile.inp\n");
1369 fclose(fNativeInFile);
1370
1371 for (
int volume = 0; volume <=
VolMax; ++volume) {
1372
1373
1374 int shape, material, boundarytype;
1375 double epsilon, potential, charge;
1377 &charge, &boundarytype);
1378
1379 char strVolNb[11];
1380 snprintf(strVolNb, 11, "%d", volume);
1381 char NativeVolFile[256];
1383 strcat(NativeVolFile, "/Volume");
1384 strcat(NativeVolFile, strVolNb);
1385 strcat(NativeVolFile, ".inp");
1386
1387 FILE *fNativeVol = fopen(NativeVolFile, "w");
1388
1389 fprintf(fNativeVol, "#Shape of the volume:\n");
1390 fprintf(fNativeVol, "%d\n", shape);
1391 fprintf(fNativeVol, "#Material of the volume:\n");
1392 fprintf(fNativeVol, "%d\n", material);
1393 fprintf(fNativeVol, "#Relative permittivity:\n");
1394 fprintf(fNativeVol, "%lg\n", epsilon);
1395 fprintf(fNativeVol, "#Potential:\n");
1396 fprintf(fNativeVol, "%lg\n", potential);
1397 fprintf(fNativeVol, "#Charge:\n");
1398 fprintf(fNativeVol, "%lg\n", charge);
1399 fprintf(fNativeVol, "#Boundary type:\n");
1400 fprintf(fNativeVol, "%d\n", boundarytype);
1401
1402 fclose(fNativeVol);
1403 }
1404
1405
1406 {
1407 char NativeMapFile[256];
1408
1410 strcat(NativeMapFile, "/MapFile.inp");
1411
1412 FILE *fNativeMap = fopen(NativeMapFile, "w");
1413
1414 fprintf(fNativeMap, "#Number of maps\n");
1415 fprintf(fNativeMap, "%d\n", 0);
1416 fprintf(fNativeMap, "#Number of lines\n");
1417 fprintf(fNativeMap, "%d\n", 0);
1418 fprintf(fNativeMap, "#Number of points\n");
1419 fprintf(fNativeMap, "%d\n", 0);
1420
1421 fclose(fNativeMap);
1422 }
1423
1424
1428 if (fstatus) {
1429 neBEMMessage(
"neBEMReadGeometry - problem writing Primtives.\n");
1430 return -1;
1431 }
1432 }
1433
1436 "neBEMReadGeometry - unformatted write not inplemented yet.\n");
1437 return -1;
1438 }
1439 }
1440
1441 printf("neBEMReadGeometry: Geometry read!\n");
1442
1444
1447 printf("to read geometry\n");
1448
1449 return (0);
1450}
DoubleAc fabs(const DoubleAc &f)
DoubleAc sqrt(const DoubleAc &f)
int WritePrimitives(void)
INTFACEGLOBAL int neBEMGetBoundingPlanes(int *ixmin, double *cxmin, double *vxmin, int *ixmax, double *cxmax, double *vxmax, int *iymin, double *cymin, double *vymin, int *iymax, double *cymax, double *vymax, int *izmin, double *czmin, double *vzmin, int *izmax, double *czmax, double *vzmax)
INTFACEGLOBAL int neBEMVolumeDescription(int ivol, int *shape, int *material, double *epsilon, double *potential, double *charge, int *boundarytype)
INTFACEGLOBAL int neBEMGetNbPrimitives(void)
INTFACEGLOBAL int OptPrintVolumeDetails
INTFACEGLOBAL int neBEMGetPrimitive(int prim, int *nvertex, double xvert[], double yvert[], double zvert[], double *xnorm, double *ynorm, double *znorm, int *volref1, int *volref2)
INTFACEGLOBAL int neBEMGetMirror(int prim, int *ix, int *jx, double *sx, int *iy, int *jy, double *sy, int *iz, int *jz, double *sz)
INTFACEGLOBAL int OptPrintPrimaryDetails
INTFACEGLOBAL int neBEMGetPeriodicities(int prim, int *ix, int *jx, double *sx, int *iy, int *jy, double *sy, int *iz, int *jz, double *sz)
neBEMGLOBAL int * PeriodicInY
neBEMGLOBAL int * volMaterial
neBEMGLOBAL int * NbElmntsOnPrim
neBEMGLOBAL int OptRmPrim
neBEMGLOBAL int * MirrorTypeZ
neBEMGLOBAL double * MirrorDistYFromOrigin
neBEMGLOBAL int OptStorePrimitives
neBEMGLOBAL int MaxNbVertices
neBEMGLOBAL int * BndPlaneInYMax
neBEMGLOBAL double * XBndPlaneInXMax
neBEMGLOBAL double * YBndPlaneInYMin
neBEMGLOBAL int ** OrgnlToEffPrim
neBEMGLOBAL double * ZPeriod
neBEMGLOBAL double * VBndPlaneInZMin
neBEMGLOBAL int * BndPlaneInXMax
neBEMGLOBAL double * YBndPlaneInYMax
neBEMGLOBAL double * PrimOriginZ
neBEMGLOBAL int * PeriodicTypeX
neBEMGLOBAL double * VBndPlaneInYMax
neBEMGLOBAL double * ZBndPlaneInZMax
neBEMGLOBAL int * PeriodicTypeY
neBEMGLOBAL double * Epsilon1
neBEMGLOBAL double * PrimOriginY
neBEMGLOBAL double * MirrorDistZFromOrigin
neBEMGLOBAL DirnCosn3D * PrimDC
neBEMGLOBAL int * BndPlaneInZMin
neBEMGLOBAL double * VBndPlaneInXMin
neBEMGLOBAL int NbFloatingConductors
neBEMGLOBAL double * XPeriod
neBEMGLOBAL double * volEpsilon
neBEMGLOBAL double * volPotential
neBEMGLOBAL double * VBndPlaneInZMax
neBEMGLOBAL double * AvAsgndChDen
neBEMGLOBAL double * XBndPlaneInXMin
neBEMGLOBAL int * BndPlaneInXMin
neBEMGLOBAL int * MirrorTypeY
neBEMGLOBAL double * AvChDen
neBEMGLOBAL int * MirrorTypeX
neBEMGLOBAL int * BndPlaneInZMax
neBEMGLOBAL int * BndPlaneInYMin
neBEMGLOBAL double * PrimLX
neBEMGLOBAL double * PrimOriginX
neBEMGLOBAL int * PeriodicInZ
neBEMGLOBAL int * PeriodicInX
neBEMGLOBAL double * ZBndPlaneInZMin
neBEMGLOBAL double * VBndPlaneInYMin
neBEMGLOBAL double * volCharge
neBEMGLOBAL int OrgnlNbPrimitives
neBEMGLOBAL int * volBoundaryType
neBEMGLOBAL int * PeriodicTypeZ
neBEMGLOBAL double * YPeriod
neBEMGLOBAL double * PrimLZ
neBEMGLOBAL int * volShape
neBEMGLOBAL double * MirrorDistXFromOrigin
neBEMGLOBAL double * VBndPlaneInXMax
neBEMGLOBAL double * Epsilon2
double ** dmatrix(long nrl, long nrh, long ncl, long nch)
int ** imatrix(long nrl, long nrh, long ncl, long nch)