/* ---------------------------------------------------------------------- This is the ██╗ ██╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗████████╗███████╗ ██║ ██║██╔════╝ ██╔════╝ ██╔════╝ ██║ ██║╚══██╔══╝██╔════╝ ██║ ██║██║ ███╗██║ ███╗██║ ███╗███████║ ██║ ███████╗ ██║ ██║██║ ██║██║ ██║██║ ██║██╔══██║ ██║ ╚════██║ ███████╗██║╚██████╔╝╚██████╔╝╚██████╔╝██║ ██║ ██║ ███████║ ╚══════╝╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝® DEM simulation engine, released by DCS Computing Gmbh, Linz, Austria http://www.dcs-computing.com, office@dcs-computing.com LIGGGHTS® is part of CFDEM®project: http://www.liggghts.com | http://www.cfdem.com Core developer and main author: Christoph Kloss, christoph.kloss@dcs-computing.com LIGGGHTS® is open-source, distributed under the terms of the GNU Public License, version 2 or later. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You should have received a copy of the GNU General Public License along with LIGGGHTS®. If not, see http://www.gnu.org/licenses . See also top-level README and LICENSE files. LIGGGHTS® and CFDEM® are registered trade marks of DCS Computing GmbH, the producer of the LIGGGHTS® software and the CFDEM®coupling software See http://www.cfdem.com/terms-trademark-policy for details. ------------------------------------------------------------------------- Contributing author and copyright for this file: (if no contributing author is listed, this file has been contributed by the core developer) Copyright 2014- DCS Computing GmbH, Linz ------------------------------------------------------------------------- */ #ifdef LAMMPS_VTK #include #include #include #include "dump_local_gran_vtk.h" #include "atom.h" #include "force.h" #include "domain.h" #include "region.h" #include "group.h" #include "input.h" #include "variable.h" #include "update.h" #include "modify.h" #include "compute.h" #include "compute_pair_gran_local.h" #include "fix.h" #include "memory.h" #include "error.h" #include "sort_buffer.h" #include #include #include #ifndef VTK_MAJOR_VERSION #include #endif #include #include #include #include #include #include #include #include #include using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ DumpLocalGranVTK::DumpLocalGranVTK(LAMMPS *lmp, int narg, char **arg) : Dump(lmp, narg, arg), DumpVTK(lmp), filecurrent(NULL) { clearstep = 1; nevery = force->inumeric(FLERR,arg[3]); if(narg < 6) error->all(FLERR,"dump local/gran/vtk requires 6 arguments"); label = NULL; std::list allowed_extensions; allowed_extensions.push_back(VTK_FILE_FORMATS::VTK); allowed_extensions.push_back(VTK_FILE_FORMATS::VTU); allowed_extensions.push_back(VTK_FILE_FORMATS::PVTU); allowed_extensions.push_back(VTK_FILE_FORMATS::VTP); allowed_extensions.push_back(VTK_FILE_FORMATS::PVTP); DumpVTK::identify_file_type(filename, allowed_extensions, style, multiproc, nclusterprocs, filewriter, fileproc, world, clustercomm); filecurrent = NULL; dumpLocalGran = new DumpLocalGran(lmp, igroup, nclusterprocs, multiproc, nevery, filewriter, fileproc); dumpLocalGran->parse_parameters(narg-5, &arg[5], true); if (!vtkMultiProcessController::GetGlobalController()) { vtkMPIController *vtkController = vtkMPIController::New(); vtkController->Initialize(); vtkMultiProcessController::SetGlobalController(vtkController); } } /* ---------------------------------------------------------------------- */ DumpLocalGranVTK::~DumpLocalGranVTK() { delete [] filecurrent; delete [] label; delete dumpLocalGran; } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::init_style() { dumpLocalGran->init_style(); // setup function ptrs header_choice = &DumpLocalGranVTK::header_vtk; if (vtk_file_format_ == VTK_FILE_FORMATS::VTP || vtk_file_format_ == VTK_FILE_FORMATS::PVTP) write_choice = &DumpLocalGranVTK::write_vtp; else if (vtk_file_format_ == VTK_FILE_FORMATS::VTU || vtk_file_format_ == VTK_FILE_FORMATS::PVTU) write_choice = &DumpLocalGranVTK::write_vtu; else write_choice = &DumpLocalGranVTK::write_vtk; // register next call for next multiple of nevery const bigint nextCall = ((update->ntimestep+nevery-1)/nevery)*nevery; // ceil to next nevery dumpLocalGran->registerNextCall(nextCall); } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::write_header(bigint /*ndump*/) { } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::header_vtk(bigint) { } /* ---------------------------------------------------------------------- */ int DumpLocalGranVTK::count() { return 0; } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::write() { // nme = # of dump lines this proc contributes to dump mbSet = vtkSmartPointer::New(); bool usePolyData = false; if (vtk_file_format_ == VTK_FILE_FORMATS::VTP || vtk_file_format_ == VTK_FILE_FORMATS::PVTP) usePolyData = true; #ifndef UNSTRUCTURED_GRID_VTK if (vtk_file_format_ == VTK_FILE_FORMATS::VTK) usePolyData = true; #endif dumpLocalGran->prepare_mbSet(mbSet, usePolyData); if (filewriter) write_data(0, NULL); dumpLocalGran->registerNextCall(update->ntimestep+nevery); } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::write_data(int n, double *mybuf) { (this->*write_choice)(n,mybuf); } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::setFileCurrent() { DumpVTK::setFileCurrent(filecurrent, filename, multifile, padflag); } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::write_vtk(int n, double *mybuf) { setFileCurrent(); #ifdef UNSTRUCTURED_GRID_VTK vtkSmartPointer unstructuredGrid = mbSet->GetBlock(0); DumpVTK::write_vtk_unstructured_grid(unstructuredGrid, filecurrent); #else vtkSmartPointer polyData = mbSet->GetBlock(0); DumpVTK::write_vtk_poly(polyData, filecurrent); #endif } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::write_vtp(int n, double *mybuf) { setFileCurrent(); vtkSmartPointer polyData = mbSet->GetBlock(0); DumpVTK::write_vtp(polyData, filecurrent); } /* ---------------------------------------------------------------------- */ void DumpLocalGranVTK::write_vtu(int n, double *mybuf) { setFileCurrent(); vtkSmartPointer unstructuredGrid = mbSet->GetBlock(0); DumpVTK::write_vtu(unstructuredGrid, filecurrent); } /* ---------------------------------------------------------------------- */ int DumpLocalGranVTK::modify_param(int narg, char **arg) { if (strcmp(arg[0],"label") == 0) { if (narg < 2) error->all(FLERR,"Illegal dump_modify command [label]"); delete [] label; int n = strlen(arg[1]) + 1; label = new char[n]; strcpy(label,arg[1]); return 2; } const int mvtk = DumpVTK::modify_param(narg, arg); if (mvtk > 0) return mvtk; return dumpLocalGran->modify_param(narg, arg); } /* ---------------------------------------------------------------------- return # of bytes of allocated memory in buf, choose, variable arrays ------------------------------------------------------------------------- */ bigint DumpLocalGranVTK::memory_usage() { bigint bytes = Dump::memory_usage(); bytes += dumpLocalGran->memory_usage(); return bytes; } #endif