Modified structured grid output (ASCII) of the calculated variables rho,c,v,u,... for the forced response cases
Structured Output written for a single flame (case 1) or a flame with a plenum above. Used in Matlab in order to compute the transfer functions of the flames via the velocity perturbations of the centerline and the flame surface perturbations computed, see flameSurfaceArea.
find cell on r_min in the left lower corner of the flame tube (= inlet of tube from plenum), only in the first iteration order of output: rows: x; columns: y
259 {
263 FILE* datei;
264 datei = fopen("pressureSensor", "a+");
266 fprintf(datei,
" %f",
fvSolver().m_time);
268 fprintf(datei,
" %-10.10f",
fvSolver().m_meanPressure);
270 fprintf(datei,
" %-10.10f",
lsSolver().m_arcLength);
271 fprintf(datei,
" %-10.10f",
fvSolver().m_totalHeatReleaseRate);
272 fprintf(datei,
" %-10.10f",
lsSolver().m_minFlameFrontPosition[1]);
273 fprintf(datei,
" %-10.10f",
lsSolver().m_maxFlameFrontPosition[1]);
274 fprintf(datei,
" %-10.10f",
lsSolver().m_meanFlameFrontPosition[1]);
275 fprintf(datei, "\n");
276 fclose(datei);
277 }
278 }
279
283 FILE* datei;
284 datei = fopen("flameFrontData", "a+");
286 fprintf(datei,
" %f",
fvSolver().m_time);
287 fprintf(datei,
" %f",
lsSolver().m_arcLength);
288 fprintf(datei,
" %-10.15f",
lsSolver().m_minFlameFrontPosition[1]);
289 fprintf(datei,
" %-10.15f",
lsSolver().m_maxFlameFrontPosition[1]);
290 fprintf(datei, "\n");
291 fclose(datei);
292 }
293 }
294
297 FILE* datei00;
298 datei00 = fopen("flameSurfaceAreaROH_steady", "a+");
300 fprintf(datei00,
" %f",
fvSolver().m_time);
301 fprintf(datei00,
" %-10.10f",
lsSolver().m_massConsumption);
302 fprintf(datei00,
" %-10.10f",
fvSolver().m_totalHeatReleaseRate);
303 fprintf(datei00,
" %-10.10f",
lsSolver().m_arcLength);
304 fprintf(datei00, "\n");
305 fclose(datei00);
306 }
307
308
309 if(
fvSolver().m_combustion && (
fvSolver().m_structuredFlameOutput ||
fvSolver().m_structuredFlameOutputLevel == 7)) {
311 MInt sweepStartRow = 0;
313 MInt sample, currentCycle;
318
319
320
322
324
325
328
330 FILE* datei0;
331 datei0 = fopen("flameSurfaceAreaROH", "a+");
333 fprintf(datei0, " %d", currentCycle);
334 fprintf(datei0, " %d", sample);
335 fprintf(datei0,
" %f",
fvSolver().m_time);
336 fprintf(datei0, " %f", forcingAmplitude);
337 fprintf(datei0,
" %-10.10f",
lsSolver().m_massConsumption);
338 fprintf(datei0,
" %-10.10f",
fvSolver().m_totalHeatReleaseRate);
339 fprintf(datei0,
" %-10.10f",
lsSolver().m_arcLength);
340 fprintf(datei0, "\n");
341 fclose(datei0);
342 }
343
344
345 switch(
fvSolver().m_structuredFlameOutputLevel) {
346 default: {
348 return;
349 }
350 break;
351 }
352 }
353
354
356
357 FILE* datei;
358 datei = fopen("flameSurfaceArea", "a+");
360 fprintf(datei, " %d", currentCycle);
361 fprintf(datei, " %d", sample);
362 fprintf(datei,
" %f",
fvSolver().m_time);
363 fprintf(datei, " %-10.10f", forcingAmplitude);
364 fprintf(datei,
" %-10.10f",
lsSolver().m_massConsumption);
365 fprintf(datei,
" %-10.10f",
fvSolver().m_totalHeatReleaseRate);
366 fprintf(datei,
" %-10.10f",
lsSolver().m_arcLength);
367 fprintf(datei, "\n");
368 fclose(datei);
369 }
370
371
372 switch(
fvSolver().m_structuredFlameOutputLevel) {
373 default: {
374 if(currentCycle < samplingStartCycle || currentCycle > samplingEndCycle) {
375 return;
376 }
377 break;
378 }
379 }
380
381
392 switch(
fvSolver().m_structuredFlameOutputLevel) {
394 case 400: {
400 MFloat velPOW2 = -9999999.0;
402
410 <= (
MInt)(samplingStartCycle *
fvSolver().m_samplesPerCycle +
fvSolver().m_noTimeStepsBetweenSamples)
412
416 continue;
420 > 0)
421 continue;
424 break;
425 }
426
427 } else {
434 break;
435 }
436 }
437 m_log <<
"Structured Output starting from Cell ... :" << endl;
441
442 cerr << "Structured Output starting from Cell ... :" << endl;
446
447 FILE* pv6;
448 stringstream StartEndCoord;
449 StartEndCoord <<
"out/StartEndCoord_" << currentCycle <<
"_" << (
MInt)sample;
450 pv6 = fopen((StartEndCoord.str()).c_str(), "w");
452 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 0));
453 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 1));
454
455 while(
fvSolver().a_hasNeighbor(current, 1) > 0) {
457 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 0));
458 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 1));
459 }
460 fprintf(pv6, "\n");
461
462
464 while(
fvSolver().a_hasNeighbor(sweepStartRow, 3) > 0) {
466
467
468 while(
fvSolver().a_hasNeighbor(sweepStartRow, 0) > 0
469 &&
fvSolver().a_hasNeighbor(
fvSolver().c_neighborId(sweepStartRow, 0), 3) > 0) {
471 }
472 current = sweepStartRow;
473 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 0));
474 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 1));
475
476 while(
fvSolver().a_hasNeighbor(current, 1) > 0) {
478 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 0));
479 fprintf(pv6,
"%f ",
fvSolver().a_coordinate(current, 1));
480 }
481
482 while(
fvSolver().a_hasNeighbor(sweepStartRow, 3) == 0 &&
fvSolver().a_hasNeighbor(sweepStartRow, 1) > 0) {
484 }
485 fprintf(pv6, "\n");
486 }
487 fclose(pv6);
488 }
489
490 if(((
MInt)sample < (
MInt)(samplingStartCycle *
fvSolver().m_samplesPerCycle))
492 break;
495 "This routine should only be called if lsSolver().m_noSets = 1, which is not the case here... "
496 "Please "
497 "check!");
498 }
499
500
501
502 if(((
MInt)sample < (
MInt)(samplingStartCycle *
fvSolver().m_samplesPerCycle)))
break;
503
504
505 FILE* pv0;
506 FILE* pv1;
507 FILE* pv2;
508 FILE* pv3;
509 FILE* pv4;
510 FILE* pv5;
511 FILE* pv6;
512 stringstream u, v,
p, dpdt, rho, c, G;
513 u <<
"out/u_" << currentCycle <<
"_" << (
MInt)sample;
514 v <<
"out/v_" << currentCycle <<
"_" << (
MInt)sample;
515 p <<
"out/p_" << currentCycle <<
"_" << (
MInt)sample;
516 dpdt <<
"out/dpdt_" << currentCycle <<
"_" << (
MInt)sample;
517 rho <<
"out/rho_" << currentCycle <<
"_" << (
MInt)sample;
518 c <<
"out/c_" << currentCycle <<
"_" << (
MInt)sample;
519 G <<
"out/G_" << currentCycle <<
"_" << (
MInt)sample;
520
521 pv0 = fopen((u.str()).c_str(), "w");
522 pv1 = fopen((v.str()).c_str(), "w");
523 pv2 = fopen((rho.str()).c_str(), "w");
524 pv3 = fopen((
p.str()).c_str(),
"w");
525 pv4 = fopen((c.str()).c_str(), "w");
526 pv5 = fopen((G.str()).c_str(), "w");
527 pv6 = fopen((dpdt.str()).c_str(), "w");
528 if(
fvSolver().m_sweepStartFirstCell < 0) {
529 MString errorMessage =
"sweep start cell is negative";
530 mTerm(1, AT_, errorMessage);
531 }
532
534
535
536 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
537 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
538 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
539 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
540 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
542
544 velPOW2 = F0;
547 velPOW2 +=
POW2(vel);
548 }
549
551
552 pold = gammaMinusOne
555 dPdT -= pold;
556 dPdT *= FtimeStep;
557 fprintf(pv6, "%f ", dPdT);
558
559 while(
fvSolver().a_hasNeighbor(current, 1) > 0) {
561 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
562 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
563 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
564 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
565 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
567
569 velPOW2 = F0;
572 velPOW2 +=
POW2(vel);
573 }
574
576
577 pold = gammaMinusOne
580 dPdT -= pold;
581 dPdT *= FtimeStep;
582 fprintf(pv6, "%f ", dPdT);
583 }
584
585 fprintf(pv0, "\n");
586 fprintf(pv1, "\n");
587 fprintf(pv2, "\n");
588 fprintf(pv3, "\n");
589 fprintf(pv4, "\n");
590 fprintf(pv5, "\n");
591 fprintf(pv6, "\n");
592
594 while(
fvSolver().a_hasNeighbor(sweepStartRow, 3) > 0) {
596
597 while(
fvSolver().a_hasNeighbor(sweepStartRow, 0) > 0
598 &&
fvSolver().a_hasNeighbor(
fvSolver().c_neighborId(sweepStartRow, 0), 3) > 0) {
600 }
601 current = sweepStartRow;
602
603 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
604 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
605 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
606 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
607 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
609
611 velPOW2 = F0;
614 velPOW2 +=
POW2(vel);
615 }
616
618
619 pold = gammaMinusOne
622 dPdT -= pold;
623 dPdT *= FtimeStep;
624 fprintf(pv6, "%f ", dPdT);
625
626
627 while(
fvSolver().a_hasNeighbor(current, 1) > 0) {
629 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
630 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
631 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
632 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
633 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
635
636
638 velPOW2 = F0;
641 velPOW2 +=
POW2(vel);
642 }
644
645 pold = gammaMinusOne
648 dPdT -= pold;
649 dPdT *= FtimeStep;
650 fprintf(pv6, "%f ", dPdT);
651 }
652
653 fprintf(pv0, "\n");
654 fprintf(pv1, "\n");
655 fprintf(pv2, "\n");
656 fprintf(pv3, "\n");
657 fprintf(pv4, "\n");
658 fprintf(pv5, "\n");
659 fprintf(pv6, "\n");
660
661
662 while(
fvSolver().a_hasNeighbor(sweepStartRow, 3) == 0 &&
fvSolver().a_hasNeighbor(sweepStartRow, 1) > 0) {
664 }
665 }
666 fclose(pv0);
667 fclose(pv1);
668 fclose(pv2);
669 fclose(pv3);
670 fclose(pv4);
671 fclose(pv5);
672 fclose(pv6);
673
674 break;
675 }
676
677 case 5: {
678 {
680 const MFloat FgammaMinusOne = F1 / gammaMinusOne;
682 MFloat halfWidth = 9999999.0;
690
691
694
696
697 if(
fvSolver().a_coordinate(cell, 0) > halfWidth ||
fvSolver().a_coordinate(cell, 0) < F0)
continue;
698
699
701
703
704 if(fabs(check) > eps)
mTerm(1, AT_,
"ERROR: coord check failed");
705
706
709 pressure[cnt] *= F1B2;
710
712 heatRelease[cnt] +=
714 heatRelease[cnt] *= F1B2;
715
717
718 cnt++;
719 }
720
721
726
727 MPI_Gather(&cnt, 1, MPI_INT, globalCnt.getPointer(), 1, MPI_INT, root,
fvSolver().mpiComm(), AT_,
"cnt",
728 "globalCnt.getPointer()");
729
731 offsetIO[i] = totalCnt;
732 totalCnt += globalCnt[i];
733 }
735
739
740 MPI_Gatherv(pressure.getPointer(), cnt, MPI_DOUBLE, tmp.getPointer(), globalCnt.getPointer(),
741 offsetIO.getPointer(), MPI_DOUBLE, root,
fvSolver().mpiComm(), AT_,
"pressure.getPointer()",
742 "tmp.getPointer()");
743 MPI_Gatherv(heatRelease.getPointer(), cnt, MPI_DOUBLE, tmp1.getPointer(), globalCnt.getPointer(),
744 offsetIO.getPointer(), MPI_DOUBLE, root,
fvSolver().mpiComm(), AT_,
"heatRelease.getPointer()",
745 "tmp1.getPointer()");
746 MPI_Gatherv(coords.getPointer(), cnt, MPI_DOUBLE, tmp2.getPointer(), globalCnt.getPointer(),
747 offsetIO.getPointer(), MPI_DOUBLE, root,
fvSolver().mpiComm(), AT_,
"coords.getPointer()",
748 "tmp2.getPointer()");
749
750 FILE* pv0;
751 FILE* pv1;
752 FILE* pv2;
753
755 stringstream h;
757
758 p <<
"out/centerline_p";
759 h << "out/centerline_h";
760 y <<
"out/centerline_y";
762 pv0 = fopen((
p.str()).c_str(),
"a+");
763 pv1 = fopen((h.str()).c_str(), "a+");
764 pv2 = fopen((
y.str()).c_str(),
"w");
765
766 for(
MInt c = 0; c < totalCnt; c++) {
767 fprintf(pv0, "%f ", tmp[c]);
768 fprintf(pv0, "\n");
769 fprintf(pv1, "%f ", tmp1[c]);
770 fprintf(pv1, "\n");
771 fprintf(pv2, "%f ", tmp2[c]);
772 fprintf(pv2, "\n");
773 }
774
775 fclose(pv0);
776 fclose(pv1);
777 fclose(pv2);
778 }
779 }
780
782 return;
783 }
784
785 if(((
MInt)sample < (
MInt)(samplingStartCycle *
fvSolver().m_samplesPerCycle)))
break;
786
787 stringstream varFileName;
788 varFileName <<
fvSolver().
outputDir() <<
"Q_" << currentCycle <<
"_" << (
MInt)sample << ParallelIo::fileExt();
789
794 vector<MString> dbVariablesName;
795 vector<MString> idVariablesName;
796 vector<MString> dbParametersName;
797 vector<MString> idParametersName;
798 vector<MString> name;
799
803
808 }
809 stringstream gName;
810 stringstream gCurv;
811 gName << "G";
812 gCurv << "curv";
813
814 name.push_back(gName.str());
817 name.clear();
818 name.push_back(gCurv.str());
820 }
821 {
823 const MFloat FgammaMinusOne = F1 / gammaMinusOne;
828 MFloat velPOW2 = -9999999.0;
830
834
836 dPdT[cell] = F0;
837 dHdT[cell] = F0;
838 h[cell] = F0;
839
841
842
844 velPOW2 = F0;
847 velPOW2 +=
POW2(vel);
848 }
849
851
852 pold = gammaMinusOne
855 dPdT[cell] -= pold;
856 dPdT[cell] *= FtimeStep;
857
863 dHdT[cell] *= FtimeStep;
864 }
865 stringstream dPdTname;
866 stringstream dHdTname;
867 stringstream hName;
868 dPdTname << "dPdT";
869 dHdTname << "dHdT";
870 hName << "h";
871 name.clear();
872 name.push_back(dPdTname.str());
874 name.clear();
875 name.push_back(dHdTname.str());
877 name.clear();
878 name.push_back(hName.str());
880 }
881
882 name.clear();
885 }
888
894 dbParametersName);
896 idParametersName);
899
900
905 fvSolver().noInternalCells(), dbVariables, dbVariablesName, 0, idVariables,
906 idVariablesName, 0, dbParameters, dbParametersName, idParameters,
907 idParametersName,
fvSolver().m_recalcIds);
908 break;
909 }
910 default: {
911 mTerm(1, AT_,
"change solution output format to NETCDF or change code");
912 break;
913 }
914 }
915 break;
916 }
917 default: {
918
919
926 break;
927 }
928
929
930 FILE* pv0;
931 FILE* pv1;
932 FILE* pv2;
933 FILE* pv3;
934 FILE* pv4;
935 FILE* pv5;
936 stringstream u, v,
p, rho, c, G;
937 u <<
"out/u_" << currentCycle <<
"_" << (
MInt)sample;
938 v <<
"out/v_" << currentCycle <<
"_" << (
MInt)sample;
939 p <<
"out/p_" << currentCycle <<
"_" << (
MInt)sample;
940 rho <<
"out/rho_" << currentCycle <<
"_" << (
MInt)sample;
941 c <<
"out/c_" << currentCycle <<
"_" << (
MInt)sample;
942 G <<
"out/G_" << currentCycle <<
"_" << (
MInt)sample;
943 pv0 = fopen((u.str()).c_str(), "w");
944 pv1 = fopen((v.str()).c_str(), "w");
945 pv2 = fopen((rho.str()).c_str(), "w");
946 pv3 = fopen((
p.str()).c_str(),
"w");
947 pv4 = fopen((c.str()).c_str(), "w");
948 pv5 = fopen((G.str()).c_str(), "w");
949
950 current = sweepStart;
951 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
952 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
953 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
954 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
955 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
957 while(
fvSolver().a_hasNeighbor(current, 1) > 0) {
959 if(
ABS(
fvSolver().a_coordinate(current, 0)) > 0.5)
break;
960 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
961 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
962 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
963 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
964 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
966 }
967 fprintf(pv0, "\n");
968 fprintf(pv1, "\n");
969 fprintf(pv2, "\n");
970 fprintf(pv3, "\n");
971 fprintf(pv4, "\n");
972 fprintf(pv5, "\n");
973
974 while(
fvSolver().a_hasNeighbor(sweepStart, 3) > 0) {
976 current = sweepStart;
977
978 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
979 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
980 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
981 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
982 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
984 while(
fvSolver().a_hasNeighbor(current, 1) > 0) {
986 if(
ABS(
fvSolver().a_coordinate(current, 0)) > 0.5)
break;
987 fprintf(pv0,
"%f ",
fvSolver().a_pvariable(current, 0));
988 fprintf(pv1,
"%f ",
fvSolver().a_pvariable(current, 1));
989 fprintf(pv2,
"%f ",
fvSolver().a_pvariable(current, 2));
990 fprintf(pv3,
"%f ",
fvSolver().a_pvariable(current, 3));
991 fprintf(pv4,
"%f ",
fvSolver().a_pvariable(current, 4));
993 }
994 fprintf(pv0, "\n");
995 fprintf(pv1, "\n");
996 fprintf(pv2, "\n");
997 fprintf(pv3, "\n");
998 fprintf(pv4, "\n");
999 fprintf(pv5, "\n");
1000 }
1001 fclose(pv0);
1002 fclose(pv1);
1003 fclose(pv2);
1004 fclose(pv3);
1005 fclose(pv4);
1006 fclose(pv5);
1007 break;
1008 }
1009 }
1010 }
1011}
const MChar ** m_variablesName
MLong c_neighborId(const MInt cellId, const MInt dir, const MBool assertNeighborState=true) const
Returns the grid neighbor id of the grid cell cellId dir.
MFloat m_forcingAmplitude
MFloat c_cellLengthAtCell(const MInt cellId) const
Returns the length of the cell for level.
MFloat & a_oldVariable(const MInt cellId, const MInt varId)
Returns oldVariablesv of the cell cellId variables varId.
void setRestartFileOutputTimeStep()
MInt noInternalCells() const override
Return the number of internal cells within this solver.
MInt m_noTimeStepsBetweenSamples
void saveGridFlowVarsPar(const MChar *fileName, MInt noTotalCells, MLong noInternalCells, MFloatScratchSpace &variables, std::vector< MString > &dbVariablesName, MInt, MIntScratchSpace &idVariables, std::vector< MString > &idVariablesName, MInt, MFloatScratchSpace &dbParameters, std::vector< MString > &dbParametersName, MIntScratchSpace &idParameters, std::vector< MString > &idParametersName, const MInt *recalcIds)
This function stores the massivley parallel flow information of the cells.
MInt m_samplingStartCycle
MFloat & a_coordinate(const MInt cellId, const MInt dir)
Returns the coordinate of the cell from the fvcellcollector cellId for dimension dir.
MInt m_sweepStartFirstCell
MInt noVariables() const override
Return the number of primitive variables.
MFloat & a_reactionRateBackup(const MInt cellId, const MInt reactionId)
Returns the reactionRateBackup of the cell cellId for variables varId.
MInt & a_level(const MInt cellId)
Returns the level of the cell from the fvcellcollector cellId.
MInt a_hasNeighbor(const MInt cellId, const MInt dir, const MBool assertNeighborState=true) const
Returns noNeighborIds of the cell CellId for direction dir.
void computeZeroLevelSetArcLength()
MString outputDir() const
Return the directory for output files.
virtual MInt domainId() const
Return the domainId (rank)
virtual MInt noDomains() const
void collectVariables(T *variablesIn, ScratchSpace< T > &variablesOut, const std::vector< MString > &variablesNameIn, std::vector< MString > &variablesNameOut, const MInt noVars, const MInt noCells, const MBool reverseOrder=false)
generalised helper function for writing restart files! This is necessary for example if the minLevel ...
MInt maxRefinementLevel() const
void collectParameters(T, ScratchSpace< T > &, const MChar *, std::vector< MString > &)
This function collects a single parameters for the massivley parallel IO functions.
MInt string2enum(MString theString)
This global function translates strings in their corresponding enum values (integer values)....
int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Gatherv
int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Gather
constexpr std::underlying_type< FcCell >::type p(const FcCell property)
Converts property name to underlying integer value.