MCPcopy Create free account
hub / github.com/SeisSol/SeisSol / NetcdfReader

Method NetcdfReader

src/Geometry/NetcdfReader.cpp:30–575  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28namespace seissol::geometry {
29
30NetcdfReader::NetcdfReader(int rank, int nProcs, const char* meshFile)
31 : seissol::geometry::MeshReader(rank) {
32 // Open nc file
33 int ncFile = 0;
34 int masterRank = 0;
35 unsigned int groupSize = 1;
36#ifdef USE_MPI
37 groupSize = utils::Env::get<unsigned int>("SEISSOL_NETCDF_GROUP_SIZE", 1);
38 if (nProcs % groupSize != 0) {
39 logError() << "#Processes must be a multiple of the group size" << groupSize;
40 }
41
42 const int master = (rank / groupSize) * groupSize;
43 MPI_Comm commMaster = MPI_COMM_NULL;
44 MPI_Comm_split(
45 seissol::MPI::mpi.comm(), rank % groupSize == 0 ? 1 : MPI_UNDEFINED, rank, &commMaster);
46
47 masterRank = -1;
48
49 if (commMaster != MPI_COMM_NULL) {
50#ifdef NETCDF_PASSIVE
51 logError() << "netCDF master found with netCDF passive support only";
52#else // NETCDF_PASSIVE
53 MPI_Comm_rank(commMaster, &masterRank);
54 checkNcError(nc_open_par(meshFile, NC_NETCDF4 | NC_MPIIO, commMaster, MPI_INFO_NULL, &ncFile));
55#endif // NETCDF_PASSIVE
56 }
57#else // USE_MPI
58 masterRank = rank; // = 0;
59 checkNcError(nc_open(meshFile, NC_NETCDF4, &ncFile));
60#endif // USE_MPI
61
62 size_t bndSize = -1;
63 size_t bndElemSize = -1;
64
65 int ncVarElemSize = -1;
66 int ncVarElemVertices = -1;
67 int ncVarElemNeighbors = -1;
68 int ncVarElemBoundaries = -1;
69 int ncVarElemNeighborSides = -1;
70 int ncVarElemSideOrientations = -1;
71 int ncVarElemNeighborRanks = -1;
72 int ncVarElemMPIIndices = -1;
73 int ncVarElemGroup = -1;
74 bool hasGroup = false;
75 int ncVarVrtxSize = -1;
76 int ncVarVrtxCoords = -1;
77 int ncVarBndSize = -1;
78 int ncVarBndElemSize = -1;
79 int ncVarBndElemRank = -1;
80 int ncVarBndElemLocalIds = -1;
81
82 int* sizes = nullptr;
83 int maxSize = 0;
84 if (masterRank == 0) {
85#ifdef NETCDF_PASSIVE
86 assert(false);
87#else // NETCDF_PASSIVE

Callers

nothing calls this directly

Calls 3

checkNcErrorFunction · 0.85
commMethod · 0.80
resizeMethod · 0.80

Tested by

no test coverage detected